Skip to content

运行时控制与对象

JavaScript/TypeScript Preview 4 API 固定运行时控制、对象引用和 WebSocket 二进制帧 helper。运行时无关 helper 位于 @nnrp/core;浏览器包可以通过 @nnrp/browser-client 使用 WASM 支撑的 helper;后端包通过角色包 和传输包接入 native 能力。传输包必须维护自己的传输行为,不只是隐藏实现上的配置开关。

导入

ts
import {
  decodeCacheInvalidateMetadata,
  decodeRuntimeControlMetadata,
  decodeRuntimeObjectMetadata,
  decodeWebSocketBinaryFrame,
  decodeWebSocketBinaryFrameBatch,
  encodeCacheInvalidateMetadata,
  encodeRuntimeControlMetadata,
  encodeRuntimeObjectMetadata,
  encodeWebSocketBinaryFrame,
  NnrpMessageType,
} from "@nnrp/core";

encodeRuntimeControlMetadata

编码一个 Preview 4 控制面 metadata。

参数类型必填说明
messageTypeNnrpMessageTypePreview 4 控制消息类型。
metadata运行时控制 metadatamessageType 匹配的数据结构。
tailUint8Array扩展字节、诊断字节、进度 body 或 partial result body。
返回
Uint8Array
ts
const payload = encodeRuntimeControlMetadata(NnrpMessageType.Progress, {
  operationId: 42n,
  progressSequence: 1n,
  stageCode: 2,
  percentX100: 2500,
  objectId: 0n,
  bodyBytes: 0,
});

decodeRuntimeControlMetadata

解码一个控制面 metadata payload。

参数类型必填说明
messageTypeNnrpMessageType决定 metadata 布局的消息类型。
payloadUint8Arraymetadata 字节和声明的 tail。
返回
DecodedRuntimeControlMetadata

DecodedRuntimeControlMetadata 包含两个只读字段:

字段类型说明
metadataRuntimeControlMetadatamessageType 选择的 metadata 对象。
tailUint8Array已声明诊断、body 或扩展 payload 的独立副本。

encodeRuntimeObjectMetadata

编码对象、对象引用、对象增量、缓存引用和缓存 miss metadata。

参数类型必填说明
messageTypeNnrpMessageTypeObjectDeclareObjectRefObjectReleaseObjectPatchObjectDeltaCacheReferenceCacheMiss
metadata运行时对象 metadatamessageType 匹配的数据结构。
tailUint8Array扩展字节、诊断字节或 delta payload。
返回
Uint8Array

decodeRuntimeObjectMetadata

解码一个运行时对象或缓存 metadata payload。

参数类型必填说明
messageTypeNnrpMessageType决定 metadata 布局的消息类型。
payloadUint8Arraymetadata 字节和声明的 tail。
返回
DecodedRuntimeObjectMetadata

基线缓存失效

Preview4 复用已有的 NNRP/1 CacheInvalidate frame,不再定义第二种 runtime invalidation message。

API参数返回值
encodeCacheInvalidateMetadataCacheInvalidateMetadataUint8Array
decodeCacheInvalidateMetadataUint8ArrayCacheInvalidateMetadata

CacheInvalidateMetadata 的冻结字段为 invalidateScopecacheNamespacecacheKeyHicacheKeyLoreasonCodeCacheLease 是本地校验状态,冻结字段为 objectIdobjectVersionleaseIdownerScopeownerIdgrantedAtMillisttlMillis

高层 Runtime Frame 契约

应用通过 client 或 server session 方法发送 Preview4 控制帧、运行时对象和缓存帧,不需要 自行构造 native request、选择 ABI 符号或拼接 metadata buffer。SDK 校验并编码 typed 参数后, 每个 session 方法只执行一次粗粒度 runtime 调用。

内部 native/WASM binding 方法冻结为:

ts
sendRuntimeFrame(request: NnrpRuntimeFrameSendRequest): void | Promise<void>;

