Skip to content

JavaScript/TypeScript 核心 API

@nnrp/core 包含 JavaScript role package 与 transport package 共享的运行时无关类型和 helper。

常量

名称类型
NNRP_PROTOCOL_NAME"NNRP"协议名。
NNRP_PROTOCOL_VERSION"1.0.0"协议版本。
NNRP_STANDARD_INPUT_PROFILESreadonly tupletensortokenstructured_eventtool_delta

createCapabilityManifest

创建按 build mode 区分的 capability manifest。

参数类型必填说明
optionsNnrpCapabilityManifestOptionsBuild mode、transport 和 capability claim。
返回
NnrpCapabilityManifest

createBackendNativeManifest

创建默认 backend native capability manifest。

参数类型必填说明
capabilitiesreadonly NnrpCapability[]额外 capability claim。
返回
NnrpCapabilityManifest

createBrowserWasmManifest

创建默认 browser WASM capability manifest。

参数类型必填说明
capabilitiesreadonly NnrpCapability[]额外 capability claim。
返回
NnrpCapabilityManifest

selectTransport

使用冻结 transport comparator 构造、筛选并排序 provider candidates,再选择 rank 0。没有 provider 可选时抛出 NnrpTransportSelectionError,其 candidates 保留完整有序诊断列表。

参数类型必填说明
providersreadonly NnrpTransportProviderDescriptor[]已安装的 provider descriptors。
optionsNnrpTransportSelectionOptionsPeer 支持、策略、限制、readiness 与 probe 数据。
返回
NnrpTransportSelection

createTransportCandidates

根据 provider descriptors 与冻结 selection evidence 创建 candidates,但不执行最终选择。

参数类型必填说明
providersreadonly NnrpTransportProviderDescriptor[]已安装的 provider descriptors。
optionsNnrpTransportSelectionOptionsPeer 支持、策略、限制、readiness 与 probe 数据。
返回
readonly NnrpTransportCandidate[]

createTransportSelectionSummary

创建供诊断、conformance 和 benchmark 使用的精简 selection summary。

参数类型必填说明
selectionNnrpTransportSelection完整 selection 对象。
返回
NnrpTransportSelectionSummary

parseApplicationEndpoint

解析并校验公开的应用 endpoint。该函数只接受 nnrp://nnrps://,返回保留 authority、path、query 与安全意图的 URL

参数类型必填说明
endpointstring | URL公开 NNRP 应用 endpoint。
返回可能抛出
URLendpoint 为空、格式错误或使用 Provider-local scheme 时抛出 NnrpProtocolError

resolveProviderEndpoint

在 Provider 选择完成后解析 carrier-local endpoint。TCP 与 QUIC 从应用 endpoint 的 authority 派生 host:port,未声明端口时使用 4433;IPC 与 WebSocket 必须提供匹配的显式 Provider endpoint。

参数类型必填说明
endpointstring | URL公开 nnrp://nnrps:// endpoint。
transportNnrpTransportKind已选择的 carrier。
providerEndpointstring | URL显式 carrier-local endpoint。
返回可能抛出
string所选 carrier 无法解析传入 locator 时抛出 NnrpTransportError

normalizeSubmitRequest

校验并规范化 submit payload。

参数类型必填说明
requestNnrpSubmitRequestSubmit request。
optionsNormalizeSubmitRequestOptionsPayload copy 和 strict profile 选项。
返回可能抛出
NnrpNormalizedSubmitRequestNnrpProtocolError

Cache 与 Schema Helper

函数参数返回值说明
createCacheKeykind: NnrpCacheObjectKindkey: bigint | number | stringnamespaceId?: numberNnrpCacheKey创建 submit 与 cache 操作使用的规范 128-bit cache identity。
createSchemaDescriptordescriptor: NnrpSchemaDescriptorNnrpSchemaDescriptor校验并快照 schema descriptor。
normalizeCachePutRequestrequest: NnrpCachePutRequestNnrpCachePutRequest校验 cache identity、lease、payload 与 metadata。
normalizeCacheInvalidateRequestrequest: NnrpCacheInvalidateRequestNnrpCacheInvalidateRequest校验显式 cache invalidation 请求。
isStandardInputProfileprofile: stringprofile is NnrpInputProfile判断 profile 是否属于 NNRP_STANDARD_INPUT_PROFILES

