@microi.net/cli 5.7.8 → 5.8.0

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 (189) 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 +6 -6
  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 +113 -112
  15. package/scripts/microi-cli.js +57 -57
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +0 -0
  18. package/scripts/microi-skills.meta.json +364 -364
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/README.md +286 -286
  21. package/skills/ai-engine/SKILL.md +265 -265
  22. package/skills/ai-engine/agents/openai.yaml +4 -4
  23. package/skills/ai-platform-governance/SKILL.md +177 -177
  24. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  25. package/skills/app-store/SKILL.md +396 -396
  26. package/skills/app-store/agents/openai.yaml +4 -4
  27. package/skills/business-blueprint/SKILL.md +193 -193
  28. package/skills/datasource-engine/SKILL.md +90 -90
  29. package/skills/datasource-engine/agents/openai.yaml +4 -4
  30. package/skills/dos-orm/references/api-reference.md +229 -229
  31. package/skills/email-engine/SKILL.md +78 -78
  32. package/skills/email-engine/references/v8-email.md +34 -34
  33. package/skills/job-engine/SKILL.md +172 -172
  34. package/skills/job-engine/agents/openai.yaml +4 -4
  35. package/skills/message-notification/SKILL.md +156 -156
  36. package/skills/message-notification/agents/openai.yaml +5 -5
  37. package/skills/message-notification/references/contracts.md +102 -102
  38. package/skills/microi-ai-app-auth.js +652 -652
  39. package/skills/microi-ai-application/SKILL.md +106 -106
  40. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  41. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  42. package/skills/microi-client-frontend/SKILL.md +237 -237
  43. 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
  44. 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
  45. 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
  46. package/skills/microi-codex/SKILL.md +72 -70
  47. package/skills/microi-codex-installer/SKILL.md +225 -223
  48. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  49. package/skills/microi-datasource-mapping/SKILL.md +108 -108
  50. package/skills/microi-db-schema/SKILL.md +175 -175
  51. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  52. package/skills/microi-db-schema/references/core-tables.md +695 -695
  53. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  54. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  55. package/skills/microi-db-schema/references/schema.md +646 -646
  56. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  57. package/skills/microi-deployment/references/deployment-matrix.md +101 -101
  58. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  59. package/skills/microi-form-engine/SKILL.md +226 -226
  60. package/skills/microi-form-engine/references/component-catalog.md +216 -216
  61. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  62. package/skills/microi-form-layout/SKILL.md +205 -205
  63. 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
  64. package/skills/microi-frontend-sdk/SKILL.md +188 -188
  65. 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
  66. package/skills/microi-left-right-layout/SKILL.md +141 -141
  67. package/skills/microi-microservice/SKILL.md +323 -323
  68. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  69. package/skills/microi-mobile-app-quality/SKILL.md +181 -181
  70. 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
  71. 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
  72. package/skills/microi-solution-quotation/SKILL.md +78 -78
  73. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  74. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  75. package/skills/microi-sso/references/acceptance.md +49 -49
  76. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  77. package/skills/microi-sso/references/inbound.md +53 -53
  78. package/skills/microi-sso/references/outbound.md +39 -39
  79. package/skills/microi-system-delivery/SKILL.md +134 -134
  80. 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
  81. 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 +189 -189
  82. package/skills/microi-ui/SKILL.md +174 -174
  83. 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
  84. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  85. 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
  86. 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
  87. package/skills/microi.v8.js +1921 -1921
  88. package/skills/module-engine/SKILL.md +250 -250
  89. package/skills/module-engine/references/module-config.md +204 -204
  90. package/skills/ocr-engine/SKILL.md +113 -113
  91. package/skills/ocr-engine/agents/openai.yaml +4 -4
  92. package/skills/page-engine/SKILL.md +182 -182
  93. 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
  94. 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
  95. package/skills/performance-testing/SKILL.md +221 -221
  96. package/skills/playwright-e2e/SKILL.md +197 -197
  97. 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
  98. 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
  99. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  100. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  101. package/skills/print-engine/SKILL.md +259 -259
  102. package/skills/production-readonly-audit/SKILL.md +41 -41
  103. package/skills/report-engine/SKILL.md +71 -71
  104. package/skills/report-engine/agents/openai.yaml +4 -4
  105. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  106. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  107. package/skills/search-engine/SKILL.md +75 -75
  108. package/skills/search-engine/agents/openai.yaml +4 -4
  109. package/skills/spider-engine/SKILL.md +190 -190
  110. package/skills/system-observability/SKILL.md +238 -238
  111. package/skills/system-observability/references/memory-incident-triage.md +70 -70
  112. package/skills/translate-engine/SKILL.md +140 -140
  113. package/skills/translate-engine/agents/openai.yaml +4 -4
  114. package/skills/ui-design/SKILL.md +191 -191
  115. package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
  116. package/skills/ui-design/references/design-pattern-library.md +184 -184
  117. package/skills/ui-design/references/mci-design-contract.md +163 -163
  118. 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
  119. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -137
  120. 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
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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 +117 -117
  126. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  127. package/skills/unity-integration/SKILL.md +155 -155
  128. package/skills/unity-integration/agents/openai.yaml +4 -4
  129. package/skills/unity-integration/references/ai-app-delivery.md +103 -103
  130. package/skills/unity-integration/references/sdk-api.md +82 -82
  131. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  132. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  133. package/skills/v8-cache-pattern/SKILL.md +306 -306
  134. package/skills/v8-crud-api/SKILL.md +175 -175
  135. 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
  136. 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
  137. package/skills/v8-debugging/SKILL.md +284 -284
  138. package/skills/v8-explorer-tree/SKILL.md +228 -228
  139. package/skills/v8-export-import/SKILL.md +209 -209
  140. 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
  141. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  142. 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
  143. package/skills/v8-file-upload/SKILL.md +263 -263
  144. 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 +101 -101
  145. 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 +150 -150
  146. package/skills/v8-formengine-http/SKILL.md +219 -219
  147. package/skills/v8-frontend-events/SKILL.md +178 -178
  148. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  149. package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
  150. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  151. package/skills/v8-http-integration/SKILL.md +182 -182
  152. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  153. 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
  154. package/skills/v8-image-processing/SKILL.md +190 -190
  155. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  156. package/skills/v8-image-processing/references/api-reference.md +623 -623
  157. package/skills/v8-menu-buttons/SKILL.md +180 -180
  158. 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
  159. 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
  160. 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
  161. package/skills/v8-mongodb/SKILL.md +192 -192
  162. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  163. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  164. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  165. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  166. package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
  167. package/skills/v8-security/SKILL.md +168 -168
  168. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
  169. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
  170. package/skills/v8-sql-query/SKILL.md +302 -302
  171. package/skills/v8-table-event/SKILL.md +144 -144
  172. 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 +197 -197
  173. 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
  174. package/skills/v8-tcp-integration/SKILL.md +147 -147
  175. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  176. package/skills/v8-template-engine/SKILL.md +167 -167
  177. package/skills/v8-utilities/SKILL.md +90 -90
  178. package/skills/v8-utilities/references/client-api-index.md +143 -143
  179. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  180. package/skills/v8-utilities/references/server-api-index.md +188 -188
  181. package/skills/v8-workflow/SKILL.md +243 -243
  182. 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
  183. package/skills/vision-engine/SKILL.md +159 -159
  184. package/skills/vision-engine/agents/openai.yaml +4 -4
  185. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  186. package/skills/workspace-conventions/SKILL.md +261 -261
  187. 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 +208 -208
  188. 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 +216 -216
  189. 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: v8-crud-api
