-
Notifications
You must be signed in to change notification settings - Fork 1
Labels
bugSomething isn't workingSomething isn't working
Description
问题描述
当前开发及配置方式,插件中的对象元数据未能按 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
建议修正
- 移除所有自定义/硬编码对象元数据加载逻辑(如 loadObjects、fs、require/glob ��关代码)。
- 每个业务示例/模块通过 ObjectLoader.load(dir) 得到 objects/apps/actions 等,组装为 app manifest。
- 通过 AppPlugin(或等效实现)注册,每个 bundle 仅定义 manifest 和 metadata,不主动注册到 engine。
- 主入口只需 plugins: [ObjectQLPlugin, ...exampleAppPlugins, ...drivers],无需 objects 字段。
- 补充自动化测试,确保热插拔与多 app/discovery 测试。
- 更新 CHANGELOG/ROADMAP,说明插件自动注册架构。
相关资料
- https://github.com/objectstack-ai/spec/blob/main/objectstack.config.ts
- https://github.com/objectstack-ai/spec/blob/main/examples/app-crm/objectstack.config.ts
- https://github.com/objectstack-ai/spec/blob/main/packages/runtime/src/app-plugin.ts
如需迁移代码片段与落地指导,可在本 issue 下跟进。
Reactions are currently unavailable
Metadata
Metadata
Labels
bugSomething isn't workingSomething isn't working