webloom-framework 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/dist/advanced.d.ts +19 -7
- package/dist/advanced.js +4 -4
- package/dist/advanced.js.map +1 -1
- package/dist/{chunk-SX46RHDI.js → chunk-UZAO6ORB.js} +205 -41
- package/dist/chunk-UZAO6ORB.js.map +1 -0
- package/dist/{chunk-ANA6GBEI.js → chunk-YIIDRFHK.js} +553 -47
- package/dist/chunk-YIIDRFHK.js.map +1 -0
- package/dist/{chunk-HJKPKWI7.js → chunk-ZP5QYTXX.js} +19 -4
- package/dist/chunk-ZP5QYTXX.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +4 -4
- package/dist/{messageBus-CtrwkjrO.d.ts → messageBus-DigYfj74.d.ts} +1 -1
- package/dist/{messagePortServiceTransport-BYprNvQY.d.ts → messagePortServiceTransport-B9-24RK6.d.ts} +95 -4
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/{runtimeTypes-DquUCHz-.d.ts → runtimeTypes-50LVQs0h.d.ts} +55 -2
- package/dist/{sharedWorkerHost-KI7TIGdX.d.ts → sharedWorkerHost-DikS18hA.d.ts} +88 -2
- package/dist/testing.d.ts +6 -6
- package/dist/testing.js +4 -4
- package/dist/{windowRuntime-BKkLPsAS.d.ts → windowRuntime-e1Tn6SnN.d.ts} +2 -2
- package/docs/api.md +28 -1
- package/docs/proposals/webloom-v4/requirements.md +1 -1
- package/docs/proposals/webloom-v4/verification.md +26 -11
- package/package.json +1 -1
- package/dist/chunk-ANA6GBEI.js.map +0 -1
- package/dist/chunk-HJKPKWI7.js.map +0 -1
- package/dist/chunk-SX46RHDI.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contracts/capability.ts","../src/contracts/lifecycle.ts","../src/contracts/resource.ts","../src/transport/dto.ts","../src/runtime/runtimeProtocol.ts","../src/host/capabilityRegistry.ts","../src/host/pluginGraph.ts","../src/lifecycle/resourceScope.ts","../src/lifecycle/permissionLease.ts","../src/lifecycle/taskScheduler.ts","../src/messaging/messageBus.ts","../src/resources/resourceRegistry.ts","../src/resources/resourceStore.ts","../src/lifecycle/scopedMessageBus.ts","../src/host/createPluginHost.ts","../src/host/runtimeUnitImplementationRegistry.ts","../src/runtime/pluginDefinitions.ts","../src/runtime/runtimeTypes.ts","../src/runtime/windowRuntime.ts"],"names":["candidate","message","phase","error","stats","result","record","options","metadata","entry","errorMessage","controller","makeId","mergeSignals","start","currentDesired","missing","unavailable","disposePromise","dependency","cached","implementationKey"],"mappings":"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","file":"chunk-ZP5QYTXX.js","sourcesContent":["// WebLoom v4 capability 契约。\n//\n// Capability 对象是 realm 内的运行时契约;跨 realm 只发送\n// capabilityDescriptor() 产生的静态 DTO。这样 parser、transfer extractor\n// 和 handler 永远不会进入 manifest 或 wire。\n\nimport type { LifecycleScope, RuntimeDrainResult, RuntimeEndpointBinding, RuntimeEndpointState, RuntimeKind } from \"./lifecycle.js\";\n\n/** 验证 unknown 并返回领域类型的生产 parser。 */\nexport interface ValueParser<T> {\n /** 验证 unknown;失败必须抛出校验错误。 */\n parse(value: unknown): T;\n}\n\n/** 从已经通过 parser 的值中提取可转移资源。 */\nexport type TransferExtractor<T> = (value: T) => readonly Transferable[];\n\n/** RPC 请求与结果的契约级 transfer 声明。 */\nexport interface RpcTransferDescriptor<TRequest, TResponse> {\n /** 从规范化请求中提取可转移资源。 */\n readonly request?: TransferExtractor<TRequest>;\n /** 从规范化结果中提取可转移资源。 */\n readonly response?: TransferExtractor<TResponse>;\n}\n\n/** stream 订阅请求与 item 的契约级 transfer 声明。 */\nexport interface StreamTransferDescriptor<TRequest, TItem> {\n /** 从规范化订阅请求中提取可转移资源。 */\n readonly request?: TransferExtractor<TRequest>;\n /** 从规范化 item 中提取可转移资源。 */\n readonly item?: TransferExtractor<TItem>;\n}\n\nexport type CapabilityKind = \"local\" | \"rpc\" | \"stream\";\n\n/** 可序列化的 capability 身份;不包含 parser、transfer 或 handler。 */\nexport interface CapabilityDescriptor {\n /** capability 行为形态。 */\n readonly kind: CapabilityKind;\n /** 稳定业务标识。 */\n readonly id: string;\n /** 精确业务契约版本。 */\n readonly version: string;\n}\n\ndeclare const localServiceType: unique symbol;\ndeclare const rpcRequestType: unique symbol;\ndeclare const rpcResponseType: unique symbol;\ndeclare const streamRequestType: unique symbol;\ndeclare const streamItemType: unique symbol;\n\n/** local capability;只在同一 realm 提供/消费,不可远程调用。 */\nexport interface LocalCapability<TService = unknown> extends CapabilityDescriptor {\n readonly kind: \"local\";\n readonly [localServiceType]?: TService;\n}\n\n/** RPC capability 的非泛型形状;用于跨不同请求/结果类型的内部集合。 */\nexport interface RpcCapabilityBase extends CapabilityDescriptor {\n /** 固定 RPC kind。 */\n readonly kind: \"rpc\";\n}\n\n/** stream capability 的非泛型形状;用于跨不同请求/item 类型的内部集合。 */\nexport interface StreamCapabilityBase extends CapabilityDescriptor {\n /** 固定 stream kind。 */\n readonly kind: \"stream\";\n}\n\n/** typed unary RPC capability。 */\nexport interface RpcCapability<TRequest, TResponse> extends RpcCapabilityBase {\n readonly kind: \"rpc\";\n /** 请求边界 parser。 */\n readonly request: ValueParser<TRequest>;\n /** 结果边界 parser。 */\n readonly response: ValueParser<TResponse>;\n /** 请求/结果资源所有权声明。 */\n readonly transfer?: RpcTransferDescriptor<TRequest, TResponse>;\n readonly [rpcRequestType]?: TRequest;\n readonly [rpcResponseType]?: TResponse;\n}\n\n/** typed back-pressure stream capability。 */\nexport interface StreamCapability<TRequest, TItem> extends StreamCapabilityBase {\n readonly kind: \"stream\";\n /** 订阅请求边界 parser。 */\n readonly request: ValueParser<TRequest>;\n /** item 边界 parser。 */\n readonly item: ValueParser<TItem>;\n /** item 资源所有权声明。 */\n readonly transfer?: StreamTransferDescriptor<TRequest, TItem>;\n readonly [streamRequestType]?: TRequest;\n readonly [streamItemType]?: TItem;\n}\n\nexport type RemoteCapability = RpcCapabilityBase | StreamCapabilityBase;\nexport type Capability = LocalCapability<unknown> | RpcCapabilityBase | StreamCapabilityBase;\n\nexport type RequestOf<C extends Capability> = C extends RpcCapability<infer TRequest, infer _TResponse>\n ? TRequest\n : C extends StreamCapability<infer TRequest, infer _TItem>\n ? TRequest\n : never;\n\nexport type ResponseOf<C extends Capability> = C extends RpcCapability<infer _TRequest, infer TResponse>\n ? TResponse\n : never;\n\nexport type ItemOf<C extends Capability> = C extends StreamCapability<infer _TRequest, infer TItem>\n ? TItem\n : never;\n\nexport type LocalServiceOf<C extends Capability> = C extends LocalCapability<infer TService>\n ? TService\n : never;\n\n/** 单次调用的公开选项;callId 由框架生成,operationId 由产品传入。 */\nexport interface RpcCallOptions {\n /** 调用方撤销信号。 */\n readonly signal?: AbortSignal;\n /** 从本次 call 开始计算的总截止时间预算。 */\n readonly timeoutMs?: number;\n /** 产品审计/幂等标识;框架不自动去重或重放。 */\n readonly operationId?: string;\n}\n\n/** typed unary 客户端。 */\nexport interface RpcClient<C extends RpcCapabilityBase> {\n /** 使用 capability parser 约束请求和结果。 */\n call(request: RequestOf<C>, options?: RpcCallOptions): Promise<ResponseOf<C>>;\n}\n\n/** stream 订阅选项。 */\nexport interface StreamSubscribeOptions<TItem> extends RpcCallOptions {\n /** 每个 item 交付完成后才归还一个 credit。 */\n readonly onNext: (item: TItem) => void | Promise<void>;\n /** 初始窗口;默认 16,最大 256。 */\n readonly initialCredit?: number;\n}\n\n/** 一个 typed stream 的本端生命周期。 */\nexport interface StreamSubscription<TItem> {\n /** 远端已建立订阅并发送 streamReady 后 resolve。 */\n readonly ready: Promise<void>;\n /** 正常 done 时 resolve,错误/撤销时 reject。 */\n readonly closed: Promise<void>;\n /** 幂等取消;立即阻止本地新 item 回调。 */\n cancel(reason?: string): void;\n}\n\n/** typed stream 客户端。 */\nexport interface StreamClient<C extends StreamCapabilityBase> {\n /** 建立一个有界 credit 的订阅。 */\n subscribe(request: RequestOf<C>, options: StreamSubscribeOptions<ItemOf<C>>): StreamSubscription<ItemOf<C>>;\n}\n\n/** 按 capability 形态推导消费端返回值。 */\nexport type CapabilityClient<C extends Capability> = C extends LocalCapability<infer TService>\n ? TService\n : C extends RpcCapabilityBase\n ? RpcClient<Extract<C, RpcCapabilityBase>>\n : C extends StreamCapabilityBase\n ? StreamClient<Extract<C, StreamCapabilityBase>>\n : never;\n\n/** handler 调用来源。 */\nexport type HandlerOrigin = \"local\" | \"remote\";\n\n/** 普通 handler 可见的 peer 作用域视图;不含任何管理/创建方法。 */\nexport interface PeerScopeView {\n /** 当前连接作用域状态。 */\n readonly state: \"active\" | \"stopping\" | \"stopped\";\n /** 连接撤销信号。 */\n readonly signal: AbortSignal;\n /** 订阅连接撤销;返回函数只能取消本次监听。 */\n onRevoke(listener: (reason: string) => void): () => void;\n}\n\n/** 服务绑定身份;由框架创建,不能从 request 覆盖。 */\nexport interface ServiceReference {\n /** capability 行为形态。 */\n readonly kind: \"rpc\" | \"stream\";\n /** 稳定 capability 标识。 */\n readonly capabilityId: string;\n /** 精确契约版本。 */\n readonly contractVersion: string;\n /** 提供者真实 Runtime。 */\n readonly runtime: \"window-main\" | \"shared-worker\";\n /** 提供者 Runtime 一次启动身份。 */\n readonly runtimeInstanceId: string;\n /** 一次 exposure 身份;撤销后永不复用。 */\n readonly serviceInstanceId: string;\n /** 已复制/冻结的无环公开属性。 */\n readonly attributes: Readonly<Record<string, unknown>>;\n /** 可选领域授权标识;不是认证凭据。 */\n readonly grantId?: string;\n /** 授权策略修订。 */\n readonly authorizationRevision?: number;\n}\n\n/** 远程调用的绑定对端只读视图。 */\nexport interface CapabilityPeer {\n /** 对端连接的不可复用身份。 */\n readonly peerId: string;\n /** 当前物理 endpoint 的框架 binding;不包含产品领域授权。 */\n readonly binding: RuntimeEndpointBinding;\n /** 已观察到的对端 Runtime 类型;首个快照前为空。 */\n readonly runtime?: RuntimeKind;\n /** 已观察到的对端 Runtime 一次启动身份;首个快照前为空。 */\n readonly runtimeInstanceId?: string;\n /** 对端连接 Scope。 */\n readonly scope: PeerScopeView;\n /** 获取当前 peer 上的 typed 能力。 */\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C>;\n}\n\n/** 插件的 typed capability 依赖;静态清单只保存 capabilityDescriptor。 */\ninterface CapabilityDependencyMetadata {\n /** 缺失时只关闭局部功能。 */\n readonly optional?: boolean;\n /** 面向诊断的依赖说明。 */\n readonly reason?: string;\n}\n\n/** 当前 Runtime(或明确的另一个 Runtime)的依赖。 */\nexport type RuntimeCapabilityDependency<C extends Capability = Capability> = CapabilityDependencyMetadata & {\n /** 要求的 capability 对象。 */\n readonly capability: C;\n /** 跨 Runtime 的精确来源;省略表示当前 Runtime。 */\n readonly sourceRuntime?: RuntimeKind;\n /** 与 peer 来源互斥。 */\n readonly source?: never;\n};\n\n/** 按一次远程调用解析的 peer 依赖;不进入全局启动依赖图。 */\nexport type PeerCapabilityDependency<C extends RemoteCapability = RemoteCapability> = CapabilityDependencyMetadata & {\n /** 要求的远程 capability 对象。 */\n readonly capability: C;\n /** 能力来自当前调用绑定的 peer。 */\n readonly source: \"peer\";\n /** peer 依赖不能伪装成固定 Runtime 依赖。 */\n readonly sourceRuntime?: never;\n};\n\n/** 插件 typed capability 依赖;source 与 sourceRuntime 不能同时出现。 */\nexport type CapabilityDependency<C extends Capability = Capability> = C extends LocalCapability<unknown>\n ? RuntimeCapabilityDependency<C>\n : RuntimeCapabilityDependency<C> | PeerCapabilityDependency<Extract<C, RemoteCapability>>;\n\n/** 远程 capability bridge 的最小内部/advanced 契约。 */\nexport interface CapabilityBridge {\n /** 当前连接状态。 */\n readonly state: \"empty\" | \"ready\" | \"stale\" | \"disposed\";\n /** 当前连接的远端 Runtime 身份。 */\n readonly runtimeInstanceId?: string;\n /** 当前已观察到的对端 Runtime 类型;快照到达前为空。 */\n readonly runtimeKind?: RuntimeKind;\n /** 本端物理 endpoint 的框架 binding。 */\n readonly binding: RuntimeEndpointBinding;\n /** 当前 endpoint 生命周期;与远端 Runtime state 独立。 */\n readonly endpointState: RuntimeEndpointState;\n /** 取惰性 typed client;没有服务时不在此处同步失败。 */\n getClient<C extends RemoteCapability>(capability: C, scope?: LifecycleScope): CapabilityClient<C>;\n /** 应用一个完整对端目录。 */\n /** 应用一个远端完整目录;生产 wire 带 binding,旧 testing fixture 可省略。 */\n applySnapshot(snapshot: import(\"./lifecycle.js\").RuntimeSnapshot): import(\"./lifecycle.js\").SnapshotApplyResult;\n /** 同步撤销全部旧代理。 */\n invalidate(reason?: string): void;\n /** 连接断开;旧代理永久失效。 */\n disconnect(reason?: string): void;\n /** 永久销毁 bridge。 */\n dispose(reason?: string): void;\n /** 同步停止新调用、撤销代理并 abort 已进入调用;幂等。 */\n beginClose(reason?: string): void;\n /** 等待本端与对端框架执行槽 bounded drain;超时不伪装成功。 */\n drain(timeoutMs?: number): Promise<RuntimeDrainResult>;\n /** 订阅目录/连接状态变化。 */\n subscribe(listener: () => void): () => void;\n /** 当前已发布的完整服务引用。 */\n services(): readonly ServiceReference[];\n}\n\n/** handler 收到的框架绑定调用上下文。 */\nexport interface HandlerCallContext {\n /** 取消信号。 */\n readonly signal: AbortSignal;\n /** 调用总截止时间的 epoch 毫秒值。 */\n readonly deadlineAt: number;\n /** 产品操作 ID。 */\n readonly operationId?: string;\n /** 当前服务 exposure 身份。 */\n readonly reference: ServiceReference;\n /** 远程调用对应的框架 endpoint binding;同 realm 调用没有物理 endpoint。 */\n readonly binding?: RuntimeEndpointBinding;\n /** 调用来源。 */\n readonly origin: HandlerOrigin;\n /** 远程调用的框架绑定对端;local 调用必为 undefined。 */\n readonly peer?: CapabilityPeer;\n}\n\nexport type RpcHandler<C extends RpcCapabilityBase> = (\n request: RequestOf<C>,\n call: HandlerCallContext,\n) => ResponseOf<C> | Promise<ResponseOf<C>>;\n\nexport type StreamHandler<C extends StreamCapabilityBase> = (\n request: RequestOf<C>,\n call: HandlerCallContext,\n) => AsyncIterable<ItemOf<C>> | Promise<AsyncIterable<ItemOf<C>>>;\n\nexport interface DefineLocalCapabilityOptions {\n /** 固定 capability kind。 */\n readonly kind: \"local\";\n /** 非空业务标识。 */\n readonly id: string;\n /** 非空业务契约版本。 */\n readonly version: string;\n}\n\nexport interface DefineRpcCapabilityOptions<TRequest, TResponse> {\n /** 固定 capability kind。 */\n readonly kind: \"rpc\";\n /** 非空业务标识。 */\n readonly id: string;\n /** 非空业务契约版本。 */\n readonly version: string;\n /** 请求 parser。 */\n readonly request: ValueParser<TRequest>;\n /** 结果 parser。 */\n readonly response: ValueParser<TResponse>;\n /** 契约级 transfer。 */\n readonly transfer?: RpcTransferDescriptor<TRequest, TResponse>;\n}\n\nexport interface DefineStreamCapabilityOptions<TRequest, TItem> {\n /** 固定 capability kind。 */\n readonly kind: \"stream\";\n /** 非空业务标识。 */\n readonly id: string;\n /** 非空业务契约版本。 */\n readonly version: string;\n /** 订阅请求 parser。 */\n readonly request: ValueParser<TRequest>;\n /** item parser。 */\n readonly item: ValueParser<TItem>;\n /** 契约级 transfer。 */\n readonly transfer?: StreamTransferDescriptor<TRequest, TItem>;\n}\n\nfunction assertIdentity(input: { id?: unknown; version?: unknown }): void {\n if (typeof input.id !== \"string\" || input.id.trim() === \"\") {\n throw new TypeError(\"Capability id must be a non-empty string\");\n }\n if (typeof input.version !== \"string\" || input.version.trim() === \"\") {\n throw new TypeError(`Capability \"${input.id}\" version must be a non-empty string`);\n }\n}\n\nfunction assertParser(value: unknown, label: string): void {\n if (!value || typeof value !== \"object\" || typeof (value as { parse?: unknown }).parse !== \"function\") {\n throw new TypeError(`${label} must expose parse(value)`);\n }\n}\n\n/** 定义 local capability;local 不携带 wire parser,也不能跨 Runtime。 */\nexport function defineCapability<TService>(options: DefineLocalCapabilityOptions): LocalCapability<TService>;\n/** 定义 typed unary RPC;request/response parser 是强制边界。 */\nexport function defineCapability<TRequest, TResponse>(options: DefineRpcCapabilityOptions<TRequest, TResponse>): RpcCapability<TRequest, TResponse>;\n/** 定义 typed stream;request/item parser 是强制边界。 */\nexport function defineCapability<TRequest, TItem>(options: DefineStreamCapabilityOptions<TRequest, TItem>): StreamCapability<TRequest, TItem>;\nexport function defineCapability(options: DefineLocalCapabilityOptions | DefineRpcCapabilityOptions<unknown, unknown> | DefineStreamCapabilityOptions<unknown, unknown>): Capability {\n assertIdentity(options);\n if (options.kind === \"rpc\") {\n assertParser(options.request, \"RPC request parser\");\n assertParser(options.response, \"RPC response parser\");\n }\n if (options.kind === \"stream\") {\n assertParser(options.request, \"stream request parser\");\n assertParser(options.item, \"stream item parser\");\n }\n return Object.freeze({ ...options });\n}\n\n/** 产生不含函数的静态 capability DTO。 */\nexport function capabilityDescriptor(capability: Capability): CapabilityDescriptor {\n assertCapability(capability);\n return Object.freeze({\n kind: capability.kind,\n id: capability.id,\n version: capability.version,\n });\n}\n\n/** 计算契约身份键;只用于 Host/目录内部比较。 */\nexport function capabilityKey(capability: CapabilityDescriptor): string {\n return `${capability.kind}\\u0000${capability.id}\\u0000${capability.version}`;\n}\n\n/** 运行时校验静态 capability DTO。 */\nexport function isCapabilityDescriptor(value: unknown): value is CapabilityDescriptor {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Partial<CapabilityDescriptor>;\n return (candidate.kind === \"local\" || candidate.kind === \"rpc\" || candidate.kind === \"stream\")\n && typeof candidate.id === \"string\" && candidate.id.trim() !== \"\"\n && typeof candidate.version === \"string\" && candidate.version.trim() !== \"\";\n}\n\n/** 运行时校验 realm 内 capability 对象。 */\nexport function isCapability(value: unknown): value is Capability {\n if (!isCapabilityDescriptor(value)) return false;\n if (value.kind === \"local\") return true;\n if (value.kind === \"rpc\") {\n const candidate = value as Partial<RpcCapability<unknown, unknown>>;\n return !!candidate.request && typeof candidate.request === \"object\"\n && typeof candidate.request.parse === \"function\"\n && !!candidate.response && typeof candidate.response === \"object\"\n && typeof candidate.response.parse === \"function\";\n }\n const candidate = value as Partial<StreamCapability<unknown, unknown>>;\n return !!candidate.request && typeof candidate.request === \"object\"\n && typeof candidate.request.parse === \"function\"\n && !!candidate.item && typeof candidate.item === \"object\"\n && typeof candidate.item.parse === \"function\";\n}\n\n/** capability 不合法时抛出统一错误。 */\nexport function assertCapability(value: unknown): asserts value is Capability {\n if (!isCapability(value)) throw new TypeError(\"Invalid WebLoom capability definition\");\n}\n","// WebLoom v4 生命周期、权限、Runtime 快照和升级门禁契约。\n\n/** 作用域类型由宿主命名,框架只比较和调度。 */\nexport type LifecycleScopeKind = string;\n/** 作用域状态;stopping 已同步撤权,仍可能有异步清理。 */\nexport type LifecycleScopeState = \"active\" | \"stopping\" | \"stopped\";\n/** 浏览器中的真实 JavaScript Runtime。 */\nexport type RuntimeKind = \"window-main\" | \"shared-worker\";\n/** 权限动作名称。 */\nexport type PluginPermission = string;\n\n/**\n * WebLoom 为每条物理 Runtime endpoint 生成的连接绑定。\n *\n * `runtimeInstanceId` 标识一次 Runtime 启动,`connectionId` 标识该启动内\n * 的一条物理连接。两者只能由框架创建并且不得复用;它不是产品领域的\n * lease、owner 或领域 generation,也不能由请求载荷覆盖。\n */\nexport interface RuntimeEndpointBinding {\n /** 产生此 endpoint 的 Runtime 启动身份。 */\n readonly runtimeInstanceId: string;\n /** 此 Runtime 启动内不可复用的物理连接身份。 */\n readonly connectionId: string;\n}\n\n/** Runtime endpoint 的通用关闭阶段。 */\nexport type RuntimeEndpointState = \"active\" | \"closing\" | \"closed\";\n\n/** 一次 bounded drain 的结果;超时不伪装成已经排空。 */\nexport interface RuntimeDrainResult {\n /** 关闭阶段结束时的状态。 */\n readonly state: RuntimeEndpointState;\n /** 是否在 deadline 前等待到所有框架执行槽结束。 */\n readonly drained: boolean;\n /** 是否达到 bounded deadline。 */\n readonly timedOut: boolean;\n /** deadline 到达时仍未完成的真实执行槽数量。 */\n readonly pendingExecutions: number;\n}\n\n/** 一个作用域的不可替换身份绑定。 */\nexport interface LifecycleScopeIdentity<\n TAttributes extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>,\n> {\n /** 作用域唯一标识。 */\n readonly scopeId: string;\n /** 作用域所属实例;重建不得复用。 */\n readonly instanceId: string;\n /** 作用域类型。 */\n readonly kind: LifecycleScopeKind;\n /** 父作用域标识。 */\n readonly parentScopeId?: string;\n /** 绑定插件标识。 */\n readonly pluginId?: string;\n /** 宿主绑定的只读结构化属性。 */\n readonly attributes: TAttributes;\n}\n\n/** 资源清理函数。 */\nexport type LifecycleCleanup = (reason: string) => void | Promise<void>;\n/** 清理阶段。 */\nexport type LifecycleCleanupPhase = \"before-teardown\" | \"after-teardown\";\n\n/** 作用域资源快照。 */\nexport interface LifecycleResourceSnapshot {\n /** 资源唯一标识。 */\n readonly resourceId: string;\n /** 当前资源状态。 */\n readonly state: \"acquiring\" | \"active\" | \"released\" | \"pending\";\n /** 脱敏释放错误。 */\n readonly error?: string;\n}\n\n/** 资源清理问题。 */\nexport interface LifecycleCleanupIssue {\n /** 资源标识。 */\n readonly resourceId: string;\n /** 清理失败或超时。 */\n readonly code: \"lifecycle.cleanup_failed\" | \"lifecycle.cleanup_timeout\";\n /** 脱敏错误信息。 */\n readonly message: string;\n}\n\n/** 作用域停止结果。 */\nexport interface LifecycleDisposeResult {\n /** 作用域标识。 */\n readonly scopeId: string;\n /** 终态。 */\n readonly state: \"stopped\";\n /** 尝试释放的数量。 */\n readonly attempted: number;\n /** 已完成释放的数量。 */\n readonly released: number;\n /** 仍在清理的资源。 */\n readonly pending: readonly string[];\n /** 所有清理错误。 */\n readonly errors: readonly LifecycleCleanupIssue[];\n /** 是否有未完成收尾。 */\n readonly cleanupIncomplete: boolean;\n}\n\n/** 作用域停止选项。 */\nexport interface LifecycleDisposeOptions {\n /** 每项清理最多等待的毫秒数。 */\n readonly timeoutMs?: number;\n /** 清理原因。 */\n readonly reason?: string;\n /** 领域 teardown。 */\n readonly teardown?: LifecycleCleanup;\n /** 超时项迟到成功的本地投影回调。 */\n readonly onLateSuccess?: (resourceId: string, result?: LifecycleDisposeResult) => void;\n /** 超时项迟到失败的本地投影回调。 */\n readonly onLateFailure?: (resourceId: string, error: unknown, result?: LifecycleDisposeResult) => void;\n}\n\n/** 已登记资源的幂等释放句柄。 */\nexport interface LifecycleResourceHandle {\n /** 资源标识。 */\n readonly resourceId: string;\n /** 是否已完成释放。 */\n readonly released: boolean;\n /** 释放资源。 */\n release(reason?: string): Promise<void>;\n}\n\n/** 生命周期作用域。 */\nexport interface LifecycleScope {\n /** 作用域身份。 */\n readonly identity: LifecycleScopeIdentity;\n /** 当前状态。 */\n readonly state: LifecycleScopeState;\n /** 撤权信号。 */\n readonly signal: AbortSignal;\n /** 订阅同步撤权。 */\n onRevoke(listener: (reason: string) => void): () => void;\n /** 登记异步清理。 */\n onDispose(cleanup: LifecycleCleanup, resourceId?: string, phase?: LifecycleCleanupPhase): () => void;\n /** 登记已有资源;返回原资源,释放通过 Scope 统一执行。 */\n track<T>(resource: T, release: (resource: T, reason: string) => void | Promise<void>, resourceId?: string): T;\n /** 异步创建并绑定资源;晚到资源会被撤销后立即清理。 */\n acquire<T>(resourceId: string, create: (signal: AbortSignal) => T | Promise<T>, release: (resource: T, reason: string) => void | Promise<void>): Promise<T>;\n /** 创建子作用域。 */\n child(kind: LifecycleScopeKind, metadata?: Partial<Omit<LifecycleScopeIdentity, \"scopeId\" | \"instanceId\" | \"kind\" | \"parentScopeId\">>): LifecycleScope;\n /** 同步撤权并阻止新资源。 */\n revoke(reason?: string): void;\n /** 异步清理全部资源。 */\n dispose(options?: LifecycleDisposeOptions): Promise<LifecycleDisposeResult>;\n /** 作用域不活跃时抛错。 */\n assertActive(): void;\n /** 资源快照。 */\n resources(): readonly LifecycleResourceSnapshot[];\n /** 绑定 DOM/EventTarget listener;revoke 时同步解绑。 */\n listen(target: EventTarget, event: string, listener: EventListenerOrEventListenerObject, options?: AddEventListenerOptions | boolean): () => void;\n /** 绑定同步 interval callback;revoke 时同步停止。 */\n interval(callback: () => void, milliseconds: number): () => void;\n /** 绑定一个 subscribe/unsubscribe 资源;revoke 时同步退订。 */\n subscribe(subscribe: (listener: () => void) => () => void, listener: () => void): () => void;\n}\n\n/** 作用域已撤权。 */\nexport class LifecycleScopeRevokedError extends Error {\n readonly code = \"lifecycle.scope_revoked\" as const;\n constructor(message = \"Lifecycle scope has been revoked\") {\n super(message);\n this.name = \"LifecycleScopeRevokedError\";\n }\n}\n\n/** 权限租约已撤销或身份不匹配。 */\nexport class PermissionLeaseRevokedError extends Error {\n readonly code = \"permission.lease_revoked\" as const;\n constructor(message = \"Permission lease has been revoked\") {\n super(message);\n this.name = \"PermissionLeaseRevokedError\";\n }\n}\n\n/** 权限未获可信装配批准。 */\nexport class PermissionDeniedError extends Error {\n readonly code = \"permission.denied\" as const;\n readonly permission: PluginPermission;\n constructor(permission: PluginPermission, message = `Permission denied: ${permission}`) {\n super(message);\n this.name = \"PermissionDeniedError\";\n this.permission = permission;\n }\n}\n\n/** 权限租约的不可变绑定。 */\nexport interface PermissionLeaseBinding extends LifecycleScopeIdentity {\n /** 插件申请的权限。 */\n readonly requested: readonly PluginPermission[];\n /** 可信策略批准的权限。 */\n readonly approved: readonly PluginPermission[];\n /** 当前会话限制。 */\n readonly sessionConstraints?: readonly PluginPermission[];\n /** 策略修订。 */\n readonly policyRevision?: number;\n /** 用户授权修订。 */\n readonly grantRevision?: number;\n /** 外部授权标识。 */\n readonly grantId?: string;\n}\n\n/** 最终边界比较的租约期望。 */\nexport type PermissionLeaseBindingExpectation =\n Partial<Pick<LifecycleScopeIdentity, \"pluginId\" | \"instanceId\">>\n & { attributes?: Readonly<Record<string, unknown>> }\n & Partial<Pick<PermissionLeaseBinding, \"policyRevision\" | \"grantRevision\" | \"grantId\">>;\n\n/** 权限租约。 */\nexport interface PermissionLease {\n readonly binding: PermissionLeaseBinding;\n readonly revoked: boolean;\n /** 是否拥有权限。 */\n has(permission: PluginPermission): boolean;\n /** 断言权限。 */\n assert(permission: PluginPermission): void;\n /** 断言身份。 */\n assertBinding(expected: PermissionLeaseBindingExpectation): void;\n /** 撤销租约。 */\n revoke(reason?: string): void;\n}\n\n/** 紧凑 Runtime 服务目录项;不重复外层 Runtime 身份和状态。 */\nexport interface RuntimeServiceSnapshot {\n /** 服务形态。 */\n kind: \"rpc\" | \"stream\";\n /** capability 标识。 */\n capabilityId: string;\n /** 精确契约版本。 */\n contractVersion: string;\n /** exposure 身份。 */\n serviceInstanceId: string;\n /** 无环公开属性。 */\n attributes: Readonly<Record<string, unknown>>;\n /** 可选授权标识。 */\n grantId?: string;\n /** 授权修订。 */\n authorizationRevision?: number;\n}\n\n/** Runtime 完整目录快照。 */\nexport interface RuntimeSnapshot {\n /** 固定协议版本。 */\n protocolVersion: string;\n /** 当前物理 endpoint 的框架绑定;旧兼容快照可以省略,收到后由 transport 补齐。 */\n readonly binding?: RuntimeEndpointBinding;\n /** Runtime 逻辑标识。 */\n runtimeId: string;\n /** 真实 Runtime 类型。 */\n runtimeKind: RuntimeKind;\n /** Runtime 一次启动身份。 */\n runtimeInstanceId: string;\n /** 当前 peer 的投影修订。 */\n revision: number;\n /** Runtime 状态。 */\n state: \"starting\" | \"ready\" | \"stopping\" | \"failed\" | \"disposed\";\n /** 单元状态。 */\n units: readonly {\n /** 插件标识。 */\n pluginId: string;\n /** 单元标识。 */\n unitId: string;\n /** 真实 Runtime。 */\n runtime: RuntimeKind;\n /** 启动实例。 */\n instanceId?: string;\n /** 单元状态。 */\n state: import(\"./plugin.js\").PluginStateKind;\n }[];\n /** ready 时仅发布当前可调用服务。 */\n services: readonly RuntimeServiceSnapshot[];\n}\n\n/**\n * Runtime/transport 的可信资源预算。\n *\n * 这些值只允许由 Runtime 装配层收紧,不能由 wire 或普通插件扩大。\n * 省略的字段使用 WebLoom v4 的默认预算;不存在 Infinity/无限预算。\n */\nexport interface RuntimeLimits {\n /** 每个 Runtime 可接入的最大 peer 数。 */\n readonly maxPeers: number;\n /** 每个 peer、每个方向可等待的最大 call 数。 */\n readonly maxPendingCallsPerPeer: number;\n /** 每个 Runtime、每个方向可等待的最大 call 数。 */\n readonly maxPendingCallsPerRuntime: number;\n /** 每个 peer、每个方向的最大活动 stream 数。 */\n readonly maxActiveStreamsPerPeer: number;\n /** 每个 Runtime、每个方向的最大活动 stream 数。 */\n readonly maxActiveStreamsPerRuntime: number;\n /** 每个 peer 可保留的未完成执行槽数。 */\n readonly maxExecutionSlotsPerPeer: number;\n /** 每个 Runtime 可保留的未完成执行槽数。 */\n readonly maxExecutionSlotsPerRuntime: number;\n /** 单条消息的确定性 DTO 预算。 */\n readonly maxMessageBudgetBytes: number;\n /** 每个 peer、每个方向的保留载荷预算。 */\n readonly maxRetainedPayloadBytesPerPeer: number;\n /** 每个 Runtime、每个方向的保留载荷预算。 */\n readonly maxRetainedPayloadBytesPerRuntime: number;\n /** 单个 snapshot 的 unit 上限。 */\n readonly maxSnapshotUnits: number;\n /** 单个 snapshot 的 service 上限。 */\n readonly maxSnapshotServices: number;\n /** 单条 DTO 图的最大深度。 */\n readonly maxDtoDepth: number;\n /** 单条 DTO 图的唯一对象节点上限。 */\n readonly maxDtoNodes: number;\n /** 单条 DTO 图的引用边/字段槽位上限。 */\n readonly maxDtoEdges: number;\n /** 单个 transfer extractor 原始返回列表上限。 */\n readonly maxTransferEntries: number;\n /** 去重后的 transfer 总数上限。 */\n readonly maxTransfers: number;\n /** 去重后的 MessagePort 数量上限。 */\n readonly maxMessagePorts: number;\n /** stream credit/push 队列窗口上限。 */\n readonly maxStreamCredit: number;\n}\n\n/** 快照应用结果。 */\nexport type SnapshotApplyResult =\n | { accepted: true; state: \"empty\" | \"ready\" | \"stale\"; revision: number }\n | { accepted: false; reason: \"stale-revision\" | \"protocol-mismatch\" | \"invalid-snapshot\" | \"disposed\"; receivedRevision?: number };\n\n/** 框架结构化错误码。 */\nexport type FrameworkErrorCode =\n | \"protocol_mismatch\"\n | \"invalid_snapshot\"\n | \"capability_unavailable\"\n | \"contract_mismatch\"\n | \"request_validation_failed\"\n | \"response_validation_failed\"\n | \"request_clone_failed\"\n | \"response_clone_failed\"\n | \"transfer_invalid\"\n | \"handler_failed\"\n | \"call_timeout\"\n | \"request_cancelled\"\n | \"service_revoked\"\n | \"service_stale\"\n | \"transport_unavailable\"\n | \"runtime_initialization_failed\"\n | \"stream_overflow\"\n | \"resource_limit_exceeded\"\n | \"permission_denied\"\n | \"session_binding_mismatch\"\n | (string & {});\n/** 框架错误阶段。 */\nexport type FrameworkErrorPhase = \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\";\n/** 脱敏错误上下文。 */\nexport interface FrameworkErrorContext {\n /** capability 标识。 */\n capabilityId?: string;\n /** Runtime 启动身份。 */\n runtimeInstanceId?: string;\n /** service exposure 身份。 */\n serviceInstanceId?: string;\n}\n/** WebLoom v4 统一错误入口。 */\nexport class WebLoomError extends Error {\n readonly code: FrameworkErrorCode;\n readonly phase: FrameworkErrorPhase;\n readonly context?: Readonly<FrameworkErrorContext>;\n readonly details?: Readonly<Record<string, unknown>>;\n constructor(code: FrameworkErrorCode, message: string, phase: FrameworkErrorPhase = \"execute\", context?: FrameworkErrorContext, details?: Readonly<Record<string, unknown>>) {\n super(message);\n this.name = \"WebLoomError\";\n this.code = code;\n this.phase = phase;\n this.context = context ? Object.freeze({ ...context }) : undefined;\n this.details = details ? Object.freeze({ ...details }) : undefined;\n }\n}\n\n/** 升级切换模式。 */\nexport type UpgradeMode = \"cold-switch\" | \"two-phase\";\n/** 升级门禁状态。 */\nexport type UpgradeGateState = \"active\" | \"draining\" | \"closed\";\n/** 新旧构建接管握手。 */\nexport interface UpgradeHandshake {\n /** 真实连接标识。 */\n connectionId: string;\n /** 控制协议版本。 */\n protocolVersion: string;\n /** 构建标识。 */\n buildId: string;\n /** 权威实例。 */\n authorityInstanceId: string;\n /** 接管世代。 */\n handoverGeneration: number;\n /** 支持的精确契约版本。 */\n supportedContractVersions: readonly string[];\n}\n/** 握手结果。 */\nexport type UpgradeHandshakeResult =\n | { accepted: true; mode: UpgradeMode; handoverGeneration: number; contractVersion: string; connectionId: string; sessionId: string; session: UpgradeSession }\n | { accepted: false; reason: \"protocol-mismatch\" | \"build-incompatible\" | \"stale-generation\" | \"future-generation\" | \"contract-mismatch\" | \"draining\" | \"closed\" };\n/** I/O 租约。 */\nexport interface UpgradeIoLease {\n readonly connectionId: string;\n readonly sessionId: string;\n readonly authorityInstanceId: string;\n readonly handoverGeneration: number;\n readonly contractVersion: string;\n readonly operation: \"read\" | \"write\";\n readonly revoked: boolean;\n readonly signal: AbortSignal;\n assertActive(): void;\n release(): void;\n}\n/** 已握手会话。 */\nexport interface UpgradeSession {\n readonly connectionId: string;\n readonly sessionId: string;\n readonly authorityInstanceId: string;\n readonly handoverGeneration: number;\n readonly contractVersion: string;\n readonly revoked: boolean;\n readonly signal: AbortSignal;\n assertActive(): void;\n admit(input: { operation: \"read\" | \"write\"; signal?: AbortSignal }): UpgradeIoLease;\n close(reason?: string): void;\n}\n/** 排空结果。 */\nexport interface UpgradeDrainResult {\n readonly state: UpgradeGateState;\n readonly drained: boolean;\n readonly pending: number;\n}\n/** 升级门禁参数。 */\nexport interface CreateUpgradeGateOptions {\n readonly protocolVersion: string;\n readonly buildId: string;\n readonly authorityInstanceId: string;\n readonly handoverGeneration: number;\n readonly supportedContractVersions: readonly string[];\n readonly mode?: UpgradeMode;\n readonly compatibleBuildIds?: ReadonlySet<string>;\n readonly isBuildCompatible?: (buildId: string) => boolean;\n}\n/** 升级门禁。 */\nexport interface UpgradeGate {\n readonly state: UpgradeGateState;\n readonly mode: UpgradeMode;\n readonly authorityInstanceId: string;\n readonly handoverGeneration: number;\n handshake(input: UpgradeHandshake): UpgradeHandshakeResult;\n assertAccepting(): void;\n admit(input: { session: UpgradeSession; operation: \"read\" | \"write\"; signal?: AbortSignal }): UpgradeIoLease;\n beginDrain(reason?: string): void;\n drain(timeoutMs?: number): Promise<UpgradeDrainResult>;\n close(reason?: string): void;\n activeIo(): number;\n}\n/** 升级门禁拒绝。 */\nexport class UpgradeGateRejectedError extends Error {\n readonly code = \"upgrade.gate_rejected\" as const;\n readonly reason: string;\n constructor(reason: string, message = `Upgrade gate rejected operation: ${reason}`) {\n super(message);\n this.name = \"UpgradeGateRejectedError\";\n this.reason = reason;\n }\n}\n\n/** 插件启停绝对意图命令。 */\nexport interface PluginIntentCommand {\n readonly commandId: string;\n readonly authorityInstanceId: string;\n readonly expectedRevision: number;\n readonly pluginId: string;\n readonly desiredEnabled: boolean;\n}\n/** 插件启停意图快照。 */\nexport interface PluginIntentSnapshot {\n readonly revision: number;\n readonly desiredEnabled: Readonly<Record<string, boolean>>;\n readonly desiredRevision: Readonly<Record<string, number>>;\n}\n/** 意图持久化结果。 */\nexport type PluginIntentCommandResult =\n | { status: \"accepted\" | \"duplicate\"; commandId: string; snapshot: PluginIntentSnapshot; persisted: true }\n | { status: \"stale-authority\"; commandId: string; expectedAuthorityInstanceId: string }\n | { status: \"command-conflict\"; commandId: string; message: string }\n | { status: \"revision-conflict\"; commandId: string; snapshot: PluginIntentSnapshot }\n | { status: \"persistence-failed\"; commandId: string; message: string; snapshot: PluginIntentSnapshot };\n/** Host 提交意图的完整结果。 */\nexport type PluginIntentSubmissionResult = PluginIntentCommandResult | { status: \"transport-error\"; message: string; retryable: boolean };\n/** 单一启停控制面。 */\nexport interface PluginIntentController {\n readonly authorityInstanceId: string;\n snapshot(): PluginIntentSnapshot;\n submit(command: PluginIntentCommand): Promise<PluginIntentCommandResult>;\n subscribe(listener: (snapshot: PluginIntentSnapshot) => void): () => void;\n}\n/** Host 接入的启停控制面。 */\nexport interface PluginIntentCoordinator {\n readonly authorityInstanceId: string;\n snapshot(): PluginIntentSnapshot;\n submit(command: PluginIntentCommand): Promise<PluginIntentSubmissionResult>;\n subscribe(listener: (snapshot: PluginIntentSnapshot) => void): () => void;\n}\n\n/** scoped 后台任务定义。 */\nexport interface ScopedTaskDefinition {\n readonly id: string;\n readonly pluginId?: string;\n readonly label: string;\n readonly intervalMs?: number;\n run(context: { signal: AbortSignal; reason: string }): void | Promise<void>;\n}\n/** 任务快照。 */\nexport interface ScopedTaskSnapshot {\n readonly id: string;\n readonly pluginId: string;\n readonly label: string;\n readonly state: \"idle\" | \"queued\" | \"running\" | \"failed\";\n readonly error?: string;\n readonly lastCompletedAt?: string;\n readonly nextRunAt?: string;\n}\n/** scoped 任务调度器。 */\nexport interface ScopedTaskScheduler {\n register(definition: ScopedTaskDefinition): () => void;\n runNow(id: string, reason?: string): Promise<void>;\n cancel(id: string): Promise<void>;\n snapshot(): readonly ScopedTaskSnapshot[];\n subscribe(listener: (snapshot: readonly ScopedTaskSnapshot[]) => void): () => void;\n}\n/** 内建任务调度器 capability 的保留静态标识。 */\nexport const SCOPED_TASK_SCHEDULER_CAPABILITY = \"runtime.task-scheduler\";\n\n/** 生命周期稳定错误文案。 */\nexport const LIFECYCLE_ERROR_TEXT: Readonly<Record<string, string>> = Object.freeze({\n \"lifecycle.scope_revoked\": \"运行实例已停止\",\n \"permission.denied\": \"插件没有获得该操作的权限\",\n \"permission.lease_revoked\": \"授权租约已撤销\",\n \"lifecycle.cleanup_failed\": \"资源清理失败,等待重试\",\n \"lifecycle.cleanup_timeout\": \"资源清理超时,仍在后台排空\",\n \"upgrade.gate_rejected\": \"版本接管门禁未通过\",\n});\n/** 将生命周期错误码映射为中文提示。 */\nexport function lifecycleErrorText(code: string): string {\n return LIFECYCLE_ERROR_TEXT[code] ?? \"生命周期操作未完成\";\n}\n","// WebLoom 通用资源缓存契约。\n\nimport { defineCapability } from \"./capability.js\";\n\n/** 资源键:稳定、可比较且不含秘密的字符串元组。 */\nexport type ResourceKey = readonly [resourceId: string, ...parts: readonly string[]];\n\n/** 资源当前状态。 */\nexport type ResourceStatus = \"pending\" | \"ready\" | \"stale\" | \"error\" | \"blocked\";\n\n/** 资源快照:状态、数据、错误和单调修订。 */\nexport interface ResourceSnapshot<T> {\n /** 资源键。 */\n readonly key: ResourceKey;\n /** 当前加载状态。 */\n readonly status: ResourceStatus;\n /** 当前数据;未 ready 时可以为空。 */\n readonly data: T | undefined;\n /** 稳定错误码和可展示错误信息。 */\n readonly error?: { readonly code: string; readonly message: string };\n /** 快照修订,每次有效变化递增。 */\n readonly revision: number;\n}\n\n/** 资源读取上下文;只提供通用 capability 和宿主扩展属性。 */\nexport interface ResourceContext<TAttributes extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>> {\n /** 读取已注入的 capability;不存在时返回 undefined。 */\n getCapability<T>(id: string): T | undefined;\n /** 资源定义所属的插件实例标识;由注册表绑定,插件不能伪造。 */\n readonly ownerId: string;\n /** 宿主绑定的当前作用域属性;资源定义不能写入。 */\n readonly attributes: TAttributes;\n}\n\n/** Runtime-only metadata used to bind a definition to an owner. */\nexport const RESOURCE_OWNER = Symbol(\"webloom.resource.owner\");\nexport type OwnedResourceDefinition = ResourceDefinition<unknown, readonly string[]> & {\n readonly [RESOURCE_OWNER]?: string;\n};\n\n/** 资源定义:描述键、加载、失效订阅与比较方式。 */\nexport interface ResourceDefinition<T, TArgs extends readonly string[] = readonly string[]> {\n /** 资源唯一标识。 */\n readonly id: string;\n /** 资源所依附的生命周期标签,由宿主解释。 */\n readonly scope: string;\n /** 生成资源键。 */\n key(args: TArgs, context: ResourceContext): ResourceKey;\n /** 加载资源数据;实现必须响应 signal。 */\n load(args: TArgs, context: ResourceContext, signal: AbortSignal): Promise<T>;\n /** 订阅失效事件;只表达失效,不直接改写快照。 */\n subscribe?(args: TArgs, context: ResourceContext, invalidate: () => void): () => void;\n /** 语义相等判断;返回 true 时不发布新数据快照。 */\n equals?(previous: T | undefined, next: T | undefined): boolean;\n /** 同一事件循环内是否合并失效通知。 */\n readonly invalidation: \"immediate\" | \"microtask\";\n}\n\n/** 资源定义注册表。 */\nexport interface ResourceRegistry {\n /** 注册资源定义。 */\n register<T, TArgs extends readonly string[]>(definition: ResourceDefinition<T, TArgs>): void;\n /** 注销资源定义。 */\n unregister(id: string): void;\n /** 查询资源定义。 */\n get<T, TArgs extends readonly string[]>(id: string): ResourceDefinition<T, TArgs> | undefined;\n /** 调试和宿主清理使用的定义标识。 */\n _ids(): string[];\n}\n\n/** Host 内置的 typed Resource Registry capability。 */\nexport const RESOURCE_REGISTRY = defineCapability<ResourceRegistry>({\n kind: \"local\",\n id: \"webloom.resource.registry\",\n version: \"1\",\n});\n","// WebLoom v4 的有限 wire DTO walker、transfer 校验和接收资源账本。\n//\n// 这不是 structuredClone 的实现,也不试图检测任意 Proxy。它只接受规范中\n// 明确列出的、可有界计费的 DTO 图;sender、receiver、provider 和 testing\n// 都通过这里使用同一套边界。\n\nimport { WebLoomError, type RuntimeLimits } from \"../contracts/lifecycle.js\";\n\nexport interface DtoLimits {\n /** DTO 图允许的最长路径深度。 */\n readonly maxDepth: number;\n /** 唯一对象节点上限。 */\n readonly maxNodes: number;\n /** 引用边/字段槽位上限。 */\n readonly maxEdges: number;\n /** 确定性计费预算。 */\n readonly maxBudgetBytes: number;\n /** 普通字符串的 UTF-16 code unit 上限。 */\n readonly maxStringLength: number;\n /** 对象字段名的 UTF-16 code unit 上限。 */\n readonly maxFieldNameLength: number;\n}\n\nexport const DEFAULT_DTO_LIMITS: DtoLimits = Object.freeze({\n maxDepth: 32,\n maxNodes: 10_000,\n maxEdges: 20_000,\n maxBudgetBytes: 16 * 1024 * 1024,\n maxStringLength: 1_048_576,\n maxFieldNameLength: 256,\n});\n\nexport const ATTRIBUTES_DTO_LIMITS: DtoLimits = Object.freeze({\n maxDepth: 8,\n maxNodes: 256,\n maxEdges: 1_024,\n maxBudgetBytes: 16 * 1024,\n maxStringLength: 2_048,\n maxFieldNameLength: 128,\n});\n\nexport const DEFAULT_RUNTIME_LIMITS: RuntimeLimits = Object.freeze({\n maxPeers: 32,\n maxPendingCallsPerPeer: 64,\n maxPendingCallsPerRuntime: 512,\n maxActiveStreamsPerPeer: 16,\n maxActiveStreamsPerRuntime: 128,\n maxExecutionSlotsPerPeer: 64,\n maxExecutionSlotsPerRuntime: 512,\n maxMessageBudgetBytes: DEFAULT_DTO_LIMITS.maxBudgetBytes,\n maxRetainedPayloadBytesPerPeer: 64 * 1024 * 1024,\n maxRetainedPayloadBytesPerRuntime: 256 * 1024 * 1024,\n maxSnapshotUnits: 512,\n maxSnapshotServices: 1_024,\n maxDtoDepth: DEFAULT_DTO_LIMITS.maxDepth,\n maxDtoNodes: DEFAULT_DTO_LIMITS.maxNodes,\n maxDtoEdges: DEFAULT_DTO_LIMITS.maxEdges,\n maxTransferEntries: 64,\n maxTransfers: 32,\n maxMessagePorts: 8,\n maxStreamCredit: 256,\n});\n\nexport type RuntimeLimitsInput = Partial<RuntimeLimits>;\n\n/** Runtime execution slot 释放时等待调度的回调。 */\nexport type RuntimeExecutionWaiter = () => void;\n\n/** 一个 Runtime/方向共享的原子配额计数器;仅由 transport 装配层持有。 */\nexport interface RuntimeBudget {\n readonly limits: RuntimeLimits;\n pendingCalls: number;\n activeStreams: number;\n executionSlots: number;\n retainedPayloadBytes: number;\n /** 以 FIFO 顺序登记一个等待全局 execution slot 的 transport 队列。 */\n registerExecutionWaiter(waiter: RuntimeExecutionWaiter): () => void;\n /** 释放一个全局 execution slot,并公平唤醒一个等待者。 */\n releaseExecutionSlot(): void;\n}\n\nexport function createRuntimeBudget(limits?: RuntimeLimitsInput): RuntimeBudget {\n const waiters = new Set<RuntimeExecutionWaiter>();\n const budget: RuntimeBudget = {\n limits: normalizeRuntimeLimits(limits),\n pendingCalls: 0,\n activeStreams: 0,\n executionSlots: 0,\n retainedPayloadBytes: 0,\n registerExecutionWaiter(waiter) {\n if (typeof waiter !== \"function\") throw new TypeError(\"Runtime execution waiter must be a function\");\n waiters.add(waiter);\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n waiters.delete(waiter);\n };\n },\n releaseExecutionSlot() {\n budget.executionSlots = Math.max(0, budget.executionSlots - 1);\n const waiter = waiters.values().next().value as RuntimeExecutionWaiter | undefined;\n if (waiter === undefined) return;\n waiters.delete(waiter);\n // Do not re-enter a bridge while it is still unwinding the callback that\n // released the slot. The microtask also makes the FIFO scheduler fair\n // across endpoints that share this RuntimeBudget.\n queueMicrotask(() => {\n try { waiter(); } catch { /* a closed transport may race the wake-up */ }\n });\n },\n };\n return budget;\n}\n\n/** 合并并验证可信 Runtime 装配提供的预算。 */\nexport function normalizeRuntimeLimits(input: RuntimeLimitsInput | undefined): RuntimeLimits {\n const result = { ...DEFAULT_RUNTIME_LIMITS, ...(input ?? {}) };\n for (const [key, value] of Object.entries(result)) {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`Runtime limit ${key} must be a finite positive integer`);\n }\n const defaultValue = DEFAULT_RUNTIME_LIMITS[key as keyof RuntimeLimits];\n if (value > defaultValue) throw new TypeError(`Runtime limit ${key} cannot exceed the v4 default budget`);\n }\n if (result.maxMessagePorts > result.maxTransfers) throw new TypeError(\"maxMessagePorts cannot exceed maxTransfers\");\n if (result.maxTransferEntries < result.maxTransfers) throw new TypeError(\"maxTransferEntries cannot be less than maxTransfers\");\n if (result.maxStreamCredit > 256) throw new TypeError(\"maxStreamCredit cannot exceed 256\");\n return Object.freeze(result);\n}\n\nexport interface DtoStats {\n /** 唯一对象节点数。 */\n readonly nodes: number;\n /** 引用边/字段槽位数。 */\n readonly edges: number;\n /** 确定性计费字节数。 */\n readonly budgetBytes: number;\n /** 图中可达的业务 MessagePort。 */\n readonly messagePorts: readonly MessagePort[];\n /** 图中可达的 transfer 资源。 */\n readonly reachableTransferables: readonly Transferable[];\n}\n\nexport interface ValidateDtoOptions {\n /** DTO 边界;缺省使用 v4 默认值。 */\n readonly limits?: Partial<DtoLimits>;\n /** 已声明的 transfer;MessagePort 只有在这里才可进入规范化图。 */\n readonly transferables?: ReadonlySet<Transferable>;\n /** 原始 parser 输入检查允许暂时观察 MessagePort。 */\n readonly allowUnlistedMessagePorts?: boolean;\n /** 错误所属阶段。 */\n readonly phase?: \"validate\" | \"receive\" | \"dispatch\";\n}\n\nfunction isObject(value: unknown): value is object {\n return value !== null && typeof value === \"object\";\n}\n\nfunction isMessagePort(value: unknown): value is MessagePort {\n if (!isObject(value)) return false;\n try {\n // Browser realms normally expose the MessagePort brand, while Node's\n // worker_threads implementation currently reports `[object EventTarget]`.\n // `instanceof MessagePort` is not cross-realm safe, so retain the brand\n // fast path and use the complete transferable interface as the fallback.\n if (Object.prototype.toString.call(value) === \"[object MessagePort]\") return true;\n const candidate = value as Partial<MessagePort>;\n return typeof candidate.postMessage === \"function\"\n && typeof candidate.start === \"function\"\n && typeof candidate.close === \"function\"\n && typeof candidate.addEventListener === \"function\"\n && typeof candidate.removeEventListener === \"function\";\n } catch {\n return false;\n }\n}\n\nfunction isArrayBuffer(value: unknown): value is ArrayBuffer {\n if (!isObject(value)) return false;\n try {\n return Object.prototype.toString.call(value) === \"[object ArrayBuffer]\";\n } catch {\n return false;\n }\n}\n\nfunction isSharedArrayBuffer(value: unknown): boolean {\n if (!isObject(value)) return false;\n try {\n return Object.prototype.toString.call(value) === \"[object SharedArrayBuffer]\";\n } catch {\n return false;\n }\n}\n\nfunction isBlob(value: unknown): value is Blob {\n if (!isObject(value)) return false;\n try {\n const tag = Object.prototype.toString.call(value);\n return tag === \"[object Blob]\" || tag === \"[object File]\";\n } catch {\n return false;\n }\n}\n\nfunction isDate(value: unknown): value is Date {\n if (!isObject(value)) return false;\n try { return Object.prototype.toString.call(value) === \"[object Date]\"; } catch { return false; }\n}\n\nfunction isSupportedTransfer(value: unknown): value is Transferable {\n return isArrayBuffer(value) || isMessagePort(value);\n}\n\nfunction ownKeys(value: object): PropertyKey[] {\n try { return Reflect.ownKeys(value); } catch { throw new Error(\"DTO property inspection failed\"); }\n}\n\nfunction rejectCustomKeys(value: object): void {\n for (const key of ownKeys(value)) throw new Error(`Unsupported custom property ${String(key)}`);\n}\n\nfunction descriptorValue(value: object, key: PropertyKey, label: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !descriptor.enumerable || !(\"value\" in descriptor)) throw new Error(`${label} must contain enumerable data properties`);\n return descriptor.value;\n}\n\nfunction arrayIndex(key: string): number | undefined {\n if (!/^(?:0|[1-9][0-9]*)$/.test(key)) return undefined;\n const index = Number(key);\n return Number.isSafeInteger(index) && index >= 0 ? index : undefined;\n}\n\nfunction isTypedArray(value: object): boolean {\n try { return ArrayBuffer.isView(value) && Object.prototype.toString.call(value) !== \"[object DataView]\"; } catch { return false; }\n}\n\nfunction assertFixedBuffer(value: ArrayBuffer): number {\n if (isSharedArrayBuffer(value)) throw new Error(\"SharedArrayBuffer is not supported\");\n try {\n if ((value as ArrayBuffer & { resizable?: unknown }).resizable === true) throw new Error(\"Resizable ArrayBuffer is not supported\");\n // A zero-byte buffer is valid; slice distinguishes it from a detached buffer.\n ArrayBuffer.prototype.slice.call(value, 0, 0);\n const length = value.byteLength;\n if (!Number.isSafeInteger(length) || length < 0) throw new Error(\"Invalid ArrayBuffer length\");\n rejectCustomKeys(value);\n return length;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"not supported\")) throw error;\n throw new Error(\"Detached or invalid ArrayBuffer\");\n }\n}\n\nfunction assertNoCustomViewProperties(value: object, length: number): void {\n for (const key of ownKeys(value)) {\n if (typeof key !== \"string\") throw new Error(\"TypedArray symbols are not supported\");\n const index = arrayIndex(key);\n if (index === undefined || index >= length) throw new Error(\"TypedArray has unsupported custom properties\");\n descriptorValue(value, key, \"TypedArray\");\n }\n}\n\nfunction error(code: \"invalid_message\" | \"resource_limit_exceeded\", message: string, phase: ValidateDtoOptions[\"phase\"] = \"validate\"): never {\n throw new WebLoomError(code, message, phase ?? \"validate\");\n}\n\n/**\n * 检查一个有限 DTO 图。遍历只读取 data property descriptor,不主动执行\n * 普通对象 getter;Proxy 的 trap 无法由 JavaScript 通用地检测或隔离。\n */\nexport function validateDto(value: unknown, options: ValidateDtoOptions = {}): DtoStats {\n const limits: DtoLimits = { ...DEFAULT_DTO_LIMITS, ...(options.limits ?? {}) };\n const transferables = options.transferables ?? new Set<Transferable>();\n const messagePorts: MessagePort[] = [];\n const reachableTransferables: Transferable[] = [];\n const seen = new Map<object, number>();\n const active = new Set<object>();\n let nodes = 0;\n let edges = 0;\n let budgetBytes = 0;\n\n const charge = (amount: number): void => {\n if (!Number.isSafeInteger(amount) || amount < 0 || budgetBytes > limits.maxBudgetBytes - amount) error(\"resource_limit_exceeded\", \"DTO budget exceeded\", options.phase);\n budgetBytes += amount;\n };\n const addEdge = (): void => {\n edges += 1;\n if (edges > limits.maxEdges) error(\"resource_limit_exceeded\", \"DTO edge limit exceeded\", options.phase);\n charge(16);\n };\n const addNode = (): void => {\n nodes += 1;\n if (nodes > limits.maxNodes) error(\"resource_limit_exceeded\", \"DTO node limit exceeded\", options.phase);\n charge(32);\n };\n const child = (childValue: unknown, depth: number): number => {\n addEdge();\n return walk(childValue, depth);\n };\n\n const walk = (current: unknown, depth: number): number => {\n if (depth > limits.maxDepth) error(\"resource_limit_exceeded\", \"DTO depth limit exceeded\", options.phase);\n if (current === null || current === undefined) { charge(8); return 0; }\n switch (typeof current) {\n case \"boolean\": charge(8); return 0;\n case \"string\":\n if (current.length > limits.maxStringLength) error(\"resource_limit_exceeded\", \"DTO string limit exceeded\", options.phase);\n charge(current.length * 2); return 0;\n case \"number\":\n if (!Number.isFinite(current)) error(\"invalid_message\", \"DTO number must be finite\", options.phase);\n charge(8); return 0;\n case \"bigint\":\n if (current < -(2n ** 63n) || current > (2n ** 63n) - 1n) error(\"invalid_message\", \"DTO bigint must fit signed 64-bit\", options.phase);\n charge(8); return 0;\n case \"function\":\n case \"symbol\":\n error(\"invalid_message\", \"Unsupported DTO value\", options.phase);\n }\n if (!isObject(current)) error(\"invalid_message\", \"Unsupported DTO value\", options.phase);\n if (active.has(current)) error(\"invalid_message\", \"DTO cycles are not supported\", options.phase);\n const known = seen.get(current);\n if (known !== undefined) {\n if (depth + known > limits.maxDepth) error(\"resource_limit_exceeded\", \"DTO depth limit exceeded\", options.phase);\n return known;\n }\n addNode();\n active.add(current);\n let subtreeDepth = 0;\n try {\n if (isMessagePort(current)) {\n if (!options.allowUnlistedMessagePorts && !transferables.has(current)) error(\"invalid_message\", \"MessagePort was not declared by the capability\", options.phase);\n messagePorts.push(current);\n reachableTransferables.push(current);\n } else if (isSharedArrayBuffer(current)) {\n error(\"invalid_message\", \"SharedArrayBuffer is not supported\", options.phase);\n } else if (isArrayBuffer(current)) {\n reachableTransferables.push(current);\n charge(assertFixedBuffer(current));\n } else if (ArrayBuffer.isView(current)) {\n const view = current as ArrayBufferView & { buffer: ArrayBufferLike; byteLength: number; byteOffset: number };\n if (isSharedArrayBuffer(view.buffer)) error(\"invalid_message\", \"SharedArrayBuffer is not supported\", options.phase);\n if (!isArrayBuffer(view.buffer)) error(\"invalid_message\", \"Unsupported view backing buffer\", options.phase);\n const byteLength = assertFixedBuffer(view.buffer);\n if (!Number.isSafeInteger(view.byteLength) || !Number.isSafeInteger(view.byteOffset) || view.byteLength < 0 || view.byteOffset < 0 || view.byteOffset + view.byteLength > byteLength) error(\"invalid_message\", \"Invalid buffer view\", options.phase);\n if (isTypedArray(current)) {\n const length = (current as unknown as { length: number }).length;\n if (!Number.isSafeInteger(length) || length < 0) error(\"invalid_message\", \"Invalid TypedArray length\", options.phase);\n assertNoCustomViewProperties(current, length);\n } else rejectCustomKeys(current);\n reachableTransferables.push(view.buffer);\n subtreeDepth = Math.max(subtreeDepth, 1 + child(view.buffer, depth + 1));\n charge(32);\n } else if (isDate(current)) {\n rejectCustomKeys(current);\n if (!Number.isFinite(current.getTime())) error(\"invalid_message\", \"Invalid Date\", options.phase);\n charge(16);\n } else if (isBlob(current)) {\n rejectCustomKeys(current);\n const size = current.size;\n const type = current.type;\n if (!Number.isSafeInteger(size) || size < 0 || type.length > limits.maxStringLength) error(\"resource_limit_exceeded\", \"Blob metadata exceeds DTO budget\", options.phase);\n charge(size + type.length * 2);\n if (Object.prototype.toString.call(current) === \"[object File]\") {\n const name = (current as File).name;\n if (name.length > limits.maxStringLength) error(\"resource_limit_exceeded\", \"File name exceeds DTO budget\", options.phase);\n charge(name.length * 2);\n }\n } else if (Array.isArray(current)) {\n const keys = ownKeys(current);\n if (keys.some((key) => typeof key !== \"string\")) error(\"invalid_message\", \"Array symbols are not supported\", options.phase);\n const names = keys as string[];\n const lengthDescriptor = Object.getOwnPropertyDescriptor(current, \"length\");\n const length = lengthDescriptor?.value;\n if (!lengthDescriptor || !Number.isSafeInteger(length) || length < 0 || names.length !== length + 1 || !names.includes(\"length\")) error(\"invalid_message\", \"Arrays must be dense DTO arrays\", options.phase);\n for (let index = 0; index < length; index += 1) {\n const name = String(index);\n if (!names.includes(name)) error(\"invalid_message\", \"Arrays must be dense DTO arrays\", options.phase);\n const valueAtIndex = descriptorValue(current, name, \"Array\");\n subtreeDepth = Math.max(subtreeDepth, 1 + child(valueAtIndex, depth + 1));\n }\n } else {\n let prototype: object | null;\n try { prototype = Object.getPrototypeOf(current); } catch { error(\"invalid_message\", \"DTO prototype inspection failed\", options.phase); }\n if (prototype !== Object.prototype && prototype !== null) error(\"invalid_message\", \"DTO records must use Object.prototype or null prototype\", options.phase);\n const keys = ownKeys(current);\n for (const key of keys) {\n if (typeof key !== \"string\") error(\"invalid_message\", \"DTO symbols are not supported\", options.phase);\n if (key.length > limits.maxFieldNameLength) error(\"resource_limit_exceeded\", \"DTO field name limit exceeded\", options.phase);\n charge(key.length * 2);\n subtreeDepth = Math.max(subtreeDepth, 1 + child(descriptorValue(current, key, \"Record\"), depth + 1));\n }\n }\n } finally {\n active.delete(current);\n }\n seen.set(current, subtreeDepth);\n return subtreeDepth;\n };\n\n walk(value, 0);\n return Object.freeze({ nodes, edges, budgetBytes, messagePorts: Object.freeze(messagePorts), reachableTransferables: Object.freeze(reachableTransferables) });\n}\n\n/** 验证 transfer extractor 的原始列表、可达性和数量预算。 */\nexport interface TransferValidation {\n /** 去重后、与 payload 可达集合一致的 transfer 列表。 */\n readonly transfer: readonly Transferable[];\n /** 与 transfer 上下文一致的生产 DTO walker 结果。 */\n readonly stats: DtoStats;\n}\n\n/** 验证 transfer 并返回同一次 walker 的计费结果,避免接收端丢失 transfer 上下文后二次误判。 */\nexport function validateTransferListWithStats(\n value: unknown,\n transfer: readonly Transferable[] | undefined,\n options: { readonly limits?: RuntimeLimitsInput; readonly phase?: \"validate\" | \"receive\" | \"dispatch\" } = {},\n): TransferValidation {\n const limits = normalizeRuntimeLimits(options.limits);\n if (transfer === undefined) {\n const stats = validateDto(value, {\n limits: {\n maxDepth: limits.maxDtoDepth,\n maxNodes: limits.maxDtoNodes,\n maxEdges: limits.maxDtoEdges,\n maxBudgetBytes: limits.maxMessageBudgetBytes,\n },\n transferables: new Set<Transferable>(),\n phase: options.phase ?? \"validate\",\n });\n return { transfer: Object.freeze([]), stats };\n }\n if (!Array.isArray(transfer) || transfer.length > limits.maxTransferEntries) {\n throw new WebLoomError(\"transfer_invalid\", \"Capability transfer list exceeds its bounded entry limit\", options.phase ?? \"validate\");\n }\n const result: Transferable[] = [];\n const seen = new Set<Transferable>();\n let ports = 0;\n for (const item of transfer) {\n if (!isSupportedTransfer(item)) throw new WebLoomError(\"transfer_invalid\", \"Capability transfer extractor returned an unsupported resource\", options.phase ?? \"validate\");\n if (seen.has(item)) continue;\n seen.add(item);\n result.push(item);\n if (isMessagePort(item)) ports += 1;\n if (result.length > limits.maxTransfers || ports > limits.maxMessagePorts) throw new WebLoomError(\"transfer_invalid\", \"Capability transfer list exceeds its bounded resource limit\", options.phase ?? \"validate\");\n }\n const stats = validateDto(value, {\n limits: {\n maxDepth: limits.maxDtoDepth,\n maxNodes: limits.maxDtoNodes,\n maxEdges: limits.maxDtoEdges,\n maxBudgetBytes: limits.maxMessageBudgetBytes,\n },\n // MessagePort presence is checked below so a missing declaration is\n // reported as a transfer-contract error, while the walker still validates\n // the complete DTO graph and preserves the actual port identity set.\n allowUnlistedMessagePorts: true,\n transferables: new Set(result),\n phase: options.phase ?? \"validate\",\n });\n const reachable = new Set(stats.reachableTransferables);\n if (result.some((item) => !reachable.has(item))) throw new WebLoomError(\"transfer_invalid\", \"Capability transfer resource is not reachable from its payload\", options.phase ?? \"validate\");\n const declared = new Set(result);\n if (stats.messagePorts.some((port) => !declared.has(port))) throw new WebLoomError(\"transfer_invalid\", \"Capability payload contains a MessagePort missing from its transfer declaration\", options.phase ?? \"validate\");\n return { transfer: Object.freeze(result), stats };\n}\n\nexport function validateTransferList(\n value: unknown,\n transfer: readonly Transferable[] | undefined,\n options: { readonly limits?: RuntimeLimitsInput; readonly phase?: \"validate\" | \"receive\" | \"dispatch\" } = {},\n): readonly Transferable[] {\n return validateTransferListWithStats(value, transfer, options).transfer;\n}\n\n/** 对接收端已有的 MessageEvent.ports 建立一次性关闭账本。 */\nexport interface ReceivePortLedger {\n /** 本次消息实际收到的 raw ports。 */\n readonly ports: readonly MessagePort[];\n /** raw 账本是否通过数量、类型和去重检查。 */\n readonly valid: boolean;\n /** 将所有端口的关闭责任移交业务调用者。 */\n handoff(): void;\n /** 关闭尚未移交的端口;幂等。 */\n closeUndelivered(): void;\n}\n\nexport function createReceivePortLedger(\n ports: readonly MessagePort[] | undefined,\n options: { readonly limits?: RuntimeLimitsInput; readonly phase?: \"validate\" | \"receive\" | \"dispatch\" } = {},\n): ReceivePortLedger {\n const limits = normalizeRuntimeLimits(options.limits);\n const source = Array.isArray(ports) ? ports : [];\n let invalid = ports !== undefined && !Array.isArray(ports);\n invalid = invalid || source.length > limits.maxTransferEntries;\n const unique: MessagePort[] = [];\n const seen = new Set<MessagePort>();\n for (const port of source) {\n if (!isMessagePort(port) || seen.has(port)) invalid = true;\n else { seen.add(port); unique.push(port); }\n }\n if (unique.length > limits.maxMessagePorts) invalid = true;\n let handedOff = false;\n let closed = false;\n const close = (): void => {\n if (closed || handedOff) return;\n closed = true;\n for (const port of unique) { try { port.close(); } catch { /* best effort */ } }\n };\n if (invalid) close();\n return {\n ports: Object.freeze(unique),\n valid: !invalid,\n handoff() { if (!closed) handedOff = true; },\n closeUndelivered: close,\n };\n}\n\n/** 比较 extractor 声明的 MessagePort 集合与 MessageEvent.ports。 */\nexport function assertReceivedPortSet(\n ledger: ReceivePortLedger,\n expected: readonly Transferable[],\n options: { readonly limits?: RuntimeLimitsInput; readonly phase?: \"validate\" | \"receive\" | \"dispatch\" } = {},\n): void {\n const expectedPorts = expected.filter(isMessagePort);\n const actual = new Set(ledger.ports);\n const wanted = new Set(expectedPorts);\n if (actual.size !== wanted.size || [...actual].some((port) => !wanted.has(port))) {\n ledger.closeUndelivered();\n throw new WebLoomError(\"transfer_invalid\", \"Received MessagePort set does not match the capability transfer declaration\", options.phase ?? \"receive\");\n }\n}\n\n/** 在 parser 前检查原始载荷,允许随后由契约 extractor 决定是否接收其中的 port。 */\nexport function validateRawDto(value: unknown, limits: RuntimeLimitsInput | undefined, phase: \"validate\" | \"receive\" = \"receive\"): DtoStats {\n const normalized = normalizeRuntimeLimits(limits);\n return validateDto(value, {\n limits: { maxDepth: normalized.maxDtoDepth, maxNodes: normalized.maxDtoNodes, maxEdges: normalized.maxDtoEdges, maxBudgetBytes: normalized.maxMessageBudgetBytes },\n allowUnlistedMessagePorts: true,\n phase,\n });\n}\n\nfunction cloneAttributeValue(value: unknown, seen: Map<object, unknown>): unknown {\n if (value === null || typeof value !== \"object\") return value;\n const existing = seen.get(value);\n if (existing !== undefined) return existing;\n if (Array.isArray(value)) {\n const result: unknown[] = [];\n seen.set(value, result);\n const length = (Object.getOwnPropertyDescriptor(value, \"length\")?.value ?? 0) as number;\n for (let index = 0; index < length; index += 1) {\n const child = Object.getOwnPropertyDescriptor(value, String(index))?.value;\n result.push(cloneAttributeValue(child, seen));\n }\n return result;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) throw new Error(\"Capability attributes must contain only records and arrays\");\n const result = Object.create(prototype) as Record<string, unknown>;\n seen.set(value, result);\n for (const key of Object.keys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor)) throw new Error(\"Capability attributes must contain data properties\");\n result[key] = cloneAttributeValue(descriptor.value, seen);\n }\n return result;\n}\n\n/** 深复制并冻结公开 attributes;输入/输出均经过同一有限 DTO 校验。 */\nexport function cloneFrozenAttributes(value: Readonly<Record<string, unknown>> | undefined): Readonly<Record<string, unknown>> {\n const source = value ?? {};\n try {\n const stats = validateDto(source, { limits: ATTRIBUTES_DTO_LIMITS, phase: \"validate\" });\n if (stats.messagePorts.length > 0 || stats.reachableTransferables.length > 0) throw new Error(\"Capability attributes cannot contain transferable resources\");\n if (!source || typeof source !== \"object\" || Array.isArray(source)) throw new Error(\"Capability attributes must be a finite record\");\n const clone = cloneAttributeValue(source, new Map<object, unknown>());\n const clonedStats = validateDto(clone, { limits: ATTRIBUTES_DTO_LIMITS, phase: \"validate\" });\n if (!clone || typeof clone !== \"object\" || Array.isArray(clone) || clonedStats.messagePorts.length > 0 || clonedStats.reachableTransferables.length > 0) throw new Error(\"Capability attributes must be a finite record\");\n const freeze = (current: unknown, seen: Set<object>): void => {\n if (!current || typeof current !== \"object\" || seen.has(current)) return;\n seen.add(current);\n if (Array.isArray(current)) for (const item of current) freeze(item, seen);\n else for (const key of Object.keys(current)) freeze((current as Record<string, unknown>)[key], seen);\n Object.freeze(current);\n };\n freeze(clone, new Set<object>());\n return clone as Readonly<Record<string, unknown>>;\n } catch (error) {\n if (error instanceof WebLoomError) throw error;\n throw new WebLoomError(\"invalid_message\", \"Capability attributes are not a finite cloneable record\", \"validate\");\n }\n}\n","// WebLoom v4 唯一 Runtime wire:webloom.runtime.v1。\n\nimport type { RuntimeServiceSnapshot, RuntimeSnapshot, RuntimeKind, RuntimeEndpointBinding } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { ATTRIBUTES_DTO_LIMITS, validateDto } from \"../transport/dto.js\";\n\nexport const RUNTIME_PROTOCOL_VERSION = \"webloom.runtime.v1\" as const;\nexport const RUNTIME_SNAPSHOT_TYPE = `${RUNTIME_PROTOCOL_VERSION}.snapshot` as const;\nexport const RUNTIME_ERROR_TYPE = `${RUNTIME_PROTOCOL_VERSION}.runtime-error` as const;\nexport const RUNTIME_CALL_TYPE = `${RUNTIME_PROTOCOL_VERSION}.call` as const;\nexport const RUNTIME_RESULT_TYPE = `${RUNTIME_PROTOCOL_VERSION}.result` as const;\nexport const RUNTIME_ERROR_MESSAGE_TYPE = `${RUNTIME_PROTOCOL_VERSION}.error` as const;\nexport const RUNTIME_CANCEL_TYPE = `${RUNTIME_PROTOCOL_VERSION}.cancel` as const;\nexport const RUNTIME_NEXT_TYPE = `${RUNTIME_PROTOCOL_VERSION}.next` as const;\nexport const RUNTIME_CREDIT_TYPE = `${RUNTIME_PROTOCOL_VERSION}.credit` as const;\nexport const RUNTIME_CLOSE_TYPE = `${RUNTIME_PROTOCOL_VERSION}.close` as const;\nexport const RUNTIME_CLOSE_ACK_TYPE = `${RUNTIME_PROTOCOL_VERSION}.close-ack` as const;\n\n/** 每条 Runtime wire 消息所属的框架 endpoint 身份。 */\nexport type RuntimeSessionBinding = RuntimeEndpointBinding;\n\nexport interface RuntimeSnapshotUnit {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 单元标识。 */\n readonly unitId: string;\n /** Runtime。 */\n readonly runtime: RuntimeKind;\n /** 实例标识。 */\n readonly instanceId?: string;\n /** 状态。 */\n readonly state: import(\"../contracts/plugin.js\").PluginStateKind;\n}\n\nexport type RuntimeSnapshotMessage = RuntimeSnapshot & { readonly type: typeof RUNTIME_SNAPSHOT_TYPE; readonly binding?: RuntimeSessionBinding };\n\nexport interface RuntimeErrorMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_ERROR_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送此错误的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** 结构化错误码。 */\n readonly code: string;\n /** 脱敏消息。 */\n readonly message: string;\n /** 失败阶段。 */\n readonly phase: \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\";\n /** 可选插件标识。 */\n readonly pluginId?: string;\n /** 可选单元标识。 */\n readonly unitId?: string;\n}\n\nexport interface RuntimeCallMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_CALL_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发起调用的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** 方向内唯一 call id。 */\n readonly callId: string;\n /** capability 标识。 */\n readonly capabilityId: string;\n /** 契约版本。 */\n readonly contractVersion: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** 调用模式。 */\n readonly mode: \"unary\" | \"stream\";\n /** 本次派发的剩余预算。 */\n readonly timeoutMs: number;\n /** 已 parser 验证的请求。 */\n readonly request: unknown;\n /** 产品操作标识。 */\n readonly operationId?: string;\n /** 领域授权标识。 */\n readonly grantId?: string;\n /** stream 初始 credit。 */\n readonly initialCredit?: number;\n}\n\nexport interface RuntimeUnaryResultMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_RESULT_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送结果的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** unary 结果。 */\n readonly result: unknown;\n}\n\nexport interface RuntimeStreamReadyMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_RESULT_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送结果的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** stream 建立确认。 */\n readonly streamReady: true;\n}\n\nexport interface RuntimeStreamDoneMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_RESULT_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送结果的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** stream 正常结束。 */\n readonly done: true;\n}\n\nexport type RuntimeResultMessage = RuntimeUnaryResultMessage | RuntimeStreamReadyMessage | RuntimeStreamDoneMessage;\n\nexport interface RuntimeErrorResponseMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_ERROR_MESSAGE_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送错误响应的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** 结构化错误。 */\n readonly error: { readonly code: string; readonly message: string; readonly phase: RuntimeErrorMessage[\"phase\"]; readonly details?: Readonly<Record<string, unknown>> };\n}\n\nexport interface RuntimeCancelMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_CANCEL_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送取消的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n}\n\nexport interface RuntimeNextMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_NEXT_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送 stream item 的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** 连续序号。 */\n readonly sequence: number;\n /** parser 验证的 item。 */\n readonly item: unknown;\n}\n\nexport interface RuntimeCreditMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_CREDIT_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送 credit 的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** call id。 */\n readonly callId: string;\n /** exposure 身份。 */\n readonly serviceInstanceId: string;\n /** 新增 credit。 */\n readonly count: number;\n}\n\n/** 请求对端先同步 fence、再等待真实执行排空。 */\nexport interface RuntimeCloseMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_CLOSE_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发起关闭的物理 endpoint 绑定。 */\n readonly binding?: RuntimeSessionBinding;\n /** 对端 drain 的最大等待时间。 */\n readonly timeoutMs?: number;\n}\n\n/** 对端完成或超时 drain 后返回的关闭确认。 */\nexport interface RuntimeCloseAckMessage {\n /** 消息类型。 */\n readonly type: typeof RUNTIME_CLOSE_ACK_TYPE;\n /** 协议版本。 */\n readonly protocolVersion: typeof RUNTIME_PROTOCOL_VERSION;\n /** 发送确认的物理 endpoint 绑定。 */\n readonly binding: RuntimeSessionBinding;\n /** 确认对应的发起方 binding,防止旧 close-ack 误配新 session。 */\n readonly acknowledgedBinding: RuntimeSessionBinding;\n /** 对端本次 drain 的结果。 */\n readonly drained: boolean;\n /** 是否达到 bounded deadline。 */\n readonly timedOut: boolean;\n /** deadline 到达时仍存活的执行槽数量。 */\n readonly pendingExecutions: number;\n}\n\nexport type RuntimeWireMessage = RuntimeSnapshotMessage | RuntimeErrorMessage | RuntimeCallMessage | RuntimeResultMessage | RuntimeErrorResponseMessage | RuntimeCancelMessage | RuntimeNextMessage | RuntimeCreditMessage | RuntimeCloseMessage | RuntimeCloseAckMessage;\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction text(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nconst MAX_CALL_ID_LENGTH = 128;\nconst MAX_ID_LENGTH = 256;\nconst MAX_VERSION_LENGTH = 64;\nconst MAX_ERROR_MESSAGE_LENGTH = 1_024;\nconst MAX_SNAPSHOT_UNITS = 512;\nconst MAX_SNAPSHOT_SERVICES = 1_024;\n\nfunction boundedText(value: unknown, maximum: number): value is string {\n return text(value) && value.length <= maximum;\n}\n\nfunction phase(value: unknown): value is RuntimeErrorMessage[\"phase\"] {\n return value === \"validate\" || value === \"wait\" || value === \"dispatch\" || value === \"execute\" || value === \"receive\" || value === \"dispose\";\n}\n\nfunction validDetails(value: unknown): boolean {\n if (value === undefined) return true;\n if (!record(value)) return false;\n try {\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor?.enumerable || !(\"value\" in descriptor)) return false;\n }\n } catch {\n return false;\n }\n let budget = 0;\n for (const [key, child] of Object.entries(value)) {\n if (key.length > 128) return false;\n if (typeof child === \"string\") { if (child.length > 1_024) return false; budget += key.length * 2 + child.length * 2; }\n else if (typeof child === \"number\") { if (!Number.isFinite(child)) return false; budget += key.length * 2 + 8; }\n else if (typeof child === \"boolean\" || child === null) budget += key.length * 2 + 8;\n else return false;\n if (budget > 4 * 1024) return false;\n }\n return true;\n}\n\nfunction validIdentity(message: Record<string, unknown>): boolean {\n return boundedText(message.protocolVersion, MAX_VERSION_LENGTH) && message.protocolVersion === RUNTIME_PROTOCOL_VERSION;\n}\n\nfunction validBinding(value: unknown): value is RuntimeSessionBinding {\n if (!record(value)) return false;\n return boundedText(value.runtimeInstanceId, MAX_ID_LENGTH) && boundedText(value.connectionId, MAX_ID_LENGTH);\n}\n\n/** close-ack 的结果组合必须能被真实 drain 语义解释。 */\nfunction validDrainResult(value: Record<string, unknown>): boolean {\n if (typeof value.drained !== \"boolean\" || typeof value.timedOut !== \"boolean\"\n || !Number.isSafeInteger(value.pendingExecutions) || (value.pendingExecutions as number) < 0) return false;\n // A successful drain cannot also time out or retain execution slots.\n if (value.drained && (value.timedOut || value.pendingExecutions !== 0)) return false;\n // A timeout must report the work which prevented completion. A non-timeout\n // failure is allowed for a participant that rejected while no slot remains.\n if (value.timedOut && (!value.pendingExecutions || value.drained)) return false;\n return true;\n}\n\nfunction validServiceIdentity(message: Record<string, unknown>): boolean {\n return boundedText(message.callId, MAX_CALL_ID_LENGTH) && boundedText(message.serviceInstanceId, MAX_ID_LENGTH);\n}\n\nfunction validateSnapshot(value: Record<string, unknown>): boolean {\n if (value.type !== RUNTIME_SNAPSHOT_TYPE || !validIdentity(value) || (value.binding !== undefined && !validBinding(value.binding)) || !boundedText(value.runtimeId, MAX_ID_LENGTH) || !boundedText(value.runtimeInstanceId, MAX_ID_LENGTH) || (value.runtimeKind !== \"window-main\" && value.runtimeKind !== \"shared-worker\") || !Number.isSafeInteger(value.revision) || (value.revision as number) < 0 || ![\"starting\", \"ready\", \"stopping\", \"failed\", \"disposed\"].includes(String(value.state)) || !Array.isArray(value.units) || !Array.isArray(value.services) || value.units.length > MAX_SNAPSHOT_UNITS || value.services.length > MAX_SNAPSHOT_SERVICES) return false;\n if (value.state !== \"ready\" && value.services.length !== 0) return false;\n const unitKeys = new Set<string>();\n for (const unit of value.units) {\n if (!record(unit) || !boundedText(unit.pluginId, MAX_ID_LENGTH) || !boundedText(unit.unitId, MAX_ID_LENGTH) || unit.runtime !== value.runtimeKind || ![\"registered\", \"starting\", \"stopping\", \"enabled\", \"disabled\", \"blocked\", \"error-disabled\", \"cleanup-pending\", \"unknown\"].includes(String(unit.state))) return false;\n if (unit.instanceId !== undefined && !boundedText(unit.instanceId, MAX_ID_LENGTH)) return false;\n const key = `${unit.pluginId}\\u0000${unit.unitId}`;\n if (unitKeys.has(key)) return false;\n unitKeys.add(key);\n }\n const serviceKeys = new Set<string>();\n for (const item of value.services) {\n if (!record(item) || (item.kind !== \"rpc\" && item.kind !== \"stream\") || !boundedText(item.capabilityId, MAX_ID_LENGTH) || !boundedText(item.contractVersion, MAX_VERSION_LENGTH) || !boundedText(item.serviceInstanceId, MAX_ID_LENGTH) || !record(item.attributes) || Array.isArray(item.attributes)) return false;\n try {\n const stats = validateDto(item.attributes, { limits: ATTRIBUTES_DTO_LIMITS, phase: \"validate\" });\n if (stats.messagePorts.length > 0 || stats.reachableTransferables.length > 0) return false;\n } catch { return false; }\n if (item.grantId !== undefined && !boundedText(item.grantId, MAX_ID_LENGTH)) return false;\n if (item.authorizationRevision !== undefined && (!Number.isSafeInteger(item.authorizationRevision) || (item.authorizationRevision as number) < 0)) return false;\n const key = `${item.kind}\\u0000${item.capabilityId}\\u0000${item.contractVersion}`;\n if (serviceKeys.has(key)) return false;\n serviceKeys.add(key);\n }\n return true;\n}\n\nfunction validateMessage(value: unknown): value is RuntimeWireMessage {\n if (!record(value) || !text(value.type) || !validIdentity(value)) return false;\n if (value.type === RUNTIME_SNAPSHOT_TYPE) return validateSnapshot(value);\n if (value.binding !== undefined && !validBinding(value.binding)) return false;\n if (value.type === RUNTIME_ERROR_TYPE) return boundedText(value.code, MAX_ID_LENGTH) && boundedText(value.message, MAX_ERROR_MESSAGE_LENGTH) && phase(value.phase) && (value.pluginId === undefined || boundedText(value.pluginId, MAX_ID_LENGTH)) && (value.unitId === undefined || boundedText(value.unitId, MAX_ID_LENGTH));\n if (value.type === RUNTIME_CALL_TYPE) return validServiceIdentity(value) && boundedText(value.capabilityId, MAX_ID_LENGTH) && boundedText(value.contractVersion, MAX_VERSION_LENGTH) && Object.hasOwn(value, \"request\") && validPayload(value.request) && (value.mode === \"unary\" || value.mode === \"stream\") && typeof value.timeoutMs === \"number\" && Number.isFinite(value.timeoutMs) && value.timeoutMs > 0 && value.timeoutMs <= 300_000 && (value.operationId === undefined || boundedText(value.operationId, MAX_ID_LENGTH)) && (value.grantId === undefined || boundedText(value.grantId, MAX_ID_LENGTH)) && (value.mode !== \"stream\" ? !Object.hasOwn(value, \"initialCredit\") : (Number.isSafeInteger(value.initialCredit) && (value.initialCredit as number) >= 1 && (value.initialCredit as number) <= 256));\n if (value.type === RUNTIME_RESULT_TYPE) return validServiceIdentity(value) && ((!Object.hasOwn(value, \"result\") || validPayload(value.result)) && ((value.streamReady === true && !Object.hasOwn(value, \"result\") && !Object.hasOwn(value, \"done\")) || (value.done === true && !Object.hasOwn(value, \"result\") && !Object.hasOwn(value, \"streamReady\")) || (Object.hasOwn(value, \"result\") && !Object.hasOwn(value, \"done\") && !Object.hasOwn(value, \"streamReady\"))));\n if (value.type === RUNTIME_ERROR_MESSAGE_TYPE) return validServiceIdentity(value) && record(value.error) && boundedText(value.error.code, MAX_ID_LENGTH) && boundedText(value.error.message, MAX_ERROR_MESSAGE_LENGTH) && phase(value.error.phase) && validDetails(value.error.details);\n if (value.type === RUNTIME_CANCEL_TYPE) return validServiceIdentity(value);\n if (value.type === RUNTIME_NEXT_TYPE) return validServiceIdentity(value) && Object.hasOwn(value, \"item\") && validPayload(value.item) && Number.isSafeInteger(value.sequence) && (value.sequence as number) >= 1;\n if (value.type === RUNTIME_CREDIT_TYPE) return validServiceIdentity(value) && Number.isSafeInteger(value.count) && (value.count as number) >= 1 && (value.count as number) <= 256;\n if (value.type === RUNTIME_CLOSE_TYPE) return !Object.hasOwn(value, \"reason\") && (value.timeoutMs === undefined || (Number.isFinite(value.timeoutMs) && (value.timeoutMs as number) >= 1 && (value.timeoutMs as number) <= 300_000));\n if (value.type === RUNTIME_CLOSE_ACK_TYPE) return validBinding(value.acknowledgedBinding) && validDrainResult(value);\n return false;\n}\n\nfunction validPayload(value: unknown): boolean {\n try {\n validateDto(value, { allowUnlistedMessagePorts: true, phase: \"validate\" });\n return true;\n } catch {\n return false;\n }\n}\n\nexport interface RuntimeMessageCodec {\n /** 严格验证并冻结 v4 message。 */\n encode(message: RuntimeWireMessage): RuntimeWireMessage;\n /** 严格解析 v4 message;旧协议直接拒绝。 */\n decode(value: unknown): RuntimeWireMessage;\n}\n\nexport function createRuntimeMessageCodec(): RuntimeMessageCodec {\n return {\n encode(message) {\n if (!validateMessage(message)) throw new WebLoomError(\"invalid_snapshot\", \"Invalid WebLoom runtime message\", \"validate\");\n return message;\n },\n decode(value) {\n if (!record(value) || value.protocolVersion !== RUNTIME_PROTOCOL_VERSION) throw new WebLoomError(\"protocol_mismatch\", \"Unsupported WebLoom runtime protocol\", \"validate\");\n if (!validateMessage(value)) throw new WebLoomError(\"invalid_snapshot\", \"Invalid WebLoom runtime message\", \"validate\");\n return value;\n },\n };\n}\n\nexport function isRuntimeSnapshot(value: RuntimeWireMessage): value is RuntimeSnapshotMessage {\n return value.type === RUNTIME_SNAPSHOT_TYPE;\n}\n","// WebLoom v4 capability registry。\n//\n// 注册键来自 kind/id/version,而不是对象引用。Provider/handler 的 owner\n// 信息留在本 realm,静态目录只使用 capabilityDescriptor。\n\nimport {\n capabilityDescriptor,\n capabilityKey,\n type Capability,\n type CapabilityDescriptor,\n type LocalCapability,\n type LocalServiceOf,\n type RemoteCapability,\n type RpcHandler,\n type RpcCapabilityBase,\n type StreamHandler,\n type StreamCapabilityBase,\n type ValueParser,\n} from \"../contracts/capability.js\";\nimport type { HandlerCallContext } from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope } from \"../contracts/lifecycle.js\";\n\n/** Host 内部保存的 capability 注册。 */\nexport interface CapabilityRegistration {\n /** realm 内 capability 对象。 */\n readonly capability: Capability;\n /** 提供该能力的插件实例。 */\n readonly ownerId: string;\n /** local 服务值。 */\n readonly value?: unknown;\n /** RPC/stream 显式 handler。 */\n readonly handler?: unknown;\n /** 提供者作用域。 */\n readonly scope?: LifecycleScope;\n /** 该 handler 允许通过 call.peer 观察的 capability 身份。 */\n readonly peerDependencies?: readonly CapabilityDescriptor[];\n /** 注册身份。 */\n readonly reference: import(\"../contracts/capability.js\").ServiceReference;\n}\n\n/** 能力 registry;不提供字符串或未约束泛型入口。 */\nexport interface CapabilityRegistry {\n /** 注册 local value;重复契约身份会抛错。 */\n provide<C extends LocalCapability<unknown>>(capability: C, value: LocalServiceOf<C>, ownerId?: string, scope?: LifecycleScope): void;\n /** 注册 RPC handler。 */\n handle<C extends RpcCapabilityBase>(capability: C, handler: RpcHandler<C>, ownerId: string, scope: LifecycleScope, reference: CapabilityRegistration[\"reference\"], peerDependencies?: readonly CapabilityDescriptor[]): void;\n /** 注册 stream handler。 */\n stream<C extends StreamCapabilityBase>(capability: C, handler: StreamHandler<C>, ownerId: string, scope: LifecycleScope, reference: CapabilityRegistration[\"reference\"], peerDependencies?: readonly CapabilityDescriptor[]): void;\n /** 撤销指定 owner 的一项能力。 */\n revoke(capability: Capability, ownerId?: string): void;\n /** 获取 local value。 */\n get<C extends LocalCapability<unknown>>(capability: C): LocalServiceOf<C>;\n /** 获取注册记录。 */\n registration(capability: Capability): CapabilityRegistration | undefined;\n /** 当前契约身份是否存在。 */\n has(capability: Capability): boolean;\n /** 要求当前契约身份存在。 */\n require(capability: Capability): CapabilityRegistration;\n /** 当前注册身份 DTO。 */\n descriptors(): readonly CapabilityDescriptor[];\n /** 当前注册记录;仅供 advanced/runtime 适配。 */\n registrations(): readonly CapabilityRegistration[];\n /** 在当前 realm 调用一个已注册的 RPC handler。 */\n invoke(capability: RemoteCapability, request: unknown, call: HandlerCallContext): Promise<unknown>;\n /** 在当前 realm 建立一个已注册的 stream handler。 */\n openStream(capability: StreamCapabilityBase, request: unknown, call: HandlerCallContext): Promise<AsyncIterable<unknown>>;\n}\n\nfunction cloneReference(reference: CapabilityRegistration[\"reference\"]): CapabilityRegistration[\"reference\"] {\n return Object.freeze({\n ...reference,\n attributes: Object.freeze({ ...reference.attributes }),\n });\n}\n\n/** 创建一个拒绝重复契约和 owner 越权撤销的 registry。 */\nexport function createCapabilityRegistry(): CapabilityRegistry {\n const entries = new Map<string, CapabilityRegistration>();\n\n const requireCapability = (capability: Capability): CapabilityRegistration => {\n const entry = entries.get(capabilityKey(capability));\n if (!entry) throw new Error(`Capability \"${capability.id}\" version \"${capability.version}\" is not available`);\n return entry;\n };\n\n return {\n provide(capability, value, ownerId = \"host\", scope) {\n if (capability.kind !== \"local\") throw new TypeError(`Capability \"${capability.id}\" is not local`);\n const key = capabilityKey(capability);\n if (entries.has(key)) throw new Error(`Capability \"${capability.id}\" version \"${capability.version}\" is already provided`);\n const reference = cloneReference({\n kind: \"rpc\",\n capabilityId: capability.id,\n contractVersion: capability.version,\n runtime: \"window-main\",\n runtimeInstanceId: \"local\",\n serviceInstanceId: `local:${ownerId}:${capability.id}:${capability.version}`,\n attributes: {},\n });\n entries.set(key, { capability, ownerId, value, scope, reference });\n },\n handle(capability, handler, ownerId, scope, reference, peerDependencies) {\n if (capability.kind !== \"rpc\") throw new TypeError(`Capability \"${capability.id}\" is not an RPC capability`);\n const key = capabilityKey(capability);\n if (entries.has(key)) throw new Error(`Capability \"${capability.id}\" version \"${capability.version}\" is already handled`);\n entries.set(key, {\n capability,\n ownerId,\n handler,\n scope,\n ...(peerDependencies ? { peerDependencies: Object.freeze([...peerDependencies]) } : {}),\n reference: cloneReference({ ...reference, kind: \"rpc\" }),\n });\n },\n stream(capability, handler, ownerId, scope, reference, peerDependencies) {\n if (capability.kind !== \"stream\") throw new TypeError(`Capability \"${capability.id}\" is not a stream capability`);\n const key = capabilityKey(capability);\n if (entries.has(key)) throw new Error(`Capability \"${capability.id}\" version \"${capability.version}\" is already handled`);\n entries.set(key, {\n capability,\n ownerId,\n handler,\n scope,\n ...(peerDependencies ? { peerDependencies: Object.freeze([...peerDependencies]) } : {}),\n reference: cloneReference({ ...reference, kind: \"stream\" }),\n });\n },\n revoke(capability, ownerId) {\n const key = capabilityKey(capability);\n const entry = entries.get(key);\n if (!entry) return;\n if (ownerId !== undefined && entry.ownerId !== ownerId) return;\n entries.delete(key);\n },\n get(capability) {\n const entry = requireCapability(capability);\n if (capability.kind !== \"local\" || entry.value === undefined) {\n throw new Error(`Capability \"${capability.id}\" is not a local value`);\n }\n return entry.value as LocalServiceOf<typeof capability>;\n },\n registration: (capability) => entries.get(capabilityKey(capability)),\n has: (capability) => entries.has(capabilityKey(capability)),\n require: requireCapability,\n descriptors: () => Object.freeze([...entries.values()].map((entry) => capabilityDescriptor(entry.capability))),\n registrations: () => Object.freeze([...entries.values()]),\n async invoke(capability, request, call) {\n const entry = requireCapability(capability);\n if (capability.kind !== \"rpc\" || typeof entry.handler !== \"function\") {\n throw new Error(`Capability \"${capability.id}\" is not an RPC handler`);\n }\n return await invokeCapabilityHandler(entry, request, call);\n },\n async openStream(capability, request, call) {\n const entry = requireCapability(capability);\n if (capability.kind !== \"stream\" || typeof entry.handler !== \"function\") {\n throw new Error(`Capability \"${capability.id}\" is not a stream handler`);\n }\n return await invokeCapabilityHandler(entry, request, call) as AsyncIterable<unknown>;\n },\n };\n}\n\n/** 在 registry 记录中执行已判别的 handler;供 transport/provider 使用。 */\nexport function invokeCapabilityHandler(\n registration: CapabilityRegistration,\n request: unknown,\n context: HandlerCallContext,\n): unknown | Promise<unknown> {\n if (registration.capability.kind === \"rpc\") {\n const capability = registration.capability as typeof registration.capability & {\n readonly request: ValueParser<unknown>;\n };\n const handler = registration.handler as ((request: unknown, context: HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new Error(`Capability \"${registration.capability.id}\" has no RPC handler`);\n let parsed: unknown;\n try { parsed = capability.request.parse(request); }\n catch (error) { throw new WebLoomError(\"request_validation_failed\", error instanceof Error ? error.message : String(error), \"validate\", { capabilityId: capability.id }); }\n return handler(parsed, context);\n }\n if (registration.capability.kind === \"stream\") {\n const capability = registration.capability as typeof registration.capability & {\n readonly request: ValueParser<unknown>;\n };\n const handler = registration.handler as ((request: unknown, context: HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new Error(`Capability \"${registration.capability.id}\" has no stream handler`);\n let parsed: unknown;\n try { parsed = capability.request.parse(request); }\n catch (error) { throw new WebLoomError(\"request_validation_failed\", error instanceof Error ? error.message : String(error), \"validate\", { capabilityId: capability.id }); }\n return handler(parsed, context);\n }\n throw new Error(`Capability \"${registration.capability.id}\" cannot be invoked remotely`);\n}\n","// WebLoom v4 静态插件/能力依赖图。\n//\n// 图只处理 descriptor,不保存 parser、transfer extractor 或 setup。真正的\n// capability 对象留在当前 realm,由 Host 在启动时用同一份定义表绑定实现。\n\nimport {\n capabilityKey,\n isCapabilityDescriptor,\n type CapabilityDescriptor,\n} from \"../contracts/capability.js\";\nimport type {\n PluginGraph,\n PluginManifest,\n PluginReverseDep,\n PluginUnitGraph,\n RuntimeUnitDependency,\n RuntimeUnitDescriptor,\n} from \"../contracts/plugin.js\";\nimport type { RuntimeKind } from \"../contracts/lifecycle.js\";\n\nexport interface PluginGraphOptions {\n /** 当前 Host 的 Runtime;未指定时只用于静态检查。 */\n readonly runtime?: RuntimeKind;\n /** 当前已经启用的插件,用于生成反向依赖状态。 */\n readonly enabledPluginIds?: ReadonlySet<string>;\n /** Host-owned 或远端已发布的 descriptor。 */\n readonly builtinCapabilities?: ReadonlySet<CapabilityDescriptor | string>;\n /** 是否允许尚未出现在本图中的跨 Runtime provider。 */\n readonly externalRuntimeDependencies?: boolean;\n /** registerAll 的调用阶段是否允许缺依赖。 */\n readonly allowMissingDependencies?: boolean;\n}\n\nfunction unitCandidates(manifest: PluginManifest, runtime?: RuntimeKind): RuntimeUnitDescriptor[] {\n const units = [...(manifest.units ?? [])];\n if (units.length === 0) {\n return [{ id: manifest.id, ...(runtime !== undefined ? { runtime } : {}) }];\n }\n if (runtime === undefined) return units;\n return units.filter((unit) => unit.runtime === undefined || unit.runtime === runtime);\n}\n\n/** 选择一个插件在当前 Runtime 中的实现单元;多匹配必须显式消歧。 */\nexport function selectRuntimeUnit(\n manifest: PluginManifest,\n runtime: RuntimeKind | undefined,\n): (RuntimeUnitDescriptor & { id: string; runtime: RuntimeKind }) | undefined {\n const units = unitCandidates(manifest, runtime);\n if (units.length !== 1) return undefined;\n const unit = units[0];\n if (!unit) return undefined;\n // A host created by the advanced assembly layer may not know its Runtime\n // until it sees the one explicit unit. The only implicit choice permitted\n // here is the ordinary single-runtime Window default; multi-unit manifests\n // are rejected by the Host before mutation. This keeps an explicit\n // single Worker unit selectable when `runtime` is omitted.\n const selectedRuntime = unit.runtime ?? runtime ?? \"window-main\";\n if (selectedRuntime === undefined) return undefined;\n return { ...unit, runtime: selectedRuntime };\n}\n\nexport function dependenciesOfManifest(\n manifest: PluginManifest,\n runtime?: RuntimeKind,\n): readonly RuntimeUnitDependency[] {\n const unit = selectRuntimeUnit(manifest, runtime);\n // A peer dependency is resolved against the call-bound PeerView. It must\n // never turn into a global Host startup edge/provider candidate.\n return (unit?.dependencies ?? []).filter((dependency) => dependency.source !== \"peer\");\n}\n\nexport function providesOfManifest(\n manifest: PluginManifest,\n runtime?: RuntimeKind,\n): readonly CapabilityDescriptor[] {\n const unit = selectRuntimeUnit(manifest, runtime);\n return unit?.provides ?? [];\n}\n\nfunction descriptorKey(value: CapabilityDescriptor): string {\n return capabilityKey(value);\n}\n\nfunction keysForBuiltin(value: ReadonlySet<CapabilityDescriptor | string> | undefined): Set<string> {\n const result = new Set<string>();\n for (const item of value ?? []) result.add(typeof item === \"string\" ? item : descriptorKey(item));\n return result;\n}\n\nfunction freezeRecord<T>(record: Record<string, T>): Readonly<Record<string, T>> {\n for (const value of Object.values(record)) if (Array.isArray(value)) Object.freeze(value);\n return Object.freeze(record);\n}\n\nfunction capabilityLabel(capability: CapabilityDescriptor): string {\n return `${capability.kind}:${capability.id}@${capability.version}`;\n}\n\nfunction collectUnits(manifests: readonly PluginManifest[], runtime?: RuntimeKind): Map<string, PluginUnitGraph> {\n const result = new Map<string, PluginUnitGraph>();\n for (const manifest of manifests) {\n for (const unit of unitCandidates(manifest, runtime)) {\n const selectedRuntime = unit.runtime ?? runtime;\n if (!selectedRuntime) continue;\n result.set(`${manifest.id}\\u0000${unit.id}`, {\n pluginId: manifest.id,\n unitId: unit.id,\n runtime: selectedRuntime,\n dependencies: Object.freeze([...(unit.dependencies ?? [])].filter((item) => item.source !== \"peer\").map((item) => item.capability)),\n provides: Object.freeze([...(unit.provides ?? [])]),\n });\n }\n }\n return result;\n}\n\n/** 构建不可变图快照;结果顺序始终由 manifest 输入顺序和 descriptor 顺序决定。 */\nexport function buildPluginGraph(\n manifests: readonly PluginManifest[],\n options: PluginGraphOptions = {},\n): PluginGraph {\n const dependencies: Record<string, readonly CapabilityDescriptor[]> = {};\n const optionalDependencies: Record<string, readonly CapabilityDescriptor[]> = {};\n const provides: Record<string, readonly CapabilityDescriptor[]> = {};\n const providers: Record<string, string[]> = {};\n const reverse: Record<string, PluginReverseDep[]> = {};\n const unitMap = collectUnits(manifests, options.runtime);\n const enabled = options.enabledPluginIds ?? new Set<string>();\n\n for (const manifest of manifests) {\n const deps = [...dependenciesOfManifest(manifest, options.runtime)];\n dependencies[manifest.id] = Object.freeze(deps.filter((item) => !item.optional).map((item) => item.capability));\n optionalDependencies[manifest.id] = Object.freeze(deps.filter((item) => item.optional).map((item) => item.capability));\n const offered = [...providesOfManifest(manifest, options.runtime)];\n provides[manifest.id] = Object.freeze(offered);\n for (const capability of offered) (providers[descriptorKey(capability)] ??= []).push(manifest.id);\n }\n\n for (const manifest of manifests) {\n const deps = [...(dependenciesOfManifest(manifest, options.runtime) ?? [])];\n for (const dependency of deps) {\n // Optional capabilities do not establish a lifecycle edge. The\n // consumer remains usable when the provider is intentionally stopped.\n if (dependency.optional) continue;\n for (const providerId of providers[descriptorKey(dependency.capability)] ?? []) {\n (reverse[providerId] ??= []).push({\n pluginId: manifest.id,\n enabled: enabled.has(manifest.id),\n capabilities: Object.freeze([dependency.capability]),\n });\n }\n }\n }\n\n const cycles: (readonly string[])[] = [];\n const byId = new Map(manifests.map((manifest) => [manifest.id, manifest]));\n const visiting: string[] = [];\n const visited = new Set<string>();\n const visit = (pluginId: string): void => {\n const start = visiting.indexOf(pluginId);\n if (start >= 0) {\n cycles.push(Object.freeze([...visiting.slice(start), pluginId]));\n return;\n }\n if (visited.has(pluginId)) return;\n const manifest = byId.get(pluginId);\n if (!manifest) return;\n visiting.push(pluginId);\n for (const dependency of dependenciesOfManifest(manifest, options.runtime)) {\n if (dependency.optional) continue;\n for (const providerId of providers[descriptorKey(dependency.capability)] ?? []) visit(providerId);\n }\n visiting.pop();\n visited.add(pluginId);\n };\n for (const manifest of manifests) visit(manifest.id);\n\n const reverseFrozen: Record<string, readonly PluginReverseDep[]> = {};\n for (const [pluginId, values] of Object.entries(reverse)) reverseFrozen[pluginId] = Object.freeze(values);\n const providerFrozen: Record<string, readonly string[]> = {};\n for (const [key, values] of Object.entries(providers)) providerFrozen[key] = Object.freeze(values);\n const units: Record<string, PluginUnitGraph> = {};\n for (const [key, value] of unitMap) units[key] = value;\n\n return Object.freeze({\n plugins: Object.freeze(manifests.map((manifest) => manifest.id)),\n dependencies: freezeRecord(dependencies),\n optionalDependencies: freezeRecord(optionalDependencies),\n provides: freezeRecord(provides),\n reverse: freezeRecord(reverseFrozen),\n providers: freezeRecord(providerFrozen),\n cycles: Object.freeze(cycles),\n units: Object.freeze(units),\n });\n}\n\n/** 在注册/批量装配前验证 manifest 及其依赖闭包。 */\nexport function validatePluginGraph(\n manifests: readonly PluginManifest[],\n options: PluginGraphOptions = {},\n): void {\n const ids = new Set<string>();\n const providerRuntime = new Map<string, RuntimeKind | undefined>();\n for (const manifest of manifests) {\n if (!manifest || typeof manifest.id !== \"string\" || manifest.id.trim() === \"\") throw new TypeError(\"Plugin id must be a non-empty string\");\n if (ids.has(manifest.id)) throw new Error(`Plugin \"${manifest.id}\" is duplicated`);\n ids.add(manifest.id);\n if (typeof manifest.name !== \"string\" || manifest.name.trim() === \"\") throw new TypeError(`Plugin \"${manifest.id}\" name must be a non-empty string`);\n if (manifest.startup !== \"required\" && manifest.startup !== \"optional\") throw new TypeError(`Plugin \"${manifest.id}\" startup must be required or optional`);\n if (typeof manifest.defaultEnabled !== \"boolean\" || typeof manifest.canDisable !== \"boolean\") throw new TypeError(`Plugin \"${manifest.id}\" startup policy is incomplete`);\n if (manifest.startup === \"required\" && (!manifest.defaultEnabled || manifest.canDisable)) throw new TypeError(`Plugin \"${manifest.id}\" required startup policy is inconsistent`);\n const unitIds = new Set<string>();\n for (const unit of manifest.units ?? []) {\n if (!unit || typeof unit.id !== \"string\" || unit.id.trim() === \"\" || unitIds.has(unit.id)) throw new TypeError(`Plugin \"${manifest.id}\" has a duplicate or empty unit id`);\n unitIds.add(unit.id);\n if (unit.runtime !== undefined && unit.runtime !== \"window-main\" && unit.runtime !== \"shared-worker\") throw new TypeError(`Plugin \"${manifest.id}\" unit \"${unit.id}\" has an invalid Runtime`);\n const seenProvides = new Set<string>();\n for (const capability of unit.provides ?? []) {\n if (!isCapabilityDescriptor(capability)) throw new TypeError(`Plugin \"${manifest.id}\" has an invalid capability descriptor`);\n const key = descriptorKey(capability);\n if (seenProvides.has(key)) throw new Error(`Plugin \"${manifest.id}\" provides ${capabilityLabel(capability)} more than once`);\n seenProvides.add(key);\n const previousRuntime = providerRuntime.get(key);\n if (providerRuntime.has(key) && previousRuntime === unit.runtime) throw new Error(`Capability ${capabilityLabel(capability)} has ambiguous providers`);\n if (!providerRuntime.has(key)) providerRuntime.set(key, unit.runtime);\n }\n for (const dependency of unit.dependencies ?? []) {\n if (!dependency || !isCapabilityDescriptor(dependency.capability)) throw new TypeError(`Plugin \"${manifest.id}\" has an invalid dependency descriptor`);\n if (dependency.source !== undefined && dependency.source !== \"peer\") throw new TypeError(`Plugin \"${manifest.id}\" has an invalid dependency source`);\n if (dependency.source === \"peer\" && dependency.sourceRuntime !== undefined) throw new TypeError(`Plugin \"${manifest.id}\" peer dependency cannot declare sourceRuntime`);\n if (dependency.source !== \"peer\" && dependency.sourceRuntime !== \"window-main\" && dependency.sourceRuntime !== \"shared-worker\") throw new TypeError(`Plugin \"${manifest.id}\" has an invalid dependency Runtime`);\n if (dependency.source === \"peer\" && dependency.capability.kind === \"local\") {\n // Local capabilities can only be represented by an explicit remote\n // contract on the wire; a peer dependency itself must be remote.\n throw new TypeError(`Plugin \"${manifest.id}\" cannot depend on local capability \"${dependency.capability.id}\" through a peer`);\n }\n if (dependency.source !== \"peer\" && dependency.capability.kind === \"local\" && dependency.sourceRuntime !== (unit.runtime ?? options.runtime)) {\n throw new TypeError(`Plugin \"${manifest.id}\" cannot depend on local capability \"${dependency.capability.id}\" from another Runtime`);\n }\n }\n }\n }\n const graph = buildPluginGraph(manifests, options);\n if (graph.cycles.length > 0) throw new Error(`Plugin dependency cycle: ${graph.cycles[0]?.join(\" -> \") ?? \"unknown\"}`);\n const builtin = keysForBuiltin(options.builtinCapabilities);\n for (const manifest of manifests) {\n for (const dependency of dependenciesOfManifest(manifest, options.runtime)) {\n const key = descriptorKey(dependency.capability);\n const providerCount = graph.providers[key]?.length ?? 0;\n const external = options.externalRuntimeDependencies === true && dependency.sourceRuntime !== options.runtime;\n if (providerCount === 0 && !builtin.has(key) && !external && !dependency.optional && options.allowMissingDependencies !== true) throw new Error(`Plugin \"${manifest.id}\" requires missing capability ${capabilityLabel(dependency.capability)}`);\n if (providerCount > 1 && !external) throw new Error(`Capability ${capabilityLabel(dependency.capability)} has ambiguous providers`);\n }\n }\n}\n\n/** 查询依赖某 provider 的已启用插件。 */\nexport function reverseDependentsOf(\n graph: PluginGraph,\n pluginId: string,\n enabledPluginIds?: ReadonlySet<string>,\n): readonly PluginReverseDep[] {\n return (graph.reverse[pluginId] ?? []).filter((item) => enabledPluginIds === undefined || enabledPluginIds.has(item.pluginId));\n}\n","// 轻量生命周期作用域实现。\n//\n// 该模块刻意不依赖 React、Node、Worker 或 Cordis。它只负责三件事:\n// 1. 给运行实例生成不可复用的身份;\n// 2. 在同步 revoke 后立即阻止新资源,并通过 AbortSignal 通知资源;\n// 3. 尽力执行所有异步清理,返回可观测的失败/超时结果。\n//\n// 它不是安全沙箱:同源代码仍可能拿到自己的全局对象。权限安全必须在\n// Host、RPC 和最终存储/签名边界重复校验。\n\nimport type {\n LifecycleCleanup,\n LifecycleCleanupPhase,\n LifecycleCleanupIssue,\n LifecycleDisposeOptions,\n LifecycleDisposeResult,\n LifecycleResourceHandle,\n LifecycleResourceSnapshot,\n LifecycleScope,\n LifecycleScopeIdentity,\n LifecycleScopeKind,\n LifecycleScopeState,\n} from \"../contracts/lifecycle.js\";\nimport { LifecycleScopeRevokedError } from \"../contracts/lifecycle.js\";\n\ntype ResourceState = LifecycleResourceSnapshot[\"state\"];\n\ninterface ResourceEntry {\n resourceId: string;\n state: ResourceState;\n cleanup: LifecycleCleanup;\n phase: LifecycleCleanupPhase;\n /** 清理是否已经开始;防止重复释放同一个底层句柄。 */\n cleanupStarted: boolean;\n /** 清理回调是否已经返回;超时后可能仍为 false。 */\n cleanupFinished: boolean;\n /** 清理 Promise,供重复 release 调用共享。 */\n cleanupPromise?: Promise<void>;\n /** 获取资源失败后从作用域中移除。 */\n removeOnFailure: boolean;\n /** 迟到资源的释放失败;不能被先前的空清理回调覆盖成 released。 */\n lateReleaseFailed?: boolean;\n /** acquire 尚未完成时,dispose 必须等待创建结果再决定是否释放。 */\n acquisitionDone?: Promise<void>;\n /** 子作用域是父作用域的一等资源,清理结果必须向父级聚合。 */\n childScope?: LifecycleScope;\n /** 最近一次子作用域停止结果;迟到清理会原地更新同一对象。 */\n childResult?: LifecycleDisposeResult;\n error?: string;\n}\n\ntype MutableDisposeResult = {\n -readonly [K in keyof LifecycleDisposeResult]: LifecycleDisposeResult[K];\n};\n\nexport interface CreateResourceScopeOptions {\n /** 可选固定作用域标识;生产代码通常省略,让实现生成不可复用 ID。 */\n scopeId?: string;\n /** 运行实例标识;省略时与 scopeId 同源生成。 */\n instanceId?: string;\n /** 作用域类型。 */\n kind: LifecycleScopeKind;\n /** 绑定插件和宿主只读属性。 */\n metadata?: Omit<Partial<LifecycleScopeIdentity>, \"scopeId\" | \"instanceId\" | \"kind\">;\n /** 测试或宿主诊断使用的状态变更回调。 */\n onChange?: (scope: LifecycleScope) => void;\n /** 子作用域生成最终清理结果后的内部通知;用于更新父级登记。 */\n onDisposeResult?: (result: LifecycleDisposeResult) => void;\n}\n\nfunction makeId(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return `${prefix}:${crypto.randomUUID()}`;\n }\n } catch {\n // 某些 Worker/测试环境没有可用的 Web Crypto;下面的随机值只用于身份\n // 去重,不承担密码学安全语义。\n }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return typeof error === \"string\" ? error : String(error);\n}\n\nfunction isPositiveFiniteNumber(value: number | undefined): value is number {\n return value !== undefined && Number.isFinite(value) && value >= 0;\n}\n\nfunction cloneScopeAttributes(value: Readonly<Record<string, unknown>> | undefined): Readonly<Record<string, unknown>> {\n let clone: unknown;\n try {\n const structuredCloneFn = (globalThis as unknown as { structuredClone?: (input: unknown) => unknown }).structuredClone;\n clone = structuredCloneFn ? structuredCloneFn(value ?? {}) : { ...(value ?? {}) };\n } catch {\n throw new TypeError(\"Lifecycle scope attributes must be structured-cloneable\");\n }\n if (!clone || typeof clone !== \"object\" || Array.isArray(clone)) throw new TypeError(\"Lifecycle scope attributes must be a record\");\n const freeze = (current: unknown, seen: Set<object>): void => {\n if (!current || typeof current !== \"object\" || seen.has(current)) return;\n seen.add(current);\n if (Array.isArray(current)) for (const item of current) freeze(item, seen);\n else for (const item of Object.values(current as Record<string, unknown>)) freeze(item, seen);\n Object.freeze(current);\n };\n freeze(clone, new Set<object>());\n return clone as Readonly<Record<string, unknown>>;\n}\n\n/**\n * 创建一个可嵌套的生命周期作用域。\n *\n * `createResourceScope` 是 `createLifecycleScope` 的同义入口,方便不同\n * 模块按“作用域”或“资源”语义调用;两者不代表两套实现。\n */\nexport function createLifecycleScope(options: CreateResourceScopeOptions): LifecycleScope {\n const metadata = options.metadata;\n const identity: LifecycleScopeIdentity = {\n scopeId: options.scopeId ?? makeId(`scope:${options.kind}`),\n instanceId: options.instanceId ?? makeId(\"instance\"),\n kind: options.kind,\n ...metadata,\n attributes: cloneScopeAttributes(metadata?.attributes),\n };\n const controller = new AbortController();\n const revokeListeners = new Set<(reason: string) => void>();\n const entries = new Map<string, ResourceEntry>();\n const usedIds = new Set<string>();\n let currentState: LifecycleScopeState = \"active\";\n let revokeReason = \"scope revoked\";\n let disposalPromise: Promise<LifecycleDisposeResult> | undefined;\n /** 父作用域清理已经返回后,子作用域迟到收敛时刷新父级结果。 */\n let refreshPublishedDisposeResult: (() => void) | undefined;\n const disposeResultNotifier = options.onDisposeResult;\n\n const notifyChange = (scope: LifecycleScope) => {\n try {\n options.onChange?.(scope);\n } catch {\n // 诊断回调不能改变生命周期结果。\n }\n };\n\n const publicScope = {} as LifecycleScope;\n\n function uniqueResourceId(resourceId: string | undefined): string {\n const base = resourceId && resourceId.length > 0 ? resourceId : makeId(\"resource\");\n if (!usedIds.has(base)) {\n usedIds.add(base);\n return base;\n }\n let index = 2;\n while (usedIds.has(`${base}#${index}`)) index += 1;\n const unique = `${base}#${index}`;\n usedIds.add(unique);\n return unique;\n }\n\n function assertActive(): void {\n if (currentState !== \"active\") {\n throw new LifecycleScopeRevokedError(\n `Lifecycle scope \"${identity.scopeId}\" is ${currentState}`\n );\n }\n }\n\n function addEntry(\n resourceId: string | undefined,\n cleanup: LifecycleCleanup,\n state: ResourceState,\n removeOnFailure = false,\n phase: LifecycleCleanupPhase = \"before-teardown\"\n ): ResourceEntry {\n assertActive();\n const entry: ResourceEntry = {\n resourceId: uniqueResourceId(resourceId),\n state,\n cleanup,\n phase,\n cleanupStarted: false,\n cleanupFinished: false,\n removeOnFailure,\n };\n entries.set(entry.resourceId, entry);\n notifyChange(publicScope);\n return entry;\n }\n\n function releaseEntry(entry: ResourceEntry, reason: string): Promise<void> {\n if (entry.cleanupPromise) return entry.cleanupPromise;\n entry.cleanupStarted = true;\n entry.cleanupPromise = Promise.resolve()\n .then(() => entry.cleanup(reason))\n .then(() => {\n entry.cleanupFinished = true;\n if (!entry.lateReleaseFailed) {\n entry.state = \"released\";\n entry.error = undefined;\n }\n notifyChange(publicScope);\n })\n .catch((error) => {\n entry.cleanupFinished = true;\n // 失败项保留为 pending,便于状态页和后续恢复逻辑发现;不再次\n // 隐式调用不幂等的外部清理函数。\n entry.state = \"pending\";\n entry.error = errorMessage(error);\n notifyChange(publicScope);\n throw error;\n });\n // 即使调用方只触发同步 revoke,也必须接住迟到 rejection。\n entry.cleanupPromise.catch(() => undefined);\n return entry.cleanupPromise;\n }\n\n function track<T>(\n resource: T,\n release: (value: T, reason: string) => void | Promise<void>,\n resourceId?: string\n ): T {\n if (currentState !== \"active\") {\n // 资源已经在 stopping 之后返回:不允许发布到旧作用域,同时尽力\n // 释放它。这里不会把释放错误变成未处理 Promise。\n void Promise.resolve()\n .then(() => release(resource, revokeReason))\n .catch(() => undefined);\n throw new LifecycleScopeRevokedError();\n }\n let released = false;\n addEntry(\n resourceId,\n async (reason) => {\n if (released) return;\n released = true;\n await release(resource, reason);\n },\n \"active\"\n );\n return resource;\n }\n\n function acquire<T>(\n resourceId: string,\n create: (signal: AbortSignal) => T | Promise<T>,\n release: (resource: T, reason: string) => void | Promise<void>\n ): Promise<T> {\n assertActive();\n let resource: T | undefined;\n let hasResource = false;\n let released = false;\n let resolveAcquisition!: () => void;\n let rejectAcquisition!: (error: unknown) => void;\n let acquisitionSettled = false;\n const acquisitionDone = new Promise<void>((resolve, reject) => {\n resolveAcquisition = () => {\n if (acquisitionSettled) return;\n acquisitionSettled = true;\n resolve();\n };\n rejectAcquisition = (error) => {\n if (acquisitionSettled) return;\n acquisitionSettled = true;\n reject(error);\n };\n });\n // dispose 可能没有被调用,或者 timeout 后不再等待;仍需接住这个\n // 内部等待 Promise 的迟到失败,不能制造 unhandled rejection。\n acquisitionDone.catch(() => undefined);\n const entry = addEntry(\n resourceId,\n async (reason) => {\n // 不能在创建尚未结束时直接返回:否则 dispose 会把 acquiring\n // 资源伪装成 released,迟到资源随后发生的释放失败也无法进入\n // 本次清理链。timeout 由 runEntry 负责把仍未完成项标成 pending。\n await acquisitionDone;\n if (!hasResource || released) return;\n released = true;\n await release(resource as T, reason);\n },\n \"acquiring\",\n true,\n \"before-teardown\"\n );\n entry.acquisitionDone = acquisitionDone;\n\n return Promise.resolve()\n .then(() => create(controller.signal))\n .then(async (created) => {\n resource = created;\n hasResource = true;\n if (currentState !== \"active\" || controller.signal.aborted || entry.cleanupStarted) {\n // dispose 可能在 create() 等待期间已经开始;此时由 acquire 自己\n // 接管迟到资源。entry.cleanup 正在等待 acquisitionDone,因此不会\n // 与这里的释放形成互相等待。\n if (!released) {\n released = true;\n try {\n await release(created, revokeReason);\n } catch (error) {\n entry.lateReleaseFailed = true;\n entry.state = \"pending\";\n entry.error = errorMessage(error);\n notifyChange(publicScope);\n rejectAcquisition(error);\n throw error;\n }\n }\n entry.state = \"released\";\n resolveAcquisition();\n notifyChange(publicScope);\n throw new LifecycleScopeRevokedError(\n `Resource \"${entry.resourceId}\" completed after scope revoke`\n );\n }\n entry.state = \"active\";\n entry.removeOnFailure = false;\n resolveAcquisition();\n notifyChange(publicScope);\n return created;\n })\n .catch((error) => {\n if (!hasResource) {\n // 创建失败不是资源释放失败;让正在等待的 dispose 继续完成,\n // 同时保留原始 create 错误给 acquire 调用方。\n resolveAcquisition();\n entries.delete(entry.resourceId);\n usedIds.delete(entry.resourceId);\n }\n throw error;\n });\n }\n\n function onDispose(\n cleanup: LifecycleCleanup,\n resourceId?: string,\n phase: LifecycleCleanupPhase = \"before-teardown\"\n ): () => void {\n if (currentState !== \"active\") {\n // 异步回调在停止后才拿到释放责任时,不能把 disposer 丢在旧作用域\n // 外面;立即执行一次,并吞掉异常交给调用方之外的可观测层处理。\n void Promise.resolve()\n .then(() => cleanup(revokeReason))\n .catch(() => undefined);\n return () => undefined;\n }\n const entry = addEntry(resourceId, cleanup, \"active\", false, phase);\n return () => {\n if (entry.cleanupStarted || entry.cleanupFinished) return;\n entries.delete(entry.resourceId);\n usedIds.delete(entry.resourceId);\n notifyChange(publicScope);\n };\n }\n\n function onRevoke(listener: (reason: string) => void): () => void {\n if (currentState === \"active\") {\n revokeListeners.add(listener);\n return () => revokeListeners.delete(listener);\n }\n try {\n listener(revokeReason);\n } catch {\n // 观察者错误不影响撤权。\n }\n return () => undefined;\n }\n\n function revoke(reason = \"scope revoked\"): void {\n if (currentState !== \"active\") return;\n revokeReason = reason;\n currentState = \"stopping\";\n // 先改状态再 abort,任何 abort listener 都只能看到 stopping,不能\n // 在回调里继续注册资源。\n try {\n controller.abort(new LifecycleScopeRevokedError(reason));\n } catch {\n controller.abort();\n }\n for (const listener of [...revokeListeners]) {\n try {\n listener(reason);\n } catch {\n // 其它撤权监听仍必须执行。\n }\n }\n notifyChange(publicScope);\n }\n\n async function runEntry(\n entry: ResourceEntry,\n reason: string,\n timeoutMs: number | undefined,\n issues: LifecycleCleanupIssue[],\n onLateSuccess?: (entry: ResourceEntry) => void,\n onLateFailure?: (entry: ResourceEntry, error: unknown) => void\n ): Promise<\"released\" | \"pending\"> {\n if (entry.cleanupFinished && entry.state === \"released\") return \"released\";\n const cleanup = releaseEntry(entry, reason);\n if (!isPositiveFiniteNumber(timeoutMs)) {\n try {\n await cleanup;\n return entry.state === \"released\" ? \"released\" : \"pending\";\n } catch (error) {\n issues.push({\n resourceId: entry.resourceId,\n code: \"lifecycle.cleanup_failed\",\n message: errorMessage(error),\n });\n return \"pending\";\n }\n }\n\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<\"timeout\">((resolve) => {\n timeoutHandle = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n });\n const result = await Promise.race([\n cleanup.then(() => \"released\" as const, (error) => ({ error })),\n timeout,\n ]);\n if (timeoutHandle) clearTimeout(timeoutHandle);\n if (result === \"timeout\") {\n entry.state = \"pending\";\n issues.push({\n resourceId: entry.resourceId,\n code: \"lifecycle.cleanup_timeout\",\n message: `Cleanup timed out after ${timeoutMs}ms`,\n });\n // dispose() 已经可以按超时返回,但 acquiring 资源的真实创建/释放\n // 仍可能稍后结束。若这一步失败,必须把失败追加到同一份结果对象,\n // 不能让“先返回 cleanupIncomplete=false”的快照掩盖迟到错误。\n void cleanup.then(\n () => {\n try {\n onLateSuccess?.(entry);\n } catch {\n // 迟到状态投影不能改变底层清理结果,也不能制造未处理异常。\n }\n },\n (error) => {\n try {\n onLateFailure?.(entry, error);\n } catch {\n // 同上:失败已经记录在 scope 结果中。\n }\n },\n );\n return \"pending\";\n }\n if (result === \"released\") return \"released\";\n entry.state = \"pending\";\n issues.push({\n resourceId: entry.resourceId,\n code: \"lifecycle.cleanup_failed\",\n message: errorMessage(result.error),\n });\n return \"pending\";\n }\n\n async function dispose(options: LifecycleDisposeOptions = {}): Promise<LifecycleDisposeResult> {\n if (disposalPromise) return disposalPromise;\n revoke(options.reason ?? \"scope disposed\");\n const reason = options.reason ?? revokeReason;\n const entriesToRelease = [...entries.values()].reverse();\n disposalPromise = (async () => {\n const errors: LifecycleCleanupIssue[] = [];\n const pending = new Set<string>();\n const lateReleased = new Set<string>();\n let released = 0;\n let attempted = 0;\n let resultSnapshot: MutableDisposeResult | undefined;\n let resultPublished = false;\n\n const publishDisposeResult = (): void => {\n if (!resultPublished || !resultSnapshot) return;\n try {\n disposeResultNotifier?.(resultSnapshot);\n } catch {\n // 父级状态投影不能改变清理结果。\n }\n };\n\n /**\n * 把 direct resource 和 child scope 的结果合并到同一个父级快照。\n * child:<scopeId>:<resourceId> 是父级可观测的稳定资源标识;不能只\n * 记录 child scope 自身,否则 Host 会把子资源错误地显示为已释放。\n */\n const rebuildResultSnapshot = (): void => {\n if (!resultSnapshot) return;\n const mergedPending = new Set(pending);\n const mergedErrors = [...errors];\n let mergedAttempted = attempted;\n let mergedReleased = released;\n for (const childEntry of entries.values()) {\n const childScope = childEntry.childScope;\n const childResult = childEntry.childResult;\n if (!childScope || !childResult) continue;\n const prefix = `child:${childScope.identity.scopeId}:`;\n mergedAttempted += childResult.attempted;\n mergedReleased += childResult.released;\n for (const resourceId of childResult.pending) {\n mergedPending.add(`${prefix}${resourceId}`);\n }\n for (const issue of childResult.errors) {\n mergedErrors.push({\n ...issue,\n resourceId: `${prefix}${issue.resourceId}`,\n });\n }\n }\n resultSnapshot.attempted = mergedAttempted;\n resultSnapshot.released = mergedReleased;\n resultSnapshot.pending = [...mergedPending];\n resultSnapshot.errors = mergedErrors;\n resultSnapshot.cleanupIncomplete = mergedPending.size > 0 || mergedErrors.length > 0;\n };\n\n const projectChildResult = (\n entry: ResourceEntry,\n childResult: LifecycleDisposeResult,\n lateResourceId?: string,\n lateError?: unknown,\n ): void => {\n if (!entry.childScope) return;\n const previous = entry.childResult;\n entry.childResult = childResult;\n entry.state = childResult.cleanupIncomplete ? \"pending\" : \"released\";\n entry.error = childResult.cleanupIncomplete\n ? childResult.errors[0]?.message ?? \"Child scope cleanup is still pending\"\n : undefined;\n rebuildResultSnapshot();\n // 先向更高层父作用域发布最新快照,再调用外部投影;否则 Host\n // 可能在父级仍是旧 pending 时先计算出错误的汇总结果。\n publishDisposeResult();\n if (lateResourceId && resultSnapshot) {\n const resourceId = `child:${entry.childScope.identity.scopeId}:${lateResourceId}`;\n try {\n if (lateError !== undefined) options.onLateFailure?.(resourceId, lateError, resultSnapshot);\n else options.onLateSuccess?.(resourceId, resultSnapshot);\n } catch {\n // 外部状态投影不能改变清理结果。\n }\n } else if (previous?.cleanupIncomplete && !childResult.cleanupIncomplete && resultSnapshot) {\n // 子作用域没有提供具体迟到资源标识时,仍需通知父级已经收敛。\n try {\n options.onLateSuccess?.(`child:${entry.childScope.identity.scopeId}`, resultSnapshot);\n } catch {\n // 同上。\n }\n }\n notifyChange(publicScope);\n };\n\n // 子作用域可能在父作用域已经返回 cleanup-pending 后才最终收敛;\n // 保留这个刷新入口,避免父级结果快照停留在旧的 pending/error。\n refreshPublishedDisposeResult = () => {\n if (!resultPublished || !resultSnapshot) return;\n rebuildResultSnapshot();\n publishDisposeResult();\n };\n\n const onLateFailure = (entry: ResourceEntry, error: unknown): void => {\n entry.state = \"pending\";\n entry.error = errorMessage(error);\n if (!errors.some((issue) => issue.resourceId === entry.resourceId && issue.code === \"lifecycle.cleanup_failed\")) {\n errors.push({\n resourceId: entry.resourceId,\n code: \"lifecycle.cleanup_failed\",\n message: errorMessage(error),\n });\n }\n pending.add(entry.resourceId);\n if (resultSnapshot) {\n rebuildResultSnapshot();\n }\n publishDisposeResult();\n try {\n options.onLateFailure?.(entry.resourceId, error, resultSnapshot);\n } catch {\n // 外部状态投影不能改变清理结果。\n }\n notifyChange(publicScope);\n };\n const onLateSuccess = (entry: ResourceEntry): void => {\n // runEntry 只为 timeout 项登记此回调;Set 也防御同一项的重复通知。\n if (lateReleased.has(entry.resourceId)) return;\n lateReleased.add(entry.resourceId);\n pending.delete(entry.resourceId);\n released += 1;\n for (let index = errors.length - 1; index >= 0; index -= 1) {\n const issue = errors[index];\n if (issue?.resourceId === entry.resourceId && issue.code === \"lifecycle.cleanup_timeout\") {\n errors.splice(index, 1);\n }\n }\n if (resultSnapshot) {\n rebuildResultSnapshot();\n }\n publishDisposeResult();\n try {\n options.onLateSuccess?.(entry.resourceId, resultSnapshot);\n } catch {\n // 外部状态投影不能改变清理结果。\n }\n notifyChange(publicScope);\n };\n const releasePhase = async (phase: LifecycleCleanupPhase) => {\n // 每个阶段按登记逆序释放;每项都有独立超时,所以一个永不返回\n // 的网络退订不会阻塞其它资源释放。\n for (const entry of entriesToRelease.filter((item) => item.phase === phase)) {\n if (entry.childScope) {\n // 子 Scope 自己负责对子资源应用 timeout;父级只维护它的\n // 结构化结果,并通过 child scope 的迟到回调持续重建快照。\n entry.cleanupStarted = true;\n try {\n const childResult = await entry.childScope.dispose({\n reason,\n timeoutMs: options.timeoutMs,\n onLateSuccess: (resourceId, result) => {\n if (result) projectChildResult(entry, result, resourceId);\n },\n onLateFailure: (resourceId, error, result) => {\n if (result) projectChildResult(entry, result, resourceId, error);\n },\n });\n entry.cleanupFinished = true;\n projectChildResult(entry, childResult);\n } catch (error) {\n entry.cleanupFinished = true;\n entry.state = \"pending\";\n entry.error = errorMessage(error);\n pending.add(entry.resourceId);\n errors.push({\n resourceId: entry.resourceId,\n code: \"lifecycle.cleanup_failed\",\n message: errorMessage(error),\n });\n notifyChange(publicScope);\n }\n continue;\n }\n attempted += 1;\n const result = await runEntry(entry, reason, options.timeoutMs, errors, onLateSuccess, onLateFailure);\n if (result === \"released\") released += 1;\n else if (!lateReleased.has(entry.resourceId)) pending.add(entry.resourceId);\n }\n };\n await releasePhase(\"before-teardown\");\n\n // Host 的旧 teardown / 领域收尾位于两个清理阶段之间。这样显式\n // onDispose 仍能先看到旧注册项,而异步 Registry facade 可以在\n // teardown 完成后再注销,不依赖 snapshot 差分。\n if (options.teardown) {\n const teardownEntry: ResourceEntry = {\n resourceId: \"scope:teardown\",\n state: \"active\",\n cleanup: options.teardown,\n phase: \"before-teardown\",\n cleanupStarted: false,\n cleanupFinished: false,\n removeOnFailure: false,\n };\n attempted += 1;\n const result = await runEntry(teardownEntry, reason, options.timeoutMs, errors, onLateSuccess, onLateFailure);\n if (result === \"released\") released += 1;\n else if (!lateReleased.has(teardownEntry.resourceId)) pending.add(teardownEntry.resourceId);\n }\n\n await releasePhase(\"after-teardown\");\n currentState = \"stopped\";\n notifyChange(publicScope);\n resultSnapshot = {\n scopeId: identity.scopeId,\n state: \"stopped\" as const,\n attempted,\n released,\n pending: [...pending],\n errors,\n cleanupIncomplete: pending.size > 0 || errors.length > 0,\n };\n rebuildResultSnapshot();\n resultPublished = true;\n publishDisposeResult();\n return resultSnapshot;\n })();\n // 所有当前调用者共享同一个完成结果。\n return disposalPromise;\n }\n\n function resources(): readonly LifecycleResourceSnapshot[] {\n return [...entries.values()].map((entry) => ({\n resourceId: entry.resourceId,\n state: entry.state,\n ...(entry.error ? { error: entry.error } : {}),\n }));\n }\n\n function child(\n kind: LifecycleScopeKind,\n metadata: Partial<Omit<LifecycleScopeIdentity, \"scopeId\" | \"instanceId\" | \"kind\" | \"parentScopeId\">> = {}\n ): LifecycleScope {\n assertActive();\n let childEntry: ResourceEntry | undefined;\n const childScope = createLifecycleScope({\n kind,\n metadata: {\n ...metadata,\n parentScopeId: identity.scopeId,\n },\n // 父作用域的 Host 订阅者也必须看到子作用域资源的状态变化。\n onChange: () => notifyChange(publicScope),\n // 只有子作用域已经生成最终结果后,父级才允许更新/删除登记。\n onDisposeResult: (result) => {\n const entry = childEntry;\n if (!entry) return;\n entry.childResult = result;\n entry.state = result.cleanupIncomplete ? \"pending\" : \"released\";\n entry.error = result.cleanupIncomplete\n ? result.errors[0]?.message ?? \"Child scope cleanup is still pending\"\n : undefined;\n refreshPublishedDisposeResult?.();\n // 父级主动 dispose 时保留登记,供父级结果和诊断快照继续展示;\n // 只有独立 dispose 的子作用域在最终成功后才解除父级链接。\n if (!result.cleanupIncomplete && !disposalPromise && !entry.cleanupStarted) {\n entries.delete(entry.resourceId);\n usedIds.delete(entry.resourceId);\n }\n notifyChange(publicScope);\n },\n });\n // revoke 是同步安全边界,父作用域撤权时立即传播;dispose 再等待子\n // 作用域的异步收尾。\n const removeRevoke = onRevoke((reason) => childScope.revoke(reason));\n // 子作用域作为父级的一等资源登记。不能用“父级 disposer 只 await\n // child.dispose()”的旧写法:child.dispose() 在失败/超时时会返回\n // cleanupIncomplete=true,而父级若忽略返回值就会错误标记为 released。\n const entry = addEntry(`child:${childScope.identity.scopeId}`, async () => undefined, \"active\");\n childEntry = entry;\n entry.childScope = childScope;\n // 子作用域可能早于父作用域结束(例如插件 disable 后再次 enable)。\n // parent-link 只解除 revoke 监听;父级登记必须等子作用域的最终结果\n // 生成后再处理,否则子资源失败/超时时父级会丢失 cleanup-pending。\n childScope.onDispose(() => {\n removeRevoke();\n }, `parent-link:${identity.scopeId}`);\n return childScope;\n }\n\n function listen(\n target: EventTarget,\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions | boolean,\n ): () => void {\n assertActive();\n if (!target || typeof target.addEventListener !== \"function\" || typeof target.removeEventListener !== \"function\") {\n throw new TypeError(\"Lifecycle scope listen target must be an EventTarget\");\n }\n let active = true;\n target.addEventListener(event, listener, options);\n let removeRevoke: (() => void) | undefined;\n const release = (): void => {\n if (!active) return;\n active = false;\n target.removeEventListener(event, listener, options);\n removeRevoke?.();\n };\n removeRevoke = onRevoke(release);\n if (!active) release();\n return release;\n }\n\n function interval(callback: () => void, milliseconds: number): () => void {\n assertActive();\n if (typeof callback !== \"function\") throw new TypeError(\"Lifecycle scope interval callback must be a function\");\n if (!Number.isFinite(milliseconds) || milliseconds < 0) throw new TypeError(\"Lifecycle scope interval milliseconds must be a finite non-negative number\");\n const handle = setInterval(callback, milliseconds);\n let active = true;\n let removeRevoke: (() => void) | undefined;\n const release = (): void => {\n if (!active) return;\n active = false;\n clearInterval(handle);\n removeRevoke?.();\n };\n removeRevoke = onRevoke(release);\n if (!active) release();\n return release;\n }\n\n function subscribe(\n subscribeFn: (listener: () => void) => () => void,\n listener: () => void,\n ): () => void {\n assertActive();\n if (typeof subscribeFn !== \"function\" || typeof listener !== \"function\") {\n throw new TypeError(\"Lifecycle scope subscribe requires functions\");\n }\n let active = true;\n let unsubscribe: (() => void) | undefined;\n let removeRevoke: (() => void) | undefined;\n const release = (): void => {\n if (!active) return;\n active = false;\n removeRevoke?.();\n unsubscribe?.();\n };\n removeRevoke = onRevoke(release);\n try {\n const candidate = subscribeFn(listener);\n if (typeof candidate !== \"function\") throw new TypeError(\"Lifecycle subscribe function must return an unsubscribe function\");\n unsubscribe = candidate;\n if (!active) unsubscribe();\n } catch (error) {\n release();\n throw error;\n }\n return release;\n }\n\n Object.assign(publicScope, {\n identity,\n signal: controller.signal,\n onRevoke,\n onDispose,\n track,\n acquire,\n child,\n revoke,\n dispose,\n assertActive,\n resources,\n listen,\n interval,\n subscribe,\n });\n // Object.assign 会读取 getter 的当前值,不能用它暴露动态 state;必须\n // 保持状态只读且随 revoke/dispose 实时变化。\n Object.defineProperty(publicScope, \"state\", {\n enumerable: true,\n configurable: false,\n get: () => currentState,\n });\n return publicScope;\n}\n\n/** 语义别名:资源管理代码通常以 ResourceScope 称呼同一原语。 */\nexport const createResourceScope = createLifecycleScope;\n\nexport type ResourceScopeOptions = CreateResourceScopeOptions;\n","// 绑定身份的权限租约实现。\n//\n// 申请权限、可信装配批准和当前作用域是三个独立条件。租约只授予它们的\n// 交集;撤权后任何调用都 fail closed。这个模块不替代远端服务端校验,\n// 后者必须在最终 RPC / I/O 或签名边界再次检查绑定字段。\n\nimport type {\n LifecycleScope,\n LifecycleScopeIdentity,\n PermissionLease,\n PermissionLeaseBinding,\n PermissionLeaseBindingExpectation,\n PluginPermission,\n} from \"../contracts/lifecycle.js\";\nimport {\n PermissionDeniedError,\n PermissionLeaseRevokedError,\n} from \"../contracts/lifecycle.js\";\n\nexport interface CreatePermissionLeaseOptions {\n /** 已由 Host 绑定的作用域身份;调用方不能从请求体自报。 */\n identity: LifecycleScopeIdentity;\n /** 插件 manifest 申请的权限。 */\n requested?: readonly PluginPermission[];\n /** 可信策略批准的权限。 */\n approved?: readonly PluginPermission[];\n /** 当前会话约束;存在时再与申请、批准求交集。 */\n sessionConstraints?: readonly PluginPermission[];\n /** 内置可信策略修订;策略变化后不能复用旧租约。 */\n policyRevision?: number;\n /** Connect 用户授权修订;内置插件可以省略。 */\n grantRevision?: number;\n /** Connect/外部授权的不可猜测授权标识;最终边界仍需查权威状态。 */\n grantId?: string;\n /** 可选作用域;撤权时自动撤销租约。 */\n scope?: LifecycleScope;\n}\n\nfunction uniquePermissions(permissions: readonly PluginPermission[] | undefined): PluginPermission[] {\n return [...new Set(permissions ?? [])];\n}\n\nfunction sameBindingValue(\n actual: string | number | undefined,\n expected: string | number | undefined\n): boolean {\n return expected === undefined || actual === expected;\n}\n\nfunction sameAttributes(\n actual: Readonly<Record<string, unknown>>,\n expected: Readonly<Record<string, unknown>> | undefined,\n): boolean {\n if (expected === undefined) return true;\n return Object.keys(expected).every((key) => Object.is(actual[key], expected[key]));\n}\n\nfunction normalizedRevision(value: number | undefined, name: string): number | undefined {\n if (value === undefined) return undefined;\n if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${name} must be a non-negative safe integer`);\n return value;\n}\n\n/** 创建一个不可换绑的权限租约。 */\nexport function createPermissionLease(options: CreatePermissionLeaseOptions): PermissionLease {\n const binding: PermissionLeaseBinding = {\n ...options.identity,\n requested: Object.freeze(uniquePermissions(options.requested)),\n approved: Object.freeze(uniquePermissions(options.approved)),\n ...(options.sessionConstraints\n ? { sessionConstraints: Object.freeze(uniquePermissions(options.sessionConstraints)) }\n : {}),\n ...(options.policyRevision !== undefined\n ? { policyRevision: normalizedRevision(options.policyRevision, \"policyRevision\") }\n : {}),\n ...(options.grantRevision !== undefined\n ? { grantRevision: normalizedRevision(options.grantRevision, \"grantRevision\") }\n : {}),\n ...(options.grantId !== undefined\n ? { grantId: options.grantId }\n : {}),\n };\n Object.freeze(binding);\n const granted = new Set(\n binding.requested.filter((permission) =>\n binding.approved.includes(permission)\n && (binding.sessionConstraints === undefined || binding.sessionConstraints.includes(permission))\n )\n );\n let revoked = false;\n let revokeReason = \"permission lease revoked\";\n\n const lease: PermissionLease = {\n binding,\n get revoked() {\n return revoked || (options.scope !== undefined && options.scope.state !== \"active\");\n },\n has(permission) {\n return !lease.revoked && granted.has(permission);\n },\n assert(permission) {\n if (lease.revoked) {\n throw new PermissionLeaseRevokedError(revokeReason);\n }\n if (!granted.has(permission)) {\n throw new PermissionDeniedError(permission);\n }\n },\n assertBinding(expected: PermissionLeaseBindingExpectation) {\n if (\n !sameBindingValue(binding.pluginId, expected.pluginId)\n || !sameBindingValue(binding.instanceId, expected.instanceId)\n || !sameAttributes(binding.attributes, expected.attributes)\n || !sameBindingValue(binding.policyRevision, expected.policyRevision)\n || !sameBindingValue(binding.grantRevision, expected.grantRevision)\n || !sameBindingValue(binding.grantId, expected.grantId)\n ) {\n throw new PermissionLeaseRevokedError(\"Permission lease identity does not match\");\n }\n if (lease.revoked) throw new PermissionLeaseRevokedError(revokeReason);\n },\n revoke(reason = \"permission lease revoked\") {\n if (revoked) return;\n revoked = true;\n revokeReason = reason;\n },\n };\n\n if (options.scope) {\n options.scope.onRevoke((reason) => lease.revoke(reason));\n options.scope.onDispose((reason) => lease.revoke(reason), \"permission-lease\");\n }\n return lease;\n}\n","// 绑定生命周期作用域的轻量后台任务调度器。\n//\n// 这是 Worker 内核可复用的调度原语,不是领域持久工作流:\n// - 定时器、取消控制器和运行实例都登记到同一个 scope;\n// - 同一任务不并发,重复触发只合并一次;\n// - 周期采用 setTimeout 链,避免 setInterval 在任务变慢时重叠;\n// - 作用域停止时只撤销本地任务,外部上传 / 支付等恢复仍由领域仓库负责。\n\nimport type {\n LifecycleScope,\n ScopedTaskDefinition,\n ScopedTaskScheduler,\n ScopedTaskSnapshot,\n} from \"../contracts/lifecycle.js\";\n\ninterface TaskRuntime {\n definition: ScopedTaskDefinition;\n state: ScopedTaskSnapshot[\"state\"];\n error?: string;\n lastCompletedAt?: string;\n nextRunAt?: string;\n timer?: ReturnType<typeof setTimeout>;\n controller?: AbortController;\n runPromise?: Promise<void>;\n rerunRequested: boolean;\n active: boolean;\n}\n\nexport interface CreateScopedTaskSchedulerOptions {\n /** 注册后是否先恢复运行一次;缺省为 false,由业务显式触发。 */\n runOnRegister?: boolean;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n/** 创建绑定到一个 lifecycle scope 的任务调度器。 */\nexport function createScopedTaskScheduler(\n scope: LifecycleScope,\n options: CreateScopedTaskSchedulerOptions = {}\n): ScopedTaskScheduler & { dispose(): Promise<void> } {\n const tasks = new Map<string, TaskRuntime>();\n const listeners = new Set<(snapshot: readonly ScopedTaskSnapshot[]) => void>();\n let disposed = false;\n\n const notify = () => {\n const value = [...tasks.values()].map((task) => ({\n id: task.definition.id,\n pluginId: task.definition.pluginId ?? scope.identity.pluginId ?? \"unknown\",\n label: task.definition.label,\n state: task.state,\n ...(task.error ? { error: task.error } : {}),\n ...(task.lastCompletedAt ? { lastCompletedAt: task.lastCompletedAt } : {}),\n ...(task.nextRunAt ? { nextRunAt: task.nextRunAt } : {}),\n }));\n for (const listener of [...listeners]) {\n try {\n listener(value);\n } catch {\n // UI 观察者不能影响任务撤销和调度。\n }\n }\n };\n\n const clearTimer = (task: TaskRuntime) => {\n if (task.timer !== undefined) {\n clearTimeout(task.timer);\n task.timer = undefined;\n }\n task.nextRunAt = undefined;\n };\n\n const schedule = (task: TaskRuntime) => {\n clearTimer(task);\n const intervalMs = task.definition.intervalMs;\n if (!task.active || disposed || intervalMs === undefined) {\n notify();\n return;\n }\n if (!Number.isFinite(intervalMs) || intervalMs < 0) {\n task.error = \"任务 intervalMs 必须是非负有限数\";\n task.state = \"failed\";\n notify();\n return;\n }\n const dueAt = Date.now() + intervalMs;\n task.nextRunAt = new Date(dueAt).toISOString();\n task.timer = setTimeout(() => {\n task.timer = undefined;\n task.nextRunAt = undefined;\n void runTask(task, \"interval\");\n }, intervalMs);\n notify();\n };\n\n const runTask = async (task: TaskRuntime, reason: string): Promise<void> => {\n if (!task.active || disposed || scope.state !== \"active\") return;\n if (task.runPromise) {\n task.rerunRequested = true;\n return task.runPromise;\n }\n task.state = \"queued\";\n task.error = undefined;\n notify();\n const run = (async () => {\n let requestScope: LifecycleScope | undefined;\n let controller: AbortController | undefined;\n let abortFromScope: (() => void) | undefined;\n try {\n // scope 可能在上面的 active 检查后、这里真正创建 request 子作用域前\n // 被同步撤权。把这条竞态纳入任务失败收口,不能让 timer 产生未处理\n // rejection,也不能在 stopped scope 上继续排下一次运行。\n requestScope = scope.child(\"request\");\n controller = new AbortController();\n task.controller = controller;\n abortFromScope = () => controller?.abort(scope.signal.reason);\n if (scope.signal.aborted) abortFromScope();\n else scope.signal.addEventListener(\"abort\", abortFromScope, { once: true });\n task.state = \"running\";\n notify();\n await task.definition.run({ signal: controller.signal, reason });\n if (!controller.signal.aborted && !requestScope.signal.aborted) {\n task.state = \"idle\";\n task.error = undefined;\n task.lastCompletedAt = new Date().toISOString();\n } else {\n task.state = \"idle\";\n }\n } catch (error) {\n task.state = \"failed\";\n task.error = controller?.signal.aborted ? undefined : errorMessage(error);\n } finally {\n if (abortFromScope) scope.signal.removeEventListener(\"abort\", abortFromScope);\n task.controller = undefined;\n if (requestScope) {\n await requestScope.dispose({ reason: `task ${task.definition.id} finished` });\n }\n if (task.active && !disposed && scope.state === \"active\") schedule(task);\n else clearTimer(task);\n notify();\n }\n })();\n task.runPromise = run;\n try {\n await run;\n } finally {\n task.runPromise = undefined;\n notify();\n if (task.rerunRequested && task.active && !disposed && scope.state === \"active\") {\n task.rerunRequested = false;\n queueMicrotask(() => { void runTask(task, \"coalesced\"); });\n }\n }\n };\n\n const releaseTask = async (task: TaskRuntime, reason: string): Promise<void> => {\n if (!task.active) return;\n task.active = false;\n task.rerunRequested = false;\n clearTimer(task);\n task.controller?.abort(reason);\n if (task.runPromise) await task.runPromise;\n tasks.delete(task.definition.id);\n notify();\n };\n\n const scheduler: ScopedTaskScheduler & { dispose(): Promise<void> } = {\n register(definition) {\n scope.assertActive();\n if (!definition.id || tasks.has(definition.id)) {\n throw new Error(`Scoped task id \"${definition.id}\" is already registered or empty`);\n }\n const task: TaskRuntime = {\n definition: { ...definition },\n state: \"idle\",\n rerunRequested: false,\n active: true,\n };\n tasks.set(definition.id, task);\n const removeScopeCleanup = scope.onDispose(\n (reason) => releaseTask(task, reason),\n `task:${definition.id}`\n );\n // register 返回的取消句柄是同步触发、异步等待由下一次 scope dispose\n // 负责;不会让调用方误以为 cleanup 已经完成。\n const unregister = () => {\n if (!task.active) return;\n removeScopeCleanup();\n void releaseTask(task, \"task unregistered\");\n };\n schedule(task);\n if (options.runOnRegister) void runTask(task, \"initial\");\n return unregister;\n },\n async runNow(id, reason = \"manual\") {\n const task = tasks.get(id);\n if (!task) throw new Error(`Scoped task \"${id}\" is not registered`);\n await runTask(task, reason);\n },\n async cancel(id) {\n const task = tasks.get(id);\n if (!task) return;\n task.rerunRequested = false;\n task.controller?.abort(\"task canceled\");\n if (task.runPromise) await task.runPromise;\n },\n snapshot() {\n return [...tasks.values()].map((task) => ({\n id: task.definition.id,\n pluginId: task.definition.pluginId ?? scope.identity.pluginId ?? \"unknown\",\n label: task.definition.label,\n state: task.state,\n ...(task.error ? { error: task.error } : {}),\n ...(task.lastCompletedAt ? { lastCompletedAt: task.lastCompletedAt } : {}),\n ...(task.nextRunAt ? { nextRunAt: task.nextRunAt } : {}),\n }));\n },\n subscribe(listener) {\n listeners.add(listener);\n listener(scheduler.snapshot());\n return () => listeners.delete(listener);\n },\n async dispose() {\n if (disposed) return;\n disposed = true;\n for (const task of [...tasks.values()]) {\n task.controller?.abort(\"task scheduler disposed\");\n clearTimer(task);\n }\n await Promise.all([...tasks.values()].map((task) => releaseTask(task, \"task scheduler disposed\")));\n listeners.clear();\n },\n };\n return scheduler;\n}\n","// packages/runtime/src/messageBus.ts\n// MessageBus runtime 实现。\n//\n// 设计缘由:\n// - publish / subscribe 同步调用:与旧 EventBus 行为等价;不 await async handler。\n// - dispatch / request 走 actor mailbox:把消息投递到 target 对应的内部队列,\n// pump 串行消费,跨请求隔离限流、取消与超时。\n// - handle 注册的 handler 不带 target 时走 publish 路径(用于把 publish 强制\n// 路由到具体实现,例如 keyspace 注册的 key.created 处理器)。\n// - publish / handle 不引入任何 React 依赖。\n// - 关键不变量:\n// 1. 每个 MailboxEntry 全生命周期只 settle 一次(唯一终态)。\n// 所有成功、失败、取消都必须经过 settleEntry;它统一维护\n// entry.settled / entry.state / inFlight / completed / failed /\n// canceled / lastError,避免重复计数。\n// 2. pump 是 N 个并发的 worker 循环(默认 N=1),每个 worker 拉取\n// best entry 后 await handler,再 settle。await 是关键的——\n// 旧实现的\"开火-遗忘\"会丢并发上限,让 WOC 的 priority 失效。\n// 3. abort / timeout 触发时,无论 entry 是 queued 还是 running,\n// 都立即 settle 为 canceled。in-flight 立即让 inFlight 归零;\n// handler 后续 resolve/reject 走 settled=true 守卫 no-op。\n// 4. target 并发由 HandlerOptions.concurrency 配置;同 target 全\n// 部 handler 注册时必须使用一致值(否则抛英文错误),缺省 1。\n// - 阶段 1 的 dispatch / request 仅在 handler 带 target 时启用;纯业务\n// 事件保持同步 publish 行为,避免破坏 key.deleting / key.deleted 时序。\n// - 关键不变量:dispatch / request 的 message envelope 会带上 messageBus\n// 内部维护的 signal(= upstream signal + timeout 触发的 ctl),handler\n// 通过 message.signal 监听取消;timeout 触发时先 abort 再 settle。\n\nimport type {\n DispatchOptions,\n EventHandler,\n HandlerOptions,\n Message,\n MessageBus,\n MessageBusSnapshot,\n MessageHandler,\n MessageMode,\n PublishOptions,\n RequestOptions\n} from \"../contracts/messageBus.js\";\n\ntype MailboxState = \"queued\" | \"running\" | \"completed\" | \"failed\" | \"canceled\";\ntype EntrySettleState = \"completed\" | \"failed\" | \"canceled\";\n\ninterface MailboxEntry {\n message: Message;\n signal: AbortSignal;\n /** 标记本 entry 是 dispatch 模式(resolve/reject 即 no-op)还是 request 模式(外层 promise)。 */\n mode: \"command\" | \"request\";\n state: MailboxState;\n settled: boolean;\n resolve: (value: unknown) => void;\n reject: (err: unknown) => void;\n /** settle 时调用:清理 upstream abort listener + clearTimeout + 移除 ctl abort listener。 */\n cleanup: () => void;\n /** 进入任一终态后只调用一次;用于释放调用方的临时生命周期监听。 */\n onSettled?: () => void;\n}\n\ninterface ActorHandler {\n type: string;\n target: string;\n priority: number;\n /** 同 target 投递并发上限;缺省 1。同 target 全部 handler 必须一致。 */\n concurrency: number;\n handler: MessageHandler;\n}\n\ninterface SubscriptionRecord {\n type: string;\n handler: EventHandler;\n}\n\nfunction makeMessageId(): string {\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n return crypto.randomUUID();\n }\n return `m_${Date.now().toString(36)}_${Math.floor(Math.random() * 1e9).toString(36)}`;\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message;\n if (typeof err === \"string\") return err;\n return String(err);\n}\n\n/** 单个 handler 允许注册的最大并发数;超过即拒绝注册。 */\nconst MAX_HANDLER_CONCURRENCY = 128;\n\n/**\n * 等待 handler 返回 / 抛错,但允许调用方随时通过 AbortSignal 取消等待。\n * 关键不变量:MessageBus 只能停止等待 handler(释放 worker),不能强制\n * 打断 handler 内部副作用;handler 仍必须监听 `message.signal`。worker\n * 释放后同 target 后续消息可被 pump 立即消费。\n *\n * 同时,原 Promise 仍会被 resolve / reject handler 接管,避免迟到\n * rejection 触发 unhandledRejection。\n */\nfunction waitForHandler(\n result: Promise<unknown>,\n signal: AbortSignal\n): Promise<unknown> {\n if (signal.aborted) {\n return Promise.reject(signal.reason ?? new Error(\"aborted\"));\n }\n\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n reject(signal.reason ?? new Error(\"aborted\"));\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n result.then(resolve, reject).finally(() => {\n signal.removeEventListener(\"abort\", onAbort);\n });\n });\n}\n\nexport function createMessageBus(): MessageBus {\n // event 订阅表:type -> handlers\n const subscriptions = new Map<string, Set<SubscriptionRecord>>();\n // 强制路由表:type -> handler(用于把 publish 路由到具体实现)\n const routedHandlers = new Map<string, ActorHandler>();\n // actor mailbox:target -> queue\n const mailboxes = new Map<string, MailboxEntry[]>();\n // target -> 已注册的 handler 数量;注销时清 0 才删除 targetConcurrency。\n const targetHandlerCount = new Map<string, number>();\n // target -> 该 target 全部 handler 协商的并发上限。\n const targetConcurrency = new Map<string, number>();\n const snapshotListeners = new Set<(s: MessageBusSnapshot) => void>();\n let total = 0;\n let completed = 0;\n let failed = 0;\n let canceled = 0;\n let inFlight = 0;\n let lastError: string | undefined;\n // 正在 pump 的 target 集合:避免重入。\n const pumping = new Set<string>();\n\n function emitSnapshot() {\n const snap = snapshot();\n for (const l of snapshotListeners) l(snap);\n }\n\n function snapshot(): MessageBusSnapshot {\n const byTarget: Record<string, number> = {};\n let queued = 0;\n for (const [target, queue] of mailboxes.entries()) {\n byTarget[target] = queue.length;\n queued += queue.length;\n }\n return {\n total,\n queued,\n inFlight,\n completed,\n failed,\n canceled,\n lastError,\n byTarget\n };\n }\n\n function makeMessage<TPayload>(\n type: string,\n mode: MessageMode,\n payload: TPayload,\n options: { target?: string; priority?: number; timeoutMs?: number; causationId?: string; messageId?: string }\n ): Message<TPayload> {\n return {\n id: options.messageId ?? makeMessageId(),\n type,\n mode,\n payload,\n target: options.target,\n priority: options.priority,\n timeoutMs: options.timeoutMs,\n causationId: options.causationId,\n createdAt: Date.now()\n };\n }\n\n function publishInternal<TPayload>(message: Message<TPayload>): string {\n total += 1;\n // 1) 同步路由:先看 routedHandlers(handle 注册但无 target 时被 publish 视为强制目标)。\n // 带 target 的 handler 属于 actor mailbox,只允许 dispatch/request 触发;\n // publish 主动绕过会让绕过 concurrency / abort / timeout 管控。\n const routed = routedHandlers.get(message.type);\n if (routed && !routed.target) {\n try {\n const result = routed.handler(message as Message);\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n // 不等待异步 handler;仅记录 lastError。\n (result as Promise<unknown>).catch((err) => {\n failed += 1;\n lastError = errorMessage(err);\n emitSnapshot();\n });\n }\n } catch (err) {\n failed += 1;\n lastError = errorMessage(err);\n }\n }\n // 2) 同步广播给订阅者\n const bucket = subscriptions.get(message.type);\n if (bucket) {\n // 拷贝一份以容忍 handler 中取消订阅。\n for (const sub of [...bucket]) {\n try {\n sub.handler(message.payload);\n } catch (err) {\n failed += 1;\n lastError = errorMessage(err);\n }\n }\n }\n emitSnapshot();\n return message.id;\n }\n\n /**\n * 唯一终态函数。\n * - 守卫:若已 settled,no-op;这是避免重复计数的关键。\n * - 唯一修改 entry.settled / entry.state / inFlight / completed /\n * failed / canceled / lastError 的入口。\n * - 副作用顺序:settled → state → cleanup → 计数 → 快照 → resolve/reject。\n */\n function settleEntry(entry: MailboxEntry, state: EntrySettleState, value?: unknown): void {\n if (entry.settled) return;\n entry.settled = true;\n const wasRunning = entry.state === \"running\";\n entry.state = state;\n entry.cleanup();\n if (state === \"completed\") {\n completed += 1;\n } else if (state === \"failed\") {\n failed += 1;\n lastError = errorMessage(value);\n } else {\n canceled += 1;\n lastError = errorMessage(value ?? entry.signal.reason);\n }\n if (wasRunning) inFlight -= 1;\n emitSnapshot();\n try {\n entry.onSettled?.();\n } catch (err) {\n // 终态清理属于观察/生命周期回调,不能改变已经提交的消息结果。\n lastError = errorMessage(err);\n }\n if (entry.mode === \"request\") {\n if (state === \"completed\") entry.resolve(value);\n else entry.reject(value);\n }\n // dispatch 模式:resolve / reject 即 no-op,调用方拿不到结果。\n }\n\n /**\n * dispatch / request 共享的入队核心。\n * - 找到 handler:消息入 mailbox,pump worker 并发消费。\n * - 找不到 handler:写 lastError + failed;dispatch 静默(return id),\n * request 立即 reject。\n * - signal 已 abort:写 lastError + canceled;dispatch 静默,request 立即 reject。\n * - 内部 ctl 由 MessageBus 维护,组合 upstream signal + timeout;handler\n * 通过 message.signal 监听。\n * - abort listener 统一处理:queued 移除 mailbox、running 仍 settle,\n * 两者都走 settleEntry(\"canceled\")。handler 后续 resolve/reject 因\n * settled=true 全部 no-op。\n */\n function enqueueMessage(message: Message, mode: \"command\" | \"request\", signal: AbortSignal | undefined, onSettled?: () => void): string | Promise<unknown> {\n total += 1;\n const target = message.target;\n if (!target) {\n failed += 1;\n lastError = `MessageBus.${mode === \"request\" ? \"request\" : \"dispatch\"} requires a target`;\n emitSnapshot();\n try { onSettled?.(); } catch { /* 生命周期清理不能阻断错误结果 */ }\n return mode === \"request\" ? Promise.reject(new Error(lastError)) : message.id;\n }\n const handler = routedHandlers.get(message.type);\n if (!handler || handler.target !== target) {\n failed += 1;\n lastError = `No handler registered for type \"${message.type}\" at target \"${target}\"`;\n emitSnapshot();\n try { onSettled?.(); } catch { /* 生命周期清理不能阻断错误结果 */ }\n return mode === \"request\" ? Promise.reject(new Error(lastError)) : message.id;\n }\n if (signal?.aborted) {\n canceled += 1;\n lastError = errorMessage(signal.reason ?? new Error(\"aborted\"));\n emitSnapshot();\n try { onSettled?.(); } catch { /* 生命周期清理不能阻断错误结果 */ }\n return mode === \"request\" ? Promise.reject(signal.reason ?? new Error(\"aborted\")) : message.id;\n }\n\n const ctl = new AbortController();\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n const onUpstreamAbort = () => {\n ctl.abort(signal?.reason ?? new Error(\"aborted\"));\n };\n if (signal) {\n signal.addEventListener(\"abort\", onUpstreamAbort, { once: true });\n }\n if (typeof message.timeoutMs === \"number\" && message.timeoutMs > 0) {\n timeoutHandle = setTimeout(() => {\n ctl.abort(new Error(\"MessageBus.request timeout\"));\n }, message.timeoutMs);\n }\n // 把 messageBus 维护的 ctl.signal 注入 envelope,handler 监听它。\n const stamped: Message = { ...message, signal: ctl.signal };\n const mailbox = mailboxes.get(target) ?? [];\n mailboxes.set(target, mailbox);\n\n return new Promise<unknown>((resolve, reject) => {\n const entry: MailboxEntry = {\n message: stamped,\n signal: ctl.signal,\n mode,\n state: \"queued\",\n settled: false,\n resolve: (v) => resolve(v),\n reject: (e) => reject(e),\n onSettled,\n cleanup: () => {\n if (timeoutHandle) clearTimeout(timeoutHandle);\n if (signal) signal.removeEventListener(\"abort\", onUpstreamAbort);\n ctl.signal.removeEventListener(\"abort\", onAbort);\n }\n };\n function onAbort() {\n // 关键不变量:queued 移除 mailbox;running 不动 mailbox。\n // 两者都立即 settle 为 canceled。in-flight 由此让 inFlight 归零。\n if (entry.state === \"queued\") {\n const idx = mailbox.indexOf(entry);\n if (idx >= 0) {\n mailbox.splice(idx, 1);\n }\n }\n settleEntry(entry, \"canceled\", ctl.signal.reason ?? new Error(\"aborted\"));\n }\n ctl.signal.addEventListener(\"abort\", onAbort, { once: true });\n mailbox.push(entry);\n emitSnapshot();\n schedulePump(target);\n });\n }\n\n function schedulePump(target: string) {\n if (pumping.has(target)) return;\n const mailbox = mailboxes.get(target);\n if (!mailbox || mailbox.length === 0) return;\n pumping.add(target);\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(() => {\n void runPump(target);\n });\n } else {\n Promise.resolve().then(() => {\n void runPump(target);\n });\n }\n }\n\n /**\n * Pump 顶层:N 个 worker 并行 await handler。N 由 targetConcurrency\n * 决定,缺省 1。所有 worker 退出后再 cleanup;若有新 entry 在退出前\n * 入 mailbox,finally 阶段重新 schedulePump。\n */\n async function runPump(target: string) {\n const concurrency = targetConcurrency.get(target) ?? 1;\n const workers: Promise<void>[] = [];\n for (let i = 0; i < concurrency; i += 1) {\n workers.push(workerLoop(target, i));\n }\n try {\n await Promise.all(workers);\n } finally {\n pumping.delete(target);\n // Race: enqueueMessage 可能在该 worker 退出后、finally 之前压入新 entry。\n const mailbox = mailboxes.get(target);\n if (mailbox && mailbox.length > 0) {\n schedulePump(target);\n }\n emitSnapshot();\n }\n }\n\n async function workerLoop(target: string, workerId: number) {\n // 每个 worker 持续拉 best entry;mailbox 空则本 worker 退出。\n // 其他 worker 仍在跑;Promise.all 等所有 worker 退出后才回收 pump。\n void workerId;\n while (true) {\n const entry = pickBestEntry(target);\n if (!entry) return;\n await processEntry(target, entry);\n }\n }\n\n function pickBestEntry(target: string): MailboxEntry | undefined {\n const mailbox = mailboxes.get(target);\n if (!mailbox || mailbox.length === 0) return undefined;\n let bestIdx = -1;\n let bestEntry: MailboxEntry | undefined;\n for (let i = 0; i < mailbox.length; i += 1) {\n const cur = mailbox[i]!;\n // 防御:onAbort 已把 queued 移除;运行中不会被 pickBest 看到。\n if (cur.settled) continue;\n if (!bestEntry) {\n bestEntry = cur;\n bestIdx = i;\n continue;\n }\n const bestPriority = (bestEntry.message.priority ?? 0) as number;\n const curPriority = (cur.message.priority ?? 0) as number;\n if (curPriority > bestPriority ||\n (curPriority === bestPriority && cur.message.createdAt < bestEntry.message.createdAt)) {\n bestEntry = cur;\n bestIdx = i;\n }\n }\n if (bestEntry && bestIdx >= 0) {\n mailbox.splice(bestIdx, 1);\n }\n return bestEntry;\n }\n\n async function processEntry(target: string, entry: MailboxEntry): Promise<void> {\n // pickBestEntry 已把 entry 移出 mailbox。此处 settled 可能为 true\n // (abort listener 在我们执行 sync 块之前已跑完)。但 JS 单线程\n // 保证了下面的赋值与 abort listener 不会在中间插入。\n if (entry.settled) return;\n entry.state = \"running\";\n inFlight += 1;\n emitSnapshot();\n const handler = routedHandlers.get(entry.message.type);\n if (!handler) {\n settleEntry(entry, \"failed\", new Error(`No handler for type \"${entry.message.type}\"`));\n return;\n }\n try {\n const result = handler.handler(entry.message as Message);\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n // waitForHandler:abort 触发时只停止等待并立即 settle 为 canceled;\n // handler 内部副作用由 handler 自己监听 message.signal 取消。\n // 原 Promise 仍由 waitForHandler 接管,避免迟到 rejection 触发\n // unhandledRejection。\n const v = await waitForHandler(\n result as Promise<unknown>,\n entry.signal\n );\n // 关键:await 期间 abort 可能已触发并 settle 为 canceled;本调用 no-op。\n if (entry.signal.aborted) {\n settleEntry(entry, \"canceled\", entry.signal.reason);\n } else {\n settleEntry(entry, \"completed\", v);\n }\n } else {\n if (entry.signal.aborted) {\n settleEntry(entry, \"canceled\", entry.signal.reason);\n } else {\n settleEntry(entry, \"completed\", result);\n }\n }\n } catch (err) {\n if (entry.signal.aborted) {\n // 关键:abort 优先,错误信息不污染 lastError。\n settleEntry(entry, \"canceled\", entry.signal.reason ?? err);\n } else {\n settleEntry(entry, \"failed\", err);\n }\n }\n }\n\n const bus: MessageBus = {\n publish<TPayload>(type: string, payload: TPayload, options?: PublishOptions): string {\n const message = makeMessage<TPayload>(type, \"event\", payload, {\n causationId: options?.causationId,\n messageId: options?.messageId\n });\n return publishInternal(message);\n },\n\n subscribe<TPayload>(type: string, handler: EventHandler<TPayload>): () => void {\n const record: SubscriptionRecord = { type, handler: handler as EventHandler };\n let bucket = subscriptions.get(type);\n if (!bucket) {\n bucket = new Set();\n subscriptions.set(type, bucket);\n }\n bucket.add(record);\n return () => {\n bucket?.delete(record);\n };\n },\n\n dispatch<TPayload>(type: string, payload: TPayload, options: DispatchOptions): string {\n const message = makeMessage<TPayload>(type, \"command\", payload, {\n target: options.target,\n priority: options.priority,\n timeoutMs: options.timeoutMs,\n causationId: options.causationId,\n messageId: options.messageId\n });\n const result = enqueueMessage(message, \"command\", options.signal, options.onSettled);\n // enqueueMessage 在 command 模式下不会 reject;但类型系统要求同步返回 string。\n if (typeof result === \"string\") return result;\n // 防御:理论上 command 模式只会返回 string。\n return message.id;\n },\n\n request<TPayload, TResult>(type: string, payload: TPayload, options: RequestOptions): Promise<TResult> {\n const message = makeMessage<TPayload>(type, \"request\", payload, {\n target: options.target,\n priority: options.priority,\n timeoutMs: options.timeoutMs,\n causationId: options.causationId,\n messageId: options.messageId\n });\n const result = enqueueMessage(message, \"request\", options.signal, options.onSettled);\n if (typeof result === \"string\") {\n return Promise.reject(new Error(\"MessageBus.request returned a string id unexpectedly\"));\n }\n return result as Promise<TResult>;\n },\n\n handle<TPayload, TResult>(type: string, handler: MessageHandler<TPayload, TResult>, options?: HandlerOptions): () => void {\n // 关键不变量:校验必须发生在修改 routedHandlers / targetConcurrency /\n // targetHandlerCount / mailboxes 之前,避免注册失败后留下半初始化状态。\n const concurrency = options?.concurrency ?? 1;\n if (\n !Number.isFinite(concurrency) ||\n !Number.isInteger(concurrency) ||\n concurrency <= 0\n ) {\n throw new Error(\"Handler concurrency must be a positive integer\");\n }\n if (concurrency > MAX_HANDLER_CONCURRENCY) {\n throw new Error(\n `Handler concurrency must not exceed ${MAX_HANDLER_CONCURRENCY}`\n );\n }\n const record: ActorHandler = {\n type,\n target: options?.target ?? \"\",\n priority: options?.priority ?? 0,\n concurrency,\n handler: handler as MessageHandler\n };\n if (routedHandlers.has(type)) {\n throw new Error(`Handler for \"${type}\" is already registered`);\n }\n if (record.target) {\n // 同 target 全部 handler 必须使用一致 concurrency。\n const existing = targetConcurrency.get(record.target);\n if (existing !== undefined && existing !== concurrency) {\n throw new Error(`Conflicting concurrency for target \"${record.target}\"`);\n }\n targetConcurrency.set(record.target, concurrency);\n targetHandlerCount.set(record.target, (targetHandlerCount.get(record.target) ?? 0) + 1);\n if (!mailboxes.has(record.target)) {\n mailboxes.set(record.target, []);\n }\n // 已有 enqueue 的消息可以直接 pump。\n schedulePump(record.target);\n }\n routedHandlers.set(type, record);\n return () => {\n if (routedHandlers.get(type) === record) {\n routedHandlers.delete(type);\n if (record.target) {\n const count = (targetHandlerCount.get(record.target) ?? 1) - 1;\n if (count <= 0) {\n targetHandlerCount.delete(record.target);\n targetConcurrency.delete(record.target);\n } else {\n targetHandlerCount.set(record.target, count);\n }\n }\n }\n };\n },\n\n snapshot,\n onSnapshot(handler) {\n snapshotListeners.add(handler);\n handler(snapshot());\n return () => snapshotListeners.delete(handler);\n }\n };\n\n return bus;\n}\n","/**\n * 资源注册表实现\n *\n * 设计缘由:管理资源定义的注册和查询,支持 owner-aware 生命周期。\n * 重复 id 抛错,disable 时可回收。\n */\n\nimport type {\n OwnedResourceDefinition,\n ResourceDefinition,\n ResourceRegistry,\n} from \"../contracts/resource.js\";\nimport { RESOURCE_OWNER as RESOURCE_OWNER_KEY } from \"../contracts/resource.js\";\n\n/** 资源注册表实现 */\nexport function createResourceRegistry(): ResourceRegistry {\n const definitions = new Map<string, OwnedResourceDefinition>();\n\n function registerOwned<T, TArgs extends readonly string[]>(\n ownerId: string,\n definition: ResourceDefinition<T, TArgs>\n ): void {\n if (definitions.has(definition.id)) {\n throw new Error(\n `Resource definition \"${definition.id}\" is already registered`\n );\n }\n // Keep ownership outside the public definition object. The object is copied\n // so a plugin cannot mutate the definition after registration to change it.\n const owned = Object.assign({}, definition) as OwnedResourceDefinition;\n Object.defineProperty(owned, RESOURCE_OWNER_KEY, {\n value: ownerId,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n definitions.set(definition.id, owned);\n }\n\n return {\n _registerOwned: registerOwned,\n register<T, TArgs extends readonly string[]>(\n definition: ResourceDefinition<T, TArgs>\n ): void {\n // Direct registry users have no plugin identity. Host-provided facades use\n // registerOwned below and are the only path used by plugin setup.\n registerOwned(\"\", definition);\n },\n\n unregister(id: string): void {\n definitions.delete(id);\n },\n\n get<T, TArgs extends readonly string[]>(\n id: string\n ): ResourceDefinition<T, TArgs> | undefined {\n return definitions.get(id) as ResourceDefinition<T, TArgs> | undefined;\n },\n\n /** 获取所有已注册的资源定义 id(用于 ownership 快照) */\n _ids(): string[] {\n return Array.from(definitions.keys());\n },\n } as ResourceRegistry & {\n _registerOwned: typeof registerOwned;\n };\n}\n\n/** Internal runtime hook; deliberately absent from ResourceRegistry's public type. */\nexport function registerOwnedResource(\n registry: ResourceRegistry,\n ownerId: string,\n definition: ResourceDefinition<any, any>\n): void {\n const internal = registry as ResourceRegistry & {\n _registerOwned?: (owner: string, definition: ResourceDefinition<any, any>) => void;\n };\n if (!internal._registerOwned) {\n // Fallback is only for custom registries used by tests/adapters.\n registry.register(definition);\n return;\n }\n internal._registerOwned(ownerId, definition);\n}\n","// WebLoom Resource Store 实现。\n//\n// 负责加载去重、取消、修订、失效通知和按实例 owner 清理。资源的 scope\n// 和 attributes 完全由宿主定义,Store 不猜测任何领域身份。\n\nimport type {\n ResourceContext,\n ResourceDefinition,\n ResourceKey,\n ResourceRegistry,\n ResourceSnapshot,\n} from \"../contracts/resource.js\";\nimport { RESOURCE_OWNER } from \"../contracts/resource.js\";\n\ninterface ResourceRecord<T = unknown> {\n snapshot: ResourceSnapshot<T>;\n inFlight: Promise<T> | null;\n abortController: AbortController | null;\n subscribers: Set<() => void>;\n invalidationScheduled: boolean;\n loadRevision: number;\n owner: string;\n providerUnsubscribe: (() => void) | null;\n}\n\n/** Resource Store 公共 API。 */\nexport interface ResourceStoreApi {\n /** 确保资源已加载,并返回当前快照。 */\n ensure<T>(definitionId: string, args: readonly string[]): ResourceSnapshot<T>;\n /** 订阅资源变更。 */\n subscribe(definitionId: string, args: readonly string[], callback: () => void): () => void;\n /** 读取资源快照,不触发加载。 */\n read<T>(definitionId: string, args: readonly string[]): ResourceSnapshot<T> | undefined;\n /** 使资源失效并重新加载。 */\n invalidate(definitionId: string, args: readonly string[]): void;\n /** 清理指定 owner 的所有资源记录。 */\n disposeOwner(ownerId: string): void;\n /** 宿主属性或 capability 变化后刷新绑定。 */\n refreshRuntimeBindings(): void;\n /** 订阅宿主 Context 变化。 */\n subscribeContext(callback: () => void): () => void;\n}\n\ntype Attributes = Readonly<Record<string, unknown>>;\n\nfunction createContext(\n ownerId: string,\n getCapability: <T>(id: string) => T | undefined,\n getAttributes: (ownerId?: string) => Attributes,\n): ResourceContext {\n return {\n getCapability,\n attributes: getAttributes(ownerId),\n ownerId,\n } as ResourceContext & { ownerId: string };\n}\n\nfunction recordKey(definitionId: string, key: ResourceKey): string {\n return `${definitionId}::${key.join(\"::\")}`;\n}\n\nfunction defaultEquals(a: unknown, b: unknown): boolean {\n return Object.is(a, b);\n}\n\n/** 创建通用 Resource Store。 */\nexport function createResourceStore(\n registry: ResourceRegistry,\n getCapability: <T>(id: string) => T | undefined,\n getAttributes: (ownerId?: string) => Attributes = () => ({}),\n): ResourceStoreApi {\n const records = new Map<string, ResourceRecord>();\n const microtaskQueue = new Map<string, { definitionId: string; args: readonly string[] }>();\n const contextSubscribers = new Set<() => void>();\n let microtaskScheduled = false;\n\n const notify = (record: ResourceRecord): void => {\n for (const subscriber of [...record.subscribers]) {\n try { subscriber(); } catch { /* 观察者不能改变资源状态。 */ }\n }\n };\n\n const notifyContext = (): void => {\n for (const subscriber of [...contextSubscribers]) {\n try { subscriber(); } catch { /* 观察者不能改变资源状态。 */ }\n }\n };\n\n const cleanupRecord = (record: ResourceRecord): void => {\n record.abortController?.abort();\n record.providerUnsubscribe?.();\n record.providerUnsubscribe = null;\n };\n\n const contextFor = (definition: ResourceDefinition<unknown, readonly string[]>): ResourceContext =>\n createContext(\n ((definition as ResourceDefinition<unknown, readonly string[]> & { [RESOURCE_OWNER]?: string })[RESOURCE_OWNER] ?? \"__unowned__\"),\n getCapability,\n getAttributes,\n );\n\n const getOrCreateRecord = <T>(\n definition: ResourceDefinition<T, readonly string[]>,\n args: readonly string[],\n ): ResourceRecord<T> => {\n const context = contextFor(definition as ResourceDefinition<unknown, readonly string[]>);\n const key = definition.key(args, context);\n const keyString = recordKey(definition.id, key);\n const current = records.get(keyString) as ResourceRecord<T> | undefined;\n if (current) {\n if (definition.subscribe && !current.providerUnsubscribe) {\n current.providerUnsubscribe = definition.subscribe(args, context, () => {\n scheduleInvalidation(definition.id, args);\n });\n }\n return current;\n }\n\n const record: ResourceRecord<T> = {\n snapshot: { key, status: \"pending\", data: undefined, revision: 0 },\n inFlight: null,\n abortController: null,\n subscribers: new Set(),\n invalidationScheduled: false,\n loadRevision: 0,\n owner: ((definition as ResourceDefinition<unknown, readonly string[]> & { [RESOURCE_OWNER]?: string })[RESOURCE_OWNER] ?? \"__unowned__\"),\n providerUnsubscribe: null,\n };\n records.set(keyString, record);\n if (definition.subscribe) {\n record.providerUnsubscribe = definition.subscribe(args, context, () => {\n scheduleInvalidation(definition.id, args);\n });\n }\n return record;\n };\n\n const loadResource = <T>(\n definition: ResourceDefinition<T, readonly string[]>,\n args: readonly string[],\n record: ResourceRecord<T>,\n ): void => {\n record.abortController?.abort();\n const context = contextFor(definition as ResourceDefinition<unknown, readonly string[]>);\n const key = definition.key(args, context);\n if (record.snapshot.key.join(\"::\") !== key.join(\"::\")) return;\n\n const abortController = new AbortController();\n const loadRevision = ++record.loadRevision;\n record.abortController = abortController;\n try {\n record.inFlight = Promise.resolve(definition.load(args, context, abortController.signal));\n } catch (error) {\n record.inFlight = Promise.reject(error);\n }\n record.snapshot = { ...record.snapshot, status: \"pending\", revision: record.snapshot.revision + 1 };\n notify(record);\n\n record.inFlight.then((data) => {\n if (abortController.signal.aborted || record.loadRevision !== loadRevision) return;\n if (record.snapshot.key.join(\"::\") !== key.join(\"::\")) return;\n const equals = definition.equals ?? defaultEquals;\n const changed = !equals(record.snapshot.data, data);\n record.snapshot = {\n key,\n status: \"ready\",\n data,\n revision: changed ? record.snapshot.revision + 1 : record.snapshot.revision,\n };\n record.inFlight = null;\n record.abortController = null;\n if (changed) notify(record);\n }).catch((error: unknown) => {\n if (abortController.signal.aborted || record.loadRevision !== loadRevision) return;\n const blocked = error instanceof Error && error.message === \"blocked\";\n const errorValue = error instanceof Error ? error : new Error(String(error));\n record.snapshot = blocked\n ? { ...record.snapshot, status: \"blocked\", revision: record.snapshot.revision + 1 }\n : {\n ...record.snapshot,\n status: record.snapshot.data === undefined ? \"error\" : \"stale\",\n error: {\n code: typeof (errorValue as Error & { code?: unknown }).code === \"string\"\n ? String((errorValue as Error & { code?: unknown }).code)\n : \"resource.load_failed\",\n message: errorValue.message,\n },\n revision: record.snapshot.revision + 1,\n };\n record.inFlight = null;\n record.abortController = null;\n notify(record);\n });\n };\n\n const invalidateNow = (definitionId: string, args: readonly string[]): void => {\n const definition = registry.get<unknown, readonly string[]>(definitionId);\n if (!definition) return;\n const context = contextFor(definition);\n const key = definition.key(args, context);\n const record = records.get(recordKey(definitionId, key));\n if (!record) return;\n record.snapshot = { ...record.snapshot, status: \"stale\", revision: record.snapshot.revision + 1 };\n notify(record);\n loadResource(definition, args, record);\n };\n\n const flushInvalidations = (): void => {\n const queue = [...microtaskQueue.values()];\n microtaskQueue.clear();\n microtaskScheduled = false;\n for (const item of queue) invalidateNow(item.definitionId, item.args);\n };\n\n const scheduleInvalidation = (definitionId: string, args: readonly string[]): void => {\n const definition = registry.get<unknown, readonly string[]>(definitionId);\n if (!definition) return;\n if (definition.invalidation === \"immediate\") {\n invalidateNow(definitionId, args);\n return;\n }\n const key = recordKey(definitionId, definition.key(args, contextFor(definition)));\n if (microtaskQueue.has(key)) return;\n microtaskQueue.set(key, { definitionId, args });\n if (!microtaskScheduled) {\n microtaskScheduled = true;\n queueMicrotask(flushInvalidations);\n }\n };\n\n const refreshRuntimeBindings = (): void => {\n for (const record of records.values()) cleanupRecord(record);\n records.clear();\n notifyContext();\n };\n\n return {\n ensure<T>(definitionId: string, args: readonly string[]): ResourceSnapshot<T> {\n const definition = registry.get<T, readonly string[]>(definitionId);\n if (!definition) throw new Error(`Resource definition \"${definitionId}\" not found`);\n const record = getOrCreateRecord(definition, args);\n if (!record.inFlight && record.snapshot.status === \"pending\") loadResource(definition, args, record);\n return record.snapshot;\n },\n subscribe(definitionId, args, callback) {\n const definition = registry.get<unknown, readonly string[]>(definitionId);\n if (!definition) return () => undefined;\n let record = getOrCreateRecord(definition, args);\n record.subscribers.add(callback);\n const removeContext = definition.scope === \"context\"\n ? (() => {\n const listener = () => {\n record.subscribers.delete(callback);\n record = getOrCreateRecord(definition, args);\n record.subscribers.add(callback);\n callback();\n };\n contextSubscribers.add(listener);\n return () => contextSubscribers.delete(listener);\n })()\n : undefined;\n return () => {\n removeContext?.();\n record.subscribers.delete(callback);\n if (record.subscribers.size === 0 && record.providerUnsubscribe) {\n record.providerUnsubscribe();\n record.providerUnsubscribe = null;\n }\n if (record.subscribers.size === 0 && record.abortController) {\n const current = record;\n setTimeout(() => {\n if (current.subscribers.size === 0 && current.abortController) {\n current.abortController.abort();\n current.abortController = null;\n current.inFlight = null;\n }\n }, 100);\n }\n };\n },\n read<T>(definitionId: string, args: readonly string[]) {\n const definition = registry.get<T, readonly string[]>(definitionId);\n if (!definition) return undefined;\n const key = definition.key(args, contextFor(definition));\n return (records.get(recordKey(definitionId, key)) as ResourceRecord<T> | undefined)?.snapshot;\n },\n invalidate: scheduleInvalidation,\n disposeOwner(ownerId) {\n for (const [key, record] of records) {\n if (record.owner !== ownerId) continue;\n cleanupRecord(record);\n records.delete(key);\n }\n },\n refreshRuntimeBindings,\n subscribeContext(callback) {\n contextSubscribers.add(callback);\n return () => contextSubscribers.delete(callback);\n },\n };\n}\n","// 把共享 MessageBus 绑定到一个插件实例作用域。\n//\n// MessageBus 本身不拥有插件生命周期;这个 facade 负责把订阅、handler、\n// 请求和取消信号登记到当前 Scope。这样同步撤权后,迟到的消息不会继续\n// 进入已经失效的插件实例。\n\nimport type {\n DispatchOptions,\n HandlerOptions,\n Message,\n MessageBus,\n MessageHandler,\n PublishOptions,\n RequestOptions,\n} from \"../contracts/messageBus.js\";\nimport { LifecycleScopeRevokedError } from \"../contracts/lifecycle.js\";\nimport type { LifecycleScope } from \"../contracts/lifecycle.js\";\n\ninterface MergedSignal {\n signal: AbortSignal;\n dispose(): void;\n}\n\nfunction mergeSignals(scopeSignal: AbortSignal, requestSignal?: AbortSignal): MergedSignal {\n if (!requestSignal) return { signal: scopeSignal, dispose: () => undefined };\n if (scopeSignal.aborted) {\n const controller = new AbortController();\n controller.abort(scopeSignal.reason);\n return { signal: controller.signal, dispose: () => undefined };\n }\n if (requestSignal.aborted) {\n const controller = new AbortController();\n controller.abort(requestSignal.reason);\n return { signal: controller.signal, dispose: () => undefined };\n }\n const controller = new AbortController();\n const abortFrom = (source: AbortSignal) => {\n try {\n controller.abort(source.reason);\n } catch {\n controller.abort();\n }\n };\n const onScopeAbort = () => abortFrom(scopeSignal);\n const onRequestAbort = () => abortFrom(requestSignal);\n scopeSignal.addEventListener(\"abort\", onScopeAbort, { once: true });\n requestSignal.addEventListener(\"abort\", onRequestAbort, { once: true });\n return {\n signal: controller.signal,\n dispose: () => {\n scopeSignal.removeEventListener(\"abort\", onScopeAbort);\n requestSignal.removeEventListener(\"abort\", onRequestAbort);\n },\n };\n}\n\nfunction withScopeCleanup(scope: LifecycleScope, cleanup: () => void): () => void {\n let active = true;\n let removeRevoke: () => void = () => undefined;\n let removeDispose: () => void = () => undefined;\n const runCleanup = () => {\n if (!active) return;\n active = false;\n removeRevoke();\n removeDispose();\n cleanup();\n };\n removeRevoke = scope.onRevoke(runCleanup);\n removeDispose = scope.onDispose(runCleanup, \"message-bus-registration\");\n return () => {\n if (!active) return;\n active = false;\n removeRevoke();\n removeDispose();\n cleanup();\n };\n}\n\n/** 创建绑定到指定插件实例的 MessageBus 视图。 */\nexport function createScopedMessageBus(base: MessageBus, scope: LifecycleScope): MessageBus {\n return {\n publish<TPayload>(type: string, payload: TPayload, options?: PublishOptions): string {\n scope.assertActive();\n return base.publish(type, payload, options);\n },\n\n subscribe<TPayload>(type: string, handler: (payload: TPayload) => void): () => void {\n scope.assertActive();\n const unsubscribe = base.subscribe<TPayload>(type, (payload) => {\n if (scope.state !== \"active\") return;\n handler(payload);\n });\n return withScopeCleanup(scope, unsubscribe);\n },\n\n dispatch<TPayload>(type: string, payload: TPayload, options: DispatchOptions): string {\n scope.assertActive();\n const merged = mergeSignals(scope.signal, options.signal);\n const cleanup = withScopeCleanup(scope, merged.dispose);\n try {\n return base.dispatch(type, payload, {\n ...options,\n signal: merged.signal,\n onSettled: () => {\n cleanup();\n options.onSettled?.();\n },\n });\n } catch (error) {\n cleanup();\n throw error;\n }\n },\n\n request<TPayload, TResult>(type: string, payload: TPayload, options: RequestOptions): Promise<TResult> {\n scope.assertActive();\n const merged = mergeSignals(scope.signal, options.signal);\n const cleanup = withScopeCleanup(scope, merged.dispose);\n try {\n const request = base.request<TPayload, TResult>(type, payload, {\n ...options,\n signal: merged.signal,\n onSettled: () => {\n cleanup();\n options.onSettled?.();\n },\n });\n return request.finally(cleanup);\n } catch (error) {\n cleanup();\n return Promise.reject(error);\n }\n },\n\n handle<TPayload, TResult>(\n type: string,\n handler: MessageHandler<TPayload, TResult>,\n options?: HandlerOptions,\n ): () => void {\n scope.assertActive();\n const scopedHandler: MessageHandler<TPayload, TResult> = (message: Message<TPayload>) => {\n if (scope.state !== \"active\") {\n throw new LifecycleScopeRevokedError(\n `Lifecycle scope \"${scope.identity.scopeId}\" is ${scope.state}`,\n );\n }\n const merged = mergeSignals(scope.signal, message.signal);\n try {\n const result = handler({ ...message, signal: merged.signal });\n if (result && typeof (result as PromiseLike<TResult>).then === \"function\") {\n return Promise.resolve(result).finally(merged.dispose) as Promise<TResult>;\n }\n merged.dispose();\n return result;\n } catch (error) {\n merged.dispose();\n throw error;\n }\n };\n const unregister = base.handle(type, scopedHandler, options);\n return withScopeCleanup(scope, unregister);\n },\n\n snapshot() {\n return base.snapshot();\n },\n\n onSnapshot(handler) {\n scope.assertActive();\n const unsubscribe = base.onSnapshot(handler);\n return withScopeCleanup(scope, unsubscribe);\n },\n };\n}\n","// WebLoom v4 Plugin Host。\n//\n// Host 是声明、实例和 Scope 的唯一权威。capability registry 只按\n// (kind,id,version) 绑定,远程目录则由 Runtime bridge 投影;普通插件看不到\n// raw MessagePort、服务 codec 或可变的全局 Host 实现。\n\nimport {\n capabilityDescriptor,\n capabilityKey,\n type Capability,\n type CapabilityBridge,\n type CapabilityClient,\n type CapabilityDependency,\n type CapabilityDescriptor,\n type HandlerCallContext,\n type LocalCapability,\n type LocalServiceOf,\n type RemoteCapability,\n type RpcCapability,\n type RpcCapabilityBase,\n type RpcCallOptions,\n type RpcHandler,\n type StreamCapability,\n type StreamCapabilityBase,\n type StreamHandler,\n type StreamSubscribeOptions,\n type StreamSubscription,\n type ServiceReference,\n} from \"../contracts/capability.js\";\nimport type {\n LifecycleDisposeResult,\n LifecycleScope,\n LifecycleScopeIdentity,\n PermissionLease,\n PermissionLeaseBinding,\n PluginIntentCoordinator,\n PluginIntentSubmissionResult,\n PluginPermission,\n RuntimeKind,\n ScopedTaskScheduler,\n} from \"../contracts/lifecycle.js\";\nimport { LifecycleScopeRevokedError, WebLoomError } from \"../contracts/lifecycle.js\";\nimport type {\n PluginContext,\n PluginGraph,\n PluginLifecycleState,\n PluginManifest,\n PluginReverseDep,\n PluginSetup,\n PluginState,\n PluginStateKind,\n PluginTeardown,\n PluginUnitState,\n HostListener,\n RuntimeUnitDescriptor,\n RuntimeUnitImplementationRegistry,\n StartupCapabilityErrorDetails,\n} from \"../contracts/plugin.js\";\nimport type { MessageBus } from \"../contracts/messageBus.js\";\nimport { RESOURCE_REGISTRY, type ResourceRegistry } from \"../contracts/resource.js\";\nimport { createCapabilityRegistry, invokeCapabilityHandler, type CapabilityRegistry } from \"./capabilityRegistry.js\";\nimport { buildPluginGraph, dependenciesOfManifest, providesOfManifest, reverseDependentsOf, selectRuntimeUnit, validatePluginGraph } from \"./pluginGraph.js\";\nimport { createLifecycleScope } from \"../lifecycle/resourceScope.js\";\nimport { createPermissionLease } from \"../lifecycle/permissionLease.js\";\nimport { createScopedMessageBus } from \"../lifecycle/scopedMessageBus.js\";\nimport { createScopedTaskScheduler } from \"../lifecycle/taskScheduler.js\";\nimport { createMessageBus } from \"../messaging/messageBus.js\";\nimport { createResourceRegistry } from \"../resources/resourceRegistry.js\";\nimport { createResourceStore, type ResourceStoreApi } from \"../resources/resourceStore.js\";\nimport { cloneFrozenAttributes } from \"../transport/dto.js\";\n\nexport interface PluginConfigStore {\n /** 读取产品级绝对启停意图。 */\n read(): Readonly<Record<string, boolean>>;\n /** 写入一个产品的绝对启停意图。 */\n setEnabled(pluginId: string, enabled: boolean): void;\n /** 订阅外部控制面变化。 */\n subscribe(listener: (snapshot: Readonly<Record<string, boolean>>) => void): () => void;\n}\n\nexport function createInMemoryPluginConfigStore(initial: Readonly<Record<string, boolean>> = {}, readOnly = false): PluginConfigStore {\n const values = new Map(Object.entries(initial).filter((entry): entry is [string, boolean] => typeof entry[1] === \"boolean\"));\n const listeners = new Set<(snapshot: Readonly<Record<string, boolean>>) => void>();\n const snapshot = (): Readonly<Record<string, boolean>> => Object.freeze(Object.fromEntries(values));\n return {\n read: snapshot,\n setEnabled(pluginId, enabled) {\n if (readOnly || values.get(pluginId) === enabled) return;\n values.set(pluginId, enabled);\n const next = snapshot();\n for (const listener of [...listeners]) listener(next);\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n };\n}\n\nexport interface PermissionPolicyInput {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 运行单元标识。 */\n readonly unitId: string;\n /** 当前 Scope 身份。 */\n readonly identity: LifecycleScopeIdentity;\n /** 清单申请的权限。 */\n readonly requested: readonly PluginPermission[];\n}\n\nexport interface PermissionPolicyResult {\n /** 可信批准集合;缺省时为 requested。 */\n readonly approved?: readonly PluginPermission[];\n /** 当前会话额外限制。 */\n readonly sessionConstraints?: readonly PluginPermission[];\n /** 租约绑定的策略/授权修订。 */\n readonly binding?: Partial<Pick<PermissionLeaseBinding, \"policyRevision\" | \"grantRevision\" | \"grantId\">>;\n}\n\nexport interface ContextExtensionInput {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 单元标识。 */\n readonly unitId: string;\n /** 实例标识。 */\n readonly instanceId: string;\n /** 实例 Scope。 */\n readonly scope: LifecycleScope;\n /** 静态 manifest。 */\n readonly manifest: PluginManifest;\n}\n\nexport interface ContributionAdapterInput {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 单元标识。 */\n readonly unitId: string;\n /** 实例标识。 */\n readonly instanceId: string;\n /** 实例 Scope。 */\n readonly scope: LifecycleScope;\n /** 产品贡献。 */\n readonly contribution: unknown;\n /** 静态 manifest。 */\n readonly manifest: PluginManifest;\n}\n\nexport interface ContributionHandle {\n /** 同步撤下入口。 */\n revoke?(): void;\n /** 异步收尾。 */\n dispose?(): void | Promise<void>;\n}\n\nexport interface ContributionAdapter {\n /** 适配器名称。 */\n readonly name?: string;\n /** 注册一份产品贡献。 */\n register(input: ContributionAdapterInput): void | ContributionHandle | (() => void | Promise<void>) | Promise<void | ContributionHandle | (() => void | Promise<void>)>;\n}\n\nexport interface RuntimeUnitAvailabilityInput {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 单元标识。 */\n readonly unitId: string;\n /** 真实 Runtime。 */\n readonly runtime: RuntimeKind;\n}\n\nexport interface RuntimeUnitAttributesInput extends RuntimeUnitAvailabilityInput {\n /** 静态 manifest。 */\n readonly manifest: PluginManifest;\n}\n\nexport type RuntimeUnitParentScopeInput = RuntimeUnitAttributesInput;\n\nexport interface RuntimeUnitSnapshot {\n /** 插件标识。 */\n readonly pluginId: string;\n /** 单元标识。 */\n readonly unitId: string;\n /** Runtime。 */\n readonly runtime: RuntimeKind;\n /** 当前实例。 */\n readonly instanceId?: string;\n /** 状态。 */\n readonly state: PluginStateKind;\n}\n\nexport interface HostCapabilityRegistration {\n /** Host-owned capability。 */\n readonly capability: LocalCapability<unknown>;\n /** 对应服务值。 */\n readonly value: unknown;\n}\n\nexport interface CreatePluginHostOptions {\n /** 当前 Host 的真实 Runtime。 */\n readonly runtime?: RuntimeKind;\n /** Runtime 逻辑标识。 */\n readonly runtimeId?: string;\n /** Runtime 启动实例标识。 */\n readonly runtimeInstanceId?: string;\n /** 根 Scope 属性。 */\n readonly rootAttributes?: Readonly<Record<string, unknown>>;\n /** Host-owned local capability;不接受字符串键。 */\n readonly capabilities?: ReadonlyMap<LocalCapability<unknown>, unknown> | readonly HostCapabilityRegistration[];\n /** capabilities 的显式别名。 */\n readonly builtinCapabilities?: ReadonlyMap<LocalCapability<unknown>, unknown> | readonly HostCapabilityRegistration[];\n /** 共享 MessageBus。 */\n readonly messageBus?: MessageBus;\n /** 资源定义注册表。 */\n readonly resourceRegistry?: ResourceRegistry;\n /** 资源读取时的领域 capability resolver。 */\n readonly resourceCapabilityResolver?: <T>(id: string) => T | undefined;\n /** 领域 Context Extension。 */\n readonly contextExtension?: (input: ContextExtensionInput) => Readonly<Record<string, unknown>>;\n /** 清单额外校验。 */\n readonly manifestValidator?: (manifest: PluginManifest) => void;\n /** 权限策略。 */\n readonly permissionPolicy?: (input: PermissionPolicyInput) => PermissionPolicyResult;\n /** 启停配置。 */\n readonly configStore?: PluginConfigStore;\n /** 内存启停配置。 */\n readonly initialPluginConfig?: Readonly<Record<string, boolean>>;\n /** 外部启停控制面。 */\n readonly pluginIntentCoordinator?: PluginIntentCoordinator;\n /** 当前 Runtime 的 typed remote bridge。 */\n readonly capabilityBridge?: CapabilityBridge;\n /** 实现注册表。 */\n readonly runtimeUnitImplementationRegistry?: RuntimeUnitImplementationRegistry;\n /** 按 plugin/unit 提供当前 realm capability 定义。 */\n readonly capabilityDefinitions?: ReadonlyMap<string, readonly Capability[]>;\n /** Runtime 可用性检查。 */\n readonly runtimeUnitAvailability?: (input: RuntimeUnitAvailabilityInput) => string | undefined;\n /** 实例 Scope 属性。 */\n readonly runtimeUnitAttributes?: (input: RuntimeUnitAttributesInput) => Readonly<Record<string, unknown>> | undefined;\n /** 实例 Scope 父级。 */\n readonly runtimeUnitParentScope?: (input: RuntimeUnitParentScopeInput) => LifecycleScope | undefined;\n /** 贡献适配器。 */\n readonly contributionAdapters?: readonly ContributionAdapter[];\n /** 清理超时。 */\n readonly lifecycleCleanupTimeoutMs?: number;\n /** 外部 Runtime dependency 是否允许。 */\n readonly externalRuntimeDependencies?: boolean;\n}\n\ninterface ContributionRuntime {\n active: boolean;\n revoke(): void;\n dispose(): void | Promise<void>;\n}\n\ninterface PluginRecord {\n manifest: PluginManifest;\n state: PluginStateKind;\n error?: string;\n blockedBy?: string[];\n scope?: LifecycleScope;\n instanceId?: string;\n unitId?: string;\n teardown?: PluginTeardown;\n provided: Capability[];\n contributions: ContributionRuntime[];\n cleanup?: LifecycleDisposeResult;\n stopRequested?: string;\n}\n\nexport class StartupCapabilityError extends Error {\n readonly details: readonly StartupCapabilityErrorDetails[];\n constructor(details: readonly StartupCapabilityErrorDetails[], phase = \"startup\") {\n const labels = details.map((item) => typeof item.capability === \"string\" ? item.capability : item.capability.id);\n super(`Startup prerequisite unavailable during ${phase}${labels.length > 0 ? `: ${labels.join(\", \")}` : \"\"}`);\n this.name = \"StartupCapabilityError\";\n this.details = Object.freeze([...details]);\n }\n}\n\nexport class StartupPluginError extends Error {\n readonly details: { readonly pluginId: string; readonly unitId?: string; readonly capabilities: readonly CapabilityDescriptor[]; readonly state: PluginStateKind; readonly error?: string };\n constructor(details: { readonly pluginId: string; readonly unitId?: string; readonly capabilities: readonly CapabilityDescriptor[]; readonly state: PluginStateKind; readonly error?: string }) {\n super(`Startup plugin failed: ${details.pluginId}`);\n this.name = \"StartupPluginError\";\n this.details = Object.freeze({ ...details });\n }\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : typeof error === \"string\" ? error : String(error);\n}\n\nfunction makeId(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${prefix}:${crypto.randomUUID()}`;\n } catch { /* identity fallback */ }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction lifecycleStateFor(state: PluginStateKind, desired: boolean): PluginLifecycleState {\n switch (state) {\n case \"starting\": return \"starting\";\n case \"stopping\": return \"stopping\";\n case \"enabled\": return \"running\";\n case \"blocked\": return \"waiting\";\n case \"error-disabled\":\n case \"cleanup-pending\": return \"failed\";\n case \"disabled\": return \"disabled\";\n case \"registered\":\n case \"unknown\": return desired ? \"waiting\" : \"disabled\";\n }\n}\n\nfunction implementationKey(pluginId: string, unitId: string): string {\n return `${pluginId}\\u0000${unitId}`;\n}\n\nfunction isRemote(capability: Capability): capability is RemoteCapability {\n return capability.kind === \"rpc\" || capability.kind === \"stream\";\n}\n\nfunction mergeSignals(...signals: readonly (AbortSignal | undefined)[]): { readonly signal: AbortSignal; dispose(): void } {\n const active = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n const controller = new AbortController();\n const abort = (signal: AbortSignal): void => {\n try { controller.abort(signal.reason); } catch { controller.abort(); }\n };\n const listeners = active.map((signal) => {\n const listener = (): void => abort(signal);\n if (signal.aborted) abort(signal);\n else signal.addEventListener(\"abort\", listener, { once: true });\n return { signal, listener };\n });\n return {\n signal: controller.signal,\n dispose() { for (const item of listeners) item.signal.removeEventListener(\"abort\", item.listener); },\n };\n}\n\nfunction assertTimeout(value: number | undefined): number {\n const result = value ?? 30_000;\n if (!Number.isFinite(result) || result < 1 || result > 300_000) throw new TypeError(\"timeoutMs must be a finite number from 1 to 300000\");\n return result;\n}\n\nfunction rejectedStreamSubscription(error: WebLoomError): StreamSubscription<unknown> {\n let rejectReady!: (reason: unknown) => void;\n let rejectClosed!: (reason: unknown) => void;\n const ready = new Promise<void>((_, reject) => { rejectReady = reject; });\n const closed = new Promise<void>((_, reject) => { rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n rejectReady(error);\n rejectClosed(error);\n return { ready, closed, cancel() { /* terminal */ } };\n}\n\nfunction parseOrThrow<T>(parser: { parse(value: unknown): T }, value: unknown, code: \"request_validation_failed\" | \"response_validation_failed\", capability: CapabilityDescriptor): T {\n try { return parser.parse(value); } catch (error) {\n throw new WebLoomError(code, errorMessage(error), \"validate\", { capabilityId: capability.id });\n }\n}\n\nfunction safeDisposeResource(result: unknown): LifecycleDisposeResult {\n if (result && typeof result === \"object\" && \"state\" in result) return result as LifecycleDisposeResult;\n return { scopeId: \"unknown\", state: \"stopped\", attempted: 0, released: 0, pending: [], errors: [], cleanupIncomplete: false };\n}\n\n/** 创建 v4 Host。 */\nexport function createPluginHost(options: CreatePluginHostOptions = {}): PluginHost {\n // Keep the caller's Runtime choice separate from the public default used by\n // the small single-runtime convenience path. An explicitly described\n // single Worker unit must still be selectable when advanced assembly did\n // not pass `runtime`; silently filtering it as a Window unit is unsafe.\n const configuredRuntime = options.runtime;\n const runtimeKind = configuredRuntime ?? \"window-main\";\n const runtimeId = options.runtimeId ?? `${runtimeKind}:runtime`;\n const runtimeInstanceId = options.runtimeInstanceId ?? makeId(runtimeId);\n let capabilityBridge = options.capabilityBridge;\n let versionCounter = 0;\n let disposed = false;\n let disposePromise: Promise<LifecycleDisposeResult> | undefined;\n const listeners = new Set<HostListener>();\n const known = new Map<string, PluginManifest>();\n const records = new Map<string, PluginRecord>();\n const enabled = new Set<string>();\n const stateCache = new Map<string, { signature: string; state: PluginState }>();\n const publicClients = new Map<string, CapabilityClient<Capability>>();\n const configStore = options.configStore ?? createInMemoryPluginConfigStore(options.initialPluginConfig);\n const internalConfigWrites = new Set<string>();\n const starting = new Map<string, Promise<void>>();\n const stopping = new Map<string, Promise<void>>();\n let start: (pluginId: string) => Promise<void>;\n let intentSnapshot = options.pluginIntentCoordinator?.snapshot();\n\n const bump = (): void => {\n versionCounter += 1;\n for (const listener of [...listeners]) {\n try { listener({ version: versionCounter }); } catch { /* observers isolated */ }\n }\n };\n const rootScope = createLifecycleScope({ kind: \"root\", metadata: { attributes: Object.freeze({ ...(options.rootAttributes ?? {}), runtimeId, runtimeInstanceId }) }, onChange: bump });\n const messageBus = options.messageBus ?? createMessageBus();\n const resourceRegistry = options.resourceRegistry ?? createResourceRegistry();\n const capabilities = createCapabilityRegistry();\n capabilities.provide(RESOURCE_REGISTRY, resourceRegistry, \"host\", rootScope);\n const taskScheduler = createScopedTaskScheduler(rootScope);\n const resourceStore = createResourceStore(resourceRegistry, options.resourceCapabilityResolver ?? (() => undefined), (ownerId) => {\n const instance = ownerId ? records.get(ownerId)?.scope : undefined;\n return instance?.identity.attributes ?? rootScope.identity.attributes;\n });\n\n const addHostCapabilities = (source: CreatePluginHostOptions[\"capabilities\"]): void => {\n if (!source) return;\n let entries: readonly HostCapabilityRegistration[];\n if (Array.isArray(source)) entries = source as readonly HostCapabilityRegistration[];\n else {\n const map = source as ReadonlyMap<LocalCapability<unknown>, unknown>;\n entries = [...map.entries()].map(([capability, value]) => ({ capability, value }));\n }\n for (const item of entries) capabilities.provide(item.capability, item.value, \"host\", rootScope);\n };\n addHostCapabilities(options.capabilities);\n addHostCapabilities(options.builtinCapabilities);\n\n const manifestUnit = (manifest: PluginManifest): (RuntimeUnitDescriptor & { id: string; runtime: RuntimeKind }) | undefined => selectRuntimeUnit(manifest, configuredRuntime);\n const desired = (manifest: PluginManifest): boolean => {\n if (manifest.startup === \"required\" || manifest.canDisable === false) return true;\n if (intentSnapshot && Object.prototype.hasOwnProperty.call(intentSnapshot.desiredEnabled, manifest.id)) return intentSnapshot.desiredEnabled[manifest.id] === true;\n return configStore.read()[manifest.id] ?? manifest.defaultEnabled;\n };\n const desiredRevision = (pluginId: string): number | undefined => intentSnapshot?.desiredRevision[pluginId];\n const writeConfigIntent = (pluginId: string, value: boolean): void => {\n internalConfigWrites.add(pluginId);\n try { configStore.setEnabled(pluginId, value); }\n finally { internalConfigWrites.delete(pluginId); }\n };\n const initializeConfigIntent = (manifest: PluginManifest): void => {\n // The config store is the local product intent source when no Coordinator\n // is installed. Materialize defaults once so a subsequent disable has a\n // durable false value and diagnostics can distinguish absent from false.\n // A Coordinator remains authoritative for the intent itself.\n if (options.pluginIntentCoordinator) return;\n const current = configStore.read();\n if (required(manifest)) {\n if (current[manifest.id] !== true) writeConfigIntent(manifest.id, true);\n } else if (!Object.prototype.hasOwnProperty.call(current, manifest.id)) {\n writeConfigIntent(manifest.id, manifest.defaultEnabled);\n }\n };\n const definitionList = (pluginId: string, unitId: string): readonly Capability[] => {\n const fromRegistry = options.runtimeUnitImplementationRegistry?.getCapabilities?.(pluginId, unitId);\n if (fromRegistry) return fromRegistry;\n return options.capabilityDefinitions?.get(implementationKey(pluginId, unitId)) ?? [];\n };\n const capabilityFor = (record: PluginRecord, descriptor: CapabilityDescriptor): Capability | undefined => definitionList(record.manifest.id, record.unitId ?? descriptor.id).find((capability) => capabilityKey(capability) === capabilityKey(descriptor));\n\n const graph = (): PluginGraph => buildPluginGraph([...known.values()], { runtime: configuredRuntime, enabledPluginIds: enabled, externalRuntimeDependencies: options.externalRuntimeDependencies, builtinCapabilities: new Set(capabilities.descriptors()) });\n\n const unavailableReason = (manifest: PluginManifest): string | undefined => {\n const unit = manifestUnit(manifest);\n if (!unit) return manifest.units && manifest.units.length > 0 ? \"runtime_unit_ambiguous\" : undefined;\n return options.runtimeUnitAvailability?.({ pluginId: manifest.id, unitId: unit.id, runtime: unit.runtime });\n };\n\n const validateManifest = (manifest: PluginManifest): void => {\n if (!manifest || typeof manifest.id !== \"string\" || manifest.id.trim() === \"\") throw new TypeError(\"Plugin id must be a non-empty string\");\n if ((manifest.units?.length ?? 0) > 1 && configuredRuntime === undefined) {\n throw new Error(`Plugin \"${manifest.id}\" execution must be explicit for multi-unit manifests`);\n }\n options.manifestValidator?.(manifest);\n validatePluginGraph([manifest], { runtime: configuredRuntime, allowMissingDependencies: true });\n };\n\n const missingDependencies = (manifest: PluginManifest): readonly CapabilityDescriptor[] => {\n const unit = manifestUnit(manifest);\n if (!unit) return [];\n const localRuntime = unit.runtime;\n const current = graph();\n return (unit.dependencies ?? []).filter((dependency) => dependency.source !== \"peer\").filter((dependency) => {\n if (dependency.optional) return false;\n if (capabilities.has(dependency.capability as Capability)) return false;\n if ((current.providers[capabilityKey(dependency.capability)]?.length ?? 0) > 0) {\n const provider = current.providers[capabilityKey(dependency.capability)]?.[0];\n return provider === undefined || !enabled.has(provider);\n }\n if (dependency.sourceRuntime !== localRuntime && options.externalRuntimeDependencies) return false;\n return true;\n }).map((dependency) => dependency.capability);\n };\n\n const required = (manifest: PluginManifest): boolean => manifest.startup === \"required\" || manifest.canDisable === false;\n\n const createUnavailableRemoteClient = <C extends RemoteCapability>(capability: C, scope: LifecycleScope): CapabilityClient<C> => {\n if (capability.kind === \"rpc\") return {\n call(request: unknown, _options?: RpcCallOptions) {\n scope.assertActive();\n void request;\n return Promise.reject(new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is unavailable in the remote Runtime`, \"wait\", { capabilityId: capability.id }));\n },\n } as CapabilityClient<C>;\n return {\n subscribe(request: unknown, _options?: StreamSubscribeOptions<unknown>) {\n scope.assertActive();\n void request;\n return rejectedStreamSubscription(new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is unavailable in the remote Runtime`, \"wait\", { capabilityId: capability.id }));\n },\n } as CapabilityClient<C>;\n };\n\n const getRemoteClient = <C extends RemoteCapability>(capability: C, scope: LifecycleScope, forceRemote = false): CapabilityClient<C> => {\n if (!forceRemote && capabilities.has(capability)) {\n if (capability.kind === \"rpc\") return createLocalRpcClient(capability, scope) as unknown as CapabilityClient<C>;\n return createLocalStreamClient(capability, scope) as unknown as CapabilityClient<C>;\n }\n if (capabilityBridge) return capabilityBridge.getClient(capability, scope) as CapabilityClient<C>;\n if (forceRemote) return createUnavailableRemoteClient(capability, scope);\n if (capability.kind === \"rpc\") return createLocalRpcClient(capability, scope) as unknown as CapabilityClient<C>;\n return createLocalStreamClient(capability, scope) as unknown as CapabilityClient<C>;\n };\n\n const createLocalRpcClient = <C extends RpcCapabilityBase>(capability: C, scope: LifecycleScope): CapabilityClient<C> => {\n const client: { call(request: unknown, callOptions?: RpcCallOptions): Promise<unknown> } = {\n call(request, callOptions = {}) {\n scope.assertActive();\n const timeoutMs = assertTimeout(callOptions.timeoutMs);\n const timeoutController = new AbortController();\n const merged = mergeSignals(timeoutController.signal, scope.signal, callOptions.signal);\n const deadlineAt = Date.now() + timeoutMs;\n return new Promise<unknown>((resolve, reject) => {\n let settled = false;\n let timedOut = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const finish = (error?: unknown, value?: unknown): void => {\n if (settled) return;\n settled = true;\n if (timer !== undefined) clearTimeout(timer);\n merged.dispose();\n if (error !== undefined) reject(error); else resolve(value);\n };\n const entry = capabilities.registration(capability);\n if (!entry || entry.capability.kind !== \"rpc\") {\n finish(new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is not available`, \"wait\", { capabilityId: capability.id }));\n return;\n }\n const rpc = capability as C & { readonly response: { parse(value: unknown): unknown } };\n const context: HandlerCallContext = {\n signal: merged.signal,\n deadlineAt,\n ...(callOptions.operationId !== undefined ? { operationId: callOptions.operationId } : {}),\n reference: entry.reference,\n origin: \"local\",\n };\n timer = setTimeout(() => {\n timedOut = true;\n try { timeoutController.abort(new WebLoomError(\"call_timeout\", \"Capability call timed out\", \"execute\")); } catch { timeoutController.abort(); }\n finish(new WebLoomError(\"call_timeout\", \"Capability call timed out\", \"execute\", { capabilityId: capability.id, serviceInstanceId: entry.reference.serviceInstanceId }));\n }, timeoutMs);\n const onAbort = (): void => { if (!timedOut) finish(new WebLoomError(\"request_cancelled\", \"Capability call was cancelled\", \"dispose\", { capabilityId: capability.id })); };\n merged.signal.addEventListener(\"abort\", onAbort, { once: true });\n if (merged.signal.aborted) { onAbort(); return; }\n let invoke: unknown | Promise<unknown>;\n try { invoke = invokeCapabilityHandler(entry, request, context); }\n catch (error) { finish(error instanceof WebLoomError ? error : new WebLoomError(\"handler_failed\", errorMessage(error), \"execute\", { capabilityId: capability.id })); return; }\n Promise.resolve(invoke).then((value) => {\n if (settled) return;\n try { finish(undefined, rpc.response.parse(value)); }\n catch (error) { finish(new WebLoomError(\"response_validation_failed\", errorMessage(error), \"receive\", { capabilityId: capability.id })); }\n }, (error) => finish(error instanceof WebLoomError ? error : new WebLoomError(\"handler_failed\", errorMessage(error), \"execute\", { capabilityId: capability.id })));\n });\n },\n };\n return client as unknown as CapabilityClient<C>;\n };\n\n const createLocalStreamClient = <C extends StreamCapabilityBase>(capability: C, scope: LifecycleScope): CapabilityClient<C> => {\n const client = {\n subscribe(request: unknown, subscribeOptions: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> {\n scope.assertActive();\n const timeoutMs = assertTimeout(subscribeOptions.timeoutMs);\n const timeoutController = new AbortController();\n const merged = mergeSignals(timeoutController.signal, scope.signal, subscribeOptions.signal);\n let cancelled = false;\n let timedOut = false;\n let iterator: AsyncIterator<unknown> | undefined;\n let readyTimer: ReturnType<typeof setTimeout> | undefined;\n let iteratorReturnStarted = false;\n let readySettled = false;\n let closedSettled = false;\n let resolveReady!: () => void;\n let rejectReady!: (error: unknown) => void;\n let resolveClosed!: () => void;\n let rejectClosed!: (error: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => { resolveReady = resolve; rejectReady = reject; });\n const closed = new Promise<void>((resolve, reject) => { resolveClosed = resolve; rejectClosed = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n const settleReadyResolve = (): void => { if (!readySettled) { readySettled = true; resolveReady(); } };\n const settleReadyReject = (error: unknown): void => { if (!readySettled) { readySettled = true; rejectReady(error); } };\n const settleClosedResolve = (): void => { if (!closedSettled) { closedSettled = true; resolveClosed(); } };\n const settleClosedReject = (error: unknown): void => { if (!closedSettled) { closedSettled = true; rejectClosed(error); } };\n const closeIterator = (late?: AsyncIterator<unknown>): void => {\n const current = iterator ?? late;\n if (!current || iteratorReturnStarted) return;\n const close = current.return;\n if (!close) { iteratorReturnStarted = true; return; }\n iteratorReturnStarted = true;\n try { void Promise.resolve(close.call(current)).catch(() => undefined); } catch { /* iterator cleanup is best effort */ }\n };\n const terminate = (error: WebLoomError): void => {\n if (cancelled) return;\n cancelled = true;\n if (readyTimer !== undefined) clearTimeout(readyTimer);\n closeIterator();\n merged.dispose();\n settleReadyReject(error);\n settleClosedReject(error);\n };\n const cancel = (reason = \"stream cancelled\"): void => {\n const error = timedOut\n ? new WebLoomError(\"call_timeout\", \"Stream subscription timed out while opening\", \"wait\", { capabilityId: capability.id })\n : new WebLoomError(\"request_cancelled\", \"Stream subscription was cancelled\", \"dispose\", { capabilityId: capability.id });\n terminate(error);\n void reason;\n };\n merged.signal.addEventListener(\"abort\", () => cancel(\"stream cancelled\"), { once: true });\n const start = async (): Promise<void> => {\n try {\n const entry = capabilities.registration(capability);\n if (!entry || entry.capability.kind !== \"stream\") throw new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is not available`, \"wait\", { capabilityId: capability.id });\n const stream = capability as C & { readonly item: { parse(value: unknown): unknown } };\n const context: HandlerCallContext = { signal: merged.signal, deadlineAt: Date.now() + timeoutMs, reference: entry.reference, origin: \"local\" };\n readyTimer = setTimeout(() => {\n if (cancelled || readySettled) return;\n timedOut = true;\n try { timeoutController.abort(new WebLoomError(\"call_timeout\", \"Stream subscription timed out while opening\", \"wait\")); } catch { timeoutController.abort(); }\n terminate(new WebLoomError(\"call_timeout\", \"Stream subscription timed out while opening\", \"wait\", { capabilityId: capability.id }));\n }, timeoutMs);\n const iterable = await capabilities.openStream(capability, request, context);\n if (cancelled) {\n try { closeIterator(iterable[Symbol.asyncIterator]()); } catch { /* invalid late iterator */ }\n return;\n }\n iterator = iterable[Symbol.asyncIterator]();\n if (readyTimer !== undefined) clearTimeout(readyTimer);\n settleReadyResolve();\n while (!cancelled) {\n const next = await iterator.next();\n if (next.done) { cancelled = true; settleClosedResolve(); break; }\n if (cancelled) break;\n try {\n const item = stream.item.parse(next.value);\n await subscribeOptions.onNext(item);\n } catch {\n terminate(new WebLoomError(\"handler_failed\", \"Local stream consumer failed\", \"execute\", { capabilityId: capability.id }));\n break;\n }\n }\n } catch (error) {\n if (!cancelled) {\n const wrapped = error instanceof WebLoomError ? error : new WebLoomError(\"handler_failed\", \"Local stream operation failed\", \"execute\", { capabilityId: capability.id });\n terminate(wrapped);\n }\n } finally {\n merged.dispose();\n }\n };\n if (merged.signal.aborted) cancel(\"stream cancelled\");\n else void start();\n return { ready, closed, cancel };\n },\n };\n return client as unknown as CapabilityClient<C>;\n };\n\n /**\n * Synchronously fence an instance. The whole dependency cascade calls this\n * before any asynchronous cleanup starts; otherwise the first consumer that\n * finishes cleanup can observe a still-live provider and restart itself.\n */\n const beginStop = (record: PluginRecord, reason: string): boolean => {\n if (record.state !== \"enabled\" && record.state !== \"starting\" && record.state !== \"blocked\" && record.state !== \"error-disabled\") return false;\n record.stopRequested = reason;\n record.state = \"stopping\";\n record.scope?.revoke(reason);\n for (const contribution of record.contributions) {\n try { contribution.revoke(); } catch { /* synchronous fencing continues */ }\n }\n for (const capability of record.provided) capabilities.revoke(capability, record.instanceId);\n for (const capability of record.provided) publicClients.delete(capabilityKey(capability));\n enabled.delete(record.manifest.id);\n bump();\n return true;\n };\n\n const finishStop = async (record: PluginRecord, reason: string, preserveIntent: boolean): Promise<void> => {\n const scope = record.scope;\n const projectLateCleanup = (result?: LifecycleDisposeResult, error?: unknown): void => {\n if (result) record.cleanup = result;\n if (error !== undefined) {\n record.state = \"cleanup-pending\";\n record.error = errorMessage(error);\n bump();\n return;\n }\n if (!result || result.cleanupIncomplete || record.state !== \"cleanup-pending\") return;\n const currentDesired = desired(record.manifest);\n const missing = missingDependencies(record.manifest);\n const unavailable = unavailableReason(record.manifest);\n record.state = currentDesired && (missing.length > 0 || unavailable) ? \"blocked\" : \"disabled\";\n record.blockedBy = record.state === \"blocked\"\n ? [...new Set([...missing.map((item) => `missing:${item.kind}:${item.id}@${item.version}`), ...(unavailable ? [unavailable] : [])])]\n : undefined;\n record.error = undefined;\n bump();\n if (currentDesired && record.state === \"disabled\" && !disposed) {\n queueMicrotask(() => { void start(record.manifest.id).catch(() => undefined); });\n }\n };\n // A cleanup-pending record has already relinquished its Scope. Keep its\n // result intact until a later late-resource callback projects convergence;\n // disposing the Host must not turn that evidence into a false disabled\n // state.\n if (!scope && record.state === \"cleanup-pending\") return;\n const cleanup = scope\n ? await scope.dispose({\n reason,\n timeoutMs: options.lifecycleCleanupTimeoutMs,\n teardown: record.teardown,\n onLateSuccess: (_resourceId, result) => projectLateCleanup(result),\n onLateFailure: (_resourceId, error, result) => projectLateCleanup(result, error),\n })\n : undefined;\n if (cleanup) record.cleanup = cleanup;\n record.scope = undefined;\n record.provided = [];\n record.teardown = undefined;\n record.instanceId = undefined;\n record.unitId = undefined;\n record.stopRequested = undefined;\n record.contributions = [];\n\n const currentDesired = desired(record.manifest);\n const missing = missingDependencies(record.manifest);\n const unavailable = unavailableReason(record.manifest);\n const hasTimeout = Boolean(cleanup?.pending.length && cleanup.errors.some((item) => item.code === \"lifecycle.cleanup_timeout\"));\n const cleanupError = cleanup?.errors.find((item) => item.code !== \"lifecycle.cleanup_timeout\");\n if (hasTimeout) {\n record.state = \"cleanup-pending\";\n record.error = cleanupError?.message ?? \"Plugin cleanup is still pending\";\n } else if (cleanupError || cleanup?.cleanupIncomplete) {\n record.state = \"error-disabled\";\n record.error = cleanupError?.message ?? \"Plugin cleanup did not complete\";\n } else if (currentDesired && (missing.length > 0 || unavailable)) {\n record.state = \"blocked\";\n record.blockedBy = [\n ...new Set([\n ...missing.map((item) => `missing:${item.kind}:${item.id}@${item.version}`),\n ...(unavailable ? [unavailable] : []),\n ]),\n ];\n record.error = undefined;\n } else {\n record.state = \"disabled\";\n record.blockedBy = undefined;\n record.error = undefined;\n }\n // A provider-driven stop keeps the consumer's intent. An explicit stop\n // has already persisted false before this cleanup completes.\n // `preserveIntent` is intentionally represented by the config/coordinator\n // snapshot. The value is retained in the signature so all stop callers\n // state whether they are a provider-driven/suspend stop or an explicit\n // disable/host-dispose operation; the latest absolute intent is read below\n // after asynchronous cleanup, so a re-enable during stopping wins.\n void preserveIntent;\n bump();\n if (currentDesired && record.state === \"disabled\" && !disposed) {\n queueMicrotask(() => { void start(record.manifest.id).catch(() => undefined); });\n }\n };\n\n const stopAfterBegin = (record: PluginRecord, reason: string, preserveIntent: boolean): Promise<void> => {\n const existing = stopping.get(record.manifest.id);\n if (existing) return existing;\n if (record.state !== \"stopping\") return Promise.resolve();\n const startingTask = starting.get(record.manifest.id);\n const task = (startingTask ? startingTask.catch(() => undefined) : Promise.resolve())\n .then(() => finishStop(record, reason, preserveIntent))\n .finally(() => {\n if (stopping.get(record.manifest.id) === task) stopping.delete(record.manifest.id);\n });\n stopping.set(record.manifest.id, task);\n return task;\n };\n\n const stop = async (record: PluginRecord, reason: string, preserveIntent: boolean): Promise<void> => {\n const existing = stopping.get(record.manifest.id);\n if (existing) return existing;\n if (!beginStop(record, reason)) return;\n return stopAfterBegin(record, reason, preserveIntent);\n };\n\n const registerContribution = async (record: PluginRecord, unit: RuntimeUnitDescriptor & { id: string; runtime: RuntimeKind }, instanceId: string, scope: LifecycleScope): Promise<void> => {\n if (unit.contribution === undefined) return;\n for (const adapter of options.contributionAdapters ?? []) {\n const result = await adapter.register({ pluginId: record.manifest.id, unitId: unit.id, instanceId, scope, contribution: unit.contribution, manifest: record.manifest });\n if (!result) continue;\n const handle: ContributionHandle = typeof result === \"function\" ? { revoke: result } : result;\n let active = true;\n let disposePromise: Promise<void> | undefined;\n const runtime: ContributionRuntime = {\n get active() { return active; },\n revoke() { if (!active) return; active = false; handle.revoke?.(); },\n dispose() {\n if (disposePromise) return disposePromise;\n disposePromise = Promise.resolve(handle.dispose?.());\n // Scope disposal owns the rejection/timeout boundary; this catch is\n // only for the synchronous revoke path and never hides the result\n // from LifecycleScope.dispose().\n disposePromise.catch(() => undefined);\n return disposePromise;\n },\n };\n record.contributions.push(runtime);\n scope.onRevoke(() => runtime.revoke());\n scope.onDispose(() => runtime.dispose(), `contribution:${adapter.name ?? \"anonymous\"}`);\n }\n };\n\n const startImplementation = async (pluginId: string): Promise<void> => {\n const record = records.get(pluginId);\n if (!record) throw new Error(`Plugin \"${pluginId}\" is not registered`);\n if (record.state === \"enabled\") return;\n if (record.state === \"starting\") return;\n if (disposed) throw new LifecycleScopeRevokedError(\"Plugin host is disposed\");\n const unit = manifestUnit(record.manifest);\n if (!unit) { record.state = \"blocked\"; record.blockedBy = [\"runtime_unit_ambiguous\"]; bump(); return; }\n const unavailable = options.runtimeUnitAvailability?.({ pluginId, unitId: unit.id, runtime: unit.runtime });\n const missing = missingDependencies(record.manifest);\n if (unavailable || missing.length > 0) {\n record.state = \"blocked\";\n record.blockedBy = [...(unavailable ? [unavailable] : []), ...missing.map((item) => `missing:${item.kind}:${item.id}@${item.version}`)];\n bump();\n if (required(record.manifest)) throw new StartupCapabilityError(missing.map((capability) => ({ capability })), \"startup\");\n return;\n }\n const parent = options.runtimeUnitParentScope?.({ pluginId, unitId: unit.id, runtime: unit.runtime, manifest: record.manifest }) ?? rootScope;\n const attributes = cloneFrozenAttributes(options.runtimeUnitAttributes?.({ pluginId, unitId: unit.id, runtime: unit.runtime, manifest: record.manifest }));\n const scope = parent.child(\"runtime-unit\", { pluginId, attributes });\n // The Scope is the lifecycle identity authority. Reuse its generated\n // instance id everywhere instead of maintaining a second, divergent id\n // for the permission lease and capability registrations.\n const instanceId = scope.identity.instanceId;\n const permissions = [...(unit.permissions ?? [])];\n const policy = options.permissionPolicy?.({ pluginId, unitId: unit.id, identity: scope.identity, requested: permissions });\n const lease = createPermissionLease({ identity: scope.identity, requested: permissions, approved: policy?.approved ?? permissions, sessionConstraints: policy?.sessionConstraints, scope, ...policy?.binding });\n const grantedPermissions = permissions.filter((permission) =>\n (policy?.approved ?? permissions).includes(permission)\n && (policy?.sessionConstraints === undefined || policy.sessionConstraints.includes(permission))\n );\n const definitions = definitionList(pluginId, unit.id);\n record.state = \"starting\";\n record.scope = scope;\n record.instanceId = instanceId;\n record.unitId = unit.id;\n record.error = undefined;\n record.blockedBy = undefined;\n record.provided = [];\n bump();\n const localCapabilities = definitions.filter((capability) => capability.kind === \"local\");\n const declaredProvides = unit.provides ?? [];\n const declaredDependencies = unit.dependencies ?? [];\n const resolveCapability = <C extends Capability>(capability: C, optional: boolean): CapabilityClient<C> | undefined => {\n const descriptor = capabilityDescriptor(capability);\n const declared = [...declaredProvides, ...declaredDependencies.map((dependency) => dependency.capability)].some((item) => capabilityKey(item) === capabilityKey(descriptor));\n if (!declared) throw new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is not declared by plugin`, \"validate\", { capabilityId: capability.id });\n if (capability.kind === \"local\") {\n if (!capabilities.has(capability)) {\n if (optional) return undefined;\n throw new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is not available`, \"wait\", { capabilityId: capability.id });\n }\n return capabilities.get(capability) as CapabilityClient<C>;\n }\n const dependency = declaredDependencies.find((item) => capabilityKey(item.capability) === capabilityKey(descriptor));\n if (dependency?.source === \"peer\") {\n throw new WebLoomError(\"capability_unavailable\", `Capability \"${capability.id}\" is only available through call.peer`, \"dispatch\", { capabilityId: capability.id });\n }\n const remote = dependency?.sourceRuntime !== undefined && dependency.sourceRuntime !== unit.runtime;\n if (optional && remote && (!capabilityBridge || !capabilityBridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version))) return undefined;\n if (optional && !remote && !capabilities.has(capability)) return undefined;\n return getRemoteClient(capability, scope, remote) as unknown as CapabilityClient<C>;\n };\n const handle = <C extends RemoteCapability>(capability: C, handler: C extends RpcCapability<infer TRequest, infer TResponse> ? RpcHandler<RpcCapability<TRequest, TResponse>> : C extends StreamCapability<infer TRequest, infer TItem> ? StreamHandler<StreamCapability<TRequest, TItem>> : never): void => {\n if (scope.state !== \"active\") return;\n const descriptor = capabilityDescriptor(capability);\n if (!declaredProvides.some((item) => capabilityKey(item) === capabilityKey(descriptor))) throw new WebLoomError(\"capability_unavailable\", `Plugin \"${pluginId}\" cannot handle undeclared capability`, \"validate\", { capabilityId: capability.id });\n const reference: ServiceReference = Object.freeze({ kind: capability.kind, capabilityId: capability.id, contractVersion: capability.version, runtime: unit.runtime, runtimeInstanceId, serviceInstanceId: makeId(`service:${instanceId}:${capability.id}`), attributes });\n const peerDependencies = declaredDependencies.filter((dependency) => dependency.source === \"peer\").map((dependency) => dependency.capability);\n if (capability.kind === \"rpc\") capabilities.handle(capability as RpcCapabilityBase, handler as unknown as RpcHandler<RpcCapabilityBase>, instanceId, scope, reference, peerDependencies);\n else capabilities.stream(capability as StreamCapabilityBase, handler as unknown as StreamHandler<StreamCapabilityBase>, instanceId, scope, reference, peerDependencies);\n record.provided.push(capability);\n bump();\n };\n const provide = <C extends LocalCapability<unknown>>(capability: C, value: LocalServiceOf<C>): void => {\n if (scope.state !== \"active\") return;\n const descriptor = capabilityDescriptor(capability);\n if (!declaredProvides.some((item) => capabilityKey(item) === capabilityKey(descriptor))) throw new WebLoomError(\"capability_unavailable\", `Plugin \"${pluginId}\" cannot provide undeclared capability`, \"validate\", { capabilityId: capability.id });\n capabilities.provide(capability, value, instanceId, scope);\n record.provided.push(capability);\n bump();\n };\n const context: PluginContext = {\n pluginId,\n instanceId,\n unitId: unit.id,\n scope,\n signal: scope.signal,\n permissions: grantedPermissions,\n permissionLease: lease,\n taskScheduler,\n // Context extensions are realm-local host injection points. They may\n // intentionally contain live services (for example a logger or a\n // coordinator facade), so they are not wire attributes and must not be\n // forced through the DTO/structured-clone validator. The extension\n // callback remains the trust boundary; transport-visible attributes\n // continue to use cloneFrozenAttributes above and at exposure time.\n extension: options.contextExtension?.({ pluginId, unitId: unit.id, instanceId, scope, manifest: record.manifest }) ?? {},\n config: unit.config,\n onDispose(cleanup) { scope.onDispose(cleanup); },\n provide,\n handle,\n capability(capability) {\n return resolveCapability(capability, false) as never;\n },\n optionalCapability(capability) {\n return resolveCapability(capability, true) as never;\n },\n messageBus: createScopedMessageBus(messageBus, scope),\n };\n try {\n const setup = options.runtimeUnitImplementationRegistry?.get(pluginId, unit.id);\n if (!setup) throw new Error(`Runtime implementation is unavailable for ${pluginId}/${unit.id}`);\n const result = await (setup as PluginSetup)(context);\n record.teardown = typeof result === \"function\" ? result : undefined;\n await registerContribution(record, unit, instanceId, scope);\n if (required(record.manifest)) {\n for (const descriptor of declaredProvides) {\n if (!record.provided.some((capability) => capabilityKey(capability) === capabilityKey(descriptor))) throw new Error(`Plugin \"${pluginId}\" did not register declared capability \"${descriptor.id}@${descriptor.version}\"`);\n }\n }\n if (record.stopRequested || scope.state !== \"active\") {\n // The stop coordinator already fenced this generation. Calling stop\n // here would await the current start task and deadlock; its pending\n // stop promise will perform the cleanup after this task returns.\n return;\n }\n if (!desired(record.manifest)) {\n // The intent changed without a stop request racing this setup. Defer\n // the stop until the starting map no longer contains this task.\n queueMicrotask(() => { void stop(record, \"startup superseded\", false).catch(() => undefined); });\n return;\n }\n record.state = \"enabled\";\n enabled.add(pluginId);\n bump();\n } catch (error) {\n if (record.stopRequested || scope.state !== \"active\") {\n // A revoked generation is owned by stop(); setup errors from that\n // generation must never overwrite the newer lifecycle decision.\n return;\n }\n record.state = \"error-disabled\";\n record.error = errorMessage(error);\n scope.revoke(\"plugin setup failed\");\n for (const capability of record.provided) capabilities.revoke(capability, instanceId);\n record.provided = [];\n record.cleanup = await scope.dispose({ reason: \"plugin setup failed\", timeoutMs: options.lifecycleCleanupTimeoutMs });\n record.scope = undefined;\n record.instanceId = undefined;\n record.unitId = undefined;\n bump();\n if (required(record.manifest)) throw new StartupPluginError({ pluginId, unitId: unit.id, capabilities: declaredProvides, state: record.state, error: record.error });\n }\n };\n\n start = async (pluginId: string): Promise<void> => {\n const existingStop = stopping.get(pluginId);\n if (existingStop) await existingStop;\n const existing = starting.get(pluginId);\n if (existing) return existing;\n const task = startImplementation(pluginId);\n starting.set(pluginId, task);\n try {\n await task;\n } finally {\n if (starting.get(pluginId) === task) starting.delete(pluginId);\n }\n };\n\n let reconcilePromise: Promise<void> | undefined;\n let reconcileRequested = false;\n const runReconcile = async (): Promise<void> => {\n let progress = true;\n while (progress) {\n progress = false;\n\n // Fence every invalid active generation before awaiting any cleanup.\n // Calling stop() without awaiting first is deliberate: beginStop is\n // synchronous, so a dependency chain observes the complete revoked\n // set instead of restarting from a still-live provider.\n const stops: Promise<void>[] = [];\n for (const record of records.values()) {\n const wants = desired(record.manifest);\n const invalid = record.state === \"enabled\" || record.state === \"starting\"\n ? missingDependencies(record.manifest).length > 0 || unavailableReason(record.manifest) !== undefined\n : false;\n if ((!wants && (record.state === \"enabled\" || record.state === \"starting\" || record.state === \"blocked\")) || (wants && invalid)) {\n const before = record.state;\n stops.push(stop(record, wants ? \"runtime dependency unavailable\" : \"desired intent disabled\", wants));\n progress = progress || before !== record.state;\n }\n }\n if (stops.length > 0) await Promise.all(stops);\n\n for (const manifest of known.values()) {\n const record = records.get(manifest.id);\n if (!record || !desired(manifest)) continue;\n // Failed generations require an explicit retry. A cleanup-pending\n // generation likewise cannot be overlapped with a new instance.\n if (record.state !== \"registered\" && record.state !== \"disabled\" && record.state !== \"blocked\") continue;\n const before = record.state;\n await start(manifest.id);\n progress = progress || before !== record.state;\n }\n }\n };\n const reconcile = async (): Promise<void> => {\n if (disposed) return;\n if (reconcilePromise) {\n reconcileRequested = true;\n return reconcilePromise;\n }\n const task = (async () => {\n do {\n reconcileRequested = false;\n await runReconcile();\n } while (reconcileRequested && !disposed);\n })().finally(() => { reconcilePromise = undefined; });\n reconcilePromise = task;\n return task;\n };\n\n const submitIntent = async (pluginId: string, desiredEnabled: boolean): Promise<PluginIntentSubmissionResult> => {\n if (!known.has(pluginId)) throw new Error(`Plugin \"${pluginId}\" is not registered`);\n if (options.pluginIntentCoordinator) {\n const current = options.pluginIntentCoordinator.snapshot();\n return options.pluginIntentCoordinator.submit({\n commandId: makeId(`plugin-intent:${pluginId}`),\n authorityInstanceId: options.pluginIntentCoordinator.authorityInstanceId,\n expectedRevision: current.revision,\n pluginId,\n desiredEnabled,\n });\n }\n internalConfigWrites.add(pluginId);\n try { configStore.setEnabled(pluginId, desiredEnabled); }\n finally { internalConfigWrites.delete(pluginId); }\n return {\n status: \"accepted\",\n commandId: makeId(`plugin-intent:${pluginId}`),\n snapshot: { revision: 0, desiredEnabled: configStore.read(), desiredRevision: {} },\n persisted: true,\n };\n };\n\n const enable = async (pluginId: string): Promise<void> => {\n const result = await submitIntent(pluginId, true);\n if (result.status !== \"accepted\" && result.status !== \"duplicate\") {\n throw new Error(`Could not enable plugin \"${pluginId}\": ${result.status}`);\n }\n await reconcile();\n const record = records.get(pluginId);\n if (record?.state === \"cleanup-pending\") throw new Error(`Plugin \"${pluginId}\" cleanup is pending`);\n };\n\n const collectStopPlan = (pluginId: string): PluginRecord[] => {\n const current = graph();\n const result: PluginRecord[] = [];\n const visited = new Set<string>();\n const visitDependents = (providerId: string): void => {\n for (const dependent of reverseDependentsOf(current, providerId)) {\n if (visited.has(dependent.pluginId)) continue;\n const dependentRecord = records.get(dependent.pluginId);\n if (!dependentRecord) continue;\n visited.add(dependent.pluginId);\n visitDependents(dependent.pluginId);\n if (dependentRecord.state === \"enabled\" || dependentRecord.state === \"starting\" || dependentRecord.state === \"stopping\" || dependentRecord.state === \"blocked\" || dependentRecord.state === \"error-disabled\") result.push(dependentRecord);\n }\n };\n visitDependents(pluginId);\n const target = records.get(pluginId);\n if (target && (target.state === \"enabled\" || target.state === \"starting\" || target.state === \"stopping\" || target.state === \"blocked\" || target.state === \"error-disabled\")) result.push(target);\n return result;\n };\n\n const host: PluginHost = {\n capabilities,\n messageBus,\n resourceRegistry,\n resourceStore,\n rootScope,\n taskScheduler,\n runtimeKind,\n runtimeId,\n runtimeInstanceId,\n installed: () => [...known.keys()],\n manifests: () => [...known.keys()],\n state(pluginId) {\n const record = records.get(pluginId);\n const manifest = record?.manifest;\n const unit = manifest ? manifestUnit(manifest) : undefined;\n if (!record) {\n const cached = stateCache.get(pluginId);\n if (cached?.signature === \"unknown\") return cached.state;\n const unknownState: PluginState = { id: pluginId, kind: \"disabled\", lifecycleState: \"disabled\", desiredEnabled: false, units: [] };\n stateCache.set(pluginId, { signature: \"unknown\", state: unknownState });\n return unknownState;\n }\n const desiredEnabled = desired(record.manifest);\n const signature = JSON.stringify([record.state, record.error, record.blockedBy, record.instanceId, record.unitId, desiredEnabled, desiredRevision(record.manifest.id), record.cleanup]);\n const cached = stateCache.get(pluginId);\n if (cached?.signature === signature) return cached.state;\n const unitState: PluginUnitState[] = unit ? [{ pluginId, unitId: unit.id, runtime: unit.runtime, kind: record.state, ...(record.instanceId ? { instanceId: record.instanceId } : {}), ...(record.error ? { error: record.error } : {}) }] : [];\n const next: PluginState = { id: pluginId, kind: record.state, lifecycleState: lifecycleStateFor(record.state, desiredEnabled), ...(record.error ? { error: record.error } : {}), desiredEnabled, ...(desiredRevision(record.manifest.id) !== undefined ? { desiredRevision: desiredRevision(record.manifest.id) } : {}), ...(record.instanceId ? { instanceId: record.instanceId } : {}), ...(record.unitId ? { unitId: record.unitId } : {}), ...(record.blockedBy ? { blockedBy: [...record.blockedBy] } : {}), ...(record.cleanup ? { cleanup: record.cleanup } : {}), units: unitState };\n stateCache.set(pluginId, { signature, state: next });\n return next;\n },\n scope: (pluginId) => records.get(pluginId)?.scope,\n refreshRuntimeUnitSnapshots: bump,\n reconcile,\n graph,\n version: () => versionCounter,\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n getManifest: (pluginId) => known.get(pluginId),\n reverseDeps(pluginId) { return [...reverseDependentsOf(graph(), pluginId)]; },\n validateManifestSet(manifests) { for (const manifest of manifests) { options.manifestValidator?.(manifest); } validatePluginGraph(manifests, { runtime: configuredRuntime, builtinCapabilities: new Set(capabilities.descriptors()), externalRuntimeDependencies: options.externalRuntimeDependencies }); },\n provide<C extends LocalCapability<unknown>>(capability: C, value: LocalServiceOf<C>) { if (disposed) throw new LifecycleScopeRevokedError(\"Plugin host is disposed\"); capabilities.provide(capability, value, \"host\", rootScope); bump(); },\n register: async (manifest) => { if (disposed) throw new LifecycleScopeRevokedError(\"Plugin host is disposed\"); validateManifest(manifest); if (known.has(manifest.id)) throw new Error(`Plugin \"${manifest.id}\" is already registered`); known.set(manifest.id, manifest); records.set(manifest.id, { manifest, state: \"registered\", provided: [], contributions: [] }); initializeConfigIntent(manifest); bump(); await reconcile(); },\n registerAll: async (manifests) => { if (disposed) throw new LifecycleScopeRevokedError(\"Plugin host is disposed\"); validatePluginGraph(manifests, { runtime: configuredRuntime, builtinCapabilities: new Set(capabilities.descriptors()), externalRuntimeDependencies: options.externalRuntimeDependencies, allowMissingDependencies: true }); for (const manifest of manifests) { validateManifest(manifest); if (known.has(manifest.id)) throw new Error(`Plugin \"${manifest.id}\" is already registered`); } for (const manifest of manifests) { known.set(manifest.id, manifest); records.set(manifest.id, { manifest, state: \"registered\", provided: [], contributions: [] }); initializeConfigIntent(manifest); } bump(); await reconcile(); },\n enable,\n retry: async (pluginId) => { const record = records.get(pluginId); if (!record) throw new Error(`Plugin \"${pluginId}\" is not registered`); record.state = \"registered\"; record.error = undefined; await start(pluginId); },\n submitIntent: async (pluginId, desiredEnabled): Promise<PluginIntentSubmissionResult> => { const result = await submitIntent(pluginId, desiredEnabled); if (result.status === \"accepted\" || result.status === \"duplicate\") await reconcile(); return result; },\n disable: async (pluginId) => {\n const record = records.get(pluginId);\n if (!record) throw new Error(`Plugin \"${pluginId}\" is not registered`);\n if (required(record.manifest)) return { ok: false, reason: `Plugin \"${pluginId}\" cannot be disabled` } as const;\n if (options.pluginIntentCoordinator) {\n const result = await submitIntent(pluginId, false);\n if (result.status !== \"accepted\" && result.status !== \"duplicate\") return { ok: false, reason: `Could not disable plugin \"${pluginId}\": ${result.status}` } as const;\n } else {\n writeConfigIntent(pluginId, false);\n }\n const plan = collectStopPlan(pluginId);\n // First revoke the whole transitive plan synchronously. Only after all\n // providers and consumers are fenced do we await their cleanup.\n for (const item of plan) {\n const reason = item.manifest.id === pluginId ? \"plugin disabled\" : `dependency ${pluginId} disabled`;\n beginStop(item, reason);\n }\n await Promise.all(plan.map((item) => stopAfterBegin(item, item.manifest.id === pluginId ? \"plugin disabled\" : `dependency ${pluginId} disabled`, item.manifest.id !== pluginId)));\n return { ok: true } as const;\n },\n suspend: async (pluginId, reason = \"runtime identity changed\") => { const record = records.get(pluginId); if (record) await stop(record, reason, true); },\n unregister: async (pluginId) => { const record = records.get(pluginId); if (!record) return; if (required(record.manifest)) throw new Error(`Plugin \"${pluginId}\" cannot be unregistered`); await host.disable(pluginId); records.delete(pluginId); known.delete(pluginId); bump(); },\n dispose: (reason = \"plugin host disposed\") => { if (disposePromise) return disposePromise; disposed = true; disposePromise = (async () => { for (const record of [...records.values()].reverse()) await stop(record, reason, false); return rootScope.dispose({ reason, timeoutMs: options.lifecycleCleanupTimeoutMs }); })(); return disposePromise; },\n assertCapabilities(requiredCapabilities, extra = {}) {\n const details: StartupCapabilityErrorDetails[] = [];\n const current = graph();\n for (const capability of requiredCapabilities) {\n if (capabilities.has(capability as Capability)) continue;\n const descriptor = capabilityDescriptor(capability as Capability);\n const providerPluginId = current.providers[capabilityKey(descriptor)]?.[0];\n const provider = providerPluginId ? records.get(providerPluginId) : undefined;\n details.push({\n capability: descriptor,\n providerPluginId,\n providerState: provider?.state,\n providerError: provider?.error,\n configuredEnabled: provider ? desired(provider.manifest) : undefined,\n });\n }\n if (details.length > 0) throw new StartupCapabilityError(details, extra.phase);\n },\n serviceReferences() { return capabilities.registrations().filter((entry) => isRemote(entry.capability)).map((entry) => entry.reference); },\n capability<C extends Capability>(capability: C): CapabilityClient<C> {\n if (capability.kind === \"local\") return capabilities.get(capability) as CapabilityClient<C>;\n const key = capabilityKey(capability);\n const cached = publicClients.get(key);\n if (cached) return cached as CapabilityClient<C>;\n const client = getRemoteClient(capability, rootScope) as unknown as CapabilityClient<Capability>;\n publicClients.set(key, client);\n return client as CapabilityClient<C>;\n },\n optionalCapability<C extends Capability>(capability: C): CapabilityClient<C> | undefined {\n if (capability.kind === \"local\") return capabilities.has(capability) ? capabilities.get(capability) as CapabilityClient<C> : undefined;\n if (capabilityBridge && !capabilityBridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version) && !capabilities.has(capability)) return undefined;\n if (!capabilityBridge && !capabilities.has(capability)) return undefined;\n return host.capability(capability);\n },\n attachRemote(bridge) { capabilityBridge?.invalidate(\"Remote bridge replaced\"); capabilityBridge = bridge; bump(); },\n detachRemote(reason = \"Remote bridge detached\") { capabilityBridge?.invalidate(reason); capabilityBridge = undefined; bump(); },\n registerImplementation(implementation) {\n const registry = options.runtimeUnitImplementationRegistry as (RuntimeUnitImplementationRegistry & { register?: (implementation: { pluginId: string; unitId: string; setup: PluginSetup; capabilities?: readonly Capability[] }) => void }) | undefined;\n if (!registry?.register) throw new Error(\"This Host was not created with an advanced implementation registry\");\n registry.register(implementation);\n },\n inspect() { return { runtimeId, runtimeKind, runtimeInstanceId, version: versionCounter, pluginCount: known.size, peerCount: 0, pendingCallCount: 0, activeStreamCount: 0, plugins: [...known.keys()].sort().map((id) => host.state(id)) }; },\n explain(target) { const id = typeof target === \"string\" ? target : target.id; const record = records.get(id); if (!record) return { target: id, reasons: [\"unknown\"] }; const blocked = record.blockedBy ?? []; return { target: id, state: record.state, reasons: blocked.length > 0 ? blocked : record.error ? [record.error] : [] }; },\n };\n\n if (options.pluginIntentCoordinator) options.pluginIntentCoordinator.subscribe((snapshot) => { intentSnapshot = snapshot; void reconcile(); bump(); });\n configStore.subscribe((snapshot) => {\n // Required/immutable contracts cannot be disabled by stale or externally\n // edited local config. Normalize the durable value before reconciling so\n // the next bootstrap sees the same truth.\n if (internalConfigWrites.size === 0 && !options.pluginIntentCoordinator) {\n for (const record of records.values()) {\n if (required(record.manifest) && snapshot[record.manifest.id] !== true) writeConfigIntent(record.manifest.id, true);\n }\n }\n if (internalConfigWrites.size === 0) void reconcile();\n });\n return host;\n}\n\nexport interface HostInspection {\n /** Runtime 逻辑标识。 */\n readonly runtimeId: string;\n /** Runtime 类型。 */\n readonly runtimeKind: RuntimeKind;\n /** Runtime 启动实例。 */\n readonly runtimeInstanceId: string;\n /** Host 变化修订。 */\n readonly version: number;\n /** 已注册插件数。 */\n readonly pluginCount: number;\n /** 当前 peer 数;Host 本身不拥有远端 peer。 */\n readonly peerCount: number;\n /** 当前本地框架 pending 调用数。 */\n readonly pendingCallCount: number;\n /** 当前本地活动流数。 */\n readonly activeStreamCount: number;\n /** 插件状态。 */\n readonly plugins: readonly PluginState[];\n}\n\nexport interface PluginHost {\n /** v4 capability registry。 */\n readonly capabilities: CapabilityRegistry;\n /** 绑定到根 Scope 的 MessageBus。 */\n readonly messageBus: MessageBus;\n /** 资源定义注册表。 */\n readonly resourceRegistry: ResourceRegistry;\n /** 资源缓存 Store。 */\n readonly resourceStore: ResourceStoreApi;\n /** Host Runtime。 */\n readonly runtimeKind: RuntimeKind;\n /** Runtime 逻辑标识。 */\n readonly runtimeId: string;\n /** Runtime 启动实例。 */\n readonly runtimeInstanceId: string;\n /** 根 Scope。 */\n readonly rootScope: LifecycleScope;\n /** 根任务调度器。 */\n readonly taskScheduler: ScopedTaskScheduler;\n /** 已注册插件。 */\n installed(): string[];\n /** 已注册插件。 */\n manifests(): string[];\n /** 状态查询。 */\n state(pluginId: string): PluginState;\n /** 插件实例 Scope。 */\n scope(pluginId: string): LifecycleScope | undefined;\n /** 刷新 Host 观察修订。 */\n refreshRuntimeUnitSnapshots(): void;\n /** 协调启停。 */\n reconcile(): Promise<void>;\n /** 依赖图。 */\n graph(): PluginGraph;\n /** Host 观察修订。 */\n version(): number;\n /** Host 变化订阅。 */\n subscribe(listener: HostListener): () => void;\n /** manifest 查询。 */\n getManifest(pluginId: string): PluginManifest | undefined;\n /** 反向依赖查询。 */\n reverseDeps(pluginId: string): readonly PluginReverseDep[];\n /** manifest 集合校验。 */\n validateManifestSet(manifests: readonly PluginManifest[]): void;\n /** 显式 Host-owned local 注册。 */\n provide<C extends LocalCapability<unknown>>(capability: C, value: LocalServiceOf<C>): void;\n /** 注册插件。 */\n register(manifest: PluginManifest): Promise<void>;\n /** 批量注册插件。 */\n registerAll(manifests: readonly PluginManifest[]): Promise<void>;\n /** 启动插件。 */\n enable(pluginId: string): Promise<void>;\n /** 重试失败插件。 */\n retry(pluginId: string): Promise<void>;\n /** 提交启停意图。 */\n submitIntent(pluginId: string, desiredEnabled: boolean): Promise<PluginIntentSubmissionResult>;\n /** 停止插件及反向依赖者。 */\n disable(pluginId: string): Promise<{ ok: true } | { ok: false; reason: string }>;\n /** 撤销当前实例但保留启用意图。 */\n suspend(pluginId: string, reason?: string): Promise<void>;\n /** 删除插件。 */\n unregister(pluginId: string): Promise<void>;\n /** 释放 Host。 */\n dispose(reason?: string): Promise<LifecycleDisposeResult>;\n /** 启动前检查 local capability。 */\n assertCapabilities(required: readonly CapabilityDescriptor[], options?: { phase?: string }): void;\n /** 当前可调用的 remote service 引用。 */\n serviceReferences(): readonly ServiceReference[];\n /** advanced/WindowApp 使用的 typed capability 获取。 */\n capability<C extends Capability>(capability: C): CapabilityClient<C>;\n /** 当前已存在的 typed capability。 */\n optionalCapability<C extends Capability>(capability: C): CapabilityClient<C> | undefined;\n /** 绑定一个 SharedWorker remote bridge。 */\n attachRemote(bridge: CapabilityBridge): void;\n /** 撤销当前 remote bridge。 */\n detachRemote(reason?: string): void;\n /** advanced 分阶段注册当前 realm implementation。 */\n registerImplementation(implementation: { readonly pluginId: string; readonly unitId: string; readonly setup: PluginSetup; readonly capabilities?: readonly Capability[] }): void;\n /** 结构化诊断。 */\n inspect(): HostInspection;\n /** 解释插件或 capability。 */\n explain(target: string | CapabilityDescriptor): { readonly target: string; readonly state?: PluginStateKind; readonly reasons: readonly string[] };\n}\n","// 运行单元实现注册表。\n//\n// contracts 只描述 get() 契约;这里提供 Window / Worker 装配层可复用的\n// Map 实现。实现函数和产品静态描述分开保存,避免 manifest 被当成可执行目录。\n\nimport type { Capability } from \"../contracts/capability.js\";\nimport type { PluginSetup, RuntimeUnitImplementationRegistry } from \"../contracts/plugin.js\";\n\nexport interface RuntimeUnitImplementation {\n /** 产品标识。 */\n pluginId: string;\n /** 稳定运行单元标识。 */\n unitId: string;\n /** 当前环境的可执行入口。 */\n setup: PluginSetup;\n /** 当前 realm 的 typed capability 定义。 */\n capabilities?: readonly Capability[];\n}\n\nfunction implementationKey(pluginId: string, unitId: string): string {\n return `${pluginId}\\u0000${unitId}`;\n}\n\n/** 创建一个拒绝重复注册、按产品和单元查找实现的运行时注册表。 */\nexport function createRuntimeUnitImplementationRegistry(\n implementations: readonly RuntimeUnitImplementation[] = [],\n): RuntimeUnitImplementationRegistry & {\n register(implementation: RuntimeUnitImplementation): void;\n unregister(pluginId: string, unitId: string): void;\n} {\n const entries = new Map<string, RuntimeUnitImplementation>();\n const register = (implementation: RuntimeUnitImplementation): void => {\n const key = implementationKey(implementation.pluginId, implementation.unitId);\n if (entries.has(key)) throw new Error(`运行单元实现重复注册: ${implementation.pluginId}/${implementation.unitId}`);\n entries.set(key, { ...implementation, capabilities: implementation.capabilities ? Object.freeze([...implementation.capabilities]) : undefined });\n };\n for (const implementation of implementations) register(implementation);\n\n return {\n get(pluginId, unitId) {\n return entries.get(implementationKey(pluginId, unitId))?.setup;\n },\n getCapabilities(pluginId, unitId) {\n return entries.get(implementationKey(pluginId, unitId))?.capabilities;\n },\n register,\n unregister(pluginId, unitId) {\n entries.delete(implementationKey(pluginId, unitId));\n },\n };\n}\n","// Runtime 装配:把作者的 typed definition 绑定到一个真实 Runtime。\n// 静态 manifest 只含 descriptor;setup 仍然只存在于当前 realm。\n\nimport type { PluginDefinition } from \"../contracts/plugin.js\";\nimport type {\n PluginManifest,\n PluginSetup,\n RuntimeUnitDescriptor,\n RuntimeUnitDependency,\n} from \"../contracts/plugin.js\";\nimport type { Capability } from \"../contracts/capability.js\";\nimport type { RuntimeKind } from \"../contracts/lifecycle.js\";\n\n/** 可传给 Runtime 的 v4 插件定义;没有旧 manifest 字段或兼容签名。 */\nexport type RuntimePluginDefinition = {\n /** 静态 manifest。 */\n readonly manifest: PluginManifest;\n /** 当前 realm 的 setup 实现。 */\n readonly setup: PluginSetup;\n /** 当前 realm 的 typed capability 定义表。 */\n readonly capabilities?: readonly Capability[];\n /** 多 unit 定义中的实现目标。 */\n readonly unitId?: string;\n};\n\nexport interface MaterializedPluginDefinition {\n /** 当前 Runtime 可见的静态 manifest。 */\n readonly manifest: PluginManifest;\n /** setup 对应的单元。 */\n readonly unitId: string;\n /** 当前 realm 的 setup。 */\n readonly setup: PluginSetup;\n /** 当前 realm 的 capability 定义表。 */\n readonly capabilities: readonly Capability[];\n}\n\nfunction cloneDependencies(\n dependencies: readonly RuntimeUnitDependency[] | undefined,\n runtime: RuntimeKind,\n): readonly RuntimeUnitDependency[] | undefined {\n if (!dependencies) return undefined;\n return Object.freeze(dependencies.map((dependency) => {\n const base = {\n capability: Object.freeze({ ...dependency.capability }),\n ...(dependency.optional !== undefined ? { optional: dependency.optional } : {}),\n ...(dependency.reason !== undefined ? { reason: dependency.reason } : {}),\n };\n return Object.freeze(dependency.source === \"peer\"\n ? { ...base, source: \"peer\" as const }\n : { ...base, sourceRuntime: dependency.sourceRuntime ?? runtime });\n }));\n}\n\nfunction selectUnit(\n input: RuntimePluginDefinition,\n runtime: RuntimeKind,\n): RuntimeUnitDescriptor & { id: string; runtime: RuntimeKind } {\n const candidates = [...(input.manifest.units ?? [])];\n if (candidates.length === 0) return { id: input.manifest.id, runtime };\n const requested = input.unitId;\n if (requested !== undefined) {\n const unit = candidates.find((candidate) => candidate.id === requested);\n if (!unit) throw new Error(`Plugin \"${input.manifest.id}\" does not declare unit \"${requested}\"`);\n if (unit.runtime !== undefined && unit.runtime !== runtime) throw new Error(`Plugin \"${input.manifest.id}\" unit \"${requested}\" targets ${unit.runtime}, not ${runtime}`);\n return { ...unit, runtime };\n }\n const matches = candidates.filter((unit) => unit.runtime === undefined || unit.runtime === runtime);\n if (matches.length !== 1 || !matches[0]) throw new Error(`Plugin \"${input.manifest.id}\" has ${matches.length} implementation units for ${runtime}; specify unitId explicitly`);\n return { ...matches[0], runtime };\n}\n\n/** 将一个 definition 装配为单 Runtime 的唯一实现单元。 */\nexport function materializePluginDefinition(input: RuntimePluginDefinition, runtime: RuntimeKind): MaterializedPluginDefinition {\n if (!input || !input.manifest || typeof input.manifest.id !== \"string\" || input.manifest.id.trim() === \"\") throw new TypeError(\"Plugin manifest id must be a non-empty string\");\n if (typeof input.setup !== \"function\") throw new TypeError(`Plugin \"${input.manifest.id}\" setup must be a function`);\n const unit = selectUnit(input, runtime);\n const materializedUnit: RuntimeUnitDescriptor = Object.freeze({\n ...unit,\n runtime,\n ...(cloneDependencies(unit.dependencies, runtime) ? { dependencies: cloneDependencies(unit.dependencies, runtime) } : {}),\n ...(unit.provides ? { provides: Object.freeze(unit.provides.map((item) => Object.freeze({ ...item }))) } : {}),\n ...(unit.permissions ? { permissions: Object.freeze([...unit.permissions]) } : {}),\n });\n const manifest: PluginManifest = Object.freeze({\n id: input.manifest.id,\n name: input.manifest.name,\n ...(input.manifest.description !== undefined ? { description: input.manifest.description } : {}),\n startup: input.manifest.startup,\n defaultEnabled: input.manifest.defaultEnabled,\n canDisable: input.manifest.canDisable,\n units: Object.freeze([materializedUnit]),\n });\n const capabilities = Object.freeze([...(input.capabilities ?? [])]);\n return { manifest, unitId: unit.id, setup: input.setup, capabilities };\n}\n\nexport function materializePluginDefinitions(inputs: readonly RuntimePluginDefinition[], runtime: RuntimeKind): MaterializedPluginDefinition[] {\n return inputs.map((input) => materializePluginDefinition(input, runtime));\n}\n","import type { Capability, CapabilityClient, RemoteCapability } from \"../contracts/capability.js\";\nimport type { LifecycleDisposeResult, RuntimeDrainResult, RuntimeEndpointBinding, RuntimeEndpointState, RuntimeKind, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport type { PluginState } from \"../contracts/plugin.js\";\nimport type { PluginHost, HostInspection } from \"../host/createPluginHost.js\";\n\nexport type { RuntimeDrainResult } from \"../contracts/lifecycle.js\";\n\nexport type RuntimeAppState = RuntimeSnapshot[\"state\"] | \"disconnected\";\n\nexport interface RuntimeStatusSnapshot extends Omit<RuntimeSnapshot, \"protocolVersion\" | \"state\"> {\n /** 当前框架协议。 */\n readonly protocolVersion: string;\n /** Runtime 当前状态。 */\n readonly state: RuntimeAppState;\n /** 当前观察到的远端物理 endpoint binding;本地 WindowApp 不填写。 */\n readonly binding?: RuntimeEndpointBinding;\n /** 脱敏 Runtime 错误。 */\n readonly error?: string;\n /** 结构化运行错误码,例如 runtime_lock_conflict。 */\n readonly errorCode?: string;\n}\n\nexport type RuntimeStatusListener = (snapshot: RuntimeStatusSnapshot) => void;\n\nexport interface AppLike {\n /** Runtime 类型。 */\n readonly runtimeKind: RuntimeKind;\n /** Runtime 逻辑标识。 */\n readonly runtimeId: string;\n /** Runtime 启动实例。 */\n readonly runtimeInstanceId: string;\n /** 当前不可变状态。 */\n state(): RuntimeStatusSnapshot;\n /** 按插件读取稳定状态;RuntimeHandle 可能没有本地插件状态。 */\n pluginState?(pluginId: string): PluginState | undefined;\n /** 订阅状态。 */\n subscribe(listener: RuntimeStatusListener): () => void;\n /** 结构化诊断。 */\n inspect(): HostInspection | Readonly<Record<string, unknown>>;\n /** 释放本端资源。 */\n dispose(reason?: string): Promise<LifecycleDisposeResult | void>;\n}\n\nexport interface WindowApp extends AppLike {\n readonly runtimeKind: \"window-main\";\n /** 获取本地 typed capability。 */\n capability<C extends Capability>(capability: C): CapabilityClient<C>;\n /** 可选本地 typed capability。 */\n optionalCapability<C extends Capability>(capability: C): CapabilityClient<C> | undefined;\n}\n\nexport interface RuntimeHandle extends AppLike {\n readonly runtimeKind: \"shared-worker\";\n /** 当前 Window ↔ Worker 物理 endpoint 的不可复用框架 binding。 */\n readonly binding: RuntimeEndpointBinding;\n /** 当前物理连接生命周期;不等同于远端 Runtime state。 */\n readonly endpointState: RuntimeEndpointState;\n /** 获取远程 typed RPC/stream capability;代理构造不等待 Worker。 */\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C>;\n /** 当前已观察到的 remote capability。 */\n optionalCapability<C extends RemoteCapability>(capability: C): CapabilityClient<C> | undefined;\n /** 同步停止新调用与本端反向 handler admission。 */\n beginClose(reason?: string): void;\n /** 等待本端及远端框架执行槽的 bounded drain。 */\n drain(timeoutMs?: number): Promise<RuntimeDrainResult>;\n}\n\nexport class RuntimeInitializationError extends Error {\n readonly code = \"runtime_initialization_failed\" as const;\n readonly details: { readonly pluginId?: string; readonly unitId?: string; readonly phase: \"validate\" | \"register\" | \"startup\" | \"snapshot\"; readonly error: string };\n constructor(details: { readonly pluginId?: string; readonly unitId?: string; readonly phase: \"validate\" | \"register\" | \"startup\" | \"snapshot\"; readonly error: string }) {\n super(`Runtime initialization failed${details.pluginId ? ` for ${details.pluginId}` : \"\"} during ${details.phase}: ${details.error}`);\n this.name = \"RuntimeInitializationError\";\n this.details = Object.freeze({ ...details });\n }\n}\n\nexport class RuntimeUnavailableError extends Error {\n readonly code = \"transport_unavailable\" as const;\n constructor(message = \"Runtime is unavailable\") { super(message); this.name = \"RuntimeUnavailableError\"; }\n}\n","// Window Runtime 装配。\n\nimport type { Capability, CapabilityClient } from \"../contracts/capability.js\";\nimport { RUNTIME_PROTOCOL_VERSION } from \"./runtimeProtocol.js\";\nimport type { PluginManifest } from \"../contracts/plugin.js\";\nimport { createPluginHost, StartupPluginError, type CreatePluginHostOptions, type HostInspection, type PluginHost } from \"../host/createPluginHost.js\";\nimport { createRuntimeUnitImplementationRegistry } from \"../host/runtimeUnitImplementationRegistry.js\";\nimport type { LifecycleDisposeResult, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport type { RuntimePluginDefinition } from \"./pluginDefinitions.js\";\nimport { materializePluginDefinitions } from \"./pluginDefinitions.js\";\nimport { RuntimeInitializationError, RuntimeUnavailableError, type RuntimeStatusListener, type RuntimeStatusSnapshot, type WindowApp } from \"./runtimeTypes.js\";\nimport { cloneFrozenAttributes } from \"../transport/dto.js\";\n\nexport interface CreateWindowAppOptions extends Omit<CreatePluginHostOptions, \"runtime\" | \"runtimeUnitImplementationRegistry\" | \"runtimeInstanceId\" | \"runtimeId\" | \"capabilityBridge\"> {\n /** Window Runtime 逻辑标识。 */\n readonly id?: string;\n /** 当前 Window realm 的插件定义。 */\n readonly plugins: readonly RuntimePluginDefinition[];\n}\n\nexport interface CreateWindowAppFromHostOptions extends Omit<CreatePluginHostOptions, \"runtime\" | \"runtimeUnitImplementationRegistry\" | \"capabilityBridge\"> {\n /** Window Runtime 逻辑标识。 */\n readonly id?: string;\n /** 已创建且所有权转移给 App 的 v4 Host。 */\n readonly host: PluginHost;\n}\n\nconst appHosts = new WeakMap<object, PluginHost>();\nconst ownedHosts = new WeakSet<object>();\n\nfunction makeRuntimeInstanceId(runtimeId: string): string {\n try { if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${runtimeId}:${crypto.randomUUID()}`; } catch { /* fallback */ }\n return `${runtimeId}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n\nfunction snapshotFromHost(host: PluginHost, id: string, instanceId: string, state: RuntimeSnapshot[\"state\"] = \"ready\"): RuntimeStatusSnapshot {\n const units = host.installed().flatMap((pluginId) => host.state(pluginId).units.map((unit) => ({ pluginId: unit.pluginId, unitId: unit.unitId, runtime: unit.runtime, ...(unit.instanceId !== undefined ? { instanceId: unit.instanceId } : {}), state: unit.kind })));\n const services = state === \"ready\" ? host.serviceReferences().map((service) => ({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) })) : [];\n return Object.freeze({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: id, runtimeKind: \"window-main\", runtimeInstanceId: instanceId, revision: Math.max(1, host.version()), state, units: Object.freeze(units), services: Object.freeze(services) });\n}\n\nasync function createAppFromHost(id: string, instanceId: string, host: PluginHost): Promise<WindowApp> {\n if (ownedHosts.has(host as object)) throw new Error(\"This WebLoom Host is already owned by a WindowApp\");\n let current = snapshotFromHost(host, id, instanceId, \"starting\");\n let disposed = false;\n let disposePromise: Promise<LifecycleDisposeResult> | undefined;\n const listeners = new Set<RuntimeStatusListener>();\n const emit = (state?: RuntimeSnapshot[\"state\"]): void => {\n current = snapshotFromHost(host, id, instanceId, state ?? (disposed ? \"disposed\" : \"ready\"));\n for (const listener of [...listeners]) { try { listener(current); } catch { /* observers isolated */ } }\n };\n const removeHost = host.subscribe(() => emit());\n const app: WindowApp = {\n runtimeKind: \"window-main\",\n runtimeId: id,\n runtimeInstanceId: instanceId,\n state: () => current,\n pluginState: (pluginId) => host.state(pluginId),\n capability<C extends Capability>(capability: C): CapabilityClient<C> {\n if (disposed) throw new RuntimeUnavailableError(\"Window Runtime has been disposed\");\n return host.capability(capability);\n },\n optionalCapability<C extends Capability>(capability: C): CapabilityClient<C> | undefined {\n if (disposed) return undefined;\n return host.optionalCapability(capability);\n },\n inspect(): HostInspection { return host.inspect(); },\n subscribe(listener) { listeners.add(listener); listener(current); return () => listeners.delete(listener); },\n dispose(reason = \"window runtime disposed\") {\n if (disposePromise) return disposePromise;\n disposed = true;\n emit(\"stopping\");\n removeHost();\n disposePromise = host.dispose(reason).then((result) => { emit(\"disposed\"); return result; }, (error) => { emit(\"failed\"); throw error; });\n return disposePromise;\n },\n };\n appHosts.set(app as object, host);\n ownedHosts.add(host as object);\n emit(\"ready\");\n return app;\n}\n\n/** 创建当前 Window 的 v4 Runtime;本地插件启动完成后 resolve。 */\nexport async function createWindowApp(options: CreateWindowAppOptions): Promise<WindowApp> {\n const id = options.id ?? \"window-main\";\n const instanceId = makeRuntimeInstanceId(id);\n let materialized: ReturnType<typeof materializePluginDefinitions>;\n try { materialized = materializePluginDefinitions(options.plugins, \"window-main\"); }\n catch (error) { throw new RuntimeInitializationError({ phase: \"validate\", error: message(error) }); }\n const implementations = createRuntimeUnitImplementationRegistry(materialized.map((item) => ({ pluginId: item.manifest.id, unitId: item.unitId, setup: item.setup, capabilities: item.capabilities })));\n const { id: _id, plugins: _plugins, ...hostOptions } = options;\n const host = createPluginHost({ ...hostOptions, runtime: \"window-main\", runtimeId: id, runtimeInstanceId: instanceId, runtimeUnitImplementationRegistry: implementations });\n try {\n await host.registerAll(materialized.map((item) => item.manifest));\n } catch (error) {\n await host.dispose(\"window Runtime initialization failed\").catch(() => undefined);\n if (error instanceof StartupPluginError) throw new RuntimeInitializationError({ pluginId: error.details.pluginId, unitId: error.details.unitId, phase: \"startup\", error: error.details.error ?? error.message });\n throw new RuntimeInitializationError({ phase: \"startup\", error: message(error) });\n }\n return createAppFromHost(id, instanceId, host);\n}\n\n/** advanced:接管一个现有 v4 Host,不复制 Host。 */\nexport async function createWindowAppFromHost(options: CreateWindowAppFromHostOptions): Promise<WindowApp> {\n const id = options.id ?? options.host.runtimeId;\n if (options.host.runtimeKind !== \"window-main\") throw new TypeError(\"createWindowAppFromHost requires a window-main Host\");\n return createAppFromHost(id, options.host.runtimeInstanceId, options.host);\n}\n\n/** advanced 装配层查询 App 所拥有的 Host。 */\nexport function hostForWindowApp(app: WindowApp): PluginHost {\n const host = appHosts.get(app as object);\n if (!host) throw new Error(\"WindowApp is not owned by a WebLoom Host\");\n return host;\n}\n"]}
|