@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-security-005 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-security-005 sha256=09f88aaf8da914fdbec8bc8668cef588a02217354a210515230471fbfdddd27f -->
|
|
6
6
|
## 2. 权限校验
|
|
7
7
|
|
|
8
8
|
### DiyToken 是平台会话与权限入口,不替换为 ASP.NET Identity
|
|
@@ -104,7 +104,7 @@ var result = V8.FormEngine.GetTableData('Order', {
|
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
<!-- /microi-progressive:chunk -->
|
|
107
|
-
<!-- microi-progressive:chunk id=v8-security-006 sha256=
|
|
107
|
+
<!-- microi-progressive:chunk id=v8-security-006 sha256=c7a43f46e8636fc3cbf792dfb8ff6c17890bd0a4d57025ba29cc37de2373dcbe -->
|
|
108
108
|
## 5. 防重复提交
|
|
109
109
|
|
|
110
110
|
前端禁用按钮或普通 Cache 的 `Exists → Set` 只能改善体验,不能保证业务只执行一次。写操作必须接收稳定幂等键,并通过数据库唯一约束、条件更新或状态机原子落库;接口引擎可再配置 `LockKey` 降低并发,但锁不能代替业务幂等。
|
|
@@ -126,7 +126,7 @@ if (old.Code === 1 && old.Data) {
|
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
<!-- /microi-progressive:chunk -->
|
|
129
|
-
<!-- microi-progressive:chunk id=v8-security-007 sha256=
|
|
129
|
+
<!-- microi-progressive:chunk id=v8-security-007 sha256=360a677ffa518b108e304f92922f9eaa2a12d44e863a16ce7439d9afe5616766 -->
|
|
130
130
|
## 6. 敏感数据
|
|
131
131
|
|
|
132
132
|
### 密码与认证
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-security-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-security-008 sha256=2ff2de57d90237ef31cf6cccdb940b8ebb2a268a7726216946de4ba672a12248 -->
|
|
6
6
|
## 7. 日志记录
|
|
7
7
|
|
|
8
8
|
关键操作必须记录审计日志:
|
|
@@ -43,7 +43,7 @@ if (clearResult.Code != 1) {
|
|
|
43
43
|
- 接口引擎和底层方法都必须校验管理员权限、目标用户 Id 和租户边界,禁止跨租户吊销。
|
|
44
44
|
|
|
45
45
|
<!-- /microi-progressive:chunk -->
|
|
46
|
-
<!-- microi-progressive:chunk id=v8-security-009 sha256=
|
|
46
|
+
<!-- microi-progressive:chunk id=v8-security-009 sha256=e430777e54dc5c9e24e5f981db467dbe0ed3e9a297042a545891dd644e10a485 -->
|
|
47
47
|
## 8. 错误处理
|
|
48
48
|
|
|
49
49
|
不要把内部错误信息暴露给前端:
|
|
@@ -64,7 +64,7 @@ try {
|
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
<!-- /microi-progressive:chunk -->
|
|
67
|
-
<!-- microi-progressive:chunk id=v8-security-010 sha256=
|
|
67
|
+
<!-- microi-progressive:chunk id=v8-security-010 sha256=26ae8c22e1db1edca4d159d68423ae14ec84b528e5cc4deb305010f89871f57e -->
|
|
68
68
|
## 9. Token、终端会话与租户隔离
|
|
69
69
|
|
|
70
70
|
开发 Web、H5、UniApp、小程序、App、VS Code 或 MCP 客户端时,必须同时遵守 `microi-frontend-sdk/SKILL.md` 的 Token 协议:登录传 `_ClientType`,请求头传稳定 `did`,每次响应接收新的 `authorization`,并在浏览器/应用恢复前台时检查续签。
|
|
@@ -90,7 +90,7 @@ try {
|
|
|
90
90
|
- 多节点封禁、解封和到期状态必须进入共享 Redis/数据库;本机静态字典只能做缓存。Redis 可用且共享 block 不存在就是权威已解封,节点必须删除本机旧 block,禁止把旧状态回写复活;Redis 不可用时才允许本机降级。验收要让同一出口分别命中至少两个 API 节点,覆盖普通阈值、受信读取、伪造 Header、手动解除和自动到期。
|
|
91
91
|
|
|
92
92
|
<!-- /microi-progressive:chunk -->
|
|
93
|
-
<!-- microi-progressive:chunk id=v8-security-011 sha256=
|
|
93
|
+
<!-- microi-progressive:chunk id=v8-security-011 sha256=d625724d1e14db9cbd707b74d5ed1e5cd3fc44d58ff46baed65e3fd09728e817 -->
|
|
94
94
|
## 10. Jint 运行时升级边界
|
|
95
95
|
|
|
96
96
|
升级 Jint 时必须逐版阅读官方 release notes,并至少验证以下兼容面,不能只以编译通过作为验收:
|
|
@@ -102,7 +102,7 @@ try {
|
|
|
102
102
|
- 引擎约束必须在平台宿主对象注入完成、用户脚本执行前 `Constraints.Reset()`;同时覆盖超时、语句数、递归、内存、Promise 取消及 CLR 宿主边界返回后的再次检查。
|
|
103
103
|
|
|
104
104
|
<!-- /microi-progressive:chunk -->
|
|
105
|
-
<!-- microi-progressive:chunk id=v8-security-012 sha256=
|
|
105
|
+
<!-- microi-progressive:chunk id=v8-security-012 sha256=5f0a43b36ce88e6fed819887acfda86d2b07f5929c958edade902a95b9dfdb66 -->
|
|
106
106
|
## 安全检查清单
|
|
107
107
|
|
|
108
108
|
- [ ] 所有数据库查询使用参数化(`_Where` 或 `@p0`)
|
|
@@ -133,9 +133,11 @@ try {
|
|
|
133
133
|
- 自动化检查:预置缺少新字段的旧 Redis 快照后验证新版本 Key 不命中;分别覆盖管理员设计器批量字段保存/新增字段、普通用户直接写管理员专用表被拒绝、只读委托表写入被拒绝、`mic_print` 有权读取成功、升级程序可信写入成功,以及 HTTP JSON 伪造可信字段仍失败。
|
|
134
134
|
|
|
135
135
|
<!-- /microi-progressive:chunk -->
|
|
136
|
-
<!-- microi-progressive:chunk id=v8-security-013 sha256=
|
|
136
|
+
<!-- microi-progressive:chunk id=v8-security-013 sha256=1cb38480cbab23ca5f76520f1196943db91a7d21601d3aa61324136ca4ab7695 -->
|
|
137
137
|
## 浏览器访问密钥
|
|
138
138
|
|
|
139
|
+
- 站内 `/...` 路由不得交给绝对 URI 解析器当作本机文件 URI;只有完整地址才提取 HTTP 路径。页面范围归一化在 Windows、Linux、macOS 必须一致,保留精确路径与通配符的授权区别。
|
|
140
|
+
|
|
139
141
|
固定看板、电视和信息屏免输入帐号密码时,使用平台 `mci_user_access_key`,禁止自行在接口引擎中保存明文 Secret,也禁止把长期登录 Token 拼进 URL。
|
|
140
142
|
|
|
141
143
|
- 一个帐号可有多个密钥;每个密钥独立名称、到期时间(90天/自定义/永久)、范围、使用审计和吊销状态。永久密钥必须可单独吊销并建议定期人工轮换。
|
|
@@ -10,7 +10,7 @@ description: Microi V8 表单事件开发。用于编写 InFormV8、SubmitFormV8
|
|
|
10
10
|
你正在开发 Microi 吾码平台的 V8 表单事件。事件绑定在表单引擎的表上,在数据操作的不同阶段自动触发。
|
|
11
11
|
|
|
12
12
|
<!-- microi-progressive:begin -->
|
|
13
|
-
<!-- microi-progressive:chunk id=v8-table-event-000 sha256=
|
|
13
|
+
<!-- microi-progressive:chunk id=v8-table-event-000 sha256=2550fa4a7329b46ccee98d24e0bb1975e99a85b0b78aefd7d96be36505c82cd8 -->
|
|
14
14
|
## 本地优先与版本头(必做)
|
|
15
15
|
|
|
16
16
|
AI 本地开发表单 V8 事件时,优先修改 `microi-v8-engine/<租户>/<项目>/表单引擎/.../<事件Label>(<EventType>).js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。文件中文名必须取 `diy_table` 对应 `diy_field.Label`,其中 `SubmitFormV8` 为 `前端表单提交前V8事件(SubmitFormV8).js`,`OutFormV8` 为 `前端表单提交后V8事件(OutFormV8).js`。若插件显示“本地和远端不一致”,先读取本地与远端并合并有效差异,不能直接覆盖。
|
|
@@ -38,7 +38,7 @@ AI 本地开发表单 V8 事件时,优先修改 `microi-v8-engine/<租户>/<
|
|
|
38
38
|
生成 V8 事件代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;提交前校验、提交后联动、字段显隐、数据脱敏、跨表写入、复杂条件判断等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
|
|
39
39
|
|
|
40
40
|
<!-- /microi-progressive:chunk -->
|
|
41
|
-
<!-- microi-progressive:chunk id=v8-table-event-001 sha256=
|
|
41
|
+
<!-- microi-progressive:chunk id=v8-table-event-001 sha256=f2517369ec5221c06950d05088793270a53f92cb7b96587d859a264a46c2c6d2 -->
|
|
42
42
|
## 事件类型
|
|
43
43
|
|
|
44
44
|
| 事件 | 运行端 | V8.EventName | 触发时机 | 用途 |
|
|
@@ -51,7 +51,7 @@ AI 本地开发表单 V8 事件时,优先修改 `microi-v8-engine/<租户>/<
|
|
|
51
51
|
| `DataFilterV8.js` | **后端** | `DataFilter` | 获取列表/表单数据后 | 每行数据加工、脱敏、补充字段 |
|
|
52
52
|
|
|
53
53
|
<!-- /microi-progressive:chunk -->
|
|
54
|
-
<!-- microi-progressive:chunk id=v8-table-event-002 sha256=
|
|
54
|
+
<!-- microi-progressive:chunk id=v8-table-event-002 sha256=230de68b48d85dd28ec5667bb46953305b41d34d376cf3eb5f223d63fb463837 -->
|
|
55
55
|
## 事件触发规则
|
|
56
56
|
|
|
57
57
|
- 后端 V8 事件 / 接口引擎中调用 `V8.FormEngine` 增删改 → **不触发**表单 V8 事件
|
|
@@ -61,7 +61,7 @@ AI 本地开发表单 V8 事件时,优先修改 `microi-v8-engine/<租户>/<
|
|
|
61
61
|
- `diy_table.V8Limit` 是表后端提交前、提交后和数据处理 V8 的正向开关:缺失、`null`、`0/false` 均不设置 Jint 单次超时、语句、函数递归和累计分配预算,只有 `1/true` 才启用这些限制。旧 `V8Unlimited` 仅在新字段不存在时反向推断,新的 MCP、Manifest 和应用资源只写 `V8Limit`。进程常驻内存、取消、并发、接口嵌套深度、权限和数据库保护始终生效。
|
|
62
62
|
|
|
63
63
|
<!-- /microi-progressive:chunk -->
|
|
64
|
-
<!-- microi-progressive:chunk id=v8-table-event-003 sha256=
|
|
64
|
+
<!-- microi-progressive:chunk id=v8-table-event-003 sha256=271cf2359a152663040ed31ecc2289836df4d32d0fc9c47735dffbf9b59b9837 -->
|
|
65
65
|
## ⚠️ 关键陷阱(必读)
|
|
66
66
|
|
|
67
67
|
### 1. 设计模式保护(前端事件必加)
|
|
@@ -113,7 +113,7 @@ V8.ApiEngine.Run('other-engine', { Form: V8.Form }, V8.DbTrans);
|
|
|
113
113
|
---
|
|
114
114
|
|
|
115
115
|
<!-- /microi-progressive:chunk -->
|
|
116
|
-
<!-- microi-progressive:chunk id=v8-table-event-004 sha256=
|
|
116
|
+
<!-- microi-progressive:chunk id=v8-table-event-004 sha256=b3e59588ccfe532602d8f103f3c7b69beb800dc2092aeb8202616b4050324555 -->
|
|
117
117
|
## 前端事件特有 API
|
|
118
118
|
|
|
119
119
|
```javascript
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-table-event-005 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-table-event-005 sha256=e4b6982f63971cf590b635f89643ba437bfd714cb78fe5d9690d43100e07c2c1 -->
|
|
6
6
|
## InFormV8.js — 表单打开事件
|
|
7
7
|
|
|
8
8
|
```javascript
|
|
@@ -31,7 +31,7 @@ if (V8.CurrentUser.RoleName.indexOf('管理员') === -1) {
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
<!-- /microi-progressive:chunk -->
|
|
34
|
-
<!-- microi-progressive:chunk id=v8-table-event-006 sha256=
|
|
34
|
+
<!-- microi-progressive:chunk id=v8-table-event-006 sha256=961c57d02a597e26abddc7c4d3b9f8f2f0b1f4ba6f8164ee3bbe7800bd78804b -->
|
|
35
35
|
## SubmitFormV8.js — 前端提交校验
|
|
36
36
|
|
|
37
37
|
```javascript
|
|
@@ -50,7 +50,7 @@ if (V8.Form.StartDate > V8.Form.EndDate) {
|
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
<!-- /microi-progressive:chunk -->
|
|
53
|
-
<!-- microi-progressive:chunk id=v8-table-event-007 sha256=
|
|
53
|
+
<!-- microi-progressive:chunk id=v8-table-event-007 sha256=e074fbd1736d4a80e58c4b4c06338a40b5f8f89045eddf0d09f325ff1d48a7d4 -->
|
|
54
54
|
## SubmitBeforeServerV8.js — 服务端提交前
|
|
55
55
|
|
|
56
56
|
```javascript
|
|
@@ -97,7 +97,7 @@ if (V8.FormSubmitAction === 'Insert' || V8.FormSubmitAction === 'Update') {
|
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
<!-- /microi-progressive:chunk -->
|
|
100
|
-
<!-- microi-progressive:chunk id=v8-table-event-008 sha256=
|
|
100
|
+
<!-- microi-progressive:chunk id=v8-table-event-008 sha256=d013a6f8b5cc1c114e7563fc98322ea6fa5ffce93e10d6bdf489c82344985082 -->
|
|
101
101
|
## SubmitAfterServerV8.js — 服务端提交后
|
|
102
102
|
|
|
103
103
|
```javascript
|
|
@@ -139,7 +139,7 @@ V8.Method.AddSysLog({
|
|
|
139
139
|
`SubmitAfterServerV8` 的“After”仍是“写入后、提交前”。需要在事务真正提交后才发布的缓存版本、跨节点通知等副作用,不能直接在事件中执行。平台为 `microi_database` 提供专用 `V8.Method.RefreshExtensionDatabases()`:事件调用时只登记提交后回调,提交成功才递增当前租户共享 Redis 版本,回滚时自动丢弃。普通业务的外部消息仍优先使用同事务 outbox,不能把任意不可撤销副作用都塞进内存回调。
|
|
140
140
|
|
|
141
141
|
<!-- /microi-progressive:chunk -->
|
|
142
|
-
<!-- microi-progressive:chunk id=v8-table-event-009 sha256=
|
|
142
|
+
<!-- microi-progressive:chunk id=v8-table-event-009 sha256=406c88d14167773a0d7597d4b622f9a53c2046f4d4cfd740cfb5addd13f80434 -->
|
|
143
143
|
## DataFilterV8.js — 服务端数据处理事件
|
|
144
144
|
|
|
145
145
|
获取列表/表单数据后,每行数据都会执行一次此事件。
|
|
@@ -174,7 +174,7 @@ if (V8.Form.Phone) {
|
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
<!-- /microi-progressive:chunk -->
|
|
177
|
-
<!-- microi-progressive:chunk id=v8-table-event-010 sha256=
|
|
177
|
+
<!-- microi-progressive:chunk id=v8-table-event-010 sha256=e41feb40c52d46b7df9c18bf19fe3800194bbc92ce7415864529c69e09b335bc -->
|
|
178
178
|
## 事件上下文变量
|
|
179
179
|
|
|
180
180
|
### 前端事件
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-table-event-011 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-table-event-011 sha256=80a852d31b69084c28828f124a83a2240d82309642619bc72debe3e7c271b3db -->
|
|
6
6
|
## 前端事件名(V8.EventName 可能的值)
|
|
7
7
|
|
|
8
8
|
| 值 | 说明 |
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
| `WFNodeEnd` | 流程节点结束 V8 事件 |
|
|
26
26
|
|
|
27
27
|
<!-- /microi-progressive:chunk -->
|
|
28
|
-
<!-- microi-progressive:chunk id=v8-table-event-012 sha256=
|
|
28
|
+
<!-- microi-progressive:chunk id=v8-table-event-012 sha256=405c8a081022ffa2cc977bc80a591a7315ba208e5b49e176c7708a8037a35cf6 -->
|
|
29
29
|
## 注意事项
|
|
30
30
|
|
|
31
31
|
- 前端事件可使用 `window` 对象和 `async/await`,后端事件不可以
|
|
@@ -15,6 +15,12 @@ description: Microi V8 工作流事件指南。用于编写审批流条件、节
|
|
|
15
15
|
真实用户、角色、部门、岗位 Id。人工节点 `Approve/Countersign/End` 必须配置
|
|
16
16
|
`Users/Roles/Depts/BindJobs` 至少一种真实 `[{"Id":"...","Name":"..."}]`
|
|
17
17
|
绑定,或明确采用上游节点 `AllowSelectUsers=1` 手动选人。
|
|
18
|
+
应用安装母版可显式设置 `FlowDesign.IsEnable=0`(也接受字符串 `"0"`),
|
|
19
|
+
此时人工节点允许空绑定并保持禁用;`false/null/空字符串/省略` 不属于该例外。
|
|
20
|
+
禁用模板仍检查所有节点、连线、坐标及绑定格式,任何非空人员、角色、部门或岗位
|
|
21
|
+
仍必须通过当前租户真实 Id 回读。不得填入 `UNBOUND_*` 等不存在的占位 Id。
|
|
22
|
+
目标租户配置真实审批人后,应先重新检查再显式启用,并验收真实业务流转;
|
|
23
|
+
禁用模板保存成功只证明安装结构完整,不能当作审批已可用或商业交付完成。
|
|
18
24
|
`SameDeptApprove=1` 只筛选候选人,不能单独产生审批人。
|
|
19
25
|
不能把 `Roles:"Manager"`、字符串 Id 数组或另一个租户的 Id 当作绑定。
|
|
20
26
|
|
|
@@ -45,7 +51,7 @@ MCP 写入前会回读当前租户的用户、角色、部门和岗位 Id;回
|
|
|
45
51
|
- 官方发布时 `Microi.WorkFlow` 必须生成 NuGet 包,并与 `Microi.AI` 使用同一 Obfuscar 配置加密后替换包内 DLL;不得推送未加密的 WorkFlow 包。开源安装只消费 NuGet,不要求存在私有源码。
|
|
46
52
|
|
|
47
53
|
<!-- microi-progressive:begin -->
|
|
48
|
-
<!-- microi-progressive:chunk id=v8-workflow-000 sha256=
|
|
54
|
+
<!-- microi-progressive:chunk id=v8-workflow-000 sha256=bd13a63ee55b2a01041fc2e080ca06ab2fbfd3146fa130811061c9f9e8b4cf84 -->
|
|
49
55
|
## 本地优先与版本头(必做)
|
|
50
56
|
|
|
51
57
|
工作流节点、连线条件、开始/结束节点等 V8 代码如果有本地文件,必须优先修改 `microi-v8-engine/<租户>/<项目>/...` 下的本地文件,再同步到数据库。插件提示本地/远端不一致时,先比对并合并,不得直接覆盖。
|
|
@@ -68,7 +74,7 @@ MCP 写入前会回读当前租户的用户、角色、部门和岗位 Id;回
|
|
|
68
74
|
生成工作流 V8 代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;路线选择、审批人计算、状态回写、撤回/驳回处理、跨表联动等复杂代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。若工作流存储表支持 `Version`/`ChangeHistory`,历史说明也必须最新在前并保留旧记录。
|
|
69
75
|
|
|
70
76
|
<!-- /microi-progressive:chunk -->
|
|
71
|
-
<!-- microi-progressive:chunk id=v8-workflow-001 sha256=
|
|
77
|
+
<!-- microi-progressive:chunk id=v8-workflow-001 sha256=d365b3b609c35d28c129f6c31cb453d97e17d0b2ace53eb229d6654d7c5ddbc0 -->
|
|
72
78
|
## 工作流物理表
|
|
73
79
|
|
|
74
80
|
| 表名 | 说明 |
|
|
@@ -86,6 +92,8 @@ MCP 写入前会回读当前租户的用户、角色、部门和岗位 Id;回
|
|
|
86
92
|
- 自动结束节点的 `NodeType` 使用 `AutoEnd`。它可能继承上一人工节点的 `ApprovalType=Agree`,并生成一条结束历史;核对独立审批人数时只计入明确配置的人工节点,不能把结束节点当成额外审核人。
|
|
87
93
|
- 原生 `CancelFlow` 可将请求中的 `FormData` 写回 `wf_flow.FormData`;未传时可能保存 `{}`。应用不能把取消后的实例 `FormData` 当成不可变的原始提交快照。需要恢复冻结业务单时,优先核对业务表保存的服务端快照摘要;若使用原生历史,必须限定同一实例、同一业务表/行、唯一原始开始节点及发起人、自动提交历史,并检查版本、金额、配置摘要和零待办。此分支只能恢复草稿或驳回状态,不能据此批准或过账。
|
|
88
94
|
- 当前 `CancelFlow(WFParam)` 使用独立事务,没有 `StartWork/SendWork` 的共享 `DbTrans` 重载。应用不得在持有实例、工作或业务行锁的接口事务内调用取消,也不能假设给它多传一个参数便会共享事务。微服务可顺序执行“服务端核验并返回真实待办坐标 → 原生取消 → 业务终态复核”,每个请求完成后释放其事务;网络结果未知时先复核终态,不能盲目重发取消或提前恢复业务状态。
|
|
95
|
+
- 业务接口与原生节点共同读取配置、公共引用和业务行时,先画出宿主与脚本合并的锁图。原生审批进入节点前可能已持有流程实例锁;既存流程的业务复核应先通过当前主库有界只读发现真实实例,再在同一共享事务锁定该实例,随后获取固定配置/引用锁及业务行锁,重读验证归属未变。待办发现扫描只读不能提前锁工作行后再等流程;公共引用围栏只协调锁序,不能读取配置值来继承授权。必须逐入口审查包括定义、身份与配置的相反锁序,不以一条 SQL 或单次模拟成功宣称全系统无死锁。
|
|
96
|
+
- 已由可信原生历史证明取消或驳回的终态恢复只校验原提交归属、当前授权和可恢复状态,不应要求审批期间未发生正常库存、成本或其他业务余额变化;此恢复不产生过账副作用。批准与过账仍必须严格比较冻结快照、当前期间及业务版本,并覆盖撤权、并发和响应未知时使用原请求键恢复。
|
|
89
97
|
- 验收至少覆盖真实取消时不传 `FormData`、伪造取消载荷、退回后直接重提被拒绝、取消后新实例重提、自动结束继承 `Agree`,以及普通角色不能修改取证用的流程历史。模拟正确 JSON 不替代原生 HTTP 验收。
|
|
90
98
|
|
|
91
99
|
直接 SQL 查询常用场景:
|
|
@@ -112,7 +120,7 @@ var history = V8.Db.FromSql(
|
|
|
112
120
|
```
|
|
113
121
|
|
|
114
122
|
<!-- /microi-progressive:chunk -->
|
|
115
|
-
<!-- microi-progressive:chunk id=v8-workflow-002 sha256=
|
|
123
|
+
<!-- microi-progressive:chunk id=v8-workflow-002 sha256=38a77bbee9ea30f036a9d9ef7150e2a738f4533dc9f05c23a3d00ff86aefc60d -->
|
|
116
124
|
## 流程 V8 事件执行顺序
|
|
117
125
|
|
|
118
126
|
工作流合并提交请求的 `_FormSubmitAction` 可使用 `Add/Edit`;表单后端事件中的
|
|
@@ -139,7 +147,7 @@ var history = V8.Db.FromSql(
|
|
|
139
147
|
13. **节点结束 V8 事件(前端 WFNodeEnd)**
|
|
140
148
|
|
|
141
149
|
<!-- /microi-progressive:chunk -->
|
|
142
|
-
<!-- microi-progressive:chunk id=v8-workflow-003 sha256=
|
|
150
|
+
<!-- microi-progressive:chunk id=v8-workflow-003 sha256=2cef523c79040139ffdfba070930ce94db18d5b3486fa35a2a694dafa2c8a186 -->
|
|
143
151
|
## V8.WF 上下文属性
|
|
144
152
|
|
|
145
153
|
### 所有流程事件可访问
|
|
@@ -174,7 +182,7 @@ var history = V8.Db.FromSql(
|
|
|
174
182
|
| `V8.WF.WorkResult` | 流程执行结果(发送到了哪个节点、哪些审批人) |
|
|
175
183
|
|
|
176
184
|
<!-- /microi-progressive:chunk -->
|
|
177
|
-
<!-- microi-progressive:chunk id=v8-workflow-004 sha256=
|
|
185
|
+
<!-- microi-progressive:chunk id=v8-workflow-004 sha256=99db9f8361d90ce1659922ee2497b7d2f235da009219b8b6a8f22d603b818eff -->
|
|
178
186
|
## ApprovalType 审批类型
|
|
179
187
|
|
|
180
188
|
| 值 | 说明 |
|
|
@@ -185,7 +193,7 @@ var history = V8.Db.FromSql(
|
|
|
185
193
|
| `Auto` | 发起流程(开始节点) / 业务节点 / 自动结束节点 |
|
|
186
194
|
|
|
187
195
|
<!-- /microi-progressive:chunk -->
|
|
188
|
-
<!-- microi-progressive:chunk id=v8-workflow-005 sha256=
|
|
196
|
+
<!-- microi-progressive:chunk id=v8-workflow-005 sha256=28ada7e06b18590b20935fcaaa2006c868532db89838dfe3799ce2ca0f97c918 -->
|
|
189
197
|
## 条件判断 V8 事件(后端 WFNodeLine)
|
|
190
198
|
|
|
191
199
|
根据业务规则决定流程走向。优先推荐设置 `V8.NextNodeId` 直接指定下一节点;如仍使用条件线的条件值,也可以设置 `V8.LineValue`。
|
|
@@ -204,7 +212,7 @@ if (V8.Form.Money <= 100) {
|
|
|
204
212
|
```
|
|
205
213
|
|
|
206
214
|
<!-- /microi-progressive:chunk -->
|
|
207
|
-
<!-- microi-progressive:chunk id=v8-workflow-006 sha256=
|
|
215
|
+
<!-- microi-progressive:chunk id=v8-workflow-006 sha256=d3a984b0e45aed19da942e0fa6c4183751d6057b7360e6eb11068e538d598cf9 -->
|
|
208
216
|
## 前端发起流程
|
|
209
217
|
|
|
210
218
|
```javascript
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=v8-workflow-007 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=v8-workflow-007 sha256=953f9a9405bc929adab9365997f917e10df0fa16bbb2cf1448806d07fdcc945a -->
|
|
6
6
|
## 节点开始 V8 事件
|
|
7
7
|
|
|
8
8
|
### 前端 — 指定审批人
|
|
@@ -26,7 +26,7 @@ if (!V8.Form.ApprovalFiles) {
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
<!-- /microi-progressive:chunk -->
|
|
29
|
-
<!-- microi-progressive:chunk id=v8-workflow-008 sha256=
|
|
29
|
+
<!-- microi-progressive:chunk id=v8-workflow-008 sha256=5849ffaac5c7ffdf3dcfbf4fe8e18951415e1843bd7e233f6a50e36673767f14 -->
|
|
30
30
|
## 节点结束 V8 事件
|
|
31
31
|
|
|
32
32
|
### 后端 — 流程结束后业务处理
|
|
@@ -88,7 +88,7 @@ if (V8.WF.WorkResult) {
|
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
<!-- /microi-progressive:chunk -->
|
|
91
|
-
<!-- microi-progressive:chunk id=v8-workflow-009 sha256=
|
|
91
|
+
<!-- microi-progressive:chunk id=v8-workflow-009 sha256=301ee4a5554069c509c559377fa57340af41b5c014cfdf95be834150ab8c8899 -->
|
|
92
92
|
## 前端打开流程表单
|
|
93
93
|
|
|
94
94
|
```javascript
|
|
@@ -106,7 +106,7 @@ V8.OpenFormWF(V8.Form, 'View', {
|
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
<!-- /microi-progressive:chunk -->
|
|
109
|
-
<!-- microi-progressive:chunk id=v8-workflow-010 sha256=
|
|
109
|
+
<!-- microi-progressive:chunk id=v8-workflow-010 sha256=99dde7c6359317e8b4eb72bddfc568520506550c8381e53d3d238e716c92272c -->
|
|
110
110
|
## MCP 创建/检查/测试工作流
|
|
111
111
|
|
|
112
112
|
从自然语言需求创建审批流时,优先整理成完整 Manifest 的 `workflows` 配置,再走 MCP 干跑和验收流程。
|
|
@@ -149,13 +149,13 @@ MCP 操作顺序:
|
|
|
149
149
|
- 图形条件生成的 V8 会带 `MICROI_WF_LINE_CONDITION_JSON` 标记,MCP 测试工具只解析该标记,不执行任意手写 V8。
|
|
150
150
|
|
|
151
151
|
<!-- /microi-progressive:chunk -->
|
|
152
|
-
<!-- microi-progressive:chunk id=v8-workflow-011 sha256=
|
|
152
|
+
<!-- microi-progressive:chunk id=v8-workflow-011 sha256=70703905fd4bdbde1d645e8d1dbb77569a352da8c2014b2acd2e997464b7397a -->
|
|
153
153
|
## 发起流程与表单保存
|
|
154
154
|
|
|
155
155
|
新建业务数据并发起流程时,应先保存表单,再启动流程,或使用平台的合并接口 `StartWorkWithForm` 在同一事务里完成。首次发起建议以 `Add` 模式打开流程表单;如果前端提前生成了 `Id` 但业务表还没有该行,后端会使用 `_NoLineForAdd` 兜底,避免 `UptFormData` 报“数据显示不存在”。
|
|
156
156
|
|
|
157
157
|
<!-- /microi-progressive:chunk -->
|
|
158
|
-
<!-- microi-progressive:chunk id=v8-workflow-012 sha256=
|
|
158
|
+
<!-- microi-progressive:chunk id=v8-workflow-012 sha256=4f7575ce99688366c05f2267d8271c12215d05c89e5664f7564d5cf04a94f281 -->
|
|
159
159
|
## 流程相关表
|
|
160
160
|
|
|
161
161
|
| 表 | 说明 |
|
|
@@ -168,7 +168,7 @@ MCP 操作顺序:
|
|
|
168
168
|
| `WF_History` | 流程轨迹表 |
|
|
169
169
|
|
|
170
170
|
<!-- /microi-progressive:chunk -->
|
|
171
|
-
<!-- microi-progressive:chunk id=v8-workflow-013 sha256=
|
|
171
|
+
<!-- microi-progressive:chunk id=v8-workflow-013 sha256=d6b942d331b8504cb0e59e48ecb370e88ce572d50b1e50bf367dcbc6796fed23 -->
|
|
172
172
|
## 注意事项
|
|
173
173
|
|
|
174
174
|
- 条件判断 V8 事件可以设置 `V8.NextNodeId` 直接指定下一节点;未设置时才按 `V8.LineValue` 匹配条件线的**条件值**
|
|
@@ -6,7 +6,7 @@ description: 每次 Microi 任务开始前必读的基础规范。用于识别
|
|
|
6
6
|
# Microi 工作区全局约定
|
|
7
7
|
|
|
8
8
|
<!-- microi-progressive:begin -->
|
|
9
|
-
<!-- microi-progressive:chunk id=workspace-conventions-000 sha256=
|
|
9
|
+
<!-- microi-progressive:chunk id=workspace-conventions-000 sha256=d64145e9e39c0796f680659543d7504871749ea93858938aa31c9884a15a1e79 -->
|
|
10
10
|
## 任务启动前 Skill 读取规则(强制)
|
|
11
11
|
|
|
12
12
|
AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端、后端、UniApp、文档、测试或交付任务前,必须先按任务类型读取相关 `microi.skills/**/SKILL.md`。不能等到写代码或出问题后才补读。
|
|
@@ -36,10 +36,11 @@ AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端
|
|
|
36
36
|
- 任务若只要求分析、评审或制定规范,仍保持只读或仅修改指定规范;身份标记不授权无关线上写入。客户部署、容器更新和应用自动安装与官方发布是独立动作,服从用户指定的手动/自动边界;用户明确手动更新时不得擅自部署。
|
|
37
37
|
- 收尾必须区分“源码/文档已修改、测试通过、应用已发布回读、Skills/插件已打包或已分发、镜像已推送、客户已安装或已部署”。只有实际渠道验收成功才能说其它用户已可获取;不得把文档本地构建或插件本地副本同步称为已上线。
|
|
38
38
|
|
|
39
|
-
###
|
|
39
|
+
### 平台回归与独立应用测试归属(强制)
|
|
40
40
|
|
|
41
|
-
-
|
|
42
|
-
- C# 单元/组件/集成测试归入 `Microi.Server/Microi.Tests
|
|
41
|
+
- 创始人源码工作区中的每个平台功能新增、缺陷修复和兼容性调整都必须同时交付可重复执行的回归测试;先证明旧行为失败,再验证修复成功,覆盖正常、边界、失败、安全与存量兼容路径。不得只改源码或用手工截图代替自动回归。
|
|
42
|
+
- 平台 C# 单元/组件/集成测试归入 `Microi.Server/Microi.Tests`。平台前端、平台内置应用包与平台 V8 的 Node 行为测试可留在责任源码旁,由 `Microi.Tests/run-tests.ps1` 自动发现执行;平台真实浏览器、数据库及第三方集成归入 Full 或平台专项验收,不得冒充离线单测。新增公共后端能力同时补相应 HTTP 闭环。
|
|
43
|
+
- 官方或社区独立业务应用、游戏及客户项目的测试归应用自身源码根的 `tests/` 或独立测试工程,由该应用自己的测试和发布入口执行;不得放入 `Microi.Tests`、创建转调包装或接入平台 Quick/Full。官方发布身份不改变测试归属。应用开发中涉及平台通用缺陷时,仅把通用最小回归夹具加入平台门禁,应用业务断言仍在应用项目维护。
|
|
43
44
|
- `Microi一键编译发布.sh` 的所有 PC/API 镜像路径(包括仅推送、热修复)都必须先通过 Full;缺少环境、零用例、失败、取消、跳过、待办或无法解析测试结果一律停止。禁止关闭断言、删测试、排除失败项目或修改门禁阈值来发布。
|
|
44
45
|
- 测试成功必须绑定本次候选源码和实际构建上下文的内容哈希,构建后、每次推送前复核。旧产物没有可验证回执或源码/产物漂移时必须重建重测,禁止“当前源码通过测试 + 推送另一份旧 DLL/前端 dist”。
|
|
45
46
|
- 交付记录逐项列明修复与测试映射、执行数量、未覆盖边界和镜像摘要。覆盖率与 Full 都不能证明所有租户业务、任意生产数据和第三方系统绝对无误;真实客户路径仍需只读验收。详细矩阵见 `microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md`。
|
|
@@ -106,7 +107,7 @@ AI 在用户本机启动 Node.js、Vite、Webpack、dotnet build、Java、Docker
|
|
|
106
107
|
- 本规则只约束 `Microi.Client/` 吾码框架前端源码。独立 MicroService、Web、UniApp 等应用源码仍按其交付 Skill 在发布前执行自身必要的构建;不得因为本规则跳过微服务正式产物生成。
|
|
107
108
|
|
|
108
109
|
<!-- /microi-progressive:chunk -->
|
|
109
|
-
<!-- microi-progressive:chunk id=workspace-conventions-004 sha256=
|
|
110
|
+
<!-- microi-progressive:chunk id=workspace-conventions-004 sha256=a12a204339ee40367f4c09d085d818515b0d94c7c0d748d0d455fede6b98a2e4 -->
|
|
110
111
|
## 临时文件与 AI 产物放置规则(强制)
|
|
111
112
|
|
|
112
113
|
AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、测试截图、临时报告**,**严禁放在工作区根目录(`<workspace-root>/`)**,必须放在指定位置:
|
|
@@ -132,7 +133,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
132
133
|
**2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.Agent 插件生成时可以继续使用 `.microi-e2e/`,但 AI 为某个任务手写的一次性 Playwright 脚本、报告和截图仍然必须放在 `.tmp/`。
|
|
133
134
|
|
|
134
135
|
<!-- /microi-progressive:chunk -->
|
|
135
|
-
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=
|
|
136
|
+
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=f627ee155b40014af76926b3a432601aa3f6bec5a7eb98ca0540c83fa41f1e5a -->
|
|
136
137
|
## Microi 源码路径速查(工作区根相对路径)
|
|
137
138
|
|
|
138
139
|
当用户提到“吾码后端源码”“吾码前端源码”“表单引擎源码”“官网源码”等简称时,默认按下列路径定位;如果当前工作区缺少对应目录,再用 `rg --files` 或目录搜索确认实际位置。
|
|
@@ -222,9 +223,17 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
222
223
|
- `Microi.net.Api/Controllers` 除五个兼容内核 Controller 与统一旧客户端兼容 Controller 外,只能保留已证明接口引擎无法承担的薄协议 Controller;每个保留项必须同步登记 `api-ownership-catalog.json` 并由结构测试锁定。已完整迁入接口引擎的旧 Controller 必须继续物理删除。
|
|
223
224
|
- `Program.cs` 只保留有说明的插件注册和最薄宿主入口;ASP.NET 组合代码可留在同项目 `Hosting`,可复用业务/运行时逻辑进入 `Microi.Core`、`Microi.net`、`Microi.Upgrade` 或对应插件,禁止通过新建“中转层”掩盖归属问题。
|
|
224
225
|
|
|
225
|
-
<!-- microi-progressive:chunk id=workspace-conventions-009 sha256=
|
|
226
|
+
<!-- microi-progressive:chunk id=workspace-conventions-009 sha256=cb0a9b2286d51e41dfd3c4249f28d4ac57b6736112be3c1f57f8eb405d0631b1 -->
|
|
226
227
|
## 多对话共享工作区变更归属保护(强制)
|
|
227
228
|
|
|
229
|
+
### 功能验收后的源码提交与推送(强制)
|
|
230
|
+
|
|
231
|
+
- 每个已完成并通过相应验收的功能、修复或独立里程碑,必须把本任务源码、测试和必要文档按实际 Git 仓库分别提交并推送;不能仅保存在工作区、stash、临时目录或已发布产物中。用户明确要求不提交/不推送、只读任务和未完成的实验除外,不为无改动仓库制造空提交。
|
|
232
|
+
- 提交前回读工作树、暂存区、上游和远端;按可核验的本任务 hunk 暂存,保留其它对话的改动与既有暂存项。公开根仓只提交公开代码;闭源目录只从各自独立仓库根提交并推送到其已有内部远端,严格执行公开仓闭源路径门禁,不能用 gitlink 或强制添加绕过隔离。
|
|
233
|
+
- 推送前先获取上游的新提交并安全整合;共享工作区有并行改动时优先在隔离候选中合并,不用整树 stash/reset 覆盖他人成果,不强推共享分支,不绕过仓库 Hook。需要精确回滚时保留独立、说明清楚的功能提交;回滚已推送功能通常使用新的反向提交,不改写共享历史。
|
|
234
|
+
- 正式发布前,候选必须包含此前已交付功能的提交,并完成本任务提交、推送及远端提交号回读,再从该冻结候选构建与发布。仅更新某个说明页面时也要核对整个站点的候选;隔离工作树不能因为没有未提交变更就被当成最新线上功能。发布锁只防并发,不能代替源码完整性检查。
|
|
235
|
+
- 收尾逐仓记录本地提交号、远端分支和回读结果,并区分源码推送、构建发布与真实线上验收。网络、权限、冲突或门禁阻止推送时,保留本地提交、准确报告未推送项并继续完成可独立推进的工作;不得宣称完整交付,也不得为赶进度先发布未交付源码。
|
|
236
|
+
|
|
228
237
|
同一工作区可能同时被用户、其它 Codex 对话、IDE、自动化任务或外部 Git 操作修改。任务启动前已经存在、或无法用本对话证据严格证明归属的差异,一律视为他人资产并保留;“工作区是脏的”不是清理授权。
|
|
229
238
|
|
|
230
239
|
- 开始修改前先保存只读基线,至少包括 `git status --short`、目标文件的 `git diff -- <file>`,必要时记录文件 SHA-256。VS Code 重启、上下文压缩或接续中断任务后,必须重新建立基线,不能沿用对差异归属的猜测。
|
|
@@ -100,7 +100,7 @@ AI 为 Microi 平台新增或修改任何业务逻辑、后台工具、数据维
|
|
|
100
100
|
- 平台级强制安全校验不能为了“全部低代码化”放进租户可编辑脚本而被绕过;可以留在 C#,但必须是通用、失败关闭的安全边界,不得夹带某个项目的业务文案、字段组合或状态机。
|
|
101
101
|
|
|
102
102
|
<!-- /microi-progressive:chunk -->
|
|
103
|
-
<!-- microi-progressive:chunk id=workspace-conventions-018 sha256=
|
|
103
|
+
<!-- microi-progressive:chunk id=workspace-conventions-018 sha256=e33b8387bbe8dbc400249ca9d16f91656149492f5f7ce253cbfa67b80f4ca8ef -->
|
|
104
104
|
## 应用商城优先于 Microi.Upgrade(强制)
|
|
105
105
|
|
|
106
106
|
能由应用包声明、差异安装和回读验收完成的升级,不得在 `Microi.Server/Microi.Upgrade/` 新增定制 .NET 升级类。表、字段、Tab、菜单、角色权限、接口引擎、表单事件、数据源、页面、打印、工作流、任务及可幂等安装的种子数据,默认都属于应用商城资源。
|
|
@@ -109,6 +109,7 @@ AI 为 Microi 平台新增或修改任何业务逻辑、后台工具、数据维
|
|
|
109
109
|
- 吾码官方开发者若可调用绑定 `https://api.itdos.com`、`OsClient=iTdos` 的 `microi_itdos`,必须先在官方主租户通过 MCP 更新资源,重新制作并发布对应官方应用,发布后按字段/菜单/引擎/包版本回读;再用目标租户 MCP 安装/更新并轮询后台任务到 `Succeeded`。
|
|
110
110
|
- 当前用户没有 `microi_itdos` 权限时,通过其自己的 MCP/Manifest 幂等升级自己的数据库并回读;不得为了单个租户把定制迁移塞进通用后端。确需让更多用户复用时,应生成其有权维护的社区/私有应用包。
|
|
111
111
|
- 只有应用商城运行前就必须存在的物理兼容基础、跨版本核心协议迁移、存储格式变化,或安装器自身无法安全表达的不可逆平台迁移,才允许进入 `Microi.Upgrade`。每个例外必须写明“为什么应用包不能完成”、影响范围、回滚/前后兼容、分布式幂等和验收依据。
|
|
112
|
+
- 自动恢复只保证启动、普通登录、菜单导航和应用商城安装/更新,SSO、AI、通知、备份、OCR、翻译等应用不能成为自动升级或启动门禁。完整官方资源放在 `Microi.Server/OfficialApplications/Resource/`,按显式清单生成 `Microi.Upgrade/Resource/` 的两项恢复资源;完整官方包的增长不得自动扩大启动闭包。更高版本且就绪的手动商城更新和既有租户 Hook 保留,失败不推进版本。
|
|
112
113
|
- 允许的 .NET 迁移只能按持久化版本/迁移账本执行待办步骤,使用共享租约且业务幂等;禁止把新迁移同时加入版本链和“每次启动无条件全租户对账”列表。启动成本必须与待执行迁移数相关,不能随历史升级文件总数对每个租户线性增长。
|
|
113
114
|
- 评审 `Microi.Upgrade` PR 时先做资源分类:若只是补字段、Tab 或低代码元数据,移出升级器并发布应用包;若保留 C#,必须提供双节点、重复启动、租约丢失、失败不推进版本以及旧新节点共存测试。
|
|
114
115
|
|
|
@@ -139,7 +140,7 @@ AI 开始处理定制页面、弹窗、Web、UniApp、微服务或应用商城
|
|
|
139
140
|
如果 MCP 返回登录过期,必须先修复或刷新目标 MCP 身份,再继续把 MCP 读取结果当作当前事实;不能因为读取失败就假设在线应用不存在并重复创建。
|
|
140
141
|
|
|
141
142
|
<!-- /microi-progressive:chunk -->
|
|
142
|
-
<!-- microi-progressive:chunk id=workspace-conventions-020 sha256=
|
|
143
|
+
<!-- microi-progressive:chunk id=workspace-conventions-020 sha256=60e6dac03e25861d4e0507c30ab28d28e26ada4cbe3231c3b029eb2367dc7224 -->
|
|
143
144
|
## VS Code 插件空目录生成规则
|
|
144
145
|
|
|
145
146
|
Microi.Agent 面向普通用户时,用户本地可能只是一个空工作区。插件生成 AI 指令文件时不能假设用户已经有 `microi.skills/`、`Microi-V8-Engine/`、`AI-Project/` 或某个固定前端项目目录。
|
|
@@ -151,7 +152,7 @@ Microi.Agent 面向普通用户时,用户本地可能只是一个空工作区
|
|
|
151
152
|
- 插件升级时应继续保护用户本地修改过的 skill 文件,只覆盖插件曾生成且用户未改过的文件。
|
|
152
153
|
|
|
153
154
|
<!-- /microi-progressive:chunk -->
|
|
154
|
-
<!-- microi-progressive:chunk id=workspace-conventions-021 sha256=
|
|
155
|
+
<!-- microi-progressive:chunk id=workspace-conventions-021 sha256=963e489e2bdda4614c8b3089830b8bb855603dbd4338ddcc7ae29519d560766f -->
|
|
155
156
|
## Microi 版本号规则
|
|
156
157
|
|
|
157
158
|
Microi 通用版本号采用 `主版本.次版本.修订版本` 三段数字格式,从 `1.0.0` 开始。每次发布时最后一位加 1;当某一位超过 `9` 时向前一位进位并将当前位归 `0`,例如 `1.0.9 -> 1.1.0`、`1.9.9 -> 2.0.0`、`9.9.9 -> 10.0.0`。
|
|
@@ -185,7 +186,7 @@ if (string.IsNullOrWhiteSpace(tableName)) { return; }
|
|
|
185
186
|
如果方法内部只通过 `DynamicHelper` 读取对象字段,方法参数优先声明为 `object`,不要声明为 `dynamic`。这样可以减少 C# 运行时动态绑定进入普通字符串工具链的机会。
|
|
186
187
|
|
|
187
188
|
<!-- /microi-progressive:chunk -->
|
|
188
|
-
<!-- microi-progressive:chunk id=workspace-conventions-023 sha256=
|
|
189
|
+
<!-- microi-progressive:chunk id=workspace-conventions-023 sha256=4ef009cbfca343640e69ccdb6be47f3cb13ad8a67f9ff770debce20c919f1bb3 -->
|
|
189
190
|
## 根目录保留文件说明
|
|
190
191
|
|
|
191
192
|
根目录只允许存在以下类型的文件和目录:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=workspace-conventions-024 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=workspace-conventions-024 sha256=4e97c278d0a813e23c2c56b11aec8b157b2b100ed6f46ea07d45dbe9954ca5aa -->
|
|
6
6
|
## Microi.net.Api 本地启动约定
|
|
7
7
|
|
|
8
8
|
默认本地后端项目是 `Microi.Server/Microi.net.Api/Microi.net.Api.csproj`。AI 需要启动后端、验证接口、跑 Playwright、回读接口引擎或排查前后端联调问题时,优先使用下面的 PowerShell 命令:
|
|
@@ -20,7 +20,7 @@ Pop-Location
|
|
|
20
20
|
**本地后端自动重启要求(强制)**:本地联调需要启动或重启 `Microi.net.Api` 时,先检查 `.tmp/microi-process-state/release.lock`;发布锁存在时禁止启动或重启。无发布时先回读标准端口和 `/api/Diagnostics/liveness`,健康服务默认复用;只有本任务修改了需重载的后端代码、服务不健康或用户明确要求重启时,才可精确停止当前工作区的后端进程,然后在 `Microi.Server/Microi.net.Api` 目录执行 `dotnet run --launch-profile Microi.net.Api`。优先使用用户能在 VS Code 中看到和停止的终端(包含 VS Code 集成终端、VS Code 任务终端、用户明确允许的 VS Code 可追踪隐藏终端);如果当前工具没有 VS Code 终端能力,允许使用本机可见的 `cmd`/PowerShell 窗口启动,禁止使用脱离用户可见窗口的后台服务或守护进程。不要误杀数据库、Redis、Node 前端或其它业务进程。
|
|
21
21
|
|
|
22
22
|
<!-- /microi-progressive:chunk -->
|
|
23
|
-
<!-- microi-progressive:chunk id=workspace-conventions-025 sha256=
|
|
23
|
+
<!-- microi-progressive:chunk id=workspace-conventions-025 sha256=07c3d729c8f1e9a2bf93ff00937e5d6eae4602d346e4f9254b03a33211ac4848 -->
|
|
24
24
|
## 多 AI 对话共享本地服务与发布互斥(强制)
|
|
25
25
|
|
|
26
26
|
同一工作区的 4、5 个 AI 对话共用同一份源码和固定端口时,`61500/61501` 是工作区级单例共享服务,不属于某个对话。端口相同意味着无法让每个对话拥有一套独立进程;正确模型是“复用健康服务 + 需要重载时串行重启 + 发布时独占”,不能让每个对话都无条件先杀再启动。
|
|
@@ -52,7 +52,7 @@ OsClient 等状态;同一 Profile/Context 内切换租户会污染其它窗口
|
|
|
52
52
|
分层报告。
|
|
53
53
|
|
|
54
54
|
<!-- /microi-progressive:chunk -->
|
|
55
|
-
<!-- microi-progressive:chunk id=workspace-conventions-026 sha256=
|
|
55
|
+
<!-- microi-progressive:chunk id=workspace-conventions-026 sha256=73207c0cfcc442a177c47c36503dd6145fc826e23e79df3913861f65d8d16df3 -->
|
|
56
56
|
## 本地租户与测试凭据读取约定
|
|
57
57
|
|
|
58
58
|
AI 在本地启动后端、跑 Playwright、做登录态页面截图或调用需要登录的接口前,必须先尝试从本地配置判断租户和测试账号,不要直接以“未登录无法测试”结束:
|
|
@@ -64,13 +64,13 @@ AI 在本地启动后端、跑 Playwright、做登录态页面截图或调用需
|
|
|
64
64
|
5. `.microi-local`、Token、数据库连接串、Redis 密码和测试凭据都视为本地敏感配置。最终回复、日志摘要和测试报告中不得输出真实值,只能写 `<redacted>`、`本地配置账号` 或 `本地配置凭据`。
|
|
65
65
|
|
|
66
66
|
<!-- /microi-progressive:chunk -->
|
|
67
|
-
<!-- microi-progressive:chunk id=workspace-conventions-027 sha256=
|
|
67
|
+
<!-- microi-progressive:chunk id=workspace-conventions-027 sha256=84988eac9cf7543a192b3e829b879afb7b35ef92798dc9ea69243f173a8ab674 -->
|
|
68
68
|
## 自动化登录约定
|
|
69
69
|
|
|
70
70
|
本地和远端 E2E 统一传真实 `Account` / `Pwd`。需要跳过图形验证码时,只能在目标租户 `sys_config.AutoTestSkipCaptcha=true` 后传 `_AutomationTestLogin=true`;它只跳过验证码,绝不能绕过密码校验。禁止恢复 `DevLoginBypass`、`X-Microi-Dev-Key`、`_DEV_BYPASS_` 或让脚本自动改写后端 `appsettings`。测试完成后不持久化账号密码。
|
|
71
71
|
|
|
72
72
|
<!-- /microi-progressive:chunk -->
|
|
73
|
-
<!-- microi-progressive:chunk id=workspace-conventions-028 sha256=
|
|
73
|
+
<!-- microi-progressive:chunk id=workspace-conventions-028 sha256=6ff58ce80aab2bd47c5af022382159e98e4c4ca5eb955281e61918079d4175a5 -->
|
|
74
74
|
## V8 远端/本地同步收尾约定
|
|
75
75
|
|
|
76
76
|
AI 通过 MCP、接口引擎、数据库脚本或平台 API 修改任何远端 V8 代码后,任务结束前必须把远端当前生效代码同步回本地 `Microi-V8-Engine/<server>/<osClient>/` 目录,并做一次同步状态复核。
|
|
@@ -95,13 +95,13 @@ AI 通过 MCP、接口引擎、数据库脚本或平台 API 修改任何远端 V
|
|
|
95
95
|
- 若同步状态非 0,必须先列出具体文件并分类处理:正文一致仅校准 meta/mtime,远端较新则拉回,本地较新则推送,双方都改过则人工合并。生产资金/资产系统不能为清状态盲目覆盖远端。
|
|
96
96
|
|
|
97
97
|
<!-- /microi-progressive:chunk -->
|
|
98
|
-
<!-- microi-progressive:chunk id=workspace-conventions-029 sha256=
|
|
98
|
+
<!-- microi-progressive:chunk id=workspace-conventions-029 sha256=e90e532f9448b67f98f28a68fd4ea45b79868cf25fc14c5283b9074e91559f27 -->
|
|
99
99
|
## V8 缓存刷新约定
|
|
100
100
|
|
|
101
101
|
如果 AI 绕过平台表单提交事件,直接通过 MCP、数据库脚本或自写同步工具更新 `sys_apiengine`、`diy_table`、`diy_field`、`sys_menu`、`wf_node` 等远端 V8 代码,收尾时除了同步本地文件,还必须刷新运行中服务的缓存。至少清理当前 `<OsClient>` 下对应资源的 `Microi:<OsClient>:FormData:<table>:<key>`、`Id` 和地址形式缓存;若可用,优先调用平台缓存接口或插件内置同步流程。清缓存后要重新调用受影响接口做一次真实验证,避免本地/远端代码已一致但 API 仍执行旧缓存代码。
|
|
102
102
|
|
|
103
103
|
<!-- /microi-progressive:chunk -->
|
|
104
|
-
<!-- microi-progressive:chunk id=workspace-conventions-030 sha256=
|
|
104
|
+
<!-- microi-progressive:chunk id=workspace-conventions-030 sha256=c25d0aaffec64d8a66cda36acd9ec337eda99a4411fddb0e966e45247ba574de -->
|
|
105
105
|
## MCP 元数据更新验收约定
|
|
106
106
|
|
|
107
107
|
AI 通过 MCP 修改 `diy_field`、`diy_table`、`sys_menu`、`sys_osclients`、`sys_config` 等平台元数据后,不能只看写入返回成功,必须按前端真实消费方式回读验证:
|
|
@@ -111,7 +111,7 @@ AI 通过 MCP 修改 `diy_field`、`diy_table`、`sys_menu`、`sys_osclients`、
|
|
|
111
111
|
3. 最终交付说明必须写清楚:改了哪个表/字段,回读值是什么,刷新了哪些缓存,验证入口是什么。若某个缓存刷新接口失败或只能部分成功,需要把失败消息原样摘要出来,不能把“写入成功”当作“页面一定生效”。
|
|
112
112
|
|
|
113
113
|
<!-- /microi-progressive:chunk -->
|
|
114
|
-
<!-- microi-progressive:chunk id=workspace-conventions-031 sha256=
|
|
114
|
+
<!-- microi-progressive:chunk id=workspace-conventions-031 sha256=cea2d1c912ffc31136a859fd10f282c488b5b8d1bf3f2ced7c39084b23e5ccf5 -->
|
|
115
115
|
## MCP 可用性排查约定
|
|
116
116
|
|
|
117
117
|
VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”,不代表当前 AI 会话一定已经成功加载了对应工具。AI 在声称“可以通过 MCP 操作”之前,必须完成一次真实可调用性验证:
|
|
@@ -127,7 +127,7 @@ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”
|
|
|
127
127
|
- 修复 Microi.Agent 插件的 MCP 生成逻辑后,必须重新生成配置、重启对应 MCP server,并在当前 AI 会话中再次验证工具发现与一次只读工具调用。
|
|
128
128
|
|
|
129
129
|
<!-- /microi-progressive:chunk -->
|
|
130
|
-
<!-- microi-progressive:chunk id=workspace-conventions-032 sha256=
|
|
130
|
+
<!-- microi-progressive:chunk id=workspace-conventions-032 sha256=230c8683389d2b1ee4f5ba88dc4e51cb4dc4eb6a89b76a142b07f479ff5be1c8 -->
|
|
131
131
|
## MCP 写入超时与降级约定
|
|
132
132
|
|
|
133
133
|
- 写请求超时后的远端回读必须使用独立的短超时,不能继续沿用普通查询的长超时。否则一次 60 秒写超时后,每次回读还可能等待 120 秒,AI 会长期停留在“等待远端回读”,用户误以为菜单按钮或接口引擎完全写不进去。
|
|
@@ -143,7 +143,7 @@ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”
|
|
|
143
143
|
- 发生连续写入超时时,要先停止并发写入,记录具体工具、资源 Key、耗时和回读结果;禁止用“服务器整体不可用”“缓存锁死”等没有日志证据的结论代替诊断。
|
|
144
144
|
|
|
145
145
|
<!-- /microi-progressive:chunk -->
|
|
146
|
-
<!-- microi-progressive:chunk id=workspace-conventions-033 sha256=
|
|
146
|
+
<!-- microi-progressive:chunk id=workspace-conventions-033 sha256=b642bb516a42b50e8b459e5237588e85d71c9715970779e155b88d7c0e8c6536 -->
|
|
147
147
|
## Codex MCP 单入口约定
|
|
148
148
|
|
|
149
149
|
- Codex 对普通 MCP 大工具集可能无法稳定注入时,使用插件生成的 `microi_codex` 单入口,不要据此判断服务器或帐号不可用。
|
|
@@ -154,7 +154,7 @@ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”
|
|
|
154
154
|
- VS Code/Copilot、Cursor、Claude Code 仍使用完整 MCP 工具集;不要把 Codex 的 `enabled_tools = ["microi_codex"]` 复制到其他客户端配置。
|
|
155
155
|
|
|
156
156
|
<!-- /microi-progressive:chunk -->
|
|
157
|
-
<!-- microi-progressive:chunk id=workspace-conventions-034 sha256=
|
|
157
|
+
<!-- microi-progressive:chunk id=workspace-conventions-034 sha256=073253c786f85fb23b8b09c71418eaaa00f6a36262bf32e9da857340faa3e75f -->
|
|
158
158
|
## .venv Python 环境说明
|
|
159
159
|
|
|
160
160
|
工作区根目录的 `.venv/` 是 Python 虚拟环境,**保留,不要删除**。已安装:
|
|
@@ -165,7 +165,7 @@ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”
|
|
|
165
165
|
|
|
166
166
|
AI 执行 Python 脚本时应使用 `.venv\Scripts\python.exe`(Windows)而非系统 Python。
|
|
167
167
|
<!-- /microi-progressive:chunk -->
|
|
168
|
-
<!-- microi-progressive:chunk id=workspace-conventions-035 sha256=
|
|
168
|
+
<!-- microi-progressive:chunk id=workspace-conventions-035 sha256=c114dffea6978f289601a8f71aa83a0466f3d934e96e45bb871af179d319a1e3 -->
|
|
169
169
|
## 后端代码改动后的重启验收
|
|
170
170
|
|
|
171
171
|
AI 只要修改了 `Microi.Server/**` 下会影响 `Microi.net.Api` 运行结果的后端源码、配置、控制器、服务、依赖项目或接口行为,任务收尾前必须完成一次“编译 + 重启本地后端 + 健康验证”,不要只用隔离输出目录 build 后结束。
|
|
@@ -185,7 +185,7 @@ AI 只要修改了 `Microi.Server/**` 下会影响 `Microi.net.Api` 运行结果
|
|
|
185
185
|
这条规则优先于“避免打断正在运行服务”的默认谨慎策略;本地开发联调场景下,用户通常需要 launch profile 当前端口上的后端加载最新代码。
|
|
186
186
|
|
|
187
187
|
<!-- /microi-progressive:chunk -->
|
|
188
|
-
<!-- microi-progressive:chunk id=workspace-conventions-036 sha256=
|
|
188
|
+
<!-- microi-progressive:chunk id=workspace-conventions-036 sha256=b91c431950e4c5d268d40c6372e5780b2c7e8b4ca4339871085cda91b7d932bc -->
|
|
189
189
|
## MCP 可调用性诊断补充
|
|
190
190
|
|
|
191
191
|
当用户反馈“Codex/VS Code 设置中能看到 MCP,但当前 AI 会话不能调用对应工具”时,不能只回答“当前会话没有注入”。必须按层排查:
|
|
@@ -199,7 +199,7 @@ AI 只要修改了 `Microi.Server/**` 下会影响 `Microi.net.Api` 运行结果
|
|
|
199
199
|
7. Microi.Agent 生成 MCP 配置时应清理旧的中文/横杠 Microi MCP key,只保留 `microi_<osClient>` 或 `microi_<osClient>_<host>` 形式,避免不同 AI 客户端因 namespace 不稳定而无法注入工具。
|
|
200
200
|
|
|
201
201
|
<!-- /microi-progressive:chunk -->
|
|
202
|
-
<!-- microi-progressive:chunk id=workspace-conventions-037 sha256=
|
|
202
|
+
<!-- microi-progressive:chunk id=workspace-conventions-037 sha256=287a898ffb90322af12deea949c4bcf43b9ac9a355419561898cde8de2b99ac8 -->
|
|
203
203
|
## Windows MCP 控制台闪窗复盘
|
|
204
204
|
|
|
205
205
|
当用户反馈“打开 Microi.Agent、添加服务器或初始化 MCP 后连续弹出并立即关闭多个 cmd 窗口”时,应按进程风暴排查,不能只给已有 `spawn` 补 `windowsHide`:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=workspace-conventions-038 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=workspace-conventions-038 sha256=57098466d31d0636bf330fde545daff8cb8e4116ac6ea2efff8abc729fdcef77 -->
|
|
6
6
|
## CLI 与 IDE 插件错版共存约定
|
|
7
7
|
|
|
8
8
|
- CLI 与 IDE 插件共用配置、Token、MCP、Skills 或生成文件时,所有持久化协议必须按“新字段可选、旧字段保留、未知字段不删除”设计。不得将 JSON 解析到旧类型后只序列化已知字段。
|