@microi.net/cli 5.9.9 → 6.0.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 +82 -82
- package/scripts/microi-cli.js +56 -55
- package/scripts/microi-skills.meta.json +218 -215
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +40 -40
- package/skills/ai-engine/SKILL.md +5 -1
- package/skills/microi-client-frontend/SKILL.md +12 -7
- package/skills/microi-codex/SKILL.md +116 -116
- package/skills/microi-microservice/SKILL.md +7 -0
- package/skills/microi-system-delivery/SKILL.md +7 -1
- package/skills/module-engine/SKILL.md +6 -0
- package/skills/playwright-e2e/SKILL.md +180 -178
- package/skills/scripts/validate-progressive-disclosure.mjs +15 -4
- package/skills/scripts/validate-progressive-disclosure.test.mjs +108 -0
- package/skills/ui-design/SKILL.md +1 -1
- package/skills/workspace-conventions/SKILL.md +101 -87
- 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 +6 -3
- package/skills/workspace-conventions/references/progressive-04-/345/267/245/344/275/234/345/214/272/344/270/216/345/271/263/345/217/260/344/270/223/351/241/271/344/277/235/351/232/234.md +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-18T07:20:28.523Z",
|
|
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": "000b122c661f7529a1c94a93c5d0f84da02752e0e7fe7e05553f984816a1b573",
|
|
173
|
+
"originalLines": 717,
|
|
174
174
|
"prefixSha256": "19308dd1a04397f764cc5ab4fefe76093704564592396ce00482d28e952537b7",
|
|
175
175
|
"prefixBytes": 1400,
|
|
176
|
-
"entryLines":
|
|
176
|
+
"entryLines": 259,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
@@ -187,16 +187,16 @@
|
|
|
187
187
|
"id": "microi-client-frontend-001",
|
|
188
188
|
"ordinal": 1,
|
|
189
189
|
"destination": "microi-client-frontend/SKILL.md",
|
|
190
|
-
"sha256": "
|
|
191
|
-
"lines":
|
|
190
|
+
"sha256": "60265fdc9842dcc4f032f80e1a93b88dd5f47f1261d0fa7334c2a7eac8d31c4c",
|
|
191
|
+
"lines": 32,
|
|
192
192
|
"heading": "1. 技术栈和源码入口"
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
"id": "microi-client-frontend-002",
|
|
196
196
|
"ordinal": 2,
|
|
197
197
|
"destination": "microi-client-frontend/SKILL.md",
|
|
198
|
-
"sha256": "
|
|
199
|
-
"lines":
|
|
198
|
+
"sha256": "8f995c626f56fe8fe7e969b4d33bc073f1422a7f59eb4a44f27a99995fa7e92a",
|
|
199
|
+
"lines": 121,
|
|
200
200
|
"heading": "2. 表单引擎三层结构"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
@@ -763,11 +763,11 @@
|
|
|
763
763
|
]
|
|
764
764
|
},
|
|
765
765
|
"microi-system-delivery": {
|
|
766
|
-
"originalSha256": "
|
|
767
|
-
"originalLines":
|
|
768
|
-
"prefixSha256": "
|
|
769
|
-
"prefixBytes":
|
|
770
|
-
"entryLines":
|
|
766
|
+
"originalSha256": "13f660057af8de87499d18a005b0c1922083d879b3f800c95ef1e185b5e88af0",
|
|
767
|
+
"originalLines": 707,
|
|
768
|
+
"prefixSha256": "8ced78f7933b3083a7804f63600c50b5ac67b52512dda64426c0e0707e887b9d",
|
|
769
|
+
"prefixBytes": 5298,
|
|
770
|
+
"entryLines": 112,
|
|
771
771
|
"chunks": [
|
|
772
772
|
{
|
|
773
773
|
"id": "microi-system-delivery-000",
|
|
@@ -781,8 +781,8 @@
|
|
|
781
781
|
"id": "microi-system-delivery-001",
|
|
782
782
|
"ordinal": 1,
|
|
783
783
|
"destination": "microi-system-delivery/SKILL.md",
|
|
784
|
-
"sha256": "
|
|
785
|
-
"lines":
|
|
784
|
+
"sha256": "167c117fc2a52cea49cd1bf2128b450fb3c8af07e8af1e955d1482a454d472ef",
|
|
785
|
+
"lines": 19,
|
|
786
786
|
"heading": "用户问题编号跟踪(强制)"
|
|
787
787
|
},
|
|
788
788
|
{
|
|
@@ -1382,17 +1382,17 @@
|
|
|
1382
1382
|
]
|
|
1383
1383
|
},
|
|
1384
1384
|
"playwright-e2e": {
|
|
1385
|
-
"originalSha256": "
|
|
1386
|
-
"originalLines":
|
|
1387
|
-
"prefixSha256": "
|
|
1388
|
-
"prefixBytes":
|
|
1389
|
-
"entryLines":
|
|
1385
|
+
"originalSha256": "002f2c3fe59ba4baaf346bd465becd833e8a9bf0c7a44e96a9e1f8eedc514703",
|
|
1386
|
+
"originalLines": 811,
|
|
1387
|
+
"prefixSha256": "40bc53bc27a17c18353ddc22aa123220c53fab7b4f6632924ded2b4239b6f414",
|
|
1388
|
+
"prefixBytes": 3110,
|
|
1389
|
+
"entryLines": 203,
|
|
1390
1390
|
"chunks": [
|
|
1391
1391
|
{
|
|
1392
1392
|
"id": "playwright-e2e-000",
|
|
1393
1393
|
"ordinal": 0,
|
|
1394
1394
|
"destination": "playwright-e2e/SKILL.md",
|
|
1395
|
-
"sha256": "
|
|
1395
|
+
"sha256": "f04614f276c139cfa50b9e46e89857675c6dc5e7cf0cfbfde76d6e6dbe9746c9",
|
|
1396
1396
|
"lines": 9,
|
|
1397
1397
|
"heading": "是否需要 `-e2e` 后缀"
|
|
1398
1398
|
},
|
|
@@ -1400,7 +1400,7 @@
|
|
|
1400
1400
|
"id": "playwright-e2e-001",
|
|
1401
1401
|
"ordinal": 1,
|
|
1402
1402
|
"destination": "playwright-e2e/SKILL.md",
|
|
1403
|
-
"sha256": "
|
|
1403
|
+
"sha256": "703786ae7a5a52cb39664f1c82de7fb7aa7dfece511046d3757da64918c23063",
|
|
1404
1404
|
"lines": 11,
|
|
1405
1405
|
"heading": "适用范围"
|
|
1406
1406
|
},
|
|
@@ -1408,7 +1408,7 @@
|
|
|
1408
1408
|
"id": "playwright-e2e-002",
|
|
1409
1409
|
"ordinal": 2,
|
|
1410
1410
|
"destination": "playwright-e2e/SKILL.md",
|
|
1411
|
-
"sha256": "
|
|
1411
|
+
"sha256": "acef3e589cf11f3c197ee0b0ccf56d96b3f286263d54161b3c260e07c2090ed0",
|
|
1412
1412
|
"lines": 20,
|
|
1413
1413
|
"heading": "临时文件与产物放置规则(必须遵守)"
|
|
1414
1414
|
},
|
|
@@ -1416,7 +1416,7 @@
|
|
|
1416
1416
|
"id": "playwright-e2e-003",
|
|
1417
1417
|
"ordinal": 3,
|
|
1418
1418
|
"destination": "playwright-e2e/SKILL.md",
|
|
1419
|
-
"sha256": "
|
|
1419
|
+
"sha256": "69b8842a221a0de60f8605c5059deee391be0f16f0b6cbc5ddfb3cfd210268db",
|
|
1420
1420
|
"lines": 20,
|
|
1421
1421
|
"heading": "标准目录"
|
|
1422
1422
|
},
|
|
@@ -1424,7 +1424,7 @@
|
|
|
1424
1424
|
"id": "playwright-e2e-004",
|
|
1425
1425
|
"ordinal": 4,
|
|
1426
1426
|
"destination": "playwright-e2e/SKILL.md",
|
|
1427
|
-
"sha256": "
|
|
1427
|
+
"sha256": "4f5e11baf4651c11b5f9819a0b4f33ce2590db1733d4db72814bd1a25daf56ff",
|
|
1428
1428
|
"lines": 21,
|
|
1429
1429
|
"heading": "必备环境变量"
|
|
1430
1430
|
},
|
|
@@ -1432,7 +1432,7 @@
|
|
|
1432
1432
|
"id": "playwright-e2e-005",
|
|
1433
1433
|
"ordinal": 5,
|
|
1434
1434
|
"destination": "playwright-e2e/SKILL.md",
|
|
1435
|
-
"sha256": "
|
|
1435
|
+
"sha256": "51567cea5fca434f9b031fef0871454100cf4715dfb65695dc1722bd275399be",
|
|
1436
1436
|
"lines": 24,
|
|
1437
1437
|
"heading": "本地测试账号自动发现"
|
|
1438
1438
|
},
|
|
@@ -1440,7 +1440,7 @@
|
|
|
1440
1440
|
"id": "playwright-e2e-006",
|
|
1441
1441
|
"ordinal": 6,
|
|
1442
1442
|
"destination": "playwright-e2e/SKILL.md",
|
|
1443
|
-
"sha256": "
|
|
1443
|
+
"sha256": "88e1002cae934acd2de5af2f77f371a9ea152a525eecf11b49fe182b16a56044",
|
|
1444
1444
|
"lines": 12,
|
|
1445
1445
|
"heading": "后端改动后的 E2E 前置动作"
|
|
1446
1446
|
},
|
|
@@ -1448,7 +1448,7 @@
|
|
|
1448
1448
|
"id": "playwright-e2e-007",
|
|
1449
1449
|
"ordinal": 8,
|
|
1450
1450
|
"destination": "playwright-e2e/SKILL.md",
|
|
1451
|
-
"sha256": "
|
|
1451
|
+
"sha256": "5efaf4a0ce03afc3cfc7863e0b7adadbcfcbb031bc64a1c543d611b9a489bccf",
|
|
1452
1452
|
"lines": 42,
|
|
1453
1453
|
"heading": "服务自启动纪律(必做)"
|
|
1454
1454
|
},
|
|
@@ -3241,17 +3241,17 @@
|
|
|
3241
3241
|
]
|
|
3242
3242
|
},
|
|
3243
3243
|
"workspace-conventions": {
|
|
3244
|
-
"originalSha256": "
|
|
3245
|
-
"originalLines":
|
|
3246
|
-
"prefixSha256": "
|
|
3247
|
-
"prefixBytes":
|
|
3248
|
-
"entryLines":
|
|
3244
|
+
"originalSha256": "52588fe43201af9b96aa96fc24962484837b21d6a4eb468427b98fa16383e5fa",
|
|
3245
|
+
"originalLines": 665,
|
|
3246
|
+
"prefixSha256": "30214af590c360ad34eb296a03ef6b5f4a047c9f5b08b6e0a2a1b72d993be67b",
|
|
3247
|
+
"prefixBytes": 5800,
|
|
3248
|
+
"entryLines": 134,
|
|
3249
3249
|
"chunks": [
|
|
3250
3250
|
{
|
|
3251
3251
|
"id": "workspace-conventions-000",
|
|
3252
3252
|
"ordinal": 0,
|
|
3253
3253
|
"destination": "workspace-conventions/SKILL.md",
|
|
3254
|
-
"sha256": "
|
|
3254
|
+
"sha256": "9e8585f04ec448154431f3f0c441697b57f16db77cee365788feb8e4bbf62e62",
|
|
3255
3255
|
"lines": 60,
|
|
3256
3256
|
"heading": "任务启动前 Skill 读取规则(强制)"
|
|
3257
3257
|
},
|
|
@@ -3259,7 +3259,7 @@
|
|
|
3259
3259
|
"id": "workspace-conventions-001",
|
|
3260
3260
|
"ordinal": 1,
|
|
3261
3261
|
"destination": "workspace-conventions/SKILL.md",
|
|
3262
|
-
"sha256": "
|
|
3262
|
+
"sha256": "8d8dfff420c0cc768bbeb13d94e9f77f52d5002fc61d93dc82d71b3a17f2eaa0",
|
|
3263
3263
|
"lines": 12,
|
|
3264
3264
|
"heading": "Microi吾码工作进度播报规范(强制)"
|
|
3265
3265
|
},
|
|
@@ -3283,7 +3283,7 @@
|
|
|
3283
3283
|
"id": "workspace-conventions-004",
|
|
3284
3284
|
"ordinal": 4,
|
|
3285
3285
|
"destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
|
|
3286
|
-
"sha256": "
|
|
3286
|
+
"sha256": "443f093b8ae93e4f62df416006bc34969a6d8cde4741745acc5fdec829d957da",
|
|
3287
3287
|
"lines": 29,
|
|
3288
3288
|
"heading": "临时文件与 AI 产物放置规则(强制)"
|
|
3289
3289
|
},
|
|
@@ -3323,7 +3323,7 @@
|
|
|
3323
3323
|
"id": "workspace-conventions-009",
|
|
3324
3324
|
"ordinal": 9,
|
|
3325
3325
|
"destination": "workspace-conventions/references/progressive-04-工作区与平台专项保障.md",
|
|
3326
|
-
"sha256": "
|
|
3326
|
+
"sha256": "9ef3509bf1efdf2b04cce46f8f517ad5779de428d007cee08ce6fe41f1f9daa9",
|
|
3327
3327
|
"lines": 38,
|
|
3328
3328
|
"heading": "多对话共享工作区变更归属保护(强制)"
|
|
3329
3329
|
},
|
|
@@ -3331,8 +3331,8 @@
|
|
|
3331
3331
|
"id": "workspace-conventions-010",
|
|
3332
3332
|
"ordinal": 10,
|
|
3333
3333
|
"destination": "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md",
|
|
3334
|
-
"sha256": "
|
|
3335
|
-
"lines":
|
|
3334
|
+
"sha256": "f123b0b70030df276188dbb77617c41f74767ab27ea38d5472634cc3b6beca8b",
|
|
3335
|
+
"lines": 10,
|
|
3336
3336
|
"heading": "版本更新日志保护规则(强制)"
|
|
3337
3337
|
},
|
|
3338
3338
|
{
|
|
@@ -3435,7 +3435,7 @@
|
|
|
3435
3435
|
"id": "workspace-conventions-023",
|
|
3436
3436
|
"ordinal": 23,
|
|
3437
3437
|
"destination": "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md",
|
|
3438
|
-
"sha256": "
|
|
3438
|
+
"sha256": "44d2ca45e8fb85bb86f2f84f3fad09abc0687fb89f9e0e4f624917d258d485c3",
|
|
3439
3439
|
"lines": 20,
|
|
3440
3440
|
"heading": "根目录保留文件说明"
|
|
3441
3441
|
},
|
|
@@ -51,7 +51,11 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
|
|
|
51
51
|
|
|
52
52
|
在线 `/#/mic-ai-engine` 的低代码建模模式使用本地 Microi.Agent 同一份 `microi.mcp` 工具目录:先 `list_tools`/`describe_tool`,再执行表、字段、菜单、接口引擎、Manifest 系统编排、删除等原 MCP 工具。用户在对话中明确要求写入时自动执行,不需要网页按钮;明确“只规划、不执行”时只调用只读工具。前端仅向 `Level >= 9999` 开放建模入口;服务端进入模式和每次工具调用前都以当前 DiyToken、主库账号及有效角色复核。工具原有确认值、审计和回读规则继续生效;超时或结果不确定时停止,不自动重试写操作。商城包不替换平台前后端程序。
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
建模工作台使用 `/api/Ai/ChatStream` 接收真实模型增量和 `agent/receipt/message/error/done` 事件;每轮工具、请求与 DDL 阶段持续显示。等待心跳只表示请求尚未返回,不能冒充完成百分比或隐藏推理原文。只公开经过授权的执行摘要,不向浏览器发送完整工具参数、原始返回、密钥或连接串。非流式 Chat 兼容入口继续返回最终结果。完整系统先调用 `microi_get_db_schema`、`microi_get_manifest_schema`、`microi_plan_system`,用 `microi_generate_system(dryRun=true)` 验证,再按用户明确创建请求调用 `dryRun=false` 并用 `microi_validate_system` 回读;原 MCP Schema 与确认规则不变。
|
|
55
|
+
|
|
56
|
+
MCP 可信写前校验分支确认未执行时标记 `notExecuted`,保留安全的参数位置和错误码,同一动作最多允许模型修正一次参数;不能仅凭未看到 HTTP 请求就推断未写入。发出写请求后断线或工具报错保留 `uncertain`,停止后续写入。已知表、字段和 Manifest 使用精确只读工具核对;回读返回不等于原写入成功,也不授权重放。普通 POST 网络失败不得通过另一 HTTP 传输自动重发;已有稳定 RequestId 的专用资产协议按自身契约执行。浏览器提前断流、取消或错误时保留已收到的文本、步骤与失败回执,不能把正在执行的工具保存为成功。
|
|
57
|
+
|
|
58
|
+
建表和新增字段的 DDL 来自已鉴权 MCP 端点开启的内部 ORM observer,在真实 DbCommand 执行前、返回或失败时记录安全语句,不从模型计划推测。字面量、默认值、注释及含歧义的双引号段隐藏,只返回有界 TABLE/INDEX DDL,不返回 DML 值。`submitted/executed/failed` 与 `TransactionPending` 是数据库执行阶段,不等于最终事务提交;截断必须标明。局部 HTTPS 联调只使用系统证书链与 localhost 名称验证通过的公开链,专属 Node 临时 CA 文件严格限权并在退出后清理;不关闭 TLS、不导出服务端私钥。
|
|
55
59
|
|
|
56
60
|
在线工具网关仅转发当前请求的真实 DiyToken 与租户到同版 MCP,不创建服务账号或提权 Token;不继承宿主其它凭据。每次调用前复核当前管理员权限,模型只能提出调用建议,MCP 继续负责参数 Schema、写操作确认、幂等、审计和权威回读。对浏览器本地文件,先通过受控上传取得服务器可读内容,不能把客户端路径当作 API 节点路径。
|
|
57
61
|
|
|
@@ -27,15 +27,17 @@ 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=60265fdc9842dcc4f032f80e1a93b88dd5f47f1261d0fa7334c2a7eac8d31c4c -->
|
|
31
31
|
## 1. 技术栈和源码入口
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### 详情评论、日志与版本的按需读取
|
|
34
34
|
|
|
35
35
|
- 评论用 `/api/FormEngine/AddFormComment`,只传 `ParentFormEngineKey/ParentTableRowId/_SysMenuId/Content/ParentCommentId/RequestId`。服务端固定作者、父表及回复上下文;同一提交重试必须复用 RequestId,兼容 GUID 与平台 `DiyCommon.NewGuid()` 实际生成的 ULID。
|
|
36
36
|
- 评论归属为 `diy_comment.ParentTableId + TableRowId`,新表字段与复合索引通过表单引擎应用交付,主库回读保证写后可见。已有 TableId 绑定兼容,空归属历史评论禁止仅按记录 Id 自动猜测或后台回填。
|
|
37
|
-
- `/api/FormEngine/GetFormRelatedData`
|
|
38
|
-
-
|
|
37
|
+
- `/api/FormEngine/GetFormRelatedData` 的日志和版本列表只含元信息;`HistoryContentMode=OnDemand` 时,点击动作再传 `LogId/VersionId` 读取一条,并要求返回 `Authorized`。不要预取全部正文或将版本 Data 装入列表长期缓存。
|
|
38
|
+
- 历史正文单独复核当前主库有效管理员、父菜单/表/记录,普通用户与 AccessKey 会话不能仅凭当前行可读获得历史原文。代码继续使用代码字段白名单,普通数据使用当前元数据和正常 Client 读取前后未改变的字段交集;字段被任意 DataFilter、文件/模块权限隐藏、删除或改写时,不开放其历史值。密码控件、加密列、嵌套凭据及连接等敏感配置继续排除;SaaS 配置历史只允许明确安全字段白名单。
|
|
39
|
+
- 历史读取观察既有父记录管线,不重新执行历史 V8,不新读业务原行、不触发业务写入。局部版本比较/加载只涉及可读快照字段,保存继续走正常表单鉴权和事件。
|
|
40
|
+
- 表、记录、菜单、ApiBase/OsClient 或表单代次变化时同步清空列表、计数、评论/回复与历史弹窗,并作废旧响应。头像解析和按需正文 Promise 恢复后再次核归属;同一记录重新打开也要生成新代次,不能用列表非空代替当前记录已加载。
|
|
39
41
|
- 不得为了修复右栏恢复调度器通用 FormEngine 状态写回、启动历史回填或无变化版本写入。必须同时运行评论归属/去重、按需读取以及 ScheduleRuntimeTimeWriter、V8CodeVersionService 的性能回归。
|
|
40
42
|
|
|
41
43
|
- Vue 3 + Options API + mixins,构建工具是 Vite。
|
|
@@ -58,7 +60,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
58
60
|
---
|
|
59
61
|
|
|
60
62
|
<!-- /microi-progressive:chunk -->
|
|
61
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
63
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=8f995c626f56fe8fe7e969b4d33bc073f1422a7f59eb4a44f27a99995fa7e92a -->
|
|
62
64
|
## 2. 表单引擎三层结构
|
|
63
65
|
|
|
64
66
|
### 模块级跨端视图
|
|
@@ -148,8 +150,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
148
150
|
|
|
149
151
|
### 框架来源标识与水印(强制)
|
|
150
152
|
|
|
151
|
-
- 微服务和定制组件的来源标识必须由 Microi.Client
|
|
152
|
-
- `V8.OpenAppDialog` / Drawer
|
|
153
|
+
- 微服务和定制组件的来源标识必须由 Microi.Client 宿主统一渲染,子应用不得各自实现。微服务来源入口只向当前登录用户 `Level >= 9999` 展示,普通用户、未知或非法等级、受限访问密钥会话不显示标签、关闭按钮及源码详情;不从账号名称、`_IsAdmin` 或子应用元数据推断权限。定制组件的原有来源展示保持兼容,不新增 `RenderSourceBadgeMode`、自动收起或全局关闭配置。
|
|
154
|
+
- `V8.OpenAppDialog` / Drawer 等标准弹层的来源标识放在标题文字之后,不提供关闭按钮;菜单/整页微服务由 `micro-app/host.vue` 在内容区右上角直接渲染,管理员可手动关闭当前页面实例的标识,切换实例或账号后恢复。当前用户等级降低后立即隐藏入口并关闭已展开详情;这只控制来源辅助工具,不能改变业务菜单、关闭 Tab、弹层或后端源码/MCP 鉴权。不得依赖外围路由组件猜测菜单微服务。修改时运行 `tests/microservice-source-badge-permission.spec.mjs` 与既有来源及宿主契约回归。
|
|
153
155
|
- 来源标识必须使用可点击的 `button` 语义与 `cursor:pointer`。点击后用可拖动、居中、亮/暗色适配的大圆角 Element Plus 弹层展示 AppKey、PageKey、应用内/框架路由、版本、源码定位、运行入口、发布/挂载状态和租户坐标,并生成可复制的 MCP 修改指令;公开详情不得包含 DiyToken、访问密钥、私有配置或用户敏感字段。
|
|
154
156
|
- 框架水印覆盖 `100vw × 100vh` 且固定 `pointer-events:none`。开启后内容空值默认 `$SysTitle$ - $UserName$`(用户名为空回退账号)、方向默认 `DiagonalUp`、密度默认 `Comfortable`、字号空值/0 默认 14,透明度空值/0 默认 30;亮色、深色、弹层、键盘和减少动态效果模式都要验收。
|
|
155
157
|
|
|
@@ -159,12 +161,15 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
159
161
|
|
|
160
162
|
- 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
|
|
161
163
|
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System` 继承租户,租户空值为侧边导航。`TopSide` 将一级放顶部,当前一级的二级及更深菜单复用原侧栏;单个子菜单仍留在侧栏,无可见子菜单时隐藏侧栏并释放内容宽度。侧栏仍支持收起及 `MenuChildExpandMode=System/Down/Right`。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。当前路由与一级归属由 `hybrid-navigation.js` 统一投影,禁止修改共享权限树。
|
|
164
|
+
- 侧栏与角色管理组织树共用 `MciResizablePane`:右边缘拖拽、可访问分隔条、方向键/Shift/Home/End 和收起按钮必须同样可用。`sys_user.SidebarWidth/RoleTreeWidth` 为 nullable 整数像素(160–600),`SidebarCollapsed/RoleTreeCollapsed` 为 nullable 0/1;使用当前账号的 Managed 偏好白名单保存。拖拽中仅预览,松开提交,取消或卸载释放指针。视口夹紧保留主内容宽度,不能把夹紧值覆盖长期偏好;窄屏禁拖,旧租户仅用账号/租户/API 隔离的设备回退。侧栏空宽度沿用 `sys_config.MenuWidth` 后回退240px,角色树默认240px。
|
|
165
|
+
- 顶部主导航与工作区 Tabs 是不同层级:`Top/TopSide` 的当前一级使用独立短底线,hover/focus 前景显式跟随可读主题,禁止继承 Element 的低对比品牌色。长弹出菜单使用独立主题表面、无异色顶边和内部滚动,嵌套层仍 Teleport;顶部菜单标题与品牌不显示 title/alt/Tooltip 类提示浮层,保留完整 aria-label 无障碍名称;顶栏整条背景色带须贴合视口或所属壳层左右边界,不能把内部 padding 当成全宽验收,内容区留白独立处理。窄视口“更多”菜单也遵守同一契约。
|
|
162
166
|
- 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*` 可读表面与前景;主题面板和业务弹层保留自身语义表面。主题入口为齿轮,界面密度在同一主题面板调整,已安装 `sys_user.UiDensityScale` 时保存当前账号、个人空值继承 `sys_config.UiDensityScale`,旧租户才使用按租户/账号隔离的设备回退;AI 入口使用圆圈内 AI 字母 SVG,不能回退魔法棒或图片。
|
|
163
167
|
- 头像菜单【修改密码】使用标准 `DiyCustomDialog + MicroAppDialog` 打开现有平台服务 `/personal-settings`,仅传 `Data.Action=ChangePassword` 选择密码展示模式;不能用宿主输入决定目标账号/租户,不新建密码旁路。当前密码校验、Passkey/TOTP/严格人脸一次性票据与提交继续复用个人中心,成功或卸载清除密码输入。定向回归使用 `hybrid-navigation.spec.mjs`、`password-dialog.spec.mjs` 和个人偏好资源测试。
|
|
164
168
|
- 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
|
|
165
169
|
- 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
|
|
166
170
|
- 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
|
|
167
171
|
- 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
|
|
172
|
+
- 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距与普通表格 `.cell` 的历史38/40px行高都必须采用同一密度 token。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。
|
|
168
173
|
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
169
174
|
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留输入边界、键盘焦点、加载指示与纯图标操作。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名读取当前租户默认或本匿名上下文明确预览,不能读取上一账号的个人值。
|
|
170
175
|
- `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
|