NnrpRuntimeFrameSendRequest 的 readonly 字段为 sessionOptionsmessageTypeframeIdpayloadpayload 是完整编码后的 metadata 与声明 tail。它属于内部 binding 契约;应用 使用 client 和 server 页面记录的具名 session 方法。

Typed Runtime Frame Event

Preview4 入站帧必须在交给应用前完成解码。每个 event 都包含 typemessageTypemetadatasessionId,并按照下表提供语义化 tail 字段。Tail buffer 是 SDK 持有的 Uint8Array 副本;没有 tail 的 event 不提供 tail 字段。

Event type消息Metadata语义化 tail 字段
cancel, abortCancel, AbortControlRequestMetadatadiagnostic
priority-update, deadline, expire-at对应调度消息SchedulingMetadata
supersedeSupersedeSupersedeMetadatadiagnostic
budget-updateBudgetUpdateBudgetMetadata
progressProgressProgressMetadatabody
partial-resultPartialResultPartialResultMetadatabody
backpressure, credit-update对应 pressure 消息PressureMetadata
capability-negotiation, degrade-profile对应 capability 消息CapabilityMetadatabody
route-hint, execution-hint对应 routing 消息RouteHintMetadatabody
trace-contextTraceContextTraceContextMetadatabody
result-drop-reasonResultDropReasonResultDropReasonMetadatadiagnostic
recoverable-errorErrorRecoverableRecoverableErrorMetadatadiagnostic
retry-afterRetryAfterRetryAfterMetadatadiagnostic
object-declareObjectDeclareObjectDescriptorMetadatabody
object-refObjectRefObjectReferenceMetadatabody
object-releaseObjectReleaseObjectReleaseMetadatadiagnostic
object-patch, object-delta对应 object update 消息ObjectDeltaMetadatametadataBody, delta
cache-referenceCacheReferenceCacheReferenceMetadatabody
cache-missCacheMissCacheMissMetadatadiagnostic
cache-invalidateCacheInvalidateCacheInvalidateMetadata

Object patch 和 delta event 由 SDK 在 metadata.metadataBytes 位置切分 wire tail,剩余的 metadata.deltaBytes 字节作为 delta。长度错误必须在 event 交付前失败。既有 submit、result、 lifecycle 和 migration event 与这组 runtime-frame union 保持独立。

encodeWebSocketBinaryFrame

构造 WebSocket 传输层使用的二进制帧。

参数类型必填说明
headerNnrpRuntimeFrameHeadermetadataLengthbodyLength 之外的 header 字段;函数从 buffer 长度推导这两个值。
metadataUint8Arraymetadata payload。
bodyUint8Arraybody payload。
返回
Uint8Array

decodeWebSocketBinaryFrame

拆分一个 WebSocket 二进制帧。

参数类型必填说明
frameUint8Array一个完整 WebSocket binary message。
返回
DecodedRuntimeFrame

decodeWebSocketBinaryFrameBatch

解码本地 buffer 或测试夹具里的连续二进制帧。

参数类型必填说明
batchUint8Array连续帧。
options{ limit?: number }最大解码帧数;0 或省略表示不限制。
返回
DecodedRuntimeFrame[]

运行时控制 Metadata

TypeScript 数值映射

线路字段中的 u64 在 JavaScript API 中使用 bigintu32u16u8i16 使用 number,非整数或超出冻结线路范围的值必须被拒绝。枚举字段使用对应的数值 TypeScript enum。 编码器复制可选 tail;解码器返回独立 Uint8Array,不暴露调用方输入缓冲区的 view。 ProgressMetadata.percentX100 接受 0..10000,以及表示未知值的冻结哨兵 0xffff

RuntimeControlMetadata 是下表全部 metadata interface 的 union。每个 metadata 对象只允许与其所在行列出的 消息类型配对。

