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/docs/api.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # WebLoom v4 API 说明
2
2
 
3
- WebLoom 0.4.1 只支持两个真实 JavaScript realm:`window-main` 和
3
+ WebLoom 0.4.3 只支持两个真实 JavaScript realm:`window-main` 和
4
4
  `shared-worker`。`runtime` 是受限的 `RuntimeKind`,不是可自由填写的环境标签;不支持
5
5
  的 Runtime 在装配边界 fail closed。
6
6
 
@@ -71,6 +71,33 @@ RPC/stream。`ctx.capability(C)` 和 `ctx.optionalCapability(C)` 的参数、返
71
71
 
72
72
  ## SharedWorker 与双向 peer
73
73
 
74
+ ### SharedWorker 运行锁
75
+
76
+ `startSharedWorkerApp()` 在插件注册前会向浏览器 `navigator.locks` 申请一把
77
+ 稳定的 exclusive(唯一)运行锁。锁名默认是
78
+ `webloom.runtime:<runtimeId>`;它不包含 buildId(构建标识)、版本号或 Worker
79
+ URL(脚本地址),所以两个都支持 Web Locks 的旧/新构建以及不同 URL 会竞争同一把锁。
80
+
81
+ 这里的“旧/新构建”不包括不认识 Web Locks 的旧包。例如 registry
82
+ `webloom-framework@0.4.2` 的 Worker 不会申请这把锁,`0.4.3` 不能通过
83
+ `LockManager` 发现一个仍存活的 `0.4.2` Worker。首次启用 Web Lock 必须先关闭所有
84
+ 旧页面并确认旧 Worker 已退出,再启动新版本;这属于部署冷切换,不是运行时自动接管。
85
+ 只有双方都已支持 Web Locks 的后续升级,才可以把下面的
86
+ `runtime_lock_conflict` 当作“请刷新或关闭全部页面”的冲突提示。
87
+
88
+ 锁属于浏览器的 LockManager(浏览器锁管理器),不写 `localStorage`、IndexedDB
89
+ 或 Local/S3 业务桶。`ifAvailable`(立即检查)语义意味着第二个物理 Worker
90
+ 不会等待或启动插件,而是收到 `runtime_lock_conflict`(运行锁冲突)错误:
91
+ “检测到另一个 WebLoom Runtime 正在运行。请刷新或关闭所有相关页面后重新打开。”
92
+ 应用可以通过 `runtimeLock.messages` 把“相关页面”替换为自己的产品名称;WebLoom
93
+ 核心不依赖具体业务。
94
+
95
+ 同一稳定 SharedWorker name(Worker 名称)的多个页面仍连接同一个物理 Worker,
96
+ 因此只申请一次锁。Worker 终止后浏览器自动释放锁;Web Locks 不可用时使用
97
+ `runtime_lock_unavailable`(运行锁不可用)安全失败,不能退化为 localStorage
98
+ 锁或无锁运行。`StartSharedWorkerAppOptions.runtimeLock.manager` 仅供测试注入,
99
+ 不是生产回退。
100
+
74
101
  Worker 入口:
75
102
 