Recovery 与 Session Helper

函数参数返回值说明
createRecoveryTokentoken: string | NnrpBinaryPayloadmetadata?: Readonly<Record<string, string>>NnrpRecoveryToken创建拥有独立所有权的 recovery token 与 metadata 快照。
normalizeSessionMigrationRequestrequest: NnrpSessionMigrationRequestNnrpSessionMigrationRequest校验 session migration 的目标和 recovery token。
throwIfResultDropevent: NnrpRuntimeEventvoidevent 表示结果被丢弃时抛出 NnrpResultDropError
validateSessionMetadataoptions?: NnrpSessionMetadataOptionsvoid校验 profile、cadence、quality 与 metadata。
normalizeSessionPatchRequestrequest: NnrpSessionPatchRequestNnrpSessionPatchRequest校验并快照 session metadata 或 flow-control patch。

NnrpSessionRecoveryTicket

NnrpSessionRecoveryTicketresumeSession 使用的 runtime opaque 签发值。应用可以持久化它, 但不能构造或修改内部 resume token。

成员参数返回值说明
toBytes()Uint8Array编码规范 little-endian NRTK version 1 envelope。
NnrpSessionRecoveryTicket.fromBytes(encoded)encoded: Uint8ArrayNnrpSessionRecoveryTicket校验并解码一个精确 NRTK envelope。

Readonly semantic 字段为 sessionId、防御性复制的 resumeToken、可选的 resumeFromOperationIdresumeWindowMillis。错误 magic/version、reserved flag、零 session id、空 token、截断和 trailing bytes 都必须拒绝。

validateEventPollOptions

校验事件轮询选项。

参数类型必填说明
optionsNnrpEventPollOptionsTimeout 选项。
返回可能抛出
voidtimeout 非法时抛出 NnrpProtocolError

数据类型

Capability 与 Transport

类型说明
NnrpBuildMode"backend-native" | "browser-wasm"
NnrpTransportKind"tcp" | "quic" | "ipc" | "websocket"
NnrpTransportPolicy"auto""prefer-quic""prefer-tcp""prefer-ipc""prefer-websocket" 以及四种对应的 force-* 值。
NnrpCapabilityclient.sessionserver.sessionnative.loaderwasm.loadercacheschemarecovery 等能力声明。
NnrpCapabilityManifest协议名/版本、build mode、transports 和 capabilities。
NnrpTransportProviderCost冻结的 provider modelIdunits
NnrpTransportProviderLimits冻结的 provider maxFrameBytes
NnrpTransportProviderLimitation七个已注册 limitation 字符串的 union。
NnrpTransportProviderMetadataProvider id、cost、preference rank、limits 与已注册 limitations。
NnrpTransportProviderDescriptorProvider 名称/版本、transport identity、实现类型、可用性、元数据,以及可选的 native library path 或诊断。
NnrpTransportCandidateReadinessProvider identity、route/security readiness 与可选 diagnostic。
NnrpTransportProbeState"not-run" | "succeeded" | "failed" | "missing"
NnrpTransportProbeMetrics样本/成功数、吞吐中位数与 RTT 中位数。
NnrpTransportProbeObservationProvider identity、成功/失败 state、可选 metrics 与可选 diagnostic。
NnrpTransportRejectionReason八个已注册 rejection 字符串的 union。
NnrpTransportCandidateProvider 元数据、可用性、peer/limit eligibility、probe 状态/指标、selection rank、拒绝原因与诊断。
NnrpTransportSelectionSummary被选中的 transport 和 rejected candidates。
NnrpTransportSelectionError携带 code、字符串 diagnostic、可选 policy / transportId 与有序 candidates 的类型化错误;强制策略失败会标明 transport。

NnrpTransportCandidate 使用传输策略与探测规范字段的 camelCase 形式: transportIdproviderlocalAvailablepeerSupportedwithinLimitsprobeState、可选 probe、可选 selectionRank、可选 rejectionReason 和可选 diagnostic。公共类型不含不透明 score 字段。

