openxiangda 1.0.263 → 1.0.265

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.
@@ -1,4 +1,5 @@
1
1
  <!-- OpenXiangda-Policy-Version: 7 -->
2
+
2
3
  # AGENTS.md — OpenXiangda React SPA 应用工作区
3
4
 
4
5
  本工作区是标准 React 18 + Vite + React Router 应用。默认模板只提供应用壳、账号菜单和一个首页,不是开发验证控制台。
@@ -17,7 +18,7 @@
17
18
  - 调查预算默认为一次覆盖完整调用链的 CodeGraph 查询,只有明确缺失符号时再补一次精确查询;普通任务只加载一个领域技能。租约、构建或部署状态未变化时不重复输出相同进度,使用 `openxiangda task status --watch` 等待状态变化。
18
19
  - 账号、角色、权限、数据范围、组织账号、RBAC、查询参数授权需求必须先运行 `openxiangda design gates --topic permissions --json`,选择 `managed-platform-account` / `existing-platform-user-assignment` / `static-role-permission` / `query-param-context`,输出权限矩阵后再实现。
19
20
  - 应用角色只读查询组织账号时声明 `app:organization:read`;创建、修改账号/部门或重置密码时声明 `app:organization:manage`。创建角色、分配成员或维护权限组也必须在角色资源的 `apiPermissionCodes` 声明对应的 `app:role:manage`、`app:page-permission-group:manage`、`app:form-permission-group:manage`。
20
- - 家校关系页面调用 `sdk.organization.schoolContact.*`;已登录非游客用户无需绑定应用角色权限,默认范围是当前租户全部关系。只有明确需要本人或任教班级限制时才声明 `:self:read` / `:class:read`。
21
+ - 家校关系页面调用 `sdk.organization.schoolContact.*`;用 `SCHOOL_HEAD_TEACHER` 判断全局班主任身份,用 `teachers.list` 的 `isHeadTeacher`、`teacher.managedClasses` 和 `class.headTeachers` 判断具体班级双向关系。已登录非游客用户无需绑定应用角色权限,默认范围是当前租户全部关系。只有明确需要本人或任教班级限制时才声明 `:self:read` / `:class:read`。
21
22
  - 默认用户界面保持克制:左侧应用导航、顶部账号信息、首页内容区域。
22
23
  - 不在默认可见页面展示 SDK、Runtime、Cookie、Proxy、Playwright、AI 验证、调试上下文、构建号等开发语言。
23
24
  - 使用 React Router 管理路由,路由定义在 `src/app/router.tsx`。
@@ -128,7 +129,11 @@ React SPA 页面需要声明菜单 code、route code 和 path pattern。默认
128
129
  页面中可以使用:
129
130
 
130
131
  ```tsx
131
- import { PermissionBoundary, useAppMenus, useRuntimeBootstrap } from "openxiangda/runtime/react";
132
+ import {
133
+ PermissionBoundary,
134
+ useAppMenus,
135
+ useRuntimeBootstrap,
136
+ } from "openxiangda/runtime/react";
132
137
  ```
133
138
 
134
139
  `PermissionBoundary` 只能做展示保护,不能替代后端权限。不要硬编码角色、前端模拟权限、只判断 query 参数或用空数组兜底伪装成功。后端返回 401 时跳登录,403 时展示无权限状态。
@@ -1,4 +1,5 @@
1
1
  <!-- OpenXiangda-Policy-Version: 7 -->
2
+
2
3
  # AGENTS.md — OpenXiangda 工作区 AI 强约束
3
4
 
4
5
  > 任何 AI(Qoder / Claude / Codex / Cursor / Copilot 等)在本工作区操作前 **必须先读完本文件**。
@@ -24,25 +25,25 @@ Delivery V2 自动从期望状态按资源指纹计算精确范围,使用 CLI
24
25
 
25
26
  ## 路由表 — 用户意图 → 命令 / skill
26
27
 