76
103
  ```ts
@@ -526,7 +526,7 @@ Local 桶是 Window `localStorage`,不换 IndexedDB;先选择/导入桶,
526
526
 
527
527
  业务异步边界前后及最终写入前仍校验,同步 revoke 先于 drain。初始化事务仍先构建完整 Hold 候选,catalog/CAS 最后可见;恢复记录使用生产 parser。不得为通过 v4 测试放宽非法恢复状态。
528
528
 
529
- 旧页面/旧 Worker 与 v4 不混用业务调用。采用 build 隔离的 Worker 产物与名称,不共享旧 wire;新 Worker 不能因新名称就绕过 authority 接管。发现旧最终 I/O lease 未释放时仍进入 recovery-required,不能强抢或清空账本。
529
+ 旧页面/旧 Worker 与 v4 不混用业务调用。采用 build 隔离的 Worker 产物与名称,不共享旧 wire;新 Worker 不能因新名称就绕过运行唯一性。首次启用 Web Lock 时,旧版若不申请 Web Lock(例如 registry `0.4.2`)不会被新 Worker 自动发现,必须由部署门禁确认所有旧页面和旧 Worker 已退出后冷切换。只有新旧双方都申请同一稳定锁的后续升级,才用 `runtime_lock_conflict` 提示刷新;不能把它当成首次迁移检测。发现旧最终 I/O lease 未释放时仍进入 recovery-required,不能强抢或清空账本。
530
530
 
531
531
  产品可在断线后显式重建 Runtime/重开 session/重订阅;不自动重放已经发送的写入、签名或交易。响应丢失走已有 operation/transaction 查询或恢复流程。
532
532
 
@@ -3,9 +3,9 @@
3
3
  更新时间:2026-09-11(工作树验证)。本记录只写已经执行的命令和观察到的结果;
4
4
  未执行的跨浏览器、产品部署和 registry-only 验收不会由本地测试推断为通过。
5
5
 
6
- 用户已确认 `webloom-framework@0.4.0` 已发布。本轮针对同一 v4 wire 的 patch 版本
7
- `webloom-framework@0.4.1` 执行发布;发布后的 registry integrity 与消费验证将在上传后
8
- 补记。
6
+ `webloom-framework@0.4.1` 已发布到 npm。本轮发布的是同一 v4 wire 的 patch 版本;registry
7
+ 返回的 `dist.integrity`
8
+ `sha512-/sXro/by2FDq6ZehsOUnuYT8JwaaK3o6bn0uN/ZhtQBWd/7dlTbVcxZF+BlGJ/4dAhqhNOlUWXyGJ5Vk77IOLw==`。
9
9
 
10
10
  ## 1. WebLoom 本仓库
11
11
 
@@ -68,8 +68,9 @@ AT-16 的 `1/10/100 services × 1/2/10 peers` 测量在 `v4Acceptance.test.ts`
68
68
  service identity。
69
69
 
70
70
  Demo 的验证使用当前本地 WebLoom 工作树链接;这证明源码类型和真实浏览器交互,不替代
71
- registry-only frozen install。0.4.0 是上一轮已发布基线;本轮 0.4.1 registry-only
72
- 消费验证在发布后单独记录。
71
+ registry-only frozen install。Demo 已切换到 `0.4.1` 并在 frozen install 后完成类型、生产
72
+ 构建和真实 Chromium smoke;Keymaster 的 registry-only 四入口 consumer 也已从 npm
73
+ `0.4.1` 验证通过。
73
74
 
74
75
  ## 3. Keymaster
75
76
 
@@ -100,16 +101,30 @@ Local/S3 真实浏览器、CORS/CAS、重启、多 tab、恢复、app-view 外
100
101
 
101
102
  上一轮已实际完成 `webloom-framework@0.4.0` 的 registry integrity、Keymaster/Demo
102
103
  lockfile 一致性、release-boundary 和 registry-only consumer 验证;该版本是本轮的已发布
103
- 基线。本轮发布 `webloom-framework@0.4.1`,发布后必须从 registry 读取真实 `dist.integrity`
104
- 并单独执行三仓 frozen-install 消费验证,不能用本地 tarball 或下游 lockfile 代替。
104
+ 基线。本轮已发布 `webloom-framework@0.4.1`,并从 registry 读取上述真实 `dist.integrity`。
105
+ Keymaster Demo package 声明和 lockfile 均已切换到该版本;Keymaster
106
+ `pnpm lint:webloom-release`、`pnpm verify:webloom-registry` 以及两仓 frozen-install 验证
107
+ 均通过,不能用本地 tarball 代替这些证据。
105
108
 
106
- ## 5. 尚未关闭的跨环境验收
109
+ ## 5. Contract inventory CI
110
+
111
+ WebLoom 和 Keymaster 均新增 `.github/workflows/contract-inventory.yml`。workflow 使用
112
+ `actions/checkout` 的 `fetch-depth: 0`;PR 显式映射
113
+ `github.event.pull_request.base.sha`,main push 映射 `github.event.before`,然后执行
114
+ `pnpm test:types` 和 `pnpm run test:contract-inventory:ci`。job 名称固定为
115
+ `contract-inventory`,可作为仓库 required status check。
116
+
117
+ workflow 文件已落地并已在本地用显式历史 baseline 验证脚本通过;GitHub branch protection
118
+ 中将 `contract-inventory` 设为 required 的远端仓库设置,本轮无法从当前失效的 GitHub
119
+ 认证态读取或修改,因此该设置仍需在仓库管理面确认。
120
+
121
+ ## 6. 尚未关闭的跨环境验收
107
122
 
108
123
  - Firefox、真实 Safari、Playwright WebKit 的 module SharedWorker、双向 transfer 和 stream
109
124
  组合尚未执行。
110
125
  - Keymaster 的 app-view、Local/S3/CORS/CAS、重启/多 tab、恢复 ledger、不可逆 I/O 和部署
111
126
  生产门禁没有本轮完整外部证据。
112
127
 
113
- 因此当前结论是:本轮四类 review 代码阻塞已完成修复,WebLoom/Demo 的本地与 Chromium
114
- 证据已补齐,0.4.1 registry 发布与三仓消费验证待本轮上传后补记;跨浏览器与 Keymaster
115
- 产品/部署验收仍保持明确的未验收状态。
128
+ 因此当前结论是:核心代码修复、`0.4.1` 下游版本一致性、registry consumer inventory
129
+ workflow 已完成;GitHub required-check 远端设置仍待确认。跨浏览器与 Keymaster 产品/部署
130
+ 验收仍保持明确的未验收状态。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webloom-framework",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "通用前端插件生命周期框架",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/transport/serviceBridge.ts","../src/transport/messagePortServiceTransport.ts","../src/transport/messagePortServiceProvider.ts","../src/runtime/peerView.ts","../src/runtime/connectSharedWorker.ts"],"names":["active"],"mappings":"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","file":"chunk-ANA6GBEI.js","sourcesContent":["// WebLoom v4 typed capability bridge。\n//\n// 这里是唯一的远端 call/stream pending 实现。它负责本端的 deadline、代理\n// 身份 fence、有限 DTO/transfer 校验以及 stream 的消费状态机;MessagePort\n// provider 负责另一侧的 handler 执行状态机。\n\nimport type {\n CapabilityBridge,\n CapabilityClient,\n RemoteCapability,\n RpcCapabilityBase,\n RpcCallOptions,\n ServiceReference,\n StreamCapabilityBase,\n StreamSubscribeOptions,\n StreamSubscription,\n} from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope, type RuntimeKind, type RuntimeSnapshot, type SnapshotApplyResult } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n cloneFrozenAttributes,\n createReceivePortLedger,\n createRuntimeBudget,\n DEFAULT_RUNTIME_LIMITS,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n validateTransferListWithStats,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n createRuntimeMessageCodec,\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_ERROR_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n RUNTIME_SNAPSHOT_TYPE,\n type RuntimeErrorResponseMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\n\nexport interface RuntimeReceiveMetadata {\n /** 本次 MessageEvent 实际携带的业务 MessagePort;仅 transport 本地使用。 */\n readonly ports?: readonly MessagePort[];\n /** 由物理 endpoint transport 创建的一次性接收资源账本。 */\n readonly ledger?: ReceivePortLedger;\n /** 物理 endpoint 已完成一次 codec decode。 */\n readonly decoded?: boolean;\n}\n\nexport interface RuntimeTransport {\n /** 发送已验证 v4 message;transfer 由契约 extractor 提供。 */\n send(message: RuntimeWireMessage, transfer?: readonly Transferable[]): void;\n /** 订阅接收 message 及本次事件的本地 transfer 元数据。 */\n subscribe(listener: (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void): () => void;\n /** 关闭本端传输。 */\n close?(): void;\n /** 物理 endpoint 对 decode/接收账本错误的统一通知。 */\n subscribeError?(listener: (error: unknown, metadata?: RuntimeReceiveMetadata) => void): () => void;\n}\n\nexport interface CreateCapabilityBridgeOptions {\n /** 底层双向 transport。 */\n readonly transport: RuntimeTransport;\n /** 预期的对端 Runtime 类型。 */\n readonly remoteRuntimeKind?: RuntimeKind;\n /** 预期的对端逻辑 Runtime id。 */\n readonly remoteRuntimeId?: string;\n /** 默认调用预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 Runtime/advanced 装配提供的预算;只能收紧 v4 默认值。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ProxyRecord {\n readonly capability: RemoteCapability;\n readonly scope?: LifecycleScope;\n readonly cacheKey: string;\n bound?: ServiceReference;\n revoked: boolean;\n reason: string;\n}\n\ninterface QueueItem {\n readonly value: unknown;\n readonly ledger: ReceivePortLedger;\n readonly budgetBytes: number;\n}\n\ninterface QuotaReservation {\n readonly payloadBytes: number;\n pendingReserved: boolean;\n streamReserved: boolean;\n payloadReserved: boolean;\n}\n\ninterface WaitingCallRecord {\n readonly proxy: ProxyRecord;\n readonly prepared: { readonly value: unknown; readonly transfer: readonly Transferable[]; readonly budgetBytes: number };\n readonly reservation: QuotaReservation;\n readonly deadline: number;\n readonly mode: \"unary\" | \"stream\";\n fail: (error: unknown) => void;\n start: (reference: ServiceReference, remaining: number) => void;\n finished: boolean;\n timer?: ReturnType<typeof setTimeout>;\n removeListener?: () => void;\n}\n\ninterface CallbackExecutionRecord {\n readonly stream: PendingStream;\n readonly item: QueueItem;\n released: boolean;\n}\n\ninterface PendingBase {\n readonly callId: string;\n readonly capability: RemoteCapability;\n readonly reference: ServiceReference;\n readonly proxy: ProxyRecord;\n readonly controller: AbortController;\n readonly cleanup?: () => void;\n readonly reservation: QuotaReservation;\n readonly mode: \"unary\" | \"stream\";\n timer?: ReturnType<typeof setTimeout>;\n settled: boolean;\n cancelSent: boolean;\n}\n\ninterface PendingUnary extends PendingBase {\n readonly mode: \"unary\";\n resolve(value?: unknown): void;\n reject(error: unknown): void;\n}\n\ntype StreamState = \"opening\" | \"active\" | \"draining\" | \"closed\" | \"failed\";\n\ninterface PendingStream extends PendingBase {\n readonly mode: \"stream\";\n readonly onNext: (value: unknown) => void | Promise<void>;\n readonly itemParser: { parse(value: unknown): unknown };\n readonly window: number;\n readonly resolveReady: () => void;\n readonly rejectReady: (error: unknown) => void;\n readonly resolveClosed: () => void;\n readonly rejectClosed: (error: unknown) => void;\n credit: number;\n sequence: number;\n state: StreamState;\n doneReceived: boolean;\n processing: boolean;\n draining: boolean;\n readySettled: boolean;\n closedSettled: boolean;\n queue: QueueItem[];\n executionWaiterRemove?: () => void;\n}\n\ntype Pending = PendingUnary | PendingStream;\n\nfunction id(prefix: string): string {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") return `${prefix}:${crypto.randomUUID()}`;\n } catch { /* fallback */ }\n return `${prefix}:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}`;\n}\n\nfunction timeoutMs(value: number | undefined, fallback: number): number {\n const result = value ?? fallback;\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 mergeSignals(...signals: readonly (AbortSignal | undefined)[]): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController();\n const active = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n const listeners = active.map((signal) => {\n const listener = (): void => { try { controller.abort(signal.reason); } catch { controller.abort(); } };\n if (signal.aborted) listener(); else signal.addEventListener(\"abort\", listener, { once: true });\n return { signal, listener };\n });\n return { signal: controller.signal, dispose() { for (const item of listeners) item.signal.removeEventListener(\"abort\", item.listener); } };\n}\n\nfunction frameworkError(\n code: ConstructorParameters<typeof WebLoomError>[0],\n phase: ConstructorParameters<typeof WebLoomError>[2],\n context?: ConstructorParameters<typeof WebLoomError>[3],\n): WebLoomError {\n const text: Record<string, string> = {\n protocol_mismatch: \"Remote Runtime protocol is not supported\",\n capability_unavailable: \"Capability is unavailable\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out; remote side effect is unknown\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n service_stale: \"Capability exposure is stale\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_snapshot: \"Invalid Runtime snapshot\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return new WebLoomError(code, text[String(code)] ?? \"WebLoom operation failed\", phase, context);\n}\n\nfunction errorFromWire(message: RuntimeErrorResponseMessage): WebLoomError {\n return frameworkError(message.error.code, message.error.phase, { serviceInstanceId: message.serviceInstanceId });\n}\n\nfunction validCredit(value: number, maximum: number): boolean {\n return Number.isSafeInteger(value) && value >= 1 && value <= maximum;\n}\n\nfunction serviceMatches(reference: ServiceReference, capability: RemoteCapability): boolean {\n return reference.kind === capability.kind && reference.capabilityId === capability.id && reference.contractVersion === capability.version;\n}\n\nfunction serviceKey(service: Pick<ServiceReference, \"kind\" | \"capabilityId\" | \"contractVersion\">): string {\n return `${service.kind}\\u0000${service.capabilityId}\\u0000${service.contractVersion}`;\n}\n\nfunction contextFor(capability: RemoteCapability, reference?: ServiceReference): ConstructorParameters<typeof WebLoomError>[3] {\n return { capabilityId: capability.id, ...(reference ? { serviceInstanceId: reference.serviceInstanceId } : {}) };\n}\n\n/** 创建按 peer 绑定、可撤销且支持 typed stream 的 bridge。 */\nexport function createCapabilityBridge(options: CreateCapabilityBridgeOptions): CapabilityBridge & {\n readonly pendingCallCount: number;\n readonly activeStreamCount: number;\n readonly retainedPayloadBytes: number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const listeners = new Set<() => void>();\n const pending = new Map<string, Pending>();\n const streams = new Map<string, PendingStream>();\n const waitingCalls = new Set<WaitingCallRecord>();\n const callbackExecutions = new Set<CallbackExecutionRecord>();\n const proxies = new Map<string, ProxyRecord>();\n const clients = new Map<string, CapabilityClient<RemoteCapability>>();\n let pendingCount = 0;\n let peerRetainedPayloadBytes = 0;\n let currentState: CapabilityBridge[\"state\"] = \"empty\";\n let terminalFailure: WebLoomError | undefined;\n let remoteRuntimeId: string | undefined;\n let remoteRuntimeKind: RuntimeKind | undefined;\n let remoteRuntimeInstanceId: string | undefined;\n let revision = -1;\n let appliedSnapshotFingerprint: string | undefined;\n let currentServices: readonly ServiceReference[] = [];\n let disposed = false;\n let reservedStreamCount = 0;\n const defaultTimeout = timeoutMs(options.defaultCallTimeoutMs, 30_000);\n\n const emit = (): void => {\n for (const listener of [...listeners]) { try { listener(); } catch { /* observer isolation */ } }\n };\n\n const reserve = (payloadBytes: number, stream: boolean): QuotaReservation | WebLoomError => {\n if (pendingCount >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (stream && (reservedStreamCount >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n if (payloadBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - payloadBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - payloadBytes) return frameworkError(\"resource_limit_exceeded\", \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n peerRetainedPayloadBytes += payloadBytes;\n budget.retainedPayloadBytes += payloadBytes;\n pendingCount += 1;\n if (stream) reservedStreamCount += 1;\n return { payloadBytes, pendingReserved: true, streamReserved: stream, payloadReserved: true };\n };\n\n const releasePendingReservation = (reservation: QuotaReservation): void => {\n if (!reservation.pendingReserved) return;\n reservation.pendingReserved = false;\n pendingCount = Math.max(0, pendingCount - 1);\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const releaseStreamReservation = (reservation: QuotaReservation): void => {\n if (!reservation.streamReserved) return;\n reservation.streamReserved = false;\n reservedStreamCount = Math.max(0, reservedStreamCount - 1);\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePayloadReservation = (reservation: QuotaReservation): void => {\n if (!reservation.payloadReserved) return;\n reservation.payloadReserved = false;\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - reservation.payloadBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - reservation.payloadBytes);\n };\n\n const releaseReservation = (reservation: QuotaReservation): void => {\n releasePendingReservation(reservation);\n releaseStreamReservation(reservation);\n releasePayloadReservation(reservation);\n };\n\n const releaseCallbackExecution = (record: CallbackExecutionRecord): void => {\n if (record.released) return;\n record.released = true;\n callbackExecutions.delete(record);\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - record.item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - record.item.budgetBytes);\n budget.releaseExecutionSlot();\n emit();\n };\n\n const releaseQueueItem = (item: QueueItem): void => {\n item.ledger.closeUndelivered();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - item.budgetBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - item.budgetBytes);\n };\n\n const settleUnary = (entry: PendingUnary, error?: unknown, value?: unknown): void => {\n if (entry.settled) return;\n entry.settled = true;\n if (entry.timer !== undefined) clearTimeout(entry.timer);\n pending.delete(entry.callId);\n releaseReservation(entry.reservation);\n entry.cleanup?.();\n if (error !== undefined) entry.reject(error); else entry.resolve(value);\n emit();\n };\n\n const sendCancel = (entry: PendingBase): void => {\n if (entry.cancelSent) return;\n entry.cancelSent = true;\n try {\n options.transport.send({ type: RUNTIME_CANCEL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.callId, serviceInstanceId: entry.reference.serviceInstanceId });\n } catch { /* connection is already unavailable */ }\n try { entry.controller.abort(); } catch { /* noop */ }\n };\n\n const settleReadyReject = (stream: PendingStream, error: unknown): void => {\n if (stream.readySettled) return;\n stream.readySettled = true;\n stream.rejectReady(error);\n };\n\n const settleClosedReject = (stream: PendingStream, error: unknown): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.rejectClosed(error);\n };\n\n const settleClosedResolve = (stream: PendingStream): void => {\n if (stream.closedSettled) return;\n stream.closedSettled = true;\n stream.resolveClosed();\n };\n\n const forgetStream = (stream: PendingStream): void => {\n if (!stream.closedSettled || stream.processing || stream.queue.length > 0) return;\n streams.delete(stream.callId);\n };\n\n const finishDraining = (stream: PendingStream): void => {\n if (!stream.doneReceived || stream.processing || stream.queue.length > 0 || stream.closedSettled) return;\n stream.state = \"closed\";\n settleClosedResolve(stream);\n forgetStream(stream);\n emit();\n };\n\n const terminateStream = (stream: PendingStream, error: WebLoomError, notifyRemote: boolean): void => {\n if (stream.state === \"closed\" || stream.state === \"failed\") return;\n stream.state = \"failed\";\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n pending.delete(stream.callId);\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n releaseReservation(stream.reservation);\n // Even when the remote cancel cannot be sent (for example after a\n // transport error), the local handler-facing signal must be fenced.\n try { stream.controller.abort(error); } catch { /* already aborted */ }\n for (const item of stream.queue.splice(0)) releaseQueueItem(item);\n if (!stream.readySettled) settleReadyReject(stream, error);\n settleClosedReject(stream, error);\n stream.cleanup?.();\n if (notifyRemote) sendCancel(stream);\n forgetStream(stream);\n emit();\n };\n\n const errorWithTerminalCause = (cause: WebLoomError, capability: RemoteCapability, reference?: ServiceReference): WebLoomError => (\n new WebLoomError(cause.code, cause.message, cause.phase, { ...cause.context, ...contextFor(capability, reference) }, cause.details)\n );\n\n const revokeProxy = (proxy: ProxyRecord, reason: string, terminalCause?: WebLoomError): void => {\n if (proxy.revoked) return;\n proxy.revoked = true;\n proxy.reason = reason;\n if (proxies.get(proxy.cacheKey) === proxy) clients.delete(proxy.cacheKey);\n const affected = new Set<Pending>();\n for (const entry of pending.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of streams.values()) if (entry.proxy === proxy) affected.add(entry);\n for (const entry of affected) {\n if (entry.proxy !== proxy) continue;\n const error = terminalCause\n ? errorWithTerminalCause(terminalCause, entry.capability, entry.reference)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(entry.capability, entry.reference));\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, true);\n else {\n settleUnary(entry as PendingUnary, error);\n sendCancel(entry);\n }\n }\n for (const record of [...waitingCalls]) {\n if (record.proxy === proxy) record.fail(terminalCause\n ? errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound)\n : frameworkError(\"service_revoked\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n }\n };\n\n const findService = (capability: RemoteCapability): ServiceReference | undefined => currentServices.find((service) => serviceMatches(service, capability));\n\n const terminalError = (proxy: ProxyRecord, capability: RemoteCapability): WebLoomError | undefined => {\n if (terminalFailure && !disposed) return frameworkError(terminalFailure.code, terminalFailure.phase, contextFor(capability, proxy.bound));\n if (disposed || proxy.revoked) return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (currentState === \"stale\" || currentState === \"disposed\") return frameworkError(\"service_revoked\", \"dispatch\", contextFor(capability, proxy.bound));\n if (proxy.bound && !currentServices.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n return frameworkError(\"service_stale\", \"dispatch\", contextFor(capability, proxy.bound));\n }\n // Before the first ready snapshot a lazy proxy must remain waitable. Once\n // the peer has published a ready projection, however, an unbound\n // capability absent from that projection is not a timeout oracle: callers\n // must observe the same redacted unavailable result as a peer allowlist\n // denial. A proxy bound to a previously visible exposure still gets the\n // more specific stale result above.\n if (currentState === \"ready\" && !proxy.bound && !findService(capability)) {\n return frameworkError(\"capability_unavailable\", \"wait\", contextFor(capability));\n }\n return undefined;\n };\n\n const prepareRequest = (capability: RemoteCapability, request: unknown): { value: unknown; transfer: readonly Transferable[]; budgetBytes: number } => {\n validateRawDto(request, limits, \"validate\");\n const parser = capability as RemoteCapability & { request: { parse(value: unknown): unknown } };\n let parsed: unknown;\n try { parsed = parser.request.parse(request); } catch { throw frameworkError(\"request_validation_failed\", \"validate\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try {\n const descriptor = (capability as RemoteCapability & { transfer?: { request?: (value: unknown) => readonly Transferable[] } }).transfer;\n validation = validateTransferListWithStats(parsed, descriptor?.request?.(parsed), { limits, phase: \"validate\" });\n } catch (error) {\n if (error instanceof WebLoomError) throw error;\n throw frameworkError(\"transfer_invalid\", \"validate\", contextFor(capability));\n }\n return { value: parsed, transfer: validation.transfer, budgetBytes: validation.stats.budgetBytes };\n };\n\n const prepareIncoming = (capability: RemoteCapability, value: unknown, direction: \"response\" | \"item\", ledger: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[]; stats: ReturnType<typeof validateDto> } => {\n try { validateRawDto(value, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n const parser = capability as RemoteCapability & { response?: { parse(value: unknown): unknown }; item?: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[]; item?: (value: unknown) => readonly Transferable[] } };\n let parsed: unknown;\n try {\n const selected = direction === \"response\" ? parser.response : parser.item;\n if (!selected) throw new Error(\"parser unavailable\");\n parsed = selected.parse(value);\n } catch { ledger.closeUndelivered(); throw frameworkError(\"response_validation_failed\", \"receive\", contextFor(capability)); }\n let validation: ReturnType<typeof validateTransferListWithStats>;\n try { validation = validateTransferListWithStats(parsed, parser.transfer?.[direction]?.(parsed), { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error instanceof WebLoomError ? error : frameworkError(\"transfer_invalid\", \"receive\", contextFor(capability)); }\n try { assertReceivedPortSet(ledger, validation.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n return { value: parsed, transfer: validation.transfer, stats: validation.stats };\n };\n\n const sendWire = (message: RuntimeWireMessage, transfer: readonly Transferable[] = []): void => {\n const encoded = codec.encode(message);\n options.transport.send(encoded, transfer);\n };\n\n const startUnary = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, callOptions: RpcCallOptions, timeout: number, existingReservation?: QuotaReservation): Promise<unknown> => {\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, false);\n if (reservation instanceof WebLoomError) return Promise.reject(reservation);\n const controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, callOptions.signal);\n const callId = id(\"call\");\n return new Promise<unknown>((resolve, reject) => {\n const entry: PendingUnary = { callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false, mode: \"unary\", resolve, reject };\n pending.set(callId, entry);\n const onAbort = (): void => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n };\n merged.signal.addEventListener(\"abort\", onAbort, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.settled) return;\n settleUnary(entry, frameworkError(\"call_timeout\", \"receive\", contextFor(entry.capability, reference)));\n sendCancel(entry);\n }, timeout);\n if (merged.signal.aborted) { onAbort(); return; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"unary\", timeoutMs: timeout, request: prepared.value, ...(callOptions.operationId !== undefined ? { operationId: callOptions.operationId } : {}) }, prepared.transfer);\n } catch {\n settleUnary(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)));\n }\n });\n };\n\n const waitForService = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, callOptions: RpcCallOptions): Promise<unknown> => {\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, false);\n if (reserved instanceof WebLoomError) return Promise.reject(reserved);\n return new Promise<unknown>((resolve, reject) => {\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"unary\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); callOptions.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n releaseReservation(record.reservation);\n reject(error);\n };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n void startUnary(proxy, prepared, reference, callOptions, remaining, record.reservation).then(resolve, reject);\n };\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (callOptions.signal) {\n if (callOptions.signal.aborted) { onAbort(); return; }\n callOptions.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n });\n };\n\n const call = (proxy: ProxyRecord, request: unknown, callOptions: RpcCallOptions): Promise<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return Promise.reject(unavailable);\n const timeout = timeoutMs(callOptions.timeoutMs, defaultTimeout);\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return Promise.reject(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForService(proxy, prepared, callOptions);\n if (!proxy.bound) proxy.bound = reference;\n return startUnary(proxy, prepared, reference, callOptions, timeout);\n };\n\n const createRejectedSubscription = (error: WebLoomError): StreamSubscription<unknown> => {\n let readyReject!: (reason: unknown) => void;\n let closedReject!: (reason: unknown) => void;\n const ready = new Promise<void>((_, reject) => { readyReject = reject; });\n const closed = new Promise<void>((_, reject) => { closedReject = reject; });\n void ready.catch(() => undefined);\n void closed.catch(() => undefined);\n readyReject(error);\n closedReject(error);\n return { ready, closed, cancel() { /* terminal */ } };\n };\n\n const startStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, reference: ServiceReference, optionsForSubscribe: StreamSubscribeOptions<unknown>, timeout: number, existingReservation?: QuotaReservation): StreamSubscription<unknown> => {\n const maximumCredit = Math.min(256, limits.maxStreamCredit);\n const window = optionsForSubscribe.initialCredit ?? 16;\n if (!validCredit(window, maximumCredit)) {\n if (existingReservation) releaseReservation(existingReservation);\n return createRejectedSubscription(frameworkError(\"stream_overflow\", \"validate\", contextFor(proxy.capability, reference)));\n }\n const reservation = existingReservation ?? reserve(prepared.budgetBytes, true);\n if (reservation instanceof WebLoomError) return createRejectedSubscription(reservation);\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 controller = new AbortController();\n const merged = mergeSignals(controller.signal, proxy.scope?.signal, optionsForSubscribe.signal);\n const callId = id(\"stream\");\n const entry: PendingStream = {\n callId, capability: proxy.capability, reference, proxy, controller, cleanup: merged.dispose, reservation, timer: undefined, settled: false, cancelSent: false,\n mode: \"stream\", onNext: optionsForSubscribe.onNext, itemParser: (proxy.capability as StreamCapabilityBase & { item: { parse(value: unknown): unknown } }).item,\n window, credit: window, sequence: 1, state: \"opening\", doneReceived: false, processing: false, draining: false, readySettled: false, closedSettled: false, queue: [],\n resolveReady, rejectReady, resolveClosed, rejectClosed,\n };\n streams.set(callId, entry);\n pending.set(callId, entry);\n const cancel = (): void => {\n if (entry.state === \"closed\" || entry.state === \"failed\") return;\n terminateStream(entry, frameworkError(\"request_cancelled\", \"dispose\", contextFor(entry.capability, reference)), true);\n };\n merged.signal.addEventListener(\"abort\", cancel, { once: true });\n entry.timer = setTimeout(() => {\n if (entry.state !== \"opening\") return;\n terminateStream(entry, frameworkError(\"call_timeout\", \"wait\", contextFor(entry.capability, reference)), true);\n }, timeout);\n if (merged.signal.aborted) { cancel(); return { ready, closed, cancel }; }\n try {\n sendWire({ type: RUNTIME_CALL_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId, capabilityId: entry.capability.id, contractVersion: entry.capability.version, serviceInstanceId: reference.serviceInstanceId, mode: \"stream\", timeoutMs: timeout, request: prepared.value, initialCredit: window, ...(optionsForSubscribe.operationId !== undefined ? { operationId: optionsForSubscribe.operationId } : {}) }, prepared.transfer);\n } catch {\n terminateStream(entry, frameworkError(\"request_clone_failed\", \"dispatch\", contextFor(entry.capability, reference)), false);\n }\n return { ready, closed, cancel };\n };\n\n const waitForStream = (proxy: ProxyRecord, prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number }, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const timeout = timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout);\n const deadline = Date.now() + timeout;\n const reserved = reserve(prepared.budgetBytes, true);\n if (reserved instanceof WebLoomError) return createRejectedSubscription(reserved);\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 let active: StreamSubscription<unknown> | undefined;\n const record: WaitingCallRecord = {\n proxy,\n prepared,\n reservation: reserved,\n deadline,\n mode: \"stream\",\n finished: false,\n fail: () => undefined,\n start: () => undefined,\n };\n const cleanup = (): void => { if (record.timer !== undefined) clearTimeout(record.timer); record.removeListener?.(); optionsForSubscribe.signal?.removeEventListener(\"abort\", onAbort); waitingCalls.delete(record); };\n record.fail = (error: unknown): void => { if (record.finished) return; record.finished = true; cleanup(); releaseReservation(record.reservation); rejectReady(error); rejectClosed(error); };\n record.start = (reference: ServiceReference, remaining: number): void => {\n if (record.finished) return;\n record.finished = true;\n cleanup();\n if (!proxy.bound) proxy.bound = reference;\n active = startStream(proxy, prepared, reference, optionsForSubscribe, remaining, record.reservation);\n active.ready.then(resolveReady, rejectReady);\n active.closed.then(resolveClosed, rejectClosed);\n };\n const onAbort = (): void => record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability)));\n const check = (): void => {\n if (record.finished) return;\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) { record.fail(unavailable); return; }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) { record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))); return; }\n record.start(reference, remaining);\n };\n record.timer = setTimeout(() => record.fail(frameworkError(\"call_timeout\", \"wait\", contextFor(proxy.capability))), timeout);\n if (optionsForSubscribe.signal) {\n if (optionsForSubscribe.signal.aborted) { onAbort(); return { ready, closed, cancel() { /* terminal */ } }; }\n optionsForSubscribe.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n listeners.add(check);\n record.removeListener = () => listeners.delete(check);\n waitingCalls.add(record);\n check();\n return { ready, closed, cancel(reason = \"stream cancelled\") { void reason; if (active) active.cancel(reason); else record.fail(frameworkError(\"request_cancelled\", \"dispose\", contextFor(proxy.capability))); } };\n };\n\n const subscribe = (proxy: ProxyRecord, request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>): StreamSubscription<unknown> => {\n const unavailable = terminalError(proxy, proxy.capability);\n if (unavailable) return createRejectedSubscription(unavailable);\n if (typeof optionsForSubscribe.onNext !== \"function\") return createRejectedSubscription(frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability)));\n let prepared: { value: unknown; transfer: readonly Transferable[]; budgetBytes: number };\n try { prepared = prepareRequest(proxy.capability, request); }\n catch (error) { return createRejectedSubscription(error instanceof WebLoomError ? error : frameworkError(\"request_validation_failed\", \"validate\", contextFor(proxy.capability))); }\n const reference = proxy.bound ?? findService(proxy.capability);\n if (!reference) return waitForStream(proxy, prepared, optionsForSubscribe);\n if (!proxy.bound) proxy.bound = reference;\n return startStream(proxy, prepared, reference, optionsForSubscribe, timeoutMs(optionsForSubscribe.timeoutMs, defaultTimeout));\n };\n\n let drainStream: (stream: PendingStream) => void;\n const waitForExecutionSlot = (stream: PendingStream): void => {\n if (stream.executionWaiterRemove || stream.state === \"failed\" || stream.state === \"closed\" || stream.queue.length === 0) return;\n stream.executionWaiterRemove = budget.registerExecutionWaiter(() => {\n stream.executionWaiterRemove = undefined;\n drainStream(stream);\n });\n };\n drainStream = (stream: PendingStream): void => {\n if (stream.draining) return;\n stream.draining = true;\n void (async () => {\n try {\n while (stream.queue.length > 0) {\n if (stream.state === \"failed\" || stream.state === \"closed\") break;\n const item = stream.queue.shift();\n if (!item) break;\n if (callbackExecutions.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) {\n stream.queue.unshift(item);\n waitForExecutionSlot(stream);\n break;\n }\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n const execution: CallbackExecutionRecord = { stream, item, released: false };\n callbackExecutions.add(execution);\n budget.executionSlots += 1;\n stream.processing = true;\n try {\n // MessagePort resources become handler-owned immediately before\n // invoking user code. The byte reservation remains attached to the\n // execution record until that callback settles.\n item.ledger.handoff();\n await stream.onNext(item.value);\n if (stream.state === \"active\" && !stream.doneReceived) {\n stream.credit += 1;\n try { sendWire({ type: RUNTIME_CREDIT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: stream.callId, serviceInstanceId: stream.reference.serviceInstanceId, count: 1 }); }\n catch { terminateStream(stream, frameworkError(\"transport_unavailable\", \"dispatch\", contextFor(stream.capability, stream.reference)), true); break; }\n }\n } catch {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n break;\n } finally {\n stream.processing = false;\n releaseCallbackExecution(execution);\n }\n }\n } finally {\n stream.processing = false;\n stream.draining = false;\n if (stream.queue.length === 0 || stream.state === \"failed\" || stream.state === \"closed\") {\n stream.executionWaiterRemove?.();\n stream.executionWaiterRemove = undefined;\n } else {\n // The loop can stop with an item retained because the shared budget\n // is full. Keep that FIFO waiter registered after this drain task\n // yields; otherwise no later slot release would revisit this stream.\n waitForExecutionSlot(stream);\n }\n finishDraining(stream);\n forgetStream(stream);\n }\n })().catch(() => {\n terminateStream(stream, frameworkError(\"handler_failed\", \"execute\", contextFor(stream.capability, stream.reference)), true);\n });\n };\n\n const invalidate = (reason = \"remote service directory replaced\", terminalCause?: WebLoomError): void => {\n // A terminal protocol/transport failure is the cause observed by every\n // affected request. Settle it before revoking proxies, otherwise the proxy\n // fence would replace the useful protocol error with service_revoked.\n if (terminalCause) {\n for (const record of [...waitingCalls]) record.fail(errorWithTerminalCause(terminalCause, record.proxy.capability, record.proxy.bound));\n for (const entry of [...pending.values()]) {\n const error = errorWithTerminalCause(terminalCause, entry.capability, entry.reference);\n if (entry.mode === \"stream\") terminateStream(entry, error, true);\n else settleUnary(entry, error);\n }\n }\n for (const proxy of proxies.values()) revokeProxy(proxy, reason, terminalCause);\n if (!terminalCause) for (const record of [...waitingCalls]) record.fail(frameworkError(\"service_stale\", \"dispose\", contextFor(record.proxy.capability, record.proxy.bound)));\n clients.clear();\n if (!terminalCause) for (const entry of [...pending.values()]) {\n if (entry.mode === \"stream\") terminateStream(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)), true);\n else settleUnary(entry, frameworkError(\"service_stale\", \"dispose\", contextFor(entry.capability, entry.reference)));\n }\n currentServices = [];\n currentState = disposed ? \"disposed\" : \"stale\";\n emit();\n };\n\n const failClose = (reason: string, code: \"protocol_mismatch\" | \"invalid_snapshot\" | \"invalid_message\" | \"transfer_invalid\" = \"invalid_message\"): void => {\n if (disposed) return;\n terminalFailure = frameworkError(code, \"receive\");\n invalidate(reason, terminalFailure);\n try { options.transport.close?.(); } catch { /* best effort */ }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) {\n failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n return;\n }\n try {\n if (!metadata?.decoded) {\n message = codec.decode(message);\n }\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") {\n failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n } else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") {\n failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n } else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n return;\n }\n try {\n // A Runtime connection has one physical bidirectional port. Incoming\n // call/cancel/credit messages belong to the peer-side Provider listener;\n // this bridge must leave its event.ports ledger untouched so that the\n // Provider can validate and hand off business resources.\n if (message.type === RUNTIME_CALL_TYPE || message.type === RUNTIME_CANCEL_TYPE || message.type === RUNTIME_CREDIT_TYPE) return;\n if (message.type === RUNTIME_SNAPSHOT_TYPE) {\n if (ledger.ports.length > 0) throw frameworkError(\"transfer_invalid\", \"receive\");\n const result = applySnapshot(message);\n if (!result.accepted && result.reason === \"protocol-mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (!result.accepted && result.reason === \"invalid-snapshot\") failClose(\"Invalid Runtime snapshot\", \"invalid_snapshot\");\n return;\n }\n if (message.type === RUNTIME_ERROR_TYPE) { ledger.closeUndelivered(); invalidate(message.message); return; }\n if (message.type === RUNTIME_RESULT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n if (entry.mode === \"unary\") {\n if (!(\"result\" in message)) { ledger.closeUndelivered(); settleUnary(entry, frameworkError(\"invalid_message\", \"receive\", contextFor(entry.capability, entry.reference))); return; }\n try {\n const incoming = prepareIncoming(entry.capability, message.result, \"response\", ledger);\n ledger.handoff();\n settleUnary(entry, undefined, incoming.value);\n } catch (error) { settleUnary(entry, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(entry.capability, entry.reference))); }\n return;\n }\n const stream = entry as PendingStream;\n if (\"streamReady\" in message && message.streamReady) {\n if (stream.state !== \"opening\") { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.state = \"active\";\n stream.readySettled = true;\n if (stream.timer !== undefined) clearTimeout(stream.timer);\n releasePendingReservation(stream.reservation);\n stream.resolveReady();\n emit();\n return;\n }\n if (\"done\" in message && message.done) {\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (ledger.ports.length > 0) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"transfer_invalid\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.doneReceived = true;\n stream.state = \"draining\";\n pending.delete(stream.callId);\n releaseStreamReservation(stream.reservation);\n releasePayloadReservation(stream.reservation);\n stream.cleanup?.();\n finishDraining(stream);\n drainStream(stream);\n emit();\n return;\n }\n ledger.closeUndelivered();\n terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true);\n return;\n }\n if (message.type === RUNTIME_ERROR_MESSAGE_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n ledger.closeUndelivered();\n const error = errorFromWire(message);\n if (entry.mode === \"stream\") terminateStream(entry as PendingStream, error, false);\n else settleUnary(entry, error);\n return;\n }\n if (message.type === RUNTIME_NEXT_TYPE) {\n const entry = pending.get(message.callId);\n if (!entry || entry.mode !== \"stream\" || entry.reference.serviceInstanceId !== message.serviceInstanceId) { ledger.closeUndelivered(); return; }\n const stream = entry as PendingStream;\n if (stream.state !== \"active\" || stream.doneReceived) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"invalid_message\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (stream.credit < 1) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n if (message.sequence !== stream.sequence) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"stream_overflow\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n let incoming: ReturnType<typeof prepareIncoming>;\n try { incoming = prepareIncoming(stream.capability, message.item, \"item\", ledger); }\n catch (error) { terminateStream(stream, error instanceof WebLoomError ? error : frameworkError(\"response_validation_failed\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n const { value, stats } = incoming;\n if (peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - stats.budgetBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - stats.budgetBytes\n || stream.queue.length >= stream.window) { ledger.closeUndelivered(); terminateStream(stream, frameworkError(\"resource_limit_exceeded\", \"receive\", contextFor(stream.capability, stream.reference)), true); return; }\n stream.credit -= 1;\n stream.sequence += 1;\n stream.queue.push({ value, ledger, budgetBytes: stats.budgetBytes });\n peerRetainedPayloadBytes += stats.budgetBytes;\n budget.retainedPayloadBytes += stats.budgetBytes;\n drainStream(stream);\n return;\n }\n ledger.closeUndelivered();\n } catch (error) {\n ledger.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"invalid_snapshot\") failClose(\"Invalid WebLoom runtime message\", \"invalid_snapshot\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid WebLoom runtime message\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n }\n };\n\n const removeTransport = options.transport.subscribe((message, metadata) => onMessage(message, metadata));\n const removeTransportError = options.transport.subscribeError?.((error, metadata) => {\n metadata?.ledger?.closeUndelivered();\n if (error instanceof WebLoomError && error.code === \"protocol_mismatch\") failClose(\"Remote Runtime protocol mismatch\", \"protocol_mismatch\");\n else if (error instanceof WebLoomError && error.code === \"transfer_invalid\") failClose(\"Invalid received transfer metadata\", \"transfer_invalid\");\n else failClose(\"Invalid WebLoom runtime message\", \"invalid_message\");\n });\n\n function applySnapshot(snapshot: RuntimeSnapshot): SnapshotApplyResult {\n if (disposed) return { accepted: false, reason: \"disposed\" };\n if (!snapshot || typeof snapshot !== \"object\") return { accepted: false, reason: \"invalid-snapshot\" };\n if (snapshot.protocolVersion !== RUNTIME_PROTOCOL_VERSION) return { accepted: false, reason: \"protocol-mismatch\" };\n try {\n if (snapshot.units.length > limits.maxSnapshotUnits || snapshot.services.length > limits.maxSnapshotServices) return { accepted: false, reason: \"invalid-snapshot\" };\n codec.encode({ ...snapshot, type: RUNTIME_SNAPSHOT_TYPE });\n validateDto(snapshot, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, phase: \"receive\" });\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (options.remoteRuntimeId !== undefined && snapshot.runtimeId !== options.remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (options.remoteRuntimeKind !== undefined && snapshot.runtimeKind !== options.remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeId !== undefined && snapshot.runtimeId !== remoteRuntimeId) return { accepted: false, reason: \"invalid-snapshot\" };\n if (remoteRuntimeKind !== undefined && snapshot.runtimeKind !== remoteRuntimeKind) return { accepted: false, reason: \"invalid-snapshot\" };\n let fingerprint: string;\n try { fingerprint = JSON.stringify(snapshot); } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n if (remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId === snapshot.runtimeInstanceId && snapshot.revision <= revision) {\n // A transport may have more than one internal observer. Replaying the\n // exact same revision is harmless and lets an observer report the state;\n // a different payload at that revision remains rejected.\n if (snapshot.revision === revision && fingerprint === appliedSnapshotFingerprint) return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n return { accepted: false, reason: \"stale-revision\", receivedRevision: snapshot.revision };\n }\n const services: ServiceReference[] = [];\n const keys = new Set<string>();\n try {\n for (const service of snapshot.state === \"ready\" ? snapshot.services : []) {\n const key = serviceKey(service);\n if (keys.has(key)) return { accepted: false, reason: \"invalid-snapshot\" };\n keys.add(key);\n services.push(Object.freeze({ kind: service.kind, capabilityId: service.capabilityId, contractVersion: service.contractVersion, runtime: snapshot.runtimeKind, runtimeInstanceId: snapshot.runtimeInstanceId, serviceInstanceId: service.serviceInstanceId, attributes: cloneFrozenAttributes(service.attributes), ...(service.grantId !== undefined ? { grantId: service.grantId } : {}), ...(service.authorizationRevision !== undefined ? { authorizationRevision: service.authorizationRevision } : {}) }));\n }\n } catch { return { accepted: false, reason: \"invalid-snapshot\" }; }\n const newRuntime = remoteRuntimeInstanceId !== undefined && remoteRuntimeInstanceId !== snapshot.runtimeInstanceId;\n // Adding a service while a proxy is waiting is not an exposure replacement.\n // Only an existing contract whose serviceInstanceId changes is a fence event;\n // otherwise the first ready snapshot would revoke a proxy created just before\n // the asynchronous directory arrived.\n const replaced = !newRuntime && remoteRuntimeInstanceId === snapshot.runtimeInstanceId\n && currentServices.some((current) => {\n const next = services.find((service) => serviceKey(service) === serviceKey(current));\n return next !== undefined && next.serviceInstanceId !== current.serviceInstanceId;\n });\n if (newRuntime || replaced) invalidate(newRuntime ? \"Remote Runtime instance changed\" : \"Remote Runtime service exposure replaced\");\n if (!newRuntime && !replaced) {\n for (const proxy of proxies.values()) {\n if (proxy.bound && !services.some((service) => serviceKey(service) === serviceKey(proxy.bound as ServiceReference) && service.serviceInstanceId === proxy.bound?.serviceInstanceId)) {\n revokeProxy(proxy, \"Remote Runtime service exposure was removed\");\n }\n }\n }\n remoteRuntimeId = snapshot.runtimeId;\n remoteRuntimeKind = snapshot.runtimeKind;\n remoteRuntimeInstanceId = snapshot.runtimeInstanceId;\n revision = snapshot.revision;\n appliedSnapshotFingerprint = fingerprint;\n currentServices = Object.freeze(services);\n currentState = snapshot.state === \"ready\" ? \"ready\" : snapshot.state === \"starting\" ? \"empty\" : snapshot.state === \"disposed\" ? \"disposed\" : \"stale\";\n if (currentState !== \"ready\" && snapshot.state !== \"starting\") for (const proxy of proxies.values()) revokeProxy(proxy, `Remote Runtime is ${snapshot.state}`);\n emit();\n return { accepted: true, state: currentState === \"disposed\" ? \"stale\" : currentState, revision };\n }\n\n const bridge: CapabilityBridge & { readonly pendingCallCount: number; readonly activeStreamCount: number; readonly retainedPayloadBytes: number } = {\n get state() { return currentState; },\n get runtimeInstanceId() { return remoteRuntimeInstanceId; },\n get runtimeKind() { return remoteRuntimeKind; },\n getClient<C extends RemoteCapability>(capability: C, scope?: LifecycleScope): CapabilityClient<C> {\n const key = `${capability.kind}\\u0000${capability.id}\\u0000${capability.version}\\u0000${scope?.identity.scopeId ?? \"root\"}`;\n let proxy = proxies.get(key);\n if (!proxy || proxy.revoked) {\n proxy = { capability, scope, cacheKey: key, revoked: false, reason: \"Capability proxy is revoked\" };\n proxies.set(key, proxy);\n scope?.onRevoke((reason) => revokeProxy(proxy as ProxyRecord, reason));\n }\n const cached = clients.get(key);\n if (cached && !proxy.revoked) return cached as CapabilityClient<C>;\n const client = capability.kind === \"rpc\"\n ? { call: (request: unknown, optionsForCall?: RpcCallOptions) => call(proxy as ProxyRecord, request, optionsForCall ?? {}) }\n : { subscribe: (request: unknown, optionsForSubscribe: StreamSubscribeOptions<unknown>) => subscribe(proxy as ProxyRecord, request, optionsForSubscribe) };\n clients.set(key, client as unknown as CapabilityClient<RemoteCapability>);\n return client as unknown as CapabilityClient<C>;\n },\n applySnapshot,\n invalidate,\n disconnect(reason = \"Runtime disconnected\") { invalidate(reason); currentState = \"stale\"; },\n dispose(reason = \"Runtime bridge disposed\") { if (disposed) return; disposed = true; invalidate(reason); removeTransport(); removeTransportError?.(); options.transport.close?.(); currentState = \"disposed\"; emit(); },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n services() { return currentServices; },\n get pendingCallCount() { return pendingCount; },\n get activeStreamCount() { return [...streams.values()].filter((entry) => entry.state === \"opening\" || entry.state === \"active\").length; },\n get retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n return bridge;\n}\n\n/** 内部 typed transfer 校验 helper;不接受 call 级临时 transfer 数组。 */\nexport function validateTransferables(value: unknown, transfer: readonly Transferable[] | undefined, limits?: RuntimeLimitsInput): readonly Transferable[] {\n return validateTransferList(value, transfer, { limits: limits ?? DEFAULT_RUNTIME_LIMITS, phase: \"validate\" });\n}\n","// MessagePort 到 v4 RuntimeTransport 的唯一适配。\n\nimport type { RuntimeReceiveMetadata, RuntimeTransport } from \"./serviceBridge.js\";\nimport type { RuntimeWireMessage } from \"../runtime/runtimeProtocol.js\";\nimport { createReceivePortLedger, normalizeRuntimeLimits, type RuntimeLimitsInput } from \"./dto.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createRuntimeMessageCodec } from \"../runtime/runtimeProtocol.js\";\n\nexport interface MessagePortLike {\n addEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n removeEventListener(type: \"message\" | \"messageerror\", listener: (event: MessageEvent) => void): void;\n postMessage(message: unknown, transfer?: readonly Transferable[]): void;\n start?(): void;\n close?(): void;\n}\n\n/** 将一个真实 MessagePort 绑定为双向 v4 transport。 */\nexport function createMessagePortRuntimeTransport(port: MessagePortLike, options: { readonly limits?: RuntimeLimitsInput } = {}): RuntimeTransport {\n const listeners = new Set<(message: RuntimeWireMessage, metadata?: RuntimeReceiveMetadata) => void>();\n const errorListeners = new Set<(error: unknown, metadata?: RuntimeReceiveMetadata) => void>();\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const onMessage = (event: MessageEvent): void => {\n const ledger = createReceivePortLedger(event.ports ?? [], { limits, phase: \"receive\" });\n const metadata: RuntimeReceiveMetadata = Object.freeze({\n ports: ledger.ports,\n ledger,\n decoded: true,\n });\n if (!ledger.valid) {\n const error = new WebLoomError(\"transfer_invalid\", \"Invalid received transfer metadata\", \"receive\");\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n let message: RuntimeWireMessage;\n try { message = codec.decode(event.data); }\n catch (error) {\n ledger.closeUndelivered();\n for (const listener of [...errorListeners]) {\n try { listener(error, metadata); } catch { /* observer isolation */ }\n }\n return;\n }\n for (const listener of [...listeners]) {\n try { listener(message, metadata); } catch { /* observer isolation */ }\n }\n };\n port.addEventListener(\"message\", onMessage);\n port.start?.();\n let closed = false;\n return {\n send(message, transfer) {\n if (closed) throw new Error(\"MessagePort transport is closed\");\n port.postMessage(message, transfer);\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); },\n subscribeError(listener) { errorListeners.add(listener); return () => errorListeners.delete(listener); },\n close() { if (closed) return; closed = true; port.removeEventListener(\"message\", onMessage); port.close?.(); listeners.clear(); errorListeners.clear(); },\n };\n}\n","// v4 MessagePort provider:同一物理端口上的反向 call/stream 分派。\n\nimport type { CapabilityPeer, HandlerCallContext, ServiceReference } from \"../contracts/capability.js\";\nimport { WebLoomError, type LifecycleScope } from \"../contracts/lifecycle.js\";\nimport {\n assertReceivedPortSet,\n createReceivePortLedger,\n createRuntimeBudget,\n normalizeRuntimeLimits,\n validateDto,\n validateRawDto,\n validateTransferList,\n type ReceivePortLedger,\n type RuntimeBudget,\n type RuntimeLimitsInput,\n} from \"./dto.js\";\nimport {\n RUNTIME_CALL_TYPE,\n RUNTIME_CANCEL_TYPE,\n RUNTIME_CREDIT_TYPE,\n RUNTIME_ERROR_MESSAGE_TYPE,\n RUNTIME_NEXT_TYPE,\n RUNTIME_PROTOCOL_VERSION,\n RUNTIME_RESULT_TYPE,\n createRuntimeMessageCodec,\n type RuntimeCallMessage,\n type RuntimeWireMessage,\n} from \"../runtime/runtimeProtocol.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"./messagePortServiceTransport.js\";\nimport type { RuntimeTransport } from \"./serviceBridge.js\";\n\nexport interface MessagePortServiceCallInput {\n /** 已验证的 call message;request 已由生产 parser 规范化。 */\n readonly message: RuntimeCallMessage;\n /** parser 规范化后的请求。 */\n readonly request: unknown;\n /** 服务绑定身份。 */\n readonly reference: ServiceReference;\n /** 取消信号。 */\n readonly signal: AbortSignal;\n /** 本端以接收时钟计算的调用截止时间。 */\n readonly deadlineAt: number;\n /** 对端 peer 视图。 */\n readonly peer?: CapabilityPeer;\n}\n\nexport interface PreparedRequest {\n /** parser 规范化后的 DTO。 */\n readonly value: unknown;\n /** 契约声明的 transfer。 */\n readonly transfer?: readonly Transferable[];\n /** 可选的已计算计费值。 */\n readonly budgetBytes?: number;\n}\n\nexport interface MessagePortServiceProviderOptions {\n /** 兼容 standalone/testing 的当前 MessagePort;实际 Runtime 使用 shared transport。 */\n readonly port?: MessagePortLike;\n /** 当前物理 endpoint 的唯一 v4 transport。 */\n readonly transport?: RuntimeTransport;\n /** 当前可暴露的服务;返回空集合即拒绝新的调用。 */\n readonly services: () => readonly ServiceReference[];\n /** 调用 Host handler。 */\n readonly handleCall: (input: MessagePortServiceCallInput) => unknown | Promise<unknown | AsyncIterable<unknown>>;\n /** 当前 peer scope。 */\n readonly peerScope?: LifecycleScope;\n /** 默认 peer view;peerForCall 可按 handler 依赖进一步收窄。 */\n readonly peer?: CapabilityPeer;\n /** 当前 handler 所属插件允许观察的 peer view。 */\n readonly peerForCall?: (call: RuntimeCallMessage, reference: ServiceReference) => CapabilityPeer | undefined;\n /** 接收 request 的 parser/transfer 适配。 */\n readonly prepareRequest?: (call: RuntimeCallMessage, ledger: ReceivePortLedger) => PreparedRequest;\n /** 发送前验证/提取 unary response。 */\n readonly prepareResult?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 发送前验证/提取 stream item。 */\n readonly prepareItem?: (value: unknown, call: RuntimeCallMessage) => PreparedRequest;\n /** 可信 Runtime/advanced 装配预算。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的 Runtime 方向共享计数器。 */\n readonly budget?: RuntimeBudget;\n}\n\ninterface ActiveCall {\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly requestBytes: number;\n readonly deadlineAt: number;\n deadlineTimer?: ReturnType<typeof setTimeout>;\n removePeerRevoke?: () => void;\n pending: boolean;\n /** reserve() 为 stream 预留的活动槽;在 pending/stream 终态只释放一次。 */\n streamReserved: boolean;\n cancelled: boolean;\n /** 本端已经结束等待/交付,但业务执行仍可能未结束。 */\n frameworkSettled: boolean;\n executionReleased: boolean;\n}\n\ninterface StreamEntry {\n readonly active: ActiveCall;\n readonly call: RuntimeCallMessage;\n readonly controller: AbortController;\n readonly reference: ServiceReference;\n readonly window: number;\n iterator?: AsyncIterator<unknown>;\n credit: number;\n sequence: number;\n running: boolean;\n closed: boolean;\n iteratorDone: boolean;\n returnStarted: boolean;\n returnDone: boolean;\n pumpDone: boolean;\n}\n\nfunction safeErrorCode(error: unknown, fallback: string): string {\n return error instanceof WebLoomError ? error.code : fallback;\n}\n\nfunction post(transport: RuntimeTransport, codec: ReturnType<typeof createRuntimeMessageCodec>, message: RuntimeWireMessage, transfer: readonly Transferable[] = []): boolean {\n try { transport.send(codec.encode(message), transfer); return true; } catch { return false; }\n}\n\nfunction safeErrorMessage(code: string): string {\n const messages: Record<string, string> = {\n capability_unavailable: \"Capability is unavailable\",\n permission_denied: \"Capability authorization denied\",\n service_stale: \"Runtime service exposure is stale\",\n request_validation_failed: \"Capability request failed validation\",\n response_validation_failed: \"Capability response failed validation\",\n request_clone_failed: \"Capability request could not be delivered\",\n response_clone_failed: \"Capability response could not be delivered\",\n transfer_invalid: \"Capability transfer declaration is invalid\",\n handler_failed: \"Remote capability operation failed\",\n call_timeout: \"Capability call timed out\",\n request_cancelled: \"Capability call was cancelled\",\n service_revoked: \"Capability exposure was revoked\",\n transport_unavailable: \"Runtime transport is unavailable\",\n stream_overflow: \"Stream credit or sequence is invalid\",\n resource_limit_exceeded: \"Runtime resource limit exceeded\",\n invalid_message: \"Invalid WebLoom runtime message\",\n };\n return messages[code] ?? \"Remote capability operation failed\";\n}\n\n/** 创建一个严格 bounded 的 MessagePort provider。 */\nexport function createMessagePortServiceProvider(options: MessagePortServiceProviderOptions): {\n setServices(): void;\n dispose(): void;\n pendingCount(): number;\n executionCount(): number;\n nonCooperativeExecutionCount(): number;\n retainedPayloadBytes(): number;\n} {\n const codec = createRuntimeMessageCodec();\n const limits = normalizeRuntimeLimits(options.limits);\n const budget = options.budget ?? createRuntimeBudget(limits);\n const configuredTransport = options.transport ?? (options.port ? createMessagePortRuntimeTransport(options.port, { limits }) : undefined);\n if (!configuredTransport) throw new TypeError(\"MessagePort service provider requires transport or port\");\n const transport: RuntimeTransport = configuredTransport;\n const activeCalls = new Map<string, ActiveCall>();\n const streams = new Map<string, StreamEntry>();\n const executionSlots = new Map<string, ActiveCall>();\n let peerRetainedPayloadBytes = 0;\n let disposed = false;\n\n const serviceFor = (message: RuntimeCallMessage): ServiceReference | undefined => options.services().find((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n && service.serviceInstanceId === message.serviceInstanceId\n ));\n\n const serviceErrorCode = (message: RuntimeCallMessage): \"capability_unavailable\" | \"service_stale\" => {\n // services() is the peer's visible projection. An absent contract must\n // not reveal whether a hidden provider exists; a wrong exposure identity\n // for a currently visible contract is the only stale case we can safely\n // identify at this boundary.\n const visibleContract = options.services().some((service) => (\n service.kind === (message.mode === \"stream\" ? \"stream\" : \"rpc\")\n && service.capabilityId === message.capabilityId\n && service.contractVersion === message.contractVersion\n ));\n return visibleContract ? \"service_stale\" : \"capability_unavailable\";\n };\n\n const sendError = (call: RuntimeCallMessage, code: string, phase: \"validate\" | \"wait\" | \"dispatch\" | \"execute\" | \"receive\" | \"dispose\"): void => {\n post(transport, codec, {\n type: RUNTIME_ERROR_MESSAGE_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n callId: call.callId,\n serviceInstanceId: call.serviceInstanceId,\n error: { code, message: safeErrorMessage(code), phase },\n });\n };\n\n const releaseExecution = (active: ActiveCall): void => {\n if (active.executionReleased) return;\n active.executionReleased = true;\n if (executionSlots.get(active.call.callId) === active) executionSlots.delete(active.call.callId);\n budget.releaseExecutionSlot();\n peerRetainedPayloadBytes = Math.max(0, peerRetainedPayloadBytes - active.requestBytes);\n budget.retainedPayloadBytes = Math.max(0, budget.retainedPayloadBytes - active.requestBytes);\n active.removePeerRevoke?.();\n active.removePeerRevoke = undefined;\n };\n\n const releaseStreamReservation = (active: ActiveCall): void => {\n if (!active.streamReserved) return;\n active.streamReserved = false;\n budget.activeStreams = Math.max(0, budget.activeStreams - 1);\n };\n\n const releasePending = (active: ActiveCall): void => {\n if (!active.pending) return;\n active.pending = false;\n if (activeCalls.get(active.call.callId) === active) activeCalls.delete(active.call.callId);\n if (active.deadlineTimer !== undefined) { clearTimeout(active.deadlineTimer); active.deadlineTimer = undefined; }\n budget.pendingCalls = Math.max(0, budget.pendingCalls - 1);\n };\n\n const finishPending = (active: ActiveCall): void => {\n releasePending(active);\n };\n\n const maybeReleaseStreamExecution = (stream: StreamEntry): void => {\n if (stream.pumpDone && stream.returnDone) releaseExecution(stream.active);\n };\n\n const returnIterator = (stream: StreamEntry): void => {\n if (stream.returnStarted) return;\n stream.returnStarted = true;\n const candidate = stream.iterator?.return;\n if (!candidate) { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n let result: unknown;\n try { result = candidate.call(stream.iterator); }\n catch { stream.returnDone = true; maybeReleaseStreamExecution(stream); return; }\n void Promise.resolve(result).then(() => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n }, () => {\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n });\n };\n\n const closeStream = (stream: StreamEntry, normalDone = false): void => {\n if (stream.closed) return;\n stream.closed = true;\n stream.active.cancelled = true;\n finishPending(stream.active);\n streams.delete(stream.call.callId);\n releaseStreamReservation(stream.active);\n if (normalDone) {\n stream.iteratorDone = true;\n stream.returnDone = true;\n maybeReleaseStreamExecution(stream);\n } else {\n // If the pump was never started (for example streamReady post failed),\n // there is no finally block that can mark it settled.\n if (!stream.running) stream.pumpDone = true;\n returnIterator(stream);\n maybeReleaseStreamExecution(stream);\n }\n };\n\n const closeLateIterable = async (value: unknown): Promise<void> => {\n try {\n if (!value || typeof (value as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") return;\n const iterator = (value as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n const close = iterator.return;\n if (close) await Promise.resolve(close.call(iterator));\n } catch {\n // A late iterator is already outside the consumer boundary; its cleanup\n // failure must not create an unhandled rejection or leak wire details.\n }\n };\n\n const cancelActive = (active: ActiveCall, errorCode = \"request_cancelled\"): void => {\n if (active.cancelled) return;\n active.frameworkSettled = true;\n active.cancelled = true;\n try { active.controller.abort(); } catch { /* noop */ }\n const stream = streams.get(active.call.callId);\n if (stream) closeStream(stream);\n else finishPending(active);\n void errorCode;\n };\n\n const reserve = (requestBytes: number, stream: boolean): WebLoomError | undefined => {\n if (activeCalls.size >= limits.maxPendingCallsPerPeer || budget.pendingCalls >= limits.maxPendingCallsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (executionSlots.size >= limits.maxExecutionSlotsPerPeer || budget.executionSlots >= limits.maxExecutionSlotsPerRuntime) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (stream && (streams.size >= limits.maxActiveStreamsPerPeer || budget.activeStreams >= limits.maxActiveStreamsPerRuntime)) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n if (requestBytes > limits.maxMessageBudgetBytes\n || peerRetainedPayloadBytes > limits.maxRetainedPayloadBytesPerPeer - requestBytes\n || budget.retainedPayloadBytes > limits.maxRetainedPayloadBytesPerRuntime - requestBytes) return new WebLoomError(\"resource_limit_exceeded\", safeErrorMessage(\"resource_limit_exceeded\"), \"dispatch\");\n budget.pendingCalls += 1;\n if (stream) budget.activeStreams += 1;\n budget.executionSlots += 1;\n peerRetainedPayloadBytes += requestBytes;\n budget.retainedPayloadBytes += requestBytes;\n return undefined;\n };\n\n const prepareRequest = (call: RuntimeCallMessage, ledger: ReceivePortLedger): { value: unknown; budgetBytes: number } => {\n try { validateRawDto(call.request, limits, \"receive\"); } catch (error) { ledger.closeUndelivered(); throw error; }\n let prepared: PreparedRequest;\n try { prepared = options.prepareRequest?.(call, ledger) ?? { value: call.request }; }\n catch (error) { ledger.closeUndelivered(); throw error; }\n let transfer: readonly Transferable[];\n try { transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n try { assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" }); }\n catch (error) { ledger.closeUndelivered(); throw error; }\n const stats = validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n // Quota ownership always uses the production walker result. An adapter's\n // optional precomputed field must not be able to under-report a normalized\n // payload and bypass retained-byte limits.\n return { value: prepared.value, budgetBytes: stats.budgetBytes };\n };\n\n const prepareOutput = (prepared: PreparedRequest, ledger?: ReceivePortLedger): { value: unknown; transfer: readonly Transferable[] } => {\n try {\n const transfer = validateTransferList(prepared.value, prepared.transfer, { limits, phase: \"receive\" });\n if (ledger) assertReceivedPortSet(ledger, transfer, { limits, phase: \"receive\" });\n validateDto(prepared.value, { limits: { maxDepth: limits.maxDtoDepth, maxNodes: limits.maxDtoNodes, maxEdges: limits.maxDtoEdges, maxBudgetBytes: limits.maxMessageBudgetBytes }, transferables: new Set(transfer), phase: \"receive\" });\n return { value: prepared.value, transfer };\n } catch (error) { ledger?.closeUndelivered(); throw error; }\n };\n\n const pump = async (entry: StreamEntry): Promise<void> => {\n if (entry.running || entry.closed || !entry.iterator) return;\n entry.running = true;\n try {\n while (!entry.closed && !entry.active.cancelled && entry.credit > 0) {\n let next: IteratorResult<unknown>;\n try { next = await entry.iterator.next(); }\n catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"handler_failed\"), \"execute\");\n closeStream(entry);\n break;\n }\n if (entry.closed || entry.active.cancelled) break;\n if (next.done) {\n entry.iteratorDone = true;\n if (post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, done: true })) closeStream(entry, true);\n else { sendError(entry.call, \"transport_unavailable\", \"receive\"); closeStream(entry, true); }\n break;\n }\n try {\n const prepared = options.prepareItem?.(next.value, entry.call) ?? { value: next.value };\n const output = prepareOutput(prepared);\n if (!post(transport, codec, { type: RUNTIME_NEXT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: entry.call.callId, serviceInstanceId: entry.reference.serviceInstanceId, sequence: entry.sequence, item: output.value }, output.transfer)) {\n sendError(entry.call, \"response_clone_failed\", \"receive\");\n closeStream(entry);\n break;\n }\n entry.credit -= 1;\n entry.sequence += 1;\n } catch (error) {\n if (!entry.closed && !entry.active.cancelled) sendError(entry.call, safeErrorCode(error, \"response_validation_failed\"), \"receive\");\n closeStream(entry);\n break;\n }\n }\n } finally {\n entry.running = false;\n entry.pumpDone = true;\n maybeReleaseStreamExecution(entry);\n }\n };\n\n const onMessage = (message: RuntimeWireMessage, metadata?: import(\"./serviceBridge.js\").RuntimeReceiveMetadata): void => {\n const ledger = metadata?.ledger ?? createReceivePortLedger(metadata?.ports, { limits, phase: \"receive\" });\n if (!ledger.valid) { failClose(); return; }\n\n if (message.type === RUNTIME_CANCEL_TYPE) {\n ledger.closeUndelivered();\n const active = activeCalls.get(message.callId) ?? streams.get(message.callId)?.active;\n if (!active || active.reference.serviceInstanceId !== message.serviceInstanceId) return;\n cancelActive(active);\n return;\n }\n\n if (message.type === RUNTIME_CREDIT_TYPE) {\n ledger.closeUndelivered();\n const stream = streams.get(message.callId);\n const valid = stream !== undefined\n && stream.reference.serviceInstanceId === message.serviceInstanceId\n && Number.isSafeInteger(message.count)\n && message.count >= 1\n && message.count <= limits.maxStreamCredit\n && stream.credit + message.count <= stream.window;\n if (!valid) {\n if (stream && !stream.active.cancelled) sendError(stream.call, \"stream_overflow\", \"receive\");\n if (stream) closeStream(stream);\n return;\n }\n stream.credit += message.count;\n void pump(stream);\n return;\n }\n\n // The physical port is bidirectional: result/next/snapshot messages are\n // consumed by the bridge listener on this same port. They are not an\n // invalid provider message and their business ports must remain available\n // to that listener.\n if (message.type !== RUNTIME_CALL_TYPE) return;\n const reference = serviceFor(message);\n if (!reference) { ledger.closeUndelivered(); sendError(message, serviceErrorCode(message), \"dispatch\"); return; }\n if (activeCalls.has(message.callId) || executionSlots.has(message.callId)) { ledger.closeUndelivered(); sendError(message, \"invalid_message\", \"dispatch\"); return; }\n if (message.grantId !== undefined && message.grantId !== reference.grantId) { ledger.closeUndelivered(); sendError(message, \"permission_denied\", \"dispatch\"); return; }\n const initialCredit = message.initialCredit;\n if (message.mode === \"stream\" && (!Number.isSafeInteger(initialCredit) || (initialCredit as number) < 1 || (initialCredit as number) > limits.maxStreamCredit)) {\n ledger.closeUndelivered();\n sendError(message, \"stream_overflow\", \"validate\");\n return;\n }\n let request: { value: unknown; budgetBytes: number };\n try { request = prepareRequest(message, ledger); }\n catch (error) { sendError(message, safeErrorCode(error, \"request_validation_failed\"), error instanceof WebLoomError ? error.phase : \"receive\"); return; }\n const quotaError = reserve(request.budgetBytes, message.mode === \"stream\");\n if (quotaError) { ledger.closeUndelivered(); sendError(message, quotaError.code, \"dispatch\"); return; }\n // Request ports are now part of the handler DTO. The handler owns them only\n // after this point; provider no longer closes them on later cancellation.\n ledger.handoff();\n const controller = new AbortController();\n const active: ActiveCall = { call: { ...message, request: request.value }, controller, reference, requestBytes: request.budgetBytes, deadlineAt: Date.now() + message.timeoutMs, pending: true, streamReserved: message.mode === \"stream\", cancelled: false, frameworkSettled: false, executionReleased: false };\n activeCalls.set(message.callId, active);\n executionSlots.set(message.callId, active);\n if (options.peerScope) active.removePeerRevoke = options.peerScope.onRevoke(() => cancelActive(active, \"service_revoked\"));\n active.deadlineTimer = setTimeout(() => cancelActive(active, \"call_timeout\"), message.timeoutMs);\n const callPeer = options.peerForCall?.(active.call, reference) ?? options.peer;\n\n void (async () => {\n let stream: StreamEntry | undefined;\n try {\n if (active.cancelled || disposed) { releaseExecution(active); return; }\n const result = await options.handleCall({ message: active.call, request: request.value, reference, signal: controller.signal, deadlineAt: active.deadlineAt, peer: callPeer });\n if (active.cancelled || disposed || executionSlots.get(message.callId) !== active) {\n if (message.mode === \"stream\") await closeLateIterable(result);\n releaseExecution(active);\n return;\n }\n if (message.mode === \"unary\") {\n try {\n const output = prepareOutput(options.prepareResult?.(result, active.call) ?? { value: result });\n if (!active.cancelled && !post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, result: output.value }, output.transfer)) sendError(message, \"response_clone_failed\", \"receive\");\n } catch (error) { if (!active.cancelled) sendError(message, safeErrorCode(error, \"response_validation_failed\"), \"receive\"); }\n finishPending(active);\n releaseExecution(active);\n return;\n }\n if (!result || typeof (result as AsyncIterable<unknown>)[Symbol.asyncIterator] !== \"function\") throw new WebLoomError(\"handler_failed\", \"Stream handler did not return AsyncIterable\", \"execute\");\n const iterator = (result as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n // An acquired iterator remains an execution slot while it is idle on\n // zero credit. It is released only after natural exhaustion or a\n // completed iterator.return().\n stream = { active, call: active.call, controller, reference, window: message.initialCredit ?? 16, iterator, credit: message.initialCredit ?? 16, sequence: 1, running: false, closed: false, iteratorDone: false, returnStarted: false, returnDone: false, pumpDone: false };\n streams.set(message.callId, stream);\n if (!post(transport, codec, { type: RUNTIME_RESULT_TYPE, protocolVersion: RUNTIME_PROTOCOL_VERSION, callId: message.callId, serviceInstanceId: reference.serviceInstanceId, streamReady: true })) {\n sendError(message, \"transport_unavailable\", \"dispatch\");\n closeStream(stream);\n return;\n }\n releasePending(active);\n void pump(stream);\n } catch (error) {\n if (!active.cancelled && !disposed) sendError(message, safeErrorCode(error, \"handler_failed\"), error instanceof WebLoomError ? error.phase : \"execute\");\n if (stream) closeStream(stream);\n else { finishPending(active); releaseExecution(active); }\n }\n })().catch(() => {\n const lateStream = streams.get(active.call.callId);\n if (lateStream) closeStream(lateStream);\n else { finishPending(active); releaseExecution(active); }\n });\n };\n\n function dispose(): void {\n if (disposed) return;\n disposed = true;\n for (const active of [...activeCalls.values()]) cancelActive(active, \"service_revoked\");\n for (const stream of [...streams.values()]) closeStream(stream);\n removeTransport();\n }\n\n function failClose(): void {\n dispose();\n try { transport.close?.(); } catch { /* best effort */ }\n }\n\n const removeTransport = transport.subscribe(onMessage);\n return {\n setServices() { /* provider reads the current projection at dispatch time */ },\n dispose,\n pendingCount() { return activeCalls.size; },\n executionCount() { return executionSlots.size; },\n nonCooperativeExecutionCount() { return [...executionSlots.values()].filter((active) => active.frameworkSettled).length; },\n retainedPayloadBytes() { return budget.retainedPayloadBytes; },\n };\n}\n","import { capabilityKey, type CapabilityDescriptor, type CapabilityPeer, type CapabilityClient, type RemoteCapability, type CapabilityBridge, type PeerScopeView } from \"../contracts/capability.js\";\nimport type { LifecycleScope } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\n\n/** 将可信 peer controller 收窄为真正独立的普通 handler 作用域视图。 */\nexport function createPeerScopeView(scope: LifecycleScope): PeerScopeView {\n return Object.freeze({\n get state() { return scope.state; },\n signal: scope.signal,\n onRevoke(listener: (reason: string) => void) { return scope.onRevoke(listener); },\n });\n}\n\n/** 只复制 peer view 的公开字段,避免通过类型断言泄露 controller。 */\nexport function freezePeerView(peer: CapabilityPeer): CapabilityPeer {\n return Object.freeze(peer);\n}\n\nexport interface CreatePeerViewOptions {\n /** 当前物理连接的 opaque peer id。 */\n readonly peerId: string;\n /** 独立的只读 scope facade。 */\n readonly scope: PeerScopeView;\n /** 当前连接 bridge;其目录身份由 bridge 管理。 */\n readonly bridge: CapabilityBridge;\n /** handler 所属插件声明的 peer capability allowlist;undefined 仅供可信装配使用。 */\n readonly allowed?: readonly CapabilityDescriptor[];\n /** 代理绑定的完整 peer scope。 */\n readonly capabilityScope?: LifecycleScope;\n}\n\n/** 创建真正独立的 PeerView;不把 PeerController 通过类型断言传给普通 handler。 */\nexport function createCapabilityPeerView(options: CreatePeerViewOptions): CapabilityPeer {\n const allowed = options.allowed === undefined\n ? undefined\n : new Set(options.allowed.map((descriptor) => capabilityKey(descriptor)));\n return Object.freeze({\n peerId: options.peerId,\n get runtime() { return options.bridge.runtimeKind; },\n get runtimeInstanceId() { return options.bridge.runtimeInstanceId; },\n scope: options.scope,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> {\n if (allowed && !allowed.has(capabilityKey(capability))) {\n throw new WebLoomError(\"capability_unavailable\", \"Capability is unavailable\", \"dispatch\", { capabilityId: capability.id });\n }\n return options.bridge.getClient(capability, options.capabilityScope) as CapabilityClient<C>;\n },\n });\n}\n","// Window → SharedWorker 的 v4 双向连接。\n\nimport type { CapabilityBridge, CapabilityClient, CapabilityPeer, RemoteCapability, ServiceReference } from \"../contracts/capability.js\";\nimport { capabilityKey } from \"../contracts/capability.js\";\nimport type { LifecycleDisposeResult, RuntimeSnapshot } from \"../contracts/lifecycle.js\";\nimport { WebLoomError } from \"../contracts/lifecycle.js\";\nimport { createCapabilityPeerView, createPeerScopeView } from \"./peerView.js\";\nimport { cloneFrozenAttributes, createRuntimeBudget, normalizeRuntimeLimits, type RuntimeBudget, type RuntimeLimitsInput } from \"../transport/dto.js\";\nimport type { WindowApp, RuntimeHandle, RuntimeStatusListener, RuntimeStatusSnapshot } from \"./runtimeTypes.js\";\nimport { RuntimeUnavailableError } from \"./runtimeTypes.js\";\nimport { createCapabilityBridge } from \"../transport/serviceBridge.js\";\nimport { createMessagePortRuntimeTransport, type MessagePortLike } from \"../transport/messagePortServiceTransport.js\";\nimport { createMessagePortServiceProvider } from \"../transport/messagePortServiceProvider.js\";\nimport { invokeCapabilityHandler } from \"../host/capabilityRegistry.js\";\nimport { hostForWindowApp } from \"./windowRuntime.js\";\nimport { RUNTIME_ERROR_TYPE, RUNTIME_PROTOCOL_VERSION, RUNTIME_SNAPSHOT_TYPE } from \"./runtimeProtocol.js\";\n\nexport interface SharedWorkerLike {\n /** SharedWorker 主端口。 */\n readonly port: MessagePort;\n /** Worker error callback。 */\n onerror?: (event: Event) => void;\n addEventListener?(type: \"error\", listener: (event: Event) => void): void;\n removeEventListener?(type: \"error\", listener: (event: Event) => void): void;\n}\n\nexport type SharedWorkerFactory = (url: string | URL, options: { type: \"module\"; name?: string; credentials?: RequestCredentials }) => SharedWorkerLike;\n\nexport interface SharedWorkerClientExposure {\n /** 已完成本地初始化的 WindowApp。 */\n readonly app: WindowApp;\n /** 明确暴露给 Worker 的 RPC/stream capability。 */\n readonly expose?: readonly RemoteCapability[];\n}\n\nexport interface ConnectSharedWorkerOptions {\n /** Worker Runtime 逻辑标识。 */\n readonly id: string;\n /** Worker 构建 URL。 */\n readonly url: string | URL;\n /** SharedWorker name。 */\n readonly name?: string;\n /** 请求 credentials。 */\n readonly credentials?: RequestCredentials;\n /** 默认 call 预算。 */\n readonly defaultCallTimeoutMs?: number;\n /** 可信 transport 配额;只能使用默认值或收紧。 */\n readonly limits?: RuntimeLimitsInput;\n /** 可选的页面反向能力。 */\n readonly client?: SharedWorkerClientExposure;\n}\n\ninterface InternalOptions extends ConnectSharedWorkerOptions { readonly workerFactory?: SharedWorkerFactory; }\nconst handleBridges = new WeakMap<object, CapabilityBridge>();\n\nfunction makeWorker(options: InternalOptions): SharedWorkerLike {\n const workerOptions = { type: \"module\" as const, ...(options.name !== undefined ? { name: options.name } : {}), ...(options.credentials !== undefined ? { credentials: options.credentials } : {}) };\n if (options.workerFactory) return options.workerFactory(options.url, workerOptions);\n const WorkerConstructor = (globalThis as unknown as { SharedWorker?: new (url: string | URL, options: typeof workerOptions) => SharedWorkerLike }).SharedWorker;\n if (!WorkerConstructor) throw new RuntimeUnavailableError(\"SharedWorker is not supported by this browser\");\n return new WorkerConstructor(options.url, workerOptions);\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error); }\n\nfunction snapshotForClient(app: WindowApp, runtimeId: string, runtimeInstanceId: string, exposed: readonly RemoteCapability[], revision: number): RuntimeSnapshot & { readonly type: typeof RUNTIME_SNAPSHOT_TYPE } {\n const allowed = new Set(exposed.map((capability) => capabilityKey(capability)));\n const state = app.state();\n const runtimeState: RuntimeSnapshot[\"state\"] = state.state === \"disconnected\" ? \"failed\" : state.state;\n return {\n type: RUNTIME_SNAPSHOT_TYPE,\n protocolVersion: RUNTIME_PROTOCOL_VERSION,\n runtimeId,\n runtimeKind: \"window-main\",\n runtimeInstanceId,\n revision,\n state: runtimeState,\n units: state.units,\n services: runtimeState === \"ready\" ? state.services.filter((service) => allowed.has(capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))).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 };\n}\n\nfunction connectInternal(options: InternalOptions): RuntimeHandle {\n if (!options || typeof options.id !== \"string\" || options.id.trim() === \"\") throw new TypeError(\"SharedWorker runtime id must be a non-empty string\");\n const requestedClientHost = options.client ? hostForWindowApp(options.client.app) : undefined;\n const exposed = options.client?.expose ?? [];\n for (const capability of exposed) {\n if ((capability as { readonly kind?: string }).kind !== \"rpc\" && (capability as { readonly kind?: string }).kind !== \"stream\") throw new TypeError(`Capability \"${(capability as { readonly id?: string }).id ?? \"unknown\"}\" is not remotely exposable`);\n if (!requestedClientHost?.capabilities.registration(capability)) throw new TypeError(`Capability \"${capability.id}\" is not registered by the WindowApp`);\n }\n const worker = makeWorker(options);\n const port = worker.port;\n if (!port) throw new RuntimeUnavailableError(\"SharedWorker did not expose a MessagePort\");\n const limits = normalizeRuntimeLimits(options.limits);\n const transport = createMessagePortRuntimeTransport({\n addEventListener(type, listener) { port.addEventListener(type, listener); },\n removeEventListener(type, listener) { port.removeEventListener(type, listener); },\n postMessage(messageValue, transfer) { (port as unknown as MessagePortLike).postMessage(messageValue, transfer ? [...transfer] : undefined); },\n start() { port.start(); },\n close() { try { port.close(); } catch { /* noop */ } },\n }, { limits });\n const outboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const inboundBudget: RuntimeBudget = createRuntimeBudget(limits);\n const bridge = createCapabilityBridge({ transport, remoteRuntimeKind: \"shared-worker\", remoteRuntimeId: options.id, defaultCallTimeoutMs: options.defaultCallTimeoutMs, limits, budget: outboundBudget });\n const listeners = new Set<RuntimeStatusListener>();\n const workerInstanceId = { value: \"\" };\n const localRuntimeInstanceId = options.client?.app.runtimeInstanceId ?? `window:${Date.now().toString(36)}`;\n let revision = 0;\n let disposed = false;\n let current: RuntimeStatusSnapshot = Object.freeze({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: options.id, runtimeKind: \"shared-worker\", runtimeInstanceId: \"\", state: \"starting\", revision: 0, units: [], services: [] });\n const clientHost = requestedClientHost;\n const clientPeerScope = options.client && clientHost\n ? clientHost.rootScope.child(\"peer\", { attributes: { peerId: `peer:${Date.now().toString(36)}:${Math.random().toString(36).slice(2)}` } })\n : undefined;\n const clientPeerScopeView = clientPeerScope ? createPeerScopeView(clientPeerScope) : undefined;\n const clientPeer: CapabilityPeer | undefined = clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n capabilityScope: clientPeerScope,\n }) : undefined;\n const provider = options.client && clientHost ? createMessagePortServiceProvider({\n transport,\n peerScope: clientPeerScope,\n peer: clientPeer,\n budget: inboundBudget,\n limits,\n services: () => clientHost.serviceReferences().filter((service) => exposed.some((capability) => capabilityKey(capability) === capabilityKey({ kind: service.kind, id: service.capabilityId, version: service.contractVersion }))),\n peerForCall: (_call, reference) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n return clientPeerScope && clientPeerScopeView ? createCapabilityPeerView({\n peerId: clientPeerScope.identity.attributes.peerId as string,\n scope: clientPeerScopeView,\n bridge,\n allowed: registration?.peerDependencies ?? [],\n capabilityScope: clientPeerScope,\n }) : undefined;\n },\n prepareRequest: (call) => {\n const registration = clientHost.capabilities.registration({ kind: call.mode === \"stream\" ? \"stream\" : \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== (call.mode === \"stream\" ? \"stream\" : \"rpc\")) throw new WebLoomError(\"service_stale\", \"Window service exposure is stale\", \"dispatch\");\n const capability = registration.capability as typeof registration.capability & { request: { parse(value: unknown): unknown }; transfer?: { request?: (value: unknown) => readonly Transferable[] } };\n let value: unknown;\n try { value = capability.request.parse(call.request); } catch { throw new WebLoomError(\"request_validation_failed\", \"Capability request failed validation\", \"receive\"); }\n return { value, transfer: capability.transfer?.request?.(value) };\n },\n handleCall: async ({ request, reference, signal, deadlineAt, peer }) => {\n const registration = clientHost.capabilities.registration({ kind: reference.kind, id: reference.capabilityId, version: reference.contractVersion });\n if (!registration) throw new WebLoomError(\"service_stale\", \"Window exposure is no longer available\", \"dispatch\");\n const handler = registration.handler as ((value: unknown, context: import(\"../contracts/capability.js\").HandlerCallContext) => unknown | Promise<unknown>) | undefined;\n if (!handler) throw new WebLoomError(\"service_stale\", \"Window service handler is unavailable\", \"dispatch\");\n return handler(request, { signal, deadlineAt, reference, origin: \"remote\", peer });\n },\n prepareResult: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"rpc\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"rpc\") throw new Error(\"Window RPC registration disappeared\");\n const rpc = registration.capability as typeof registration.capability & { response: { parse(value: unknown): unknown }; transfer?: { response?: (value: unknown) => readonly Transferable[] } };\n const parsed = rpc.response.parse(value);\n return { value: parsed, transfer: rpc.transfer?.response?.(parsed) };\n },\n prepareItem: (value, call) => {\n const registration = clientHost.capabilities.registration({ kind: \"stream\", id: call.capabilityId, version: call.contractVersion });\n if (!registration || registration.capability.kind !== \"stream\") throw new Error(\"Window stream registration disappeared\");\n const stream = registration.capability as typeof registration.capability & { item: { parse(value: unknown): unknown }; transfer?: { item?: (value: unknown) => readonly Transferable[] } };\n const parsed = stream.item.parse(value);\n return { value: parsed, transfer: stream.transfer?.item?.(parsed) };\n },\n }) : undefined;\n\n const emit = (next: RuntimeStatusSnapshot): void => { current = Object.freeze({ ...next, units: Object.freeze([...next.units]), services: Object.freeze([...next.services]) }); for (const listener of [...listeners]) { try { listener(current); } catch { /* observer isolation */ } } };\n const sendClientSnapshot = (): void => { if (!options.client || disposed) return; revision += 1; try { transport.send(snapshotForClient(options.client.app, `${options.client.app.runtimeId}`, localRuntimeInstanceId, exposed, revision)); } catch { /* bridge deadline handles disconnect */ } };\n const removeRaw = transport.subscribe((messageValue) => {\n if (messageValue.type === RUNTIME_SNAPSHOT_TYPE && messageValue.runtimeKind === \"shared-worker\") {\n const applied = bridge.applySnapshot(messageValue);\n if (applied.accepted) {\n workerInstanceId.value = messageValue.runtimeInstanceId;\n emit({ protocolVersion: RUNTIME_PROTOCOL_VERSION, runtimeId: messageValue.runtimeId, runtimeKind: messageValue.runtimeKind, runtimeInstanceId: messageValue.runtimeInstanceId, state: messageValue.state, revision: messageValue.revision, units: messageValue.units, services: messageValue.services });\n }\n } else if (messageValue.type === RUNTIME_ERROR_TYPE) {\n bridge.invalidate(messageValue.message);\n emit({ ...current, state: \"failed\", error: messageValue.message, units: [], services: [] });\n }\n });\n const onError = (): void => { if (!disposed) { clientPeerScope?.revoke(\"SharedWorker disconnected\"); provider?.dispose(); bridge.disconnect(\"SharedWorker disconnected\"); emit({ ...current, state: \"disconnected\", runtimeInstanceId: \"\", revision: 0, units: [], services: [], error: \"SharedWorker disconnected\" }); } };\n port.addEventListener(\"messageerror\", onError);\n if (worker.addEventListener) worker.addEventListener(\"error\", onError);\n else worker.onerror = onError;\n sendClientSnapshot();\n const removeClient = options.client?.app.subscribe(() => sendClientSnapshot());\n\n const handle: RuntimeHandle = {\n runtimeKind: \"shared-worker\", runtimeId: options.id,\n get runtimeInstanceId() { return workerInstanceId.value; },\n state: () => current,\n capability<C extends RemoteCapability>(capability: C): CapabilityClient<C> { return bridge.getClient(capability); },\n optionalCapability<C extends RemoteCapability>(capability: C): CapabilityClient<C> | undefined { return bridge.services().some((service) => service.kind === capability.kind && service.capabilityId === capability.id && service.contractVersion === capability.version) ? bridge.getClient(capability) : undefined; },\n inspect: () => Object.freeze({ ...current, pendingCallCount: bridge.pendingCallCount, activeStreamCount: bridge.activeStreamCount, peerCount: current.state === \"ready\" ? 1 : 0 }),\n subscribe(listener) { listeners.add(listener); listener(current); return () => listeners.delete(listener); },\n dispose(reason = \"SharedWorker connection disposed\"): Promise<void> { if (disposed) return Promise.resolve(); disposed = true; emit({ ...current, state: \"stopping\" }); removeClient?.(); removeRaw(); clientPeerScope?.revoke(reason); provider?.dispose(); bridge.dispose(reason); port.removeEventListener(\"messageerror\", onError); worker.removeEventListener?.(\"error\", onError); transport.close?.(); emit({ ...current, state: \"disposed\", runtimeInstanceId: \"\", revision: 0, units: [], services: [] }); return clientPeerScope ? clientPeerScope.dispose({ reason }).then(() => undefined) : Promise.resolve(); },\n };\n handleBridges.set(handle as object, bridge);\n return handle;\n}\n\n/** 同步创建 RuntimeHandle;ready 由 state/capability Promise 观察。 */\nexport function connectSharedWorker(options: ConnectSharedWorkerOptions): RuntimeHandle { return connectInternal(options); }\n\n/** testing 入口才允许注入可控 Worker 工厂。 */\nexport function connectSharedWorkerForTesting(options: ConnectSharedWorkerOptions, workerFactory: SharedWorkerFactory): RuntimeHandle { return connectInternal({ ...options, workerFactory }); }\n\n/** advanced 装配层取得连接 bridge;普通 RuntimeHandle 不暴露该实现细节。 */\nexport function bridgeForRuntimeHandle(handle: RuntimeHandle): CapabilityBridge {\n const bridge = handleBridges.get(handle as object);\n if (!bridge) throw new Error(\"RuntimeHandle is not owned by WebLoom\");\n return bridge;\n}\n"]}