@microi.net/cli 5.5.9 → 5.6.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.
Files changed (161) 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/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +99 -99
  10. package/scripts/microi-cli.js +39 -36
  11. package/scripts/microi-skills.meta.json +341 -338
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +3566 -3566
  14. package/skills/README.md +4 -4
  15. package/skills/ai-engine/SKILL.md +45 -45
  16. package/skills/ai-platform-governance/SKILL.md +177 -177
  17. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  18. package/skills/app-store/SKILL.md +21 -4
  19. package/skills/business-blueprint/SKILL.md +85 -85
  20. package/skills/datasource-engine/SKILL.md +91 -91
  21. package/skills/dos-orm/SKILL.md +15 -0
  22. package/skills/dos-orm/references/api-reference.md +229 -229
  23. package/skills/email-engine/SKILL.md +80 -80
  24. package/skills/email-engine/references/v8-email.md +34 -34
  25. package/skills/job-engine/SKILL.md +154 -154
  26. package/skills/message-notification/SKILL.md +27 -1
  27. package/skills/message-notification/agents/openai.yaml +5 -5
  28. package/skills/message-notification/references/contracts.md +102 -102
  29. package/skills/microi-ai-app-auth.js +652 -652
  30. package/skills/microi-ai-application/SKILL.md +102 -102
  31. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  32. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  33. package/skills/microi-client-frontend/SKILL.md +47 -41
  34. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +4 -4
  35. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +30 -30
  36. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +58 -58
  37. package/skills/microi-codex/SKILL.md +2 -0
  38. package/skills/microi-codex-installer/SKILL.md +216 -216
  39. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  40. package/skills/microi-datasource-mapping/SKILL.md +67 -67
  41. package/skills/microi-db-schema/SKILL.md +6 -6
  42. package/skills/microi-db-schema/references/core-tables.md +18 -18
  43. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  44. package/skills/microi-db-schema/references/schema-overview.md +11 -11
  45. package/skills/microi-db-schema/references/schema.md +46 -46
  46. package/skills/microi-db-schema/references/table-catalog.md +57 -57
  47. package/skills/microi-deployment/SKILL.md +18 -1
  48. package/skills/microi-deployment/references/deployment-matrix.md +101 -101
  49. package/skills/microi-docs-coverage/SKILL.md +10 -0
  50. package/skills/microi-docs-coverage/references/capability-map.md +3 -2
  51. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  52. package/skills/microi-form-engine/SKILL.md +27 -3
  53. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  54. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  55. package/skills/microi-form-layout/SKILL.md +13 -13
  56. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
  57. package/skills/microi-frontend-sdk/SKILL.md +4 -4
  58. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +175 -175
  59. package/skills/microi-left-right-layout/SKILL.md +141 -141
  60. package/skills/microi-microservice/SKILL.md +2 -1
  61. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  62. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
  63. package/skills/microi-solution-quotation/SKILL.md +78 -78
  64. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  65. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  66. package/skills/microi-sso/SKILL.md +6 -0
  67. package/skills/microi-sso/references/acceptance.md +49 -49
  68. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  69. package/skills/microi-sso/references/inbound.md +53 -53
  70. package/skills/microi-sso/references/outbound.md +39 -39
  71. package/skills/microi-system-delivery/SKILL.md +5 -4
  72. 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 +7 -2
  73. package/skills/microi-ui/SKILL.md +7 -2
  74. package/skills/microi-uniapp-frontend/SKILL.md +134 -134
  75. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +136 -136
  76. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +124 -124
  77. package/skills/module-engine/SKILL.md +30 -14
  78. package/skills/ocr-engine/SKILL.md +2 -2
  79. package/skills/ocr-engine/agents/openai.yaml +1 -1
  80. package/skills/page-engine/SKILL.md +28 -28
  81. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +126 -126
  82. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +42 -42
  83. package/skills/performance-testing/SKILL.md +120 -120
  84. package/skills/playwright-e2e/SKILL.md +84 -84
  85. package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +68 -68
  86. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +64 -64
  87. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +20 -20
  88. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -69
  89. package/skills/print-engine/SKILL.md +11 -3
  90. package/skills/production-readonly-audit/SKILL.md +41 -41
  91. package/skills/report-engine/SKILL.md +71 -71
  92. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  93. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  94. package/skills/scripts/sync-embedded-skills.mjs +46 -0
  95. package/skills/scripts/validate-progressive-disclosure.mjs +8 -3
  96. package/skills/search-engine/SKILL.md +75 -75
  97. package/skills/spider-engine/SKILL.md +190 -190
  98. package/skills/system-observability/SKILL.md +169 -157
  99. package/skills/system-observability/references/memory-incident-triage.md +73 -73
  100. package/skills/translate-engine/SKILL.md +1 -1
  101. package/skills/ui-design/SKILL.md +3 -1
  102. package/skills/uniapp-mall-assets/SKILL.md +170 -170
  103. package/skills/unity-integration/SKILL.md +155 -155
  104. package/skills/unity-integration/agents/openai.yaml +4 -4
  105. package/skills/unity-integration/references/ai-app-delivery.md +103 -103
  106. package/skills/unity-integration/references/sdk-api.md +82 -82
  107. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  108. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  109. package/skills/v8-api-config/SKILL.md +4 -0
  110. package/skills/v8-cache-pattern/SKILL.md +306 -306
  111. package/skills/v8-crud-api/SKILL.md +29 -29
  112. package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +56 -56
  113. package/skills/v8-debugging/SKILL.md +143 -143
  114. package/skills/v8-explorer-tree/SKILL.md +64 -64
  115. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +201 -201
  116. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +118 -118
  117. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +32 -32
  118. package/skills/v8-file-upload/SKILL.md +5 -2
  119. 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 +2 -2
  120. package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +138 -138
  121. package/skills/v8-formengine-http/SKILL.md +126 -108
  122. package/skills/v8-frontend-events/SKILL.md +22 -22
  123. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  124. package/skills/v8-frontend-events/references/bluetooth-print.md +247 -247
  125. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +50 -50
  126. package/skills/v8-http-integration/SKILL.md +106 -106
  127. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +31 -31
  128. package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +5 -5
  129. package/skills/v8-image-processing/SKILL.md +190 -190
  130. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  131. package/skills/v8-image-processing/references/api-reference.md +623 -623
  132. package/skills/v8-menu-buttons/SKILL.md +103 -103
  133. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +145 -145
  134. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
  135. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +43 -43
  136. package/skills/v8-mongodb/SKILL.md +65 -65
  137. package/skills/v8-mq-mqtt/SKILL.md +175 -175
  138. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  139. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +137 -137
  140. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  141. package/skills/v8-saas-multi-tenant/SKILL.md +223 -223
  142. package/skills/v8-security/SKILL.md +1 -1
  143. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +122 -122
  144. package/skills/v8-sql-query/SKILL.md +7 -5
  145. package/skills/v8-table-event/SKILL.md +9 -2
  146. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +1 -1
  147. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +15 -15
  148. package/skills/v8-tcp-integration/SKILL.md +1 -1
  149. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  150. package/skills/v8-template-engine/SKILL.md +59 -59
  151. package/skills/v8-utilities/SKILL.md +92 -92
  152. package/skills/v8-utilities/references/client-api-index.md +143 -143
  153. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  154. package/skills/v8-utilities/references/server-api-index.md +74 -74
  155. package/skills/v8-workflow/SKILL.md +13 -4
  156. package/skills/vision-engine/SKILL.md +19 -19
  157. package/skills/vision-engine/references/architecture-and-acceptance.md +34 -34
  158. package/skills/workspace-conventions/SKILL.md +35 -12
  159. 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 +2 -2
  160. 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 +179 -179
  161. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +21 -21
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: workspace-conventions
3
- description: Microi 工作区全局约定。用于在本工作区工作时,确保临时文件、生成产物和项目专属内容放在正确位置,不污染仓库根目录。
3
+ description: 每次 Microi 任务开始前必读的基础规范。用于识别创始人源码工作区,检查平台功能的应用商城、官方文档、Skills 与 MCP 交付,并遵守共享工作区、进程、资源和发布边界。
4
4
  ---
5
5
 
6
6
  # Microi 工作区全局约定
7
7
 
8
8
  <!-- microi-progressive:begin -->
9
- <!-- microi-progressive:chunk id=workspace-conventions-000 sha256=69e7d2eba409a0e2095bb24e1b4f4b758e5749e43df34dcf696d47de40e57627 -->
9
+ <!-- microi-progressive:chunk id=workspace-conventions-000 sha256=0343e85fedcdf44a2dbf11c73b697b39a713d9b00054f979e40b9a085aae2353 -->
10
10
  ## 任务启动前 Skill 读取规则(强制)
11
11
 
12
12
  AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端、后端、UniApp、文档、测试或交付任务前,必须先按任务类型读取相关 `microi.skills/**/SKILL.md`。不能等到写代码或出问题后才补读。
@@ -16,6 +16,34 @@ AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端
16
16
  - 涉及 V8 CRUD、SQL、上传下载、导入导出、菜单按钮、表单事件、前端页面或自动化测试时,继续读取对应专项 Skill。
17
17
  - 最终交付说明必须能逐条对应用户编号需求;不得遗漏、合并或把仍可执行的需求写成“下一步继续”。
18
18
 
