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* 创作函数

应用侧请从 zhin.js/* 门面子路径导入(依赖 zhin.js 即可)。下表「实现包」是 Feature provider / platformFeatures 挂载名,不要再单独 pnpm add 这些实现包。

API稳定性作者 import实现包一句话
definePluginstablezhin.js@zhin.js/plugin-runtime约定式插件入口,plugin.ts 默认导出
defineCommandstablezhin.js/command@zhin.js/command命令模块(commands/ 下默认导出)
defineAdapterstablezhin.js/adapter@zhin.js/adapter适配器模块(adapters/ 下默认导出),create(context) 返回 Endpoint
defineComponentstablezhin.js/component@zhin.js/componentSatori/SSR 组件(components/ 下默认导出)
defineMiddlewarestablezhin.js/middleware@zhin.js/middleware中间件模块(middlewares/ 下默认导出)
defineHandlerstablezhin.js/handler@zhin.js/handlerLifecycle 事件处理器(handlers/ 下默认导出;/. 推断事件名)
defineAgentToolexperimental@zhin.js/tooltools/);zhin.js/agentagent/tools/*.ts@zhin.js/toolAI 工具模块,Agent 自动发现
defineAgentPromptSectionexperimental@zhin.js/prompt-section@zhin.js/prompt-sectiongeneration-owned Prompt 分段,声明 layer、预算保留级别与适用 profile

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

约定目录与文件

约定稳定性消费方一句话
plugin.tsstablezhin.js插件根入口,默认导出 definePlugin(...)
commands/stable@zhin.js/command(作者 import:zhin.js/command命令模块目录,支持 [name] / [[name]] / [...name] 动态参数段
adapters/stable@zhin.js/adapter(作者 import:zhin.js/adapter适配器模块目录
middlewares/stable@zhin.js/middleware(作者 import:zhin.js/middleware中间件模块目录
handlers/stable@zhin.js/handler(作者 import:zhin.js/handlerLifecycle 事件处理器目录(/ 分段 localName,省略 event 时映为 .;当前运行时接线 message.receive
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稳定性来源包一句话
databaseHostTokenstablezhin.js数据库 Host 能力
scheduleHostTokenstablezhin.js定时任务 Host 能力
outboundHostTokenstablezhin.js跨平台出站消息能力
outboundMessageTokenstable@zhin.js/corezhin.js/core/runtime入站消息投递网关(适配器用)
httpHostTokenstable@zhin.js/host-httpHTTP/WS Host 能力(Console、Webhook 用)

Agent 能力资源

API稳定性来源包一句话
ctx.agent / AgentResourceHubexperimental@zhin.js/agentgeneration-scoped Tool/Skill/SubAgent/MCP/Hook 能力注册;不拥有 Workroom Run/Task/Assignment 状态

Removed Legacy Hooks

API稳定性来源包一句话
usePlugin() 及配套 Hooks(provide / addCommand / useContext 等)removed(见下表)zhin.js@zhin.js/core已移除,调用 throw;唯一入口为 definePlugin + zhin runtime start
MessageCommand / CommandFeaturedeprecatedzhin.js@zhin.js/core经典命令;新代码用 defineCommand + commands/
bootstrapNode / zhin.js/noderemoved无(子路径已删除)唯一启动入口为 zhin runtime start

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)同属 stable 顶层键,完整表见 配置概览

CLI 命令

命令稳定性来源包一句话
zhin runtime startstable@zhin.js/cliPlugin Runtime 启动入口(composition root)
zhin setupstable@zhin.js/cli已有项目增量配置向导
zhin doctorstable@zhin.js/cli环境/配置体检
zhin agent legacy-runs <input>experimental@zhin.js/cli只读审计已删除的 legacy Run export;输出到文件时仅 create-only,不写新 Workroom Journal
zhin agent legacy-payloads <input> --kind <kind>experimental@zhin.js/cli只读扫描 legacy 内嵌 Workroom payload;只输出 content-free quarantine audit/proposal,不自动删除或迁移
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 装配,路由策略可配置)
@zhin.js/agent/runtime Workroom tokens / composition portsinternal@zhin.js/agentgeneration-owned Host 装配机制;不是插件作者可直接取得 Run 状态写权限的 API
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() / getPlugin() 插件体系removed调用 throw(throwing stub)唯一入口:definePlugin + zhin runtime start
MessageCommand / classic CommandFeaturedeprecatedAgent init / game-kit hub 仍用迁到 defineCommand + Runtime CommandIndex 后删除
bootstrapNode / zhin.js/noderemoved不再导出唯一启动入口:zhin runtime start
AgentOrchestrator / ResourceHubremoved兼容名称不再导出能力注册改用 AgentResourceHub;Workroom 编排改走 Kernel 与专用 typed ports
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。

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