27
- | 用户说(中 / 英) | 用 skill | 第一条命令 |
28
- |---|---|---|
29
- | 发布 / 上线 / 部署 / publish / deploy | `openxiangda-core` | `openxiangda check --environment preproduction` → `openxiangda deploy preproduction` |
30
- | 晋级生产 | `openxiangda-core` | `openxiangda deploy production --package <packageDigest>` |
31
- | 发布失败 / 断点续跑 | `openxiangda-core` | `openxiangda status <runId>` → `openxiangda retry <runId>` |
32
- | 创建应用 / 新建 app / 初始化工作区 | `openxiangda-app` | `openxiangda workspace init <dir> --profile <name> --app-name "..."` |
33
- | 绑定已有应用 | `openxiangda-app` | `openxiangda workspace bind --profile <name> --app-type APP_XXX` |
34
- | 创建 / 改表单字段、schema、表单页 | `openxiangda-form` | 编辑表单并声明 form-setting bundle → `resource publish form-setting --only <code>` 暂存;整应用由 `app-finalize` 激活 |
35
- | 导出表单数据 / 图片 / 附件 / Excel / zip | `openxiangda-form` | `openxiangda form export <formCode> --mode xlsx|xlsx-images|package --profile <name>` |
36
- | 创建 / 改自定义代码页、portal、看板 | `openxiangda-page` | 编辑 `src/pages/<code>/` → `workspace publish --page <code>` |
37
- | 审批流程 / 流程节点 / JS_CODE | `openxiangda-workflow-automation` | `openxiangda workflow validate / create / publish` |
38
- | 自动化 / 定时任务 / 提交触发 / cron | `openxiangda-workflow-automation` | `openxiangda automation validate / create / publish / enable` |
28
+ | 用户说(中 / 英) | 用 skill | 第一条命令 |
29
+ | --------------------------------------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
30
+ | 发布 / 上线 / 部署 / publish / deploy | `openxiangda-core` | `openxiangda check --environment preproduction` → `openxiangda deploy preproduction` |
31
+ | 晋级生产 | `openxiangda-core` | `openxiangda deploy production --package <packageDigest>` |
32
+ | 发布失败 / 断点续跑 | `openxiangda-core` | `openxiangda status <runId>` → `openxiangda retry <runId>` |
33
+ | 创建应用 / 新建 app / 初始化工作区 | `openxiangda-app` | `openxiangda workspace init <dir> --profile <name> --app-name "..."` |
34
+ | 绑定已有应用 | `openxiangda-app` | `openxiangda workspace bind --profile <name> --app-type APP_XXX` |
35
+ | 创建 / 改表单字段、schema、表单页 | `openxiangda-form` | 编辑表单并声明 form-setting bundle → `resource publish form-setting --only <code>` 暂存;整应用由 `app-finalize` 激活 |
36
+ | 导出表单数据 / 图片 / 附件 / Excel / zip | `openxiangda-form` | `openxiangda form export <formCode> --mode xlsx | xlsx-images | package --profile <name>` |
37
+ | 创建 / 改自定义代码页、portal、看板 | `openxiangda-page` | 编辑 `src/pages/<code>/` → `workspace publish --page <code>` |
38
+ | 审批流程 / 流程节点 / JS_CODE | `openxiangda-workflow-automation` | `openxiangda workflow validate / create / publish` |
39
+ | 自动化 / 定时任务 / 提交触发 / cron | `openxiangda-workflow-automation` | `openxiangda automation validate / create / publish / enable` |
39
40
  | 账号 / 角色 / 权限组 / 字段权限 / 数据范围 / 查询参数授权 | `openxiangda-permission-settings` | 先 `openxiangda design gates --topic permissions --json`,再 `openxiangda permission ...` / `openxiangda settings ...` |
