@microi.net/cli 5.8.1 → 5.8.3
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 +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +99 -99
- package/scripts/microi-skills.meta.json +218 -218
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +40 -40
- package/skills/ai-engine/references/self-hosted-digital-human.md +14 -0
- package/skills/app-store/SKILL.md +71 -0
- package/skills/dos-orm/SKILL.md +1 -0
- package/skills/job-engine/SKILL.md +4 -0
- package/skills/microi-client-frontend/SKILL.md +4 -1
- package/skills/microi-codex/SKILL.md +4 -1
- package/skills/microi-deployment/SKILL.md +10 -8
- package/skills/microi-form-engine/SKILL.md +5 -3
- package/skills/microi-microservice/SKILL.md +3 -0
- package/skills/module-engine/SKILL.md +5 -0
- package/skills/playwright-e2e/SKILL.md +2 -3
- package/skills/ui-design/references/motion-and-media.md +7 -0
- package/skills/unity-integration/SKILL.md +16 -0
- package/skills/v8-crud-api/SKILL.md +2 -1
- package/skills/v8-file-upload/SKILL.md +4 -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 +24 -1
- package/skills/v8-saas-multi-tenant/SKILL.md +43 -0
- package/skills/v8-security/SKILL.md +4 -0
- package/skills/v8-utilities/SKILL.md +8 -0
- package/skills/v8-workflow/SKILL.md +2 -1
- package/skills/workspace-conventions/SKILL.md +3 -3
- 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 +7 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-07T02:28:38.552Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -169,11 +169,11 @@
|
|
|
169
169
|
]
|
|
170
170
|
},
|
|
171
171
|
"microi-client-frontend": {
|
|
172
|
-
"originalSha256": "
|
|
173
|
-
"originalLines":
|
|
172
|
+
"originalSha256": "da358a1c173fde84e12eee0d4e3f21e720c544da108b1d6f765818b49ce716f5",
|
|
173
|
+
"originalLines": 703,
|
|
174
174
|
"prefixSha256": "26b1774955c0d963f8debc78d6cd1caafb4ae9e0e14685b0c1541897b28ad354",
|
|
175
175
|
"prefixBytes": 1348,
|
|
176
|
-
"entryLines":
|
|
176
|
+
"entryLines": 245,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
@@ -211,8 +211,8 @@
|
|
|
211
211
|
"id": "microi-client-frontend-004",
|
|
212
212
|
"ordinal": 7,
|
|
213
213
|
"destination": "microi-client-frontend/SKILL.md",
|
|
214
|
-
"sha256": "
|
|
215
|
-
"lines":
|
|
214
|
+
"sha256": "ab17865c6032884ccd896a0eb62387cf7f89edcf337c024f2251563f3bd0e4d9",
|
|
215
|
+
"lines": 43,
|
|
216
216
|
"heading": "7. 验证建议"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
@@ -1344,11 +1344,11 @@
|
|
|
1344
1344
|
]
|
|
1345
1345
|
},
|
|
1346
1346
|
"playwright-e2e": {
|
|
1347
|
-
"originalSha256": "
|
|
1348
|
-
"originalLines":
|
|
1347
|
+
"originalSha256": "dceed63143b54db9f7829604d37aa0da0ab783182649801d8469952209ea4610",
|
|
1348
|
+
"originalLines": 805,
|
|
1349
1349
|
"prefixSha256": "793ea4c951605d99e58c9f53eeff2dbee39bcaf3219a5a447a275ed84163949d",
|
|
1350
1350
|
"prefixBytes": 1761,
|
|
1351
|
-
"entryLines":
|
|
1351
|
+
"entryLines": 197,
|
|
1352
1352
|
"chunks": [
|
|
1353
1353
|
{
|
|
1354
1354
|
"id": "playwright-e2e-000",
|
|
@@ -1410,8 +1410,8 @@
|
|
|
1410
1410
|
"id": "playwright-e2e-007",
|
|
1411
1411
|
"ordinal": 8,
|
|
1412
1412
|
"destination": "playwright-e2e/SKILL.md",
|
|
1413
|
-
"sha256": "
|
|
1414
|
-
"lines":
|
|
1413
|
+
"sha256": "6d285a719a85ce3f2c887b292c08cc69d9632964c341269f0f61bb2fdc403fac",
|
|
1414
|
+
"lines": 41,
|
|
1415
1415
|
"heading": "服务自启动纪律(必做)"
|
|
1416
1416
|
},
|
|
1417
1417
|
{
|
|
@@ -1924,11 +1924,11 @@
|
|
|
1924
1924
|
]
|
|
1925
1925
|
},
|
|
1926
1926
|
"v8-crud-api": {
|
|
1927
|
-
"originalSha256": "
|
|
1928
|
-
"originalLines":
|
|
1927
|
+
"originalSha256": "487ffd0fb3301fa4d47e8879d3f9304d5b06797b219b5acca19a7680c145ee77",
|
|
1928
|
+
"originalLines": 404,
|
|
1929
1929
|
"prefixSha256": "629f1a8bfef47b39f4b1b143eccecc20d79dab1cd1ffd988dceb5b9eb61c2078",
|
|
1930
1930
|
"prefixBytes": 766,
|
|
1931
|
-
"entryLines":
|
|
1931
|
+
"entryLines": 179,
|
|
1932
1932
|
"chunks": [
|
|
1933
1933
|
{
|
|
1934
1934
|
"id": "v8-crud-api-000",
|
|
@@ -1942,8 +1942,8 @@
|
|
|
1942
1942
|
"id": "v8-crud-api-001",
|
|
1943
1943
|
"ordinal": 1,
|
|
1944
1944
|
"destination": "v8-crud-api/SKILL.md",
|
|
1945
|
-
"sha256": "
|
|
1946
|
-
"lines":
|
|
1945
|
+
"sha256": "d0bed55dcaa08fd84319107269643dd5aba5aadecf4f394c8ac55d80ab959677",
|
|
1946
|
+
"lines": 15,
|
|
1947
1947
|
"heading": "核心规则"
|
|
1948
1948
|
},
|
|
1949
1949
|
{
|
|
@@ -2221,18 +2221,18 @@
|
|
|
2221
2221
|
]
|
|
2222
2222
|
},
|
|
2223
2223
|
"v8-file-upload": {
|
|
2224
|
-
"originalSha256": "
|
|
2225
|
-
"originalLines":
|
|
2226
|
-
"prefixSha256": "
|
|
2227
|
-
"prefixBytes":
|
|
2224
|
+
"originalSha256": "5b8d223cd64bf4dcd358b9d877776f8bb3b6df23e2545990455f037d4fbd185e",
|
|
2225
|
+
"originalLines": 667,
|
|
2226
|
+
"prefixSha256": "01a5357a6c11c20c56f70178e843dd0d2aac92e796042c0bc582e72c967f1ad1",
|
|
2227
|
+
"prefixBytes": 16221,
|
|
2228
2228
|
"entryLines": 285,
|
|
2229
2229
|
"chunks": [
|
|
2230
2230
|
{
|
|
2231
2231
|
"id": "v8-file-upload-000",
|
|
2232
2232
|
"ordinal": 0,
|
|
2233
2233
|
"destination": "v8-file-upload/SKILL.md",
|
|
2234
|
-
"sha256": "
|
|
2235
|
-
"lines":
|
|
2234
|
+
"sha256": "d134ef9d7df6a00a6f11149a7f73595d96d4feb0ffa159e520136c72de7f495a",
|
|
2235
|
+
"lines": 20,
|
|
2236
2236
|
"heading": "核心 API"
|
|
2237
2237
|
},
|
|
2238
2238
|
{
|
|
@@ -2271,8 +2271,8 @@
|
|
|
2271
2271
|
"id": "v8-file-upload-005",
|
|
2272
2272
|
"ordinal": 3,
|
|
2273
2273
|
"destination": "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md",
|
|
2274
|
-
"sha256": "
|
|
2275
|
-
"lines":
|
|
2274
|
+
"sha256": "0b4d57f32bfe913c3a2567d2e2a86f4d5ba505d60c4348ad472c117774bbfc31",
|
|
2275
|
+
"lines": 173,
|
|
2276
2276
|
"heading": "公有桶 vs 私有桶"
|
|
2277
2277
|
},
|
|
2278
2278
|
{
|
|
@@ -2786,11 +2786,11 @@
|
|
|
2786
2786
|
]
|
|
2787
2787
|
},
|
|
2788
2788
|
"v8-security": {
|
|
2789
|
-
"originalSha256": "
|
|
2790
|
-
"originalLines":
|
|
2791
|
-
"prefixSha256": "
|
|
2792
|
-
"prefixBytes":
|
|
2793
|
-
"entryLines":
|
|
2789
|
+
"originalSha256": "56c0130a5f689a41406c3de6d2cf1cfadc997dfece95927cd44e3ec0ac2fc659",
|
|
2790
|
+
"originalLines": 527,
|
|
2791
|
+
"prefixSha256": "01b82afc702d828b5274b475e5c1a5afe68890a7d4369d520be2a14117499065",
|
|
2792
|
+
"prefixBytes": 3380,
|
|
2793
|
+
"entryLines": 211,
|
|
2794
2794
|
"chunks": [
|
|
2795
2795
|
{
|
|
2796
2796
|
"id": "v8-security-000",
|
|
@@ -3061,11 +3061,11 @@
|
|
|
3061
3061
|
]
|
|
3062
3062
|
},
|
|
3063
3063
|
"v8-workflow": {
|
|
3064
|
-
"originalSha256": "
|
|
3065
|
-
"originalLines":
|
|
3064
|
+
"originalSha256": "81a13776806b353c93afc0e741bf2778f53fec20c623953d701833b961bc27e7",
|
|
3065
|
+
"originalLines": 386,
|
|
3066
3066
|
"prefixSha256": "3c58be3abfede5431711bdd2cfd703c5a6d5cf91facf1f973dd8aa72e65d9f9d",
|
|
3067
3067
|
"prefixBytes": 4432,
|
|
3068
|
-
"entryLines":
|
|
3068
|
+
"entryLines": 253,
|
|
3069
3069
|
"chunks": [
|
|
3070
3070
|
{
|
|
3071
3071
|
"id": "v8-workflow-000",
|
|
@@ -3079,8 +3079,8 @@
|
|
|
3079
3079
|
"id": "v8-workflow-001",
|
|
3080
3080
|
"ordinal": 1,
|
|
3081
3081
|
"destination": "v8-workflow/SKILL.md",
|
|
3082
|
-
"sha256": "
|
|
3083
|
-
"lines":
|
|
3082
|
+
"sha256": "935b29e9f3afde02aa78a77468b48afd204facb3b1dafaf9d23dc3bd69832717",
|
|
3083
|
+
"lines": 46,
|
|
3084
3084
|
"heading": "工作流物理表"
|
|
3085
3085
|
},
|
|
3086
3086
|
{
|
|
@@ -3196,8 +3196,8 @@
|
|
|
3196
3196
|
]
|
|
3197
3197
|
},
|
|
3198
3198
|
"workspace-conventions": {
|
|
3199
|
-
"originalSha256": "
|
|
3200
|
-
"originalLines":
|
|
3199
|
+
"originalSha256": "3dc2745bfe3114e70dd23984e5851aaccfa079517dbdc78e6f5f6074a874ad4a",
|
|
3200
|
+
"originalLines": 605,
|
|
3201
3201
|
"prefixSha256": "b2c13c455cf052093f78881170151d3fb56c25cda2f837c9f6abc0c29e67fd30",
|
|
3202
3202
|
"prefixBytes": 310,
|
|
3203
3203
|
"entryLines": 271,
|
|
@@ -3230,7 +3230,7 @@
|
|
|
3230
3230
|
"id": "workspace-conventions-003",
|
|
3231
3231
|
"ordinal": 3,
|
|
3232
3232
|
"destination": "workspace-conventions/SKILL.md",
|
|
3233
|
-
"sha256": "
|
|
3233
|
+
"sha256": "66922955adb5ff6198efefd6d4d8d8f6525ef7559663ea034e86e1e45f89eb9f",
|
|
3234
3234
|
"lines": 19,
|
|
3235
3235
|
"heading": "本地资源与 OOM 保护规范(强制)"
|
|
3236
3236
|
},
|
|
@@ -3398,7 +3398,7 @@
|
|
|
3398
3398
|
"id": "workspace-conventions-024",
|
|
3399
3399
|
"ordinal": 24,
|
|
3400
3400
|
"destination": "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md",
|
|
3401
|
-
"sha256": "
|
|
3401
|
+
"sha256": "92c453b5fafa36d68098b3da5817d0de260a3cf454d8cae63f71a3f65e57bbdc",
|
|
3402
3402
|
"lines": 17,
|
|
3403
3403
|
"heading": "Microi.net.Api 本地启动约定"
|
|
3404
3404
|
},
|
|
@@ -3406,8 +3406,8 @@
|
|
|
3406
3406
|
"id": "workspace-conventions-025",
|
|
3407
3407
|
"ordinal": 25,
|
|
3408
3408
|
"destination": "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md",
|
|
3409
|
-
"sha256": "
|
|
3410
|
-
"lines":
|
|
3409
|
+
"sha256": "4cf40c4ca771f7e04b80279646323a816378b98669f562ff8f4c647d5bf837ca",
|
|
3410
|
+
"lines": 32,
|
|
3411
3411
|
"heading": "多 AI 对话共享本地服务与发布互斥(强制)"
|
|
3412
3412
|
},
|
|
3413
3413
|
{
|
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
Windows 本机参考方案可采用 CPU 运行轻量 Qwen 与中文 TTS、CUDA 运行口型模型,并通过 WebRTC 向浏览器或 OBS 输出。若实现先生成片段再播报,应如实标注缓冲策略,不应描述成低延迟全双工数字人。输出帧率、模型生成帧率、首音延迟和总等待时间必须分开报告。
|
|
10
10
|
|
|
11
|
+
照片驱动或视频换脸须先区分目标:只换脸保留驱动视频的身体和衣服;照片人物连同衣服动作需把源照片的人像区域随视频姿态形变。轻量关键点/二维形变不能凭空生成照片未拍到的部位,也不能保证大转身、遮挡或手部交叉的真实感。8 GB 显存设备不能因某模型的单个模块可运行,就推断完整生成链能实时运行;先核对权重许可与实测峰值,再承诺交互帧率。
|
|
12
|
+
|
|
13
|
+
商业交付若要求零模型授权费,分别核查代码、检测器、关键点模型、生成权重和样例素材。InsightFace 代码许可与其预训练模型许可不同,不能因某个项目整体标记 MIT 就直接打包非商用检测权重。LivePortrait 可评估以 MediaPipe 替代 InsightFace 检测,但还须固定官方权重 revision 与 SHA-256,实测输出并保留其 MIT 声明。部分 FasterLivePortrait ONNX 权重能加载,却在普通 ONNX Runtime 的 5D `GridSample` 实际推理时报错;“加载成功”不是模型可运行的证据,需验证完整生成帧。
|
|
14
|
+
|
|
15
|
+
换脸模型选型要追踪身份向量的来源:FaceFusion 官方清单标记 GHOST 为 Apache-2.0、CrossFace 为 OpenRAIL-M,但其当前人脸识别代码仍由标记非商用的 ArcFace 产生身份向量;INSwapper 本身也标记非商用。不能只检查最后一段 GHOST 权重就宣称整条链可零授权费商用。参见 https://docs.facefusion.io/introduction/licenses 与 https://github.com/facefusion/facefusion/blob/master/facefusion/face_recognizer.py 。本机曾试用神经头像输出做只换脸合成,24 帧约 6.66 fps,但胡须、头发和下颌接缝使身份不一致;该原型未发布,不计入交付。
|
|
16
|
+
|
|
17
|
+
当前 `digital-human-live` v0.4.2 本机路线使用 FasterLivePortrait 的 ONNX 预处理、MediaPipe 检测和 LivePortrait 官方 PyTorch 生成模块,避开 InsightFace 检测权重与 ONNX 5D `GridSample` 限制。源码保留两方 MIT 文本,权重由 `runtime/portrait-model-lock.json` 固定 revision、大小和 SHA-256,下载后仅放入 `.local/portrait`。RTX 2080 SUPER 上的 W/G 生成模块用 CUDA 半精度自动混合精度后,24 帧完整 HTTP 任务实测 6.85 fps、480 × 640;UI 和文档应写成“神经网络头像预览/短片生成”,不得仅凭输出 MP4 的 12 fps 编码帧率承诺流畅实时直播。它保留源照片的衣服和背景,但不做全身服饰动作;原二维换脸与服饰形变应标为实验性。
|
|
18
|
+
|
|
11
19
|
## 资源与模型
|
|
12
20
|
|
|
13
21
|
- 检查当前显卡、可用显存、内存、磁盘、已有进程和端口。不得为了腾显存结束未知进程。使用应用自己的 Python 环境,不修改共享环境。
|
|
@@ -15,6 +23,7 @@ Windows 本机参考方案可采用 CPU 运行轻量 Qwen 与中文 TTS、CUDA
|
|
|
15
23
|
- 大文件固定官方仓库 revision、预期大小和 SHA-256;分段下载校验 Content-Range,支持原任务续传,下载完成后再加载。不把失败下载或仅安装依赖计为推理通过。
|
|
16
24
|
- 模型运行使用 `local_files_only` 和离线模式,无付费回退。运行时清除本进程继承的 HTTP/HTTPS/ALL proxy,避免本地代理成为外网旁路;随后限制外连。安装下载是独立过程,不全局修改用户代理。
|
|
17
25
|
- 权重许可、代码许可、人像/声音的使用权分别核对。研究测试素材仅用于本地研究验证,不放进公开应用包或默认当商业主播素材。
|
|
26
|
+
- 源人像与驱动视频需获得相应使用权,输出应标记为 AI 合成。官网截图若使用合成人像与虚拟摄像头,应写清素材来源和实测边界;不得暗示真实人物已授权或外部平台已开播。
|
|
18
27
|
- 低端设备可以先合成片段、缓冲后播放;必须把该策略写入 UI 和文档。不能用静态图循环、音量驱动嘴型或测试桩冒充神经网络口型模型已经运行。
|
|
19
28
|
|
|
20
29
|
## 本机配对与吾码会话
|
|
@@ -22,8 +31,11 @@ Windows 本机参考方案可采用 CPU 运行轻量 Qwen 与中文 TTS、CUDA
|
|
|
22
31
|
- DiyToken 仍是吾码身份与权限入口。数据请求使用平台 SDK、当前租户和真实模块权限;不要把 DiyToken 发往本机模型或其它第三方。
|
|
23
32
|
- 若旧节点的 MCP 模块更新白名单不支持 ModuleEngineKey,不能以接口成功代替字段回读。可通过已有平台授权菜单接口的窄字段投影解析当前租户真实菜单 Id,携带 `_SysMenuId` 调用 FormEngine;不能写死发行租户 Id、放宽表权限或绕过标准 MCP 写入。
|
|
24
33
|
- 本机运行时只监听回环地址,另用随机配对码换取有期限、绑定 Origin 的本机会话。配对码、内部模型密钥和访问会话不出现在 URL、云端业务列或日志中。
|
|
34
|
+
- 同源浏览器的 JSON 配对 POST 可以带 `Origin`,后续同源 GET 可能省略该头;网关校验缺失头时应以已验证的回环 Host 和 scheme 还原同源,显式跨域 `Origin` 仍须与配对来源完全一致。OBS 浏览器来源应回读 `peers>0` 和有画面、有音轨的实际录像,不能只看配对按钮被点击。
|
|
25
35
|
- CORS 使用精确 Origin 列表,同时校验 Host;需要浏览器本地网络权限时明确给出诊断,不以通配 CORS 或绑定公网地址规避限制。
|
|
26
36
|
- 前端不开放任意 Endpoint、文件路径、命令、RTMP shell 参数或 Python 代码。模型输出只是待播报文本,不能执行 V8、SQL 或操作业务数据。
|
|
37
|
+
- 本机媒体任务可由当前租户 Managed 接口引擎先验证 DiyToken、菜单/表读取权限、模式与稳定 requestId;接口仅返回本机执行契约,媒体字节只送往已配对的回环服务。租户 Hook 用 CreateIfMissing 保留扩展点。不能把远端接口返回成功当作本机视频已生成。
|
|
38
|
+
- 手机摄像头接入优先让手机 HTTPS 页面与电脑浏览器在同一局域网经 WebRTC 直传媒体,再由电脑浏览器访问回环服务;不要把回环地址绑定公网,也不要把摄像头字节送到 V8。MCP 接口引擎可以用同一登录用户、租户和真实菜单权限交换短期 SDP,房间码绑定用户且限时,单条 SDP 长度受限,相同 SDP 重试幂等、不同 SDP 拒绝接管。SDP 控制信息经过吾码服务器,应如实披露;无 TURN/STUN 版本只承诺局域网可达,不能承诺跨网或被客户端隔离的 Wi-Fi 可用。
|
|
27
39
|
- 请求使用稳定 requestId;相同请求返回原任务,参数改变则拒绝。队列有界、停止可见、失败可诊断;状态与文件回读一致后才标为完成。
|
|
28
40
|
|
|
29
41
|
## 源码交付
|
|
@@ -41,5 +53,7 @@ Windows 本机参考方案可采用 CPU 运行轻量 Qwen 与中文 TTS、CUDA
|
|
|
41
53
|
4. 测试错误配对码、未授权请求、非白名单 Origin、请求重放冲突、队列上限、停止、模型缺失与外网拒绝。安全测试桩与真实模型验收分别记录。
|
|
42
54
|
5. 桌面/窄屏/深色界面、空态、失败态、素材 CRUD、菜单生命周期与输出页实际操作通过。
|
|
43
55
|
6. OBS 捕获和外部平台开播独立验收。OBS“媒体来源”循环播放已生成 MP4,只证明片段可被 OBS 录制;浏览器来源需要确认配对面板消失、服务端 WebRTC `peers` 大于 0,且 OBS 录制回读有真实音画,才能判为实时接入。未提供直播账号、推流地址或密钥时完成本机输出,明确外部直播未验证,不请求无关账号,不伪造“已开播”。
|
|
56
|
+
7. 换脸/照片动作另外验收:实际输入照片和视频,核对生成视频帧数、时长、人物和服装区域变化;分别验证神经网络头像、实验性二维只换脸和实验性二维服饰动作的实际模型路径与质量。浏览器摄像头或虚拟摄像头需检查帧回传和所选模式确实传入本机运行时,不把 4K 页面截图或视频编码帧率说成 4K 实时推理。
|
|
57
|
+
8. 手机链路先在两个独立浏览器会话检查信令与 WebRTC `inbound-rtp` 的解码帧,再检查电脑回环推理画布与停止释放;进一步用实体手机同网实测摄像头授权、屏幕锁定、断线重连、长时帧率和 OBS 捕获。浏览器模拟的窄屏截图不能替代实体手机验收。
|
|
44
58
|
|
|
45
59
|
验收报告保留应用版本、模型 revision、真实设备、内存/显存峰值、生成帧率、等待时间和媒体摘要,不能只写“接口成功”。
|
|
@@ -37,6 +37,10 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
37
37
|
- 本地包文件、生成器成功、单元测试通过、返回 TaskId 或 HTTP 200 都不能代替官方主数据库与商城回读。`.resource-sync-base` 只能在官网发布后逐项哈希一致时由同步器推进,不得与本地候选一起手工修改。若官方身份、MCP 登录或发布门禁失效,必须保留准确的未发布边界并修复链路;不得把本地 JSON 宣称为“其它吾码用户已经可以安装”。
|
|
38
38
|
- 应用包不得携带真实地图 Key、Token、连接串或其它租户秘密。浏览器供应商 Key 等配置只交付字段/设置模板和安全读取能力,实际值由每个目标租户在安装后自行填写。
|
|
39
39
|
|
|
40
|
+
### 后台原生规则的两种可信来源证明
|
|
41
|
+
|
|
42
|
+
普通租户的编译证明默认 `TenantInstallation`,保留真实 Installed 回执及旧摘要。官方同租户发布源禁止安装自己,只能由后端发行组合明确固定 `OfficialPublishedSnapshot`:`InstallRecordId` 绑定 `mic_data_version.Id`,原始 `Data` 的UTF-8 SHA-256另固定于编译回执并参与独立审批摘要。该类别与快照摘要不从Param或自由表字段选择、不新增表字段、不伪造Installed。受信官方身份、当前Published/审批有效指针、Verified包hash/size/HDFS、不可变快照、V3 Completed源码hash及实际DLL依赖须全部匹配;当前状态变化、软删或主库不可用下次调用立即拒绝,旧历史存在不足以授权。跨租户仍拒绝,结构发布不等于后端安装或代码审批。审批表纳入通用强制管理员清单,普通用户即使误授表/菜单权限仍不得改授权状态;V8Limit和ReadPrimary不是写权限。
|
|
43
|
+
|
|
40
44
|
## 包内容
|
|
41
45
|
|
|
42
46
|
### 仅共享编译运行产物
|
|
@@ -46,6 +50,60 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
46
50
|
- 现有 `microi_run_engine` 的 `params` 是动态对象,可传此开关,无需增加工具参数。对 `ai_app_publish_store` 的 `Action=InspectResourceSnapshot` 和 `Action=Publish` 都使用同一组冻结模式、版本、资产及提交证明,后者将前者返回的 `ResourceSnapshotHash` 作为 `ExpectedResourceSnapshotHash` 传入。MCP 的 `confirmExecution` 仍必须匹配引擎 Key。
|
|
47
51
|
- 下载真实发布包后,断言 `DDLStatements/PhysicalColumns/DiyTables/DiyFields/DataSets/SysMenus/WfFlowDesigns/WfNodes/WfLines/SysApiEngines/ScheduleJobs` 十一项数组全部为零,`SourceFiles/BuildAssets` 为零,`SourceZip/BuildZip` 为空,唯一运行交付为 `SharedPublicRuntime`。源码分发、服务端业务迁移和共享运行入口是独立事实,不能将共享公有编译产物当成目标租户已有业务接口或权限。
|
|
48
52
|
|
|
53
|
+
|
|
54
|
+
#发布器 `v2.1.2` 修复受管接口更新后的重复发布摘要漂移:源码、`Managed` 策略和所有权均与已发布包相同时,保留该包的有效基线;真正的源码变更仍推进基线并保留历史兼容摘要。缺失或无效基线从实际旧源码重新建立,`CreateIfMissing` 租户 Hook 保持原策略。`Inspect` 与 `Publish` 必须使用相同的冻结 `PreparedAssets` 和资源选择,并在发布后立即重放原请求,独立核对包 SHA-256、字节数和不可变快照 Id;重放被 CAS 拒绝仍算失败,不能仅以首次成功声称幂等。
|
|
55
|
+
|
|
56
|
+
## 共享表的稀疏字段选集
|
|
57
|
+
|
|
58
|
+
应用只扩展已有共享表的少数字段时,标准导出器和 `ai_app_publish_store` 接收
|
|
59
|
+
`SparseTableSelections: [{ TableId, FieldIds }]`。Id 必须来自当前租户权威元数据,
|
|
60
|
+
最多 32 张表、每表 512 个非重复字段;不接受调用方传表正文、DDL 或布局覆盖。
|
|
61
|
+
同一表不能同时进入完整 `TableIds` 与稀疏选集,安装基础设施表不能被裁剪。
|
|
62
|
+
|
|
63
|
+
导出只保留表 `Id/Name`、所选字段和对应物理列;不携带共享 `Tabs/Column`、
|
|
64
|
+
其它字段、建表或索引。数据只允许 `InsertIfMissing`,行与冲突字段必须在选集中。
|
|
65
|
+
没有数据行的共享表自动生成标准零行 `DataSet`,复用安装前置检查:缺物理表或
|
|
66
|
+
共享表元数据时,在资源写入前失败;不是自动安装依赖,也不是空库建表契约。
|
|
67
|
+
|
|
68
|
+
旧导入器会拒绝受保护共享表的零行 DataSet。须先升级包含
|
|
69
|
+
`EMPTY_SHARED_TABLE_PREREQUISITE_V1` 的商城安装器,再安装混合应用。
|
|
70
|
+
新分支仅接受严格零行形状,不给受保护表业务数据增加写权限。
|
|
71
|
+
普通 DataSet 仍要求完整建表资源,不能借稀疏分支绕过结构闭包。
|
|
72
|
+
|
|
73
|
+
导出器 `v1.3.8` 修复稀疏默认数据的序列化形状:未声明实际父绑定时,
|
|
74
|
+
必须完全省略 `ParentBinding` 键,不能用 `undefined` 让宿主转成 `null`;
|
|
75
|
+
普通配置子表的显式绑定保持原契约,稀疏导入安全门不放宽。
|
|
76
|
+
仅保留稀疏选集中字段在源记录上真实存在的空字符串;NULL、缺失字段、
|
|
77
|
+
未选字段不推断默认值,跨租户与隐藏元数据仍排除,普通全表导出保持旧行为。
|
|
78
|
+
数值 `0` 原本就保留;秘密状态必须经已有可信设置入口规范源数据,
|
|
79
|
+
不能由导出参数或包正文合成。升级后重新 Inspect 并冻结新摘要,旧快照不可改写。
|
|
80
|
+
|
|
81
|
+
安装器 `v3.0.5` 同时执行 `SPARSE_TABLE_IMPORT_PREFLIGHT_V2`:直接传包和下载包均在进度持久化、物理兼容自举及资源写入前核验原始稀疏正文和目标。严格零行依赖不能由同包 `CREATE` 自行满足;带默认数据的稀疏表也必须已有实体表及唯一未删除的表单元数据。MySQL/SQL Server 查询要求 `BASE TABLE`,Oracle 使用 `USER_TABLES`。共享表只接受 `Id/Name`、精确字段与物理列及 `InsertIfMissing` 数据,不接受布局、其它字段、字段退役或该表 DDL;非空数据集可保留标准导出的 `TableDescription`,该描述不授权更新共享表布局。
|
|
82
|
+
|
|
83
|
+
`DECLARATIVE_PACKAGE_DDL_PREFLIGHT_V1` 在同一写前门禁逐字符识别引号和注释,按实际 SQL 目标核对声明表名,只接受受支持的 `CREATE TABLE`、`CREATE INDEX` 与列/索引 `ALTER TABLE`。DML、动态执行、多语句、未知声明、MySQL/MariaDB 可执行注释及提示一律拒绝。字符串内部的分号和普通注释可保留;含反斜杠的引号内容因 SQL mode/方言歧义拒绝,改用 SQL 标准重复引号。现有官方包 DDL 已做字节绑定的解析回归;这不等于所有数据库版本上的实际 SQL 执行验收,未支持的方言模板须先补明确语法和回归,不能降级原样执行。
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
Web 应用可用 `RuntimeAssetsOnly=false + IncludeSource=false` 同时携带
|
|
87
|
+
`SharedPublicRuntime` 和声明式资源,六张标准应用基础设施表仍按权威闭包导出。
|
|
88
|
+
Inspect 和 Publish 使用完全相同的选择、`CommittedProof` 及运行清单,Publish
|
|
89
|
+
再传 `ExpectedResourceSnapshotHash`;旧稀疏选集必须显式刷新,不能退化为整表。
|
|
90
|
+
`RuntimeAssetsOnly=true` 继续拒绝任何资源选集。
|
|
91
|
+
|
|
92
|
+
现有 `microi_run_engine.params` 为通用对象,已能原样透传此选集,仍须
|
|
93
|
+
`confirmExecution`。这不代表线上导出器已升级,也不能以私有源码含 Manifest
|
|
94
|
+
代替正式包资源。接口默认禁用须另按实时能力配置并独立回读;当前
|
|
95
|
+
`microi_generate_system` 的引擎 upsert 不会透传 `IsEnable/StopHttp`。
|
|
96
|
+
|
|
97
|
+
后台规则审批表 `mci_runtime_installation` 的结构可由责任包安装,但审批业务行
|
|
98
|
+
禁止经导出/导入 DataSets 种入、覆盖或恢复;只有严格零行依赖允许通过。
|
|
99
|
+
可信程序集注册与管理员审批是独立动作,不能以商城发布或包安装代替。
|
|
100
|
+
|
|
101
|
+
标准官方控制面现将 `export-package.js` 纳入固定单资源白名单,沿用
|
|
102
|
+
`Resources[{Name,Content,ExpectedRemoteSha256}]`、可信官方授权、同事务行锁及回读。
|
|
103
|
+
先 CAS 升级控制面,再 CAS 发布导出/导入/发布器,最后从完整母版发行归属商城包;
|
|
104
|
+
源码、包正文、不可变快照和公开下载都须独立验证,不能只更新本地镜像。
|
|
105
|
+
|
|
106
|
+
|
|
49
107
|
### 物理索引闭包
|
|
50
108
|
|
|
51
109
|
标准导出器必须同时导出责任表的真实唯一索引和普通复合索引,按列顺序生成独立
|
|
@@ -78,6 +136,16 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
78
136
|
`PrivateSourcePath` 的已提交活动根选择当前私有行(`VersionId` 为空、`StorageScope=Private`、
|
|
79
137
|
非目录且未删除),禁止把历史版本、未提交源、上传会话或 `upload/v*` 编译文件混入。
|
|
80
138
|
已完成原子同步后的活动根可以仍在 staged 目录,不能只按目录名猜测提交状态。
|
|
139
|
+
安装器必须把包内源码复制到当前租户私有桶中的清单摘要根
|
|
140
|
+
`ai-app-source-staged/{AppId}/store-{SourceManifestHash}`,对象地址精确等于该根加原始
|
|
141
|
+
`FilePath`,保留大小写、中文与空格。时间戳上传地址不能作为活动源码;旧对象必须保留。
|
|
142
|
+
使用既有 `CopyObject/ObjectExist/GetObjectSha256` 校验复制目标的原始字节与长度后再更新
|
|
143
|
+
当前元数据。同版本重装也修正旧路径;复制响应未知先回读目标,目标不同或能力缺失失败
|
|
144
|
+
关闭。复制及当前游标的对象验签计入分片预算,持久前缀只复用同一包摘要根的精确元数据。
|
|
145
|
+
ZIP 导出前后必须以原始 `FilePath/ContentHash/Size` 的完整当前清单重新核对 `store-` 根
|
|
146
|
+
摘要;分片切换后的部分旧根、清单漂移和摘要根格式错误均拒绝。去掉 `source/` 的归档名
|
|
147
|
+
不能代替安装根摘要的原始路径。
|
|
148
|
+
安装成功后仍须下载并核验原生源码 ZIP,不能削弱其权限、租户、路径或字节校验。
|
|
81
149
|
缺失基线不回退历史;分页不完整、重复路径(含大小写)、对象后缀与归档路径不一致、
|
|
82
150
|
大小或原始字节 SHA 漂移均停止。使用当前租户可信私有字节与已有 ZIP 原子,优先对同一
|
|
83
151
|
返回归档调用可信 `ExtractZip`(兼容 `ReadZip`),完整核对每条路径、大小、原始字节 SHA、
|
|
@@ -92,6 +160,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
92
160
|
- 完整制包的现代 `.mjs/.cjs/.mts/.cts` 模块与既有脚本按 UTF-8 文本读取,优先调用当前租户私有文本原子且必须 `Code=1`。旧节点缺少原子或读取失败时保留既有审计 URL 回退,票据异常仍停止;不得以性能为由绕审计。二进制不转文本,最终模型逐项验证实际字节、大小与冻结 SHA。超时先查原执行链与失败原因,不并发重入。
|
|
93
161
|
- 独立源码 ZIP 必须在全新目录安装依赖并执行应用声明的全部责任测试,再核对类型与生产构建;仅构建通过不能证明测试闭包。默认测试不得依赖发布者临时树、兄弟应用或平台仓库 marker。历史兼容所需纯模块应从已发布真实源码按原字节随 owned fixtures 交付,记录版本、原路径、大小和完整 SHA;保留原业务断言,不构造替代历史行为。中央多应用契约检查继续由中央 Full 入口执行,不能重新成为独立下载源码的外部依赖。
|
|
94
162
|
- 安装/升级脚本:幂等、可恢复、可回读;不包含租户密钥、Token、连接串或 License keys。
|
|
163
|
+
- 历史微服务的版本目录正确而 root/latest 缺失时,使用后端已安装投影恢复能力,不重发原安装或补写 V3 身份。恢复必须从当前租户主库读取已发布应用、唯一同版本 LegacyUnverified 历史行、启用文件服务与全部公开文件,逐项核对规范路径、大小和 SHA-256;存在安装任务在途或 V3 指针即停止。复用应用发布租约,每次副作用前后验租并复读完整权威投影,先验全部不可变源,再复制并完整回读目标;同版本漂移、失租和歧义不能报告完成。无条件对象复制可能迟到,须持续从已提交元数据和真实对象收敛,不能声称永久原子切换。商城无新增声明资源时仍需说明原安装包与新后端能力的关系,并分别保留后端镜像、源码 ZIP、版本/固定/API 字节、真实页面操作和业务保全的验收证据。沿用状态、应用上下文和原生只读表工具核对原任务和完整清单,缺少线上证据仍属未完成。
|
|
95
164
|
- 迁移采用“先扩展、后迁移、再收缩”,支持新旧节点短暂并存。
|
|
96
165
|
|
|
97
166
|
制包读取全局 v3 运行对象时,租户私有 HDFS 代理继续保持租户目录边界。发布器仅从当前
|
|
@@ -176,6 +245,8 @@ staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本
|
|
|
176
245
|
- 完整 SaaS、系统账号、系统设置等官方包继续按其独立归属发布;商城页面之外的平台设置和个人中心由对应包交付。`Source=NotIncluded + Build=DatabaseOnly + StorageMode=db` 的小型恢复资产接受 256 文件/5MB 和逐文件哈希门禁。客户明确要求手动更新时,官方发布不得扩张为客户自动安装或服务器部署。
|
|
177
246
|
- 批量任务已经以“一个应用”为外层持久化恢复单元。规模可控的小型官方包应在一个事务中完成,避免对同一包体按 8 个字段反复下载、解析和重新排队;超过字段、表、DDL、流程、随包数据或资产安全阈值的大包继续使用内部 checkpoint 分片。热更新发现旧版批量计划不含 `ApplicationType` 时,必须丢弃旧计划并重新盘点,不能继续安装历史计划中的社区应用。
|
|
178
247
|
- MySQL 宽表触发 65,535 字节行内上限时,只允许把不参与索引的 `varchar` 配置列无损提升为 `mediumtext`,并把类型覆盖持久化到后台任务 checkpoint;索引列和非行宽错误必须失败关闭。发布包对长连接串、密钥、回调地址、域名/白名单等字段应直接使用 `mediumtext`,同时更新 `DiyFields` 与建表 DDL,不能长期依赖安装时猜测。
|
|
248
|
+
- 历史表连新增 TEXT 行内指针都无法容纳时,仅修改新增字段不够。导入器需支持本次长列行外化后,对本包明确拥有的表内、包声明的既有可空且无默认值/生成属性的长 VARCHAR 有界扩宽。先查询目标 `INFORMATION_SCHEMA.STATISTICS` 保护全部真实索引列(含复合索引非首列),再按长度降序最多调整八次;保留内容、字符集、排序规则、可空性和注释,逐条 DDL 强回读。引用表、未声明列、非文本声明、索引读取失败和其它 DDL 错误禁止自动扩宽;全量验证声明后才修改包对象,不得部分修改或缩窄 LONGTEXT。
|
|
249
|
+
- 行宽修复回归必须先复现旧表中 VARCHAR 与 TEXT 新增都失败,再证明新导入器保留短列类型、长列行外存储、旧数据和列属性不变、检查点恢复以及立即重装零 DDL。MySQL DDL 不随事务回滚,回读不一致必须失败且不得推进安装版本;后续安装依据真实物理容量与检查点覆盖保持兼容。真实租户先更新商城导入器,再验收全部平台应用成功和立即零安装/零更新重跑。
|
|
179
250
|
- 卸载是破坏性操作,必须明确列出将删除/保留的资源、二次确认并优先软删除/归档业务数据。
|
|
180
251
|
|
|
181
252
|
## 联邦商城源、公开范围与历史版本(强制)
|
package/skills/dos-orm/SKILL.md
CHANGED
|
@@ -90,6 +90,7 @@ Dispose 幂等,未 Commit 时自动回滚。事务内异步操作串行执行
|
|
|
90
90
|
|
|
91
91
|
- 至少在目标数据库 Provider 运行定向测试,不用 MySQL 结果宣称 Oracle/达梦通过。
|
|
92
92
|
- 覆盖 NULL、DateTime、decimal、Guid、enum、byte[] 和分页边界。
|
|
93
|
+
- FormEngine 的 decimal 字符串绑定固定使用 `InvariantCulture` 且禁用千分组,防止 `de-DE` / `tr-TR` 把 `1.500000` 转成 `1500000`。类型化 CLR 数值保留原值;无效、本地化逗号或越界仍抛字段转换错误。绑定层修复不能恢复上游 JavaScript 浮点丢失的位数,必须保留原十进制字符串并分别验收实际 Provider 往返与 HTTP 提交。
|
|
93
94
|
- 覆盖事务提交/回滚、唯一冲突、超时、取消和连接故障。
|
|
94
95
|
- BulkInsert/Upsert 核对受影响行、Identity 跳过、唯一键和重试副作用。
|
|
95
96
|
- 读写分离覆盖从库故障、写后读主和降级。
|
|
@@ -16,6 +16,10 @@ description: Microi 定时任务与可靠后台任务规范。用于配置 Micro
|
|
|
16
16
|
|
|
17
17
|
禁止用后端 `setTimeout`、`Task.Run`、`static bool` 或本机定时器承载可靠业务。
|
|
18
18
|
|
|
19
|
+
## 持续模拟不使用秒级任务冒充
|
|
20
|
+
|
|
21
|
+
需要50ms规则步长的持续模拟应使用已安装的通用受信后台宿主,规则留应用包、业务事务留接口引擎。`NextDelaySeconds:1` 或每秒Quartz任务只能扫描租约、恢复检查点与补偿;HasMore分片不等于20Hz实时tick。后台恢复必须拥有服务端可信作用域并重读主库,不可伪造成员DiyToken或复用已过期pump scope。无法证明实际后台连续推进时,只能报告请求触发/秒级补偿,不得声称已经提供持续权威模拟。
|
|
22
|
+
|
|
19
23
|
## 平台对象
|
|
20
24
|
|
|
21
25
|
Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任务。V8 中的 `V8.Method.ManageScheduleJob` 用于能力发现、任务查询和受控管理,必须绑定当前租户的管理员身份。任务配置、接口引擎代码和执行日志属于控制面,只允许 `Level >= 9999` 维护;业务用户只能触发明确授权的后台动作。
|
|
@@ -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=ab17865c6032884ccd896a0eb62387cf7f89edcf337c024f2251563f3bd0e4d9 -->
|
|
194
194
|
## 7. 验证建议
|
|
195
195
|
|
|
196
196
|
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
@@ -218,12 +218,15 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
218
218
|
|
|
219
219
|
### 菜单微服务缓存与恢复(强制)
|
|
220
220
|
|
|
221
|
+
- 首次挂载分开检查资源下载与渲染:下载最多 60 秒,`beforemount` 资源齐备后才开始原有 12 秒渲染期限;不得在资源正常下载时提前销毁沙箱。成功仍要求真实可见 DOM,保留一次自愈与旧实例保护。回归覆盖超过 12 秒的真实下载、下载停滞、渲染停滞和陈旧实例事件。
|
|
222
|
+
|
|
221
223
|
- 动态菜单宿主的 Vue 路由保持 `keepAlive:false`,由 `<micro-app keep-alive>` 独占运行时状态;契约固定为 `runtime-keep-alive`,禁止 Vue `KeepAlive` 和 micro-app 双层缓存。
|
|
222
224
|
- 每个顶部 Tab 按完整路由生成稳定实例身份,最多保留 5 个隐藏实例并按 LRU 淘汰。关闭 Tab、退出登录、Token/角色变化以及版本或入口变化时必须精确销毁对应运行时。
|
|
223
225
|
- 恢复时强制同步宿主上下文并检查真实可见 DOM;子应用监听 `appstate-change`,在 `afterhidden` 幂等暂停轮询、WebSocket 和观察器,在 `aftershow` 幂等恢复并重新测量布局,同时保留用户输入、筛选、滚动和内部路由。
|
|
224
226
|
- 修改宿主、TagsView 或权限路由时,必须同时读取 [Vue3 前端微服务宿主规则](references/progressive-03-vue3-前端微服务宿主规则.md) 并运行微服务缓存契约测试。
|
|
225
227
|
|
|
226
228
|
- 修改 Vue/JS 后先跑 VS Code Problems 或 `get_errors`。
|
|
229
|
+
- 宿主按钮重置只作用于 `button:not(:focus-visible)`,不能用全局 `outline:none !important` 覆盖组件或微应用的键盘焦点。微应用保留自己的边框形状,焦点色使用已适配明暗表面的 `--mci-text-link`(缺省回退正文语义色),不能直接用浅品牌色。真实 Tab/Shift+Tab 回归须核对 `:focus-visible`、实际 `outline-style`、宽度、颜色与至少 3:1 对比度;`outline-style:none` 即使宽度非零也不可见。使用阴影焦点时另验实际 `box-shadow`,不能只看焦点状态。平台样式组件回归归 Full,应用自身按钮继续在真实业务页面验收。
|
|
227
230
|
- 影响核心前端时跑 `Microi.Client` 的 `npm run build`。
|
|
228
231
|
- 如果改了工作流、表单保存、按钮 V8,建议用实际 `sys_menu` 配置测试:
|
|
229
232
|
- `FormBtns` 是否出现在表单右上角/FAB。
|
|
@@ -13,6 +13,7 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
13
13
|
|
|
14
14
|
## Microi Agent 桌面宿主
|
|
15
15
|
|
|
16
|
+
- 完整版在所有平台用物理 `node_modules/node/bin/node[.exe]` 启动 Harness、Worker 和插件命令,不能换成 Electron Helper/utilityProcess;后者会在特定 Electron 指纹下被原生加载器拒绝。每次发布最终安装包先运行 `test:packaged-desktop`,设置真实产物与独立证据目录,验收生产 main 两次正常启动、Worker IPC、员工引导及 Harness 重启,并核对日志 `electron=none`。直接启动 Harness、签名公证成功或跳过完整应用用例均不足以证明用户能正常启动;不同系统和架构覆盖分别记录。同步上游必须保留该选择器、门禁脚本与回归用例。
|
|
16
17
|
- 桌面包内置技能目录;干净工作区输入 `/microi` 可发现吾码入口,再读取基础规范与专项技能。查不到时先核对当前桌面版本及内置技能资源,不要求用户复制开发机目录,也不要把 MCP 工具名当成斜杠技能名。
|
|
17
18
|
- 对话输入框上下键回填成功提交的提示词,向下可恢复未发送草稿。菜单、输入法候选、选区和多行正常光标移动优先;不要在用户编辑文本时强行覆盖草稿。
|
|
18
19
|
- 消息编辑/撤回通过真实会话分叉到该消息之前的已完成轮次;原会话和已经执行的文件修改保留。撤回将消息恢复为草稿,编辑则重新发送;这不是撤销文件系统。图片随草稿恢复,无法安全恢复的文件附件明确拒绝,不能静默删除附件或只改屏幕文字而保留旧模型上下文。
|
|
@@ -20,12 +21,13 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
20
21
|
|
|
21
22
|
- 桌面与手机配对的本机 HTTP 监听必须避开 Fetch 标准禁止端口。系统自动分配的端口也可能不可浏览器访问;只有浏览器允许的真实监听端口才能进入配对 URL。自动命中禁止端口时关闭监听再有界重选,显式配置禁止端口须报错;权限和占用错误仍保留原错误,不改变系统动态端口范围、不绕过浏览器安全策略。同步上游时保护共同端口选择器、配对监听与对应回归。
|
|
22
23
|
|
|
24
|
+
- 同步上游前读取内部源码根目录 `.microi-upstream.json`、`同步dsh-desktop上游.md` 与维护交接记录;分别核对 dsh-desktop 提交、Harness 官方 tag/提交、npm 版本与锁定 integrity。三方比较和补丁意图迁移、干净 `npm ci`、回归及真实界面验收通过后才能推进基线。禁止用整目录覆盖或删除补丁来通过同步。Harness 的同级权限请求应直接使用当前有效模式;提升权限必须填写非空理由,普通调用不要附带这两个升级字段。
|
|
23
25
|
- Microi Agent 是内部仓库中的独立桌面发行物,直接基于 DataElement/dsh-desktop 与 DeepSeek Harness 二次开发,内置固定版本的 Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
|
|
24
26
|
- 官方 AI 登录只走桌面账号窗口,固定 `https://api.itdos.com`、`OsClient=iTdos`,使用当前用户的中转 Key 和额度。不要让用户把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
|
|
25
27
|
- 业务连接在「服务器连接(MCP)」中单独添加、登录;官方 AI 账号不授予业务租户权限。项目初始化和资源同步优先使用桌面「项目资源」;其余业务继续调用同源 MCP 的原工具。
|
|
26
28
|
- macOS 登录凭据通过桌面 Keychain/受限 IPC 管理;不要在 macOS 改跑当前只支持 Windows 凭据恢复的 `microi auth login`。不要手改 Token 文件。
|
|
27
29
|
- 桌面安装包中的 Harness、Node 和同源资产随桌面版本升级;不运行 npm 自更新去改写正在使用或已签名的安装目录。外部 Codex / WorkBuddy / CLI 的后台更新规则保持不变。
|
|
28
|
-
- 桌面 UI 沿用 dsh-desktop 的设计系统;首页保留 dsh 原生会话区,并在下方用无外层卡片边框、无整块背景的差异层完整展示吾码 AI 大类与 29 项图像工具。工具 Id、名称和分类以 `Microi.Client/src/views/ai-engine/ai-image-tool-directory.js`
|
|
30
|
+
- 桌面 UI 沿用 dsh-desktop 的设计系统;首页保留 dsh 原生会话区,并在下方用无外层卡片边框、无整块背景的差异层完整展示吾码 AI 大类与 29 项图像工具。工具 Id、名称和分类以 `Microi.Client/src/views/ai-engine/ai-image-tool-directory.js` 为事实源,点击时在「Microi吾码」主面板打开原生三栏工作台,禁止跳转浏览器页面;模型来源可选当前对话模型、吾码官方中转站或已登录服务器连接。服务器连接入口和“预览版”不重复放进首页。AI 数据分析明确使用 `microi_run_engine` 调用 `mci_ai_data_assistant`,不能改成绕过 MCP 的直接数据库访问。
|
|
29
31
|
- Microi Agent 左侧「功能区」动态读取 dsh 的 `settings.section` 注册表,并在主界面 `main` 面板中渲染原设置组件;第一项「Microi吾码」合并官方账号和吾码 AI,第二项为「服务器连接(MCP)」,之后提供 AI 员工、采集引擎、环境与服务管理入口,再接 dsh 原生设置。功能区与工作区可拖动调高,默认无滚动条;首页/聊天页不显示虚假选中态。底部入口显示「关于 v版本号」及 `LicenseType` 版本标签,连接手机入口保持同一行。品牌显示 `Microi Agent` 与 `HARNESS` 标签,新安装默认浅色,用户仍可切换浅色/深色。
|
|
30
32
|
- 桌面安装包版本从 `1.0.0` 开始,使用吾码三段十进制进位规则。正式新版本先在发布源码中执行 `version:bump`,核对并提交三个版本文件;Mac 拉取后使用 `bash ./一键打包Mac.sh` 在临时 Git 工作树中打包当前已提交版本,默认不再升版,失败也不能把生成文件留在原检出目录。`--current` 仅作旧命令兼容;同版本本地重打包不得覆盖已公开的不可变产物。测试、类型检查和普通 Web 构建不升版。
|
|
31
33
|
- Windows 安装包的构建成功、Authenticode 签名、SmartScreen/商店信任、HDFS 上传与 CDN 回读是不同证据;双击 `一键打包Windows.cmd` 时自动探测 Microsoft Artifact Signing 或本机可信证书,没有凭据则继续生成明确标记的未签名包,显式 `-Signing Signed` 才失败关闭。签名必须先覆盖安装器及独立执行文件,再计算发布 SHA256。macOS 默认 `bash ./一键打包Mac.sh` 同样自动探测并在无凭据时生成未签名包;`--signed` 是正式门禁,必须在缺少证书或公证钥匙串时失败,并通过 `codesign`、`spctl`、`stapler validate` 后才标记已签名公证。
|
|
@@ -42,6 +44,7 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
42
44
|
- 长路径验收必须先安装完整旧版本,再在同一目录覆盖升级及再次重装,不能只在空目录或仅含模拟卸载器的目录安装。卸载清理、旧文件备份迁移和失败回滚均须支持 Windows 扩展路径;通过真实 NSIS 与独占文件句柄验证长路径迁移和占用回滚,不能仅用 JS 文件操作或首次解压测试替代。
|
|
43
45
|
- Windows 1.2.7 起安装失败诊断直接集成于安装器:失败窗口提供「复制安装日志」与「打开日志」,不另发独立诊断工具。`build/microi-installer-log.nsh` 在实际清理/解压/回滚步骤写入安装目录外的 UTF-8 日志,`build/microi-installer-diagnostics.ps1` 作为内嵌的只读补充,记录 Win32 访问错误和 Restart Manager 占用 PID。整份日志通过原生 Unicode 剪贴板复制;超过容量时明确拒绝而不截断。验收须真实点击复制按钮、核对中文长日志、占用文件的 Win32=32 与回滚;卸载退出码 2 不等同于 Win32 错误码 2,本机通过不代表客户机升级通过。
|
|
44
46
|
- Windows 1.2.8 起升级先在安装盘同级目录完整解压,再切换程序目录;旧文件仅同盘重命名,禁止回退到逐文件跨盘搬运。`build/microi-installer-transaction.nsh` 与相关 NSIS 补丁必须随上游同步永久保留。Win32=33 是文件区域锁错误,不能仅凭此指认某个安全软件;验收须在安装盘与 TEMP 不同的条件下持有真实字节锁,证明旧跨盘操作失败而新版安装成功,并验证持续占用、回滚与未知目标目录冲突。未恢复的同盘备份必须在安装退出后保留,不能存入会自动删除的临时目录;完整源文件哈希检查与客户设备验收分别记录。
|
|
47
|
+
- Windows 1.3.7 修复候选针对新版 stage 启用时 Win32=5 的单次失败:对 5/32/33 有限重试,再仅在成功新建的目标目录内做同盘文件重命名;以固定 UTF-16 日志记录迁移意图,部分失败逐项搬回,已有目标、未知文件与旧备份均不覆盖。回滚 EOF 和短记录必须停止,目录枚举句柄先关闭再删除空目录。真实 NSIS 回归覆盖短暂/持续错误 5、中途错误 5、文件冲突和未知目标;Wine 结果与 Windows 原生覆盖升级/全部文件哈希/最终程序启动分别报告。
|
|
45
48
|
- Windows 1.2.9 起本机启动探测必须使用覆盖 TCP 连接和响应头的硬超时;Harness 输出认证地址后,Node 请求失败可使用实际渲染页面的 Chromium 网络通道回退,严格限制为本次 `http://127.0.0.1:端口/`、不带凭据、不跟随重定向。记录两个通道的真实错误;只有响应正常且存在本次认证信息才可启动页面。恢复日志只能去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布必须运行 `scripts/verify-harness-startup.mjs`,使用发布包内 Node/Harness 验证普通与安全模式、注入 Node 超时后由真实 Chromium 渲染新会话控件,以及双通道真实不响应的有界失败;本机验证不能称为客户设备已通过。
|
|
46
49
|
- 桌面平台 Worker 必须在真实安装包内验证 IPC 与 Windows DPAPI。旧保险库只有成功解密且明文为零字节时才允许迁移为空文档;损坏或其他 Windows 用户的保险库保留原文件并返回具体错误。启动初始化拒绝不能让 Node 服务退出;单元测试、安装成功与真实桌面账号/AI 员工页面联调是三个独立验收层。
|
|
47
50
|
- dsh-desktop 升级必须遵循 `Microi.Agent/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
@@ -43,10 +43,14 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
43
43
|
|
|
44
44
|
共享源码持续变化时,可在独立目录保存完整候选源码和依赖,以该目录运行同一 Full 与发布脚本。专用测试服务使用独立端口,通过发布脚本变量 `MICROI_RELEASE_BACKEND_PORT`、`MICROI_RELEASE_FRONTEND_PORT` 指定收尾端口(默认仍为 61501、61500);进程管理器仍必须核验 PID、命令行和工作区归属,不得结束原工作区服务。变量仅供发布脚本使用,不进入生产 API 配置。
|
|
45
45
|
|
|
46
|
+
私有原生规则的静态后端组合必须设置构建专用 `MICROI_RELEASE_COMPOSITION_FILE`,不能把根仓忽略的应用源码当作已经进入 Full 候选。工作区内契约 `schema:1` 固定 `properties/files/directories/artifacts`;四个文件属性 `CustomAfterMicrosoftCommonTargets`、`PrivateRulesProject`、`ApprovedRulesBootstrapSource`、`MicroiCoreProject` 必须与当前 MSBuild 环境属性一致并进入源清单。契约、规则目录、静态审批及项目文件的新增/修改/删除均绑定候选,链接和越界路径拒绝。API 最终 `publish/<规则DLL>.dll` 必须与 `artifacts` 中后台审批的实际 SHA256 一致;不重新签名另一份 DLL 来通过门禁。普通无组合发布与 PC 制品保持兼容,实际镜像和部署仍需独立回读。详细契约见官网 `getting-started/local-run.md`;这是发行进程参数,不是生产 AppSettings、V8 或 MCP 代码上传入口。
|
|
47
|
+
|
|
46
48
|
macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新 Full。
|
|
47
49
|
|
|
48
50
|
DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 Full、加密和最终产物冒烟;不得以专项测试替代发布门禁。
|
|
49
51
|
|
|
52
|
+
只要检测到闭源项目源码,就必须具备完整的五项目加密链;源码不完整、加密脚本缺失都要硬失败,不能降级为 `HAS_ENCRYPT=false` 的开源模式。一键脚本由 `release-encryption.mjs` 保存五个实际 DLL 的加密前后 SHA-256,并要求每个 DLL 字节改变且匹配原加密器指纹。上传 NuGet 前检查真实 ZIP 中所有闭源 DLL;上传后端 Docker 前从不启动、不联网的临时容器读取实际镜像内五个 DLL,与加密回执逐字节哈希核对。缺回执、明文重编译覆盖、包或镜像中的旧 DLL 均阻止上传;最终渠道仍需独立回读,不以本地检查代替已发布证据。
|
|
53
|
+
|
|
50
54
|
在线 AI 的 MCP 运行目录必须由已锁定依赖干净安装、编译和裁剪后完整复制。生产命令的符号链接应解析为真实文件并保留执行权限,不能依赖即将清理的临时目录;损坏、越界或循环链接在替换旧运行目录前失败,重新打包清除旧依赖残留。保留制品门禁对符号链接的拒绝规则,专项验证使用同一复制逻辑并核对清理临时目录后命令仍可运行;修复打包逻辑后重新 Full。
|
|
51
55
|
|
|
52
56
|
| 场景 | 推荐入口 |
|
|
@@ -137,17 +141,15 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
137
141
|
## Windows 多 AI 本地服务与 Release 文件锁
|
|
138
142
|
|
|
139
143
|
多个 AI 对话共用同一工作区和固定 `61500/61501` 时,前后端是工作区级单例共享服务,
|
|
140
|
-
|
|
144
|
+
不是每个对话各自拥有的后台进程。发布必须使用“同范围互斥 + 精确身份识别 + DLL 锁复核”:
|
|
141
145
|
|
|
142
146
|
- 健康开发服务默认复用;需要重载源码时串行重启。长期后端只从项目目录执行
|
|
143
147
|
`dotnet run --launch-profile Microi.net.Api`,禁止直接运行 `bin/Release/net10.0`
|
|
144
148
|
或 `bin/Release/publish` 作为 E2E 服务。
|
|
145
|
-
-
|
|
146
|
-
|
|
147
|
-
- Windows 发布前调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease`。
|
|
148
|
-
|
|
149
|
-
的 Release API;身份不匹配时失败关闭,禁止使用 `/IM dotnet.exe`、`/IM node.exe`、
|
|
150
|
-
`/IM chrome.exe` 或 `/IM msedge.exe` 全机清理。
|
|
149
|
+
- API、PC、官网、Agent 分别使用 `api-release.lock`、`pc-release.lock`、`website-release.lock`、`agent-release.lock`,可并行发布;同类发布互斥。合并发布只取得所选产品的锁,部分取得失败时释放本次已取得的锁。
|
|
150
|
+
- API 启动前执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`,PC 使用 `assert pc`;官网/Agent 不阻塞二者。旧全局锁仅在真实命令入口和状态目录证明 API 热修复或 Agent 归属后缩小阻塞范围,未知锁仍阻塞,不能删除活跃锁。
|
|
151
|
+
- Windows 发布前调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease -ReleaseScope api|pc|all`。API 仅处理匹配工作区的后端与 Release DLL;PC 仅处理匹配的 Vite;官网不清理二者。禁止按进程名全机清理。
|
|
152
|
+
- PC/API 各自保留完整 Full 门禁;Full 的 restore/build/test/package audit 输出统一隔离到本次结果目录 `.net-artifacts`。并行验收使用独立结果目录、测试服务/端口及隔离租户;共享版本与跨产品源码先冻结,测试期间不得修改。资源排队依据为当前并行阶段预算之和与系统余量,不使用单一全局发布窗口。
|
|
151
153
|
- Vite 以相对 `node_modules/vite/bin/vite.js` 启动且父进程退出时,命令行可能没有绝对工作区路径。
|
|
152
154
|
进程管理器只能把只读回读到的 CWD 精确等于当前 `Microi.Client` 作为补充证据;读取失败、
|
|
153
155
|
CWD 属于其它目录或仅检测到孤儿状态时仍须失败关闭。回归同时覆盖当前工作区可精确停止、
|
|
@@ -157,7 +159,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
157
159
|
`.NET Host` 对业务 DLL 的锁定。
|
|
158
160
|
- Edge/Chrome 用户浏览器、VS Code 的 Playwright Test Server、MCP/语言服务 Node、
|
|
159
161
|
数据库和 Redis 不属于发布清理范围。人工查看使用进程管理器的 `-Action Status`。
|
|
160
|
-
- PowerShell 7 下的 macOS/Linux 进程管理使用真实端口、命令行、精确大小写 CWD 和启动时间回读;身份不明或 PID
|
|
162
|
+
- PowerShell 7 下的 macOS/Linux 进程管理使用真实端口、命令行、精确大小写 CWD 和启动时间回读;身份不明或 PID 复用时失败关闭,只结束已核验根进程的后代。无扩展名 `Microi.net.Api` apphost 须采用规范绝对可执行路径,精确位于当前 API 项目的 `bin/` 下,且 CWD 精确等于项目目录;非规范路径、同名外部程序、读取失败均拒绝。身份函数回归进入 Full,实际停止能力仍需自有进程与端口验收。专项回归必须在自有目录、端口和真实进程中证明当前工作区可停止、外部工作区保留,以及原始文件锁诊断;不允许为了跨平台放宽跳过门禁。
|
|
161
163
|
|
|
162
164
|
## 一键发布产物边界与缓存
|
|
163
165
|
|
|
@@ -7,11 +7,13 @@ description: Microi 表单引擎设计与控件配置指南。用于创建或修
|
|
|
7
7
|
|
|
8
8
|
# Microi 表单引擎设计
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 表单设计器生成表单代码
|
|
11
11
|
|
|
12
|
-
保留现有 `Diy`
|
|
12
|
+
保留现有 `Diy` 动态渲染;需要每表独立页面时,在保存设计后使用【生成表单代码】。生成器产生 `src/pages/Form_表名.vue`,源码归当前租户 `microi-generated-forms` 微服务私有项目,AI 应用工作台可继续编辑。Vite 构建并发布运行产物后,模块菜单用 `CodeForm`,同时绑定原 `DiyTableId` 与对应微服务路由。生成页经前端 V8 SDK 传 `_SysMenuId` 调用 FormEngine,权限及后端事件继续由服务端校验。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
基础控件生成独立表单;复杂控件、动态数据源、前端 V8 事件/模板和缺少选项的多选生成平台原表单入口,通过宿主 `openForm` 保留原控件与事件,监听 `micro-app:form-saved` 刷新列表。两种模式读取服务端 `DataAppend.FieldAccess`,隐藏字段不渲染、只读字段不写入;不要只依赖前端身份推断。
|
|
15
|
+
|
|
16
|
+
人工修改过的目标源码仍需停止覆盖并显示原因。设计器再次变更后重新生成草稿,在源码工作台审阅和合并,再构建发布。源码保存不等于微服务已构建、菜单已切换或目标租户已安装。必须验证实际源码保存回读、构建后页面及普通账号写入,不能只验证预览字符串。
|
|
15
17
|
|
|
16
18
|
表单引擎同时驱动数据模型、表单、列表、模块、接口配置和工作流配置。处理“新增字段”
|
|
17
19
|
不能只做物理 `ALTER TABLE`:必须让 `diy_table`、`diy_field`、物理列、组件
|
|
@@ -135,6 +135,8 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
135
135
|
- 回读成功还不等于页面可用:必须直接请求稳定入口、版本入口和清单内的 JS/CSS;入口 `502` 且运行时/清单存在时,优先检查 API 节点是否能通过租户 MinIO 内网端点读取公有桶对象。不要反复发布同一份产物掩盖存储读取故障。
|
|
136
136
|
- 服务器暂未部署修复且普通应用产物很小时,可把 `StorageMode=db` 与内联 `ContentBase64` 作为短期恢复手段;必须明确记录为临时方案。修复部署后重新流式发布到公有 HDFS,并恢复 `StorageMode=file`。只有上一条满足严格资源策略的受信任平台启动应用允许长期保留小型数据库产物;禁止借此把普通或大体积 JS/CSS 长期放进数据库 JSON。
|
|
137
137
|
- 子租户发布时,源码、版本资产、回读验签、页面与缓存全部绑定当前 Token 的 `OsClient`;禁止回退到主租户或宿主服务器默认租户。切换前必须由当前 API 节点通过该子租户 HDFS 配置读回每个版本文件并校验大小/SHA-256。
|
|
138
|
+
- CDN 同一不可变对象返回 200 而 API 稳定入口返回 404 时,先检查 API 读取到的当前租户 `FileServer`(含公有桶路径)和已提交 `ReleasePrefix`,不能把默认域名回退当作恢复。配置读取必须将 dynamic 数据显式转为 object/JObject,再调用扩展方法;缺失或无效配置失败关闭。
|
|
139
|
+
- HTML/JS/CSS 被对象存储标为 `application/octet-stream` 时,文件字节可能完全正确。新上传统一设置对象 MIME;运行网关只对已提交资产的空/二进制通用标签按文件路径归一,保留类型兼容、HTML 完整性、大小、哈希及 `nosniff`。需更新全部 API 节点;旧对象的 CDN 直接入口另需修正元数据或正常发布新版本,不能把 API 兼容称为 CDN 已修复。
|
|
138
140
|
|
|
139
141
|
### 宿主路由查询参数
|
|
140
142
|
|
|
@@ -238,6 +240,7 @@ AI 生成菜单微服务时,应优先封装一个 `callMicroiHost(action, data
|
|
|
238
240
|
- 菜单微服务只有一个缓存所有者:Vue 路由宿主固定 `meta.keepAlive=false`,`<micro-app keep-alive>` 独占子应用状态。禁止把外层 Vue `KeepAlive` 打开,也禁止子应用通过随机实例名规避运行时缓存;双层缓存会产生旧宿主与当前路由竞争、无数据、永久骨架屏和白屏。
|
|
239
241
|
- 每个主框架 `fullPath` 使用稳定且不泄露查询参数/Token 的实例指纹。平台最多保留 5 个菜单运行时,超过后按 LRU 销毁最久未使用的隐藏实例;Tab 仍保留,再次进入允许冷启动。关闭当前/其它/全部 Tab、访问记录淘汰、退出登录、Token 重置、角色变化、同路由版本或入口变化时必须精确 `unmountApp(name,{destroy:true,clearData:true})`。
|
|
240
242
|
- 恢复隐藏实例时,宿主用 `forceSetData` 同步当前 Token、OsClient、权限、主题、路由和视口,再复核 `micro-app-body/#app` 的真实可见 DOM;失败只允许自动销毁重建一次。`hostCapabilities.lifecycle` 暴露 `cacheOwner=micro-app`、`cacheMode=runtime-keep-alive`、`maxCachedTabs=5` 和状态事件。
|
|
243
|
+
- 首次加载分别判断资源下载和脚本渲染:下载有 60 秒上限,`beforemount` 表示资源齐备后才开始 12 秒渲染期限;不能在资源仍正常下载时用渲染期限销毁实例。仍以真实可见 DOM 为成功证据,保持一次自愈、旧实例与隐藏页保护,并覆盖超过 12 秒下载、下载停滞及渲染停滞的回归。
|
|
241
244
|
- AI 创建或修改菜单微服务时必须生成 `appstate-change` 适配:`afterhidden` 幂等暂停轮询、WebSocket、观察器和昂贵任务;`aftershow` 重新读取宿主数据、幂等恢复任务并在下一帧重算图表/虚拟列表。隐藏时保留表单输入、筛选、滚动与内部路由,禁止清空业务状态;弹窗和表单嵌入不套用菜单页签保活。
|
|
242
245
|
|
|
243
246
|
```js
|
|
@@ -244,6 +244,11 @@ PageTabs 通过 `TargetSysMenuId` 切换不同模块/表时,入口模块必须
|
|
|
244
244
|
- PC 和移动端分别验证;MicroService 还要验证运行时、页面路由和宿主上下文。
|
|
245
245
|
### 多级表头与顶部 Banner
|
|
246
246
|
|
|
247
|
+
- 字段权限使用模块 `FieldPermissions`(Manifest `fieldPermissions`),Version=1;按 Everyone/Roles/Users/Departments/Jobs 与 Fields 配置 Visible/Editable,授权对象数组保存 Id。多个匹配组限制取交集,隐藏同时不可编辑;普通用户按最终能力执行,超级管理员按原管理边界。岗位来自 `diy_job`(显示 `JobName`),匹配权威 `sys_user.Jobs` 中的岗位 Id;岗位与角色 `RoleIds` 分开,不得相互替代。
|
|
248
|
+
- 不能只做前端隐藏:FormEngine 查询、隐藏字段条件/排序/统计、导出、写入和导入均须校验。生成代码使用服务端 `DataAppend.FieldAccess`;未传菜单的客户端不能绕过该表已启用的模块限制。验收应覆盖普通账号、直接请求、角色/人员/部门/岗位匹配与只读写入失败。
|
|
249
|
+
- 树模块拖动排序配置 `TreeDragSortEnabled`、`TreeDragSortField`(Manifest 同名小驼峰),排序字段必须为已注册数值字段。业务由 Managed、非匿名接口引擎 `mci-tree-drag-sort` 执行,可信原子仅负责固定引擎的模块解析、权限和白名单写入。
|
|
250
|
+
- 拖动前取全树快照,移动时核验快照;旧、新父级的所有同级记录按间隔 10 重排,同时维护父级、祖先链、HasChild。不得仅更新被拖动记录,也不得按当前分页重排;跨级、循环、过期快照、任一兄弟无权编辑或写入失败必须整次回滚。
|
|
251
|
+
|
|
247
252
|
- 数据源【多级表头】使用现有 `sys_menu.TableHeaders`,填写 `[{"Label":"人数(人)","Fields":["Total","Male","Female"]}]`;`Fields` 必须引用可见、连续的查询列字段名。嵌套分组可使用 `Children`。缺省、非法 JSON、重复或不连续字段时客户端回退普通表头。
|
|
248
253
|
- Manifest `modules[].tableHeaders` 接受同一数组,MCP 写入 `sys_menu.TableHeaders`;更新已有菜单可通过 `microi_update_module` 传同名字段并回读,不能把合并表头放入已废弃的 `DiyConfig`。
|
|
249
254
|
- 模块的 `HideTableBanner`、`HideFormBanner` 分别关闭表格与表单顶部 Banner。未配置或 `0` 均显示;设为 `1` 后对应专属统计接口不执行,按钮角标接口不受影响。Manifest 使用 `hideTableBanner`、`hideFormBanner`。
|
|
@@ -139,15 +139,14 @@ PW_HOME_PATH=/#/pages/index/index
|
|
|
139
139
|
不要只说“代码已编译”或“需要用户自己重启后端”;除非用户明确要求不要中断当前服务,否则 AI 要主动完成重启。
|
|
140
140
|
|
|
141
141
|
<!-- /microi-progressive:chunk -->
|
|
142
|
-
<!-- microi-progressive:chunk id=playwright-e2e-007 sha256=
|
|
142
|
+
<!-- microi-progressive:chunk id=playwright-e2e-007 sha256=6d285a719a85ce3f2c887b292c08cc69d9632964c341269f0f61bb2fdc403fac -->
|
|
143
143
|
## 服务自启动纪律(必做)
|
|
144
144
|
|
|
145
145
|
执行自动化测试、截图巡检、接口引擎回读、`/apiengine/{key}` 验收时,如果本地后端或前端不可达,不能把 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听当作任务终点。必须先自动启动所需服务,再继续完整验证。
|
|
146
146
|
|
|
147
147
|
同一工作区有多个 AI 对话时,服务自启动还必须遵守共享生命周期:
|
|
148
148
|
|
|
149
|
-
-
|
|
150
|
-
自愈脚本或 AI 重新抢占 `61500/61501`;等待发布结束后重新检查。
|
|
149
|
+
- API 服务启动前执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`,PC 服务使用 `assert pc`。Playwright `webServer`、自愈脚本或 AI 只在对应范围发布时等待;官网/Agent 发布不阻塞 `61500/61501`。同时启动前后端时分别检查两项。旧锁仅在真实进程证明所属范围后缩小阻塞范围,未知锁继续保护,不得删除活跃锁。
|
|
151
150
|
- 端口健康且 PID/命令行属于当前工作区时直接复用,不得每个对话都无条件“先杀再启动”。
|
|
152
151
|
必须重载源码时才串行重启,并在状态播报中说明旧/新 PID。
|
|
153
152
|
- 本地长期后端使用项目目录中的 `dotnet run --launch-profile Microi.net.Api`,禁止把
|