@microi.net/cli 5.8.5 → 5.8.7

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 (208) 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/LICENSE +21 -21
  7. package/README.md +71 -71
  8. package/assets/build-meta.json +7 -7
  9. package/assets/feature-matrix.json +138 -138
  10. package/assets/logo.svg +4 -4
  11. package/cordis.patch.yml +1 -1
  12. package/package.json +1 -1
  13. package/scripts/mcp-codex-stdio-adapter.js +0 -0
  14. package/scripts/mcp-server.js +1 -1
  15. package/scripts/microi-cli.js +66 -65
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +618 -618
  18. package/scripts/microi-skills.meta.json +384 -384
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/.progressive-disclosure-manifest.json +21 -21
  21. package/skills/README.md +287 -287
  22. package/skills/ai-engine/SKILL.md +269 -265
  23. package/skills/ai-engine/agents/openai.yaml +4 -4
  24. package/skills/ai-engine/references/ai-employees.md +48 -48
  25. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  26. package/skills/ai-platform-governance/SKILL.md +177 -177
  27. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  28. package/skills/app-store/SKILL.md +525 -525
  29. package/skills/app-store/agents/openai.yaml +4 -4
  30. package/skills/business-blueprint/SKILL.md +193 -193
  31. package/skills/datasource-engine/SKILL.md +93 -93
  32. package/skills/datasource-engine/agents/openai.yaml +4 -4
  33. package/skills/dos-orm/SKILL.md +97 -95
  34. package/skills/dos-orm/references/api-reference.md +229 -229
  35. package/skills/email-engine/SKILL.md +81 -81
  36. package/skills/email-engine/references/v8-email.md +34 -34
  37. package/skills/job-engine/SKILL.md +176 -176
  38. package/skills/job-engine/agents/openai.yaml +4 -4
  39. package/skills/message-notification/SKILL.md +156 -156
  40. package/skills/message-notification/agents/openai.yaml +5 -5
  41. package/skills/message-notification/references/contracts.md +102 -102
  42. package/skills/microi/SKILL.md +14 -14
  43. package/skills/microi-ai-app-auth.js +652 -652
  44. package/skills/microi-ai-application/SKILL.md +115 -115
  45. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  46. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  47. package/skills/microi-client-frontend/SKILL.md +246 -244
  48. 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 +144 -144
  49. 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 +196 -196
  50. 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 +167 -167
  51. package/skills/microi-codex/SKILL.md +102 -100
  52. package/skills/microi-codex-installer/SKILL.md +231 -231
  53. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  54. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  55. package/skills/microi-db-schema/SKILL.md +175 -175
  56. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  57. package/skills/microi-db-schema/references/core-tables.md +695 -695
  58. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  59. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  60. package/skills/microi-db-schema/references/schema.md +646 -646
  61. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  62. package/skills/microi-deployment/SKILL.md +222 -220
  63. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  64. package/skills/microi-docs-coverage/SKILL.md +133 -133
  65. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  66. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  67. package/skills/microi-form-engine/SKILL.md +333 -333
  68. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  69. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  70. package/skills/microi-form-layout/SKILL.md +205 -205
  71. 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
  72. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  73. 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 +176 -176
  74. package/skills/microi-left-right-layout/SKILL.md +141 -141
  75. package/skills/microi-microservice/SKILL.md +328 -326
  76. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  77. package/skills/microi-mobile-app-quality/SKILL.md +185 -185
  78. 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
  79. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
  80. package/skills/microi-solution-quotation/SKILL.md +78 -78
  81. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  82. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  83. package/skills/microi-sso/SKILL.md +96 -90
  84. package/skills/microi-sso/references/acceptance.md +49 -49
  85. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  86. package/skills/microi-sso/references/inbound.md +53 -53
  87. package/skills/microi-sso/references/outbound.md +39 -39
  88. package/skills/microi-system-delivery/SKILL.md +137 -137
  89. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
  90. 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 +217 -217
  91. package/skills/microi-ui/SKILL.md +192 -192
  92. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
  93. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  94. 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 +225 -225
  95. 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 +154 -154
  96. package/skills/microi.v8.js +1921 -1921
  97. package/skills/module-engine/SKILL.md +255 -255
  98. package/skills/module-engine/references/module-config.md +204 -204
  99. package/skills/ocr-engine/SKILL.md +113 -113
  100. package/skills/ocr-engine/agents/openai.yaml +4 -4
  101. package/skills/page-engine/SKILL.md +206 -206
  102. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  103. 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 +234 -234
  104. 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 +60 -60
  105. package/skills/performance-testing/SKILL.md +221 -221
  106. package/skills/playwright-e2e/SKILL.md +196 -196
  107. 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 +173 -173
  108. 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 +183 -183
  109. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  110. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  111. package/skills/print-engine/SKILL.md +259 -259
  112. package/skills/production-readonly-audit/SKILL.md +41 -41
  113. package/skills/report-engine/SKILL.md +71 -71
  114. package/skills/report-engine/agents/openai.yaml +4 -4
  115. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  116. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  117. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  118. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  119. package/skills/search-engine/SKILL.md +75 -75
  120. package/skills/search-engine/agents/openai.yaml +4 -4
  121. package/skills/spider-engine/SKILL.md +190 -190
  122. package/skills/system-observability/SKILL.md +249 -246
  123. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  124. package/skills/translate-engine/SKILL.md +140 -140
  125. package/skills/translate-engine/agents/openai.yaml +4 -4
  126. package/skills/ui-design/SKILL.md +223 -223
  127. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  128. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  129. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  130. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  131. package/skills/ui-design/references/design-pattern-library.md +184 -184
  132. package/skills/ui-design/references/mci-design-contract.md +163 -163
  133. package/skills/ui-design/references/motion-and-media.md +78 -78
  134. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  135. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
  136. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  137. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
  138. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
  139. package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
  140. package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
  141. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
  142. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
  143. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  144. package/skills/unity-integration/SKILL.md +171 -171
  145. package/skills/unity-integration/agents/openai.yaml +4 -4
  146. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  147. package/skills/unity-integration/references/sdk-api.md +82 -82
  148. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  149. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  150. package/skills/v8-api-config/SKILL.md +388 -388
  151. package/skills/v8-cache-pattern/SKILL.md +312 -312
  152. package/skills/v8-crud-api/SKILL.md +178 -178
  153. 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 +226 -226
  154. package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
  155. package/skills/v8-debugging/SKILL.md +284 -284
  156. package/skills/v8-explorer-tree/SKILL.md +228 -228
  157. package/skills/v8-export-import/SKILL.md +219 -219
  158. 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 +211 -211
  159. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  160. 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 +42 -42
  161. package/skills/v8-file-upload/SKILL.md +284 -284
  162. 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 +263 -263
  163. 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 +161 -161
  164. package/skills/v8-formengine-http/SKILL.md +238 -238
  165. package/skills/v8-frontend-events/SKILL.md +180 -180
  166. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  167. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  168. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  169. package/skills/v8-http-integration/SKILL.md +182 -182
  170. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  171. 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 +44 -44
  172. package/skills/v8-image-processing/SKILL.md +190 -190
  173. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  174. package/skills/v8-image-processing/references/api-reference.md +623 -623
  175. package/skills/v8-menu-buttons/SKILL.md +186 -186
  176. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
  177. 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
  178. 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 +104 -104
  179. package/skills/v8-mongodb/SKILL.md +200 -200
  180. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  181. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  182. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  183. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  184. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  185. package/skills/v8-security/SKILL.md +210 -210
  186. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  187. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  188. package/skills/v8-sql-query/SKILL.md +302 -302
  189. package/skills/v8-table-event/SKILL.md +176 -176
  190. 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 +216 -216
  191. 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 +46 -46
  192. package/skills/v8-tcp-integration/SKILL.md +147 -147
  193. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  194. package/skills/v8-template-engine/SKILL.md +167 -167
  195. package/skills/v8-utilities/SKILL.md +104 -104
  196. package/skills/v8-utilities/references/client-api-index.md +143 -143
  197. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  198. package/skills/v8-utilities/references/server-api-index.md +188 -188
  199. package/skills/v8-workflow/SKILL.md +252 -252
  200. package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
  201. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  202. package/skills/vision-engine/SKILL.md +160 -160
  203. package/skills/vision-engine/agents/openai.yaml +4 -4
  204. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  205. package/skills/workspace-conventions/SKILL.md +273 -273
  206. 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 +209 -209
  207. 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 +217 -217
  208. 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 +27 -27