40
- | 查应用结构 / 快照 / 对比 / 排查 / 报错 | `openxiangda-inspect` | `openxiangda app snapshot <APP_XXX> --profile <name> --json` |
41
- | 登录 / 切平台 / token / whoami | `openxiangda-core` | `openxiangda env --profile <name>` / `openxiangda auth status` |
42
- | 多表只读联表查询 / 报表数据源 | `openxiangda-form`(data view) | 在 `src/resources/data-views/<code>.json` 声明 → `resource publish` |
43
- | 调外部 / 第三方 API / 钉钉 / 自建系统 | `openxiangda-page`(connector) | 在 `src/resources/connectors/<code>.json` 声明 → `sdk.connector.invoke()` |
44
- | 外部后端 / 三方系统调用享搭 / AK/SK / 开放接口 | `openxiangda-open-api` | `openxiangda open-api spec list --search <keyword> --json` |
45
- | 资源诊断 / 小步修复 / 同步 manifest | 对应资源 skill | `openxiangda route|public-access|auth-config|function|connector|notification|data-view|menu|permission ... --dry-run` |
41
+ | 查应用结构 / 快照 / 对比 / 排查 / 报错 | `openxiangda-inspect` | `openxiangda app snapshot <APP_XXX> --profile <name> --json` |
42
+ | 登录 / 切平台 / token / whoami | `openxiangda-core` | `openxiangda env --profile <name>` / `openxiangda auth status` |
43
+ | 多表只读联表查询 / 报表数据源 | `openxiangda-form`(data view) | 在 `src/resources/data-views/<code>.json` 声明 → `resource publish` |
44
+ | 调外部 / 第三方 API / 钉钉 / 自建系统 | `openxiangda-page`(connector) | 在 `src/resources/connectors/<code>.json` 声明 → `sdk.connector.invoke()` |
45
+ | 外部后端 / 三方系统调用享搭 / AK/SK / 开放接口 | `openxiangda-open-api` | `openxiangda open-api spec list --search <keyword> --json` |
46
+ | 资源诊断 / 小步修复 / 同步 manifest | 对应资源 skill | `openxiangda route | public-access | auth-config | function | connector | notification | data-view | menu | permission ... --dry-run` |
46
47
 
47
48
  ## 必须遵守
48
49
 
@@ -51,7 +52,7 @@ Delivery V2 自动从期望状态按资源指纹计算精确范围,使用 CLI
51
52
  - ✅ L2/L3 保留 context → propose → 用户确认 → approve;默认只创建 change/coverage/release,完整文档由 `sdd render` 按需生成。approval、coverage 与实际发布范围为硬门禁,未完成的任务/证据/规格文案只告警。需要严格文档门禁时显式配置 `strictDocumentation: true`。
52
53
  - ✅ 涉及账号、角色、权限、数据范围、组织账号、RBAC、查询参数授权时,先跑 `openxiangda design gates --topic permissions --json`,选择 `managed-platform-account` / `existing-platform-user-assignment` / `static-role-permission` / `query-param-context`,并输出权限矩阵后再改资源。
53
54
  - ✅ 某个应用角色如果要查询组织账号,声明 `app:organization:read`;如需创建、修改账号/部门或重置密码,再声明 `app:organization:manage`。角色设置、页面/表单权限组等能力同样通过 `src/resources/roles/<code>.json` 的 `apiPermissionCodes` 显式授权,例如 `app:role:manage`、`app:page-permission-group:manage`、`app:form-permission-group:manage`。
54
- - ✅ 查询家校通讯录的家长、学生、教师身份和监护关系时使用 `sdk.organization.schoolContact.*` / `ctx.organization.schoolContact.*`。已登录非游客用户无需绑定应用角色权限,默认查询当前租户全部关系;只有明确要求时才声明 `:self:read` 或 `:class:read` 收紧。
55
+ - ✅ 查询家校通讯录的家长、学生、教师、班主任身份和班级/监护关系时使用 `sdk.organization.schoolContact.*` / `ctx.organization.schoolContact.*`。`SCHOOL_HEAD_TEACHER` 只判断全局身份,具体班级必须读取 `teachers.list` 的 `isHeadTeacher`、`teacher.managedClasses` 和 `class.headTeachers`。已登录非游客用户无需绑定应用角色权限,默认查询当前租户全部关系;只有明确要求时才声明 `:self:read` 或 `:class:read` 收紧。
55
56
  - ✅ 单文件改动默认按 change 和逻辑资源增量发布:`workspace plan --profile <name> --change <change> --changed`,再 `workspace publish --profile <name> --change <change> --only pages/a,forms/b --dry-run` → 正式发布。
56
57
  - ✅ 用户 token 在 `~/.openxiangda/profiles.json`;项目 state 在 `.openxiangda/state.json`(只存 ID)。
57
58
  - ✅ 共享环境(`APP_OSS_*`、反馈机器人等)在 `~/.openxiangda/.env`,项目 `.env` 仅做 per-workspace override。