Skip to content

对象元数据插件化自动加载不生效,需遵循 AppPlugin + ObjectQLPlugin 模式 #423

@hotlong

Description

@hotlong

问题描述

当前开发及配置方式,插件中的对象元数据未能按 objectstack 规范实现自动被 ObjectQL 引擎发现与加载,需要手工写加载代码。该做法与最新 objectstack-ai/spec 参考标准不符,严重影响长期可维护性和未来插件热插拔、自动集成能力。

典型错误做法(当前)

  • 仍存在手工扫描对象元数据文件(如 loadObjects、fs.readdirSync/glob 自行拼接元数据对象)的老旧模式。
  • objectstack.config.ts 通过自定义代码调用 loader,或显式构造 objects/app/modules 配置,而不是通过插件注册。
  • apps/元数据不是通过 app.* service,由 ObjectQLPlugin 自动注册到 SchemaRegistry。

正确做法

  • 每个业务模块/应用应由 AppPlugin 包裹并注册服务(如 app.project-tracker),元数据由 ObjectLoader 自动递归扫描加载。
  • objectstack.config.ts 只需 plugins: [ObjectQLPlugin, DriverPlugin, AppPlugin(app)],无需额外手工组装 objects。
  • ObjectQLPlugin 会自动发现所有 app.* services, 调用 ql.registerApp 自动注册 objects/views等所有元类型。
  • 参照 objectstack-ai/spec 的 dev config 和 app-crm/objectstack.config.ts,实现完全插件化的元数据声明和发现。

参考最佳实践(spec 仓库模式)

  • AppPlugin.init 自动 ctx.registerService(app.${id}, manifest+bundle)
  • ObjectQLPlugin.start 自动注册 app.* 服务下所有 objects/metadata,无需重复写加载/扫描代码
  • 示例代码可参考:spec/examples/app-host/objectstack.config.ts 及 app-crm/objectstack.config.ts

建议修正

  1. 移除所有自定义/硬编码对象元数据加载逻辑(如 loadObjects、fs、require/glob ��关代码)。
  2. 每个业务示例/模块通过 ObjectLoader.load(dir) 得到 objects/apps/actions 等,组装为 app manifest。
  3. 通过 AppPlugin(或等效实现)注册,每个 bundle 仅定义 manifest 和 metadata,不主动注册到 engine。
  4. 主入口只需 plugins: [ObjectQLPlugin, ...exampleAppPlugins, ...drivers],无需 objects 字段。
  5. 补充自动化测试,确保热插拔与多 app/discovery 测试。
  6. 更新 CHANGELOG/ROADMAP,说明插件自动注册架构。

相关资料


如需迁移代码片段与落地指导,可在本 issue 下跟进。

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions