Skip to content

API 包索引 ​

@aalis/api-* 包是 Aalis 三层包架构中的契约层:

@aalis/core              ← 平台无关的运行时(服务描述符、内置能力、插件定义、编排)
       ↑
@aalis/api-<X>           ← 契约:服务接口、运行时描述符、事件/钩子/贡献点声明、领域 helper
       ↑
@aalis/plugin-<X>        ← 实现:provide.use(描述符, 实现) 与业务逻辑

依赖规则:

  • 实现包值导入自己的 -api 包,拿到描述符与类型
  • 消费方插件只依赖 -api,不依赖实现包;在 definePlugin 的 uses 里声明描述符,apply(caps) 里经绑定接口取用
  • 每个服务名全仓只有一处 defineService,包的发布依赖(dependencies / optionalDependencies / peerDependencies)里不出现插件实现包;两条由 test/architecture/service-contracts.test.ts 守
  • 描述符是运行时值,必须进 dependencies,不能只放 devDependencies / import type
  • -api 包之间允许相互依赖(如 api-tools 依赖 api-authority)

包列表 ​

API 包提供的核心契约已知实现
api-agentagent 描述符 + BoundAgent(registerPreprocessor)plugin-agent
api-approvalapprovals 描述符 + BoundApprovals(registerSurface):审批的发起、在场、应答与结算;审批对象类型、approval:* 事件与卡片清洗 sanitizeForCardplugin-session-server
api-authorityauthority 描述符 + ExecutionGuardplugin-authority
api-checkpointcheckpoint 描述符 + CheckpointService:存储写前快照、按回合回滚plugin-checkpoint
api-commandscommands 描述符 + BoundCommands(command builder)plugin-commands
api-contributionscontributions 描述符 + Contributions(contribute / collect)+ 扩展点 ContributionPointMapplugin-contributions
api-embeddingembedding 描述符plugin-embedding-openai / plugin-embedding-ollama
api-gatewaygateway 描述符plugin-gateway
api-hookshooks 描述符 + Hooks(middleware / run)+ 扩展点 HookContextMapplugin-hooks
api-host-confighostConfig 描述符(服务名 host-config)+ HostConfig + 配置文档类型 AalisConfig宿主提供(@aalis/runtime)
api-host-logshostLogs 描述符(服务名 host-logs)+ HostLogs:最近的日志与此后的实时日志宿主提供(@aalis/runtime)
api-host-pathshostPaths 描述符(服务名 host-paths)+ HostPaths:数据目录、安装集与数据目录布局的绝对路径宿主提供(@aalis/runtime)
api-i18ni18n 描述符 + I18nService;出口共用的 localizeFor、贡献点 i18n:packplugin-i18n
api-mediamedia 描述符plugin-media
api-llmllm 描述符(per-model handle)+ listLLMModels / resolveLLMModelplugin-llm-openai / plugin-llm-ollama / plugin-llm-deepseek 等
api-memorymemory 描述符plugin-memory-inmemory / sqlite / mongodb / vector
api-package-managerpackageManager 描述符(服务名 package-manager)+ PackageManagerServiceplugin-package-manager
api-plugin-sourcepluginSource 描述符(服务名 plugin-source)+ 插件入口判定 pluginDefinitionOf宿主提供(@aalis/runtime)
api-reachreach 描述符(服务名 reach)+ ReachService;档位与越界策略、resolveReach / judgeReach、三张受保护清单 protectedLists、沙箱策略 sandboxPolicyOf、触及凭据的类型与品牌符号plugin-reach
schema-i18n给人看的文字对象:原文字典、消息格式与按读者语言解析(库,无 service)没有实现,各包直接依赖
schema-message消息数据契约(无 service)由各 adapter 直接 emit
api-session-historysessionHistory 描述符(服务名 session-history),按会话 id 读历史plugin-tool-session
api-session-managersessionManager 描述符:会话、场所与会话树plugin-session-manager
api-session-settingssessionFields(读取门面)与 sessionSettings(管理面)描述符,服务名 session-settings:插件配置字段按会话覆盖的声明、层表与读取器plugin-session-settings
api-session-protocolsessionProtocol 描述符(服务名 session-protocol)+ 会话协议的 zod schema:owner 客户端与守护进程之间的帧、会话列表、条目与回合控制(实验性)plugin-session-server
api-storagestorage 描述符 + BoundStorage(恒定义 resolveLocalPath / readFileRange / watch,插件私有目录 own)+ 路径文法 helperplugin-storage-local
api-todo-listtodoList 描述符(服务名 todo-list)+ TodoListService:读与清空会话的待办;TodoItem 与 todo:updated 事件plugin-todo-list
api-toolstools 描述符 + BoundTools / withToolGroups;后台任务登记 backgroundTasksplugin-tools
api-triggertrigger 描述符(选出生效的触发插件,二选一)与触发插件共用的函数plugin-trigger-policy(规则判定)
api-user-relationuserRelation 描述符(服务名 user-relation)+ 查询接口 UserRelationServiceplugin-user-relation
api-vectorstorevectorstore 描述符plugin-vectorstore-flat / plugin-vectorstore-lancedb
api-webuiwebuiServer / webuiClient 描述符 + BoundWebui(definePage / notify);声明式页面、管理面事件与主题格式plugin-webui-server

阅读顺序 ​

如果你在写新插件:

  1. 先看 api-storage 与 api-tools —— 多数插件会用到
  2. 看你要扩展的服务的 api 文档
  3. 看对应 docs/plugins/*.md 里现有实现作为参考

如果你在做架构改造:

约定 ​

  1. 服务身份是描述符的 name。例:@aalis/api-tools 导出 tools,name 为 'tools'。消费方 uses: { tools },拿到选择层(list() / use / of(id) / present / follow());业务层 use 默认是提供者形状的活句柄,登记型能力的契约在业务层上另加登记方法(如 tools.use.register、webui.use.definePage)。
  2. 按名仲裁:同名多实现按「本插件偏好 > 全局偏好 > 优先级 > 注册顺序」选中一家,偏好由用户在 WebUI 设置「系统」的服务偏好或配置 servicePreferences 里调整。领域能力(LLM 的 vision / tool-calling)挂在服务实例 / model-handle 的元数据上,由各领域 helper 过滤(如 resolveLLMModel(caps.llm, ref, ['vision'])),不经 core DI、也不用按能力选服务。
  3. 事件通过 declare module '@aalis/core' { interface AalisEvents } 注入;订阅者在 uses 里声明 events,用 events.use.on / events.use.emit。
  4. 钩子与贡献点的键分别经 declare module '@aalis/api-hooks' { interface HookContextMap } 与 declare module '@aalis/api-contributions' { interface ContributionPointMap } 注入。使用方在 uses 里声明 hooks / contributions(描述符分别从这两个契约包导入),服务由 @aalis/plugin-hooks / @aalis/plugin-contributions 提供,core 不内置。
  5. 业务层 vs 动态查询:登记(工具、指令、页面、预处理器)走业务层上的登记方法,归属这次激活、提供者换人自动重挂。调用选中的那一家用 x.use(活句柄,每次访问重新解析,存起来也跟着换人;optional 先看 x.present)。动态按名查询走 services.use.get,不产生依赖边,关停期可能拿空。把它拿到的原始实例存进字段后,关停边不保护这份缓存引用:提供者有失效逻辑则抛,无则静默成功。

文档对应 dev@c4e046e41,core 0.21.0,构建于 2026-11-02
基于 MIT 许可发布