openxiangda-skill-kit 2.3.133 → 2.3.134

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda-skill-kit",
3
- "version": "2.3.133",
3
+ "version": "2.3.134",
4
4
  "description": "OpenXiangda 2.0 中文 AI 技能的校验、分发与安装。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,7 +17,7 @@
17
17
  "README.md"
18
18
  ],
19
19
  "dependencies": {
20
- "openxiangda-devkit-core": "2.71.8"
20
+ "openxiangda-devkit-core": "2.72.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "tsx": "4.23.12",
@@ -118,7 +118,8 @@ Native记录事件才能使用 `ordering:record`。订阅错误先修正应用
118
118
 
119
119
  先读 `notifications.diagnostics/channels/rules`。缺少标准模板/规则时执行
120
120
  `notifications.bootstrap` 再回读。已有健康渠道可直接选默认,不必重新配置或获取密码。
121
- 新增/更新分别用 `notifications.configure-external-http` 和 `notifications.configure-dingtalk-oa`。
121
+ 新增/更新使用 `notifications.configure-external-http`、`notifications.configure-dingtalk-oa` 或 `notifications.configure-dingtalk-card`。
122
+ 互动卡片可显式启用 `authorizationMode: THIRD_PARTY_INSTALLATION`,由平台按可信消息所属组织核对三方安装;内容、模板和详情目标由应用控制。OA工作通知配置不能代替互动卡片渠道。
122
123
  完整参数见目录inputSchema;新渠道revision用0,更新用实时revision。配置只接受Secret引用,
123
124
  不接受token、明文clientSecret或收件身份。External HTTP支持HMAC、OAuth2客户端凭据和mTLS。
124
125
  正式启用沿用服务器 `confirmProduction:true`,表示该请求明确选择正式环境,无需管理页。
@@ -1706,6 +1706,140 @@ MCP 使用项目锁定的根包;在客户端配置下列 stdio 启动参数,
1706
1706
  "input"
1707
1707
  ]
1708
1708
  },