@@ -1,175 +1,175 @@
1
- ---
2
- name: microi-db-schema
3
- description: Microi 吾码数据库结构与字典指南。用于通过实时 MCP Schema 或当前租户快照检查 Microi 平台表,梳理 diy_table/diy_field/sys_menu 关系,定位 V8 事件存储字段,生成安全的系统表 V8 FormEngine 查询,或分析工作流、SaaS、权限、菜单、接口引擎、数据源和系统配置结构。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi DB Schema
9
-
10
- 使用本 skill 回答数据库结构问题,并编写依赖 Microi 吾码平台表名、字段名和关系的代码。
11
-
12
- ## 快速流程
13
-
14
- 1. 优先调用 `microi_get_db_schema` 获取当前服务器的实时表结构;无法连接时才读取当前引擎所属 OsClient 目录的 `.microi-db-schema.md`,并明确说明快照可能过期。`references/schema.md` 只用于理解通用关系,不是任何租户的权威字段清单。
15
- 2. 编写感知结构的 V8 代码时,优先使用带 `_Where` 的 `V8.FormEngine`。只有联表、聚合或 FormEngine 无法表达的场景才使用 `V8.Db.FromSql`,并且必须参数化动态值。
16
- 3. 实时 MCP Schema 是字段事实源;本地 `.microi-db-schema.md` 仅作离线快照。不要假设普通用户拥有某个仓库专属数据库文件。DIY 表还带有固定系统字段(`Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted`)。
17
-
18
- ## 核心模型
19
-
20
- - `diy_table` 存储表单/表元数据和表级 V8 事件。
21
- - `diy_field` 存储每张 DIY 表的字段,包括组件类型、校验、可见性、数据源、字段事件和模板 V8。
22
- - DIY 表固定物理字段 `Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted` 也必须有正常的 `diy_field` 元数据;设计器通过 `DisplayDefaultField` 默认隐藏,而不是把它们当异常字段。自然语言“修复审计字段/默认字段异常”应调用 `microi_repair_audit_fields`,由平台幂等补元数据,禁止直接用 SQL 临时修租户数据。
23
- - `sys_menu` 将 DIY 表转换为菜单/模块页面,并存储查询、按钮、导入导出、卡片/移动端、工作流和权限相关的模块配置。
24
- - `sys_apiengine` 存储接口引擎定义;通过 `V8.ApiEngine.Run(ApiEngineKey, params)` 调用。
25
- - `sys_datasource` 存储组件和页面可复用的数据源。
26
- - `microi_database` 将扩展数据库 key 映射到 `V8.Dbs.<DbKey>`。
27
- - `wf_*` 表存储工作流设计、节点、连线、实例、待办和历史。
28
-
29
- ### 外部数据库结构发现
30
-
31
- - `microi_get_db_schema` 只读取当前吾码租户自身的 DIY/物理表结构,不接受第三方连接串。
32
- - 用户提供 MySQL、SQL Server、Oracle、PostgreSQL、达梦或人大金仓连接信息时,先用 `microi_list_database_types` 归一化类型,再用 `microi_inspect_external_database` 读取表、字段、类型、空值、默认值、主键和说明。
33
- - 临时读取不等于保存连接。只有用户明确确认后才能调用 `microi_save_database_connection`;结果与工作记录不得回显连接字符串。
34
- - 默认抽样使用只读的 `microi_query_external_database`。用户明确要求数据库管理级操作时,可使用独立的 `microi_execute_external_database` 执行 DML、DDL、存储过程和多语句;该接口必须由后端验证当前用户 `Level >= 9999`、显式确认并写脱敏审计。
35
- - 外部结构映射到吾码时仍需走 Manifest 计划、`dryRun:true`、确认写入和 `microi_validate_system`,不能把第三方物理 DDL 直接复制到吾码主库。
36
- - 大批量同步使用稳定业务键、唯一约束和 upsert;MCP 适合结构发现和抽样,持续搬运应生成接口引擎、Job 或 MQ 消费者。
37
-
38
- ## AI 应用持久化表创建规则(强制)
39
-
40
- - AI 创建的应用、业务模块或演示项目,只要需要持久化业务数据,默认必须通过 `microi_create_table`、Manifest + `microi_generate_system` 等 MCP 标准建模入口创建表,确保物理表、`diy_table` 和 `diy_field` 同步落地。不得只执行 `CREATE TABLE`、只导入物理表,或只写 `diy_table` 元数据。
41
- - 这样创建的业务表必须能在表单引擎中查看,并能由 `V8.FormEngine` / FormEngine HTTP API 正常查询和写入。接口引擎应优先通过 FormEngine 操作这些表;只有联表、聚合或 FormEngine 无法表达的场景才使用参数化 SQL。
42
- - 平台框架表、第三方组件自维护表、迁移中间表、数据库运维表等确实不适合表单引擎的物理表可以例外,但必须在交付记录中说明用途和例外原因,不能把普通 AI 应用业务表归入例外。
43
- - 建模完成后必须回读验收:`microi_get_db_schema` 能看到物理表及字段;`diy_table.Name` 唯一对应物理表;`diy_field.TableId` 均正确关联;至少执行一次 FormEngine 查询或可回滚 CRUD 验证。发现“物理表存在、表单引擎不可见”时,应补齐标准元数据或删除孤儿物理表,不能把它当作已交付。
44
- - 统计表数量时必须区分三个口径:物理表总数、有效 `diy_table` 元数据数、应用安装包内表引用数。安装包引用数可能包含平台基础表并跨应用重复,不能直接相加后当成租户实际唯一表数。
45
-
46
- ## 数据库索引建模与 MCP 执行规则(强制)
47
-
48
- 数据库索引是低代码数据模型的一部分,不是上线后的临时 SQL 调优。只要需求、蓝图、接口、Job、工作流或评审明确指出“某表的某些字段需要索引/唯一约束”,就必须把索引写入 Manifest 的 `tables[].indexes`,并通过 `microi_create_table_index` 创建;禁止用 `V8.Db`、接口引擎、原生 FormEngine、一次性维护引擎或手写 `CREATE INDEX` 绕过 MCP。
49
-
50
- 标准流程:
51
-
52
- 1. `microi_get_db_schema` 核对表和字段。
53
- 2. `microi_get_table_indexes(tableName)` 读取真实物理索引,不能根据 `diy_field.Unique` 或源码猜测。
54
- 3. 根据真实查询的 `WHERE / JOIN / ORDER BY / GROUP BY` 设计有序字段,先写入 Manifest `tables[].indexes`。
55
- 4. `microi_plan_system` / `microi_generate_system(dryRun:true)` 检查字段引用;单独变更时直接调用 `microi_create_table_index`,并传 `confirmExecution=tableName`。
56
- 5. 再次调用 `microi_get_table_indexes` 回读;DIY 表还必须在 `Microi.Client` 的“开发设计 → 索引管理”中看到同名索引、正确字段顺序和唯一性。
57
- 6. 删除前先回读精确名称,只能用 `microi_drop_table_index`;主键索引禁止删除,删除确认值使用 `tableName:indexName`。
58
-
59
- 必须评估并通常建立索引的字段组合:
60
-
61
- - 租户业务表:所有租户内高频查询的组合索引通常以 `OsClient` 开头,例如 `(OsClient, Status, CreateTime)`;不能只给 `Status` 建低选择性单列索引。
62
- - 业务唯一键和幂等键:订单号、外部流水号、`EventId`、`IdempotencyKey` 等必须按真实隔离边界建立唯一索引,例如 `(OsClient, OrderNo)`,不能只做“先查再新增”。
63
- - 外键和子表回查:高频 `JOIN`、`TableChildFkFieldName`、`XxxId` 明细列表必须覆盖关联字段;如果查询同时固定租户和状态,按等值字段在前、范围/排序字段在后的顺序设计组合索引。
64
- - 待办、Job、outbox/inbox、重试队列:按实际抢占语句建立 `(OsClient, Status, NextRetryTime)`、`(OsClient, JobKey, ScheduleTime)` 等索引,并为稳定事件/任务键增加唯一索引。
65
- - 高频时间范围列表:常用租户/类型/状态等值条件在前,`CreateTime`、`UpdateTime` 等范围或排序字段在后。
66
-
67
- 禁止机械建索引:
68
-
69
- - 不得把 `SearchFieldIds`、`SortFieldIds`、`StatisticsFields` 中每个字段都自动变成单列索引;必须结合真实查询与选择性。
70
- - `Status`、开关、性别、删除标记等低基数字段通常不能单独建索引;只有作为高频组合索引的一部分才有价值。
71
- - `LIKE '%keyword%'`、富文本、长文本、JSON、上传、地图、布局、子表控件等不能靠普通 B-tree 索引解决;应改为前缀查询、专用搜索引擎、生成列或其它明确方案。
72
- - 组合索引遵守最左前缀;重复/被更长索引左前缀完全覆盖的索引应合并。索引过多会增加写放大和锁等待,必须在交付中说明查询依据。
73
- - 唯一索引是业务约束。创建前必须检查并处理历史重复数据与 `NULL` 语义;不得为了让 DDL 通过而静默删改生产数据。
74
-
75
- 平台核心表的发布变更还必须同步正式升级资源/迁移,确保新租户和旧租户升级一致;但对指定在线租户的实际创建、修复和回读仍必须通过上述 MCP 索引工具完成,不能只提交迁移源码便宣称线上已生效。
76
-
77
- ## diy_table 命名规则
78
-
79
- 创建或修复 `diy_table` 时必须区分三个字段职责:
80
-
81
- - `Name`:英文物理表名或表 Key,例如 `edu_exam_question`、`mci_spider_rule`。不要写中文,不要写长说明。
82
- - `Description`:简短中文表名,例如 `商品`、`订单`、`采集规则`。不要写一整段用途说明。
83
- - `Remark`:备注/表详细说明,用于写业务用途、维护规则、交付说明、注意事项等长文本。
84
-
85
- AI 或 MCP 生成低代码系统时,必须默认遵守此规则。发现已有数据把长说明写进 `Description` 时,应将短中文名保留在 `Description`,把详细说明迁移到 `Remark`,并回读 `diy_table` 验证。
86
-
87
- ## sys_menu 生成默认配置
88
-
89
- 后台菜单默认必须是有分类的树形结构。AI/MCP 创建真实业务后台时,先创建业务域或系统域父菜单,再把 CRUD、报表、规则、任务、日志、设置等叶子模块挂到父级;不要把一批叶子模块直接创建到根级。改造已有菜单时必须回读 `sys_menu`,更新 `ParentId`/`Sort`,补管理员角色权限,并再次回读验证最终树结构。
90
-
91
- 通过自然语言 + MCP 创建后端菜单时,不能只写 `Name`、`DiyTableId` 和基础路由。绑定 `diyTableId` 的 CRUD 菜单应显式配置,或允许 MCP/后端自动推断以下字段:
92
-
93
- - `TableDiyFieldIds` / `SelectFields`:列表列优先选择名称、标题、编号、状态、类型、负责人、金额、数量、时间等业务可读字段。
94
- - `SearchFieldIds`:默认选择名称/标题/编号、状态/类型/分类、负责人/部门/客户、日期时间等常用筛选字段;`Select`、`Radio`、`Checkbox`、`Switch`、`Department`、树/级联/地址等控件默认按等值筛选。
95
- - `NotShowFields`:默认隐藏 `Id`、`XxxId`、`XxxIds`、租户/系统字段、布局控件,以及富文本、上传、地图、子表、代码编辑器等不适合表格展示的重字段。
96
- - `SortFieldIds` / `DefaultOrderBy`:默认包含日期时间、`Sort`、金额/数量等排序字段,并优先按 `CreateTime DESC`。
97
- - `StatisticsFields`:金额、价格、数量、积分、余额、人数、总计等数值字段默认配置 `Sum` 统计。
98
- - `MobileListFields` / `CardTitleTagFields` / `CardBottomTagFields`:移动端或卡片列表默认保留 3-4 个高信息密度字段,标题标签优先状态/类型/分类,底部标签优先金额/数量/时间。
99
-
100
- 显式配置优先级最高;未指定时由 MCP 生成器或后端 `CreateModule` 兜底补齐,避免空白菜单配置。
101
-
102
- 隐藏子表菜单规则:用于 `TableChild`、附件明细、微服务页面/路由子表等表单内嵌承载的 `sys_menu`,必须设置 `Display=0`、`AppDisplay=0`、`HasChild=0`。隐藏菜单不应再开启“是否有子集”,否则 PC/移动端菜单树会把上级业务菜单误判为空父菜单。
103
-
104
- ## 表单控件与布局
105
-
106
- 表单控件以 `Microi.Client/src/views/form-engine/diy-field-component/` 和 `diy-component-list.json` 为事实源。当前常用组件包括:`Text`、`Guid`、`Textarea`、`NumberText`、`DateTime`、`Select`、`MultipleSelect`、`Radio`、`Checkbox`、`Switch`、`Rate`、`Progress`、`Slider`、`ColorPicker`、`AutoNumber`、`Button`、`Divider`、`CollapseGroup`、`Tabs`、`Alert`、`StaticText`、`Html`、`RichText`、`CodeEditor`、`JsonTable`、`ImgUpload`、`FileUpload`、`Autocomplete`、`TagInput`、`Transfer`、`Cascader`、`Address`、`Department`、`SelectTree`、`TreeCheckbox`、`OpenTable`、`JoinTable`、`JoinForm`、`TableChild`、`Map`、`MapArea`、`Qrcode`、`FontAwesome`、`DevComponent`。
107
-
108
- 字段较多的表单不要全部堆在一页:优先设置 `diy_table.Tabs`,并给字段写入 `diy_field.Tab`,常见分组为基础信息、联系信息、业务信息、附件备注、扩展信息。局部区域再用 `CollapseGroup` 或字段级 `Tabs` 控件做折叠/分段;`Textarea`、`RichText`、`CodeEditor`、上传、地图、子表、布局/自定义控件等使用 `FormWidth=24` 独占整行。
109
-
110
- ### 1:N 子表建模门禁
111
-
112
- - “子表、明细、清单、条目、行项目、多个记录”默认表示主表 1:N 子表;必须创建独立子表,
113
- 并把真实外键放在子表。不得创建主表 `XxxId` 后用 `JoinForm` 冒充子表。
114
- - `JoinForm` 仅用于主表保存一个目标 Id 并嵌入一条独立目标记录;目标表不能与当前表相同。
115
- 关系基数不明确时,MCP 写入前必须询问,不能把 `JoinForm` 当安全默认值。
116
- - 子表外键必须建立与物理租户隔离方式一致的回查索引:物理表存在 `OsClient` 时通常为
117
- `(OsClient, ParentId)`,独立租户物理表没有 `OsClient` 时为 `(ParentId)`。结构或索引读取失败
118
- 必须拒绝关系配置,不能为了通过校验新增不存在业务语义的 `OsClient` 列。子表还要有绑定同一子表的隐藏菜单,
119
- `Display=0`、`AppDisplay=0`、`HasChild=0`。
120
- - Manifest/蓝图审查时,只要发现 1:N 关系对应 `JoinForm`、缺少子表外键、缺少隐藏子菜单
121
- 或缺少回查索引,就必须判定计划不合格,停止写入。
122
- - 新建子表的 `diy_table.Id` / `sys_menu.Id` 尚未回读时,分两阶段创建并用
123
- `microi_update_field` 补 `TableChild` Config;不得猜 Id,也不得为了单次生成而换成
124
- `JoinForm`。
125
-
126
- `TableChild` 配置中的表、菜单和外键位于 `diy_field.Config` 根节点;主表列名和导入选项
127
- 位于 `diy_field.Config.TableChild`。例如:
128
-
129
- ```json
130
- {
131
- "TableChildTableId": "子表 diy_table.Id",
132
- "TableChildSysMenuId": "子表 sys_menu.Id",
133
- "TableChildSysMenuName": "项目成品清单",
134
- "TableChildFkFieldName": "XiangmuId",
135
- "TableChild": {
136
- "PrimaryTableFieldName": "Id",
137
- "ImportAutoFillFk": true,
138
- "FieldRelations": [
139
- ["Code", "XiangmuBM", true],
140
- ["Name", "XiangmuMC"]
141
- ],
142
- "DisablePagination": false
143
- }
144
- }
145
- ```
146
-
147
- `FieldRelations` 每项依次为 `[主表字段, 子表字段, 是否参与导入匹配]`。全部关系用于新增子表时回写父表值,也用于导入找到父表后回填空的子表字段;只有第三项为 `true` 的关系才用子表/Excel 值反查主表,多项为 `true` 时表示组合匹配。典型场景是 `Code -> XiangmuBM` 参与匹配,而 `Name -> XiangmuMC` 只回填,因此不能把全部关系无条件当作组合匹配。
148
-
149
- 后端继续读取旧版 `TableChildCallbackField`、`ImportRelations`、`ImportBackfillFields` 和单字段匹配配置。新版前端加载 TableChild 字段时按字段对去重合并为 `FieldRelations`,删除内存中的旧键,并在下一次正常保存字段配置时持久化新格式,避免重复合并。修改后按现有流程刷新结构缓存。
150
-
151
- 更多表单组件配置项见 `references/form-component-options.md`。新增或修改 `Microi.Client/src/views/form-engine/diy-field-component/` 组件配置时,同步更新该参考文档和官方表单组件文档。
152
-
153
- ## 简单枚举统一使用 Key-Value(强制)
154
-
155
- - 只要字段会跨 PC、UniApp、小程序、Web、接口或多语言使用,`Select`、`Radio`、`MultipleSelect`、`Checkbox` 的简单枚举默认必须使用 `KeyValue`,不得把中文展示文字同时当作数据库值。
156
- - `Key` 使用稳定、简短、大小写固定的英文或 ASCII 标识,不随界面语言和文案调整;`Value` 是给用户展示的中文或当前语言文字。
157
- - 字段配置必须保持 `DataSource:"KeyValue"`、`SelectLabel:"Value"`、`SelectSaveField:"Key"`;数据库、URL 查询参数和接口筛选条件统一保存/传递 `Key`,界面只展示 `Value`。
158
- - 客户端不得各自硬编码另一套中文到英文映射。由字段元数据或业务接口返回公开的 `{Key,Value}` 投影,客户端按 `Value` 渲染、按 `Key` 提交和筛选。
159
- - 旧表若已经保存中文 `Value`,上线时必须提供明确的 `Value -> Key` 数据迁移,并在过渡期让读取接口兼容 Key 和 Value;迁移后回读确认数据库只剩合法 Key,并刷新字段缓存。
160
- - 只有展示值与存储值永远相同、无需搜索筛选、无需多语言且不会跨客户端使用的纯静态字段,才允许使用简单 `Data` 数组。
161
-
162
- ### 复盘:Key-Value 展示值与筛选值混用
163
-
164
- 当字段元数据已改为 Key-Value、但历史记录仍保存中文 Value 时,界面按钮传英文 Key 会造成等值筛选全部为 0。修复不能只改按钮文案或只加前端映射,必须同时核对字段 Data/Config、存量物理数据、接口入参归一化和接口返回值;以“数据库存 Key、接口筛 Key、界面显 Value”的端到端回读为验收标准。
165
-
166
- ## 安全注意
167
-
168
- - 不要假设 `_Fields` 中列出的每个字段都是物理数据库列。`TableChild`、`Button`、`Divider`、`DevComponent`、`OpenTable` 和 `PhoneSMS` 是配置或交互组件。
169
- - 记住 DIY 表固定字段:`Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted`。
170
- - 使用原生 SQL 时,默认只查询未删除数据(`IsDeleted != 1`)。
171
- - 修改结构元数据时,要考虑缓存失效和物理表变化;改动范围保持收敛。
172
- - 新增或更新低代码字段时,优先使用 `microi_add_field` / `microi_update_field` 等 MCP 原生工具,不要临时手写 V8 元数据。`diy_field.TableId = null` 的字段行可能导致物理列存在,但 FormEngine/表结构加载不可见。
173
- - 修改业务枚举字段时,将 `diy_field.Data` 和 `diy_field.Config` 视为事实源元数据。确认 KeyValue 键与接口引擎、前端筛选使用的值一致,刷新结构缓存,并回读字段行,不要只相信本地常量。
174
- - 普通生成字段的 `diy_field.FormWidth` 保持 null/省略。只有 `CodeEditor`、`Textarea`、`RichText`、上传、`TableChild`、地图/布局或自定义组件等整行控件才使用 `24`。
175
- - 结构变更后,用 `microi_get_db_schema` 验证,并在需要时用 `microi_refresh_schema_cache` 刷新 `diy_table_field_list` 缓存。
1
+ ---
2
+ name: microi-db-schema
3
+ description: Microi 吾码数据库结构与字典指南。用于通过实时 MCP Schema 或当前租户快照检查 Microi 平台表,梳理 diy_table/diy_field/sys_menu 关系,定位 V8 事件存储字段,生成安全的系统表 V8 FormEngine 查询,或分析工作流、SaaS、权限、菜单、接口引擎、数据源和系统配置结构。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi DB Schema
9
+
10
+ 使用本 skill 回答数据库结构问题,并编写依赖 Microi 吾码平台表名、字段名和关系的代码。
11
+
12
+ ## 快速流程
13
+
14
+ 1. 优先调用 `microi_get_db_schema` 获取当前服务器的实时表结构;无法连接时才读取当前引擎所属 OsClient 目录的 `.microi-db-schema.md`,并明确说明快照可能过期。`references/schema.md` 只用于理解通用关系,不是任何租户的权威字段清单。
15
+ 2. 编写感知结构的 V8 代码时,优先使用带 `_Where` 的 `V8.FormEngine`。只有联表、聚合或 FormEngine 无法表达的场景才使用 `V8.Db.FromSql`,并且必须参数化动态值。
16
+ 3. 实时 MCP Schema 是字段事实源;本地 `.microi-db-schema.md` 仅作离线快照。不要假设普通用户拥有某个仓库专属数据库文件。DIY 表还带有固定系统字段(`Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted`)。
17
+
18
+ ## 核心模型
19
+
20
+ - `diy_table` 存储表单/表元数据和表级 V8 事件。
21
+ - `diy_field` 存储每张 DIY 表的字段,包括组件类型、校验、可见性、数据源、字段事件和模板 V8。
22
+ - DIY 表固定物理字段 `Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted` 也必须有正常的 `diy_field` 元数据;设计器通过 `DisplayDefaultField` 默认隐藏,而不是把它们当异常字段。自然语言“修复审计字段/默认字段异常”应调用 `microi_repair_audit_fields`,由平台幂等补元数据,禁止直接用 SQL 临时修租户数据。
23
+ - `sys_menu` 将 DIY 表转换为菜单/模块页面,并存储查询、按钮、导入导出、卡片/移动端、工作流和权限相关的模块配置。
24
+ - `sys_apiengine` 存储接口引擎定义;通过 `V8.ApiEngine.Run(ApiEngineKey, params)` 调用。
25
+ - `sys_datasource` 存储组件和页面可复用的数据源。
26
+ - `microi_database` 将扩展数据库 key 映射到 `V8.Dbs.<DbKey>`。
27
+ - `wf_*` 表存储工作流设计、节点、连线、实例、待办和历史。
28
+
29
+ ### 外部数据库结构发现
30
+
31
+ - `microi_get_db_schema` 只读取当前吾码租户自身的 DIY/物理表结构,不接受第三方连接串。
32
+ - 用户提供 MySQL、SQL Server、Oracle、PostgreSQL、达梦或人大金仓连接信息时,先用 `microi_list_database_types` 归一化类型,再用 `microi_inspect_external_database` 读取表、字段、类型、空值、默认值、主键和说明。
33
+ - 临时读取不等于保存连接。只有用户明确确认后才能调用 `microi_save_database_connection`;结果与工作记录不得回显连接字符串。
34
+ - 默认抽样使用只读的 `microi_query_external_database`。用户明确要求数据库管理级操作时,可使用独立的 `microi_execute_external_database` 执行 DML、DDL、存储过程和多语句;该接口必须由后端验证当前用户 `Level >= 9999`、显式确认并写脱敏审计。
35
+ - 外部结构映射到吾码时仍需走 Manifest 计划、`dryRun:true`、确认写入和 `microi_validate_system`,不能把第三方物理 DDL 直接复制到吾码主库。
36
+ - 大批量同步使用稳定业务键、唯一约束和 upsert;MCP 适合结构发现和抽样,持续搬运应生成接口引擎、Job 或 MQ 消费者。
37
+
38
+ ## AI 应用持久化表创建规则(强制)
39
+
40
+ - AI 创建的应用、业务模块或演示项目,只要需要持久化业务数据,默认必须通过 `microi_create_table`、Manifest + `microi_generate_system` 等 MCP 标准建模入口创建表,确保物理表、`diy_table` 和 `diy_field` 同步落地。不得只执行 `CREATE TABLE`、只导入物理表,或只写 `diy_table` 元数据。
41
+ - 这样创建的业务表必须能在表单引擎中查看,并能由 `V8.FormEngine` / FormEngine HTTP API 正常查询和写入。接口引擎应优先通过 FormEngine 操作这些表;只有联表、聚合或 FormEngine 无法表达的场景才使用参数化 SQL。
42
+ - 平台框架表、第三方组件自维护表、迁移中间表、数据库运维表等确实不适合表单引擎的物理表可以例外,但必须在交付记录中说明用途和例外原因,不能把普通 AI 应用业务表归入例外。
43
+ - 建模完成后必须回读验收:`microi_get_db_schema` 能看到物理表及字段;`diy_table.Name` 唯一对应物理表;`diy_field.TableId` 均正确关联;至少执行一次 FormEngine 查询或可回滚 CRUD 验证。发现“物理表存在、表单引擎不可见”时,应补齐标准元数据或删除孤儿物理表,不能把它当作已交付。
44
+ - 统计表数量时必须区分三个口径:物理表总数、有效 `diy_table` 元数据数、应用安装包内表引用数。安装包引用数可能包含平台基础表并跨应用重复,不能直接相加后当成租户实际唯一表数。
45
+
46
+ ## 数据库索引建模与 MCP 执行规则(强制)
47
+
48
+ 数据库索引是低代码数据模型的一部分,不是上线后的临时 SQL 调优。只要需求、蓝图、接口、Job、工作流或评审明确指出“某表的某些字段需要索引/唯一约束”,就必须把索引写入 Manifest 的 `tables[].indexes`,并通过 `microi_create_table_index` 创建;禁止用 `V8.Db`、接口引擎、原生 FormEngine、一次性维护引擎或手写 `CREATE INDEX` 绕过 MCP。
49
+
50
+ 标准流程:
51
+
52
+ 1. `microi_get_db_schema` 核对表和字段。
53
+ 2. `microi_get_table_indexes(tableName)` 读取真实物理索引,不能根据 `diy_field.Unique` 或源码猜测。
54
+ 3. 根据真实查询的 `WHERE / JOIN / ORDER BY / GROUP BY` 设计有序字段,先写入 Manifest `tables[].indexes`。
55
+ 4. `microi_plan_system` / `microi_generate_system(dryRun:true)` 检查字段引用;单独变更时直接调用 `microi_create_table_index`,并传 `confirmExecution=tableName`。
56
+ 5. 再次调用 `microi_get_table_indexes` 回读;DIY 表还必须在 `Microi.Client` 的“开发设计 → 索引管理”中看到同名索引、正确字段顺序和唯一性。
57
+ 6. 删除前先回读精确名称,只能用 `microi_drop_table_index`;主键索引禁止删除,删除确认值使用 `tableName:indexName`。
58
+
59
+ 必须评估并通常建立索引的字段组合:
60
+
61
+ - 租户业务表:所有租户内高频查询的组合索引通常以 `OsClient` 开头,例如 `(OsClient, Status, CreateTime)`;不能只给 `Status` 建低选择性单列索引。
62
+ - 业务唯一键和幂等键:订单号、外部流水号、`EventId`、`IdempotencyKey` 等必须按真实隔离边界建立唯一索引,例如 `(OsClient, OrderNo)`,不能只做“先查再新增”。
63
+ - 外键和子表回查:高频 `JOIN`、`TableChildFkFieldName`、`XxxId` 明细列表必须覆盖关联字段;如果查询同时固定租户和状态,按等值字段在前、范围/排序字段在后的顺序设计组合索引。
64
+ - 待办、Job、outbox/inbox、重试队列:按实际抢占语句建立 `(OsClient, Status, NextRetryTime)`、`(OsClient, JobKey, ScheduleTime)` 等索引,并为稳定事件/任务键增加唯一索引。
65
+ - 高频时间范围列表:常用租户/类型/状态等值条件在前,`CreateTime`、`UpdateTime` 等范围或排序字段在后。
66
+
67
+ 禁止机械建索引:
68
+
69
+ - 不得把 `SearchFieldIds`、`SortFieldIds`、`StatisticsFields` 中每个字段都自动变成单列索引;必须结合真实查询与选择性。
70
+ - `Status`、开关、性别、删除标记等低基数字段通常不能单独建索引;只有作为高频组合索引的一部分才有价值。
71
+ - `LIKE '%keyword%'`、富文本、长文本、JSON、上传、地图、布局、子表控件等不能靠普通 B-tree 索引解决;应改为前缀查询、专用搜索引擎、生成列或其它明确方案。
72
+ - 组合索引遵守最左前缀;重复/被更长索引左前缀完全覆盖的索引应合并。索引过多会增加写放大和锁等待,必须在交付中说明查询依据。
73
+ - 唯一索引是业务约束。创建前必须检查并处理历史重复数据与 `NULL` 语义;不得为了让 DDL 通过而静默删改生产数据。
74
+
75
+ 平台核心表的发布变更还必须同步正式升级资源/迁移,确保新租户和旧租户升级一致;但对指定在线租户的实际创建、修复和回读仍必须通过上述 MCP 索引工具完成,不能只提交迁移源码便宣称线上已生效。
76
+
77
+ ## diy_table 命名规则
78
+
79
+ 创建或修复 `diy_table` 时必须区分三个字段职责:
80
+
81
+ - `Name`:英文物理表名或表 Key,例如 `edu_exam_question`、`mci_spider_rule`。不要写中文,不要写长说明。
82
+ - `Description`:简短中文表名,例如 `商品`、`订单`、`采集规则`。不要写一整段用途说明。
83
+ - `Remark`:备注/表详细说明,用于写业务用途、维护规则、交付说明、注意事项等长文本。
84
+
85
+ AI 或 MCP 生成低代码系统时,必须默认遵守此规则。发现已有数据把长说明写进 `Description` 时,应将短中文名保留在 `Description`,把详细说明迁移到 `Remark`,并回读 `diy_table` 验证。
86
+
87
+ ## sys_menu 生成默认配置
88
+
89
+ 后台菜单默认必须是有分类的树形结构。AI/MCP 创建真实业务后台时,先创建业务域或系统域父菜单,再把 CRUD、报表、规则、任务、日志、设置等叶子模块挂到父级;不要把一批叶子模块直接创建到根级。改造已有菜单时必须回读 `sys_menu`,更新 `ParentId`/`Sort`,补管理员角色权限,并再次回读验证最终树结构。
90
+
91
+ 通过自然语言 + MCP 创建后端菜单时,不能只写 `Name`、`DiyTableId` 和基础路由。绑定 `diyTableId` 的 CRUD 菜单应显式配置,或允许 MCP/后端自动推断以下字段:
92
+
93
+ - `TableDiyFieldIds` / `SelectFields`:列表列优先选择名称、标题、编号、状态、类型、负责人、金额、数量、时间等业务可读字段。
94
+ - `SearchFieldIds`:默认选择名称/标题/编号、状态/类型/分类、负责人/部门/客户、日期时间等常用筛选字段;`Select`、`Radio`、`Checkbox`、`Switch`、`Department`、树/级联/地址等控件默认按等值筛选。
95
+ - `NotShowFields`:默认隐藏 `Id`、`XxxId`、`XxxIds`、租户/系统字段、布局控件,以及富文本、上传、地图、子表、代码编辑器等不适合表格展示的重字段。
96
+ - `SortFieldIds` / `DefaultOrderBy`:默认包含日期时间、`Sort`、金额/数量等排序字段,并优先按 `CreateTime DESC`。
97
+ - `StatisticsFields`:金额、价格、数量、积分、余额、人数、总计等数值字段默认配置 `Sum` 统计。
98
+ - `MobileListFields` / `CardTitleTagFields` / `CardBottomTagFields`:移动端或卡片列表默认保留 3-4 个高信息密度字段,标题标签优先状态/类型/分类,底部标签优先金额/数量/时间。
99
+
100
+ 显式配置优先级最高;未指定时由 MCP 生成器或后端 `CreateModule` 兜底补齐,避免空白菜单配置。
101
+
102
+ 隐藏子表菜单规则:用于 `TableChild`、附件明细、微服务页面/路由子表等表单内嵌承载的 `sys_menu`,必须设置 `Display=0`、`AppDisplay=0`、`HasChild=0`。隐藏菜单不应再开启“是否有子集”,否则 PC/移动端菜单树会把上级业务菜单误判为空父菜单。
103
+
104
+ ## 表单控件与布局
105
+
106
+ 表单控件以 `Microi.Client/src/views/form-engine/diy-field-component/` 和 `diy-component-list.json` 为事实源。当前常用组件包括:`Text`、`Guid`、`Textarea`、`NumberText`、`DateTime`、`Select`、`MultipleSelect`、`Radio`、`Checkbox`、`Switch`、`Rate`、`Progress`、`Slider`、`ColorPicker`、`AutoNumber`、`Button`、`Divider`、`CollapseGroup`、`Tabs`、`Alert`、`StaticText`、`Html`、`RichText`、`CodeEditor`、`JsonTable`、`ImgUpload`、`FileUpload`、`Autocomplete`、`TagInput`、`Transfer`、`Cascader`、`Address`、`Department`、`SelectTree`、`TreeCheckbox`、`OpenTable`、`JoinTable`、`JoinForm`、`TableChild`、`Map`、`MapArea`、`Qrcode`、`FontAwesome`、`DevComponent`。
107
+
108
+ 字段较多的表单不要全部堆在一页:优先设置 `diy_table.Tabs`,并给字段写入 `diy_field.Tab`,常见分组为基础信息、联系信息、业务信息、附件备注、扩展信息。局部区域再用 `CollapseGroup` 或字段级 `Tabs` 控件做折叠/分段;`Textarea`、`RichText`、`CodeEditor`、上传、地图、子表、布局/自定义控件等使用 `FormWidth=24` 独占整行。
109
+
110
+ ### 1:N 子表建模门禁
111
+
112
+ - “子表、明细、清单、条目、行项目、多个记录”默认表示主表 1:N 子表;必须创建独立子表,
113
+ 并把真实外键放在子表。不得创建主表 `XxxId` 后用 `JoinForm` 冒充子表。
114
+ - `JoinForm` 仅用于主表保存一个目标 Id 并嵌入一条独立目标记录;目标表不能与当前表相同。
115
+ 关系基数不明确时,MCP 写入前必须询问,不能把 `JoinForm` 当安全默认值。
116
+ - 子表外键必须建立与物理租户隔离方式一致的回查索引:物理表存在 `OsClient` 时通常为
117
+ `(OsClient, ParentId)`,独立租户物理表没有 `OsClient` 时为 `(ParentId)`。结构或索引读取失败
118
+ 必须拒绝关系配置,不能为了通过校验新增不存在业务语义的 `OsClient` 列。子表还要有绑定同一子表的隐藏菜单,
119
+ `Display=0`、`AppDisplay=0`、`HasChild=0`。
120
+ - Manifest/蓝图审查时,只要发现 1:N 关系对应 `JoinForm`、缺少子表外键、缺少隐藏子菜单
121
+ 或缺少回查索引,就必须判定计划不合格,停止写入。
122
+ - 新建子表的 `diy_table.Id` / `sys_menu.Id` 尚未回读时,分两阶段创建并用
123
+ `microi_update_field` 补 `TableChild` Config;不得猜 Id,也不得为了单次生成而换成
124
+ `JoinForm`。
125
+
126
+ `TableChild` 配置中的表、菜单和外键位于 `diy_field.Config` 根节点;主表列名和导入选项
127
+ 位于 `diy_field.Config.TableChild`。例如:
128
+
129
+ ```json
130
+ {
131
+ "TableChildTableId": "子表 diy_table.Id",
132
+ "TableChildSysMenuId": "子表 sys_menu.Id",
133
+ "TableChildSysMenuName": "项目成品清单",
134
+ "TableChildFkFieldName": "XiangmuId",
135
+ "TableChild": {
136
+ "PrimaryTableFieldName": "Id",
137
+ "ImportAutoFillFk": true,
138
+ "FieldRelations": [
139
+ ["Code", "XiangmuBM", true],
140
+ ["Name", "XiangmuMC"]
141
+ ],
142
+ "DisablePagination": false
143
+ }
144
+ }
145
+ ```
146
+
147
+ `FieldRelations` 每项依次为 `[主表字段, 子表字段, 是否参与导入匹配]`。全部关系用于新增子表时回写父表值,也用于导入找到父表后回填空的子表字段;只有第三项为 `true` 的关系才用子表/Excel 值反查主表,多项为 `true` 时表示组合匹配。典型场景是 `Code -> XiangmuBM` 参与匹配,而 `Name -> XiangmuMC` 只回填,因此不能把全部关系无条件当作组合匹配。
148
+
149
+ 后端继续读取旧版 `TableChildCallbackField`、`ImportRelations`、`ImportBackfillFields` 和单字段匹配配置。新版前端加载 TableChild 字段时按字段对去重合并为 `FieldRelations`,删除内存中的旧键,并在下一次正常保存字段配置时持久化新格式,避免重复合并。修改后按现有流程刷新结构缓存。
150
+
151
+ 更多表单组件配置项见 `references/form-component-options.md`。新增或修改 `Microi.Client/src/views/form-engine/diy-field-component/` 组件配置时,同步更新该参考文档和官方表单组件文档。
152
+
153
+ ## 简单枚举统一使用 Key-Value(强制)
154
+
155
+ - 只要字段会跨 PC、UniApp、小程序、Web、接口或多语言使用,`Select`、`Radio`、`MultipleSelect`、`Checkbox` 的简单枚举默认必须使用 `KeyValue`,不得把中文展示文字同时当作数据库值。
156
+ - `Key` 使用稳定、简短、大小写固定的英文或 ASCII 标识,不随界面语言和文案调整;`Value` 是给用户展示的中文或当前语言文字。
157
+ - 字段配置必须保持 `DataSource:"KeyValue"`、`SelectLabel:"Value"`、`SelectSaveField:"Key"`;数据库、URL 查询参数和接口筛选条件统一保存/传递 `Key`,界面只展示 `Value`。
158
+ - 客户端不得各自硬编码另一套中文到英文映射。由字段元数据或业务接口返回公开的 `{Key,Value}` 投影,客户端按 `Value` 渲染、按 `Key` 提交和筛选。
159
+ - 旧表若已经保存中文 `Value`,上线时必须提供明确的 `Value -> Key` 数据迁移,并在过渡期让读取接口兼容 Key 和 Value;迁移后回读确认数据库只剩合法 Key,并刷新字段缓存。
160
+ - 只有展示值与存储值永远相同、无需搜索筛选、无需多语言且不会跨客户端使用的纯静态字段,才允许使用简单 `Data` 数组。
161
+
162
+ ### 复盘:Key-Value 展示值与筛选值混用
163
+
164
+ 当字段元数据已改为 Key-Value、但历史记录仍保存中文 Value 时,界面按钮传英文 Key 会造成等值筛选全部为 0。修复不能只改按钮文案或只加前端映射,必须同时核对字段 Data/Config、存量物理数据、接口入参归一化和接口返回值;以“数据库存 Key、接口筛 Key、界面显 Value”的端到端回读为验收标准。
165
+
166
+ ## 安全注意
167
+
168
+ - 不要假设 `_Fields` 中列出的每个字段都是物理数据库列。`TableChild`、`Button`、`Divider`、`DevComponent`、`OpenTable` 和 `PhoneSMS` 是配置或交互组件。
169
+ - 记住 DIY 表固定字段:`Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted`。
170
+ - 使用原生 SQL 时,默认只查询未删除数据(`IsDeleted != 1`)。
171
+ - 修改结构元数据时,要考虑缓存失效和物理表变化;改动范围保持收敛。
172
+ - 新增或更新低代码字段时,优先使用 `microi_add_field` / `microi_update_field` 等 MCP 原生工具,不要临时手写 V8 元数据。`diy_field.TableId = null` 的字段行可能导致物理列存在,但 FormEngine/表结构加载不可见。
173
+ - 修改业务枚举字段时,将 `diy_field.Data` 和 `diy_field.Config` 视为事实源元数据。确认 KeyValue 键与接口引擎、前端筛选使用的值一致,刷新结构缓存,并回读字段行,不要只相信本地常量。
174
+ - 普通生成字段的 `diy_field.FormWidth` 保持 null/省略。只有 `CodeEditor`、`Textarea`、`RichText`、上传、`TableChild`、地图/布局或自定义组件等整行控件才使用 `24`。
175
+ - 结构变更后,用 `microi_get_db_schema` 验证,并在需要时用 `microi_refresh_schema_cache` 刷新 `diy_table_field_list` 缓存。
@@ -1,4 +1,4 @@
1
- interface:
2
- display_name: "Microi DB Schema"
3
- short_description: "Use the Microi database dictionary and core table relationships."
4
- default_prompt: "Use the Microi DB schema skill to inspect platform tables, fields, V8 event storage, menu configuration, workflow metadata, and system table relationships."
1
+ interface:
2
+ display_name: "Microi DB Schema"
3
+ short_description: "Use the Microi database dictionary and core table relationships."
4
+ default_prompt: "Use the Microi DB schema skill to inspect platform tables, fields, V8 event storage, menu configuration, workflow metadata, and system table relationships."