openxiangda-skill-kit 2.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +10 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +35 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/index.d.ts +29 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +205 -0
  9. package/dist/index.js.map +1 -0
  10. package/docs/architecture/repository-and-release.md +52 -0
  11. package/docs/backend.md +89 -0
  12. package/docs/concepts.md +34 -0
  13. package/docs/data-authz.md +100 -0
  14. package/docs/delivery.md +71 -0
  15. package/docs/frontend.md +46 -0
  16. package/docs/getting-started.md +120 -0
  17. package/docs/index.md +23 -0
  18. package/docs/llms.txt +12 -0
  19. package/docs/reference/cli.md +51 -0
  20. package/docs/reference/mcp.md +26 -0
  21. package/docs/workflow-events.md +63 -0
  22. package/package.json +39 -0
  23. package/skills/manifest.json +40 -0
  24. package/skills/openxiangda-v2/SKILL.md +38 -0
  25. package/skills/openxiangda-v2/agents/openai.yaml +4 -0
  26. package/skills/openxiangda-v2-architecture/SKILL.md +29 -0
  27. package/skills/openxiangda-v2-architecture/agents/openai.yaml +4 -0
  28. package/skills/openxiangda-v2-backend/SKILL.md +42 -0
  29. package/skills/openxiangda-v2-backend/agents/openai.yaml +4 -0
  30. package/skills/openxiangda-v2-data-authz/SKILL.md +44 -0
  31. package/skills/openxiangda-v2-data-authz/agents/openai.yaml +4 -0
  32. package/skills/openxiangda-v2-delivery/SKILL.md +63 -0
  33. package/skills/openxiangda-v2-delivery/agents/openai.yaml +4 -0
  34. package/skills/openxiangda-v2-frontend/SKILL.md +40 -0
  35. package/skills/openxiangda-v2-frontend/agents/openai.yaml +4 -0
  36. package/skills/openxiangda-v2-workflow-events/SKILL.md +39 -0
  37. package/skills/openxiangda-v2-workflow-events/agents/openai.yaml +4 -0