1709
+ {
1710
+ "type": "object",
1711
+ "additionalProperties": false,
1712
+ "properties": {
1713
+ "operation": {
1714
+ "const": "notifications.configure-dingtalk-card",
1715
+ "description": "配置钉钉互动卡片与可选的三方组织授权;仅使用 Secret 引用"
1716
+ },
1717
+ "environment": {
1718
+ "type": "string",
1719
+ "enum": [
1720
+ "test",
1721
+ "production"
1722
+ ]
1723
+ },
1724
+ "input": {
1725
+ "type": "object",
1726
+ "additionalProperties": false,
1727
+ "properties": {
1728
+ "bindingCode": {
1729
+ "type": "string",
1730
+ "minLength": 1,
1731
+ "maxLength": 128
1732
+ },
1733
+ "expectedRevision": {
1734
+ "type": "integer",
1735
+ "minimum": 0,
1736
+ "maximum": 9007199254740991
1737
+ },
1738
+ "status": {
1739
+ "type": "string",
1740
+ "enum": [
1741
+ "active",
1742
+ "paused"
1743
+ ]
1744
+ },
1745
+ "config": {
1746
+ "type": "object",
1747
+ "additionalProperties": false,
1748
+ "properties": {
1749
+ "schemaVersion": {
1750
+ "const": "openxiangda.notification.dingtalk-card-channel/v2"
1751
+ },
1752
+ "corpId": {
1753
+ "type": "string",
1754
+ "minLength": 1,
1755
+ "maxLength": 128
1756
+ },
1757
+ "usage": {
1758
+ "const": "ADVANCED"
1759
+ },
1760
+ "authorizationMode": {
1761
+ "const": "THIRD_PARTY_INSTALLATION"
1762
+ },
1763
+ "defaultCardTemplateId": {
1764
+ "type": "string",
1765
+ "minLength": 1,
1766
+ "maxLength": 255
1767
+ },
1768
+ "informationalTemplateParameters": {
1769
+ "type": "object",
1770
+ "additionalProperties": false,
1771
+ "properties": {
1772
+ "content": {
1773
+ "type": "string",
1774
+ "minLength": 1,
1775
+ "maxLength": 64,
1776
+ "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
1777
+ },
1778
+ "link": {
1779
+ "type": "string",
1780
+ "minLength": 1,
1781
+ "maxLength": 64,
1782
+ "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
1783
+ }
1784
+ },
1785
+ "required": [
1786
+ "content",
1787
+ "link"
1788
+ ]
1789
+ },
1790
+ "clientIdSecretRef": {
1791
+ "type": "string",
1792
+ "minLength": 1,
1793
+ "maxLength": 128
1794
+ },
1795
+ "clientSecretSecretRef": {
1796
+ "type": "string",
1797
+ "minLength": 1,
1798
+ "maxLength": 128
1799
+ },
1800
+ "robotCode": {
1801
+ "type": "string",
1802
+ "minLength": 1,
1803
+ "maxLength": 255
1804
+ },
1805
+ "callbackMode": {
1806
+ "const": "STREAM"
1807
+ },
1808
+ "supportForward": {
1809
+ "const": false
1810
+ },
1811
+ "actionTokenTtlMinutes": {
1812
+ "type": "integer",
1813
+ "minimum": 5,
1814
+ "maximum": 43200
1815
+ }
1816
+ },
1817
+ "required": [
1818
+ "schemaVersion",
1819
+ "corpId",
1820
+ "usage",
1821
+ "clientIdSecretRef",
1822
+ "clientSecretSecretRef",
1823
+ "callbackMode",
1824
+ "supportForward",
1825
+ "actionTokenTtlMinutes"
1826
+ ]
1827
+ }
1828
+ },
1829
+ "required": [
1830
+ "bindingCode",
1831
+ "expectedRevision",
1832
+ "status",
1833
+ "config"
1834
+ ]
1835
+ }
1836
+ },
1837
+ "required": [
1838
+ "operation",
1839
+ "environment",
1840
+ "input"
1841
+ ]
1842
+ },
1709
1843
  {
1710
1844
  "type": "object",
1711
1845
  "additionalProperties": false,
@@ -29,7 +29,8 @@
29
29
  | 应用角色 `self` / `subtree` | V2 声明、组织维度角色绑定和实时 SQL 准入已接通 | 声明每个角色的覆盖意图;旧应用未声明继续沿用原行为 |
30
30
  | 家校事实到应用角色、班级范围的消费 | `authz.directoryRoleSources` 由平台投影到应用角色和字符串 scope | 使用真实来源角色事实,目录派生绑定不能手工覆盖;事实退休立即拒绝旧投影 |
31
31
  | 组织数据归属、隔离、后代可见与内容下发 | `organization.mode=owned/inherited-down`、不可改归属及 RLS 已实现 | 声明策略并核验目标站点的配套能力,按真实组织角色验收允许和拒绝 |
32
- | 安装回调、每校自动定时同步、组织通知路由与链接生成 | 尚未完成整条自动接入 | 不假定安装完成后立即能登录,不假定消息自动选中正确安装 |
32
+ | 安装回调、每校自动定时同步 | 尚未完成整条自动接入 | 不假定安装完成后立即能登录 |
33
+ | 三方互动卡片按组织授权与身份路由 | 配套平台支持显式启用的THIRD_PARTY_INSTALLATION渠道 | 核对可信来源组织、有效安装及企业身份;应用控制内容、模板、接收范围和详情目标,实际投递与点击分别验证 |
33
34
 
34
35
  平台管理组织的授权与应用业务授权是两种事实。能开通学校或查询组织树,不会自动获得该学校的业务数据权限;看到一条成员关系,也不会自动成为应用管理员。
35
36
 
@@ -181,7 +182,7 @@ data: {
181
182
 
182
183
  组织已开通但尚未安装,或安装已匹配但成员尚未同步,均不等于用户已获得应用访问权限。提示“账号信息尚未同步,请稍后再试”等状态可以使用实际平台结果,不能假装登录成功。自动安装事件、逐组织定时同步、应用可触发的有界同步请求尚未接通,不应在应用里开启无界轮询或用管理员凭据调用修复接口。
183
184
 
184
- 平台组织 registry 支持每企业安装信息,但尚未完成 Notification Hub 按目标组织选择安装、corp-bound 详情链接的完整接入。消息到人、消息点击进入正确学校和该用户有业务权限是三个独立条件,需分别验收;不能仅凭 unionId 就认定通知会路由到正确学校。
185
+ 配套平台版本的 Notification Hub 支持通过THIRD_PARTY_INSTALLATION卡片渠道按持久化来源组织选择有效Suite安装与企业身份,首次接受通知时固定接收范围及目标安装,发送前复核身份。应用通过正式事件通知契约声明内容和目标;需要班级来源角色时可声明directoryRecipients,平台仅在事件所属组织中有界解析,不导出通讯录。信息模板的变量名由应用配置,链接封装保留应用业务参数和corpId占位符,详见[工作流与事件](workflow-events.md)。管理员必须先核对目标站点的配套版本、渠道、安装与权限。消息到人、消息点击进入正确学校和该用户有业务权限是三个独立条件,需分别验收;不能仅凭 unionId 或SDK接口存在就认定实际路由通过。
185
186
 
186
187
  ## 开发前核对与验收 {#verification}
187
188
 
@@ -202,3 +203,5 @@ DirectoryClassSummary.directoryClassId 是平台目录 UUID,sourceClassId 是
202
203
  具名后端动作声明 platformAccess: { directoryClasses: { maxIds: 20 } },调用 OpenXiangdaBusinessDirectoryService.currentClasses(sourceClassIds) 精确解析1..maxIds个来源班级。同一动作证明中的人和工作组织由平台决定,不能传入其他userId/corpId/organizationId。缺少来源事实、工作组织、活动成员或任一选择不可读时整体拒绝;事务还需 actor-authority 和业务行边界复核。该能力是只读目录,无目录同步/管理授权。
203
204
 
204
205
  HTTP GET /openxiangda-api/v2/platform/organizations/me/directory-classes 只接受limit/after;POST /openxiangda-api/v2/applications/:appCode/directory/current-classes 的 schemaVersion 为 openxiangda.current-classes-directory-request/v1、字段为sourceClassIds。返回 openxiangda.directory-class-page/v1,绑定userId和organizationId。未部署此能力的站点不能仅凭SDK方法存在就报告接入完成。
206
+
207
+ 通知事件可用 `targetOrganizationPath` 指向不可变业务事实中的目标组织ID(例如区级规则所属组织)。平台核验同租户有效组织及来源的祖先/后代关系,按目标组织核验接收人及安装;URL或浏览器输入不授予权限。`directoryRecipients` 始终限原学校,不允许借此跨组织展开班级成员。来源组织归属保留,接受后的目标与接收人冻结,原键重试不重新展开。
@@ -1310,3 +1310,18 @@ generationPath、sequencePath、statePath、recipientPaths、titlePath 和可选
1310
1310
  并创建下一轮,不因管理员变化覆盖旧任务。此能力复用平台任务中心、通知发件箱、
1311
1311
  供应方关闭和审计;普通 informational 通知仍不能创建待办。业务提交成功不等于
1312
1312
  供应方投递或用户收到,分别核对业务回执、事件投递和消息详情。
1313
+
1314
+
1315
+ ### 三方应用互动卡片与班级接收范围
1316
+
1317
+ 应用通过 `notifications.configure-dingtalk-card` 配置模板、Secret引用和可选的 `authorizationMode: THIRD_PARTY_INSTALLATION`。三方模式按消息持久化来源组织核对Suite安装及企业身份;配置corpId仅供管理员检查渠道,不作为未知消息的默认投递企业。应用决定内容、模板和PC/移动详情目标,平台统一校验、投递并维护回执。
1318
+
1319
+ 信息模板可以声明 `informationalTemplateParameters: { content: 'content', link: 'link' }`:变量名属于应用;内容来自应用的summary,链接从应用声明的navigationTarget封装,保留路由、业务参数与字面量corpId占位符。该模式不能隐藏审批办理动作,原标准模板默认不变。高级显式卡片继续使用应用提供的cardParamMap。
1320
+
1321
+ 事件通知的可选 `directoryRecipients: [{ classIdPath: 'projection.classId', roleCodes: ['guardian'] }]` 按不可变事件所属组织解析已同步班级身份,可与recipientPaths合并去重;recipientPaths可在有目录范围时传空数组。角色限guardian/head_teacher/teacher,最多20个范围,合计最多1000人;无有效人员、无来源组织、超限、失效身份均拒绝。此能力不导出通讯录、不依据URL的corpId授权、不推断其他组织。
1322
+
1323
+ 上线渠道不会补发历史通知;真实金丝雀投递仅使用指定新业务和接收人。渠道健康、消息收到、点击打开正确组织以及业务详情权限需分别验收。
1324
+
1325
+ 通知事件可用 `targetOrganizationPath` 指向不可变业务事实中的目标组织ID(例如区级规则所属组织)。平台核验同租户有效组织及来源的祖先/后代关系,按目标组织核验接收人及安装;URL或浏览器输入不授予权限。`directoryRecipients` 始终限原学校,不允许借此跨组织展开班级成员。来源组织归属保留,接受后的目标与接收人冻结,原键重试不重新展开。
1326
+
1327
+ worker-effect在readFields中可显式声明系统只读元数据 `organization_id`,用于冻结继承规则的真实所有者;行授权不变,未授予不能选择,写入始终拒绝。