19
+ ### 吾码创建人身份识别(强制)
20
+
21
+ - 每次新对话或接续 Microi 任务时,先检查工作区根的 `Microi.Server/Microi.net/`:目录必须存在,并且 `rg --files Microi.Server/Microi.net -g '*.cs'` 至少返回一个真实源码文件,空目录不成立。满足条件即按“吾码创始人(创建人)的官方完整源码工作区”处理;不要求本次代码恰好修改在该目录内。此标记决定开发交付规范,不代替真实 MCP 登录、官方发布权限或用户授权;目录缺失、为空或只有编译产物时按普通用户工作区处理。
22
+ - 对平台级新增、增强或修复,无论改动位于前端、后端、MCP、插件还是内置应用,都必须在计划和收尾中执行下列四项检查。规则留在本入口,不得移入仅按需读取的参考文件、单个专项 Skill、项目说明或聊天记忆。
23
+
24
+ ### 平台功能四项同步检查(强制)
25
+
26
+ 确认创始人源码工作区后,同时读取 `app-store` 与 `microi-docs-coverage`;对每个功能逐项记录“需要/无需修改 + 依据 + 完成证据”,不能因只改 C# 或只修一个客户问题而跳过平台能力的检查。
27
+
28
+ | 检查项 | 何时必须完善 | 交付证据 |
29
+ |---|---|---|
30
+ | 官方应用商城 | 涉及系统设置、表/字段/Tab、菜单/权限、接口引擎/事件、数据源、页面、工作流、任务、内置应用或种子数据 | 通过已校验 `https://api.itdos.com + OsClient=iTdos` 的 `microi_itdos` 更新官方母版并发布归属应用,回读版本、状态、包正文与哈希;基础空库包和存量增量应用都相关时同时更新 |
31
+ | 官方中文文档 | 新能力、配置入口、参数、兼容条件、权限、使用方式或可感知行为发生变化 | 原位补充 `microi.doc/docs/doc/` 对应页面,给出最小示例与升级要求,并完成相应文档检查;不手工维护英文副本 |
32
+ | 吾码 Skills | AI 需要知道新的使用决策、配置方法、工具签名、限制、排错方式或验收条件 | 更新责任 Skill 及必要参考、能力映射,并验证基础入口、插件/CLI 分发与后端内嵌知识链路;不能只记在当前对话或本地 memory |
33
+ | 吾码 MCP | AI 尚不能安全发现、配置、调用、发布或回读该能力,或现有工具的 Schema/说明缺失、过时 | 优先扩展现有通用工具及其 Schema、说明、测试;既有工具完整覆盖时无需新增工具,但必须列明可复用工具及验证依据 |
34
+
35
+ - “无需修改”必须逐项有具体理由,例如纯内部优化无元数据变化可不升应用版本,现有 MCP 已支持该配置可不新增工具;不得默认四项都做,也不得默认四项都省略。需要修改的项目应在本次授权范围内完成并验证,受权限、网络或发布渠道阻挡时明确未完成项,不能用本地修改代替线上发布。
36
+ - 任务若只要求分析、评审或制定规范,仍保持只读或仅修改指定规范;身份标记不授权无关线上写入。客户部署、容器更新和应用自动安装与官方发布是独立动作,服从用户指定的手动/自动边界;用户明确手动更新时不得擅自部署。
37
+ - 收尾必须区分“源码/文档已修改、测试通过、应用已发布回读、Skills/插件已打包或已分发、镜像已推送、客户已安装或已部署”。只有实际渠道验收成功才能说其它用户已可获取;不得把文档本地构建或插件本地副本同步称为已上线。
38
+
39
+ ### 每个新增与修复必须进入统一回归门禁(强制)
40
+
41
+ - 创始人源码工作区的每个功能新增、缺陷修复和兼容性调整都必须同时交付可重复执行的回归测试;先证明旧行为失败,再验证修复成功,覆盖正常、边界、失败、安全与存量兼容路径。不得只改源码或用手工截图代替自动回归。
42
+ - C# 单元/组件/集成测试归入 `Microi.Server/Microi.Tests`。前端、应用包与 V8 的 Node 行为测试可留在责任源码旁,但必须由 `Microi.Tests/run-tests.ps1` 的自动发现入口执行;真实浏览器、数据库及第三方集成必须明确归入 Full 或专项验收,不得冒充离线单测。新增公共后端能力同时补相应 HTTP 闭环。
43
+ - `Microi一键编译发布.sh` 的所有 PC/API 镜像路径(包括仅推送、热修复)都必须先通过 Full;缺少环境、零用例、失败、取消、跳过、待办或无法解析测试结果一律停止。禁止关闭断言、删测试、排除失败项目或修改门禁阈值来发布。
44
+ - 测试成功必须绑定本次候选源码和实际构建上下文的内容哈希,构建后、每次推送前复核。旧产物没有可验证回执或源码/产物漂移时必须重建重测,禁止“当前源码通过测试 + 推送另一份旧 DLL/前端 dist”。
45
+ - 交付记录逐项列明修复与测试映射、执行数量、未覆盖边界和镜像摘要。覆盖率与 Full 都不能证明所有租户业务、任意生产数据和第三方系统绝对无误;真实客户路径仍需只读验收。详细矩阵见 `microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md`。
46
+
19
47
  ### Microi吾码非阻塞自动更新(强制)
20
48
 
21
49
  - VS Code 扩展、`@microi.net/cli` 与 Codex 插件默认自动检查和安装更新。任一 Microi 任务开始时可后台投递 `microi update --background --workspace "<工作区绝对路径>" --json`,但不得等待它完成才开始业务分析、MCP 调用、源码修改、构建或发布。
@@ -78,7 +106,7 @@ AI 在用户本机启动 Node.js、Vite、Webpack、dotnet build、Java、Docker
78
106
  - 本规则只约束 `Microi.Client/` 吾码框架前端源码。独立 MicroService、Web、UniApp 等应用源码仍按其交付 Skill 在发布前执行自身必要的构建;不得因为本规则跳过微服务正式产物生成。
79
107
 
80
108
  <!-- /microi-progressive:chunk -->
81
- <!-- microi-progressive:chunk id=workspace-conventions-004 sha256=5cd341a0dd0a827f16129a8587422b53c186d104a562ecb6640e6167567f9c0f -->
109
+ <!-- microi-progressive:chunk id=workspace-conventions-004 sha256=aec3b6a1666c1f57d8fb208eb29c3d3f91bef5d4d502ed08aee9040168a7e9ec -->
82
110
  ## 临时文件与 AI 产物放置规则(强制)
83
111
 
84
112
  AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、测试截图、临时报告**,**严禁放在工作区根目录(`<workspace-root>/`)**,必须放在指定位置:
@@ -104,7 +132,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
104
132
  **2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.VSCode 插件生成时可以继续使用 `.microi-e2e/`,但 AI 为某个任务手写的一次性 Playwright 脚本、报告和截图仍然必须放在 `.tmp/`。
105
133
 
106
134
  <!-- /microi-progressive:chunk -->
107
- <!-- microi-progressive:chunk id=workspace-conventions-005 sha256=52273704562fac1245fa364ca811949ccb2685dce8375f99bdc4029a314dd758 -->
135
+ <!-- microi-progressive:chunk id=workspace-conventions-005 sha256=ac8e3c7085af4cbde3a5784f65ecb3f8cafa961a2a0e13f5103fa259852773e7 -->
108
136
  ## Microi 源码路径速查(工作区根相对路径)
109
137
 
110
138
  当用户提到“吾码后端源码”“吾码前端源码”“表单引擎源码”“官网源码”等简称时,默认按下列路径定位;如果当前工作区缺少对应目录,再用 `rg --files` 或目录搜索确认实际位置。
@@ -132,17 +160,10 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
132
160
 
133
161
  以上路径只作为通用工作区相对路径规范,不写入具体本机盘符。跨仓库、空工作区或普通用户项目中,如果路径不存在,以插件生成的 `AGENTS.md`、MCP 配置和实际文件树为准。
134
162
 
135
- ### 吾码创建人身份识别(强制)
136
-
137
- - 每次开始处理吾码任务时,都先检查工作区根的 `Microi.Server/Microi.net/`:目录必须存在,并且 `rg --files Microi.Server/Microi.net` 至少返回一个真实源码文件,空目录不成立。满足条件即确认当前是“吾码创建人在官方完整源码工作区开发”;这是工作区级开发者身份标记,不要求本次代码恰好修改在该目录内。目录缺失或为空时按普通吾码用户工作区处理,不得假设拥有官方主库权限。
138
- - 确认创建人身份后,处理平台基础能力的修改、构建或交付任务时,必须同时读取 `app-store` Skill,并把官方母版资源、对应平台应用数据包、应用商城发布及发布后回读纳入完成边界;不得只改源码、本地租户或本地 JSON 后结束。
139
- - 触发表现包括但不限于:新增或修改系统设置、表、字段、Tab、菜单、权限、接口引擎、表单事件、数据源、页面、打印、工作流、任务、平台内置微服务及可幂等种子数据。先判断资源归属的一个或多个官方平台应用,基础空库包与存量租户增量应用都涉及时必须同时更新。
140
- - 纯审查、解释和诊断任务保持只读;目录识别只决定交付链路和事实源,不授权与当前任务无关的线上写入。当前任务属于平台功能修改/交付且官方 `microi_itdos` 权限可用时,官方应用包发布与版本、状态、内容哈希回读属于正常收尾步骤,不得再次降级成可选建议。
141
-
142
163
  每个 `AI应用/{appKey}` 必须只有一个可编辑事实源,统一承载界面、微服务、Manifest、接口引擎、资源策略、测试、构建脚本与商城上传素材。普通应用默认使用当前连接下的 `Microi-V8-Engine` 目录;受审计的官方内置应用若由独立 Git 仓库维护,必须由版本管理的发布契约唯一指向该源码根,并让构建、跨工程测试和发行包共同读取契约。此时同名 `Microi-V8-Engine` 目录只是远端同步镜像,不得回退为构建源。禁止靠目录探测在多份副本之间自动择新,也禁止另建无契约的 `microi.apps/` 平行发行根。
143
164
 
144
165
  <!-- /microi-progressive:chunk -->
145
- <!-- microi-progressive:chunk id=workspace-conventions-006 sha256=2e2b93098fa72390e148e305ed6cc8cfb154d9a64028cdecb10b39a016e41f41 -->
166
+ <!-- microi-progressive:chunk id=workspace-conventions-006 sha256=fb29cd39fe580e3e38df4c0483e5530f876697418f38b391aa421606c8fc6fe5 -->
146
167
  ## Skills 通用化原则
147
168
 
148
169
  编写或更新 `microi.skills/` 下的技能文档时,**不能加入特定项目名称、特定本地路径或特定业务规则**,必须保持通用性:
@@ -190,6 +211,8 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
190
211
 
191
212
  ## ASP.NET Controller 归属与旧路由收口规范(强制)
192
213
 
214
+ - 历史部门树读取可在同一兼容入口复用既有可信 Core 原子,保持 DiyToken、当前租户、组织范围和 `_Child` 契约;仅补确有历史调用的只读地址,不扩张为组织机构写操作或通用 CRUD 兜底。
215
+
193
216
  - 已由 V8 接口引擎完整实现的业务 Controller 必须物理删除,禁止为了“瘦身”再创建 `Microi.AspNetCore` 一类无业务归属的通用 .NET 项目,把原 Controller 原样搬过去。
194
217
  - 仍被旧版 PC、UniApp 或定制移动端调用的 `/api/*` 历史地址,只能集中在 `Microi.net.Api/Controllers/LegacyMobileCompatibilityController.cs`;文件顶部必须醒目标明“仅兼容、禁止新增业务、未来可能整体删除”。已配置的 Managed ApiEngine 始终优先;只有主库确认历史地址和固定 Key 都缺失时,登录、DiyToken 会话、公开启动配置、当前用户与菜单读取可复用既有可信 Core 原子兜底,让未完成升级的租户能进入商城修复。禁止仅因升级门禁已有自愈能力就删除此入口;禁用、StopHttp、权限拒绝、数据库异常及执行错误均不得触发兜底,不在请求中安装资源或覆盖租户配置。
195
218
  - 所有 ASP.NET Controller 源码必须留在 `Microi.net.Api/Controllers`。不得为了迁走 Controller 新建 `Microi.AspNetCore`、`Microi.SSO` 等中转项目,也不得把 `Microi.AI`、`Microi.net` 或其它 `netstandard` 类库改成 `net10.0`/多目标框架来承载 Controller。
@@ -100,7 +100,7 @@ AI 为 Microi 平台新增或修改任何业务逻辑、后台工具、数据维
100
100
  - 平台级强制安全校验不能为了“全部低代码化”放进租户可编辑脚本而被绕过;可以留在 C#,但必须是通用、失败关闭的安全边界,不得夹带某个项目的业务文案、字段组合或状态机。
101
101
 
102
102
  <!-- /microi-progressive:chunk -->
103
- <!-- microi-progressive:chunk id=workspace-conventions-018 sha256=b5ed99d715e5fc5a62d5a9618397f0e40899b400f377dc3fedc41d18d6db73dd -->
103
+ <!-- microi-progressive:chunk id=workspace-conventions-018 sha256=9364579ba944874dcdcc71c44066e285e2a3e88140255531e03deb2ec2cab598 -->
104
104
  ## 应用商城优先于 Microi.Upgrade(强制)
105
105
 
106
106
  能由应用包声明、差异安装和回读验收完成的升级,不得在 `Microi.Server/Microi.Upgrade/` 新增定制 .NET 升级类。表、字段、Tab、菜单、角色权限、接口引擎、表单事件、数据源、页面、打印、工作流、任务及可幂等安装的种子数据,默认都属于应用商城资源。
@@ -185,7 +185,7 @@ if (string.IsNullOrWhiteSpace(tableName)) { return; }
185
185
  如果方法内部只通过 `DynamicHelper` 读取对象字段,方法参数优先声明为 `object`,不要声明为 `dynamic`。这样可以减少 C# 运行时动态绑定进入普通字符串工具链的机会。
186
186
 
187
187
  <!-- /microi-progressive:chunk -->
188
- <!-- microi-progressive:chunk id=workspace-conventions-023 sha256=91feb164525de8824674bd62eae72fc549d64ad253b0551d3504ecb7aba5bf51 -->
188
+ <!-- microi-progressive:chunk id=workspace-conventions-023 sha256=3ebfed66fbaabf345188326688f195186d6f33f72252e2ce19041b33a5eef403 -->
189
189
  ## 根目录保留文件说明
190
190
 
191
191
  根目录只允许存在以下类型的文件和目录:
@@ -3,161 +3,161 @@
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
5
  <!-- microi-progressive:chunk id=workspace-conventions-024 sha256=4e97c278d0a813e23c2c56b11aec8b157b2b100ed6f46ea07d45dbe9954ca5aa -->
6
- ## Microi.net.Api 本地启动约定
7
-
8
- 默认本地后端项目是 `Microi.Server/Microi.net.Api/Microi.net.Api.csproj`。AI 需要启动后端、验证接口、跑 Playwright、回读接口引擎或排查前后端联调问题时,优先使用下面的 PowerShell 命令:
9
-
10
- ```powershell
11
- Push-Location Microi.Server/Microi.net.Api
12
- dotnet run --launch-profile Microi.net.Api
13
- Pop-Location
14
- ```
15
-
16
- 必须先进入 `Microi.Server/Microi.net.Api` 再启动。`Program.cs` 会在 `WebApplication.CreateBuilder(args)` 之前读取当前目录下的 `.microi-local`,将其中的环境名写入 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,随后加载 `appsettings.{环境名}.json`。如果从仓库根目录直接运行并导致配置读取异常,先改用上面的 `Push-Location` 方式。
17
-
18
- 普通本地启动默认不要额外设置 `ASPNETCORE_ENVIRONMENT` 或 `DOTNET_ENVIRONMENT`;如果这些变量已由 `launchSettings.json`、`launch.json`、终端环境或测试脚本显式设置,`.microi-local` 不会覆盖它们。实际监听地址必须读取 `Microi.Server/Microi.net.Api/Properties/launchSettings.json` 的 `Microi.net.Api` profile;当前标准工作区是后端 `61501`、前端 `61500`,不能继续硬编码历史 `7266/1988`。
19
-
20
- **本地后端自动重启要求(强制)**:本地联调需要启动或重启 `Microi.net.Api` 时,先检查 `.tmp/microi-process-state/release.lock`;发布锁存在时禁止启动或重启。无发布时先回读标准端口和 `/api/Diagnostics/liveness`,健康服务默认复用;只有本任务修改了需重载的后端代码、服务不健康或用户明确要求重启时,才可精确停止当前工作区的后端进程,然后在 `Microi.Server/Microi.net.Api` 目录执行 `dotnet run --launch-profile Microi.net.Api`。优先使用用户能在 VS Code 中看到和停止的终端(包含 VS Code 集成终端、VS Code 任务终端、用户明确允许的 VS Code 可追踪隐藏终端);如果当前工具没有 VS Code 终端能力,允许使用本机可见的 `cmd`/PowerShell 窗口启动,禁止使用脱离用户可见窗口的后台服务或守护进程。不要误杀数据库、Redis、Node 前端或其它业务进程。
21
-
6
+ ## Microi.net.Api 本地启动约定
7
+
8
+ 默认本地后端项目是 `Microi.Server/Microi.net.Api/Microi.net.Api.csproj`。AI 需要启动后端、验证接口、跑 Playwright、回读接口引擎或排查前后端联调问题时,优先使用下面的 PowerShell 命令:
9
+
10
+ ```powershell
11
+ Push-Location Microi.Server/Microi.net.Api
12
+ dotnet run --launch-profile Microi.net.Api
13
+ Pop-Location
14
+ ```
15
+
16
+ 必须先进入 `Microi.Server/Microi.net.Api` 再启动。`Program.cs` 会在 `WebApplication.CreateBuilder(args)` 之前读取当前目录下的 `.microi-local`,将其中的环境名写入 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,随后加载 `appsettings.{环境名}.json`。如果从仓库根目录直接运行并导致配置读取异常,先改用上面的 `Push-Location` 方式。
17
+
18
+ 普通本地启动默认不要额外设置 `ASPNETCORE_ENVIRONMENT` 或 `DOTNET_ENVIRONMENT`;如果这些变量已由 `launchSettings.json`、`launch.json`、终端环境或测试脚本显式设置,`.microi-local` 不会覆盖它们。实际监听地址必须读取 `Microi.Server/Microi.net.Api/Properties/launchSettings.json` 的 `Microi.net.Api` profile;当前标准工作区是后端 `61501`、前端 `61500`,不能继续硬编码历史 `7266/1988`。
19
+
20
+ **本地后端自动重启要求(强制)**:本地联调需要启动或重启 `Microi.net.Api` 时,先检查 `.tmp/microi-process-state/release.lock`;发布锁存在时禁止启动或重启。无发布时先回读标准端口和 `/api/Diagnostics/liveness`,健康服务默认复用;只有本任务修改了需重载的后端代码、服务不健康或用户明确要求重启时,才可精确停止当前工作区的后端进程,然后在 `Microi.Server/Microi.net.Api` 目录执行 `dotnet run --launch-profile Microi.net.Api`。优先使用用户能在 VS Code 中看到和停止的终端(包含 VS Code 集成终端、VS Code 任务终端、用户明确允许的 VS Code 可追踪隐藏终端);如果当前工具没有 VS Code 终端能力,允许使用本机可见的 `cmd`/PowerShell 窗口启动,禁止使用脱离用户可见窗口的后台服务或守护进程。不要误杀数据库、Redis、Node 前端或其它业务进程。
21
+
22
22
  <!-- /microi-progressive:chunk -->
23
23
  <!-- microi-progressive:chunk id=workspace-conventions-025 sha256=07c3d729c8f1e9a2bf93ff00937e5d6eae4602d346e4f9254b03a33211ac4848 -->
