@microi.net/cli 5.8.0 → 5.8.1
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/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +64 -64
- package/scripts/microi-skills.meta.json +284 -281
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +432 -432
- package/skills/README.md +2 -1
- package/skills/ai-engine/references/ai-employees.md +4 -0
- package/skills/ai-platform-governance/SKILL.md +8 -8
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +9 -9
- package/skills/app-store/SKILL.md +53 -3
- package/skills/microi/SKILL.md +14 -0
- package/skills/microi-ai-application/SKILL.md +9 -0
- package/skills/microi-client-frontend/SKILL.md +5 -5
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +3 -3
- package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +4 -4
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +3 -3
- package/skills/microi-codex/SKILL.md +9 -0
- package/skills/microi-deployment/SKILL.md +7 -0
- package/skills/microi-deployment/references/deployment-matrix.md +8 -0
- package/skills/microi-form-layout/SKILL.md +6 -6
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +3 -3
- package/skills/microi-frontend-sdk/SKILL.md +6 -6
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +7 -7
- package/skills/microi-mobile-app-quality/SKILL.md +12 -8
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +10 -10
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +4 -4
- package/skills/microi-system-delivery/SKILL.md +5 -5
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +1 -1
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +6 -4
- package/skills/microi-ui/SKILL.md +6 -6
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +5 -5
- package/skills/microi-uniapp-frontend/SKILL.md +10 -10
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +7 -7
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +10 -10
- package/skills/page-engine/SKILL.md +8 -8
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +3 -3
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +4 -4
- package/skills/playwright-e2e/SKILL.md +8 -8
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +5 -5
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +3 -3
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +7 -7
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +4 -4
- package/skills/system-observability/SKILL.md +3 -0
- package/skills/ui-design/SKILL.md +7 -7
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +2 -2
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +3 -3
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +2 -2
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +1 -1
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +3 -3
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +2 -2
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +4 -4
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +5 -5
- package/skills/unity-integration/references/ai-app-delivery.md +16 -0
- package/skills/v8-api-config/SKILL.md +6 -0
- package/skills/v8-crud-api/SKILL.md +9 -7
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +8 -8
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +2 -2
- package/skills/v8-export-import/SKILL.md +4 -4
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +3 -3
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +4 -4
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +1 -1
- package/skills/v8-file-upload/SKILL.md +25 -4
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +3 -3
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +3 -3
- package/skills/v8-frontend-events/SKILL.md +6 -6
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +5 -5
- package/skills/v8-http-integration/SKILL.md +4 -4
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +7 -7
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +2 -2
- package/skills/v8-image-processing/SKILL.md +1 -1
- package/skills/v8-menu-buttons/SKILL.md +4 -4
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +4 -4
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +5 -5
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +3 -3
- package/skills/v8-mq-mqtt/SKILL.md +2 -2
- package/skills/v8-mq-mqtt/references/mqtt-production.md +1 -1
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +1 -1
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +1 -1
- package/skills/v8-security/SKILL.md +15 -5
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +3 -3
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +8 -6
- package/skills/v8-table-event/SKILL.md +5 -5
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +6 -6
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +2 -2
- package/skills/v8-workflow/SKILL.md +15 -7
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +7 -7
- package/skills/workspace-conventions/SKILL.md +16 -7
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +5 -4
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +14 -14
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +1 -1
package/skills/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 包含的 Skills
|
|
10
10
|
|
|
11
|
-
当前仓库包含
|
|
11
|
+
当前仓库包含 68 个 `SKILL.md`。以下清单按任务类型组织;AI 必须先完整读取与当前任务匹配的 Skill,再执行源码、MCP、文档或交付操作。
|
|
12
12
|
|
|
13
13
|
### V8 引擎核心(后端)
|
|
14
14
|
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
| **v8-formengine-http** | 移动端/外部系统直接调用 FormEngine HTTP 路由的约定 | `v8-formengine-http/SKILL.md` |
|
|
91
91
|
| **v8-explorer-tree** | VS Code 插件 V8 资源管理器目录规范和本地文件归档 | `v8-explorer-tree/SKILL.md` |
|
|
92
92
|
| **workspace-conventions** | 工作区文件放置、临时产物、项目专属目录和根目录污染防护 | `workspace-conventions/SKILL.md` |
|
|
93
|
+
| **microi** | 吾码快捷入口,按任务读取工作区规则并选择已登录 MCP 连接 | `microi/SKILL.md` |
|
|
93
94
|
| **microi-codex-installer** | Codex 插件立即检测、授权安装、旧 marketplace 迁移与验收 | `microi-codex-installer/SKILL.md` |
|
|
94
95
|
| **microi-codex** | Codex 中连接租户、读取实时上下文并完成 Microi 等价工作流 | `microi-codex/SKILL.md` |
|
|
95
96
|
| **production-readonly-audit** | 正式环境只读巡检,不改动线上数据的业务核对流程 | `production-readonly-audit/SKILL.md` |
|
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
|
|
38
38
|
## 验收与边界
|
|
39
39
|
|
|
40
|
+
桌面工作台未登录时只显示连接引导,不调用员工业务接口、不暴露原始 IPC 堆栈。已登录连接只读取当前租户/负责人的团队;切换连接时丢弃旧请求的迟到响应。任务需填写成果目标、验收标准和执行方式,依赖只可选择已验收任务;重复提交沿用请求标识,发生不确定结果时先回读。
|
|
41
|
+
|
|
42
|
+
节点停止接单时不能在迟到的队列查询后继续领取,也不能丢弃正在生成或待回传成果。成果先持久化、后报告;云端接收后本地清理失败仍重放相同报告,不重新调用模型。测试必须分别覆盖真实云端模型、跨岗验收接力、真实本机 HTTP 协议和界面操作;界面夹具不代表真实 Gateway 已联调。
|
|
43
|
+
|
|
40
44
|
覆盖幂等去重与内容冲突、负责人隔离、依赖未验收、同员工并发、旧租约报告、取消后迟到结果、退回后的独立成果、尝试上限、报告网络失败、预算并发、每日规划幂等、跨岗位草稿协作和进程重启。完整 24 小时验收还需真实节点与模型连续运行和跨日预算回读。
|
|
41
45
|
|
|
42
46
|
财务、招聘、合同、营销和客服草稿不代表已付款、录用、签署或发送。测试计划与代码草稿不代表测试通过;实际完成需要执行日志、产物与独立回读。
|
|
@@ -8,7 +8,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
8
8
|
# Microi吾码 AI 平台治理中心
|
|
9
9
|
|
|
10
10
|
<!-- microi-progressive:begin -->
|
|
11
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-000 sha256=
|
|
11
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-000 sha256=48b82af9f11388d6872cf90aa2c74a1d35c1db948483f30615ce054989ef0d77 -->
|
|
12
12
|
## 何时使用
|
|
13
13
|
|
|
14
14
|
以下任一需求都应使用本 Skill:
|
|
@@ -24,7 +24,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
24
24
|
- 发布或安装官方应用 `ai-platform-studio`。
|
|
25
25
|
|
|
26
26
|
<!-- /microi-progressive:chunk -->
|
|
27
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-001 sha256=
|
|
27
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-001 sha256=47197af80919be7e08ef051884e70900714bdf53f551fad16e119a86d6efb63c -->
|
|
28
28
|
## 不可破坏的边界
|
|
29
29
|
|
|
30
30
|
- DiyToken 是唯一会话入口;继续复用现有用户、角色、部门、菜单、表权限和数据范围,禁止建立第二套 Token/RBAC。
|
|
@@ -36,7 +36,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
36
36
|
- Secret 只保存引用;列表、Diff、错误、日志、截图、导出和运行台账不得出现密码、Token、私钥或连接串原文。
|
|
37
37
|
|
|
38
38
|
<!-- /microi-progressive:chunk -->
|
|
39
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-002 sha256=
|
|
39
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-002 sha256=527f1cda978f88d0d1507d90aac71089f7585699f0ad7d5266dc7e40ba026b7c -->
|
|
40
40
|
## 官方应用事实
|
|
41
41
|
|
|
42
42
|
应用 Key:`ai-platform-studio`,当前资源合同版本:`v2.0.9`。
|
|
@@ -63,7 +63,7 @@ mci-release-execute-extension
|
|
|
63
63
|
Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key 改回 `Managed`。
|
|
64
64
|
|
|
65
65
|
<!-- /microi-progressive:chunk -->
|
|
66
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-003 sha256=
|
|
66
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-003 sha256=3d43295846e19e8b5cb526442ff8aff8f0317db88f5be803b5798e63118546e2 -->
|
|
67
67
|
## 菜单层级与语义
|
|
68
68
|
|
|
69
69
|
应用安装或升级后只保留一个可见入口,禁止把历史工作台或 40 个数据菜单继续暴露到导航:
|
|
@@ -90,7 +90,7 @@ Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key
|
|
|
90
90
|
向用户解释时必须区分页面类型:`配置` 是日常维护入口,`审批/处置` 在有待办或异常时使用,`运行` 用于观察和恢复任务,`台账` 主要供审计与排错。不得把台账页描述成需要人工逐项维护的业务模块。
|
|
91
91
|
|
|
92
92
|
<!-- /microi-progressive:chunk -->
|
|
93
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-004 sha256=
|
|
93
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-004 sha256=f4fbda7d2522d95e4aaa6f010637b6dfe652a7871614177ce489df7830b9c911 -->
|
|
94
94
|
## 通用调用规则
|
|
95
95
|
|
|
96
96
|
1. 通过 MCP 回读当前表结构、菜单、接口、应用和微服务事实。
|
|
@@ -103,7 +103,7 @@ Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key
|
|
|
103
103
|
旧 Hash、旧 RowVersion、旧 fencing token、未知状态、未知步骤或未知字段一律失败关闭。
|
|
104
104
|
|
|
105
105
|
<!-- /microi-progressive:chunk -->
|
|
106
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-005 sha256=
|
|
106
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-005 sha256=6298a32cb0b0c2f226485697bba306936265dab62248bb48a1709e36f73241e9 -->
|
|
107
107
|
## 门户与资源版本
|
|
108
108
|
|
|
109
109
|
调用顺序:
|
|
@@ -121,7 +121,7 @@ mci-portal-publish-plan
|
|
|
121
121
|
- `mci-resource-rollback` 校验 `ExpectedCurrentHash` 并创建新回滚版本,不能删除历史。
|
|
122
122
|
|
|
123
123
|
<!-- /microi-progressive:chunk -->
|
|
124
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-006 sha256=
|
|
124
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-006 sha256=ec5c949ac0615c9917ce1910a397f5ab1e7878fb56a35cb761cd5ebbdf96c714 -->
|
|
125
125
|
## 身份与访问治理
|
|
126
126
|
|
|
127
127
|
### 身份同步
|
|
@@ -148,7 +148,7 @@ mci-identity-sync-plan → 人工处置冲突 → mci-identity-sync-apply
|
|
|
148
148
|
`mci-permission-explain` 必须调用 `V8.Method.ExplainAuthorizationDecision` 复用真实 FormEngine 授权逻辑;禁止从菜单/角色表重新拼近似结论。
|
|
149
149
|
|
|
150
150
|
<!-- /microi-progressive:chunk -->
|
|
151
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-007 sha256=
|
|
151
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-007 sha256=64f2699d58860ed29782136673b51bdb1488b87cd17b24b761e9d22479902ae5 -->
|
|
152
152
|
## 配置模板与漂移
|
|
153
153
|
|
|
154
154
|
`mci-configuration-publish` 输入要点:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-008 sha256=e3927151358f0c9e801c1027edb877332c8e148f245d58eade2eaae53ddb7948 -->
|
|
6
6
|
## 功能开关
|
|
7
7
|
|
|
8
8
|
发布调用 `mci-feature-flag-publish`,求值调用 `mci-feature-flag-evaluate`。
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- 功能开关不能代替任何权限、状态机、幂等或审计。
|
|
15
15
|
|
|
16
16
|
<!-- /microi-progressive:chunk -->
|
|
17
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-009 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-009 sha256=ca73d439788b802c1b999c0a7973e735caf8b4149d4be116511e470ca93d728e -->
|
|
18
18
|
## 发布状态机
|
|
19
19
|
|
|
20
20
|
### 固定计划
|
|
@@ -73,7 +73,7 @@ Submit / Approve / Reject / Cancel / Reopen
|
|
|
73
73
|
- 变更子步骤使用独立事务;成功后台账中断时用 `StepIdempotencyKey` 重试。
|
|
74
74
|
|
|
75
75
|
<!-- /microi-progressive:chunk -->
|
|
76
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-010 sha256=
|
|
76
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-010 sha256=cb8f46acd05462f4fb99d52517b34f9f9a7ae785f44d6ea0c0f1e79f050068d0 -->
|
|
77
77
|
## 服务治理
|
|
78
78
|
|
|
79
79
|
### 实例协议
|
|
@@ -93,7 +93,7 @@ Submit / Approve / Reject / Cancel / Reopen
|
|
|
93
93
|
V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原子能力,不能获得原始 Redis 客户端或自定义 Key 前缀逃逸租户边界。
|
|
94
94
|
|
|
95
95
|
<!-- /microi-progressive:chunk -->
|
|
96
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-011 sha256=
|
|
96
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-011 sha256=db964d7f412ce56112c7a8173a10a6a1f33c762761747b6db780463a0e07f79d -->
|
|
97
97
|
## Trace、告警与日志
|
|
98
98
|
|
|
99
99
|
### 可信原子能力
|
|
@@ -122,7 +122,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
122
122
|
- `Extension` 模式由 `mci-log-archive-extension` 处理;法律保留不能删除。
|
|
123
123
|
|
|
124
124
|
<!-- /microi-progressive:chunk -->
|
|
125
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-012 sha256=
|
|
125
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-012 sha256=82e059f90494a679d4073693b83904826841a7c87e0ed1e5ab0e28575eedffac -->
|
|
126
126
|
## 资产、协作和变更集
|
|
127
127
|
|
|
128
128
|
- `mci-asset-publish` 使用 `microi.asset.v1`,声明 Component、Props、Setters、DataAdapters、Platforms、DependencyPackages。
|
|
@@ -133,7 +133,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
133
133
|
- Page JSON ↔ Vue SFC 只处理平台生成的受控标记,不执行任意 Vue/JavaScript,也不承诺任意源码无损反编译。
|
|
134
134
|
|
|
135
135
|
<!-- /microi-progressive:chunk -->
|
|
136
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-013 sha256=
|
|
136
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-013 sha256=b286f47071ac64e9e7d75929134123e8a3ef65a05ddb86007554ae05099e1445 -->
|
|
137
137
|
## 可恢复导入
|
|
138
138
|
|
|
139
139
|
- `mci-import-plan`:JSON/CSV/Excel 解析、字段元数据校验、文件/计划/行 Hash、公式注入与敏感字段拒绝。
|
|
@@ -145,7 +145,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
145
145
|
单批最多 2,000 行。更大数据应拆批或使用专用迁移作业,不提高内存上限硬顶。
|
|
146
146
|
|
|
147
147
|
<!-- /microi-progressive:chunk -->
|
|
148
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-014 sha256=
|
|
148
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-014 sha256=9c5387dccbc2ff092470edc70b9600416700ac734f15df2c2e775bae0adf00c4 -->
|
|
149
149
|
## 页面与蓝图版本
|
|
150
150
|
|
|
151
151
|
页面工具:
|
|
@@ -161,7 +161,7 @@ microi_rollback_page_design
|
|
|
161
161
|
蓝图提供对应的历史、读取、比较、导出和回滚工具。修改前读取 CurrentHash,保存传 ExpectedHash,写后回读新 Hash 与不可变历史。回滚创建新版本,不删除旧历史。
|
|
162
162
|
|
|
163
163
|
<!-- /microi-progressive:chunk -->
|
|
164
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-015 sha256=
|
|
164
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-015 sha256=6fafd84efd63a1607c4c98c4a173d755b2ba22fb7a251a21ed4d4699556656a7 -->
|
|
165
165
|
## 应用商城发布
|
|
166
166
|
|
|
167
167
|
- 官方发布使用绑定 `https://api.itdos.com`、`OsClient=iTdos` 的 `microi_itdos`。
|
|
@@ -175,7 +175,7 @@ microi_rollback_page_design
|
|
|
175
175
|
- 商城发布不等于生产 API/Web 容器部署。
|
|
176
176
|
|
|
177
177
|
<!-- /microi-progressive:chunk -->
|
|
178
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-016 sha256=
|
|
178
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-016 sha256=76dab40556ce9a5a732c398d2f534c16478a1a88d4c1efdcdeaa6ba76d4339df -->
|
|
179
179
|
## 双节点与浏览器验收
|
|
180
180
|
|
|
181
181
|
至少覆盖:
|
|
@@ -39,6 +39,13 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
39
39
|
|
|
40
40
|
## 包内容
|
|
41
41
|
|
|
42
|
+
### 仅共享编译运行产物
|
|
43
|
+
|
|
44
|
+
- 消费者只需运行应用、无需安装业务资源时,显式传 `RuntimeAssetsOnly=true`;只接受 `ProtocolVersion=3 + ApplicationType=Web + 显式 IncludeSource=false` 和通过现有 `CommittedProof`、运行清单校验的 `SharedPublicRuntime`。不能把“不包含源码”自动等同于此模式;省略或 `false` 保持原有打包行为。
|
|
45
|
+
- 请求的菜单、表、接口、移除接口、工作流、任务、数据、路由、页面及资源策略选择均必须为空;既有商城行的 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 和 `PreparedAssets.MenuContract` 非空时拒绝,禁止静默清理历史选择。不能与 `DatabaseOnlyBuild` 混用。
|
|
46
|
+
- 现有 `microi_run_engine` 的 `params` 是动态对象,可传此开关,无需增加工具参数。对 `ai_app_publish_store` 的 `Action=InspectResourceSnapshot` 和 `Action=Publish` 都使用同一组冻结模式、版本、资产及提交证明,后者将前者返回的 `ResourceSnapshotHash` 作为 `ExpectedResourceSnapshotHash` 传入。MCP 的 `confirmExecution` 仍必须匹配引擎 Key。
|
|
47
|
+
- 下载真实发布包后,断言 `DDLStatements/PhysicalColumns/DiyTables/DiyFields/DataSets/SysMenus/WfFlowDesigns/WfNodes/WfLines/SysApiEngines/ScheduleJobs` 十一项数组全部为零,`SourceFiles/BuildAssets` 为零,`SourceZip/BuildZip` 为空,唯一运行交付为 `SharedPublicRuntime`。源码分发、服务端业务迁移和共享运行入口是独立事实,不能将共享公有编译产物当成目标租户已有业务接口或权限。
|
|
48
|
+
|
|
42
49
|
### 物理索引闭包
|
|
43
50
|
|
|
44
51
|
标准导出器必须同时导出责任表的真实唯一索引和普通复合索引,按列顺序生成独立
|
|
@@ -67,10 +74,36 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
67
74
|
|
|
68
75
|
- Manifest:应用 Key、版本、兼容平台版本、依赖和资源清单。
|
|
69
76
|
- 数据模型:表、字段、菜单、角色权限、接口引擎、事件、数据源、页面、打印、工作流、任务。
|
|
70
|
-
- 源码与构建:私有源码包与可部署构建包分离,记录 SHA-256
|
|
77
|
+
- 源码与构建:私有源码包与可部署构建包分离,记录 SHA-256。源码 ZIP 必须按当前应用
|
|
78
|
+
`PrivateSourcePath` 的已提交活动根选择当前私有行(`VersionId` 为空、`StorageScope=Private`、
|
|
79
|
+
非目录且未删除),禁止把历史版本、未提交源、上传会话或 `upload/v*` 编译文件混入。
|
|
80
|
+
已完成原子同步后的活动根可以仍在 staged 目录,不能只按目录名猜测提交状态。
|
|
81
|
+
缺失基线不回退历史;分页不完整、重复路径(含大小写)、对象后缀与归档路径不一致、
|
|
82
|
+
大小或原始字节 SHA 漂移均停止。使用当前租户可信私有字节与已有 ZIP 原子,优先对同一
|
|
83
|
+
返回归档调用可信 `ExtractZip`(兼容 `ReadZip`),完整核对每条路径、大小、原始字节 SHA、
|
|
84
|
+
文件数与总量;原子存在但失败或不完整时不能回退。仅旧节点缺少解压核验原子时,逐文件
|
|
85
|
+
校验真实字节,原生 CLR SHA 不可用则复用既有编译 ZIP 的 ES5 算法,不得跳过验签。
|
|
86
|
+
前后重读权威账号、应用指针及清单;普通非拥有者、访问密钥会话、撤权、跨租户或存储错误
|
|
87
|
+
不输出文件。节点缺少字节摘要能力时失败关闭。清单摘要沿用序数排序后的
|
|
88
|
+
`Path\tSha256\tSize` UTF-8 SHA-256;原始 ZIP 摘要与资产准备器 Base64 文本摘要分别核验。
|
|
89
|
+
传输超时先回读对象和完整条目,已有正确 Build ZIP 可复用,但错误 Source ZIP 必须保留
|
|
90
|
+
拒绝发布证据;新源码合格后通过既有准备器单独上传 Source,禁止盲目重跑未知写操作。
|
|
91
|
+
- 编译 ZIP 优先按 `ApplicationType` 选择运行类型,历史 `AppType` 只作缺少该字段时的兼容。真实文件仅接受 HTTP 200,调用既有 `RequireSsrfProtection:true` 禁止自动重定向;合法 JSON 与业务错误响应按已冻结的实际字节大小和 SHA-256 区分,不能把任何含 `Code` 的 JSON 一律拒绝。每个新 ZIP 的版本元数据必须包含非空 `RuntimeManifestHash`,等于完整已验文件清单的 `Path\tSha256\tSize` UTF-8 摘要;当前 V3 还须与精确所属应用的权威 `Completed` 版本和微服务清单一致,前后复读提交指针、请求指纹和行版本,漂移失败关闭。旧缺失哈希 ZIP 保留失败证据,不用于新正式包。
|
|
92
|
+
- 完整制包的现代 `.mjs/.cjs/.mts/.cts` 模块与既有脚本按 UTF-8 文本读取,优先调用当前租户私有文本原子且必须 `Code=1`。旧节点缺少原子或读取失败时保留既有审计 URL 回退,票据异常仍停止;不得以性能为由绕审计。二进制不转文本,最终模型逐项验证实际字节、大小与冻结 SHA。超时先查原执行链与失败原因,不并发重入。
|
|
93
|
+
- 独立源码 ZIP 必须在全新目录安装依赖并执行应用声明的全部责任测试,再核对类型与生产构建;仅构建通过不能证明测试闭包。默认测试不得依赖发布者临时树、兄弟应用或平台仓库 marker。历史兼容所需纯模块应从已发布真实源码按原字节随 owned fixtures 交付,记录版本、原路径、大小和完整 SHA;保留原业务断言,不构造替代历史行为。中央多应用契约检查继续由中央 Full 入口执行,不能重新成为独立下载源码的外部依赖。
|
|
71
94
|
- 安装/升级脚本:幂等、可恢复、可回读;不包含租户密钥、Token、连接串或 License keys。
|
|
72
95
|
- 迁移采用“先扩展、后迁移、再收缩”,支持新旧节点短暂并存。
|
|
73
96
|
|
|
97
|
+
制包读取全局 v3 运行对象时,租户私有 HDFS 代理继续保持租户目录边界。发布器仅从当前
|
|
98
|
+
`sys_microistore.CommittedPublishVersionId` 精确读取一条所属应用的 Completed 版本,核对
|
|
99
|
+
`VersionNo / RuntimeManifestHash / RequestFingerprint`、微服务清单和每个文件的不可变完整路径、
|
|
100
|
+
大小及 SHA-256,再由当前 `V8.SysConfig.ApiBase` 的可信 origin 与当前租户、应用 Key、文件
|
|
101
|
+
相对路径构造 `/micro-app/v3/tenants/.../kinds/runtime/apps/.../assets/...` 读取地址。不能从较新的
|
|
102
|
+
staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本和域名。HTTP 使用既有
|
|
103
|
+
严格 SSRF 原子禁用自动重定向,只接受 200;提供的 ETag 必须等于文件 SHA-256。文本可使用
|
|
104
|
+
解压后的 Content,二进制使用 RawBytes,两者仍须分别通过实际字节大小和 SHA-256 校验。
|
|
105
|
+
清单、提交身份、HTTP 或字节不一致时停止制包;旧无 v3 提交字段的微服务保留原校验路径。
|
|
106
|
+
|
|
74
107
|
## 接口引擎资源所有权(强制)
|
|
75
108
|
|
|
76
109
|
- 新发布包必须声明 `ResourcePolicies.ApiEngines`。不可随租户修改的核心使用 `{ Ownership:'Platform'|'Application', UpgradePolicy:'Managed' }`;提供给租户改业务的 Hook 使用 `{ Ownership:'Tenant', UpgradePolicy:'CreateIfMissing' }`。策略以本次选定且通过身份、版本、大小和 SHA-256 校验的包正文为准。
|
|
@@ -91,6 +124,18 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
91
124
|
节点/连线的完整图形后再启用。未声明该策略的历史包保持原覆盖语义。
|
|
92
125
|
- 节点稳定 Id 跨流程占用、配置读取失败、写入失败或字段/V8回读不一致均失败关闭。
|
|
93
126
|
发布包只交付停用模板,目标用户、岗位、部门及业务配置不能从官方测试环境复制。
|
|
127
|
+
- 空绑定或停用模板仍须真实结构声明。预制包发布前逐项核对流程、节点和连线的全部属性
|
|
128
|
+
与目标支持的物理列及类型;新增列必须由同包声明交付,未知属性即拒绝。`0`、空字符串
|
|
129
|
+
或 `[]` 不能证明未知字段可落库,不得凭相近名称发明控制项或补默认值绕过严格回读。
|
|
130
|
+
- 导出器在原生导出及 `PreparedPersistPackageByteBase64` 持久发布中,从可信当前租户
|
|
131
|
+
数据库读取 `wf_flowdesign/wf_node/wf_line` 的真实物理列,按大小写不敏感的字段名检查
|
|
132
|
+
全部资源属性;包自报 `PhysicalColumns` 不授予字段合法性。实际数据库已有的定制列保持
|
|
133
|
+
合法;新增列先由正规结构交付并回读,再制包。未知字段、大小写重复、列读取失败或数据库
|
|
134
|
+
类型缺失/不支持均在 HDFS 上传、日志、发布 CAS 与指针更新前失败关闭。MySQL/MariaDB、
|
|
135
|
+
SQL Server 当前解析表和 Oracle 当前用户表使用各自目录,无工作流的老包不要求该目录。
|
|
136
|
+
- 生成安装模板时,只从当前母版定义提取业务正文,从历史映射提取稳定资源 Id;构建前逐节点
|
|
137
|
+
核对完整 V8 正文与条件代码。私有源码同步、普通 Manifest 生成或管理员测试通过,不能证明
|
|
138
|
+
实际安装包中的内联正文已更新。发布前核对正式包,升级后再以目标普通岗位核对原业务请求。
|
|
94
139
|
- 验收必须包含已绑定审批人的真实租户升级与同版本重装,核对启用状态、目标绑定、受管代码
|
|
95
140
|
更新、在途待办保护及业务配置未变;空模板安装成功不能替代该验收。
|
|
96
141
|
- 安装器 `v3.0.0` 起,流程、节点、连线的新增、更新与配置/结果回读均显式传入同一个
|
|
@@ -126,7 +171,9 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
126
171
|
- “全部安装/更新”固定只处理 `ApplicationType=Platform` 的官方平台应用中未安装与存在新版本的项目,不得把 UniApp、Web、MicroService 或其它社区/AI 应用整库安装;已是最新版的应用不重新安装。批量计划、子项状态、checkpoint 和进度必须持久化到共享数据库/后台任务,支持多节点抢占、失败重试和重启恢复,不能依赖进程内集合或浏览器状态。
|
|
127
172
|
- 主租户批量维护全部子租户时,前端入口和接口引擎都必须校验主租户上下文及 `Level >= 9999`,再由可信控制面为每个启用子租户创建独立持久后台任务;父任务必须按子任务真实百分比聚合进度,等全部子任务终态后才成功或失败,并在通知中心保留每个租户、阶段和原始失败原因。所有子任务可立即创建,但固定商城工作器必须通过配置租户 Redis 的集群并发租约跨租户串行执行,避免共享物理库并发 DDL/元数据写入死锁;分片幂等任务使用足以覆盖短时死锁和滚动重启的有界重试预算,禁止无限重试。`MaxAttempts` 表示连续失败预算:任一分片成功写入 checkpoint 后必须把 `AttemptCount` 与陈旧 `LastError` 清零,不能让数百个成功分片之间偶发的网络错误按任务生命周期累计并误终结。分片重新入队后必须按 `COALESCE(NextRunTime, CreateTime)` 选取最早就绪任务,禁止只按 `CreateTime` 让最早长任务重复抢占全部分片。商城包属于只读权威数据,可对空响应做有界退避重试,并优先用完整响应的 `Content`、`RawBytes`、HTTP 状态和传输错误诊断;不得把该规则扩展到安装写入请求。目标租户固定商城工作器必须锁定并校验精确包快照;同版本重装、显式选择历史版本或目标端存在更新源码时,仍以所选包的 `Managed` 资源覆盖,不得用版本/源码差异制造冲突。历史空库缺少生成实体所需物理列时,导入器须在首次 FormEngine 调用前幂等补齐并回读,不能再把真实表结构错误包装成 `Value cannot be null (source)`。
|
|
128
173
|
- 批量维护的权威目录按当前节点 `OsClientType + OsClientNetwork` 隔离;同一主租户同时存在 Internal、Internet 或其它活动分区时,必须在每个分区对应的主租户节点独立发起并验收,不能用一个分区的成功任务推断全平台成功。每个分区先回读精确预期租户数与名单,等待父子任务全部终态且 `SucceededCount=ExpectedCount、FailedCount=0`,再用新幂等键立即执行一次无操作复跑并确认零安装/零更新。禁止修改 `sys_osclients` 的网络字段来把租户临时塞进另一分区,也禁止让两个分区同时维护可能指向同一物理库的重复租户记录。
|
|
129
|
-
-
|
|
174
|
+
- 启动自动恢复的范围严格限制为正常启动、普通登录、菜单导航和商城安装/更新。完整官方应用源码、包、生成器和同步器位于 `Microi.Server/OfficialApplications/Resource/`;`build-bootstrap-package.mjs` 按显式清单生成 `Microi.Upgrade/Resource/app.microi.bootstrap.json` 与 `import-package.js`,升级程序集只嵌入这两项。SSO、AI、通知、备份、OCR、翻译等可选应用只由用户在商城手动安装更新,不能作为启动就绪或版本推进条件。必要共享物理列与安装元数据可恢复,但不导入业务种子、可选菜单、任务或租户配置值。
|
|
175
|
+
- 启动恢复使用共享租约、持久版本门、幂等和强回读;只有登录接口、商城菜单/服务/页面绑定及真实内联资产就绪后才前向推进版本。满足必要路由和安全标志的更高版本 Managed 接口及完整商城资产保留,不能降级用户的手动更新;这项规则仅适用于启动恢复,用户显式选择商城历史版本仍以所选包为准。生成资源变动后必须重新生成并用 `--check` 和完整门禁验证,不能在 Full 后悄悄改包。
|
|
176
|
+
- 完整 SaaS、系统账号、系统设置等官方包继续按其独立归属发布;商城页面之外的平台设置和个人中心由对应包交付。`Source=NotIncluded + Build=DatabaseOnly + StorageMode=db` 的小型恢复资产接受 256 文件/5MB 和逐文件哈希门禁。客户明确要求手动更新时,官方发布不得扩张为客户自动安装或服务器部署。
|
|
130
177
|
- 批量任务已经以“一个应用”为外层持久化恢复单元。规模可控的小型官方包应在一个事务中完成,避免对同一包体按 8 个字段反复下载、解析和重新排队;超过字段、表、DDL、流程、随包数据或资产安全阈值的大包继续使用内部 checkpoint 分片。热更新发现旧版批量计划不含 `ApplicationType` 时,必须丢弃旧计划并重新盘点,不能继续安装历史计划中的社区应用。
|
|
131
178
|
- MySQL 宽表触发 65,535 字节行内上限时,只允许把不参与索引的 `varchar` 配置列无损提升为 `mediumtext`,并把类型覆盖持久化到后台任务 checkpoint;索引列和非行宽错误必须失败关闭。发布包对长连接串、密钥、回调地址、域名/白名单等字段应直接使用 `mediumtext`,同时更新 `DiyFields` 与建表 DDL,不能长期依赖安装时猜测。
|
|
132
179
|
- 卸载是破坏性操作,必须明确列出将删除/保留的资源、二次确认并优先软删除/归档业务数据。
|
|
@@ -134,6 +181,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
134
181
|
## 联邦商城源、公开范围与历史版本(强制)
|
|
135
182
|
|
|
136
183
|
- 每个主租户和子租户都可以发布自己的应用;应用行用 `IsPublic` 表达公开范围,缺省/历史空值按公开兼容。公开应用允许未登录来源读取和安装,私有应用只允许来源登录成功后的授权身份读取,列表、详情、版本接口都必须重复执行这一权限判断。
|
|
184
|
+
- 组合包的 `ApplicationBundles[].Application` 必须由发布器从源应用实际记录携带 `IsPublic/IsApprove`,不接受请求参数替代。安装器只接受 `0/1`、`"0"/"1"` 和布尔值,显式源标记优先;未审批的源不能因 Build 成功变成已审批。历史包无公开标记时,已有目标保持原值(含历史空值),首次新增运行应用显式 `IsPublic=0`,不能继承目标 Switch 默认1。无效声明在直接包入口任何 I/O 前失败;下载包在读取正文后、该包资源/文件写入前失败,旧库既有物理前置兼容检查不因此重排。父商品 AppId/公开范围、目标拥有者和源码下载独立鉴权不得随运行标记改变;验收必须覆盖新私有、已有私有/公开、显式公开、旧包新建/重装、非法类型零包写入和即时撤权。
|
|
137
185
|
- 新版安装包正文不得长期内联在 `sys_microistore.AppPakcet`,也不得随 `mic_data_version.Data` 重复复制。公开应用写入 HDFS 公有桶并记录 `HdfsPublic`,私有应用写入私有桶并记录 `HdfsPrivate`;数据库只保存 `PackageId/PackageHdfsPath/PackageSha256/PackageSize/PackageContentType/PackageFormatVersion/PackageUploadedAt`。`IsPublic` 历史空值按公开兼容,但所有新建应用必须显式落为 `1/0`。
|
|
138
186
|
- 发布顺序必须是“UTF-8 JSON 上传 → HDFS 回读 → 字节数和 SHA-256 一致 → 写入不可变包索引及商城指针 → 以原值 CAS 清空 `AppPakcet`”。普通发布不得仅凭 Redis 命中跳过 HDFS 回读;只有受控历史压缩可复用内容寻址缓存,安装端仍必须独立下载并校验。公开包可通过 FileServer/CDN 公有地址读取;私有包只能由来源后端在当前授权身份下签发短期下载地址,Token、签名 URL 和包正文不得进入浏览器配置、日志或后台任务参数。
|
|
139
187
|
- `mic_data_version` 历史快照保留不可变 `StoreVersionId` 和同一组包指针,因此旧版本仍可精确安装,不再要求 `Data` 内含完整 JSON。导入器先校验快照版本/应用身份,再按指针下载并在解析前核对大小与哈希;指针缺失时才回退旧版内联字段,禁止快照不匹配时退回当前版本。
|
|
@@ -255,7 +303,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
255
303
|
|
|
256
304
|
## 复盘:官网升级资源同步的三道门
|
|
257
305
|
|
|
258
|
-
- 重型发布门禁之前先运行 `node Microi.Server/
|
|
306
|
+
- 重型发布门禁之前先运行 `node Microi.Server/OfficialApplications/Resource/refresh-resources.mjs --validate-only`:该入口只校验本地全部候选,不联网、不发布、不推进共同基线,且不能与写入参数组合。正式发布仍须通过完整测试、三方同步、精确哈希回读,不能把本地预检当成发布成功。
|
|
259
307
|
- 控制面版本使用语义版本最低门槛,并同时严格核对鉴权、行锁、资源哈希、写后回读等能力;禁止把某个旧版本字符串写成唯一合法值。可选功能一旦由包内表或任意入口声明,就必须校验其完整接口闭包及资源策略;不能自动放行未知 Key,也不能只升级版本而缺失实际保护。预检自身必须进入 Node 自动回归,覆盖新版通过、旧版及缺保护失败、半套可选功能失败。
|
|
260
308
|
- 官网当前资源只是三方合并的一侧,允许暂时落后于本地发布候选。下载阶段只校验固定白名单、稳定资源身份、JSON 可解析性及服务端返回 SHA-256;不能用“必须已包含本地最新功能标记”的规则提前拒绝旧官网,否则会形成“官网不够新所以永远无法发布新版”的循环依赖。
|
|
261
309
|
- 本地输入和三方合并后的最终候选必须继续执行最低版本、功能标记、内嵌逻辑副本一致性等严格校验;发布成功并按内容哈希回读一致后才能推进 `.resource-sync-base`,不能把放宽读取门误做成放宽发布门。
|
|
@@ -359,6 +407,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
359
407
|
|
|
360
408
|
- 触发场景:同一轮主租户批量任务在不同子租户分别报“数据集目标表尚未创建”“接口引擎写入后 HTTP 状态不一致”“既有菜单 Url 唯一冲突”或“未找到 OsClient”;父任务若在目录阶段对全部目标做有副作用自举,还会让一个坏租户阻断其余已可执行租户。
|
|
361
409
|
- 包结构闭包:任何 `DataSets.TableName` 都必须由同一包的 `DiyTables + DiyFields + DDLStatements + PhysicalColumns` 完整创建或由显式依赖声明保证先安装,不能只因为官方母库已有该表就省略。契约测试要逐个数据集反向验证目标表、主键、字段和物理 DDL,并在真实缺表旧租户执行首次安装与重复安装。
|
|
410
|
+
- 无 `Type` 的 `TableChild` 是布局入口,通过真实子表和外键展示记录;不得凭控件名推断 `varchar` 物理列。以实时物理目录核对 DDL/PhysicalColumns,历史包虚构布局列只纠正声明,不远端 DROP、不删除控件/子表/数据,实际存在的同名定制物理列保持。官方资源生成器的精确接口列表必须与完整正式母版及当前包闭包一致,重复生成不得静默删除新增接口、正文、鉴权或 Managed/CreateIfMissing 策略;新增字段及索引也须进入真实计数和幂等深比较回归。
|
|
362
411
|
- 随包固定自动编号:导入器 `v2.9.8` 根据目标 `diy_field.Component=AutoNumber`,仅恢复本次允许写入的显式非空编号,并使用共享事务的最小 `_ForceUpt` 更新和严格回读。`UpsertById` 重装修复旧流水号;`InsertIfMissing` 已有配置保持原编号和值。禁止把包内 `_ForceUpt` 当作可信控制参数,也不能只验证模板存在而不检查其业务检索编号。旧安装器先通过应用商城更新,再重装原不可变应用包;冲突、字段元数据读取失败或回读不一致必须失败回滚。
|
|
363
412
|
- 配置子表种子不能硬编码官方父记录 Id。`InsertIfMissing` 数据集可声明 `ParentBinding:{Field:'SysConfigId',TableName:'sys_config',MatchField:'IsEnable',MatchValue:1}`,仅在目标端查询恰好一条父记录 Id,先绑定外键再检查冲突。0 条、多条、查询失败或不安全标识立即失败;不能覆盖父配置值。导出器须保留该声明,旧导入器必须先升级,不能忽略绑定后按官方 Id 写入。
|
|
364
413
|
- 大表物理兼容必须覆盖全部 DDL 路径:`BIT` 不能落入 `varchar` 默认映射,整数显示宽度与纯标签/注释差异不能触发改列;同一个包的字段元数据变化交给物理列阶段统一比较,不能先改再改回。普通标量列仅默认值变化时使用 `ALTER COLUMN ... SET DEFAULT`,移除旧值必须设为 `NULL`,禁止 `DROP DEFAULT` 留下省略字段时触发 1364 的标志;强回读并禁止 COPY 回退。TEXT/BLOB 的缺失默认标志只能保留完整定义执行 `MODIFY COLUMN` 修复,不能用不支持的 `ALTER COLUMN SET DEFAULT NULL`。空字符串默认值不等同于 NULL。安装器时间辅助必须自包含,应用文件落库等新增分支也不得直接依赖租户的 DateNow。
|
|
@@ -391,6 +440,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
391
440
|
- 根因:把平台运行依赖维护成手写短清单,并只复制 SaaS 单包;接口之间的 `V8.ApiEngine.Run` 依赖、其它官方平台应用和个性化 Hook 没有进入同一闭包,旧数据库也没有可靠的启动前自愈与逐项回读。
|
|
392
441
|
- 强制规则:启动前接口闭包必须由全部内置官方平台应用包动态计算,并递归解析接口调用;当前官方基线为 9 个包、106 个接口(98 个 `Managed`、8 个 `CreateIfMissing`),数量只是发布快照,运行逻辑不得硬编码。门禁逐项校验 Key、地址、启用状态、匿名/HTTP 状态和源码策略;缺失时从受信内置包按原所有权补齐,所有项严格回读成功后才对外提供流量。`CreateIfMissing` 首次创建后永不覆盖客户代码。
|
|
393
442
|
- 控制面自举:官方资源发布必须先保证 `get-microi-upgrade-resource` 自身达到当前协议,再发布其它包;若控制面旧版本不能校验新包,先只发布并回读这一项,刷新动态路由缓存后再发布剩余资源。发布响应超时或 Redis 广播失败时先按资源 SHA 回读判断提交/回滚,禁止盲目重放。
|
|
443
|
+
- 独立系统日志包的接口投影使用 `ReconcilePublishedApiEngines` 与显式 `ProjectionScope: 'SystemLog'`,仅允许单一 `app.microi.sys-log.json`,且包内 `PackageInfo.AppId` 必须为 `app.microi.sys-log`、`ExpectedSha256` 必须等于已发布完整包摘要。默认九包全量规则保持不变;未知范围、其它文件或部分九包选择都应拒绝。仍须执行官方鉴权、事务行锁、Managed/CreateIfMissing 规则及完整回读,不能将母版投影当作客户已安装。
|
|
394
444
|
- 兼容与验收:历史 Controller 回退不能再转调可能缺失的同一个接口引擎;保留旧路由时必须使用可信 Core 原子或明确返回可诊断兼容结果。自动化测试应扫描 PC、UniApp、内置应用包和接口源码的全部 `/apiengine/` 与 `V8.ApiEngine.Run` 引用,证明每个依赖由官方包声明;真实启动必须对每个启用租户输出开始、缺项、修复、逐项成功及最终汇总日志,并同时验证匿名、登录态、商城批量计划和重复启动幂等。
|
|
395
445
|
|
|
396
446
|
跨租户安装验收必须检查 `sys_microiservice.MsUrl`:受托管文件运行时的入口必须使用目标租户与目标 AppKey;数据库运行时保留 `db`,显式外部运行时保留外部地址。源码摘要与编译资源摘要仍需独立回读。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: microi
|
|
3
|
+
description: Microi吾码快捷入口。连接租户、初始化 MCP、调用 V8 接口引擎、设计业务系统、AI 员工、自动化测试与发布时使用。可通过 /microi 调用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
+
|
|
8
|
+
# Microi吾码
|
|
9
|
+
|
|
10
|
+
默认使用简体中文。先完整读取同级 `../workspace-conventions/SKILL.md`,完成身份识别与四项同步检查,再完整读取 `../microi-codex/SKILL.md` 并按任务选择同级专项 Skill。
|
|
11
|
+
|
|
12
|
+
使用已登录的 `microi` CLI/MCP 连接;多连接明确选择 profile,先只读盘点再执行已授权操作。复用当前租户接口引擎、应用商城和现有业务资源,不创建第二套 Token,不把凭据放入命令行、回答或公开产物。
|
|
13
|
+
|
|
14
|
+
尚未连接时引导用户使用 Microi Agent 功能区的“服务器连接(MCP)”;官方 AI 账号在“Microi吾码 → 账号与资源”登录。工作区初始化后读取该工作区已有规则,不能覆盖客户已有改动。
|
|
@@ -88,6 +88,7 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
|
|
|
88
88
|
2. 依次执行类型检查、单元测试、生产构建和产物静态扫描。
|
|
89
89
|
3. 检查 `dist/build` 不含源码、Token、密钥、localhost、source map 或陈旧 chunk。
|
|
90
90
|
4. 同步私有源码,再流式发布公有构建目录;源码同步失败不得继续发布。发布前回读并冻结应用的 `CurrentVersion` 与 `AppVersion`,stage 只上传不可变版本资产,finalize 必须同时提交 `ExpectedCurrentVersion` 与 `ExpectedAppVersion` 做 compare-and-set;缺一项、状态漂移或回读不一致都停止,不能自动覆盖较新发布。
|
|
91
|
+
- v3 的应用基线、fence、应用行版本及 active/committed 指针是原始请求的不可变事实;stage 后只按回读更新版本行的 `ExpectedVersionRowVersion`。已提交但仍为 `ProjectionPending` 时,先回读版本与应用,保留原 `RequestId / RequestFingerprint / DeliveryBatchId` 和首次 finalize 的应用基线,重放原请求取得幂等完成回执;禁止把提交后的新指针或 fence 拼入旧请求。只有 `Completed=true` 与 CDN 文件完整性回读同时通过,才继续发布安装包。
|
|
91
92
|
5. 每次创建、修改、升级或重新发布 AI 应用,必须在任何源码同步、stage、finalize 或商城制包之前,为目标精确 `AppVersion` 写入 `sys_microistore_changelog`。日志的 `StoreId / Version / Title / ChangeType / Content / ReleaseTime` 必须完整;发布工具显式传入含义一致且非空的 `changeSummary`,发布后同时回读商城子表与 `mci_ai_app_version.ChangeSummary`。缺日志或版本不一致必须停止发布。
|
|
92
93
|
6. 官方 Web、UniApp、MicroService 的体验地址统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶对象键与域名后的路径完全一致;不再按运行类型分叉到 `ai-app-publish`,也不把 v3 内部 API resolver 用作公开体验地址。当前版本的全部编译文件写入该应用固定根,历史版本写入同根的 `/{Version}/` 目录;历史目录一旦验证不得覆写成不同字节。
|
|
93
94
|
7. 同一版本私有源码文件使用相同的租户、应用、版本相对路径写入私有桶;固定根保存最近一次已完成发布的源码。确实不含源码的编译包在包声明中记录 `Source=NotIncluded`,运行时版本的 `SourceSnapshotPath` 保持空值,不得从公有产物伪造源码。先校验完整公有版本与私有源码快照,再提升固定根的非入口资产和 `index.html`;固定入口切换后提交 CDN 精确路径刷新,回读刷新任务终态和公有入口及引用资源,再更新商城 `PreviewUrl/PublicPublishPath`。刷新任务仅提交成功、单个 CDN 节点 200 或本地构建成功都不算完成。
|
|
@@ -99,6 +100,14 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
|
|
|
99
100
|
|
|
100
101
|
## 完成定义
|
|
101
102
|
|
|
103
|
+
### 真实写入与源码包可执行性
|
|
104
|
+
|
|
105
|
+
- 遇到 Jint 的 CLR 类型解析或程序集缺失,先在目标后端复现。优先调用已公开且经过验证的 `V8.Method` 原子,禁止用 `Math.random` 代替正式随机源;使用 UUID 随机位时必须核对宿主运行时的随机保证、避开固定版本位并使用拒绝采样消除模偏差。
|
|
106
|
+
- 一次业务操作中的 SQL、行锁、请求幂等响应、库存、凭证和审计必须通过同一个 `V8.DbTrans` 执行。仅验证返回失败不足以证明回滚;自动化测试还须回读每类副作用与请求记录,确认没有永久 `Processing` 或部分提交。
|
|
107
|
+
- 领奖码等可逆业务秘密优先使用现有可信宿主的租户/接口绑定保护原子;兼容旧格式时只读旧密钥,不要求新安装租户人工补充未声明配置。真实测试覆盖生成、再次解密、过期、错误码和重复核销。
|
|
108
|
+
- 私有源码 ZIP 中的 `package.json`、lockfile、构建/检查脚本与行为测试必须自包含。下载到独立目录后仍可安装、测试并构建,不得引用开发工作区的父目录脚本或缺失工具链。构建回执绑定候选源码和逐文件产物哈希,任一漂移即失效。
|
|
109
|
+
- 从业务入口登录真实账号,完成首个写操作及整个生命周期;再验证不同身份、撤权、重复请求、并发与刷新恢复。静态截图、模拟登录或合同正则匹配不能替代这些验收。
|
|
110
|
+
|
|
102
111
|
- `vue-tsc --noEmit`、单元测试和生产构建通过。
|
|
103
112
|
- 源码、lockfile、Manifest、构建版本和远端文件哈希一致。
|
|
104
113
|
- 匿名、登录、Token 失效、权限不足、弱网、重连和错误恢复有确定结果。
|
|
@@ -14,7 +14,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
14
14
|
`SysConfig.HideSystemLicenseVersion` 缺省关闭,标签可点击跳转 `/license`,不能因一次请求失败永久消失。
|
|
15
15
|
|
|
16
16
|
<!-- microi-progressive:begin -->
|
|
17
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=ea9cdd10772c42cc8202aa50ed3f8bec0a41588b16539b2968f256c7ee05cd3a -->
|
|
18
18
|
## 单行文本插槽按钮约定
|
|
19
19
|
|
|
20
20
|
- `diy-input.vue` 的插槽按钮行为存储在 `diy_field.Config.SlotButtonV8Code`。
|
|
@@ -27,7 +27,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
<!-- /microi-progressive:chunk -->
|
|
30
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=
|
|
30
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=83fb9902ca2edddfc8b72de9578f28a6a7df5cadb2626e5ffb0321d62caa0bb0 -->
|
|
31
31
|
## 1. 技术栈和源码入口
|
|
32
32
|
|
|
33
33
|
### 详情评论与代码版本的按需读取
|
|
@@ -58,7 +58,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
60
|
<!-- /microi-progressive:chunk -->
|
|
61
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
61
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=794b802f6d332bf124d4b3e1c92e68b785299f4ef5d5b4f58e00ce84bb69488c -->
|
|
62
62
|
## 2. 表单引擎三层结构
|
|
63
63
|
|
|
64
64
|
### 模块级跨端视图
|
|
@@ -168,7 +168,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
168
168
|
---
|
|
169
169
|
|
|
170
170
|
<!-- /microi-progressive:chunk -->
|
|
171
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=
|
|
171
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=301f766dc1ab1c6b021aa861a76b44844905d432393ab407472f58f00d6283cd -->
|
|
172
172
|
## 4. 工作流与表单提交
|
|
173
173
|
|
|
174
174
|
工作流相关文件:
|
|
@@ -190,7 +190,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
190
190
|
---
|
|
191
191
|
|
|
192
192
|
<!-- /microi-progressive:chunk -->
|
|
193
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=
|
|
193
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=525059f87aac3236d8bfa5d7bbc3fd461618754ca3aa5fe4d7d5c133cfdffb5d -->
|
|
194
194
|
## 7. 验证建议
|
|
195
195
|
|
|
196
196
|
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-005 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-005 sha256=189ca6438cd0fc58a5bf14bd13a3bad26a9254c766e4a6bed62ef2aeb1879e9d -->
|
|
6
6
|
## 3. 动态按钮系统
|
|
7
7
|
|
|
8
8
|
按钮配置来自 `sys_menu`:
|
|
@@ -45,7 +45,7 @@ V8.Result = V8.Form.Status == '待审核';
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
47
|
<!-- /microi-progressive:chunk -->
|
|
48
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-006 sha256=
|
|
48
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-006 sha256=b5d89b5a0b17ffb02579d4512b15468e52b599ddf4573afba85b9e5d3f9f5d49 -->
|
|
49
49
|
## 5. 路由与打开方式
|
|
50
50
|
|
|
51
51
|
登录首页支持“用户 > 系统 > 首个可访问菜单”的三级优先级:
|
|
@@ -114,7 +114,7 @@ Page 模式要特别注意:
|
|
|
114
114
|
---
|
|
115
115
|
|
|
116
116
|
<!-- /microi-progressive:chunk -->
|
|
117
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-007 sha256=
|
|
117
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-007 sha256=573d988999f9721cf7efe7654c203342213728b4f1ce61a718b10815595ae894 -->
|
|
118
118
|
## 6. 修改前必查清单
|
|
119
119
|
|
|
120
120
|
### `diy-table` 嵌入分页条数
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=8cd14b9e9483cd23cc4ea25411c5c69e015387ade54131252a385c88be3a1a17 -->
|
|
6
6
|
## 8. 运行时高频坑复盘
|
|
7
7
|
|
|
8
8
|
### 前端 V8.Http 与后端同构契约
|
|
@@ -84,7 +84,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
84
84
|
- 自动生成的最终 `SqlWhere` 使用带固定前缀 `-- 【权限说明】` 的单行中文注释,就近解释外层括号、租户隔离、AND/OR 组合、超级管理员、普通用户范围、全量角色/岗位/部门、图形条件和闭合括号;不得再生成整段 `/* ... */` 说明。后端还要兼容剥离历史 `-- 【吾码权限说明】`。图形配置使用首行紧凑明文 JSON `-- MICROI_DATA_PERMISSION_CONFIG:{...}` 恢复,省略默认值且不重复保存 `SqlJoin/JoinTables`;旧 `-- MICROI_DATA_PERMISSION_V1:...` Base64 marker 只读兼容、不再生成,设计器不得展示 marker。后端执行前只剥离这些平台专用注释,用户手写注释必须保留。`SqlJoin` 继续保存 JOIN,`JoinTables` 继续保存关联表 JSON,后端协议不变。
|
|
85
85
|
- 有新旧 marker 的配置必须无损回显;没有 marker 的历史手写 SQL 只能原样保留或安全解析字段提示。标准表单对 `CodeEditor` 使用的 `_CodeEditorTransport` 必须由 FormEngine 控制器在进入业务逻辑前统一解码,数据库只保存明文;非法批次不得产生部分解码。
|
|
86
86
|
- 角色、岗位、部门属于查看者放行规则;本人、本人和下级、部门范围属于行范围。超级管理员默认放行,但启用 TenantId 隔离时也不能跨租户。所有表名、别名和字段名生成前做标识符白名单,固定值转义单引号。
|
|
87
|
-
- 官方 `microi_itdos` 与开发租户更新 `diy_field` 后都要刷新 `sys_menu` 表/字段缓存并回读 `Component/Visible/AppVisible/Config`;应用商城资源同步修改 `
|
|
87
|
+
- 官方 `microi_itdos` 与开发租户更新 `diy_field` 后都要刷新 `sys_menu` 表/字段缓存并回读 `Component/Visible/AppVisible/Config`;应用商城资源同步修改 `OfficialApplications/Resource/app.microi.module-engine.json`。
|
|
88
88
|
- 官方文档:`microi.doc/docs/doc/v8-engine/v8-client.md`。
|
|
89
89
|
- Skills:`v8-frontend-events`、`v8-table-event`、`v8-menu-buttons`、`v8-template-engine`、`v8-formengine-http` 和本 Skill。
|
|
90
90
|
|
|
@@ -147,7 +147,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
147
147
|
- 修改后运行静态门禁,确认源码不存在内容型 `v-loading`、`ElLoading.service`、硬编码黑色 Loading mask 或加载期空态;再用真实浏览器验证菜单、首页、表格、表单详情在亮色、暗色、自定义主题和移动端下的骨架几何、对比度、`aria-busy`、reduced-motion 及请求失败收口。
|
|
148
148
|
|
|
149
149
|
<!-- /microi-progressive:chunk -->
|
|
150
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-009 sha256=
|
|
150
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-009 sha256=b1105375a6b9477eb397a275c67cd7e1074ae14948c41bd594e91deb4a2ba9b0 -->
|
|
151
151
|
## 7.1 登录验证码与 Sys_Config
|
|
152
152
|
|
|
153
153
|
修改 `Microi.Client/src/views/login/index.vue` 或任何 PC 端登录扩展时,必须遵守平台登录验证码契约:
|
|
@@ -184,7 +184,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
184
184
|
- 自动化检查:单测覆盖失败投影保留最后有效权限、合法撤权、访问密钥、登录切换迟到响应和注销竞态;真实浏览器拦截一次坏的当前用户投影,确认页面无需重新登录即可自动刷新,并连续检查新增、编辑按钮及刷新接口返回的管理员权限始终完整。
|
|
185
185
|
|
|
186
186
|
<!-- /microi-progressive:chunk -->
|
|
187
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-010 sha256=
|
|
187
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-010 sha256=2446aaeadddd95aa22dcd5935c5a9d60b51008bb1e0d5b5b7f6ee01f2fe9dd06 -->
|
|
188
188
|
## Microi 前端 SDK 约束
|
|
189
189
|
|
|
190
190
|
当修改 `Microi.Client` 之外的 Vue3 前端、PC 官网、移动 H5 或定制微前端页面时,必须优先读取 `microi.skills/microi-frontend-sdk/SKILL.md` 并使用 `microi.skills/microi.v8.js`。`Microi.Client` 主后台已有平台请求与 Pinia 体系时,可以复用现有平台能力;但新增独立页面、外部站点、插件页、嵌入式页面不得再复制旧 Vue2/Vuex 版 `microi.v8.js`。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-011 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-011 sha256=4272be553eea5fd0ead8c7933b3b5231a6d8501bfed181294d1e5cf5965314d6 -->
|
|
6
6
|
## Vue3 前端微服务宿主规则
|
|
7
7
|
|
|
8
8
|
`sys_menu.OpenType=MicroService` 时,动态路由必须把 `MicroServiceId`、`MicroServicePageId`、`MicroServiceRoutePath` 和真实入口 `MicroAppUrl` 写入 route meta;浏览器侧菜单路由使用 `/#/micro-app/{MsKey}/{RoutePath}`,不要再生成 `/micro-app-host/{menuId}`,否则地址过长且刷新或直接访问菜单路由容易加载空白页。
|
|
@@ -102,7 +102,7 @@ CurrentUser、ApiBase 和 OsClient。无痕窗口是人工第二租户的最低
|
|
|
102
102
|
- 自动化检查:打开真实列表连续点击两次旧打印按钮,断言抽屉内出现打印引擎、打印数据接口成功、出现浏览器打印日志,并且没有未知组件警告、递归更新、页面异常或失败请求;保存首次和重复点击截图。
|
|
103
103
|
|
|
104
104
|
<!-- /microi-progressive:chunk -->
|
|
105
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-012 sha256=
|
|
105
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-012 sha256=4e579132c5176b46e6e9aa61e87982d63fe2c26c639f0ef3832614b2dacfcb3f -->
|
|
106
106
|
## 在线 AI 应用与微服务页面协作
|
|
107
107
|
|
|
108
108
|
Microi 的 AI 应用与应用商城只有一个主数据源:`sys_microistore`。运行类型写入 `ApplicationType`:普通平台离线包的新建默认值为 `Regular`,既有商城平台应用/通知仍使用 `Platform`,另外还有 `Web / UniApp / MicroService`;读取端必须兼容 `Regular/Platform`。`Category` 保存游戏、企业、行业、教育等业务分类,`PublisherType` 保存官方/社区来源;`mci_ai_app_file / mci_ai_app_version` 仅作为私有源码清单和构建版本从表,其 `AppId` 必须指向 `sys_microistore.Id`。禁止再向 `mci_ai_app` 创建新的主记录。MicroService 另外使用 `sys_microiservice / sys_microiservice_page` 保存运行元数据和页面路由。
|
|
@@ -149,7 +149,7 @@ Microi 的 AI 应用与应用商城只有一个主数据源:`sys_microistore`
|
|
|
149
149
|
- 同一份 ApiKey/Token 摘要在 Overview 与 AI 页面复用同一个组件;Token 额度统一展示“总量/Total”,不要把总量写成“赠送”。复制密钥必须有明确成功或失败提示,并提供 Clipboard API 不可用时的兼容复制。
|
|
150
150
|
|
|
151
151
|
<!-- /microi-progressive:chunk -->
|
|
152
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-013 sha256=
|
|
152
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-013 sha256=57dc1ce4db6ce0aa4865b3d0ad11293a17e473a9f6bb92a084701ea239056d13 -->
|
|
153
153
|
## 浏览器访问密钥路由
|
|
154
154
|
|
|
155
155
|
- 固定看板免登录使用常量匿名路由 `/access-login`,密钥使用 `microi_ak_` 前缀,完整链接格式为 `{Microi.Client前端WebBase}/?OsClient={当前租户}#/access-login?access_key={密钥}&redirect={encodeURIComponent后的站内Hash路由}`。例如目标路由 `/mic/data-dashboard/preview/01KK988A0YPHKAM8SF216917HX` 必须生成 `redirect=%2Fmic%2Fdata-dashboard%2Fpreview%2F01KK988A0YPHKAM8SF216917HX`。生成器只复制当前 `OsClient`,不能把其它页面查询参数带进凭据链接,也不能把 API Server 当成前端 WebBase。
|
|
@@ -13,6 +13,11 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
13
13
|
|
|
14
14
|
## Microi Agent 桌面宿主
|
|
15
15
|
|
|
16
|
+
- 桌面包内置技能目录;干净工作区输入 `/microi` 可发现吾码入口,再读取基础规范与专项技能。查不到时先核对当前桌面版本及内置技能资源,不要求用户复制开发机目录,也不要把 MCP 工具名当成斜杠技能名。
|
|
17
|
+
- 对话输入框上下键回填成功提交的提示词,向下可恢复未发送草稿。菜单、输入法候选、选区和多行正常光标移动优先;不要在用户编辑文本时强行覆盖草稿。
|
|
18
|
+
- 消息编辑/撤回通过真实会话分叉到该消息之前的已完成轮次;原会话和已经执行的文件修改保留。撤回将消息恢复为草稿,编辑则重新发送;这不是撤销文件系统。图片随草稿恢复,无法安全恢复的文件附件明确拒绝,不能静默删除附件或只改屏幕文字而保留旧模型上下文。
|
|
19
|
+
- AI 员工桌面工作台提供十岗、任务草稿、执行、成果审阅、已验收依赖、目标和预算。云端执行复用员工中心;本机执行使用显式受限 OpenClaw Agent 与已有 Gateway。Harness 的会话/技能/定时能力不能证明 OpenClaw 的渠道、Gateway、设备节点与全部 cron 语义已完整内置。相关配置和验收读取 `ai-engine/references/ai-employees.md`。
|
|
20
|
+
|
|
16
21
|
- 桌面与手机配对的本机 HTTP 监听必须避开 Fetch 标准禁止端口。系统自动分配的端口也可能不可浏览器访问;只有浏览器允许的真实监听端口才能进入配对 URL。自动命中禁止端口时关闭监听再有界重选,显式配置禁止端口须报错;权限和占用错误仍保留原错误,不改变系统动态端口范围、不绕过浏览器安全策略。同步上游时保护共同端口选择器、配对监听与对应回归。
|
|
17
22
|
|
|
18
23
|
- Microi Agent 是内部仓库中的独立桌面发行物,直接基于 DataElement/dsh-desktop 与 DeepSeek Harness 二次开发,内置固定版本的 Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
|
|
@@ -27,6 +32,10 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
27
32
|
- Harness 本机探测必须以独立硬计时器约束 TCP 连接和响应头,Node 失败后用 Chromium 复核。两个通道在认证地址公布后连续连接失败时,仅重启一次到 IPv6 `::1`;IPv6 也必须实际取得有效 HTTP 响应,不得伪造就绪、绑定所有网卡或关闭鉴权。普通模式与安全模式使用同一规则,500 响应不得触发网络回退或算作就绪。日志同时记录桌面版本、实际监听地址和进程内 HTTP 自检;探测不带凭据、不跟随重定向、不输出自检 Token。恢复日志只去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布运行 `scripts/verify-harness-startup.mjs`,以包内 Node/Harness、真实 Chromium 页面验证普通与安全模式、Node 超时回退、IPv4 双通道受阻后 IPv6 鉴权和双通道真实无响应的有界失败。Mac 验收与 Windows 真机、安装升级、客户设备验收分别记录。
|
|
28
33
|
- Windows 的 IPv4/IPv6 TCP 都连接失败时,允许回退到本次启动创建的私有命名管道。必须先从管道取得真实 HTTP 响应,再沿用 Harness 原有 Host、Origin、启动 Token 和签名 Cookie 验证;不得跳过鉴权或开放公网。HTTP 请求与 `/api/remote.mux` 会话流都要验收,IPC 仅限当前主窗口顶层页面和固定端点,不暴露凭据、管道路径或任意代理能力。`scripts/verify-harness-pipe.mjs` 的 macOS Unix socket 验证不等于 Windows 命名管道或客户设备已通过。
|
|
29
34
|
- 当前 Electron 桌面运行时不能直接打包 iOS/Android,也不能把现有 DMG 原样提交 Mac App Store。移动端和 MAS 版应作为受限客户端,复用账号、模型、会话、MCP 与桌面配对协议,把 Node/Harness/Shell/插件执行放到配对桌面或合规远端;分别完成 Apple/Google 签名和商店审核。
|
|
35
|
+
- MAS 使用独立 `electron.vite.mas.config.ts` 与 `electron-builder.mas.cjs` 构建最小客户端,应用包只含客户端入口、受限 preload、静态界面和版权材料;不能把父工程依赖、Harness、独立 Node 或站外更新器混入沙盒包。正式包使用 Mac App Distribution 与 Mac Installer Distribution;本机验证使用 Mac Development 和包含该设备的开发描述文件。签名钥匙串必须先用实际保存的密码完成锁定、解锁往返验证,再启动构建;记录密码不得被重复生成过程覆盖。签名包、本机运行、Apple 上传处理、提交审核和正式上架分别回读,不能以包已生成代替上架。商店截屏使用经过验证的真实客户端界面,按 Apple 接受的高清尺寸上传,保留原始高清 Logo。
|
|
36
|
+
- Windows Microsoft Store 使用分配给产品的 MSIX Identity/Publisher,上传包由商店签名。MSIX 运行时以 Electron 的 `process.windowsStore` 识别,禁止调用官网 EXE 更新、降级或安装入口;手动检查更新转到该产品的 Microsoft Store 页面,版本列表不请求 NSIS 归档。包内 PE/x64、Manifest/BlockMap 校验、Windows 原生运行、商店认证和正式可下载分别记录。官网 Windows/macOS 下载按钮旁可展示真实商店产品链接,但审核中必须明确标注,不能把未开放页面称为已上架。
|
|
37
|
+
- 闭源商业项目要求免费可信 EXE 下载时,已发布的免费 Store MSIX 可使用 Microsoft Store Web Installer:从官方 badge 生成器的 Direct 模式取得该产品 `get.microsoft.com/installer/download/` 链接,验证真实下载的 Microsoft 签名及文件摘要。这是联网安装当前商店版的小型 EXE,不是给官网完整 NSIS EXE 签名;保留两渠道并说明版本差异,不把下载成功写成原生安装通过,不将动态安装器冒充固定版本 CDN 产物。按当前包 Manifest 的 MinVersion 和架构记录系统条件,分别说明旧 Windows、x86、ARM 仿真、LTSC/Server、离线与企业策略边界;不降低安全策略或虚构全部系统验收。自签名不能产生公众信任,免费开源签名服务不适用于私有商业源码。
|
|
38
|
+
- 复用已签名 MAS 应用制作开发测试包时,必须替换 `Contents/embedded.provisionprofile`,核对描述文件中的证书与开发签名及当前设备一致;`codesign --verify` 通过仍不能替代实际启动。资料目录中的描述文件保持私有权限,复制到安装包后设为普通用户可读,并检查整个有效载荷,避免 ITMS-90255。沙盒阻止调试监听时不得扩大正式包的网络监听权限;自动化测试入口只放入独立开发副本,正式入口、preload 与界面应核对同源,测试入口和配对口令不得进入正式安装包。安装包上传成功后仍要回读 Apple 处理状态、选择构建、上传高清素材并实际提交审核。
|
|
30
39
|
- 官方账号页和关于标签通过 `platform-current-user` 接口引擎读取当前 `sys_user.LicenseType`。桌面相关平台业务逻辑优先通过 `microi_itdos` 接口引擎实现;只有接口引擎缺少必需底层原子能力时才能改后端源码,并说明原因。
|
|
31
40
|
- 正式 Windows/macOS 安装包必须内置固定版本且经过 SHA-256 校验的 cloudflared,运行时优先使用安装包 `resources/bin`,避免首次联网临时下载。检查更新从 `https://api.itdos.com/microi-code/updates/` 的匿名接口引擎读取 YAML/JSON,安装包二进制仍通过 HDFS 流式发布。
|
|
32
41
|
- Windows 安装验收必须包含旧卸载器损坏后的升级、同版本重装、超过 260 字符的路径以及全部文件 SHA-256 回读。安装器使用当次发布的兼容卸载器,并用固定哈希的 Unicode 7-Zip 直接解压到目标目录,禁止恢复临时目录解压后使用 NSIS `CopyFiles` 复制的流程;该流程会将路径或复制错误误报为“应用无法关闭”。进程检查仅匹配安装目录内的产品主程序及内置 Node,不能按整个目录匹配安装器或无关程序。
|
|
@@ -43,6 +43,12 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
43
43
|
|
|
44
44
|
共享源码持续变化时,可在独立目录保存完整候选源码和依赖,以该目录运行同一 Full 与发布脚本。专用测试服务使用独立端口,通过发布脚本变量 `MICROI_RELEASE_BACKEND_PORT`、`MICROI_RELEASE_FRONTEND_PORT` 指定收尾端口(默认仍为 61501、61500);进程管理器仍必须核验 PID、命令行和工作区归属,不得结束原工作区服务。变量仅供发布脚本使用,不进入生产 API 配置。
|
|
45
45
|
|
|
46
|
+
macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新 Full。
|
|
47
|
+
|
|
48
|
+
DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 Full、加密和最终产物冒烟;不得以专项测试替代发布门禁。
|
|
49
|
+
|
|
50
|
+
在线 AI 的 MCP 运行目录必须由已锁定依赖干净安装、编译和裁剪后完整复制。生产命令的符号链接应解析为真实文件并保留执行权限,不能依赖即将清理的临时目录;损坏、越界或循环链接在替换旧运行目录前失败,重新打包清除旧依赖残留。保留制品门禁对符号链接的拒绝规则,专项验证使用同一复制逻辑并核对清理临时目录后命令仍可运行;修复打包逻辑后重新 Full。
|
|
51
|
+
|
|
46
52
|
| 场景 | 推荐入口 |
|
|
47
53
|
|---|---|
|
|
48
54
|
| 生产 Linux、快速安装、可滚动升级 | Docker/Compose |
|
|
@@ -151,6 +157,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
151
157
|
`.NET Host` 对业务 DLL 的锁定。
|
|
152
158
|
- Edge/Chrome 用户浏览器、VS Code 的 Playwright Test Server、MCP/语言服务 Node、
|
|
153
159
|
数据库和 Redis 不属于发布清理范围。人工查看使用进程管理器的 `-Action Status`。
|
|
160
|
+
- PowerShell 7 下的 macOS/Linux 进程管理使用真实端口、命令行、精确大小写 CWD 和启动时间回读;身份不明或 PID 复用时失败关闭,只结束已核验根进程的后代。专项回归必须在自有目录、端口和真实进程中证明当前工作区可停止、外部工作区保留,以及原始文件锁诊断;不允许为了跨平台放宽跳过门禁。
|
|
154
161
|
|
|
155
162
|
## 一键发布产物边界与缓存
|
|
156
163
|
|
|
@@ -68,6 +68,14 @@ IIS 进程启动不代表 API 可用,仍要检查 readiness 和真实登录路
|
|
|
68
68
|
|
|
69
69
|
## 本地源码运行
|
|
70
70
|
|
|
71
|
+
macOS 的一键发布探针通过 `run_with_timeout` 使用 GNU `timeout`、`gtimeout` 或仓库 Node 工具 `Microi.Server/tools/run-with-timeout.mjs`。缺少 GNU 命令不能据此判定 Docker 不健康;超时工具只停止自身创建的探针进程。官网专用选项 6 不发布 DLL/NuGet,后端发布的加密门禁保持有效。
|
|
72
|
+
|
|
73
|
+
Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users`、`/usr` 等绝对路径直接传给工具;Windows 优先 `cygpath`,无该命令时只转换完整盘符根路径。修复后使用隔离副本验证五个 DLL 和指纹,再重新执行一键脚本的 Full 与最终加密产物冒烟。
|
|
74
|
+
|
|
75
|
+
在线 AI MCP 的生产依赖和命令复制为完整、自足的运行快照,生产命令链接解析为真实文件,保留执行权限;损坏、越界及目录循环链接提前拒绝。临时构建目录清理后命令必须仍能运行,旧依赖不得残留;不放宽原制品门禁。
|
|
76
|
+
|
|
77
|
+
前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux 保持原统计方式。启动预算、95% 暂停、90% 恢复及连续五秒稳定门禁不变,正式发布不能跳过保护;统计错误应修正探针,并保留共享服务。
|
|
78
|
+
|
|
71
79
|
后端:
|
|
72
80
|
|
|
73
81
|
- 使用当前仓库规定的 .NET SDK;
|