@microi.net/cli 5.9.4 → 5.9.5

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.
Files changed (36) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.mcp.json +1 -1
  5. package/.workbuddy-plugin/marketplace.json +2 -2
  6. package/.workbuddy-plugin/plugin.json +1 -1
  7. package/LICENSE +21 -21
  8. package/README.md +71 -71
  9. package/assets/build-meta.json +6 -6
  10. package/assets/feature-matrix.json +138 -138
  11. package/assets/logo.svg +4 -4
  12. package/cordis.patch.yml +1 -1
  13. package/package.json +1 -1
  14. package/scripts/codex-marketplace.json +20 -20
  15. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  16. package/scripts/mcp-server.js +1 -1
  17. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  18. package/scripts/microi-cli-mcp.js +7 -7
  19. package/scripts/microi-codex-broker.js +466 -466
  20. package/scripts/microi-codex-router.js +634 -634
  21. package/scripts/microi-skills.meta.json +212 -212
  22. package/skills/.microi-skills-version.json +2 -2
  23. package/skills/.progressive-disclosure-manifest.json +42 -33
  24. package/skills/microi-codex/SKILL.md +11 -6
  25. package/skills/microi-deployment/SKILL.md +6 -4
  26. package/skills/microi-docs-coverage/references/capability-map.md +1 -1
  27. package/skills/microi-microservice/SKILL.md +5 -0
  28. package/skills/microi-system-delivery/SKILL.md +2 -2
  29. 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 +3 -1
  30. package/skills/microi-uniapp-frontend/SKILL.md +3 -1
  31. package/skills/playwright-e2e/SKILL.md +5 -4
  32. package/skills/v8-file-upload/SKILL.md +2 -0
  33. package/skills/v8-mongodb/SKILL.md +2 -1
  34. package/skills/v8-security/SKILL.md +6 -0
  35. package/skills/workspace-conventions/SKILL.md +4 -3
  36. 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 +13 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-10-12T22:17:37.250Z",
3
+ "generatedAt": "2026-10-15T12:35:25.935Z",
4
4
  "policy": {
5
5
  "maxEntryLines": 285,
6
6
  "referenceBudgetLines": 245,
@@ -763,8 +763,8 @@
763
763
  ]
764
764
  },
765
765
  "microi-system-delivery": {
766
- "originalSha256": "70763c6a98c125c81db27586a136428d1e4f091f64bdfe8127e7f8b66a79cc60",
767
- "originalLines": 576,
766
+ "originalSha256": "1863eea393f9f59d2c8394676ed5b67c80e85fa5f7629193b67330662d75bdb4",
767
+ "originalLines": 578,
768
768
  "prefixSha256": "af58f29dd31d1e292f187d31a6e71c6b5180481a4a5a23bbed5ca768cb221682",
769
769
  "prefixBytes": 3222,
770
770
  "entryLines": 157,
@@ -773,7 +773,7 @@
773
773
  "id": "microi-system-delivery-000",
774
774
  "ordinal": 0,
775
775
  "destination": "microi-system-delivery/SKILL.md",
776
- "sha256": "bdbc78e88e50c53a3bd29eeb76ce34e3fed8eec5f4ba16371417d2aeee9c2fbe",
776
+ "sha256": "04f08fdc316d253f167e26923066e134763ab129dd830f833c762214613c607f",
777
777
  "lines": 13,
778
778
  "heading": "交付总原则"
779
779
  },
@@ -821,8 +821,8 @@
821
821
  "id": "microi-system-delivery-006",
822
822
  "ordinal": 4,
823
823
  "destination": "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md",
824
- "sha256": "4b999e29e04c192319690a886ba25bb8952d5cc1910db8fa151b583d599b2be5",
825
- "lines": 129,
824
+ "sha256": "1dd7c9face286616c392ece855acac7d1a3358afbad904a4ff6da5f10c0a8e01",
825
+ "lines": 131,
826
826
  "heading": "自动化测试必须覆盖的坑"
827
827
  },
828
828
  {
@@ -960,11 +960,11 @@
960
960
  ]
961
961
  },
962
962
  "microi-uniapp-frontend": {
963
- "originalSha256": "4e6d4e3f4c20d380f7a556f7db6640510da52f49b109505a6ee5535527640fc1",
964
- "originalLines": 552,
963
+ "originalSha256": "ddcc488e18b193f9e26e22484a4d900f1c1155015345d1953e9521a4cb9e243d",
964
+ "originalLines": 554,
965
965
  "prefixSha256": "55f2799d872b4b9682449adf2e554003eb8642c111af262cacf42265b99dd5f5",
966
966
  "prefixBytes": 3040,
967
- "entryLines": 207,
967
+ "entryLines": 209,
968
968
  "chunks": [
969
969
  {
970
970
  "id": "microi-uniapp-frontend-000",
@@ -978,8 +978,8 @@
978
978
  "id": "microi-uniapp-frontend-001",
979
979
  "ordinal": 1,
980
980
  "destination": "microi-uniapp-frontend/SKILL.md",
981
- "sha256": "ce7f36d1d7c3e3c6d10572da2cf29b783a5fcf043dc5568e9caed5e42bff5469",
982
- "lines": 25,
981
+ "sha256": "5d3fe408d73474b25414ae370e94503aa6f0b05a419c4dd758ad7f9e58905fc8",
982
+ "lines": 27,
983
983
  "heading": "标准产品、视图协议与租户扩展"
984
984
  },
985
985
  {
@@ -1362,11 +1362,11 @@
1362
1362
  ]
1363
1363
  },
1364
1364
  "playwright-e2e": {
1365
- "originalSha256": "c129c3ac1385c3048fbfef29eae361ffec211e065d5700d979562196b35c5c55",
1366
- "originalLines": 806,
1365
+ "originalSha256": "b437da7ac5c22847c9f6f6f6c0ad67aab590f8d54901d5df9c141dd07705888d",
1366
+ "originalLines": 807,
1367
1367
  "prefixSha256": "5550e83bf4a6a2261ed5a65826a6799a3ad20f2f66b44b9f4308bc1bed6dc75d",
1368
1368
  "prefixBytes": 1914,
1369
- "entryLines": 198,
1369
+ "entryLines": 199,
1370
1370
  "chunks": [
1371
1371
  {
1372
1372
  "id": "playwright-e2e-000",
@@ -1388,7 +1388,7 @@
1388
1388
  "id": "playwright-e2e-002",
1389
1389
  "ordinal": 2,
1390
1390
  "destination": "playwright-e2e/SKILL.md",
1391
- "sha256": "2e92ff117b1c3b450e988776204ccecd9dd4d6a83bb08d86d32032b467abc174",
1391
+ "sha256": "5874137c92e16fd5cc729fd9c23d051caa3e64438fc7bee1d717ae9c5a0f2a90",
1392
1392
  "lines": 20,
1393
1393
  "heading": "临时文件与产物放置规则(必须遵守)"
1394
1394
  },
@@ -1428,8 +1428,8 @@
1428
1428
  "id": "playwright-e2e-007",
1429
1429
  "ordinal": 8,
1430
1430
  "destination": "playwright-e2e/SKILL.md",
1431
- "sha256": "6d285a719a85ce3f2c887b292c08cc69d9632964c341269f0f61bb2fdc403fac",
1432
- "lines": 41,
1431
+ "sha256": "ee40e4f023e1da07269f9ebb82522720c4f014cfc9500885db09778dd819b9a6",
1432
+ "lines": 42,
1433
1433
  "heading": "服务自启动纪律(必做)"
1434
1434
  },
1435
1435
  {
@@ -2239,11 +2239,11 @@
2239
2239
  ]
2240
2240
  },
2241
2241
  "v8-file-upload": {
2242
- "originalSha256": "17a89900aeaa4f0c85479311d8b740904b1d36864422b97591e13c29307e49be",
2243
- "originalLines": 677,
2244
- "prefixSha256": "bf5b6d1f23b6bd77022ab7e6af536f39655590e53e509c328a89d367e9683875",
2245
- "prefixBytes": 16588,
2246
- "entryLines": 256,
2242
+ "originalSha256": "982b4f0632c6f69ee6e266e3367c82ded81a463aaf8b64684154f3be97745512",
2243
+ "originalLines": 679,
2244
+ "prefixSha256": "0744abbee9d6074905f96afc8e97d93fb9324063aebc30b3e22164224b978aad",
2245
+ "prefixBytes": 17144,
2246
+ "entryLines": 258,
2247
2247
  "chunks": [
2248
2248
  {
2249
2249
  "id": "v8-file-upload-000",
@@ -2811,11 +2811,11 @@
2811
2811
  ]
2812
2812
  },
2813
2813
  "v8-security": {
2814
- "originalSha256": "a779644767d44205075cd7000eda92a867b52be1470783ac3ac3535c2aa13fa7",
2815
- "originalLines": 544,
2816
- "prefixSha256": "f1fd47e9e779cd5bc0987c6ee1dc6e3c698551c954c8fd7878114edbb8994e86",
2817
- "prefixBytes": 5557,
2818
- "entryLines": 228,
2814
+ "originalSha256": "1ac817c6dba82a11f10a592e7ab8a07bf17bad335c5d3022320e8dba9c9ef75c",
2815
+ "originalLines": 550,
2816
+ "prefixSha256": "5cee41a4d3765eb7052d2d7c2acc48195a4e0596e218e88cfe18f239d2b58152",
2817
+ "prefixBytes": 6158,
2818
+ "entryLines": 234,
2819
2819
  "chunks": [
2820
2820
  {
2821
2821
  "id": "v8-security-000",
@@ -3221,17 +3221,17 @@
3221
3221
  ]
3222
3222
  },
3223
3223
  "workspace-conventions": {
3224
- "originalSha256": "97e7fe55a12fced58ee289b4f26d3ea6de27a98acb2141a2107ce976a061679b",
3225
- "originalLines": 626,
3224
+ "originalSha256": "968aedcd9fd9572ccdbf378cdfc5d9ee6e19f8445551e95e594851177593b4d5",
3225
+ "originalLines": 638,
3226
3226
  "prefixSha256": "b2c13c455cf052093f78881170151d3fb56c25cda2f837c9f6abc0c29e67fd30",
3227
3227
  "prefixBytes": 310,
3228
- "entryLines": 284,
3228
+ "entryLines": 285,
3229
3229
  "chunks": [
3230
3230
  {
3231
3231
  "id": "workspace-conventions-000",
3232
3232
  "ordinal": 0,
3233
3233
  "destination": "workspace-conventions/SKILL.md",
3234
- "sha256": "e8e784198efa6cd233fa9da3be0292cd6c68cea2c10e35f8f94eaacd1d381033",
3234
+ "sha256": "09810cd14d0b03a9b52469a851f851bb18f41aa8aad4ccdb4a59a97b006aa128",
3235
3235
  "lines": 58,
3236
3236
  "heading": "任务启动前 Skill 读取规则(强制)"
3237
3237
  },
@@ -3255,8 +3255,8 @@
3255
3255
  "id": "workspace-conventions-003",
3256
3256
  "ordinal": 3,
3257
3257
  "destination": "workspace-conventions/SKILL.md",
3258
- "sha256": "a3388a2f929f7316d2726fb09698732002fb19494682b6cc59220671bb106100",
3259
- "lines": 18,
3258
+ "sha256": "7e7a88134f51f7e5712e9a41cfe516bae45ea8e9cb418a93cc39adeff3f3cbb4",
3259
+ "lines": 19,
3260
3260
  "heading": "本地资源与 OOM 保护规范(强制)"
3261
3261
  },
3262
3262
  {
@@ -3538,6 +3538,14 @@
3538
3538
  "sha256": "1dd79589434568ac963b144f4278707e4836bf477181b5e7a3a82c0275d3189e",
3539
3539
  "lines": 30,
3540
3540
  "heading": "CLI 与 IDE 插件错版共存约定"
3541
+ },
3542
+ {
3543
+ "id": "workspace-conventions-039",
3544
+ "ordinal": 39,
3545
+ "destination": "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md",
3546
+ "sha256": "8cfc7d1e2a6a0a766845c79775efe8c7fb15ef805a47e8bc1965128e348f3062",
3547
+ "lines": 12,
3548
+ "heading": "本地测试程序与依赖生命周期(强制)"
3541
3549
  }
3542
3550
  ],
3543
3551
  "references": [
@@ -3563,6 +3571,7 @@
3563
3571
  {
3564
3572
  "path": "references/progressive-02-microi-net-api-本地启动约定.md",
3565
3573
  "headings": [
3574
+ "本地测试程序与依赖生命周期(强制)",
3566
3575
  "Microi.net.Api 本地启动约定",
3567
3576
  "多 AI 对话共享本地服务与发布互斥(强制)",
3568
3577
  "本地租户与测试凭据读取约定",
@@ -27,18 +27,23 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
27
27
  - 桌面包内置技能目录;干净工作区输入 `/microi` 可发现吾码入口,再读取基础规范与专项技能。查不到时先核对当前桌面版本及内置技能资源,不要求用户复制开发机目录,也不要把 MCP 工具名当成斜杠技能名。
28
28
  - 对话输入框上下键回填成功提交的提示词,向下可恢复未发送草稿。菜单、输入法候选、选区和多行正常光标移动优先;不要在用户编辑文本时强行覆盖草稿。
29
29
  - 消息编辑/撤回通过真实会话分叉到该消息之前的已完成轮次;原会话和已经执行的文件修改保留。撤回将消息恢复为草稿,编辑则重新发送;这不是撤销文件系统。图片随草稿恢复,无法安全恢复的文件附件明确拒绝,不能静默删除附件或只改屏幕文字而保留旧模型上下文。
30
- - AI 员工桌面工作台提供十岗、任务草稿、执行、成果审阅、已验收依赖、目标和预算。云端执行复用员工中心;本机执行使用显式受限 OpenClaw Agent 与已有 Gateway。Harness 的会话/技能/定时能力不能证明 OpenClaw 的渠道、Gateway、设备节点与全部 cron 语义已完整内置。相关配置和验收读取 `ai-engine/references/ai-employees.md`。
30
+ - AI 员工按项目群协作,十个岗位加技术总监共十一个岗位,可分别选择桌面已配置模型;原任务、成果审阅、目标和预算仍从「任务与验收」进入。群与任务共用用户明确选择并已登录的吾码 MCP,不能默认切到官方账号或首个客户。数据、运行与验收记录归所选租户;未安装员工中心或权限不足必须明确提示,不能擅自向所有客户安装。Harness 的会话/技能/定时能力不能证明完整 OpenClaw 已内置。相关执行边界读取 `ai-engine/references/ai-employees.md`。
31
+ - 员工群消息先持久提交 SQL 消息、运行与 outbox,再返回短确认;后台用稳定 Mongo `_id` 同步并按授权游标分页读取,失败明确显示 SQL 兜底,不能把未确认发送或模型排队当完成。旧历史只在当前群管理者显式操作后分批迁移。SignalR 使用通用 `/api-engine-realtime` 和群授权,只传版本提示;断线重连后重新授权并按游标回读,不将推送当持久记录。Token 留在桌面 Worker,切换 MCP/用户/群时清理旧订阅及迟到响应。最终安装包须实测详情、模型选择保存、短确认、Mongo 回读及断线恢复。
32
+ - Mongo 附件投影保存规范四字段数组的 JSON 字符串,读回仍核对完整消息摘要,不能只比较顶层 ContentHash。冲突先用同源、当前群管理权限限定的只读审计;旧嵌套字段已丢失时不可猜测解码或跳过摘要。派生投影修复仅限 SQL 正文摘要与 outbox 一致、原 outbox 独占租约仍有效、Mongo 同 Message/Group/Owner、时间/序号及其余非附件字段匹配、已知缺陷形态明确的记录;只更新派生附件字段并完整回读核对,不把固定 Id 更新宣称为 Mongo 原子 CAS。未知冲突保留 SQL 兜底,不改业务消息或模型运行、不扫描所有租户。
33
+ - 同一桌面实例的多个 Worker 必须共享本机模型容量预准入,在领取云端任务前取得名额;RPC 超时不等于模型终态,结果未知时停止自动重放并保留核对入口。
34
+ - 员工模型以 16,384 Token 为本功能默认且最高请求预算,不代表厂商输出能力;通过官方 prepareCall 同时冻结路由、能力和派发,按配置中的显式请求上限及剩余上下文收紧,保留用户 thinking/reasoning 控件。max-tokens 表示输出截断,必须记录 Uncertain 并等待核对,不能当完整成果或自动重试;预算不足应在派发前明确拒绝。
35
+ - 员工新运行只允许从用户所选且有效的 MCP 完整身份与当前显式项目群领取;未选群不自动领取其它群,切换连接或群后停止旧范围的新领取。已开始运行按原范围安全收尾,已保存的加密成果重报保留;不能因离群丢弃结果或重放结果未知的模型调用。
31
36
 
32
37
  - 桌面与手机配对的本机 HTTP 监听必须避开 Fetch 标准禁止端口。系统自动分配的端口也可能不可浏览器访问;只有浏览器允许的真实监听端口才能进入配对 URL。自动命中禁止端口时关闭监听再有界重选,显式配置禁止端口须报错;权限和占用错误仍保留原错误,不改变系统动态端口范围、不绕过浏览器安全策略。同步上游时保护共同端口选择器、配对监听与对应回归。
33
38
 
34
- - 同步上游前读取内部源码根目录 `.microi-upstream.json`、`同步dsh-desktop上游.md` 与维护交接记录;分别核对 dsh-desktop 提交、Harness 官方 tag/提交、npm 版本与锁定 integrity。三方比较和补丁意图迁移、干净 `npm ci`、回归及真实界面验收通过后才能推进基线。禁止用整目录覆盖或删除补丁来通过同步。Harness 的同级权限请求应直接使用当前有效模式;提升权限必须填写非空理由,普通调用不要附带这两个升级字段。
35
- - Microi Agent 是内部仓库中的独立桌面发行物,直接基于 DataElement/dsh-desktop 与 DeepSeek Harness 二次开发,内置固定版本的 Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
36
- - 官方 AI 登录只走桌面账号窗口,固定 `https://api.itdos.com`、`OsClient=iTdos`,使用当前用户的中转 Key 和额度。不要让用户把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
39
+ - 1.3.8 起生产宿主为 DeepSeek 官方桌面。同步前读取内部源码根目录 `同步DeepSeek官方上游.md`、`apps/official-desktop/upstream.lock.json` 与维护交接记录;核对官方提交、归档 SHA、版本与完整锁。保留原始快照、自有层和精确接缝,干净安装、回归及真实包验收后才能推进基线。`同步dsh-desktop上游.md` 仅用于历史派生模块,不得恢复退役宿主或 PPT 模式。
40
+ - Microi Agent 是内部仓库中的独立桌面发行物,基于 DeepSeek Harness 官方桌面源码及独立吾码差异层,内置固定 Harness、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。历史 DataElement 派生模块及许可证仍保留。
41
+ - 官方 AI 登录只走吾码桌面账号窗口,在受支持的 `https://api.microi.net` / `https://api.itdos.com`、`OsClient=iTdos` 使用本人的中转 Key 和额度;它是员工业务 MCP 之外的可选计费来源。不要把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
37
42
  - 业务连接在「服务器连接(MCP)」中单独添加、登录;官方 AI 账号不授予业务租户权限。项目初始化和资源同步优先使用桌面「项目资源」;其余业务继续调用同源 MCP 的原工具。
38
43
  - macOS 登录凭据通过桌面 Keychain/受限 IPC 管理;不要在 macOS 改跑当前只支持 Windows 凭据恢复的 `microi auth login`。不要手改 Token 文件。
39
44
  - 桌面安装包中的 Harness、Node 和同源资产随桌面版本升级;不运行 npm 自更新去改写正在使用或已签名的安装目录。外部 Codex / WorkBuddy / CLI 的后台更新规则保持不变。
40
- - 桌面 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 的直接数据库访问。
41
- - Microi Agent 左侧「功能区」动态读取 dsh 的 `settings.section` 注册表,并在主界面 `main` 面板中渲染原设置组件;第一项「Microi吾码」合并官方账号和吾码 AI,第二项为「服务器连接(MCP)」,之后提供 AI 员工、采集引擎、环境与服务管理入口,再接 dsh 原生设置。功能区与工作区可拖动调高,默认无滚动条;首页/聊天页不显示虚假选中态。底部入口显示「关于 v版本号」及 `LicenseType` 版本标签,连接手机入口保持同一行。品牌显示 `Microi Agent` 与 `HARNESS` 标签,新安装默认浅色,用户仍可切换浅色/深色。
45
+ - 桌面 UI 通过官方 slots 接入吾码面板,首页保留官方会话区及吾码 AI 大类与 29 项图像工具。工具目录以 `Microi.Client/src/views/ai-engine/ai-image-tool-directory.js` 为事实源,点击在「Microi吾码」主面板使用;模型来源可选当前对话模型、吾码官方中转或已登录业务连接。AI 数据分析通过同源 MCP 调用 `mci_ai_data_assistant`。1.4.0 起不挂载旧 dsh-desktop PPT 模式、模板 dock 或独立菜单;普通 Office 技能、用户文件与历史不删除。
46
+ - 左侧工作区位于功能区上方;功能区用官方注册表接入插件、自动化任务、审查、吾码账号与 AI、服务器连接(MCP)、AI 员工、采集及环境服务管理,独立滚动且窄屏可达。底部「关于 v版本号」与连接手机同一行;意见反馈显示吾码官网及 QQ 群 51050055,不跳 DeepSeek 登录。自定义应用 Logo/名称只改变桌面本机品牌。默认浅色并支持深色。
42
47
  - 桌面安装包版本从 `1.0.0` 开始,使用吾码三段十进制进位规则。正式新版本先在发布源码中执行 `version:bump`,核对并提交三个版本文件;Mac 拉取后使用 `bash ./一键打包Mac.sh` 在临时 Git 工作树中打包当前已提交版本,默认不再升版,失败也不能把生成文件留在原检出目录。`--current` 仅作旧命令兼容;同版本本地重打包不得覆盖已公开的不可变产物。测试、类型检查和普通 Web 构建不升版。
43
48
  - Windows 安装包的构建成功、Authenticode 签名、SmartScreen/商店信任、HDFS 上传与 CDN 回读是不同证据;双击 `一键打包Windows.cmd` 时自动探测 Microsoft Artifact Signing 或本机可信证书,没有凭据则继续生成明确标记的未签名包,显式 `-Signing Signed` 才失败关闭。签名必须先覆盖安装器及独立执行文件,再计算发布 SHA256。macOS 默认 `bash ./一键打包Mac.sh` 同样自动探测并在无凭据时生成未签名包;`--signed` 是正式门禁,必须在缺少证书或公证钥匙串时失败,并通过 `codesign`、`spctl`、`stapler validate` 后才标记已签名公证。
44
49
  - Harness 本机探测必须以独立硬计时器约束 TCP 连接和响应头,Node 失败后用 Chromium 复核。两个通道在认证地址公布后连续连接失败时,仅重启一次到 IPv6 `::1`;IPv6 也必须实际取得有效 HTTP 响应,不得伪造就绪、绑定所有网卡或关闭鉴权。普通模式与安全模式使用同一规则,500 响应不得触发网络回退或算作就绪。日志同时记录桌面版本、实际监听地址和进程内 HTTP 自检;探测不带凭据、不跟随重定向、不输出自检 Token。恢复日志只去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布运行 `scripts/verify-harness-startup.mjs`,以包内 Node/Harness、真实 Chromium 页面验证普通与安全模式、Node 超时回退、IPv4 双通道受阻后 IPv6 鉴权和双通道真实无响应的有界失败。Mac 验收与 Windows 真机、安装升级、客户设备验收分别记录。
@@ -76,7 +76,9 @@ System.Drawing.Common 的 .NET 10 支持库引用 System.Formats.Nrbf,Dos.Comm
76
76
  | 生产 Linux、快速安装、可滚动升级 | Docker/Compose |
77
77
  | 无互联网环境 | 在联网机制作离线包,再在目标机校验并安装 |
78
78
  | Windows 传统环境 | IIS + .NET Hosting Bundle + 独立依赖 |
79
- | 开发/调试 | 后端源码 + 前端 Vite,本地依赖或隔离容器 |
79
+ | 开发/调试 | 复用健康服务,或启动后端源码/隔离目录中的编译产物 + 前端 Vite;优先共用已授权开发/测试依赖 |
80
+
81
+ 本地测试遵循 `../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”:不能按 AI 任务或双节点测试默认新建整套 Docker/Compose;每轮结束均收回自建进程和获准创建的临时容器,既有共享服务保持原状态。
80
82
 
81
83
  本地 `Microi.Client` 默认读取 `src/config.json` 的 `ApiBaseDev`,也允许在 `#` 前通过 URL 参数
82
84
  临时指定运行目标:
@@ -130,7 +132,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
130
132
  - LibreTranslate 属于一键安装默认组件:安装选择空输入按 `1` 处理,语言套餐空输入按基础套餐 `1` 处理;因此用户一路按 Enter 使用官方推荐组合。只有明确输入 `0` 才跳过,提示、端口预算、官网文档和静态回归测试必须一致。
131
133
  - OCR 的 Upgrade29 与 LibreTranslate 的 Upgrade31 字段门禁只在对应附加服务部署检查通过后回读,每秒一次、最多 15 秒;首轮成功就继续,超时快速关闭对应能力并提示镜像/迁移版本,不得退回 5 分钟空等,也不得直接创建字段绕过平台升级。附加能力门禁失败不得中断已通过完整升级链和 readiness 的核心平台。
132
134
  - 官方 API/Web 使用浮动 `latest` 时,生成的 Compose 必须设置 `pull_policy: always` 或在启动前显式拉取并核对,不能因宿主机已有同名镜像就复用旧版本;测试专用本机镜像覆盖必须明确使用 `never`,避免误访问或覆盖远端镜像。
133
- - 端口、密码和数据目录全部生成后,安装器必须注册统一的失败收尾:数据库、缓存、存储、API/Web、完整升级链或 API liveness/readiness 等核心后段错误保留原始非零退出码,并输出标题为“安装未完成”的恢复汇总,列出已生成端口、凭据、目录、失败阶段和全部容器状态。OCR/LibreTranslate 的网络、镜像、容器或 SaaS 配置失败只记录附加能力警告、保持对应能力未启用并继续核心安装。两种结果都不得把 `Running` 当 readiness,也不得绕过 Upgrade29/Upgrade31 或完整升级链门禁。
135
+ - 端口、密码和数据目录全部生成后,安装器必须注册统一的失败收尾:数据库、缓存、存储、API/Web、完整升级链或 API liveness/readiness 等核心后段错误保留原始非零退出码,并输出标题为“安装未完成”的恢复汇总,列出已生成端口、受限凭据文件位置与脱敏状态、目录、失败阶段和全部容器状态。OCR/LibreTranslate 的网络、镜像、容器或 SaaS 配置失败只记录附加能力警告、保持对应能力未启用并继续核心安装。两种结果都不得把 `Running` 当 readiness,也不得绕过 Upgrade29/Upgrade31 或完整升级链门禁。
134
136
  - 从客户/旧库恢复安装时,安装器只按 `OsClient + OsClientType + OsClientNetwork + IsEnable + IsDeleted` 处理目标主租户:0 条时幂等创建最小可运行记录,1 条时原位复用,超过 1 条失败关闭。禁止把所有活动 `sys_osclients` 批量改成输入的 OsClient;新记录不得落库 `DbConn/DbReadConn/DbMongoConnection` 或 Redis 主机、端口、密码,这些继续由十项编排启动配置提供。MinIO、OCR 等安装值随后只更新这个精确三元组并回读唯一性。
135
137
 
136
138
  ### 复盘:普通帐号运行安装器直到步骤 5 才因 `/microi/compose` 权限失败
@@ -165,7 +167,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
165
167
 
166
168
  - 健康开发服务默认复用;需要重载源码时串行重启。长期后端只从项目目录执行
167
169
  `dotnet run --launch-profile Microi.net.Api`,禁止直接运行 `bin/Release/net10.0`
168
- 或 `bin/Release/publish` 作为 E2E 服务。
170
+ 或 `bin/Release/publish` 作为长期 E2E 服务。一次性测试本轮编译/发布产物时,复制到任务隔离目录启动,并登记身份、端口与最终收尾,避免占用共享 Release 输出。
169
171
  - API、PC、官网、Agent 分别使用 `api-release.lock`、`pc-release.lock`、`website-release.lock`、`agent-release.lock`,可并行发布;同类发布互斥。合并发布只取得所选产品的锁,部分取得失败时释放本次已取得的锁。
170
172
  - API 启动前执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`,PC 使用 `assert pc`;官网/Agent 不阻塞二者。旧全局锁仅在真实命令入口和状态目录证明 API 热修复或 Agent 归属后缩小阻塞范围,未知锁仍阻塞,不能删除活跃锁。
171
173
  - Windows 发布前调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease -ReleaseScope api|pc|all`。API 仅处理匹配工作区的后端与 Release DLL;PC 仅处理匹配的 Vite;官网不清理二者。禁止按进程名全机清理。
@@ -179,7 +181,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
179
181
  `Microi.net.Api/bin/Release/net10.0` DLL。只结束 `VBCSCompiler` 不能解决正在运行的
180
182
  `.NET Host` 对业务 DLL 的锁定。
181
183
  - Edge/Chrome 用户浏览器、VS Code 的 Playwright Test Server、MCP/语言服务 Node、
182
- 数据库和 Redis 不属于发布清理范围。人工查看使用进程管理器的 `-Action Status`。
184
+ 既有或借用的数据库和 Redis 不属于发布清理范围;本轮新建临时依赖仍须按基础规范收尾。人工查看使用进程管理器的 `-Action Status`。
183
185
  - PowerShell 7 下的 macOS/Linux 进程管理使用真实端口、命令行、精确大小写 CWD 和启动时间回读;身份不明或 PID 复用时失败关闭,只结束已核验根进程的后代。无扩展名 `Microi.net.Api` apphost 须采用规范绝对可执行路径,精确位于当前 API 项目的 `bin/` 下,且 CWD 精确等于项目目录;非规范路径、同名外部程序、读取失败均拒绝。身份函数回归进入 Full,实际停止能力仍需自有进程与端口验收。专项回归必须在自有目录、端口和真实进程中证明当前工作区可停止、外部工作区保留,以及原始文件锁诊断;不允许为了跨平台放宽跳过门禁。
184
186
 
185
187
  ## 一键发布产物边界与缓存
@@ -69,7 +69,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
69
69
  | `system-engine/vision-engine.md` | vision-engine, ai-engine, microi-microservice, app-store, v8-security | ONNX 视觉特征、租户样本匹配、异步 AI 回退、摄像头帧、人脸治理、微服务与商城交付 |
70
70
  | `system-engine/translate-engine.md` | translate-engine | 多语言与翻译供应商 |
71
71
  | `system-engine/unity-integration.md` | unity-integration, v8-api-config, microi-client-frontend | Unity UPM、WebGL/Windows、多人租约、公屏、DiyToken 与 V8 通讯边界 |
72
- | `system-engine/visualization-engine.md` | page-engine, microi-ui | 3D、CAD、goView 与数据大屏能力边界 |
72
+ | `system-engine/visualization-engine.md` | page-engine, microi-ui, microi-microservice | 3D、LIS 型材库、CAD、goView 与数据大屏能力边界及微服务交付 |
73
73
  | `system-engine/wf-engine.md` | v8-workflow | 工作流设计和事件 |
74
74
  | `v8-engine/ai-apiengine.md` | ai-engine, v8-api-config, microi-system-delivery | AI 编程与短提示词;完整开发默认清单覆盖原推荐提示词 1–8 |
75
75
  | `v8-engine/api-engine.md` | v8-api-config, v8-utilities | 接口上下文、配置、分布式锁续租和调用 |
@@ -231,6 +231,11 @@ AI 生成菜单微服务时,应优先封装一个 `callMicroiHost(action, data
231
231
 
232
232
  ### 3D 数字孪生动态资产与许可门禁
233
233
 
234
+ - 通用 3D 引擎导入 Tekla `.lis` 时,先确认它是型材/截面库而非完整工程模型;缺少构件长度、位置与装配关系,不能宣称自动还原楼宇或钢结构。保留 GLB/GLTF 原加载流程,LIS 使用独立的文本解析与参数化几何流程。
235
+ - 型材库先列出规格、搜索/分页和可预览状态,不自动选择或一次性实例化全部规格;用户手动选择后输入毫米长度,再明确添加到场景。尺寸统一按 `1000 mm = 1 m` 转换,长度不能伪装成文件提供的工程数据。保存/导出场景携带已校验的截面参数和长度,重新打开时重建几何,沿用原有场景保存、渲染、材质和变换流程,不依赖原电脑文件路径或新增一套持久化。
236
+ - 当前 LIS 适配的 `PROFILE_TYPE/PROFILE_SUB_TYPE` 精确组合为 H/I `1/1001`、L `2/2001`、圆管 `7/7001`、矩形空心 `8/8002`、C `9/9001`、T `10/10001`。BP 类型 `20`、H 特殊子类型 `1002`、其它组合、实心圆钢、变截面及非零截面坐标偏移必须展示具体原因并拒绝生成,不能只按规格名称猜形状。H/I/L/矩形空心/C/T 的圆角或斜翼缘采用近似轮廓时,界面和交付文档明确显示“近似预览”;圆管必须保留内孔。预览不作为加工、结构计算或施工精度依据。
237
+ - LIS 文件内容是数据,不执行脚本、宏、表达式或外部资源;先校验文件大小、记录数量、字段类型、有限数值、壁厚与内孔,再创建有界几何。浏览器本地预览无需上传原文件,保存服务器场景继续使用已有租户和权限边界。验收至少覆盖非法文本、超限与非有限尺寸、不支持类型、内孔、毫米换算、长度校验、保存恢复、旧 GLB/GLTF、页面卸载释放及真实 WebGL 画面。
238
+ - 官方引擎必须从版本管理的应用源码契约定位唯一源码根,测试归应用自身 `tests/`;不能从旧主前端同名目录或其它同步副本择新构建。交付分别回读私有源码、公有运行清单、包含对应运行版本的官方平台包、目标租户安装与页面实际操作,Docker 更新不能代替目标应用安装。
234
239
  - 通用 3D 设计器/渲染器与某一楼宇的定制数字孪生应使用不同 AppKey、源码目录、路由清单、运行资产与商城安装包。官方 `Platform` 包只拥有通用引擎和平台菜单;项目专属模型/贴图、业务表与字段、IoT 接口、演示数据和业务菜单属于独立业务应用(本项目采用 `MicroService`)。批量“安装/更新全部平台应用”只覆盖 `ApplicationType=Platform`,不得借平台包向所有租户散发某个客户的项目。拆分时要检查旧商城包的 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 回退选择,清空旧选择后重新制作安装包,并分别回读两个包的资源快照与真实浏览器入口。
235
240
  - 道路车辆、人物、设备动画不能只靠静态截图验收。浏览器测试应同时断言对象数量、时间推进后的坐标/骨骼变化、路径末端回绕、切换楼层后的恢复及 `prefers-reduced-motion` 设置下的实际行为;测试探针只暴露非敏感数量和位置,不暴露 Token、人员或设备隐私。若持续运动本身是用户明确要求的核心功能,不得把系统的“减少动态效果”误用为整体动画总开关;只降级装饰性过渡,并提供可见、可键盘操作的暂停/恢复控制。页面隐藏或暂停期间冻结业务动画时钟,恢复时扣除停顿时间,避免物体瞬移。
236
241
  - 外部 GLB/GLTF 进入官方运行包前,逐项保存作者、原始地址、许可证、是否允许商用和再分发、署名方式、三角面数、纹理大小及优化记录。“免费下载”、搜索摘要或仓库内没有许可证都不构成可再分发授权;`NC`、`ND` 或用途不明的资产默认不进入商业应用包。
@@ -35,14 +35,14 @@ Manifest 使用 `tables[].formBanner`;未显式配置时仍按字段类型选
35
35
  模块引擎或 `sys_menu`。逐步建模在字段完成后调用 `microi_configure_form_banner` 回读验收。
36
36
 
37
37
  <!-- microi-progressive:begin -->
38
- <!-- microi-progressive:chunk id=microi-system-delivery-000 sha256=bdbc78e88e50c53a3bd29eeb76ce34e3fed8eec5f4ba16371417d2aeee9c2fbe -->
38
+ <!-- microi-progressive:chunk id=microi-system-delivery-000 sha256=04f08fdc316d253f167e26923066e134763ab129dd830f833c762214613c607f -->
39
39
  ## 交付总原则
40
40
 
41
41
  1. **先事实源,后建模**:先读需求文档、截图、现有蓝图、数据库结构和菜单结构,形成业务蓝图;不要边猜边建表、边猜边写接口。
42
42
  2. **先平台能力,后临时绕路**:能用 MCP/平台 API 修改元数据、字段、菜单、事件、接口引擎、数据源、任务调度,就不要新建临时 `_fix_*`、`_mcp_*` 接口引擎绕过平台能力。MCP 缺能力时优先补 MCP/后端,再补 Skill。
43
43
  3. **平台通用层禁止项目定制**:Microi.Server、Microi.Client、MCP、VS Code 插件、microi.skills 中不得写某个项目专属文案、专属上传限制、专属业务规则。项目规则应在租户表、接口引擎、业务配置、前端项目或业务蓝图中。
44
44
  4. **本地改完必须远端验收**:V8 文件、表单事件、菜单按钮、数据源、工作流、页面配置等不能只改本地文件。必须写入远端数据库,并通过 HTTP 或平台工具回读确认。
45
- 5. **测试不等于接口能通**:交付前必须跑构建、接口契约、真实登录、核心写流程、截图、人眼复核、网络 404/5xx 守卫、远端同步状态。
45
+ 5. **测试不等于接口能通**:交付前必须跑构建、接口契约、真实登录、核心写流程、截图、人眼复核、网络 404/5xx 守卫、远端同步状态。依赖默认按 `workspace-conventions` 的“平台回归与独立应用测试归属”使用当前 MCP 实际 MongoDB 版本与 HDFS 提供商;明确的兼容任务才扩展矩阵,未执行项如实记录。
46
46
  6. **生产数据谨慎优先**:涉及真实会员、余额、积分、订单、库存、卡券、收益、佣金、分润等资金/资产数据时,先确认服务器、租户、目标表、筛选条件和影响范围,再执行 MCP、接口引擎或 SQL 写操作。除用户明确要求清理/重置或必须修复错误数据外,不得擅自批量改真实数据。
47
47
  7. **默认按分布式交付**:任何后端能力都假设会有至少两个节点连接同一数据库和 Redis,并经历滚动升级、重复投递与节点硬重启。定时任务/消费者使用分布式租约且业务本身幂等;会话、票据和任务状态使用共享存储;新旧版本并存时采用“先扩展、后迁移、再收缩”。只在单节点验证通过不能视为完整交付。
48
48
  8. **业务逻辑默认接口引擎、元数据升级默认应用商城**:先用低代码 CRUD/事件,再用接口引擎;只缺底层原子能力时先扩展 V8,只有协议/鉴权/密钥隔离/运行时内核才进入 C#。表、字段、Tab、菜单、权限、引擎、页面和任务等可打包资源不得新增 `Microi.Upgrade` 定制类;官方开发者通过 `microi_itdos` 发布官方应用后再由目标租户 MCP 更新,无官方权限时只升级自己的租户。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=4b999e29e04c192319690a886ba25bb8952d5cc1910db8fa151b583d599b2be5 -->
5
+ <!-- microi-progressive:chunk id=microi-system-delivery-006 sha256=1dd7c9face286616c392ece855acac7d1a3358afbad904a4ff6da5f10c0a8e01 -->
6
6
  ## 自动化测试必须覆盖的坑
7
7
 
8
8
  ### 后端统一测试与发布门禁
@@ -24,6 +24,7 @@
24
24
  `MICROI_TEST_ALLOW_WRITES=YES`。只有用户明确授权时才可对真实租户执行;
25
25
  真实租户默认只做登录和只读烟测,写入必须限定到名称/说明明确为自动化
26
26
  测试用途的专用表,并使用唯一前缀、`finally` 清理和清理回读。
27
+ - Full 的本地程序与依赖按 `../../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”执行:优先复用健康的本地源码程序、隔离目录中的编译产物和同组既有依赖,以租户、数据库或命名空间隔离测试,不按任务重复创建 Docker/Compose。每次测试成功、失败、取消或因资源不足暂停时,都结束本次自有测试进程并收回新建临时容器,独立回读进程、端口和容器状态;既有共享服务保持原状。这些生命周期要求不减少 Full 的用例、断言或发布门禁。
27
28
  - Full 至少覆盖完整 Release 构建、FormEngine 单条/批量/按条件 CRUD、
28
29
  查询和计数、ApiEngine GET/JSON POST、API 实际启动与健康检查、真实登录、
29
30
  匿名系统配置脱敏、清理回读、NuGet 漏洞/弃用审计。NuGet 全面升级后不能
@@ -38,6 +39,7 @@
38
39
  - 即使 Full 通过,涉及定时任务、消息消费、共享缓存、迁移或滚动发布时,
39
40
  仍需两个节点连接同一 Redis/数据库,覆盖重复投递、锁持有者退出、
40
41
  Redis/MongoDB 短暂故障、响应前重启和新旧版本共存。
42
+ 两节点默认是两个本机源码或编译产物程序进程连接同组依赖,不等于两套 Docker 环境;破坏性故障测试仅作用于明确归属的隔离资源,不能停止复用的共享数据库或缓存。
41
43
 
42
44
  ### 登录与账号密码
43
45
 
@@ -26,7 +26,7 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
26
26
  创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md`,并读取其[首版交付与外部服务验收](../microi-mobile-app-quality/references/mobile-first-delivery.md)。手机号快捷登录、会话续签、导航几何、真实地图、页面动效和公开发布回读从首版纳入需求与测试,不能先交静态占位版,再等待用户逐页指出问题。涉及后台与第三方服务时按实际业务范围执行,既有授权和租户策略优先。
27
27
 
28
28
  <!-- /microi-progressive:chunk -->
29
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=ce7f36d1d7c3e3c6d10572da2cf29b783a5fcf043dc5568e9caed5e42bff5469 -->
29
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=5d3fe408d73474b25414ae370e94503aa6f0b05a419c4dd758ad7f9e58905fc8 -->
30
30
  ## 标准产品、视图协议与租户扩展
31
31
 
32
32
  动态表单的组织/树字段优先复用原生 `mci-native-field` 树形下拉与 `native-tree-options.mjs`,无需为小程序把后台 `Department` 改为普通 Select。读取 `Config.<Component>.Multiple/EmitPath`:组织单选叶值保存 Id,多选叶值保存 Id 数组,路径模式保存完整路径/路径数组,数组统一 JSON 序列化。支持祖先展开、搜索、清空、禁用、重试和只读回显;数据源旧模板不能代替当前授权组织树。业务字段联动放租户扩展,不执行任意前端 V8;验收覆盖保存格式、旧数据回显、失败/迟到响应及最近公司祖先联动。
@@ -44,9 +44,11 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
44
44
  - 表单元数据必须通过 `V8.FormEngine.GetDiyTableModel/GetDiyFieldList` 访问当前 FormEngine 缓存入口,并携带真实菜单授权上下文;页面和控件不得用普通 `GetFormData/GetTableData` 直查受保护的 `diy_table/diy_field`,也不得散落裸元数据接口 URL。
45
45
  - ViewSchema 未配置、配置不完整或网络暂时失败时,必须回退到菜单移动字段和完整 `diy_field` 定义;定制详情还必须把未显式编排的新字段追加到折叠分组,不能静默丢字段。
46
46
  - 列表、详情、编辑和保存请求应携带真实授权 `_SysMenuId`;客户端不能自行声明角色、数据范围或表权限,服务端仍是最终权限边界。
47
+ - 动态列表和子表必须读取授权菜单的 `SelectApi`,单条详情读取表级 `ApiReplace.Select`;接口缺失时沿用普通查询,接口失败时保留错误,不能回退到空物理表伪装暂无数据。子表继续传完整 `_TableChildAuth`、父子外键条件和分页参数;虚拟记录 Id 原样传递,分区月份由后端解析。接口地址只允许当前 API 同源,并委托已配置 SDK 处理租户与续签。只读日志的月份字段和支持的筛选能力由租户插件声明,普通表编辑权限保持原契约;验收覆盖预览、分页、详情、历史月份、跨设备拒绝及普通子表。
47
48
  - 原生详情进入编辑后,取消丢弃未保存字段并返回同一详情/Tab,保存成功后回读服务端结果并通知来源列表刷新;直接新增/编辑仍返回来源列表。验收覆盖系统返回、保存/子表失败、迟到响应和权限撤销,不能用重复压入详情页替代原实例恢复。
48
49
  - IoT/关联快照的“记录不存在”应展示业务空状态并隐藏表名/SQL,权限与网络失败仍保留真实错误;未知遥测使用占位值,零值和离线不能被当作缺失。依赖租户 V8 的契约测试从授权同步目录按唯一 ApiEngineKey 定位,测试前核验源码完整性与哈希,不靠旧分类文件夹名定位或跳过缺失依赖。
49
50
  - 小程序不得下载或执行任意前端 V8,不得使用 `eval/new Function`。字段显隐和联动使用白名单声明式规则,按钮使用 ActionSchema,复杂事务和校验进入 ApiEngine 或后端表单事件。
51
+ - 分片日志的时间筛选复用后台 SearchFieldIds 和统一筛选弹窗,不增加重复的月份、开始日期和结束日期控件。月份从已选时间推导,未筛选时查询当月;虚拟文本时间发送完整边界,缺省精度可按接口能力使用分钟,显式 DateTimeType 优先。草稿确认后生效、关闭取消、重置清空条件;结束包含整个所选精度。服务端在存储层过滤、计数和分页,缓存及迟到响应按已生效条件隔离;接口不支持跨月时在提交前明确提示。
50
52
  - ActionSchema 只能描述文字、图标、颜色、确认提示、参数映射、ApiEngineKey、原生 ActionType 和成功后的刷新/跳转;扫码、定位、拍照、拨号、导航等由受控原生适配器执行。
51
53
 
52
54
  仓库必须提供 AI 与人工协作约束文件、租户脚手架、Profile 构建/同步命令和架构检查。平台层改动至少同时构建标准 Profile 与默认交付 Profile;租户视觉改动还要执行多视口截图回归。这样其他同事使用 Codex、Claude、Copilot、Cursor 等工具继续开发时,会先读取相同规则,而不是依赖某次对话记忆。
@@ -38,7 +38,7 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
38
38
  不适合把 Playwright 用来替代 V8 单函数调试。单个接口引擎的入参输出优先用 VS Code 插件远程执行、MCP `microi_run_engine` 或后端单元测试。
39
39
 
40
40
  <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=playwright-e2e-002 sha256=2e92ff117b1c3b450e988776204ccecd9dd4d6a83bb08d86d32032b467abc174 -->
41
+ <!-- microi-progressive:chunk id=playwright-e2e-002 sha256=5874137c92e16fd5cc729fd9c23d051caa3e64438fc7bee1d717ae9c5a0f2a90 -->
42
42
  ## 临时文件与产物放置规则(必须遵守)
43
43
 
44
44
  AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测试报告**等,**绝对不能放在工作区根目录**,必须放在以下指定位置:
@@ -54,7 +54,7 @@ AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测
54
54
 
55
55
  **禁止在根目录创建的文件类型**:`*.mjs`、`*.py`、`*.ps1`、`*.sh`(一次性脚本)、`*.png`、`screenshots/`、`node_modules/`(无 package.json 时)、`obj/`(非 .NET 项目文件)、`dark-mode-*/`、`test-*/` 等临时目录。
56
56
 
57
- `.tmp/` 目录已在 `.gitignore` 中排除,AI 可以在此自由创建临时文件。任务完成后如无价值可以不清理,也可以整体删除该目录。
57
+ `.tmp/` 目录已在 `.gitignore` 中排除,AI 可以在此创建临时文件。收尾清理只允许针对已确认归属的本任务子目录;删除前核对解析后的绝对路径、所有权和保留价值,不得整体删除共享 `.tmp/` 或其它任务的产物。临时文件保留不等于允许保留测试进程或容器。
58
58
 
59
59
  **2026-06 强制补充**:AI 手写的一次性 Playwright 验证脚本、运行日志、截图和报告只能写到工作区根目录 `.tmp/`。不要写到 `Microi.Client/`、`Microi.Server/`、`microi.doc/` 或其它子项目目录,即使这些目录已有 `tests/` 目录也不例外。只有 Microi.Agent 插件正式初始化的可复用 E2E 工程,才使用 `.microi-e2e/`。
60
60
 
@@ -140,20 +140,21 @@ PW_HOME_PATH=/#/pages/index/index
140
140
  不要只说“代码已编译”或“需要用户自己重启后端”;除非用户明确要求不要中断当前服务,否则 AI 要主动完成重启。
141
141
 
142
142
  <!-- /microi-progressive:chunk -->
143
- <!-- microi-progressive:chunk id=playwright-e2e-007 sha256=6d285a719a85ce3f2c887b292c08cc69d9632964c341269f0f61bb2fdc403fac -->
143
+ <!-- microi-progressive:chunk id=playwright-e2e-007 sha256=ee40e4f023e1da07269f9ebb82522720c4f014cfc9500885db09778dd819b9a6 -->
144
144
  ## 服务自启动纪律(必做)
145
145
 
146
146
  执行自动化测试、截图巡检、接口引擎回读、`/apiengine/{key}` 验收时,如果本地后端或前端不可达,不能把 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听当作任务终点。必须先自动启动所需服务,再继续完整验证。
147
147
 
148
148
  同一工作区有多个 AI 对话时,服务自启动还必须遵守共享生命周期:
149
149
 
150
+ - 先执行 `../workspace-conventions/SKILL.md` 的“本地测试程序与依赖生命周期”统一规则:优先复用健康的本地源码程序、隔离目录中的编译产物和同组既有依赖,不按测试任务重复创建 Docker/Compose。需要双节点时启动两个本机程序进程连接同组依赖,不等于建立两套 Docker 环境。
150
151
  - API 服务启动前执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`,PC 服务使用 `assert pc`。Playwright `webServer`、自愈脚本或 AI 只在对应范围发布时等待;官网/Agent 发布不阻塞 `61500/61501`。同时启动前后端时分别检查两项。旧锁仅在真实进程证明所属范围后缩小阻塞范围,未知锁继续保护,不得删除活跃锁。
151
152
  - 端口健康且 PID/命令行属于当前工作区时直接复用,不得每个对话都无条件“先杀再启动”。
152
153
  必须重载源码时才串行重启,并在状态播报中说明旧/新 PID。
153
154
  - 本地长期后端使用项目目录中的 `dotnet run --launch-profile Microi.net.Api`,禁止把
154
155
  `bin/Release/net10.0` 或 `bin/Release/publish` 的 DLL 作为长期测试服务,否则会锁住
155
156
  一键发布的 Release 输出。
156
- - 一次性测试要关闭自己创建的 browser/context 和临时 webServer。VS Code 持有的
157
+ - 每次测试成功、失败、取消或因资源不足暂停时,都必须结束本次创建的 browser/context、临时 webServer 及其它自有测试进程;按统一规则收回新建临时容器,并独立回读进程、监听端口和容器状态确认无残留。复用的既有共享服务保持原状。VS Code 持有的
157
158
  `playwright test-server` 与用户 Edge/Chrome 不属于孤儿清理;禁止按进程名结束所有
158
159
  `node/dotnet/chrome/msedge`。
159
160
  - 只读盘点或精确停止使用 `Microi.Server/tools/Microi.LocalProcessManager.ps1` 的
@@ -9,6 +9,8 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
9
9
 
10
10
  你正在为 Microi 吾码平台编写文件上传/下载/返回相关代码。平台分布式存储(HDFS)支持阿里云OSS、MinIO、亚马逊S3,存储方案由 SaaS 引擎按租户配置。上传对象的 `Content-Type` 由框架按实际对象路径统一确定,覆盖 HTML、JS/MJS、CSS、JSON/MAP、SVG、字体与 WASM,未知后缀保留 `application/octet-stream`。MinIO、S3、OSS 普通与分片上传使用同一映射;该映射不替代上传权限、内容和配额校验。旧对象不会因后端升级自动改变元数据:先核对字节数和 SHA-256,再修正类型或按正式应用发布流程产生新版本。不要把源码与公有编译产物混在一起,也不要关闭 `nosniff` 掩盖类型错误。
11
11
 
12
+ 文件与发布测试默认使用当前 MCP 连接下、当前租户实际生效的 HDFS Provider;先只读核实提供商与对象范围,沿已授权隔离前缀执行公私权限、原始字节、哈希、MIME 与写后回读断言。已确定当前环境后,不再为其它 OSS/MinIO/S3 反复询问或新建存储;仅明确的提供商缺陷、迁移或兼容任务才扩展矩阵,并逐项报告真实执行与未覆盖范围。提供商不可用或断言失败必须保留真实错误,不能换提供商或省略回读来冒充通过。
13
+
12
14
  公开入口覆盖 `V8.uploadFile`、多文件 `V8.uploadFiles` 与 MCP `microi_upload_file_base64`。多文件上传必须限制并发、逐文件返回结果;Base64 工具只接受明确文件名、大小和租户内目标范围,写后回读路径、大小与哈希。
13
15
 
14
16
  ## MCP stdio 与完整包的传输边界
@@ -15,7 +15,8 @@ description: Microi V8 MongoDB 指南。用于使用 V8.MongoDb AddFormData、Up
15
15
 
16
16
  - `reports wire version 6 ... requires at least 9` 是驱动与服务端不兼容,不是日志为空,也不是 Token 失效。先记录原始错误和服务端真实协议,不能把 wire version 6 推断成 MongoDB 4.2。
17
17
  - 平台兼容镜像以含安全修复的驱动 3.11.2 构建,恢复平台 CRUD/日志所需的 MongoDB 3.6 协议路径;不是降级至 2.30,也不声明上游继续维护 3.6。来源、单文件补丁和摘要维护在 `Microi.Server/Microi.MongoDB.Driver/`。
18
- - 修改该兼容层必须通过真实 3.6 与当前 7.x 的认证、BSON、读写、索引、幂等重放、游标和租户隔离矩阵。不得只验证编译或 ping,也不得把驱动兼容当作修复旧数据库服务端自身漏洞。
18
+ - 普通开发与全部默认测试先从当前 MCP 同源只读诊断发现真实 MongoDB 版本,沿已授权隔离范围执行认证、BSON、读写、索引、幂等重放、游标和租户隔离断言;不为旧版或其它版本重复询问、建库或新增服务。配置标签和 wire version 不能冒充实际版本回读。
19
+ - 只有任务明确修改或验证存量兼容层、旧版本缺陷或跨版本升级时,才按该兼容目标扩展真实矩阵(例如需支持的 3.6 协议端与当前 MCP 实际版本),不固定假设当前端是 7.x。每个版本必须独立回读和实际执行,未执行记未覆盖;不得只验证编译或 ping,也不得把驱动兼容当作修复旧数据库服务端自身漏洞。
19
20
  - C# 驱动改动需要更新后端镜像才生效。镜像更新后通过 `microi_query_system_observability` 回读日志、队列持久化和错误状态;查询失败应原样报错,禁止返回成功空表。
20
21
 
21
22
  | 方法 | 说明 |
@@ -32,6 +32,12 @@ Preview 和确认均重验当前客户端、回调及 Scope;账号变化通过
32
32
  先升级前后端和系统设置/SaaS 应用,再登记客户端并真实验证绑定、登录、解绑及隐藏入口。
33
33
  通用 MCP Schema、字段、私密配置、接口引擎与商城工具足够完成配置,无需新增 Microi 专用管理工具。
34
34
 
35
+ 外部账号的列表与解绑同样必须先验证本人 DiyToken,再由可信宿主以精确租户和 Managed Key
36
+ 调用 `RunTrustedProtocolAsync`;绑定业务在进入租户 Hook 前消费 `RequireManagedProtocolContext`。
37
+ 不能仅因已有 `CurrentUser` 就放开 StopHttp,也不能把尚未消费的协议授权交给可编辑 Hook。
38
+ 列表/解绑提示“此接口已禁止http调用”时,配套检查后端不低于 8.5.10、SaaS引擎不低于 v8.4.23,
39
+ 保持内部绑定接口 `StopHttp=1`,并验收匿名、伪造可信参数、跨用户解绑及 Hook 重入均被拒绝。
40
+
35
41
  微信网站扫码登录先读取当前租户能力、`WeChatLoginEnabled` 和私密设置元信息,
36
42
  再核对开放平台已审核网站应用的微信登录权限与授权回调域名。
37
43
  `Login.WeChat.ClientId` 保存 AppID,`Login.WeChat.ClientSecret` 通过专用密钥工具保存,
@@ -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=e8e784198efa6cd233fa9da3be0292cd6c68cea2c10e35f8f94eaacd1d381033 -->
9
+ <!-- microi-progressive:chunk id=workspace-conventions-000 sha256=09810cd14d0b03a9b52469a851f851bb18f41aa8aad4ccdb4a59a97b006aa128 -->
10
10
  ## 任务启动前 Skill 读取规则(强制)
11
11
 
12
12
  AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端、后端、UniApp、文档、测试或交付任务前,必须先按任务类型读取相关 `microi.skills/**/SKILL.md`。不能等到写代码或出问题后才补读。
@@ -50,7 +50,7 @@ AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端
50
50
  - 平台 C# 单元/组件/集成测试归入 `Microi.Server/Microi.Tests`。平台前端、平台内置应用包与平台 V8 的 Node 行为测试可留在责任源码旁,由 `Microi.Tests/run-tests.ps1` 自动发现执行;平台真实浏览器、数据库及第三方集成归入 Full 或平台专项验收,不得冒充离线单测。新增公共后端能力同时补相应 HTTP 闭环。
51
51
  - 官方或社区独立业务应用、游戏及客户项目的测试归应用自身源码根的 `tests/` 或独立测试工程,由该应用自己的测试和发布入口执行;不得放入 `Microi.Tests`、创建转调包装或接入平台 Quick/Full。官方发布身份不改变测试归属。应用开发中涉及平台通用缺陷时,仅把通用最小回归夹具加入平台门禁,应用业务断言仍在应用项目维护。
52
52
  - `Microi一键编译发布.sh` 的所有 PC/API 镜像路径(包括仅推送、热修复)都必须先通过 Full;缺少环境、零用例、失败、取消、跳过、待办或无法解析测试结果一律停止。禁止关闭断言、删测试、排除失败项目或修改门禁阈值来发布。
53
- - 测试成功必须绑定本次候选源码和实际构建上下文的内容哈希,构建后、每次推送前复核。旧产物没有可验证回执或源码/产物漂移时必须重建重测,禁止“当前源码通过测试 + 推送另一份旧 DLL/前端 dist”。
53
+ - 测试成功必须绑定本次候选源码和实际构建上下文的内容哈希,构建后、每次推送前复核。旧产物没有可验证回执或源码/产物漂移时必须重建重测,禁止“当前源码通过测试 + 推送另一份旧 DLL/前端 dist”。 所有测试默认使用当前 MCP 经同源只读发现的 MongoDB 实际版本与当前租户实际生效的 HDFS 提供商;目标唯一时直接沿已授权隔离范围执行,不为旧 MongoDB 或其它 OSS/MinIO/S3 反复询问、新建服务或替换当前提供商。只有明确的兼容、迁移或提供商缺陷任务才扩展真实矩阵;未执行项如实记未覆盖,不以同一端点冒充多版本,也不因环境发现获得生产业务写入授权。
54
54
  - 交付记录逐项列明修复与测试映射、执行数量、未覆盖边界和镜像摘要。覆盖率与 Full 都不能证明所有租户业务、任意生产数据和第三方系统绝对无误;真实客户路径仍需只读验收。详细矩阵见 `microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md`。
55
55
 
56
56
  ### Microi吾码非阻塞自动更新(强制)
@@ -95,7 +95,7 @@ Microi 平台后端功能必须默认按多节点部署设计:多个 API/Worke
95
95
  - 若要求宿主机掉电或 `kill -9` 窗口内也绝对零丢失,必须在返回业务成功前取得外部持久消息队列、共享 outbox 或同步 WAL 的持久化确认;“内存队列随后异步落盘”不能宣称覆盖尚未持久化的强杀窗口。
96
96
 
97
97
  <!-- /microi-progressive:chunk -->
98
- <!-- microi-progressive:chunk id=workspace-conventions-003 sha256=a3388a2f929f7316d2726fb09698732002fb19494682b6cc59220671bb106100 -->
98
+ <!-- microi-progressive:chunk id=workspace-conventions-003 sha256=7e7a88134f51f7e5712e9a41cfe516bae45ea8e9cb418a93cc39adeff3f3cbb4 -->
99
99
  ## 本地资源与 OOM 保护规范(强制)
100
100
 
101
101
  AI 在用户本机启动 Node.js、Vite、Webpack、dotnet build、Java、Docker build、浏览器自动化、压力测试或其他可能长时间占用 CPU/内存的进程前,必须先评估资源,不得为了“让构建跑过”无限抬高堆内存或 Worker 数。
@@ -106,6 +106,7 @@ AI 在用户本机启动 Node.js、Vite、Webpack、dotnet build、Java、Docker
106
106
  - 禁止将 `--max-old-space-size`、JVM heap、Docker memory 或类似上限设为接近物理内存总量。除非用户明确授权独占构建窗口,单个 AI 启动的进程树不得持续占用超过物理内存的 25%。
107
107
  - 后台/长任务必须记录根 PID、子进程、启动时间和独立日志,每 15-30 秒监测一次进程树内存与全机可用内存。任务失败、中断或达阈值时必须停止整个子进程树,不得遗留孤儿 Node/dotnet/Java 进程。
108
108
  - 全量构建无法在上述阈值内完成时,先停止并改用定向 lint、类型检查、按模块构建或按测试文件验证。如仍必须进行全量验收,应明确报告资源瓶颈,交由 CI/专用构建机或经用户明确同意的独占时段执行,禁止在用户正在使用的 VS Code 会话里硬跑。
109
+ - **本地测试程序与依赖生命周期(强制)**:优先复用健康源码/Vite,或在隔离目录启动已编译的吾码程序;共用已授权开发/测试依赖,用库、租户和命名空间隔离,不按 AI 任务或节点批量创建 Docker/Compose。新建本地 Docker 测试依赖须有必要性、最小清单及用户针对该动作的授权,一般开发、Full 或镜像发布不自动包含此动作。每轮成功、失败、取消及资源阻塞退出均收回自建进程、浏览器和临时容器并独立回读,保留既有共享服务;报告内存不足前先收回本任务遗留占用。详见[本地测试程序与依赖生命周期](references/progressive-02-microi-net-api-本地启动约定.md#本地测试程序与依赖生命周期强制)。
109
110
 
110
111
  ### `Microi.Client` 框架前端构建频率(强制)
111
112
 
@@ -2,6 +2,19 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
+ <!-- microi-progressive:chunk id=workspace-conventions-039 sha256=8cfc7d1e2a6a0a766845c79775efe8c7fb15ef805a47e8bc1965128e348f3062 -->
6
+ ## 本地测试程序与依赖生命周期(强制)
7
+
8
+ - 启动前盘点当前源码/Vite/API、数据库、Redis、MongoDB、MinIO、端口及其归属。健康且适用的开发/测试服务优先复用;已有服务不满足时,优先直接启动本地源码,或把本轮编译产物复制到任务隔离目录启动,避免锁住共享构建输出。登记实际源码、配置来源、PID、创建时间、工作目录和监听端口;不能启动另一份旧 DLL 冒充当前候选。
9
+ - 多节点 HTTP、并发和租户隔离测试优先使用多个本机吾码程序进程,连接同组已授权依赖;库、租户、Schema、Redis DB/Key 前缀和存储命名空间负责测试隔离。`fixture`、独立候选目录和 Full 不等于每个 AI 对话或节点都要创建一整套 Docker。复用仅限已授权开发/测试资源,不向生产业务库注入测试数据,也不对共享服务进行破坏性故障测试。
10
+ - 普通联调、登录、表单、V8 和浏览器验收不默认创建本地 Docker/Compose。确实只能通过指定引擎/版本、容器安装或镜像行为验证时,先说明既有依赖为何不能满足、最少容器清单、资源上限和收尾方式,并取得对该动作的明确授权;已授权同一清单不重复询问。一般开发、Full 和镜像发布授权不自动授权新增数据库等测试服务。已授权镜像的构建、推送和不启动容器的镜像字节检查按各自制品流程执行,不能扩张为启动整套测试基础设施。
11
+ - 创建或借用前建立资源台账,区分既有、借用和本轮新建;容器登记完整 Id、任务标签、数据挂载及消费者,进程登记 PID、创建时间、命令入口、工作目录和后代。共享依赖有唯一协调者,消费者退出不删除其它任务仍在使用的服务,也不能把他人资源仅凭名称认领为本任务资源。既有共享开发服务必要重启后的替换进程继承共享身份,收尾时保持健康;任务专用实例仍须结束,不能改称“共享服务”来免除清理。
12
+ - 每轮验证成功、失败、超时、取消、异常或资源门限不足退出时,都立即执行收尾,不等整个功能交付完成。脚本用 `finally` 并处理可捕获的中断;启动到一半失败也回收已创建资源,外层监督程序退出时由已登记归属的清理器兜底。停止本轮自建 API/Vite/测试程序、watcher、浏览器及其子进程,以及获准新建的临时容器;不因“待续”长期保留运行资源。确需继续后台运行时,记录用户要求、负责人和有效期限。
13
+ - 清理前重验精确身份,正常停止后独立回读进程及后代已退出、监听/连接已消失、容器已停止或移除;只输出白名单状态,不回显口令、Env 或连接串。既有或借用的共享实例保持原状态,不按进程名全杀,不执行全局 Docker prune、WSL/Docker 重启或删全部编排。
14
+ - 数据保留与运行资源分开处理:移除临时容器前核对实际持久卷;没有数据卷时,先归档唯一数据或只停止保留容器。Redis 等关闭持久化时,保留空卷不能代替保存内存状态,应先通过现有安全连接显式保存并校验落盘。资源紧张时避免默认使用 fork 式后台保存;保存失败或超时不得无限重试或删除唯一数据,应先停止写入消费者、保留容器与卷、列明失败,并采用有界恢复方案或请求数据处置决定。默认不删除数据卷、绑定目录、镜像及测试证据,不使用 `rm -v` 或 `down -v`;删除这些数据需要对应的明确授权。
15
+ - 资源不足时先盘点并收回本任务闲置/遗留的进程和临时容器,再重新测量,不能留下自建数据库占用后要求用户关闭应用。测试结果、清理结果、数据保留和渠道发布分别记录;清理失败必须列出精确资源及原因,不能声称“已全部退出”或用减少用例、关闭断言、放宽发布门禁代替恢复环境。
16
+
17
+ <!-- /microi-progressive:chunk -->
5
18
  <!-- microi-progressive:chunk id=workspace-conventions-024 sha256=92c453b5fafa36d68098b3da5817d0de260a3cf454d8cae63f71a3f65e57bbdc -->
6
19
  ## Microi.net.Api 本地启动约定
7
20