24
- ## 多 AI 对话共享本地服务与发布互斥(强制)
25
-
26
- 同一工作区的 4、5 个 AI 对话共用同一份源码和固定端口时,`61500/61501` 是工作区级单例共享服务,不属于某个对话。端口相同意味着无法让每个对话拥有一套独立进程;正确模型是“复用健康服务 + 需要重载时串行重启 + 发布时独占”,不能让每个对话都无条件先杀再启动。
27
-
28
- - 启动前先检查端口、健康接口、PID、命令行和工作区路径。健康且代码无需重载时直接复用;不得仅为声明“本对话拥有服务”而重启。
29
- - 长期本地后端必须通过项目目录里的 `dotnet run --launch-profile Microi.net.Api` 使用开发输出。禁止把 `bin/Release/net10.0` 或 `bin/Release/publish` 的 `dotnet Microi.net.Api.dll` 当长期 E2E 服务;运行中的 Release DLL 会让后续 `dotnet build` 报 `MSB3021/MSB3027` 文件锁。
30
- - 一键编译发布会创建 `.tmp/microi-process-state/release.lock`,并调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease`。它只结束命令行和工作区均匹配的 `61501` 后端、`61500` Vite 以及额外 Release 后端,并验证 Release DLL 可独占打开;遇到身份不匹配的端口占用必须停止,不得按进程名全杀。
31
- - Vite 子进程可能由相对 `node_modules/vite/bin/vite.js` 启动,父 npm/终端退出后命令行不再包含工作区绝对路径。Windows 进程管理器应先匹配命令行绝对路径;无法匹配时只读回读进程 CWD,只有 CWD 精确等于当前工作区 `Microi.Client` 且入口确为 Vite 才可结束。CWD 无法读取、属于其它目录或仅仅“父进程不存在”时必须失败关闭。
32
- - 发布锁存在期间,所有 AI 自动启动、服务自愈和 Playwright `webServer` 都必须等待或退出,禁止重新抢占 `61500/61501`。发布正常结束或中断时由脚本释放锁;无法证明锁持有者已退出时不得自行删除锁。
33
- - Edge/Chrome 主浏览器、VS Code 持有的 Playwright Test Server、语言服务和 MCP Node 进程不属于发布文件锁清理范围。浏览器自动化必须关闭本用例创建的 context/browser;不得通过 `taskkill /IM chrome.exe|msedge.exe|node.exe|dotnet.exe` 清空整机进程。
34
- - 人工盘点使用:`powershell -NoProfile -ExecutionPolicy Bypass -File Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action Status`。需要单独停止当前工作区服务时使用 `-Action StopBackend` 或 `-Action StopFrontend`,不再让用户根据任务管理器猜进程。
35
-
36
- ### 共享前端服务不等于共享浏览器会话
37
-
38
- 多个 AI 对话可以复用同一个 `61500` Vite 进程,但不能复用同一个浏览器存储上下文测试不同
39
- `ApiBase + OsClient`。`Microi.Client` 对 localhost 同源持久化 Token、CurrentUser、ApiBase、
40
- OsClient 等状态;同一 Profile/Context 内切换租户会污染其它窗口。
41
-
42
- - 本地 URL 的最高优先级参数位于 `#` 之前:
43
- `/?OsClient=<tenant>&ApiBase=<encodeURIComponent(apiBase)>#/route`。
44
- - 手工第二个不同租户至少使用无痕窗口;多个无痕窗口可能共享同一临时会话,因此更多并发目标使用
45
- 独立 Profile 或独立 `--user-data-dir`。
46
- - Playwright/Codex 为每组目标创建独立 `browser.newContext()`,一个 context 内不得用多个 Page
47
- 混测不同租户。只关闭本任务创建的 context/browser,不结束用户浏览器。
48
- - 线上目标先在一次性 context 等待页面初始化并读取 `window.__MICROI_RUNTIME_ENDPOINT__`;旧版本
49
- 回退读取 URL、`window.ApiBase/window.OsClient`、`localStorage['microi.net']`,必要时调用域名租户
50
- 解析接口。不能根据站点标题猜 OsClient,也不能把 Token 放入本地 URL。
51
- - 目标 API 还需允许 `http://localhost:61500` 的 CORS。运行目标识别、本地源码验证与线上部署验收
52
- 分层报告。
53
-
54
- <!-- /microi-progressive:chunk -->
24
+ ## 多 AI 对话共享本地服务与发布互斥(强制)
25
+
26
+ 同一工作区的 4、5 个 AI 对话共用同一份源码和固定端口时,`61500/61501` 是工作区级单例共享服务,不属于某个对话。端口相同意味着无法让每个对话拥有一套独立进程;正确模型是“复用健康服务 + 需要重载时串行重启 + 发布时独占”,不能让每个对话都无条件先杀再启动。
27
+
28
+ - 启动前先检查端口、健康接口、PID、命令行和工作区路径。健康且代码无需重载时直接复用;不得仅为声明“本对话拥有服务”而重启。
29
+ - 长期本地后端必须通过项目目录里的 `dotnet run --launch-profile Microi.net.Api` 使用开发输出。禁止把 `bin/Release/net10.0` 或 `bin/Release/publish` 的 `dotnet Microi.net.Api.dll` 当长期 E2E 服务;运行中的 Release DLL 会让后续 `dotnet build` 报 `MSB3021/MSB3027` 文件锁。
30
+ - 一键编译发布会创建 `.tmp/microi-process-state/release.lock`,并调用 `Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action PrepareRelease`。它只结束命令行和工作区均匹配的 `61501` 后端、`61500` Vite 以及额外 Release 后端,并验证 Release DLL 可独占打开;遇到身份不匹配的端口占用必须停止,不得按进程名全杀。
31
+ - Vite 子进程可能由相对 `node_modules/vite/bin/vite.js` 启动,父 npm/终端退出后命令行不再包含工作区绝对路径。Windows 进程管理器应先匹配命令行绝对路径;无法匹配时只读回读进程 CWD,只有 CWD 精确等于当前工作区 `Microi.Client` 且入口确为 Vite 才可结束。CWD 无法读取、属于其它目录或仅仅“父进程不存在”时必须失败关闭。
32
+ - 发布锁存在期间,所有 AI 自动启动、服务自愈和 Playwright `webServer` 都必须等待或退出,禁止重新抢占 `61500/61501`。发布正常结束或中断时由脚本释放锁;无法证明锁持有者已退出时不得自行删除锁。
33
+ - Edge/Chrome 主浏览器、VS Code 持有的 Playwright Test Server、语言服务和 MCP Node 进程不属于发布文件锁清理范围。浏览器自动化必须关闭本用例创建的 context/browser;不得通过 `taskkill /IM chrome.exe|msedge.exe|node.exe|dotnet.exe` 清空整机进程。
34
+ - 人工盘点使用:`powershell -NoProfile -ExecutionPolicy Bypass -File Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action Status`。需要单独停止当前工作区服务时使用 `-Action StopBackend` 或 `-Action StopFrontend`,不再让用户根据任务管理器猜进程。
35
+
36
+ ### 共享前端服务不等于共享浏览器会话
37
+
38
+ 多个 AI 对话可以复用同一个 `61500` Vite 进程,但不能复用同一个浏览器存储上下文测试不同
39
+ `ApiBase + OsClient`。`Microi.Client` 对 localhost 同源持久化 Token、CurrentUser、ApiBase、
40
+ OsClient 等状态;同一 Profile/Context 内切换租户会污染其它窗口。
41
+
42
+ - 本地 URL 的最高优先级参数位于 `#` 之前:
43
+ `/?OsClient=<tenant>&ApiBase=<encodeURIComponent(apiBase)>#/route`。
44
+ - 手工第二个不同租户至少使用无痕窗口;多个无痕窗口可能共享同一临时会话,因此更多并发目标使用
45
+ 独立 Profile 或独立 `--user-data-dir`。
46
+ - Playwright/Codex 为每组目标创建独立 `browser.newContext()`,一个 context 内不得用多个 Page
47
+ 混测不同租户。只关闭本任务创建的 context/browser,不结束用户浏览器。
48
+ - 线上目标先在一次性 context 等待页面初始化并读取 `window.__MICROI_RUNTIME_ENDPOINT__`;旧版本
49
+ 回退读取 URL、`window.ApiBase/window.OsClient`、`localStorage['microi.net']`,必要时调用域名租户
50
+ 解析接口。不能根据站点标题猜 OsClient,也不能把 Token 放入本地 URL。
51
+ - 目标 API 还需允许 `http://localhost:61500` 的 CORS。运行目标识别、本地源码验证与线上部署验收
52
+ 分层报告。
53
+
54
+ <!-- /microi-progressive:chunk -->
55
55
  <!-- microi-progressive:chunk id=workspace-conventions-026 sha256=73207c0cfcc442a177c47c36503dd6145fc826e23e79df3913861f65d8d16df3 -->
56
- ## 本地租户与测试凭据读取约定
57
-
58
- AI 在本地启动后端、跑 Playwright、做登录态页面截图或调用需要登录的接口前,必须先尝试从本地配置判断租户和测试账号,不要直接以“未登录无法测试”结束:
59
-
60
- 1. 读取 `Microi.Server/Microi.net.Api/.microi-local`,得到当前环境名,例如 `<Environment>`。
61
- 2. 读取 `Microi.Server/Microi.net.Api/appsettings.<Environment>.json`,或测试脚本传入的 `PW_APPSETTINGS_PATH`。
62
- 3. 测试账号密码只从用户本轮明确提供、受保护的测试进程变量 `PW_TEST_ACCOUNT` / `PW_TEST_PASSWORD`、CI Secret 或既有安全登录态取得;不得把凭据写入 `appsettings.*.json`、源码或测试报告。
63
- 4. `MICROI_OSCLIENT`、`PW_OS_CLIENT` 等只属于自动化工具进程,不是 API 生产环境变量;显式设置时可用于选择测试租户。
64
- 5. `.microi-local`、Token、数据库连接串、Redis 密码和测试凭据都视为本地敏感配置。最终回复、日志摘要和测试报告中不得输出真实值,只能写 `<redacted>`、`本地配置账号` 或 `本地配置凭据`。
65
-
56
+ ## 本地租户与测试凭据读取约定
57
+
58
+ AI 在本地启动后端、跑 Playwright、做登录态页面截图或调用需要登录的接口前,必须先尝试从本地配置判断租户和测试账号,不要直接以“未登录无法测试”结束:
59
+
60
+ 1. 读取 `Microi.Server/Microi.net.Api/.microi-local`,得到当前环境名,例如 `<Environment>`。
61
+ 2. 读取 `Microi.Server/Microi.net.Api/appsettings.<Environment>.json`,或测试脚本传入的 `PW_APPSETTINGS_PATH`。
62
+ 3. 测试账号密码只从用户本轮明确提供、受保护的测试进程变量 `PW_TEST_ACCOUNT` / `PW_TEST_PASSWORD`、CI Secret 或既有安全登录态取得;不得把凭据写入 `appsettings.*.json`、源码或测试报告。
63
+ 4. `MICROI_OSCLIENT`、`PW_OS_CLIENT` 等只属于自动化工具进程,不是 API 生产环境变量;显式设置时可用于选择测试租户。
64
+ 5. `.microi-local`、Token、数据库连接串、Redis 密码和测试凭据都视为本地敏感配置。最终回复、日志摘要和测试报告中不得输出真实值,只能写 `<redacted>`、`本地配置账号` 或 `本地配置凭据`。
65
+
66
66
  <!-- /microi-progressive:chunk -->
67
67
  <!-- microi-progressive:chunk id=workspace-conventions-027 sha256=84988eac9cf7543a192b3e829b879afb7b35ef92798dc9ea69243f173a8ab674 -->
68
- ## 自动化登录约定
69
-
70
- 本地和远端 E2E 统一传真实 `Account` / `Pwd`。需要跳过图形验证码时,只能在目标租户 `sys_config.AutoTestSkipCaptcha=true` 后传 `_AutomationTestLogin=true`;它只跳过验证码,绝不能绕过密码校验。禁止恢复 `DevLoginBypass`、`X-Microi-Dev-Key`、`_DEV_BYPASS_` 或让脚本自动改写后端 `appsettings`。测试完成后不持久化账号密码。
71
-
68
+ ## 自动化登录约定
69
+
70
+ 本地和远端 E2E 统一传真实 `Account` / `Pwd`。需要跳过图形验证码时,只能在目标租户 `sys_config.AutoTestSkipCaptcha=true` 后传 `_AutomationTestLogin=true`;它只跳过验证码,绝不能绕过密码校验。禁止恢复 `DevLoginBypass`、`X-Microi-Dev-Key`、`_DEV_BYPASS_` 或让脚本自动改写后端 `appsettings`。测试完成后不持久化账号密码。
71
+
72
72
  <!-- /microi-progressive:chunk -->
73
73
  <!-- microi-progressive:chunk id=workspace-conventions-028 sha256=544ab4d52c661e65fb2b0364a3a2107815af366d719f0b1d1cde7b4837226458 -->
