Skip to content

计划:创建 packages/system-objects #1216

@hotlong

Description

@hotlong

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.yamlturbo.json 确认新包被识别

关键风险与处理

  1. sys_metadata 重复定义objectosmetadata 包都有 sys-metadata.object.ts,内容有差异。需要人工审查合并,以 metadata 包版本为准(更完整),删除 objectos 中的副本。

  2. 循环依赖:system-objects 只能依赖 @objectstack/spec,不能依赖 core/runtime。如果某些对象用到了 core 的类型,需要将那些类型提升到 spec。

  3. auth_ 适配器对象*(auth_user、auth_account、auth_session):这些是 better-auth 内部使用的 DB 适配器,不是公共 sys 对象,可以保留在 plugin-auth 中,不迁移。

  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions