Context
当前 sys_* 系统对象分散在 7 个包中(plugin-auth、plugin-security、plugin-audit、objectos、metadata、service-tenant、service-realtime)。这些对象是所有内核服务都依赖的基础数据结构,不应该以 "plugin" 或 "service" 命名,因为它们并非可选插件,而是平台必装的核心对象定义。
目标:创建 @objectstack/system-objects(路径 packages/system-objects/),集中维护所有 sys_* 对象的 Schema 定义,原有包保留运行时逻辑(路由注册、认证处理、业务逻辑),对象定义改为从新包引入。
需要迁移的对象清单(35 个 sys_* 对象)
分组 1:身份与认证(来自 plugin-auth)
sys_user, sys_account, sys_session, sys_verification
sys_two_factor, sys_api_key, sys_user_preference
sys_organization, sys_member, sys_invitation
sys_team, sys_team_member
auth_user, auth_account, auth_session(better-auth 适配器,保留但标注)
分组 2:安全与权限(来自 plugin-security)
sys_role, sys_permission_set
分组 3:审计与实时(来自 plugin-audit + service-realtime)
sys_audit_log, sys_presence
分组 4:多租户管理(来自 service-tenant)
sys_project, sys_project_member, sys_project_credential
sys_app, sys_package, sys_package_version, sys_package_installation
sys_tenant_database(已弃用,保留兼容垫片)
分组 5:元数据与平台对象(来自 objectos + metadata)
sys_metadata, sys_metadata_history(来自 metadata)
sys_object, sys_view, sys_agent, sys_tool, sys_flow(来自 objectos)
新包结构
packages/system-objects/
├── src/
│ ├── identity/ # 身份认证对象
│ │ ├── sys-user.object.ts
│ │ ├── sys-session.object.ts
│ │ ├── sys-account.object.ts
│ │ ├── sys-verification.object.ts
│ │ ├── sys-two-factor.object.ts
│ │ ├── sys-api-key.object.ts
│ │ ├── sys-user-preference.object.ts
│ │ ├── sys-organization.object.ts
│ │ ├── sys-member.object.ts
│ │ ├── sys-invitation.object.ts
│ │ ├── sys-team.object.ts
│ │ ├── sys-team-member.object.ts
│ │ └── index.ts
│ ├── security/ # 权限与角色
│ │ ├── sys-role.object.ts
│ │ ├── sys-permission-set.object.ts
│ │ └── index.ts
│ ├── audit/ # 审计与在线状态
│ │ ├── sys-audit-log.object.ts
│ │ ├── sys-presence.object.ts
│ │ └── index.ts
│ ├── tenant/ # 多租户管理
│ │ ├── sys-project.object.ts
│ │ ├── sys-project-member.object.ts
│ │ ├── sys-project-credential.object.ts
│ │ ├── sys-app.object.ts
│ │ ├── sys-package.object.ts
│ │ ├── sys-package-version.object.ts
│ │ ├── sys-package-installation.object.ts
│ │ ├── sys-tenant-database.object.ts # @deprecated
│ │ └── index.ts
│ ├── metadata/ # 元数据与平台对象
│ │ ├── sys-metadata.object.ts
│ │ ├── sys-metadata-history.object.ts
│ │ ├── sys-object.object.ts
│ │ ├── sys-view.object.ts
│ │ ├── sys-agent.object.ts
│ │ ├── sys-tool.object.ts
│ │ ├── sys-flow.object.ts
│ │ └── index.ts
│ └── index.ts # 统一导出
├── package.json
├── tsconfig.json
└── tsup.config.ts
package.json 配置
{
"name": "@objectstack/system-objects",
"version": "0.1.0",
"description": "Core system object schemas for ObjectStack platform",
"dependencies": {
"@objectstack/spec": "workspace:*"
},
"devDependencies": {
"typescript": "...",
"tsup": "...",
"vitest": "..."
}
}
注意: 此包只依赖 @objectstack/spec,不依赖 core/runtime/plugins 任何包,避免循环依赖。
原有包的修改策略
各包保留运行时逻辑,删除对象文件,改为从新包引入:
// plugin-auth/src/objects/index.ts(修改后)
export { SysUser, SysSession, ... } from '@objectstack/system-objects/identity';
// plugin-security/src/objects/index.ts(修改后)
export { SysRole, SysPermissionSet } from '@objectstack/system-objects/security';
// objectos/src/objects/index.ts(修改后)
export { SysObject, SysView, SysAgent, ... } from '@objectstack/system-objects/metadata';
原包的 package.json 新增依赖:"@objectstack/system-objects": "workspace:*"
需要修改的文件
| 文件 |
操作 |
packages/plugins/plugin-auth/src/objects/*.object.ts |
迁移到 system-objects,原文件改为重导出 |
packages/plugins/plugin-auth/package.json |
新增 system-objects 依赖 |
packages/plugins/plugin-security/src/objects/*.object.ts |
同上 |
packages/plugins/plugin-security/package.json |
同上 |
packages/plugins/plugin-audit/src/objects/*.object.ts |
同上 |
packages/plugins/plugin-audit/package.json |
同上 |
packages/objectos/src/objects/*.object.ts |
同上(注意 sys-metadata 与 metadata 包冲突) |
packages/objectos/package.json |
同上 |
packages/metadata/src/objects/*.object.ts |
同上 |
packages/metadata/package.json |
同上 |
packages/services/service-tenant/src/objects/*.object.ts |
同上 |
packages/services/service-tenant/package.json |
同上 |
packages/services/service-realtime/src/objects/*.object.ts |
同上 |
packages/services/service-realtime/package.json |
同上 |
pnpm-workspace.yaml 或 turbo.json |
确认新包被识别 |
关键风险与处理
-
sys_metadata 重复定义:objectos 和 metadata 包都有 sys-metadata.object.ts,内容有差异。需要人工审查合并,以 metadata 包版本为准(更完整),删除 objectos 中的副本。
-
循环依赖:system-objects 只能依赖 @objectstack/spec,不能依赖 core/runtime。如果某些对象用到了 core 的类型,需要将那些类型提升到 spec。
-
auth_ 适配器对象*(auth_user、auth_account、auth_session):这些是 better-auth 内部使用的 DB 适配器,不是公共 sys 对象,可以保留在 plugin-auth 中,不迁移。
-
feed_ 和 ai_ 对象**:不含 sys_ 前缀,属于功能域对象而非内核对象,暂不迁移,保留在 service-feed 和 service-ai 中。
验证方式
# 1. 构建新包
pnpm --filter @objectstack/system-objects build
# 2. 构建依赖包(验证引用正确)
pnpm --filter @objectstack/plugin-auth build
pnpm --filter @objectstack/plugin-security build
pnpm --filter @objectstack/objectos build
# 3. 全量构建
pnpm build
# 4. 全量测试
pnpm test
Context
当前 sys_* 系统对象分散在 7 个包中(plugin-auth、plugin-security、plugin-audit、objectos、metadata、service-tenant、service-realtime)。这些对象是所有内核服务都依赖的基础数据结构,不应该以 "plugin" 或 "service" 命名,因为它们并非可选插件,而是平台必装的核心对象定义。
目标:创建
@objectstack/system-objects(路径packages/system-objects/),集中维护所有 sys_* 对象的 Schema 定义,原有包保留运行时逻辑(路由注册、认证处理、业务逻辑),对象定义改为从新包引入。需要迁移的对象清单(35 个 sys_* 对象)
分组 1:身份与认证(来自 plugin-auth)
sys_user,sys_account,sys_session,sys_verificationsys_two_factor,sys_api_key,sys_user_preferencesys_organization,sys_member,sys_invitationsys_team,sys_team_memberauth_user,auth_account,auth_session(better-auth 适配器,保留但标注)分组 2:安全与权限(来自 plugin-security)
sys_role,sys_permission_set分组 3:审计与实时(来自 plugin-audit + service-realtime)
sys_audit_log,sys_presence分组 4:多租户管理(来自 service-tenant)
sys_project,sys_project_member,sys_project_credentialsys_app,sys_package,sys_package_version,sys_package_installationsys_tenant_database(已弃用,保留兼容垫片)分组 5:元数据与平台对象(来自 objectos + metadata)
sys_metadata,sys_metadata_history(来自 metadata)sys_object,sys_view,sys_agent,sys_tool,sys_flow(来自 objectos)新包结构
package.json 配置
{ "name": "@objectstack/system-objects", "version": "0.1.0", "description": "Core system object schemas for ObjectStack platform", "dependencies": { "@objectstack/spec": "workspace:*" }, "devDependencies": { "typescript": "...", "tsup": "...", "vitest": "..." } }注意: 此包只依赖
@objectstack/spec,不依赖 core/runtime/plugins 任何包,避免循环依赖。原有包的修改策略
各包保留运行时逻辑,删除对象文件,改为从新包引入:
原包的
package.json新增依赖:"@objectstack/system-objects": "workspace:*"需要修改的文件
packages/plugins/plugin-auth/src/objects/*.object.tspackages/plugins/plugin-auth/package.jsonpackages/plugins/plugin-security/src/objects/*.object.tspackages/plugins/plugin-security/package.jsonpackages/plugins/plugin-audit/src/objects/*.object.tspackages/plugins/plugin-audit/package.jsonpackages/objectos/src/objects/*.object.tspackages/objectos/package.jsonpackages/metadata/src/objects/*.object.tspackages/metadata/package.jsonpackages/services/service-tenant/src/objects/*.object.tspackages/services/service-tenant/package.jsonpackages/services/service-realtime/src/objects/*.object.tspackages/services/service-realtime/package.jsonpnpm-workspace.yaml或turbo.json关键风险与处理
sys_metadata 重复定义:
objectos和metadata包都有 sys-metadata.object.ts,内容有差异。需要人工审查合并,以metadata包版本为准(更完整),删除objectos中的副本。循环依赖:system-objects 只能依赖
@objectstack/spec,不能依赖 core/runtime。如果某些对象用到了 core 的类型,需要将那些类型提升到 spec。auth_ 适配器对象*(auth_user、auth_account、auth_session):这些是 better-auth 内部使用的 DB 适配器,不是公共 sys 对象,可以保留在 plugin-auth 中,不迁移。
feed_ 和 ai_ 对象**:不含 sys_ 前缀,属于功能域对象而非内核对象,暂不迁移,保留在 service-feed 和 service-ai 中。
验证方式