74
- ## V8 远端/本地同步收尾约定
75
-
76
- AI 通过 MCP、接口引擎、数据库脚本或平台 API 修改任何远端 V8 代码后,任务结束前必须把远端当前生效代码同步回本地 `Microi-V8-Engine/<server>/<osClient>/` 目录,并做一次同步状态复核。
77
-
78
- 适用范围包括:
79
- - `sys_apiengine.ApiV8Code` 接口引擎
80
- - `diy_table` 表单 V8 事件
81
- - `diy_field` 字段 V8 事件
82
- - `sys_menu` 模块按钮/Tab V8 代码
83
- - `wf_node` 工作流节点 V8 代码
84
- - `sys_datasource` 数据源 V8 代码
85
-
86
- 收尾流程:
87
- - 若远端是通过 MCP 写入的,以远端当前生效代码为准回写本地文件。
88
- - 若本地文件是先手工修改的,先推送到远端,再重新拉取/复核,确保本地与远端一致。
89
- - 优先使用 Microi.VSCode 插件的同步/查看同步状态能力;没有可调用插件时,可在 `.tmp/` 写一次性同步脚本,但脚本必须先 dry-run 输出差异摘要,再 apply。
90
- - 复核结果应确认 touched 范围内 `Changed=0`、`Created=0`、`LocalOnly=0` 或说明剩余差异原因。
91
- - 空 V8 代码不生成本地 `.js` 文件;若已有空 `.js` 文件,收尾同步时应删除,避免被误判为本地未推送。
92
- - AI 收尾不能只看自写脚本的 dry-run;只要工作区安装了 Microi.VSCode 插件,就必须按插件“查看同步状态”的口径再复核一次。最终回复中要明确说明插件口径是否为 0;若仍有本地未推送/远端差异,必须列出具体资源类型、Key 和本地文件路径,不能只报数量。
93
- - 当远端代码与本地代码完全一致但插件仍提示“本地未推送”时,优先校准 `.microi-meta.json` 的 `updateTime/filePath` 与本地文件 `mtime`,并再次执行插件口径同步检查;不要让时间戳误差遗留给用户。
94
- - AI 通过 MCP/API 直接写远端 V8 后,必须立即回读远端当前生效代码到本地并校准 `.microi-meta.json` 与文件 `mtime`。这不是可选清理动作,而是交付完成条件;否则 VS Code 插件会按时间戳继续提示“本地未推送”。
95
- - 若同步状态非 0,必须先列出具体文件并分类处理:正文一致仅校准 meta/mtime,远端较新则拉回,本地较新则推送,双方都改过则人工合并。生产资金/资产系统不能为清状态盲目覆盖远端。
96
-
74
+ ## V8 远端/本地同步收尾约定
75
+
76
+ AI 通过 MCP、接口引擎、数据库脚本或平台 API 修改任何远端 V8 代码后,任务结束前必须把远端当前生效代码同步回本地 `Microi-V8-Engine/<server>/<osClient>/` 目录,并做一次同步状态复核。
77
+
78
+ 适用范围包括:
79
+ - `sys_apiengine.ApiV8Code` 接口引擎
80
+ - `diy_table` 表单 V8 事件
81
+ - `diy_field` 字段 V8 事件
82
+ - `sys_menu` 模块按钮/Tab V8 代码
83
+ - `wf_node` 工作流节点 V8 代码
84
+ - `sys_datasource` 数据源 V8 代码
85
+
86
+ 收尾流程:
87
+ - 若远端是通过 MCP 写入的,以远端当前生效代码为准回写本地文件。
88
+ - 若本地文件是先手工修改的,先推送到远端,再重新拉取/复核,确保本地与远端一致。
89
+ - 优先使用 Microi.VSCode 插件的同步/查看同步状态能力;没有可调用插件时,可在 `.tmp/` 写一次性同步脚本,但脚本必须先 dry-run 输出差异摘要,再 apply。
90
+ - 复核结果应确认 touched 范围内 `Changed=0`、`Created=0`、`LocalOnly=0` 或说明剩余差异原因。
91
+ - 空 V8 代码不生成本地 `.js` 文件;若已有空 `.js` 文件,收尾同步时应删除,避免被误判为本地未推送。
92
+ - AI 收尾不能只看自写脚本的 dry-run;只要工作区安装了 Microi.VSCode 插件,就必须按插件“查看同步状态”的口径再复核一次。最终回复中要明确说明插件口径是否为 0;若仍有本地未推送/远端差异,必须列出具体资源类型、Key 和本地文件路径,不能只报数量。
93
+ - 当远端代码与本地代码完全一致但插件仍提示“本地未推送”时,优先校准 `.microi-meta.json` 的 `updateTime/filePath` 与本地文件 `mtime`,并再次执行插件口径同步检查;不要让时间戳误差遗留给用户。
94
+ - AI 通过 MCP/API 直接写远端 V8 后,必须立即回读远端当前生效代码到本地并校准 `.microi-meta.json` 与文件 `mtime`。这不是可选清理动作,而是交付完成条件;否则 VS Code 插件会按时间戳继续提示“本地未推送”。
95
+ - 若同步状态非 0,必须先列出具体文件并分类处理:正文一致仅校准 meta/mtime,远端较新则拉回,本地较新则推送,双方都改过则人工合并。生产资金/资产系统不能为清状态盲目覆盖远端。
96
+
97
97
  <!-- /microi-progressive:chunk -->
98
98
  <!-- microi-progressive:chunk id=workspace-conventions-029 sha256=e90e532f9448b67f98f28a68fd4ea45b79868cf25fc14c5283b9074e91559f27 -->
99
- ## V8 缓存刷新约定
100
-
101
- 如果 AI 绕过平台表单提交事件,直接通过 MCP、数据库脚本或自写同步工具更新 `sys_apiengine`、`diy_table`、`diy_field`、`sys_menu`、`wf_node` 等远端 V8 代码,收尾时除了同步本地文件,还必须刷新运行中服务的缓存。至少清理当前 `<OsClient>` 下对应资源的 `Microi:<OsClient>:FormData:<table>:<key>`、`Id` 和地址形式缓存;若可用,优先调用平台缓存接口或插件内置同步流程。清缓存后要重新调用受影响接口做一次真实验证,避免本地/远端代码已一致但 API 仍执行旧缓存代码。
102
-
99
+ ## V8 缓存刷新约定
100
+
101
+ 如果 AI 绕过平台表单提交事件,直接通过 MCP、数据库脚本或自写同步工具更新 `sys_apiengine`、`diy_table`、`diy_field`、`sys_menu`、`wf_node` 等远端 V8 代码,收尾时除了同步本地文件,还必须刷新运行中服务的缓存。至少清理当前 `<OsClient>` 下对应资源的 `Microi:<OsClient>:FormData:<table>:<key>`、`Id` 和地址形式缓存;若可用,优先调用平台缓存接口或插件内置同步流程。清缓存后要重新调用受影响接口做一次真实验证,避免本地/远端代码已一致但 API 仍执行旧缓存代码。
102
+
103
103
  <!-- /microi-progressive:chunk -->
104
104
  <!-- microi-progressive:chunk id=workspace-conventions-030 sha256=c25d0aaffec64d8a66cda36acd9ec337eda99a4411fddb0e966e45247ba574de -->
105
- ## MCP 元数据更新验收约定
106
-
107
- AI 通过 MCP 修改 `diy_field`、`diy_table`、`sys_menu`、`sys_osclients`、`sys_config` 等平台元数据后,不能只看写入返回成功,必须按前端真实消费方式回读验证:
108
-
109
- 1. 修改 `Select`、`Radio`、`Checkbox`、`MultipleSelect` 等选项组件时,必须回读字段的 `Component`、`Data`、`Config`。已有字段更新时不要假设 `"key|label"` 字符串会被 `microi_update_field` 自动解析;KeyValue 数据源推荐直接把 `Data` 写成 JSON 数组 `[{"Key":"Aliyun","Value":"阿里云机器翻译"}]`,并确保 `Config.DataSource=KeyValue`、`SelectLabel=Value`、`SelectSaveField=Key`。
110
- 2. 修改字段、表、菜单后,必须调用 `microi_get_field_list` / `microi_get_table_data` 回读关键字段,并调用 `microi_refresh_schema_cache` 或对应清缓存接口刷新 Redis。涉及 SaaS 引擎、系统设置、菜单按钮、接口引擎等运行态缓存时,还要调用对应租户清缓存接口并重新请求受影响页面/API。
111
- 3. 最终交付说明必须写清楚:改了哪个表/字段,回读值是什么,刷新了哪些缓存,验证入口是什么。若某个缓存刷新接口失败或只能部分成功,需要把失败消息原样摘要出来,不能把“写入成功”当作“页面一定生效”。
112
-
105
+ ## MCP 元数据更新验收约定
106
+
107
+ AI 通过 MCP 修改 `diy_field`、`diy_table`、`sys_menu`、`sys_osclients`、`sys_config` 等平台元数据后,不能只看写入返回成功,必须按前端真实消费方式回读验证:
108
+
109
+ 1. 修改 `Select`、`Radio`、`Checkbox`、`MultipleSelect` 等选项组件时,必须回读字段的 `Component`、`Data`、`Config`。已有字段更新时不要假设 `"key|label"` 字符串会被 `microi_update_field` 自动解析;KeyValue 数据源推荐直接把 `Data` 写成 JSON 数组 `[{"Key":"Aliyun","Value":"阿里云机器翻译"}]`,并确保 `Config.DataSource=KeyValue`、`SelectLabel=Value`、`SelectSaveField=Key`。
110
+ 2. 修改字段、表、菜单后,必须调用 `microi_get_field_list` / `microi_get_table_data` 回读关键字段,并调用 `microi_refresh_schema_cache` 或对应清缓存接口刷新 Redis。涉及 SaaS 引擎、系统设置、菜单按钮、接口引擎等运行态缓存时,还要调用对应租户清缓存接口并重新请求受影响页面/API。
111
+ 3. 最终交付说明必须写清楚:改了哪个表/字段,回读值是什么,刷新了哪些缓存,验证入口是什么。若某个缓存刷新接口失败或只能部分成功,需要把失败消息原样摘要出来,不能把“写入成功”当作“页面一定生效”。
112
+
113
113
  <!-- /microi-progressive:chunk -->
114
114
  <!-- microi-progressive:chunk id=workspace-conventions-031 sha256=3c25a4f5f2571612f6b441e88f4865f916aab0aed3cfe5d06a3be51a736dde0f -->