ts
type NnrpTransportProviderLimitation =
  | "requires-udp"
  | "requires-tcp"
  | "local-host-only"
  | "native-host-only"
  | "browser-host-only"
  | "unix-domain-socket"
  | "windows-named-pipe";
type NnrpTransportProbeState = "not-run" | "succeeded" | "failed" | "missing";
type NnrpTransportRejectionReason =
  | "policy-disallowed"
  | "local-unavailable"
  | "peer-unsupported"
  | "limit-exceeded"
  | "route-unresolved"
  | "security-unsatisfied"
  | "probe-missing"
  | "probe-failed";

interface NnrpTransportProviderCost {
  readonly modelId: number;
  readonly units: bigint;
}
interface NnrpTransportProviderLimits {
  readonly maxFrameBytes: bigint;
}
interface NnrpTransportProviderMetadata {
  readonly id: string;
  readonly cost: NnrpTransportProviderCost;
  readonly preferenceRank: number;
  readonly limits: NnrpTransportProviderLimits;
  readonly limitations: readonly NnrpTransportProviderLimitation[];
}
type NnrpTransportProviderKind = "pure-rust" | "native-dynamic" | "wasm";
interface NnrpTransportProviderDescriptor {
  readonly name: string;
  readonly version: string;
  readonly transportId: NnrpTransportKind;
  readonly kind: NnrpTransportProviderKind;
  readonly available: boolean;
  readonly libraryPath?: string;
  readonly metadata: NnrpTransportProviderMetadata;
  readonly diagnostic?: string;
}
interface NnrpTransportCandidateReadiness {
  readonly transportId: NnrpTransportKind;
  readonly providerId: string;
  readonly routeResolved: boolean;
  readonly securitySatisfied: boolean;
  readonly diagnostic?: string;
}
interface NnrpTransportProbeMetrics {
  readonly sampleCount: number;
  readonly successCount: number;
  readonly medianThroughputBytesPerSecond: bigint;
  readonly medianRttMicroseconds: bigint;
}
interface NnrpTransportProbeObservation {
  readonly transportId: NnrpTransportKind;
  readonly providerId: string;
  readonly state: "succeeded" | "failed";
  readonly metrics?: NnrpTransportProbeMetrics;
  readonly diagnostic?: string;
}
interface NnrpTransportCandidate {
  readonly transportId: NnrpTransportKind;
  readonly provider: NnrpTransportProviderMetadata;
  readonly localAvailable: boolean;
  readonly peerSupported: boolean;
  readonly withinLimits: boolean;
  readonly probeState: NnrpTransportProbeState;
  readonly probe?: NnrpTransportProbeMetrics;
  readonly selectionRank?: number;
  readonly rejectionReason?: NnrpTransportRejectionReason;
  readonly diagnostic?: string;
}
interface NnrpTransportSelectionOptions {
  readonly peerSupportedTransports: readonly NnrpTransportKind[];
  readonly policy: NnrpTransportPolicy;
  readonly requestedMaxFrameBytes?: bigint;
  readonly candidateReadiness: readonly NnrpTransportCandidateReadiness[];
  readonly probeObservations: readonly NnrpTransportProbeObservation[];
}
interface NnrpTransportSelection {
  readonly selectedProvider: NnrpTransportProviderDescriptor;
  readonly candidates: readonly NnrpTransportCandidate[];
  readonly policy: NnrpTransportPolicy;
  readonly diagnostic?: string;
}

NnrpTransportProviderDescriptor.name 是 provider 自有的 package 名或展示名。Selection、readiness、route lookup 与 reporting 使用 transportId 作为规范 carrier 身份,不得从 name 推导。

peerSupportedTransports 按集合解释,重复项和数组顺序不影响选择;requestedMaxFrameBytes: 0n 是合法值, 并且与省略该属性含义不同。

Provider descriptor 的 (transportId, provider.metadata.id) identity 必须唯一。每个 provider 都必须有 readiness。Readiness 与 probe observation 按 (transportId, providerId) 匹配;重复或无法匹配的 evidence 属于契约错误。缺少 probe observation 与 state 为 "failed" 的 observation 必须保持可区分。