类型消息类型冻结字段
ControlRequestMetadataCancel, AbortoperationId, controlSequence, reasonCode, sourceRole, flags, diagnosticBytes
SchedulingMetadataPriorityUpdate, Deadline, ExpireAtoperationId, controlSequence, priorityClass, priorityDelta, deadlineUnixMs, flags
SupersedeMetadataSupersedeoldOperationId, newOperationId, controlSequence, dropReasonCode, flags, diagnosticBytes
BudgetMetadataBudgetUpdateoperationId, computeBudgetUnits, memoryBudgetBytes, bandwidthBudgetBytes, tokenBudget, flags
ProgressMetadataProgressoperationId, progressSequence, stageCode, percentX100, objectId, bodyBytes
PartialResultMetadataPartialResultoperationId, resultSequence, objectId, deltaSequence, bodyBytes, flags
PressureMetadataBackpressure, CreditUpdatescopeId, creditWindow, pressureLevel, pressureReason, retryAfterMs, flags
CapabilityMetadataCapabilityNegotiation, DegradeProfileprofileId, capabilityCount, costModelId, preferenceRank, limitBytes, limitUnits, bodyBytes, flags
RouteHintMetadataRouteHint, ExecutionHintoperationId, routeId, executorClass, affinityClass, deadlineUnixMs, bodyBytes, flags
TraceContextMetadataTraceContexttraceId, spanId, parentSpanId, stageCode, flags, bodyBytes
ResultDropReasonMetadataResultDropReasonoperationId, resultSequence, dropReasonCode, sourceRole, flags, diagnosticBytes
RecoverableErrorMetadataErrorRecoverableerrorCode, errorScope, recoveryAction, sourceRole, flags, retryAfterMs, relatedSessionId, relatedFrameId, relatedViewId, diagnosticBytes
RetryAfterMetadataRetryAfterscopeId, controlSequence, retryAfterMs, jitterMs, reasonCode, sourceRole, flags, diagnosticBytes

运行时对象 Metadata

类型消息类型冻结字段
ObjectDescriptorMetadataObjectDeclareobjectId, objectKind, producerRole, consumerRole, sessionId, byteSize, computeCostUnits, memoryLocationHint, ownershipHint, lifetimeHintMs, metadataBytes
ObjectReferenceMetadataObjectRefobjectId, operationId, objectVersion, offset, length, flags, metadataBytes
ObjectReleaseMetadataObjectReleaseobjectId, operationId, releaseReason, sourceRole, flags, diagnosticBytes
ObjectDeltaMetadataObjectPatch, ObjectDeltaobjectId, deltaSequence, regionOffset, regionBytes, deltaBytes, flags, metadataBytes
CacheReferenceMetadataCacheReferencecacheKeyHi, cacheKeyLo, profileId, reuseScope, leaseId, producerTraceId, expirationHintMs, metadataBytes, flags
CacheMissMetadataCacheMisscacheKeyHi, cacheKeyLo, missReason, profileId, diagnosticBytes

运行时枚举

枚举成员
RuntimeObjectKindUnspecified, Tensor, TokenBlock, ImageTile, FeatureMap, ToolResult, TraceSegment, OpaqueBytes, DocumentChunk, AudioChunk, VideoChunk, RoutePlan, CacheManifest
RuntimeRoleUnspecified, Client, Server, Runtime, Subagent, Tool, Scheduler, ConformanceRunner
ErrorScopeConnection, Session, Frame
MemoryLocationHintUnspecified, HostMemory, DeviceMemory, SharedMemory, RemoteMemory, MmapFile, ObjectStore
OwnershipHintUnspecified, ProducerOwned, ConsumerOwned, SessionOwned, Borrowed, TransferOnRef, ReleaseOnDrop
ObjectReleaseReasonCompleted, Cancelled, Expired, Replaced, Invalidated, OwnerClosed, LeaseExpired, ConformanceInjection
CacheReuseScopeOperation, Session, Connection, Global, Tenant, Profile
CacheMissReasonUnknown, NotFound, Expired, Invalidated, SchemaMismatch, ProducerUnavailable, LeaseRequired, PermissionDenied

NnrpRuntimeFrameHeader

字段类型说明
messageTypeNnrpMessageType帧消息类型。
flagsnumberHeader flags。
sessionIdnumberSession id。
generationnumberSession generation。
frameIdnumberFrame id。

NNRP Documentation