115
- ## MCP 可用性排查约定
116
-
117
- VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”,不代表当前 AI 会话一定已经成功加载了对应工具。AI 在声称“可以通过 MCP 操作”之前,必须完成一次真实可调用性验证:
118
-
119
- - 先用当前会话可用的工具发现能力查找目标 MCP 工具;若工具发现为 0,不能继续假设 MCP 可用。
120
- - 再用 MCP 资源/模板列表或最小 `initialize` / `tools/list` 探测确认服务器握手成功。若返回 `handshaking with MCP server failed`、`initialize response`、`connection closed` 等错误,要明确说明“配置存在但当前会话不可调用”。
121
- - 同时检查 `.vscode/mcp.json`、`.cursor/mcp.json`、`.mcp.json` 和 `~/.codex/config.toml` 是否能解析,并确认目标服务器名、`MICROI_API_URL`、`MICROI_OS_CLIENT`、`MICROI_TOKEN_FILE` 已写入。
122
- - 如果手动启动 `mcp-server.js` 能响应,而当前 AI 会话仍握手失败,应优先怀疑 MCP stdio 协议兼容、初始化响应格式/大小、服务器进程提前退出或插件生成的 Codex 配置顺序问题,而不是简单归因于“用户没启用”。
123
- - 当 MCP 工具数量较多时,`tools/list` 的前段必须优先返回通用建模和维护工具,例如 `microi_get_db_schema`、`microi_get_field_list`、`microi_add_field`、`microi_update_field`、`microi_refresh_schema_cache`、`microi_create_table`、`microi_create_module`、`microi_get_event_code`、`microi_save_event_code`。部分 AI 客户端或模型上下文只注入前若干个工具,若核心工具排在后面,会误报“缺少 MCP 工具”。
124
- - MCP 的初始化说明必须使用真实 `MICROI_OS_CLIENT` 作为租户边界。中文显示名通过 ASCII 的 `MICROI_LABEL_BASE64` 传输并在 MCP 内解码,旧版 `MICROI_LABEL` 只作兼容;显示名不能当成租户 Key 写入“只能管理某租户”的安全提示。
125
- - 遇到 `ByteString`、`greater than 255` 或“第 N 个字符无法写入 Header”时,必须先检查实际异常索引和所有 HTTP Header 来源。Microi MCP 的设备标识来自 `did` / `MICROI_MCP_DID`;默认值若直接拼接中文 Windows 主机名,会在 `MCP:` 后第 4 个字符报错。`MICROI_LABEL_BASE64` 只用于显示,不会作为业务 HTTP Header 发送,禁止在未核对调用链前把错误归因于中文 Label。插件和 MCP 必须把 DID 规范化为稳定的可打印 ASCII。
126
- - MCP 连接失败时,AI 在完成配置、进程、Header、`initialize`、`tools/list` 和只读状态调用的证据链之前,不得修改 Token、租户、服务器地址或执行远端写入。连接恢复后先完成只读基线盘点,再按用户授权开始写入。
127
- - 修复 Microi.VSCode 插件的 MCP 生成逻辑后,必须重新生成配置、重启对应 MCP server,并在当前 AI 会话中再次验证工具发现与一次只读工具调用。
128
-
115
+ ## MCP 可用性排查约定
116
+
117
+ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”,不代表当前 AI 会话一定已经成功加载了对应工具。AI 在声称“可以通过 MCP 操作”之前,必须完成一次真实可调用性验证:
118
+
119
+ - 先用当前会话可用的工具发现能力查找目标 MCP 工具;若工具发现为 0,不能继续假设 MCP 可用。
120
+ - 再用 MCP 资源/模板列表或最小 `initialize` / `tools/list` 探测确认服务器握手成功。若返回 `handshaking with MCP server failed`、`initialize response`、`connection closed` 等错误,要明确说明“配置存在但当前会话不可调用”。
121
+ - 同时检查 `.vscode/mcp.json`、`.cursor/mcp.json`、`.mcp.json` 和 `~/.codex/config.toml` 是否能解析,并确认目标服务器名、`MICROI_API_URL`、`MICROI_OS_CLIENT`、`MICROI_TOKEN_FILE` 已写入。
122
+ - 如果手动启动 `mcp-server.js` 能响应,而当前 AI 会话仍握手失败,应优先怀疑 MCP stdio 协议兼容、初始化响应格式/大小、服务器进程提前退出或插件生成的 Codex 配置顺序问题,而不是简单归因于“用户没启用”。
123
+ - 当 MCP 工具数量较多时,`tools/list` 的前段必须优先返回通用建模和维护工具,例如 `microi_get_db_schema`、`microi_get_field_list`、`microi_add_field`、`microi_update_field`、`microi_refresh_schema_cache`、`microi_create_table`、`microi_create_module`、`microi_get_event_code`、`microi_save_event_code`。部分 AI 客户端或模型上下文只注入前若干个工具,若核心工具排在后面,会误报“缺少 MCP 工具”。
124
+ - MCP 的初始化说明必须使用真实 `MICROI_OS_CLIENT` 作为租户边界。中文显示名通过 ASCII 的 `MICROI_LABEL_BASE64` 传输并在 MCP 内解码,旧版 `MICROI_LABEL` 只作兼容;显示名不能当成租户 Key 写入“只能管理某租户”的安全提示。
125
+ - 遇到 `ByteString`、`greater than 255` 或“第 N 个字符无法写入 Header”时,必须先检查实际异常索引和所有 HTTP Header 来源。Microi MCP 的设备标识来自 `did` / `MICROI_MCP_DID`;默认值若直接拼接中文 Windows 主机名,会在 `MCP:` 后第 4 个字符报错。`MICROI_LABEL_BASE64` 只用于显示,不会作为业务 HTTP Header 发送,禁止在未核对调用链前把错误归因于中文 Label。插件和 MCP 必须把 DID 规范化为稳定的可打印 ASCII。
126
+ - MCP 连接失败时,AI 在完成配置、进程、Header、`initialize`、`tools/list` 和只读状态调用的证据链之前,不得修改 Token、租户、服务器地址或执行远端写入。连接恢复后先完成只读基线盘点,再按用户授权开始写入。
127
+ - 修复 Microi.VSCode 插件的 MCP 生成逻辑后,必须重新生成配置、重启对应 MCP server,并在当前 AI 会话中再次验证工具发现与一次只读工具调用。
128
+
129
129
  <!-- /microi-progressive:chunk -->
130
130
  <!-- microi-progressive:chunk id=workspace-conventions-032 sha256=230c8683389d2b1ee4f5ba88dc4e51cb4dc4eb6a89b76a142b07f479ff5be1c8 -->
131
- ## MCP 写入超时与降级约定
132
-
133
- - 写请求超时后的远端回读必须使用独立的短超时,不能继续沿用普通查询的长超时。否则一次 60 秒写超时后,每次回读还可能等待 120 秒,AI 会长期停留在“等待远端回读”,用户误以为菜单按钮或接口引擎完全写不进去。
134
- - `microi_create_engine` 必须与代码保存、事件保存、菜单更新一样使用写请求超时和远端回读确认。创建响应异常但按 `ApiEngineKey` 回读到相同代码时,返回 `RecoveredAfterTransportError:true`;禁止因超时重复创建同一个接口引擎。
135
- - 后端创建接口引擎时,数据库新增成功后的路由缓存刷新必须设置硬超时。缓存刷新失败或超时不能把已经成功入库的创建结果伪装成失败,更不能让 HTTP 请求无限等待;响应中应通过 `CacheRefresh` 报告缓存状态。
136
-
137
- - 接口引擎代码只用 `microi_save_engine_code`,表单事件只用 `microi_save_event_code`,菜单按钮和 Tab 只用 `microi_update_module`。这些标准工具负责版本、校验、缓存和超时回读。
138
- - 请求超时是“结果不确定”,不是“写入失败”。标准工具返回 `RecoveredAfterTransportError:true` 时,表示已经通过远端回读确认成功,不得再次写入。
139
- - 标准工具明确返回“回读未确认”时,只调用对应 get 工具继续核对一次。没有用户明确授权,不得改走原生 FormEngine HTTP、直接 SQL、表定义增量更新,也不得创建一次性维护接口引擎绕过原端点。
140
- - `MoreBtns`、`FormBtns`、`BatchSelectMoreBtns`、`PageTabs`、`ExportMoreBtns`、`PageBtns` 一律向 MCP 传明文 JSON 数组。租户 `sys_menu` 表单事件中的 Base64 解码属于平台内部兼容逻辑,AI 不得据此手工 Base64 编码。
141
- - AI/终端工具显示的 `…N tokens truncated…`、`Exit code: N`、`Chunk ID:`、`Wall time:` 等是宿主输出标记,不是 V8 源码。禁止复制到本地文件或 MCP 写入参数;读取长源码必须按工具返回的字符范围分段取完,并核对完整源码 SHA-256。标准 MCP 写工具和插件推送检测到这些标记时必须拒绝写入。
142
- - 远端源码不少于 8000 字符,而新源码减少超过 15% 时,应先视为可能只拿到了截断片段并停止写入。只有核对完整源码且确需大幅删减时,才使用写工具提供的显式大幅删减确认参数。
143
- - 发生连续写入超时时,要先停止并发写入,记录具体工具、资源 Key、耗时和回读结果;禁止用“服务器整体不可用”“缓存锁死”等没有日志证据的结论代替诊断。
144
-
131
+ ## MCP 写入超时与降级约定
132
+
133
+ - 写请求超时后的远端回读必须使用独立的短超时,不能继续沿用普通查询的长超时。否则一次 60 秒写超时后,每次回读还可能等待 120 秒,AI 会长期停留在“等待远端回读”,用户误以为菜单按钮或接口引擎完全写不进去。
134
+ - `microi_create_engine` 必须与代码保存、事件保存、菜单更新一样使用写请求超时和远端回读确认。创建响应异常但按 `ApiEngineKey` 回读到相同代码时,返回 `RecoveredAfterTransportError:true`;禁止因超时重复创建同一个接口引擎。
135
+ - 后端创建接口引擎时,数据库新增成功后的路由缓存刷新必须设置硬超时。缓存刷新失败或超时不能把已经成功入库的创建结果伪装成失败,更不能让 HTTP 请求无限等待;响应中应通过 `CacheRefresh` 报告缓存状态。
136
+
137
+ - 接口引擎代码只用 `microi_save_engine_code`,表单事件只用 `microi_save_event_code`,菜单按钮和 Tab 只用 `microi_update_module`。这些标准工具负责版本、校验、缓存和超时回读。
138
+ - 请求超时是“结果不确定”,不是“写入失败”。标准工具返回 `RecoveredAfterTransportError:true` 时,表示已经通过远端回读确认成功,不得再次写入。
139
+ - 标准工具明确返回“回读未确认”时,只调用对应 get 工具继续核对一次。没有用户明确授权,不得改走原生 FormEngine HTTP、直接 SQL、表定义增量更新,也不得创建一次性维护接口引擎绕过原端点。
140
+ - `MoreBtns`、`FormBtns`、`BatchSelectMoreBtns`、`PageTabs`、`ExportMoreBtns`、`PageBtns` 一律向 MCP 传明文 JSON 数组。租户 `sys_menu` 表单事件中的 Base64 解码属于平台内部兼容逻辑,AI 不得据此手工 Base64 编码。
141
+ - AI/终端工具显示的 `…N tokens truncated…`、`Exit code: N`、`Chunk ID:`、`Wall time:` 等是宿主输出标记,不是 V8 源码。禁止复制到本地文件或 MCP 写入参数;读取长源码必须按工具返回的字符范围分段取完,并核对完整源码 SHA-256。标准 MCP 写工具和插件推送检测到这些标记时必须拒绝写入。
142
+ - 远端源码不少于 8000 字符,而新源码减少超过 15% 时,应先视为可能只拿到了截断片段并停止写入。只有核对完整源码且确需大幅删减时,才使用写工具提供的显式大幅删减确认参数。
143
+ - 发生连续写入超时时,要先停止并发写入,记录具体工具、资源 Key、耗时和回读结果;禁止用“服务器整体不可用”“缓存锁死”等没有日志证据的结论代替诊断。
144
+
145
145
  <!-- /microi-progressive:chunk -->