Submit、Result 与 Event

类型说明
NnrpInputProfile标准 profile:tensortokenstructured_eventtool_delta
NnrpSubmitMode"inline" | "object-reference"
NnrpSubmitRequest非零 operationId: bigint、独立的 frameId、payload/tensors、profile、submit mode、cache key、descriptor 与 metadata。
NnrpResult非零 operation id、规范 terminal state 与闭合的 runtime-or-lifecycle 终态证据。
NnrpRuntimeEvent完整 wire header、typed metadata union 与 semantic tail。
NnrpClientEvent只包含一个 runtime 或 lifecycle event 的闭合客户端联合类型。
NnrpEventPollOptions可选 timeoutMillis
ts
interface NnrpResult {
  readonly operationId: bigint;
  readonly terminalState: NnrpResultTerminalState;
  readonly event: NnrpTerminalEvent;
}

type NnrpTerminalEvent =
  | { readonly type: "runtime"; readonly event: NnrpRuntimeEvent }
  | { readonly type: "lifecycle"; readonly event: NnrpOperationLifecycleEvent };

type NnrpClientEvent =
  | { readonly type: "runtime"; readonly event: NnrpRuntimeEvent }
  | { readonly type: "lifecycle"; readonly event: NnrpOperationLifecycleEvent };

interface NnrpOperationLifecycleEvent {
  readonly operationId: bigint;
  readonly state: NnrpOperationState;
}

NnrpResultTerminalState 固定为 "success" | "cancelled" | "dropped" | "error"NnrpOperationState 固定为 "accepted" | "running" | "partial" | "waiting-tool" | "superseded" | "cancelled" | "failed" | "completed"。成功结果保留 RESULT_PUSH,非成功结果 保留建立终态的精确 wire 或本地 lifecycle event。NnrpOperationLifecycleEvent 是本地 role 状态,绝不携带伪造的 NnrpRuntimeFrameHeaderNnrpTerminalEvent 必须恰好包含一个变体;API 不提供 nullable 的并行 runtime/lifecycle 字段。

这些 contract 还公开以下类型:

类型说明
NnrpOperationId使用 bigint 表示的非零 operation identity。
NnrpOperationState上文列出的规范八状态 operation lifecycle。
NnrpSubmitCapacityPolicy本地 submit credit 耗尽时使用的 "reject" | "await" 策略。
NnrpBinaryPayloadUint8Array | ArrayBufferView
NnrpTensorSectionNnrpNormalizedTensorSection请求规范化前后的 tensor byte section。
NnrpPayloadDescriptorPayload 的可选 schema id、content type 与 encoding。
NnrpSchemaFlagNnrpSchemaDescriptor已注册 schema flag 与通过校验的 schema contract。
NnrpCacheKeyNnrpCacheMetadata规范 cache identity 与调用方 metadata。
NnrpCacheOperationStatusacceptedstoredinvalidatedmissrejected
NnrpCachePutRequestNnrpCachePutResult显式 cache put 请求与结果。
NnrpCacheInvalidateRequestNnrpCacheInvalidateResult显式 invalidation 请求与结果。
NnrpRecoveryTokenNnrpSessionMigrationEventRecovery token 与 typed migration lifecycle event。
NnrpSessionMetadataOptionsNnrpSessionFlowControlOptions可复用的 session metadata 与 credit-window 选项。
NnrpFlowUpdateMetadataNnrpResultHintMetadata结构化 flow update 与 result-hint payload。
NnrpAbortSignalLike异步 SDK 方法接受的运行时无关 abort signal。

错误

Class说明
NnrpError带结构化 diagnostic 的基础错误。
NnrpCapabilityErrorCapability、manifest 或 unsupported runtime 错误。
NnrpTransportErrorTransport 错误。
NnrpTimeoutErrorTimeout 错误。
NnrpProtocolError请求形态或协议校验错误。
NnrpResultDropError结果被丢弃时的 typed 终态证据。
NnrpRecoveryErrorRecovery 或 migration capability 错误。

NnrpDiagnosticSource 标识诊断来自 corenativewasmtransportprotocolruntime

NNRP Documentation