Skip to content

Public API 面(Public API Surface)

本清单是「一个 API 是 public 还是 internal」的判定 SSOT。目标是:维护者 10 分钟内能对任意符号做出判断,不需要读实现。

分三档:

档位标签含义
Stable Publicstable / experimental用户侧创作面,承诺 semver(experimental 可在 minor 中调整,调整前在 changelog 明示)
Internalinternal框架内部机制。可读、可调试,但不承诺不 break,任何版本都可能变
Deprecateddeprecated已迁移/不再推荐。保留兼容一个 minor 周期后删除

标注位置:源码 JSDoc(@public / @internal)优先标注入口文件;本清单为完整列表,二者冲突时以本清单为准并提 PR 修正。

Stable Public(承诺 semver)

define* 创作函数

API稳定性来源包一句话
definePluginstable@zhin.js/plugin-runtime约定式插件入口,plugin.ts 默认导出
defineCommandstable@zhin.js/command命令模块(commands/ 下默认导出)
defineAdapterstable@zhin.js/adapter适配器模块(adapters/ 下默认导出),create(context) 返回 Endpoint
defineComponentstable@zhin.js/componentSatori/SSR 组件(components/ 下默认导出)
defineMiddlewarestable@zhin.js/middleware中间件模块(middlewares/ 下默认导出)
defineAgentToolexperimental@zhin.js/tooltools/ 约定);zhin.js/agentagent/tools/*.ts 创作面)AI 工具模块,Agent 自动发现

注意:没有 defineAgentSkill。Agent 技能是纯 Markdown(agent/skills/*.md,由 @zhin.js/skillparseSkillMarkdown 解析),不是代码符号。

约定目录与文件

约定稳定性消费方一句话
plugin.tsstable@zhin.js/plugin-runtime插件根入口,默认导出 definePlugin(...)
commands/stable@zhin.js/command命令模块目录,支持 [name:type] 动态参数段
adapters/stable@zhin.js/adapter适配器模块目录
middlewares/stable@zhin.js/middleware中间件模块目录
tools/experimental@zhin.js/toolAgent 工具目录(defineAgentTool
agent/toolsexperimentalzhin.js/agent authoring文件化 Agent 工具创作面
agent/skillsexperimental@zhin.js/skill / Agent 发现Agent 技能 Markdown(随 npm 包发布)
pages/experimental@zhin.js/console-pageConsole 页面模块目录

Host Token(context.resources.use(token) 消费)

Token稳定性来源包一句话
databaseHostTokenstable@zhin.js/plugin-runtime数据库 Host 能力
scheduleHostTokenstable@zhin.js/plugin-runtime定时任务 Host 能力
outboundHostTokenstable@zhin.js/plugin-runtime跨平台出站消息能力
agentToolsHostTokenexperimental@zhin.js/plugin-runtimeAgent 工具注册 Host 能力
messageGatewayTokenstable@zhin.js/corezhin.js/core/runtime入站消息投递网关(适配器用)
httpHostTokenstable@zhin.js/host-httpHTTP/WS Host 能力(Console、Webhook 用)

Legacy Hooks(兼容保留)

API稳定性来源包一句话
usePlugin() 及配套 Hooks(provide / addCommand / useContext 等)deprecated(见下表)zhin.js@zhin.js/corelegacy 插件体系入口,仍兼容;新代码用约定式

zhin.config.yml 顶层键

稳定性消费方一句话
plugins.<key>stable@zhin.js/cli 装配层插件启用与插件级配置
endpoints[i]stable@zhin.js/cli 装配层适配器实例列表(含 master / trusted / commandPrefix
commandPrefixstableMessageDispatcher命令前缀,实例顶层 + endpoints 逐项覆盖
aistable@zhin.js/cli AI Host 装配AI/Agent 配置
httpstable@zhin.js/host-http 装配HTTP Host 配置
databasestabledatabase Host 装配数据库配置
speechstablespeech Host 装配语音配置
log_levelstable@zhin.js/cli日志级别(ZHIN_LOG_LEVEL 可覆盖)

其余 Host 级键(mcp / a2a / htmlRenderer / assistant / collaboration)同属 stable 顶层键,完整表见 配置概览

CLI 命令

命令稳定性来源包一句话
zhin runtime startstable@zhin.js/cliPlugin Runtime 启动入口(composition root)
zhin setupstable@zhin.js/cli已有项目增量配置向导
zhin doctorstable@zhin.js/cli环境/配置体检
pnpm create zhin-appstablecreate-zhin-app新建项目脚手架

Internal(可读但不承诺不 break)

API稳定性来源包一句话
RootRuntime / RootControllerinternal@zhin.js/plugin-runtime插件树与 generation 的根控制器
CapabilitySlotinternal@zhin.js/plugin-runtime能力槽,feature 与 projection 之间的载体
SnapshotStore / RuntimeSnapshotinternal@zhin.js/plugin-runtime原子快照存储,projection 的输入
AdapterIndexinternal@zhin.js/adapter适配器 projection,快照 → Endpoint 装配
CommandIndexinternal@zhin.js/command命令 projection,快照 → 命令路由表
ToolIndex / SkillIndex / McpIndex / PageIndex / LayoutIndexinternal各 feature 包其余 projection,同属内部机制
defineFeatureProvider(Feature Provider 协议)internal@zhin.js/feature-kit新增 feature 类型的协议,面向框架扩展者而非插件作者
MessageDispatcherinternal@zhin.js/core消息分发器(createMessageDispatcher 装配,路由策略可配置)
basic/cli/src/plugin-runtime/*-installer.tsinternal@zhin.js/cliRoot Host 安装器(database / schedule / outbound / inbox / http / console / agent / speech / html-renderer / protocol),装配细节随时可变

Deprecated / 已迁移

稳定性现状一句话
legacy usePlugin() 插件体系deprecated兼容保留,运行时仍支持新代码用约定式(plugin.ts + 约定目录);双轨迁移完成后进入删除倒计时
host 插件」叙事deprecated文档已收口Host 能力改为 token 化(见上表 Host Token),不再是插件概念
examples/test-bot 作为用户路径deprecated维护者厨房水槽用户路径为 minimal-bot(Stable)→ full-bot(L4),勿把 test-bot 配置当模板
plugin.yml 插件清单deprecatedlegacy Pluginzhin build 仍在读取(packages/im/core/src/plugin.tsbasic/cli/src/libs/plugin-package-build.ts属 legacy 体系的一部分,随 legacy 一起退役;约定式插件以 package.json 为准

判定规则(新增 API 放哪档)

按顺序问三个问题:

  1. 这是插件作者/用户会直接写的东西吗?(define* 函数、约定目录、配置键、CLI 命令、Host token) → 是:默认 Stable Public。AI/Console 等尚未收敛的创作面先标 experimental,收敛后升 stable
  2. 这是快照 → projection → 装配链路里的机制吗?*IndexSnapshotStoreCapabilitySlot、installer、dispatcher、Feature Provider 协议) → 是:默认 Internal。内部机制即使被导出(跨包复用)也不因导出而变成 public。
  3. 要删除/替换一个已有 public API? → 先标 deprecated(JSDoc @deprecated + 本清单移动 + changelog 明示),保留至少一个 minor 周期再删除;删除本身属 breaking,走 major 或按仓库发版约定处理。

兜底:拿不准的按 Internal 处理——从 internal 升 public 不 break 任何人,反过来则是 breaking。

相关文档:代码约定开发流程与门禁插件模型