@@ -0,0 +1,71 @@
1
+ # 构建与交付
2
+
3
+ ## AppPackage
4
+
5
+ 一个包绑定同一提交的前端、后端镜像、配置、生成契约、依赖锁和平台契约范围。构建输出使用内容摘要密封;修改任一部分都会产生新的 AppVersion。
6
+
7
+ `deploy` 在发起任何网络请求前会再次计算 AppPackage、每个制品和前端包内每个文件的 SHA-256,并校验大小、入口文件、组件 manifest 指向、后端 OCI digest 以及 config/contracts 资源清单。构建完成后被替换、遗漏或来自另一提交的文件会在本地直接失败,不能进入上传阶段;平台收到后还会独立重复校验,客户端校验不能替代服务端信任边界。
8
+
9
+ ## DeploymentRun
10
+
11
+ ```mermaid
12
+ stateDiagram-v2
13
+ [*] --> Queued
14
+ Queued --> Validating
15
+ Validating --> Preparing
16
+ Preparing --> Deploying
17
+ Deploying --> Verifying
18
+ Verifying --> Activating
19
+ Activating --> Succeeded
20
+ Validating --> Failed
21
+ Preparing --> Failed
22
+ Deploying --> Failed
23
+ Verifying --> Failed
24
+ Activating --> Failed
25
+ ```
26
+
27
+ 平台持久保存每个检查点、输入摘要、重试分类和关联日志。客户端只创建或查询运行,因此发布不会依赖某个 AI 会话持续在线。
28
+
29
+ ## 标准门禁
30
+
31
+ 1. 本地 AppPackage/制品/组件清单一致性校验;
32
+ 2. 平台端契约兼容、摘要与制品完整性复验;
33
+ 3. 配置预检及 Secret 准备;
34
+ 4. Kubernetes 资源 apply;
35
+ 5. liveness/readiness 与平台回调探测;
36
+ 6. 前端和配置版本激活;
37
+ 7. 审计、通知和可观测关联。
38
+
39
+ 失败默认不切换当前版本。重试复用同一 AppVersion 和幂等键。promotion 复用同一 AppVersion;rollback 是激活历史版本的新 DeploymentRun,不在服务器上现场改文件。
40
+
41
+ ## 版本管理
42
+
43
+ Changesets 固定组同步发布所有 `openxiangda-*` 包、CLI、MCP 与 skill-kit。文档参考从命令和 MCP 注册表生成,避免文档与实现漂移。
44
+
45
+ `release:publish` 在真正写 registry 前执行不可变版本门禁:未发布版本进入候选集;已经发布的版本则分别解包 registry 工件和当前本地包并逐文件比较。相同内容视为未变包,不重复发布;任何内容差异都必须先用 Changesets 产生新版本;没有新版本时拒绝空发布。发布范围、版本和是否允许写入由机器判定,不由 AI 临场决定。
46
+
47
+ `pnpm verify:local` 是日常可重复执行的、完全不发包的完整验收入口;`pnpm verify:release` 复用同一门禁。它们只验证原生 2.0 工作区,不运行 1.x 兼容测试。除类型检查、单测、模板、技能和文档门禁外,还会执行发行物黑盒验证:打包所有公开 2.0 包,检查 tarball 内的 `exports`、bin 和依赖协议,在 monorepo 外安装这些 tarball,通过其中的 `create-openxiangda` 创建全新应用,然后执行新应用的生成、检查、单测、真实 Chromium Admin 验收与生产构建。这样 `workspace:*` 链接、未打包的本地文件或只有 jsdom 能通过的交互都不能掩盖坏包。
48
+
49
+ Playwright 浏览器使用官方缓存目录;`playwright install chromium` 已安装对应版本时是无操作。发包门禁不会额外运行 1.x 测试,也不会为每个包重复浏览器验收,而是在最终独立新应用上只运行一次完整用户路径。
50
+
51
+ 工具仓还会把同批本地包发布到一次性、仅绑定 `127.0.0.1` 的 registry,使用持久独立 reference app 再执行一次安装、契约生成、类型检查、单测、真实 NestJS 身份/Data API 进程验收和生产构建。`pnpm reference:install:from-build` 可在未公开发包时通过同一 registry 协议刷新 reference worktree 的本地依赖,避免 `file:`/`link:` 破坏独立性。
52
+
53
+ 门禁先用 Turbo 完成一次全工作区 check/test/build;后续生成契约检查、tarball 黑盒、技能校验和文档构建复用这批已验证的 `dist`,不会各自再次触发全仓构建。`distribution:smoke`、`skills:check`、`docs:build` 仍保留可独立执行的自包含入口,只有 `verify:local` 内部使用 `:from-build` 阶段命令。
54
+
55
+ 官方工作区使用 pnpm 10 的显式依赖构建策略:只允许经过审核的 `esbuild` 生命周期脚本,并启用 `strictDepBuilds`。未来依赖若新增 install/postinstall 脚本,安装会直接失败,必须先审查并更新策略;发行物黑盒验证同时拒绝任何“已忽略构建脚本”警告,避免开发机缓存掩盖不完整安装。
56
+
57
+ 只运行发行物验证:
58
+
59
+ ```bash
60
+ pnpm distribution:smoke
61
+ ```
62
+
63
+ ## 平台契约列车验收
64
+
65
+ 当同一候选版本还修改了 OpenXiangda 2.0 平台接口时,平台服务必须先运行自己的独立门禁:
66
+
67
+ ```bash
68
+ npm run verify:openxiangda-v2
69
+ ```
70
+
71
+ 该门禁校验平台 SQL migration、自动发现所有 2.0 测试、运行共享出站 HTTP/存储安全测试并完成平台编译。它与 `pnpm verify:release` 分工明确:前者证明平台实现,后者证明独立 SDK、CLI、技能、模板和真实 tarball 新应用。两边都通过后才可进入人工发布确认;任何一个命令都不会自动提交、发包或部署。
@@ -0,0 +1,46 @@
1
+ # 前端
2
+
3
+ `openxiangda-admin` 提供标准 B 端应用外壳:响应式布局、多级菜单、路由、面包屑、固定与可关闭缓存标签、个人中心、权限点、稳定角色会话、标准数据管理页、工作流任务页面和应用自定义操作注册。
4
+
5
+ ## 页面组成
6
+
7
+ - 菜单与路由使用同一份贡献声明,路由守卫通过批量授权接口一次解析当前页面的 capability;前端按 RoleSession 缓存和去重,服务端仍是最终授权边界。
8
+ - Data API 与 App API 使用类型化客户端,不在组件中拼接平台 URL。
9
+ - 当前角色是显式会话状态。角色选项同时展示业务数据范围,解决同一用户拥有多个同名角色绑定时的歧义。切换角色后重新获取 capability、数据范围与待办,并恢复该角色自己的缓存标签;不会把多个角色权限隐式合并。RoleSession 在到期前自动续期,浏览器从休眠恢复时再次校验;短暂网络故障会保留最后一个可用会话并提供就地重试,不会把整个应用切换成错误页。
10
+ - 缓存标签按应用和角色绑定写入浏览器会话,刷新后恢复仍存在且允许缓存的路由;被移除、禁用缓存或超出数量上限的路由不会复活。业务路由使用独立错误边界,局部渲染错误不会导致整个应用白屏。
11
+ - 标准数据管理模块把搜索字段转换成 Data API filter,并在服务端处理分页、排序、修订冲突和错误展示;搜索区折叠、列显隐、密度、跨页选择和批量业务动作是统一扩展点。分页大小、表格密度、可见列与搜索展开状态按应用/角色绑定/资源保存;异步查询按序列丢弃过期响应,失败时提供就地重试。
12
+ - `department`、`user` 和 `relation` 可直接用于列表搜索与编辑表单。`DepartmentText` / `UserText` 把持久化 ID 批量解析成可读名称,按应用、RoleSession 和类型隔离缓存,解析失败时安全回退到原始 ID。
13
+ - 标准数据编辑表单从 DataResource 生成类型化基础控件,应用只需声明业务标签、枚举选项、帮助信息和少量覆盖;JSON、日期时间和保存错误由框架统一处理。字段读写权限统一来自 DataResource 的 fieldPolicies:不可读字段不会出现在列表、搜索、导出和表单中,只读字段不能提交修改,应用管理员明确 bypass。
14
+ - 标准数据列表默认提供“查看”入口和行详情抽屉。详情抽屉复用 Data API 单记录接口,按字段策略展示业务字段,并以时间线显示当前记录的持久业务审计;操作者名称通过 Directory v2 解析,加载、空状态、失败和重试都有统一交互。
15
+ - `file` 字段使用平台托管附件组件:浏览器按签名计划直传对象存储,完成校验后只把稳定 `DataFileRef` 写入业务记录;查看和下载仍通过 Data API 执行行权限及字段权限。应用不能拼对象存储地址或保存临时签名 URL。
16
+ - 数据导出沿用当前服务端 filter/order 并按权限裁剪字段;CSV 防公式注入并限制最大导出量。导入先本地解析与类型预检,再以最多 100 个操作的受限事务批次提交,每批使用稳定幂等键,支持失败后安全重试。
17
+ - `DashboardPage`、`MetricCard`、`DataCountMetric`、`DataAggregateChart`、`DataDistributionChart`、`DataTrendChart` 和 `DashboardSection` 提供 RoleSession 约束的标准概览页。图表使用服务端受限聚合,ECharts 运行时按需加载;指标查询丢弃过期响应并提供独立错误恢复,不要求每个应用重复搭建卡片、图表与加载状态。
18
+ - `ApplicationOperationsPage` 提供应用管理员运行视图:平台契约、当前身份、后端 readiness/version、不可变 AppVersion 最近部署、事件重试/死信和 `eventId/requestId/traceId` 关联信息集中展示;事件订阅与定时事件可按 revision 暂停/启用,重试或死信可显式创建新投递并保留原记录。各探针独立失败,不会因为一个依赖不可用而把整页变成白屏,诊断快照可一键复制。
19
+ - 生产应用从 `openxiangda-admin/core`、`/data`、`/dashboard`、`/workflow` 子路径导入,并用 `React.lazy` 声明业务路由。官方模板的构建门禁要求首页、数据页和流程页保持独立异步 chunk,同时限制单 chunk 与首屏 JavaScript 预算;新增页面不能重新退化成完整 Admin/Ant Design 一次性加载。
20
+ - 工作流页面按后端返回的 actions、fieldPolicy 和 presentation 渲染按钮与字段。业务记录由 Data API/App API 加载,`edit_required` 在操作前验证,变更以 revision 乐观锁先保存后执行流程命令;Workflow Kernel 不保存业务字段。
21
+ - 个人中心内置长期流程代理。选择代理人后必须再选择其具体应用角色绑定和数据范围,代理始终绑定发起人的当前稳定身份,不合并其他角色权限。
22
+
23
+ ## 自定义操作
24
+
25
+ 自定义操作是应用定义的业务动作,例如“校验预约冲突”“计算费用”“确认到场”。前端通过 `WorkflowActionContribution` 注册协议化表单,执行器调用当前环境的 NestJS App API;后端用 Principal、capability、Data API revision/幂等事务决定最终业务变化。它不是 Workflow Kernel 的隐藏命令,操作后的异步副作用继续通过事件处理。
26
+
27
+ ## 质量门禁
28
+
29
+ 页面测试至少覆盖路由授权、角色切换、服务端拒绝、修订冲突和关键工作流动作。官方模板还用 Playwright 在真实 Chromium 中验收桌面布局、移动端抽屉、权限裁剪导航、搜索/列设置/密度、个人中心、身份切换、数据编辑、缓存标签恢复以及身份初始化失败后的重试恢复。不要把后端规则复制成只能在浏览器生效的判断。
30
+
31
+ Admin 框架的缓存只保存界面偏好和逻辑路由,不缓存 Token、权限判定或业务数据。页面可以通过 `persistPreferences={false}` 完全关闭列表偏好的读取与写入。
32
+
33
+ ## 发布前本地验收
34
+
35
+ 官方模板的 Vite 开发服务默认装载内存平台 Mock,包含申请人、学院管理员、仪器管理员和应用管理员四种身份,以及长期代理、批量授权、Directory v2、字段权限、Data API 查询/CRUD/单记录详情/审计/受限聚合/托管附件/受限事务、Workflow Kernel 发起与完整审批操作、应用自定义动作、事件订阅/定时器暂停和死信重放。这样新应用无需 provision 或发布即可验证完整 Admin 交互:
36
+
37
+ ```bash
38
+ pnpm dev
39
+ pnpm test:e2e
40
+ ```
41
+
42
+ `pnpm test:e2e` 会自行启动只绑定 `127.0.0.1` 的 Vite + 本地平台 Mock;失败时保留 trace、截图和视频。用例必须通过可访问角色和标签定位交互,不能依赖 Ant Design 私有 DOM 结构。
43
+
44
+ 切换到“应用管理员”后可进入“运行与诊断 → 本地故障实验室”,为匹配的下一次请求注入身份 401、授权 403、修订冲突 409、后端 503 或 3 秒数据延迟;规则默认命中一次并可随时清空,用于验证标准错误、重试和恢复交互。
45
+
46
+ 设置 `OPENXIANGDA_PLATFORM_PROXY=https://platform.example.com` 可改为真实平台;设置 `OPENXIANGDA_LOCAL_MOCK=false` 可关闭 Mock。故障控制端点只存在于 Vite dev server,生产构建不会包含它。本地链接 SDK 的 dist 发生变化时,模板使用整页刷新,避免 React Context 被组件级 HMR 拆成两个实例。
@@ -0,0 +1,120 @@
1
+ # 开始开发
2
+
3
+ ## 创建应用
4
+
5
+ ```bash
6
+ openxiangda app create my-app --app-code my-app --name "My App" --install
7
+ cd my-app
8
+ openxiangda skill install
9
+ OPENXIANGDA_TOKEN="$TOKEN" openxiangda auth login --base-url https://platform.example.com
10
+ openxiangda app link --base-url https://platform.example.com
11
+ openxiangda app provision
12
+ openxiangda app info
13
+ ```
14
+
15
+ 开发 2.0 工具链本身时,不需要先发布 alpha 包。创建一个独立验收应用并把依赖链接到本地源码:
16
+
17
+ ```bash
18
+ openxiangda app create ../my-local-validation \
19
+ --app-code my-local-validation \
20
+ --name "Local Validation" \
21
+ --local-sdk /absolute/path/to/openxiangda-v2 \
22
+ --install
23
+ ```
24
+
25
+ 带 `--install` 时,创建器先写依赖映射并安装,再执行确定性契约生成;新应用第一次执行 `generate --check` 就应通过。省略 `--install` 时结果会标记 `generationDeferred: true`,需要先运行 `pnpm install`,再运行 `openxiangda generate`。`--local-sdk` 会写入机器相关的 pnpm `link:` overrides,只用于可丢弃的本地验收应用。
26
+
27
+ 应用始终调用工作区本地 `openxiangda-cli`;本地依赖未安装时直接失败,不存在 1.x 回退。`skill install` 会同时安装领域 Skills 与其引用的 2.0 参考文档。
28
+
29
+ 创建结果是普通 pnpm workspace:
30
+
31
+ ```text
32
+ apps/web React + Ant Design
33
+ apps/server NestJS
34
+ packages/domain 业务类型与规则
35
+ packages/contracts 平台生成契约
36
+ openxiangda.config.ts 应用级平台声明
37
+ ```
38
+
39
+ ## 日常循环
40
+
41
+ ```bash
42
+ openxiangda dev
43
+ openxiangda generate
44
+ openxiangda check
45
+ openxiangda test
46
+ pnpm dev
47
+ pnpm test:e2e
48
+ ```
49
+
50
+ `generate` 根据配置生成 Data、AuthZ、Event 与 Workflow 类型。`check` 必须是确定性的:同一提交、同一依赖锁、同一配置产生同一结果。
51
+
52
+ 开发 2.0 工具链本身时,每一轮可用一个命令完成发布前同等级的本地验收:
53
+
54
+ ```bash
55
+ pnpm verify:local
56
+ ```
57
+
58
+ 它会用本地 tarball 创建并销毁一个独立新应用,覆盖脚手架、安装、生成、单测、Chromium 交互、生产构建、Skill 和文档,不会执行 npm 发布、Git 提交或平台部署。
59
+
60
+ ## OAuth2 应用身份
61
+
62
+ 外部系统或后台任务通过平台托管的 OAuth2 client credentials 获取短期 token,不使用用户 RoleSession。客户端 Secret 只在创建或轮换时返回一次:
63
+
64
+ ```bash
65
+ openxiangda oauth client create --name erp-sync \
66
+ --environment development \
67
+ --scope app:invoke \
68
+ --scope data:read
69
+ openxiangda oauth client list
70
+ openxiangda oauth client rotate <client-id> --grace-period-seconds 600
71
+ openxiangda oauth audit list --limit 100
72
+ ```
73
+
74
+ NestJS App API 使用 `@RequireCapability` 验证服务身份 scope;Workflow 操作仍强制用户 RoleSession,不允许服务身份代替审批人。
75
+
76
+ 应用后端自己的 workload client 由平台托管,不向开发者显示 Secret。查询状态或主动轮换时使用专门命令:
77
+
78
+ ```bash
79
+ openxiangda oauth runtime status --environment development
80
+ openxiangda oauth runtime rotate --environment development \
81
+ --grace-period-seconds 600 \
82
+ --idempotency-key runtime-rotation-20260812
83
+ ```
84
+
85
+ `runtime rotate` 先以当前 credential version 做 CAS 暂存,再对该环境当前激活的同一个 AppVersion 创建滚动 DeploymentRun。新 Secret 只在平台内部写入 Kubernetes Secret;新 Pod 就绪后使用新凭据,旧 Pod 在宽限期内仍可换 token。命令重试必须复用同一个幂等键,不重建或篡改应用版本。
86
+
87
+ ## 环境 Secret 与运行维护
88
+
89
+ `openxiangda.config.ts` 只声明后端需要的 Secret 名称和注入环境变量,值不会进入源码或 AppPackage。可先在本地/测试环境配置,再部署应用:
90
+
91
+ ```bash
92
+ APP_SECRET='development-only-value' \
93
+ openxiangda secret create dingtalk-client-secret \
94
+ --environment development \
95
+ --from-env APP_SECRET
96
+
97
+ openxiangda event subscription list
98
+ openxiangda event delivery list
99
+ openxiangda workflow provider list --environment development
100
+ ```
101
+
102
+ 事件死信通过 `event delivery replay` 显式重放;Workflow Provider 密钥轮换要在下一次成功部署后才激活。
103
+
104
+ ## 构建与发布
105
+
106
+ 应用 CI 先构建并推送后端镜像,再将不可变镜像摘要交给 CLI:
107
+
108
+ ```bash
109
+ openxiangda build --backend-image registry.example.com/apps/my-app@sha256:...
110
+ openxiangda deploy development --backend-image registry.example.com/apps/my-app@sha256:...
111
+ openxiangda status <deployment-id>
112
+ ```
113
+
114
+ CLI 上传应用包并创建 DeploymentRun;部署、重试、健康检查和激活都由平台执行。CLI 退出不影响发布继续进行。
115
+
116
+ `app provision` 只用于首次创建平台中的稳定 2.0 应用身份,可安全重试,且需要平台管理员身份。日常 CI 使用该应用的发布权限即可,不需要平台管理员。
117
+
118
+ ## AI 入口
119
+
120
+ AI 先读取 `openxiangda://workspace/context`,再使用 MCP 的 `check_app`、`run_tests`、`build_app` 等结构化工具。会改变环境的工具必须在用户明确授权后调用。
package/docs/index.md ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ layout: home
3
+ hero:
4
+ name: OpenXiangda 2.0
5
+ text: 把平台应用当作真正的软件工程
6
+ tagline: 标准 React 前端、NestJS 后端、统一 Data API、上下文权限、Workflow Kernel v2、事件订阅与应用级交付
7
+ actions:
8
+ - theme: brand
9
+ text: 开始开发
10
+ link: /getting-started
11
+ - theme: alt
12
+ text: 阅读架构
13
+ link: /concepts
14
+ features:
15
+ - title: 一个应用,一个版本
16
+ details: 前端、后端、配置契约和生成类型共同构成不可变 AppVersion。
17
+ - title: 平台托管后端
18
+ details: 每应用独立容器,共享 Kubernetes 集群资源,由平台完成部署与身份注入。
19
+ - title: AI 可用但不依赖 AI 发布
20
+ details: CLI、MCP 和 Skills 共用确定性服务;平台持久化执行部署,不让会话承担状态机。
21
+ ---
22
+
23
+ OpenXiangda 2.0 保留平台统一数据与治理能力,同时把应用开发恢复成成熟的前后端工程。本工具链只面向 2.0 应用;旧应用由独立的 1.x 产品线维护。
package/docs/llms.txt ADDED
@@ -0,0 +1,12 @@
1
+ # OpenXiangda 2.0 documentation
2
+
3
+ - /getting-started.md: standard workspace and development loop
4
+ - /concepts.md: application, platform, data, runtime, and version boundaries
5
+ - /frontend.md: React admin shell, role session, CRUD, workflow UI
6
+ - /backend.md: NestJS modules, identity, Data API, health, secrets
7
+ - /data-authz.md: RBAC plus contextual data and field authorization
8
+ - /workflow-events.md: Workflow Kernel v2, providers, actions, durable events
9
+ - /delivery.md: immutable AppPackage and platform-owned DeploymentRun
10
+ - /architecture/repository-and-release.md: standalone 2.0 repository and release boundaries
11
+ - /reference/cli.md: generated CLI commands
12
+ - /reference/mcp.md: generated MCP resources and tools
@@ -0,0 +1,51 @@
1
+ # CLI Reference
2
+
3
+ > Generated from `DEVKIT_COMMANDS`. Do not edit manually.
4
+
5
+ | Command | Risk | Purpose |
6
+ | --- | --- | --- |
7
+ | `auth login` | write-local | 保存 2.0 平台登录会话 |
8
+ | `auth status` | read | 查看当前登录会话 |
9
+ | `auth logout` | write-local | 删除当前登录会话 |
10
+ | `app create` | write-local | 从官方模板创建 2.0 应用 |
11
+ | `app link` | write-local | 绑定平台地址和应用环境 |
12
+ | `app provision` | deploy | 在平台幂等创建 2.0 应用身份 |
13
+ | `app info` | read | 读取应用工作区上下文 |
14
+ | `oauth client list` | read | 查询应用 OAuth2 客户端 |
15
+ | `oauth client create` | deploy | 创建环境绑定的 OAuth2 客户端 |
16
+ | `oauth client update` | deploy | 更新 OAuth2 客户端 |
17
+ | `oauth client rotate` | deploy | 双密钥轮换 OAuth2 客户端 |
18
+ | `oauth client revoke` | deploy | 吊销 OAuth2 客户端 |
19
+ | `oauth runtime status` | read | 查询平台托管运行凭据状态 |
20
+ | `oauth runtime rotate` | deploy | 暂存运行凭据并创建同版本滚动部署 |
21
+ | `oauth audit list` | read | 查询 OAuth2 审计事件 |
22
+ | `secret list` | read | 查询环境隔离的应用 Secret 元数据 |
23
+ | `secret create` | deploy | 从本机安全来源创建应用 Secret |
24
+ | `secret update` | deploy | 更新应用 Secret 元数据和状态 |
25
+ | `secret rotate` | deploy | 追加不可变版本并轮换应用 Secret |
26
+ | `secret delete` | deploy | 删除未被当前配置引用的应用 Secret |
27
+ | `secret audit list` | read | 查询应用 Secret 审计事件 |
28
+ | `event subscription list` | read | 查询应用事件订阅 |
29
+ | `event subscription status` | deploy | 暂停或恢复事件订阅 |
30
+ | `event subscription rotate-secret` | deploy | 暂存下一版本事件签名密钥并随下次部署激活 |
31
+ | `event delivery list` | read | 查询事件投递与死信 |
32
+ | `event delivery replay` | deploy | 幂等回放历史事件投递 |
33
+ | `event timer list` | read | 查询定时事件 |
34
+ | `event timer status` | deploy | 暂停或恢复定时事件 |
35
+ | `workflow provider list` | read | 查询 Workflow Assignee Provider |
36
+ | `workflow provider rotate` | deploy | 轮换 Workflow Provider 签名密钥 |
37
+ | `skill install` | write-local | 安装 OpenXiangda 2.0 AI Skills |
38
+ | `skill validate` | read | 验证 OpenXiangda 2.0 AI Skills |
39
+ | `dev` | write-local | 启动标准前后端开发进程 |
40
+ | `generate` | write-local | 生成 Data/App/Workflow/Event 类型契约 |
41
+ | `check` | read | 确定性检查完整应用 |
42
+ | `test` | read | 运行应用测试 |
43
+ | `build` | write-local | 构建并密封一个 AppPackage |
44
+ | `deploy` | deploy | 创建平台持久执行的 DeploymentRun |
45
+ | `promote` | deploy | 以同一 AppVersion 晋级目标环境 |
46
+ | `status` | read | 查询 DeploymentRun 状态 |
47
+ | `logs` | read | 查询部署检查点和关联日志 |
48
+ | `retry` | deploy | 重试可恢复的 DeploymentRun |
49
+ | `cancel` | deploy | 幂等取消 DeploymentRun |
50
+ | `rollback` | deploy | 以历史 AppVersion 创建回滚部署 |
51
+ | `doctor` | read | 诊断本地工具链和平台兼容性 |
@@ -0,0 +1,26 @@
1
+ # MCP Reference
2
+
3
+ > Generated from the MCP server registry. Do not edit manually.
4
+
5
+ ## Resources
6
+
7
+ - `openxiangda://workspace/context`
8
+ - `openxiangda://workspace/contracts`
9
+ - `openxiangda://platform/capabilities`
10
+ - `openxiangda://deployments/latest`
11
+ - `openxiangda://docs/index`
12
+
13
+ ## Tools
14
+
15
+ - `workspace_context`
16
+ - `contract_describe`
17
+ - `generate_contracts`
18
+ - `check_app`
19
+ - `run_tests`
20
+ - `build_app`
21
+ - `deployment_plan`
22
+ - `deploy_app`
23
+ - `deployment_status`
24
+ - `deployment_logs`
25
+ - `retry_deployment`
26
+ - `rollback_app`
@@ -0,0 +1,63 @@
1
+ # 工作流与事件
2
+
3
+ ## Workflow Kernel v2
4
+
5
+ Workflow Kernel v2 专注审批语义:版本化定义、条件分支、审批任务、同意、拒绝、转交、回退、代理、加签、审批人解析、提交预览、主部门选择、字段策略、允许操作与审计。
6
+
7
+ 业务字段始终由 Data API 或 App API 保存。流程内核仅保存定义、实例、节点、任务、动作、参与者快照、字段策略和关联业务记录 ID。
8
+
9
+ 标准任务页使用实例的 DataRef 加载业务记录,并按节点 `fieldPolicy` 控制字段。`edit` 与 `edit_required` 的变化在流程命令前先写入 Data API,使用记录 revision 防止覆盖他人修改;采用 App API 存储的应用注入等价 loader/saver。流程命令失败不会把业务数据偷偷写进 Kernel。
10
+
11
+ 任务级操作包含同意、拒绝、退回、重新提交、转交、任务代理和前/后加签;实例级操作包含发起人撤回和应用管理员终止。一个正在审批的任务 Surface 可以同时返回任务级与实例级操作,例如应用管理员在任务仍活动时仍能终止实例。Admin 执行器按操作类型选择任务或实例命令,不以“当前页面有没有任务”猜测请求目标;撤回和终止也不会被当前审批节点的必填业务字段误拦截。
12
+
13
+ 长期代理绑定委托人的当前 RoleAssignment,以及代理人的明确 RoleAssignment。平台提供代理目标身份查询,页面同时展示角色和 scope grant;多角色用户不会因为只选择了人员而获得错误的数据范围。任务级转交/代理仍由当次 Surface 的操作协议控制。
14
+
15
+ ## Provider 与自定义操作
16
+
17
+ 审批节点只保留简单声明。需要读取应用数据的审批人解析、动作可用性或业务校验,由应用后端实现 provider 契约。自定义操作由前端 contribution 声明表单和展示,执行器调用 NestJS App API;后端按 Principal/capability 执行 Data API 或外部系统逻辑并使用幂等键。自定义操作不扩展 Kernel 状态机,异步副作用交给事件。
18
+
19
+ ## 前端协议
20
+
21
+ 任务详情返回:
22
+
23
+ - 当前定义与任务修订;
24
+ - `operations`(含输入 JSON Schema、UI Schema、执行目标、可见/可用状态与刷新范围);
25
+ - fieldPolicy;
26
+ - presentation;
27
+ - assignee/代理/加签上下文;
28
+ - 提交所需 concurrency token。
29
+
30
+ 前端按协议展示,不需要复制内核状态机。协议允许扩展展示元数据,但内核始终校验动作是否合法。
31
+
32
+ ## 事件层
33
+
34
+ 表单数据增删改查、流程状态变化和定时器统一产生类型化事件。订阅目标是应用后端接口。平台负责签名、持久投递、重试、死信、暂停与重放;应用负责验签、幂等和业务处理。
35
+
36
+ 事件首先与业务变更写入同一事务的 outbox,再由 Worker 领取带租约的投递任务。网络失败、408、409、425、429 和 5xx 才进入指数退避;确定性 4xx 直接进入死信,`Retry-After` 优先于本地退避。人工重放要求幂等键,相同键只产生同一条投递:
37
+
38
+ ```bash
39
+ openxiangda event subscription list
40
+ openxiangda event delivery list --limit 100
41
+ openxiangda event delivery replay <delivery-id> \
42
+ --idempotency-key incident-20260812-replay-1
43
+ ```
44
+
45
+ 应用管理员也可在标准“运行与诊断”页面暂停/启用事件订阅和定时事件,并对重试或死信执行重放。重放创建新 delivery,原记录保持不变,便于审计与关联排障。
46
+
47
+ Nest SDK 默认使用平台托管的持久化 receipt store:它复用当前事件订阅密钥,对 `claim / complete / release` 命令做 HMAC 签名,并把消费状态保存在平台数据库,因此 Pod 重启、滚动部署或多副本运行都不会退化为进程内去重,也不要求应用自建数据库。只有显式注入 `InMemoryOpenXiangdaEventReceiptStore` 时才使用本地进程内实现。
48
+
49
+ 处理器完成后才提交 receipt,异常会释放 claim 以便平台重试。仍在租约内处理的重复投递返回可重试错误;只有状态已经是 `succeeded` 的事件才返回成功重复。对于“外部副作用成功、回执提交前进程崩溃”的固有窗口,处理器仍应把 `event.id` 作为 Data API 受限事务的 `idempotencyKey`,或使用下游系统自己的幂等键;receipt 提供的是可靠的消费领取与完成记录,不虚构跨系统 exactly-once。
50
+
51
+ ## Provider 密钥轮换
52
+
53
+ Provider 轮换采用部署驱动的双阶段协议。`workflow provider rotate` 只暂存下一版本;下次 Deployment 给新 Pod 同时注入当前密钥和 `_NEXT` 密钥,新 Pod 可验证两者。readiness 成功后平台原子提升下一版本;失败部署继续使用旧版本,不影响现网。API 和 CLI 从不返回轮换后的明文。
54
+
55
+ ```bash
56
+ openxiangda workflow provider list --environment production
57
+ openxiangda workflow provider rotate special-lab-reviewers \
58
+ --environment production \
59
+ --revision 3 \
60
+ --idempotency-key rotate-special-lab-20260812
61
+ openxiangda deploy production \
62
+ --backend-image registry.example.com/apps/my-app@sha256:...
63
+ ```
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "openxiangda-skill-kit",
3
+ "version": "2.0.0-alpha.12",
4
+ "description": "Validation and deterministic packaging for OpenXiangda 2.0 AI skills.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "openxiangda-skill-kit": "./dist/bin.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist/",
19
+ "skills/",
20
+ "docs/",
21
+ "README.md"
22
+ ],
23
+ "dependencies": {
24
+ "openxiangda-devkit-core": "2.0.0-alpha.12"
25
+ },
26
+ "devDependencies": {
27
+ "tsx": "4.23.12",
28
+ "typescript": "5.9.3"
29
+ },
30
+ "engines": {
31
+ "node": ">=20"
32
+ },
33
+ "license": "MIT",
34
+ "scripts": {
35
+ "build": "tsc -p tsconfig.json",
36
+ "check": "tsc -p tsconfig.json --noEmit",
37
+ "test": "tsx --test test/*.test.ts"
38
+ }
39
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "skills": [
4
+ {
5
+ "name": "openxiangda-v2",
6
+ "description": "Build, inspect, validate, and deliver a complete OpenXiangda 2.0 application workspace. Use when a task spans the React frontend, NestJS backend, Data API, authorization, workflow, events, or whole-application delivery.",
7
+ "sha256": "ac22f47182c7e101b66d96e50dac7db238c7deb09904cdc53f389b1a533954a1"
8
+ },
9
+ {
10
+ "name": "openxiangda-v2-architecture",
11
+ "description": "Design OpenXiangda 2.0 application boundaries and typed contracts. Use when creating an app, decomposing frontend and backend responsibilities, or changing Data, AuthZ, workflow, event, or deployment declarations.",
12
+ "sha256": "02768b17e048c623a13b9a99e5cedc72c9081eaa71b346c3d9db3ca66c95bf5e"
13
+ },
14
+ {
15
+ "name": "openxiangda-v2-backend",
16
+ "description": "Build the standard OpenXiangda 2.0 NestJS application backend. Use when implementing App APIs, Data API transactions, identity-aware business services, event consumers, health checks, or external integration endpoints.",
17
+ "sha256": "c107b1aa914130de821fa9f7b157274d568371c8e4410e5d5d3f03e80f2fb24d"
18
+ },
19
+ {
20
+ "name": "openxiangda-v2-data-authz",
21
+ "description": "Design OpenXiangda 2.0 Data API and contextual authorization contracts. Use for RBAC, active-role behavior, department or record attributes, application-admin bypass, field policies, and restricted transactions.",
22
+ "sha256": "5c4a2d4465ea92efcfb64cdcef6b6f80232ea0413bba6c77e7ccb70f9b33e29e"
23
+ },
24
+ {
25
+ "name": "openxiangda-v2-delivery",
26
+ "description": "Validate, build, deploy, observe, promote, retry, and roll back an OpenXiangda 2.0 application. Use when preparing an immutable AppPackage or changing a platform-managed environment.",
27
+ "sha256": "66e1df9664a10d66ca2a2f6552c84ac13fc68cfbb8424ef4369bda07b5f9dcdd"
28
+ },
29
+ {
30
+ "name": "openxiangda-v2-frontend",
31
+ "description": "Build OpenXiangda 2.0 React and Ant Design admin experiences. Use when implementing menus, routes, CRUD pages, role switching, workflow task pages, or application-defined action components.",
32
+ "sha256": "788b8f32b6cffcbc9c8686d064f570472ae107f3da4f8c5b797ceb0e6b84fe8c"
33
+ },
34
+ {
35
+ "name": "openxiangda-v2-workflow-events",
36
+ "description": "Implement OpenXiangda Workflow Kernel v2 and durable application events. Use for approval definitions, assignee providers, task actions, delegation, add-sign, previews, data-change events, workflow events, or timers.",
37
+ "sha256": "ad662800fc0285004e957681f714c157667cba2163c913bdbc519f2762ea9012"
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: openxiangda-v2
3
+ description: Build, inspect, validate, and deliver a complete OpenXiangda 2.0 application workspace. Use when a task spans the React frontend, NestJS backend, Data API, authorization, workflow, events, or whole-application delivery.
4
+ ---
5
+
6
+ # OpenXiangda 2.0
7
+
8
+ Treat the repository as one typed application product. Work through package contracts and deterministic commands; do not mutate platform resources one at a time.
9
+
10
+ ## Start Here
11
+
12
+ 1. Run `openxiangda app info` and inspect the returned workspace and platform contract versions.
13
+ 2. Read `openxiangda.config.ts`, then identify which domain skill applies:
14
+ - architecture: `$openxiangda-v2-architecture`
15
+ - frontend: `$openxiangda-v2-frontend`
16
+ - backend: `$openxiangda-v2-backend`
17
+ - data and authorization: `$openxiangda-v2-data-authz`
18
+ - workflow and events: `$openxiangda-v2-workflow-events`
19
+ - delivery: `$openxiangda-v2-delivery`
20
+ 3. Keep generated contracts current with `openxiangda generate`.
21
+ 4. Before delivery, run `openxiangda check` and `openxiangda test`.
22
+
23
+ For a new repository, link it to the target platform and let an authorized platform administrator run `openxiangda app provision` once. The command is idempotent and provisions only a native 2.0 application identity.
24
+
25
+ ## Boundaries
26
+
27
+ - Put browser code in `apps/web`, server code in `apps/server`, shared domain types in `packages/domain`, and generated declarations in `packages/contracts`.
28
+ - Persist business records only through Data API or an App API implemented by the application backend.
29
+ - Treat the active role and context attributes as explicit request state.
30
+ - Use durable event consumers for side effects and idempotency keys for retries.
31
+ - Build one immutable application package; the platform owns deployment execution, health gates, promotion, and rollback.
32
+ - Reject any workspace that does not declare the native 2.0 application configuration.
33
+
34
+ ## Delivery Gate
35
+
36
+ Use `openxiangda build --backend-image <immutable-image>` only after checks pass. Use `openxiangda deploy`, `openxiangda status`, and `openxiangda logs` only when the user has authorized the environment change.
37
+
38
+ Read [Getting Started](../../docs/getting-started.md) for the complete development loop.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenXiangda 2.0"
3
+ short_description: "Build and deliver typed OpenXiangda 2.0 applications"
4
+ default_prompt: "Use $openxiangda-v2 to build and validate this OpenXiangda 2.0 application."
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: openxiangda-v2-architecture
3
+ description: Design OpenXiangda 2.0 application boundaries and typed contracts. Use when creating an app, decomposing frontend and backend responsibilities, or changing Data, AuthZ, workflow, event, or deployment declarations.
4
+ ---
5
+
6
+ # OpenXiangda 2.0 Architecture
7
+
8
+ Design one independently versioned application with a standard React frontend and NestJS backend.
9
+
10
+ ## Design Sequence
11
+
12
+ 1. Inspect the workspace with `openxiangda app info`.
13
+ 2. Define business aggregates and invariants in `packages/domain`.
14
+ 3. Declare Data API resources, capabilities, policies, workflow definitions, event subscriptions, and timers in `openxiangda.config.ts`.
15
+ 4. Keep synchronous user interactions in App APIs; move retryable side effects to event consumers.
16
+ 5. Use a workflow provider when assignee resolution or a workflow action depends on application data.
17
+ 6. Generate types with `openxiangda generate`, then run `openxiangda check`.
18
+
19
+ ## Required Decisions
20
+
21
+ - Name every resource, capability, event type, workflow, and provider with a stable application-scoped code.
22
+ - Separate business data from workflow runtime state.
23
+ - Define the authorization context needed for each operation, including active role and data attributes.
24
+ - Define idempotency and concurrency behavior before implementing writes.
25
+ - Define health, readiness, and rollback expectations as part of the application contract.
26
+
27
+ Do not design environment-specific code paths. Environment values and secrets are injected by the platform at deployment time.
28
+
29
+ Read [Concepts](../../docs/concepts.md) before introducing a new platform-facing contract.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenXiangda 2.0 Architecture"
3
+ short_description: "Design typed OpenXiangda 2.0 application boundaries"
4
+ default_prompt: "Use $openxiangda-v2-architecture to design this OpenXiangda 2.0 application."
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: openxiangda-v2-backend
3
+ description: Build the standard OpenXiangda 2.0 NestJS application backend. Use when implementing App APIs, Data API transactions, identity-aware business services, event consumers, health checks, or external integration endpoints.
4
+ ---
5
+
6
+ # OpenXiangda 2.0 Backend
7
+
8
+ Build a normal NestJS service in `apps/server`. The platform deploys one container per application and injects identity, platform endpoints, environment configuration, and secrets.
9
+
10
+ ## Request Path
11
+
12
+ 1. Use the platform guard to verify the user token and construct typed request context.
13
+ 2. Authorize the capability and contextual data policy before accessing records.
14
+ 3. Keep invariants in domain services, not controllers.
15
+ 4. Use Data API for persistence and its restricted transaction endpoint for atomic batches.
16
+ 5. Require revision or idempotency keys for retryable writes.
17
+ 6. Return stable application contracts and structured errors.
18
+ 7. Use single-record reads for details, bounded aggregate queries for reports,
19
+ and the durable business-audit endpoint for history. All remain scoped to
20
+ the request RoleSession.
21
+ 8. For attachments, initiate a platform-managed upload, upload to the signed
22
+ plan, complete verification, and persist only the returned `DataFileRef`.
23
+
24
+ ## Runtime Path
25
+
26
+ - Expose liveness and readiness endpoints.
27
+ - Consume platform events with signature verification and durable idempotency.
28
+ - Keep outbound integrations behind adapters with timeouts and correlation IDs.
29
+ - Declare external credentials in `backend.secrets`; create values with
30
+ `openxiangda secret create` and rotate them with
31
+ `openxiangda secret rotate`, using `--from-env` or `--from-file`.
32
+ - Read secrets only from injected environment references; never place values in
33
+ source, command arguments, application packages, logs, or browser responses.
34
+ - Treat `OPENXIANGDA_OAUTH_CLIENT_*` as platform-reserved workload identity.
35
+ Inspect it with `openxiangda oauth runtime status --environment <key>` and
36
+ rotate it with `openxiangda oauth runtime rotate --environment <key>
37
+ --idempotency-key <stable-key>`. The platform stages by credential-version
38
+ CAS and rolls the same active AppVersion; no Secret is returned to the CLI.
39
+
40
+ Use `openxiangda dev` for local orchestration. Run `openxiangda check`, `openxiangda test`, and `openxiangda build --backend-image <immutable-image>` before deployment.
41
+
42
+ Read [Backend](../../docs/backend.md) for the standard module layout.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenXiangda 2.0 Backend"
3
+ short_description: "Build standard NestJS application backend services"
4
+ default_prompt: "Use $openxiangda-v2-backend to implement this OpenXiangda 2.0 backend."