Skip to content

共享类型 ​

@nimiplatform/sdk/types 承载所有其他 SDK 子路径都用到的共享公开类型。它是小而稳的构建块层;SDK 中跨子路径的内容,凡是 types 已经导出的,就不再自己创建一套。

这里放什么 ​

types 子路径导出使用方在不导入私有内部的前提下谈论 Nimi 所需要的跨切面符号。

符号用途
NimiErrorSDK 调用方面对的强类型错误 surface
ScopeName强类型作用域标识
ExternalPrincipalId强类型外部 Principal 标识
Runtime idsWorldId、CharacterId、LocalAgentId、ConversationId、JobId 等
流式基础协议四种流式模式对应的强类型形状
多模态基础协议ArtifactId、规范产物字段类型

确切清单由 SDK 内核 surface 契约准入;新增类型需要内核准入。

集中类型为什么重要 ​

没有共享类型,每个子路径都可能用相似形状重声明 Character 与 LocalAgent reference,强类型系统会因此意外退化成弱类型。

@nimiplatform/sdk/types 集中类型,能在所有公开 surface 之间保留同一个名义类型。Realm 的 Character reference 与 Runtime 的 LocalAgent reference 保持为不同的强类型身份,不会变成凑巧形状一致的双胞胎。

边界规则 ​

规则原因
其他子路径不重声明 types 中的类型防漂移
types 不从其他子路径导入处在依赖图的最底层
types 不依赖传输(@nimiplatform/sdk/runtime)或适配(@nimiplatform/sdk/realm)保持类型可移植
新增类型需要内核准入与其他 surface 同样的准入纪律

读者场景:保持身份 owner 分离 ​

App 通过 Realm surface 读取 Character reference,随后使用 Runtime 返回的 LocalAgent reference 执行。

  1. Realm 读取。 App 收到 CharacterId。
  2. Runtime 物化。 Runtime 解析或物化对应 LocalAgent,并返回 LocalAgentId。
  3. Conversation 调用。 App 把 LocalAgentId 与 ConversationId 一起使用。
  4. 无静默强转。 编译器不会让 Character id 冒充 LocalAgent id。

共享类型层保留 Realm/Runtime owner 边界。

读者场景:强类型错误传到 App 代码 ​

一次 runtime 调用以契约失败告终。

  1. Runtime 发出强类型错误。 通过 SDK 错误转换,错误成为带 reason code 的 NimiError。
  2. App 导入 NimiError。 来自 @nimiplatform/sdk/types。
  3. 类型收窄。 App 在 reason code 上做模式匹配以决定 UX 行为。
ts
import { NimiError } from '@nimiplatform/sdk/types';

try {
  await model.generateText(...);
} catch (err) {
  if (err instanceof NimiError) {
    // typed reason code
    if (err.reasonCode === 'AUTH_TOKEN_EXPIRED') { ... }
    if (err.reasonCode === 'AUTH_UNSUPPORTED_PROOF_TYPE') { ... }
  }
}

错误是强类型的,因为它来自 @nimiplatform/sdk/types,不是因为 App 自己猜出来的。具体的 reason code 清单由 SDK 内核准入。

读者场景:库作者新增 helper ​

一位库作者想写一个接受任意 Nimi 标识的 helper。

  1. 从 @nimiplatform/sdk/types 导入。 依赖 @nimiplatform/sdk/types,不依赖 @nimiplatform/sdk/runtime 或 @nimiplatform/sdk/realm。
  2. Helper 接受 CharacterId | LocalAgentId | WorldId | ConversationId。 这是来自 @nimiplatform/sdk/types 的强类型联合。
  3. 库可编译。 没有传输依赖;不会引入 runtime;可移植。

如果一个库为了类型信息去依赖 @nimiplatform/sdk/runtime,就会把整个传输层拖进它的使用者。从 @nimiplatform/sdk/types 引入,能让依赖图保持轻薄。

types 的排除项 ​

不收录原因
方法函数那些在 @nimiplatform/sdk/runtime、@nimiplatform/sdk/realm 等子路径
传输内部信息(例如 gRPC 元数据)归传输层所有,不属于 App 请求类型
Provider 名是 catalog 数据,不是类型系统
世界内容(规则、Character 等)是内容,不是类型

来源依据 ​

Nimi 文档:可安装、开源、本地优先的个人 AI 产品。