146
146
  <!-- microi-progressive:chunk id=workspace-conventions-033 sha256=b642bb516a42b50e8b459e5237588e85d71c9715970779e155b88d7c0e8c6536 -->
147
- ## Codex MCP 单入口约定
148
-
149
- - Codex 对普通 MCP 大工具集可能无法稳定注入时,使用插件生成的 `microi_codex` 单入口,不要据此判断服务器或帐号不可用。
150
- - `microi_codex` 的 `action="list_tools"` 可按 `params.keyword` 查找工具,`action="describe_tool"` + `params.name` 可读取参数说明;执行时 action 使用原始 `microi_*` 工具名,参数放在 `params`。
151
- - 单入口只负责路由,必须复用原工具的参数 schema、写入确认、审计、超时回读和错误返回。不得因为只暴露一个 Codex 工具而放宽远端写入保护。
152
- - 如果 Codex 仍不注入 `microi_codex`,优先使用它实际提供的资源工具:先 `list_mcp_resources` 并读取 `microi://codex/status` / `microi://codex/tools`;通用调用先 `list_mcp_resource_templates`,再读取 `microi://codex/action/{action}/{params}`,其中 `params` 是 URI 编码后的 JSON 对象。
153
- - 资源模板只是兼容传输层,执行的仍是原始 `microi_*` handler。写操作同样必须携带原工具要求的 `confirmExecution`,不得把 resource read 当成绕过确认的通道。
154
- - VS Code/Copilot、Cursor、Claude Code 仍使用完整 MCP 工具集;不要把 Codex 的 `enabled_tools = ["microi_codex"]` 复制到其他客户端配置。
155
-
147
+ ## Codex MCP 单入口约定
148
+
149
+ - Codex 对普通 MCP 大工具集可能无法稳定注入时,使用插件生成的 `microi_codex` 单入口,不要据此判断服务器或帐号不可用。
150
+ - `microi_codex` 的 `action="list_tools"` 可按 `params.keyword` 查找工具,`action="describe_tool"` + `params.name` 可读取参数说明;执行时 action 使用原始 `microi_*` 工具名,参数放在 `params`。
151
+ - 单入口只负责路由,必须复用原工具的参数 schema、写入确认、审计、超时回读和错误返回。不得因为只暴露一个 Codex 工具而放宽远端写入保护。
152
+ - 如果 Codex 仍不注入 `microi_codex`,优先使用它实际提供的资源工具:先 `list_mcp_resources` 并读取 `microi://codex/status` / `microi://codex/tools`;通用调用先 `list_mcp_resource_templates`,再读取 `microi://codex/action/{action}/{params}`,其中 `params` 是 URI 编码后的 JSON 对象。
153
+ - 资源模板只是兼容传输层,执行的仍是原始 `microi_*` handler。写操作同样必须携带原工具要求的 `confirmExecution`,不得把 resource read 当成绕过确认的通道。
154
+ - VS Code/Copilot、Cursor、Claude Code 仍使用完整 MCP 工具集;不要把 Codex 的 `enabled_tools = ["microi_codex"]` 复制到其他客户端配置。
155
+
156
156
  <!-- /microi-progressive:chunk -->
157
157
  <!-- microi-progressive:chunk id=workspace-conventions-034 sha256=6ffac2793dea9b1d5953d624103d7aea7800b12deaaf71b3b0f5e3cb5b39ac06 -->
158
- ## .venv Python 环境说明
159
-
160
- 工作区根目录的 `.venv/` 是 Python 虚拟环境,**保留,不要删除**。已安装:
158
+ ## .venv Python 环境说明
159
+
160
+ 工作区根目录的 `.venv/` 是 Python 虚拟环境,**保留,不要删除**。已安装:
161
161
  - `playwright` — Playwright E2E 测试
162
162
  - `openai` — AI 接口调用
163
163
  - `httpx` — HTTP 客户端
@@ -166,51 +166,51 @@ VS Code、Cursor 或 Codex 设置界面显示某个 MCP 服务器“已启用”
166
166
  AI 执行 Python 脚本时应使用 `.venv\Scripts\python.exe`(Windows)而非系统 Python。
167
167
  <!-- /microi-progressive:chunk -->
168
168
  <!-- microi-progressive:chunk id=workspace-conventions-035 sha256=c114dffea6978f289601a8f71aa83a0466f3d934e96e45bb871af179d319a1e3 -->
169
- ## 后端代码改动后的重启验收
170
-
171
- AI 只要修改了 `Microi.Server/**` 下会影响 `Microi.net.Api` 运行结果的后端源码、配置、控制器、服务、依赖项目或接口行为,任务收尾前必须完成一次“编译 + 重启本地后端 + 健康验证”,不要只用隔离输出目录 build 后结束。
172
-
173
- 强制流程:
174
-
175
- 1. 先执行后端编译验证。若 launch profile 当前端口上的开发服务导致 `bin/Debug/net10.0` DLL 被锁,可以先精确停止当前工作区的 `Microi.net.Api` 进程后重新编译;只有用户明确要求不中断正在运行服务时,才允许用临时输出目录作为补充验证,并必须说明运行服务尚未替换。
176
- 2. 从 `launchSettings.json` 回读实际端口,查找并停止该端口上的本地 `Microi.net.Api` 进程。只停止命令行与当前工作区匹配的 Microi 后端,不要误杀数据库、Redis、Node 前端或其它业务进程。
177
- 3. 必须进入 `Microi.Server/Microi.net.Api` 目录启动:
178
- ```powershell
179
- dotnet run --launch-profile Microi.net.Api
180
- ```
181
- 启动优先发生在用户能在 VS Code 中看到和停止的终端中,方便用户查看日志并手动停止;用户明确允许时,可以使用 VS Code 可追踪的隐藏终端/任务终端。当前工具环境没有 VS Code 终端能力时,允许使用本机可见的 `cmd`/PowerShell 窗口启动;禁止使用脱离用户可见窗口的后台服务或守护进程方式启动。标准端口无法释放时,只有同步更新前端本地 `ApiBase` 和测试变量后才可使用明确的临时端口,并在任务结束时说明。
182
- 4. 启动后轮询验证 launch profile 实际地址可访问;至少确认端口已监听、进程存在、最近日志没有立即崩溃。涉及新增 API 时,再调用新增/受影响接口做一次真实请求。
183
- 5. 最终回复必须明确说明:后端已重新编译、旧进程 PID 是否停止、新进程 PID、实际端口是否监听、验证的 URL 或接口。若因为用户明确要求不中断、端口被非 Microi 进程占用或配置缺失导致无法重启,必须把阻塞原因说具体。
184
-
185
- 这条规则优先于“避免打断正在运行服务”的默认谨慎策略;本地开发联调场景下,用户通常需要 launch profile 当前端口上的后端加载最新代码。
186
-
169
+ ## 后端代码改动后的重启验收
170
+
171
+ AI 只要修改了 `Microi.Server/**` 下会影响 `Microi.net.Api` 运行结果的后端源码、配置、控制器、服务、依赖项目或接口行为,任务收尾前必须完成一次“编译 + 重启本地后端 + 健康验证”,不要只用隔离输出目录 build 后结束。
172
+
173
+ 强制流程:
174
+
175
+ 1. 先执行后端编译验证。若 launch profile 当前端口上的开发服务导致 `bin/Debug/net10.0` DLL 被锁,可以先精确停止当前工作区的 `Microi.net.Api` 进程后重新编译;只有用户明确要求不中断正在运行服务时,才允许用临时输出目录作为补充验证,并必须说明运行服务尚未替换。
176
+ 2. 从 `launchSettings.json` 回读实际端口,查找并停止该端口上的本地 `Microi.net.Api` 进程。只停止命令行与当前工作区匹配的 Microi 后端,不要误杀数据库、Redis、Node 前端或其它业务进程。
177
+ 3. 必须进入 `Microi.Server/Microi.net.Api` 目录启动:
178
+ ```powershell
179
+ dotnet run --launch-profile Microi.net.Api
180
+ ```
181
+ 启动优先发生在用户能在 VS Code 中看到和停止的终端中,方便用户查看日志并手动停止;用户明确允许时,可以使用 VS Code 可追踪的隐藏终端/任务终端。当前工具环境没有 VS Code 终端能力时,允许使用本机可见的 `cmd`/PowerShell 窗口启动;禁止使用脱离用户可见窗口的后台服务或守护进程方式启动。标准端口无法释放时,只有同步更新前端本地 `ApiBase` 和测试变量后才可使用明确的临时端口,并在任务结束时说明。
182
+ 4. 启动后轮询验证 launch profile 实际地址可访问;至少确认端口已监听、进程存在、最近日志没有立即崩溃。涉及新增 API 时,再调用新增/受影响接口做一次真实请求。
183
+ 5. 最终回复必须明确说明:后端已重新编译、旧进程 PID 是否停止、新进程 PID、实际端口是否监听、验证的 URL 或接口。若因为用户明确要求不中断、端口被非 Microi 进程占用或配置缺失导致无法重启,必须把阻塞原因说具体。
184
+
185
+ 这条规则优先于“避免打断正在运行服务”的默认谨慎策略;本地开发联调场景下,用户通常需要 launch profile 当前端口上的后端加载最新代码。
186
+
187
187
  <!-- /microi-progressive:chunk -->
188
188
  <!-- microi-progressive:chunk id=workspace-conventions-036 sha256=db96c39a15f4b5637ce37555797858320256dda22daf7ac5cdaae2a436fd214c -->
