在 App 中使用 Kit
当 App 需要共享 Nimi UI、auth、shell glue、telemetry、model configuration 或可复用 feature surface 时,使用 @nimiplatform/kit。App 代码应该通过 kit/package.json 里的公开 subpath 导入 Kit;不要导入 kit/**/src,也不要在 App 本地复制 Kit 已经拥有的能力。
安装
生成的 Nimi App scaffold 已经依赖 Kit。如果一个 standalone App 还没有 Kit,把它和 SDK 一起安装:
pnpm add @nimiplatform/kit @nimiplatform/sdkKit 要求 React 19。react-dom、react-i18next 和 electron 是特定 subpath 使用的 peer dependency。
公开导入组
| 需要 | 从哪里导入 |
|---|---|
| 共享 UI primitives、themes、accessibility、motion | @nimiplatform/kit/ui、@nimiplatform/kit/ui/a11y、@nimiplatform/kit/ui/motion、已列出的 theme CSS exports |
| Runtime account login 与 auth UI | @nimiplatform/kit/auth |
| 纯逻辑 helper | 已枚举的 @nimiplatform/kit/core/... subpaths |
| 标准 shell renderer bridge | @nimiplatform/kit/shell/renderer/bridge、@nimiplatform/kit/shell/renderer/bootstrap |
| Electron host bridge | @nimiplatform/kit/shell/electron/main、@nimiplatform/kit/shell/electron/preload |
| Telemetry 与 error boundary | @nimiplatform/kit/telemetry、@nimiplatform/kit/telemetry/error-boundary |
| Chat、avatar、model picker、model config、generation、commerce | 已枚举的 @nimiplatform/kit/features/... subpaths |
Kit 不发布 wildcard subpaths。完整公开导入清单以 kit/package.json 的 exports 对象为准。
UI 和主题
import { Button, IconButton, Dialog, cn } from '@nimiplatform/kit/ui';
import { VISUALLY_HIDDEN_CLASS_NAME, VISUALLY_HIDDEN_STYLE } from '@nimiplatform/kit/ui/a11y';
import { usePrefersReducedMotion } from '@nimiplatform/kit/ui/motion';@import '@nimiplatform/kit/ui/styles.css';
@import '@nimiplatform/kit/ui/themes/light.css';
@import '@nimiplatform/kit/ui/themes/nimi-accent.css';应用一个 base theme(light.css 或 dark.css),并按需叠加 Nimi accent overlay。不要在 App CSS 里重新定义 Kit token 名称。
Shell 和 Auth
Renderer app code 使用 renderer-safe shell exports:
import { invokeTauri } from '@nimiplatform/kit/shell/renderer/bridge';
import { resolveBootstrapAuthSession } from '@nimiplatform/kit/shell/renderer/bootstrap';Electron main/preload code 使用 Electron-only exports:
import { createElectronRuntimeBridgeCommandNames } from '@nimiplatform/kit/shell/electron/main';
import { installNimiElectronRuntimeBridge } from '@nimiplatform/kit/shell/electron/preload';不要从 renderer app code 导入 Electron host modules。不要在 shell code 里调用 Runtime private API;shell bridge 保持 SDK 和 standard capability boundary。
AI Model Configuration
模型选择和 AIConfig 编辑从 Kit model-config feature 开始:
import { ModelConfigAiModelHub } from '@nimiplatform/kit/features/model-config/ui';
import { useModelConfigProfileController } from '@nimiplatform/kit/features/model-config/headless';
import { createNimiAIConfigStore, createNimiAppAIScopeRef } from '@nimiplatform/sdk/ai';App 拥有 AppModelConfigSurface:scope ref、AIConfig service、provider resolver、projection resolver、local asset source、user profile source 和 i18n。SDK 拥有 AIConfig store 与 scope ref。Kit 拥有可复用 UI、headless contracts 和 profile controller helpers。Runtime 拥有 readiness 与 execution evidence。
复用规则
- 写 App 本地 UI primitives、auth flows、shell glue、telemetry、model config、chat shell、avatar stage、generation panels 或 commerce surfaces 前,先检查 Kit。
- 只使用公开 subpath exports。如果需要的共享行为只存在于
kit/**/src,先给 Kit 增加公开 export,再让 App 消费。 - App-specific layout 和 product workflow 留在 App。
- Runtime execution semantics 留在 Runtime 和 SDK 调用里。
验证
在本仓库:
pnpm --filter @nimiplatform/kit build
pnpm --filter @nimiplatform/kit test
pnpm check:nimi-kit在生成的 App 仓库:
pnpm run validate
pnpm run doctor