3
- description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScript,涉及 V8.FormEngine Add/Upt/Del/GetTableData、DosResult 返回、事务和校验。
4
- ---
5
-
6
- > **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
7
-
8
- # Microi V8 CRUD API 接口引擎开发
9
-
10
- 你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
-
12
- <!-- microi-progressive:begin -->
13
- <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
14
- ## 本地优先与版本头(必做)
15
-
16
- AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
17
-
18
- 每一次修改、上传、推送接口引擎代码,都必须维护文件顶部版本区域。版本号从 `v1.0.0` 开始;每次上传/推送/修改递增 1;补丁位和次版本位最大为 9 并向前进位(`v1.0.9 -> v1.1.0`、`v1.9.9 -> v2.0.0`、`v9.9.9 -> v10.0.0`)。代码头只写完整功能说明,不写修改历史、时间戳或 ChangeLog。推荐格式:
19
-
20
- ```javascript
21
- /*
22
- * V8 ApiEngine
23
- * ApiEngineKey: 示例接口引擎Key
24
- * Version: v1.0.0
25
- * 功能说明:
26
- * - 完整说明该接口引擎负责的业务功能、输入参数、关键返回字段和重要副作用。
27
- */
28
- ```
29
-
30
- 同步流程:`确认后端可达(不可达则自动启动 Microi.Server/Microi.net.Api/Microi.net.Api.csproj) -> 读取远端 -> 修改本地并递增语义版本头 -> JS 语法检查 -> 保存远端 -> 回读远端确认代码头 Version 与 sys_apiengine.Version 一致 -> 用 HTTP /apiengine/{key} + osclient Header 复测`。只用 MCP 保存成功不算完成,必须至少做回读或 HTTP 验证。普通 POST/PUT/PATCH/DELETE 禁止无脑追加 `--OsClient--...--`;该特殊路径仅保留给确实无法传 Header/Form/Query 的 GET/HEAD 或第三方回调场景。
31
-
32
- 如果保存或回读时出现 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听等服务不可达问题,不能提前中止。需要启动或重启本地 API 时,必须在 `Microi.Server/Microi.net.Api` 目录通过 VS Code 可见终端执行 `dotnet run --launch-profile Microi.net.Api`,让开发者能肉眼看到并手动停止;不要用隐藏后台 shell 启动长期占用端口的 API 进程。若工具当前无法打开可见终端,应先说明限制并让用户启动/重启后继续验证。涉及 PC 页面联调或 Playwright 时,`Microi.Client` 也必须使用可见终端执行:`npm run dev -- --host 0.0.0.0 --port 1988`。只有启动失败、依赖缺失、数据库连接失败或端口冲突无法处理时才报告阻塞。
33
-
34
- Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,让 `Program.cs` 读取 `Microi.Server/Microi.net.Api/.microi-local` 并加载对应的 `appsettings.{Env}.json`。
35
-
36
- 版本与历史同步规则:通过 MCP 或 VS Code 插件保存接口引擎时,必须同步写入 `sys_apiengine.Version`;新版平台把每次修改说明作为独立记录写入 `mci_apiengine_change_history`,表单中的“修改历史”使用 `TableChild` 展示,不再让客户端拼接或覆盖 `sys_apiengine.ChangeHistory` 多行文本。写入必须携带版本号与简明说明,并使用幂等 `EntryKey` 防止网络重试产生重复记录。安装/升级表单引擎官方应用时,旧 `ChangeHistory` 按非空行迁入子表并保留旧物理列作滚动兼容;尚未安装该子表、旧库缺字段或迁移期间,后端应自动回退旧字段或仅更新 `ApiV8Code` 与 `UpdateTime`,不得因此阻断代码同步。
37
-
38
- 生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
-
40
- <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
42
- ## 核心规则
43
-
44
- - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
45
- - 全局对象 `V8` 是所有后端能力的入口
46
- - 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
47
- - 通过 `V8.CurrentUser` 获取当前登录用户信息
48
- - 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
49
- - 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
50
- - 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
51
- - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
52
-
53
- <!-- /microi-progressive:chunk -->
54
- <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
55
- ## 性能底线(必须自检)
56
-
57
- - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
58
- - 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
59
- - 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
60
- - 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
61
- - 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
62
- - 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
63
- - 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
64
- - 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
65
-
66
- ### 计量流水与分页审计
67
-
68
- - Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
69
- - 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
70
- - 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
71
- - 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
72
-
73
- <!-- /microi-progressive:chunk -->
74
- <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=d46768bbaaf8b2ebfdd38e09d11e886b135cb65e78984dbfa67d75ec5f947175 -->
75
- ## DosResult 状态码
76
-
77
- | Code | 含义 |
78
- |------|------|
79
- | `1` | 成功 |
80
- | `0` | 业务失败(自动回滚) |
81
- | `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
82
- | `1001` | Token 失效 |
83
- | `1002` | 身份验证失败 |
84
-
85
- ```javascript
86
- // GetFormData Code=2 的处理
87
- var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
88
- if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
89
- if (r.Code !== 1) return r;
90
- // r.Data 才是真实数据
91
- ```
92
-
93
- <!-- /microi-progressive:chunk -->
94
- <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=6d58584cabd1659ae3af6cbddb797df2c0844c99fd8d2627d02a9c0eae98e8c2 -->
95
- ## 全局日期函数
96
-
97
- ```javascript
98
- DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
99
- DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
100
- DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
101
- ```
102
-
103
- <!-- /microi-progressive:chunk -->
104
- <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=35220022799bbed7f9b3d82fe14dc0855aa8f77d0640ac411c61d222d02b0eda -->
105
- ## 查询单条
106
-
107
- ```javascript
108
- if (!V8.Param.id) {
109
- return { Code: 0, Msg: 'id 不能为空' };
110
- }
111
-
112
- var result = V8.FormEngine.GetFormData('SysUser', {
113
- _Where: [['Id', '=', V8.Param.id]],
114
- _SelectFields: ['Id', 'Account', 'Name', 'Phone']
115
- });
116
- // 也可以用 Id 直接查:{ Id: 'xxx' }
117
-
118
- if (result.Code !== 1 || !result.Data) {
119
- return { Code: 0, Msg: '数据不存在' };
120
- }
121
-
122
- return { Code: 1, Data: result.Data };
123
- ```
124
-
125
- <!-- /microi-progressive:chunk -->
126
- <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=510588ad14503caff0a92c614f0e7453bdd343a1e22711c6c5a2b3f8893b5a8d -->
127
- ## 新增
128
-
129
- ```javascript
130
- if (!V8.Param.Account || !V8.Param.Name) {
131
- return { Code: 0, Msg: '账号和姓名不能为空' };
132
- }
133
-
134
- // 检查唯一性
135
- var exist = V8.FormEngine.GetFormData('SysUser', {
136
- _Where: [['Account', '=', V8.Param.Account]]
137
- });
138
- if (exist.Code === 1 && exist.Data) {
139
- return { Code: 0, Msg: '账号已存在' };
140
- }
141
-
142
- var result = V8.FormEngine.AddFormData('SysUser', {
143
- // Id 不传会自动生成 GUID
144
- Account: V8.Param.Account,
145
- Name: V8.Param.Name,
146
- Phone: V8.Param.Phone || '',
147
- Status: 1
148
- });
149
- // result.Data 包含 Id, CreateTime, UserId 等自动生成字段
150
-
151
- return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
152
- ```
153
-
154
- ### 批量新增
155
-
156
- ```javascript
157
- var addList = [];
158
- for (var i = 0; i < V8.Param.items.length; i++) {
159
- addList.push({
160
- FormEngineKey: 'SysUser', // 支持不同表混合批量
161
- Account: V8.Param.items[i].Account,
162
- Name: V8.Param.items[i].Name
163
- });
164
- }
165
- var result = V8.FormEngine.AddTableData(addList);
166
- ```
167
-
168
- <!-- /microi-progressive:chunk -->
169
- ## 详细参考路由(渐进披露)
170
-
171
- 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
172
-
173
- - [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
174
- - [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
175
- <!-- microi-progressive:end -->
1
+ ---
2
+ name: v8-crud-api
3
+ description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScript,涉及 V8.FormEngine Add/Upt/Del/GetTableData、DosResult 返回、事务和校验。
4
+ ---
5
+
6
+ > **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
7
+
8
+ # Microi V8 CRUD API 接口引擎开发
9
+
10
+ 你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
+
12
+ <!-- microi-progressive:begin -->
13
+ <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
14
+ ## 本地优先与版本头(必做)
15
+
16
+ AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
17
+
18
+ 每一次修改、上传、推送接口引擎代码,都必须维护文件顶部版本区域。版本号从 `v1.0.0` 开始;每次上传/推送/修改递增 1;补丁位和次版本位最大为 9 并向前进位(`v1.0.9 -> v1.1.0`、`v1.9.9 -> v2.0.0`、`v9.9.9 -> v10.0.0`)。代码头只写完整功能说明,不写修改历史、时间戳或 ChangeLog。推荐格式:
19
+
20
+ ```javascript
21
+ /*
22
+ * V8 ApiEngine
23
+ * ApiEngineKey: 示例接口引擎Key
24
+ * Version: v1.0.0
25
+ * 功能说明:
26
+ * - 完整说明该接口引擎负责的业务功能、输入参数、关键返回字段和重要副作用。
27
+ */
28
+ ```
29
+
30
+ 同步流程:`确认后端可达(不可达则自动启动 Microi.Server/Microi.net.Api/Microi.net.Api.csproj) -> 读取远端 -> 修改本地并递增语义版本头 -> JS 语法检查 -> 保存远端 -> 回读远端确认代码头 Version 与 sys_apiengine.Version 一致 -> 用 HTTP /apiengine/{key} + osclient Header 复测`。只用 MCP 保存成功不算完成,必须至少做回读或 HTTP 验证。普通 POST/PUT/PATCH/DELETE 禁止无脑追加 `--OsClient--...--`;该特殊路径仅保留给确实无法传 Header/Form/Query 的 GET/HEAD 或第三方回调场景。
31
+
32
+ 如果保存或回读时出现 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听等服务不可达问题,不能提前中止。需要启动或重启本地 API 时,必须在 `Microi.Server/Microi.net.Api` 目录通过 VS Code 可见终端执行 `dotnet run --launch-profile Microi.net.Api`,让开发者能肉眼看到并手动停止;不要用隐藏后台 shell 启动长期占用端口的 API 进程。若工具当前无法打开可见终端,应先说明限制并让用户启动/重启后继续验证。涉及 PC 页面联调或 Playwright 时,`Microi.Client` 也必须使用可见终端执行:`npm run dev -- --host 0.0.0.0 --port 1988`。只有启动失败、依赖缺失、数据库连接失败或端口冲突无法处理时才报告阻塞。
33
+
34
+ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,让 `Program.cs` 读取 `Microi.Server/Microi.net.Api/.microi-local` 并加载对应的 `appsettings.{Env}.json`。
35
+
36
+ 版本与历史同步规则:通过 MCP 或 VS Code 插件保存接口引擎时,必须同步写入 `sys_apiengine.Version`;新版平台把每次修改说明作为独立记录写入 `mci_apiengine_change_history`,表单中的“修改历史”使用 `TableChild` 展示,不再让客户端拼接或覆盖 `sys_apiengine.ChangeHistory` 多行文本。写入必须携带版本号与简明说明,并使用幂等 `EntryKey` 防止网络重试产生重复记录。安装/升级表单引擎官方应用时,旧 `ChangeHistory` 按非空行迁入子表并保留旧物理列作滚动兼容;尚未安装该子表、旧库缺字段或迁移期间,后端应自动回退旧字段或仅更新 `ApiV8Code` 与 `UpdateTime`,不得因此阻断代码同步。
37
+
38
+ 生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
+
40
+ <!-- /microi-progressive:chunk -->
41
+ <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
42
+ ## 核心规则
43
+
44
+ - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
45
+ - 全局对象 `V8` 是所有后端能力的入口
46
+ - 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
47
+ - 通过 `V8.CurrentUser` 获取当前登录用户信息
48
+ - 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
49
+ - 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
50
+ - 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
51
+ - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
52
+
53
+ <!-- /microi-progressive:chunk -->
54
+ <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
55
+ ## 性能底线(必须自检)
56
+
57
+ - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
58
+ - 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
59
+ - 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
60
+ - 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
61
+ - 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
62
+ - 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
63
+ - 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
64
+ - 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
65
+
66
+ ### 计量流水与分页审计
67
+
68
+ - Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
69
+ - 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
70
+ - 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
71
+ - 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
72
+
73
+ <!-- /microi-progressive:chunk -->
74
+ <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=d46768bbaaf8b2ebfdd38e09d11e886b135cb65e78984dbfa67d75ec5f947175 -->
75
+ ## DosResult 状态码
76
+
77
+ | Code | 含义 |
78
+ |------|------|
79
+ | `1` | 成功 |
80
+ | `0` | 业务失败(自动回滚) |
81
+ | `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
82
+ | `1001` | Token 失效 |
83
+ | `1002` | 身份验证失败 |
84
+
85
+ ```javascript
86
+ // GetFormData Code=2 的处理
87
+ var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
88
+ if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
89
+ if (r.Code !== 1) return r;
90
+ // r.Data 才是真实数据
91
+ ```
92
+
93
+ <!-- /microi-progressive:chunk -->
94
+ <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=6d58584cabd1659ae3af6cbddb797df2c0844c99fd8d2627d02a9c0eae98e8c2 -->
95
+ ## 全局日期函数
96
+
97
+ ```javascript
98
+ DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
99
+ DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
100
+ DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
101
+ ```
102
+
103
+ <!-- /microi-progressive:chunk -->
104
+ <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=35220022799bbed7f9b3d82fe14dc0855aa8f77d0640ac411c61d222d02b0eda -->
105
+ ## 查询单条
106
+
107
+ ```javascript
108
+ if (!V8.Param.id) {
109
+ return { Code: 0, Msg: 'id 不能为空' };
110
+ }
111
+
112
+ var result = V8.FormEngine.GetFormData('SysUser', {
113
+ _Where: [['Id', '=', V8.Param.id]],
114
+ _SelectFields: ['Id', 'Account', 'Name', 'Phone']
115
+ });
116
+ // 也可以用 Id 直接查:{ Id: 'xxx' }
117
+
118
+ if (result.Code !== 1 || !result.Data) {
119
+ return { Code: 0, Msg: '数据不存在' };
120
+ }
121
+
122
+ return { Code: 1, Data: result.Data };
123
+ ```
124
+
125
+ <!-- /microi-progressive:chunk -->
126
+ <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=510588ad14503caff0a92c614f0e7453bdd343a1e22711c6c5a2b3f8893b5a8d -->
127
+ ## 新增
128
+
129
+ ```javascript
130
+ if (!V8.Param.Account || !V8.Param.Name) {
131
+ return { Code: 0, Msg: '账号和姓名不能为空' };
132
+ }
133
+
134
+ // 检查唯一性
135
+ var exist = V8.FormEngine.GetFormData('SysUser', {
136
+ _Where: [['Account', '=', V8.Param.Account]]
137
+ });
138
+ if (exist.Code === 1 && exist.Data) {
139
+ return { Code: 0, Msg: '账号已存在' };
140
+ }
141
+
142
+ var result = V8.FormEngine.AddFormData('SysUser', {
143
+ // Id 不传会自动生成 GUID
144
+ Account: V8.Param.Account,
145
+ Name: V8.Param.Name,
146
+ Phone: V8.Param.Phone || '',
147
+ Status: 1
148
+ });
149
+ // result.Data 包含 Id, CreateTime, UserId 等自动生成字段
150
+
151
+ return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
152
+ ```
153
+
154
+ ### 批量新增
155
+
156
+ ```javascript
157
+ var addList = [];
158
+ for (var i = 0; i < V8.Param.items.length; i++) {
159
+ addList.push({
160
+ FormEngineKey: 'SysUser', // 支持不同表混合批量
161
+ Account: V8.Param.items[i].Account,
162
+ Name: V8.Param.items[i].Name
163
+ });
164
+ }
165
+ var result = V8.FormEngine.AddTableData(addList);
166
+ ```
167
+
168
+ <!-- /microi-progressive:chunk -->
169
+ ## 详细参考路由(渐进披露)
170
+
171
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
172
+
173
+ - [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
174
+ - [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
175
+ <!-- microi-progressive:end -->