189
- ## MCP 可调用性诊断补充
190
-
191
- 当用户反馈“Codex/VS Code 设置中能看到 MCP,但当前 AI 会话不能调用对应工具”时,不能只回答“当前会话没有注入”。必须按层排查:
192
-
193
- 1. 先确认 `.vscode/mcp.json`、`.cursor/mcp.json`、工作区根 `.mcp.json` 和 `~/.codex/config.toml` 都能解析,且目标 server key 为稳定 ASCII 格式,例如 `microi_itdos`,不要使用中文名或横杠。
194
- 2. 再用 Microi.VSCode 插件的“诊断 MCP 可调用性”命令,或等价脚本直接启动对应 `mcp-server.js` / `mcp-codex-stdio-adapter.js`,执行 `initialize` 和 `tools/list`,确认 `microi_get_db_schema`、`microi_get_field_list`、`microi_add_field`、`microi_update_field`、`microi_refresh_schema_cache` 等核心工具真实返回。
195
- 3. 如果当前 AI 客户端支持工具发现或延迟加载,AI 必须先主动执行工具发现/热加载流程,例如 `tool_search`、客户端 MCP refresh、Microi.VSCode 的启动/诊断命令;不要先让用户手动重启、重载或重新生成 MCP。
196
- 4. 如果真实握手成功但 Codex 当前对话仍没有注入 `mcp__...` 工具,AI 仍应优先使用等价的 MCP stdio JSON-RPC 直连 fallback 完成当前任务:读取对应 MCP 配置、启动 adapter/server、执行 `initialize`、`tools/list`、`tools/call`,并严格遵守该 MCP 绑定的 API Server 和 OsClient 边界。直连脚本必须放在 `.tmp/` 或使用一次性 stdin,不得散落到项目目录。
197
- 5. 只有在客户端不支持热加载、直连 fallback 也无法完成任务,或写操作边界无法确认时,才告知用户需要新开对话、重载 Codex 或检查 MCP 配置。说明必须写清楚:MCP 配置和进程是否可用、当前会话为什么没有注入工具、已经尝试过哪些自动恢复动作。
198
- 6. 如果握手失败,要把失败层级说清楚:配置文件解析失败、路径不存在、token 文件缺失、MCP 进程启动失败、`initialize` 失败、`tools/list` 缺核心工具,不能把这些问题混成“用户没启用 MCP”。
199
- 7. Microi.VSCode 生成 MCP 配置时应清理旧的中文/横杠 Microi MCP key,只保留 `microi_<osClient>` 或 `microi_<osClient>_<host>` 形式,避免不同 AI 客户端因 namespace 不稳定而无法注入工具。
200
-
189
+ ## MCP 可调用性诊断补充
190
+
191
+ 当用户反馈“Codex/VS Code 设置中能看到 MCP,但当前 AI 会话不能调用对应工具”时,不能只回答“当前会话没有注入”。必须按层排查:
192
+
193
+ 1. 先确认 `.vscode/mcp.json`、`.cursor/mcp.json`、工作区根 `.mcp.json` 和 `~/.codex/config.toml` 都能解析,且目标 server key 为稳定 ASCII 格式,例如 `microi_itdos`,不要使用中文名或横杠。
194
+ 2. 再用 Microi.VSCode 插件的“诊断 MCP 可调用性”命令,或等价脚本直接启动对应 `mcp-server.js` / `mcp-codex-stdio-adapter.js`,执行 `initialize` 和 `tools/list`,确认 `microi_get_db_schema`、`microi_get_field_list`、`microi_add_field`、`microi_update_field`、`microi_refresh_schema_cache` 等核心工具真实返回。
195
+ 3. 如果当前 AI 客户端支持工具发现或延迟加载,AI 必须先主动执行工具发现/热加载流程,例如 `tool_search`、客户端 MCP refresh、Microi.VSCode 的启动/诊断命令;不要先让用户手动重启、重载或重新生成 MCP。
196
+ 4. 如果真实握手成功但 Codex 当前对话仍没有注入 `mcp__...` 工具,AI 仍应优先使用等价的 MCP stdio JSON-RPC 直连 fallback 完成当前任务:读取对应 MCP 配置、启动 adapter/server、执行 `initialize`、`tools/list`、`tools/call`,并严格遵守该 MCP 绑定的 API Server 和 OsClient 边界。直连脚本必须放在 `.tmp/` 或使用一次性 stdin,不得散落到项目目录。
197
+ 5. 只有在客户端不支持热加载、直连 fallback 也无法完成任务,或写操作边界无法确认时,才告知用户需要新开对话、重载 Codex 或检查 MCP 配置。说明必须写清楚:MCP 配置和进程是否可用、当前会话为什么没有注入工具、已经尝试过哪些自动恢复动作。
198
+ 6. 如果握手失败,要把失败层级说清楚:配置文件解析失败、路径不存在、token 文件缺失、MCP 进程启动失败、`initialize` 失败、`tools/list` 缺核心工具,不能把这些问题混成“用户没启用 MCP”。
199
+ 7. Microi.VSCode 生成 MCP 配置时应清理旧的中文/横杠 Microi MCP key,只保留 `microi_<osClient>` 或 `microi_<osClient>_<host>` 形式,避免不同 AI 客户端因 namespace 不稳定而无法注入工具。
200
+
201
201
  <!-- /microi-progressive:chunk -->
202
202
  <!-- microi-progressive:chunk id=workspace-conventions-037 sha256=e8ddd5ad53787087f8e50a13618ee5626686cc72b0b21c1b12b0dc60ea515713 -->
203
- ## Windows MCP 控制台闪窗复盘
204
-
205
- 当用户反馈“打开 Microi.VSCode、添加服务器或初始化 MCP 后连续弹出并立即关闭多个 cmd 窗口”时,应按进程风暴排查,不能只给已有 `spawn` 补 `windowsHide`:
206
-
207
- 1. MCP 配置文件是各客户端的事实源。内容未变化时必须使用 write-if-changed,禁止仅为“同步”而反复改写文件并触发监听器重启。
208
- 2. 生成 `~/.codex/config.toml` 后,禁止再隐式循环执行 `codex mcp list/remove/add`;服务器数量越多,这类逐项 CLI 同步越会放大成几十个瞬时控制台进程。
209
- 3. VS Code 已配置 `chat.mcp.autostart` 时,插件后台监测只能检查配置和状态,禁止在侧栏显示、定时轮询、登录、添加连接或初始化流程里再次执行 `workbench.mcp.startServer('*')`。
210
- 4. 握手诊断会真实启动每个 stdio MCP,只能由用户显式点击“诊断 MCP 可调用性”触发;常规配置成功提示不得暗中运行整组诊断。
211
- 5. Windows 的 VS Code/Cursor 配置优先复用 GUI Electron 宿主 `process.execPath` 并设置 `ELECTRON_RUN_AS_NODE=1`,避免把控制台子系统的外部 `node.exe` 持久化为每个 MCP 的启动命令。Trae 若因空格路径兼容必须经过 `cmd.exe`,仍需使用固定 launcher 并隐藏窗口。
212
- 6. CLI 或初始化器运行在 VS Code/Cursor Electron 宿主内时,必须通过 `process.versions.electron` 或等价事实识别宿主,并把 `ELECTRON_RUN_AS_NODE=1` 同步写入 `.vscode/mcp.json`、`.cursor/mcp.json`、根 `.mcp.json` 以及 `.codex/config.toml` 的对应 stdio 配置。禁止只把 `Code.exe`/`Cursor.exe` 写成 `command` 却遗漏 Node 模式;否则 Windows 会把 `mcp-codex-stdio-adapter.js` 当普通文件交给编辑器打开,每次启动或切换 AI 对话都可能新增一棵 GUI 进程树。
213
- 7. Codex 仍只能生成一个 `microi_codex` 路由块,禁止按 Profile 注册多个 Codex MCP。验收必须同时回读配置和进程:凡 `Code.exe`/`Cursor.exe` 命令都带 Node 模式,且不得存在以 `mcp-codex-stdio-adapter.js`、`microi-codex-router.js` 为普通文件参数的可见编辑器根进程;多个对话的 Router 应复用共享 Broker,而不是各自再拉起全部真实 Profile MCP。
214
- 8. 回归测试至少静态断言:Codex CLI 批量注册函数不存在、后台 monitor 不包含 `startServer`、自动配置不包含诊断、Codex 配置内容不变时不改写、Windows GUI 宿主检查早于外部 Node 探测、CLI 与 Codex 路由配置都保留 `ELECTRON_RUN_AS_NODE=1`。再在扩展开发宿主中覆盖打开侧栏、添加连接、初始化 MCP,观察无连续控制台闪窗或脚本文件被自动打开。
215
-
203
+ ## Windows MCP 控制台闪窗复盘
204
+
205
+ 当用户反馈“打开 Microi.VSCode、添加服务器或初始化 MCP 后连续弹出并立即关闭多个 cmd 窗口”时,应按进程风暴排查,不能只给已有 `spawn` 补 `windowsHide`:
206
+
207
+ 1. MCP 配置文件是各客户端的事实源。内容未变化时必须使用 write-if-changed,禁止仅为“同步”而反复改写文件并触发监听器重启。
208
+ 2. 生成 `~/.codex/config.toml` 后,禁止再隐式循环执行 `codex mcp list/remove/add`;服务器数量越多,这类逐项 CLI 同步越会放大成几十个瞬时控制台进程。
209
+ 3. VS Code 已配置 `chat.mcp.autostart` 时,插件后台监测只能检查配置和状态,禁止在侧栏显示、定时轮询、登录、添加连接或初始化流程里再次执行 `workbench.mcp.startServer('*')`。
210
+ 4. 握手诊断会真实启动每个 stdio MCP,只能由用户显式点击“诊断 MCP 可调用性”触发;常规配置成功提示不得暗中运行整组诊断。
211
+ 5. Windows 的 VS Code/Cursor 配置优先复用 GUI Electron 宿主 `process.execPath` 并设置 `ELECTRON_RUN_AS_NODE=1`,避免把控制台子系统的外部 `node.exe` 持久化为每个 MCP 的启动命令。Trae 若因空格路径兼容必须经过 `cmd.exe`,仍需使用固定 launcher 并隐藏窗口。
212
+ 6. CLI 或初始化器运行在 VS Code/Cursor Electron 宿主内时,必须通过 `process.versions.electron` 或等价事实识别宿主,并把 `ELECTRON_RUN_AS_NODE=1` 同步写入 `.vscode/mcp.json`、`.cursor/mcp.json`、根 `.mcp.json` 以及 `.codex/config.toml` 的对应 stdio 配置。禁止只把 `Code.exe`/`Cursor.exe` 写成 `command` 却遗漏 Node 模式;否则 Windows 会把 `mcp-codex-stdio-adapter.js` 当普通文件交给编辑器打开,每次启动或切换 AI 对话都可能新增一棵 GUI 进程树。
213
+ 7. Codex 仍只能生成一个 `microi_codex` 路由块,禁止按 Profile 注册多个 Codex MCP。验收必须同时回读配置和进程:凡 `Code.exe`/`Cursor.exe` 命令都带 Node 模式,且不得存在以 `mcp-codex-stdio-adapter.js`、`microi-codex-router.js` 为普通文件参数的可见编辑器根进程;多个对话的 Router 应复用共享 Broker,而不是各自再拉起全部真实 Profile MCP。
214
+ 8. 回归测试至少静态断言:Codex CLI 批量注册函数不存在、后台 monitor 不包含 `startServer`、自动配置不包含诊断、Codex 配置内容不变时不改写、Windows GUI 宿主检查早于外部 Node 探测、CLI 与 Codex 路由配置都保留 `ELECTRON_RUN_AS_NODE=1`。再在扩展开发宿主中覆盖打开侧栏、添加连接、初始化 MCP,观察无连续控制台闪窗或脚本文件被自动打开。
215
+
216
216
  <!-- /microi-progressive:chunk -->