@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,284 +1,284 @@
1
- ---
2
- name: v8-debugging
3
- description: Microi V8 调试与日志指南。用于排查接口引擎、V8 事件、console.log、DataAppend.DebugLog、sys_log、异常处理和远程执行问题。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi V8 调试与日志
9
-
10
- 你正在为 Microi 吾码平台编写 V8 引擎代码,需要在开发/测试/生产环境进行排错。本指南提供调试模式、异常捕获、系统日志、调试输出的标准做法。
11
-
12
- 系统级排查优先读取 `../system-observability/SKILL.md` 并通过 `microi_query_system_observability` 查询统一日志、统计、详情、Trace、热点接口和运行数据;`microi_query_mongodb_logs` 仅保留给只需要旧 Mongo 日志列表的兼容场景。两者都必须限制租户、时间窗、页大小和返回字段,不在结果或回答中输出 Token、连接串、Secret 或完整敏感请求体。
13
-
14
- ## 三种输出通道
15
-
16
- | 通道 | 何处看 | 用途 |
17
- |------|--------|------|
18
- | 后端 V8 的 `console.log` / `console.error` | 租户系统日志(MongoDB);MCP/调试执行同时返回当次 `ConsoleOutput` | 临时诊断、性能日志 |
19
- | `DataAppend.DebugLog`(返回给前端) | 浏览器开发者工具 / Postman 响应 | 当次请求的关键节点、变量值 |
20
- | `V8.Method.AddSysLog({...})` | 系统日志页 / `sys_log` 表 | 业务操作审计、第三方回调记录 |
21
-
22
- ## 调试模式 isDebugLog
23
-
24
- 调试开关必须同时满足“服务端允许调试 + 当前用户 `Level >= 9999`”。不能只相信 URL/query 的 `isDebugLog=1`,匿名或普通用户否则可获得内部数据与堆栈。
25
-
26
- ```javascript
27
- var isAdmin = V8.CurrentUser && Number(V8.CurrentUser.Level || 0) >= 9999;
28
- var isDebugLog = isAdmin &&
29
- V8.SysConfig &&
30
- V8.SysConfig.EnableV8Debug === 1 &&
31
- (V8.Param.isDebugLog === '1' || V8.Param.isDebugLog === true);
32
- var debugLog = [];
33
- function dbg(msg, data) {
34
- if (!isDebugLog) return;
35
- debugLog.push({
36
- time: DateNow('HH:mm:ss.fff'),
37
- msg: msg,
38
- data: data
39
- });
40
- }
41
-
42
- dbg('开始查询参数', {
43
- Keyword: String(V8.Param.Keyword || '').substring(0, 100),
44
- PageIndex: V8.Param.PageIndex
45
- });
46
-
47
- var products = V8.FormEngine.GetTableData('Product', {
48
- _Where: [['Status', '=', 1]]
49
- });
50
- dbg('查询结果', { Code: products.Code, Count: products.Data && products.Data.length });
51
-
52
- // ... 业务处理 ...
53
-
54
- return {
55
- Code: 1,
56
- Data: result,
57
- DataAppend: isDebugLog ? { DebugLog: debugLog } : null
58
- };
59
- ```
60
-
61
- 管理员在服务端显式开启调试后,才可用 `?isDebugLog=1` 查看当次请求的脱敏节点日志。生产环境默认关闭,调试完成后立即关闭。
62
-
63
- ## Jint 内存上限错误
64
-
65
- 出现 `Script has allocated ... but is limited to ...` 时,不要把它解释为
66
- 数据库返回数据的实际大小,也不要直接关闭内存限制。
67
-
68
- - Jint `LimitMemory` 使用当前执行线程的**累计托管分配字节数**,不是当前
69
- 存活堆或进程工作集;中间对象即使已经被 GC 回收,累计值也不会减少。
70
- - 平台必须在宿主对象、扩展和全局 V8 准备完成后调用
71
- `engine.Constraints.Reset()`,让全局 V8 和当前接口 V8 各自获得完整预算;
72
- 用户脚本以及脚本调用的 CLR/FormEngine 逻辑仍受同一阶段预算限制。
73
- - 默认单次执行预算为 2048 MB,默认节点硬上限为 8192 MB;根调用树默认
74
- 8192 MB、节点硬上限 32768 MB。存量接口仅把仍等于
75
- 历史默认值 1024 MB 的记录迁移到 2048 MB;客户明确设置的其它值不覆盖。
76
- - 旧版嵌套接口会让子引擎的初始化、查询、JSON 和业务分配被每一层父引擎
77
- 重复计数,因此四层、少量数据也可能提前触发 2GB。新版默认启用父子单层
78
- 预算隔离,每层独立计数,同时由根调用树默认 8192MB 的总预算兜底。
79
- - `LimitRecursion` 只限制当前 JavaScript 函数递归,不限制
80
- `V8.ApiEngine.Run` 层数;接口嵌套默认 32、节点硬上限默认 64。
81
- - 排查时记录 `ApiEngineKey`、实际 `LimitMemory`、返回行数、选择字段、
82
- 分页大小、`V8.Limits`、`DataAppend.V8Limit` 调用路径和重现脚本。若
83
- 2048 MB 仍触发,继续减少一次性对象图、流式或
84
- 分批处理;不得把上限无限提高或取消。
85
- - `V8_MEMORY_LIMIT` 表示单层预算,`V8_CALL_TREE_MEMORY_LIMIT` 表示整棵
86
- 调用树,`V8_STATEMENTS_LIMIT`、`V8_RECURSION_LIMIT`、`V8_TIMEOUT`、
87
- `V8_NESTED_DEPTH_LIMIT` 和 `V8_EXECUTION_QUEUE_TIMEOUT` 必须分别处理。
88
- - 后台任务总时长可以超过 10/30 分钟,但单片仍受上述预算;使用
89
- `HasMore + Checkpoint` 续跑,不要只提高单次超时或内存。
90
- - 接口引擎的正向开关是 `sys_apiengine.V8Limit`:默认关闭时
91
- `V8.Limits.UnlimitedRuntime=true`,打开后才应用超时、语句、函数递归、
92
- 累计分配和 Promise 等待限制。表后端事件同样使用正向 `diy_table.V8Limit`:
93
- 缺失、`null`、`0/false` 不设置单次预算,只有 `1/true` 才启用限制;旧
94
- `V8Unlimited` 仅在新字段不存在时反向兼容。
95
- 常驻内存保护、外部取消、并发、接口嵌套深度、权限沙箱与数据库限制始终
96
- 生效;两类开关都只能来自持久化可信元数据,不能从请求参数启用。
97
- - 服务端另有一个内置受信任特例:主租户中由持久队列恢复的
98
- `import-microi-store-package`:必须同时具备可信用户快照、`Level >= 9999`
99
- 和 TaskId,才允许 `V8.Limits.MemoryAccounting=ResidentMemoryGuardOnly`。
100
- 此模式不是“无限内存”,而是改用容器优先的进程 RSS 防线:95% 拒绝新工作、
101
- 98% 有界停机;导入器仍必须按资产分片并可从 checkpoint 幂等恢复。前台调用、
102
- 子租户或其它 Key 看到该模式都属于安全缺陷。
103
- - 回归至少验证 Jint 包版本、约束重置、默认/硬上限,以及 400 行左右普通
104
- FormEngine 查询与数据加工不会被平台准备阶段的累计分配误伤。
105
-
106
- ## try/catch 异常捕获 + 详情上报
107
-
108
- ```javascript
109
- try {
110
- var r = V8.Http.Post({
111
- Url: 'https://api.partner.com/sync',
112
- PostParam: {
113
- Id: V8.Param.Id,
114
- Action: V8.Param.Action
115
- },
116
- ParamType: 'json',
117
- Timeout: 30
118
- });
119
- if (!r || r.indexOf('"code":0') === 0) {
120
- throw new Error('合作方接口失败:' + r);
121
- }
122
- return { Code: 1, Data: JSON.parse(r) };
123
- } catch (ex) {
124
- // 完整异常信息
125
- var traceId = V8.Method.NewUlid();
126
- var errorDetails = {
127
- traceId: traceId,
128
- message: ex.message,
129
- stack: ex.stack,
130
- line: ex.lineNumber,
131
- column: ex.columnNumber,
132
- fileName: ex.fileName,
133
- when: DateNow('yyyy-MM-dd HH:mm:ss')
134
- };
135
- console.error('SyncError', JSON.stringify(errorDetails));
136
-
137
- V8.Method.AddSysLog({
138
- Type: 'IntegrationError',
139
- Title: '合作方同步失败',
140
- Content: JSON.stringify(errorDetails),
141
- Level: 3 // 1=Info / 2=Warn / 3=Error
142
- });
143
-
144
- return {
145
- Code: 0,
146
- Msg: '同步失败,请按追踪号查询日志',
147
- DataAppend: isDebugLog ? { TraceId: traceId } : null
148
- };
149
- }
150
- ```
151
-
152
- ## V8.Method.AddSysLog — 业务审计日志
153
-
154
- ```javascript
155
- V8.Method.AddSysLog({
156
- Type: 'OrderCreate', // 自定义类型,便于过滤
157
- Title: '客户【' + V8.Form.CustomerName + '】下单',
158
- Content: JSON.stringify({
159
- OrderId: V8.Form.Id,
160
- Amount: V8.Form.TotalAmount,
161
- UserId: V8.CurrentUser.Id
162
- }),
163
- Level: 1 // 1=Info, 2=Warn, 3=Error
164
- });
165
- ```
166
-
167
- 日志保存在按租户、月份拆分的 MongoDB 系统日志集合中,可在系统日志菜单查看并按 Type 过滤。所有 `AddSysLog` 调用统一进入后端异步队列,由后台批量写 MongoDB;批次先写本地 spool,MongoDB 故障和正常重启后自动幂等重放,因此业务请求不得自行启动线程或直接并发写 MongoDB。
168
-
169
- - 容器环境把固定目录 `logs/syslog-spool` 挂载到持久卷,不为路径增加环境变量。
170
- - 分布式部署的节点标识由平台自动生成;所有节点写同一 MongoDB 时仍按全局 `EventId` upsert。详情状态和私有文件票据存共享 Redis,本机内存只作故障兜底,不能依赖粘性会话。
171
- - 多节点可能同时观察到的菜单、详情关闭、附件分片和登录生命周期事件要使用确定性 `EventId`,不能只靠本机字典去重;服务正常停止会落盘排空,重启会自动重放。
172
- - 平台用户行为统一使用结构化字段 `Category`、`Action`、`Source`、`TargetType`、`TargetId`、`SessionId`、`DurationSeconds`、`Success`、`OccurredAt`。
173
- - 用户显示采用 `Name(Account)`;禁止记录密码、原始 Token、Authorization、Secret、ApiKey、连接字符串,内容还必须限长。
174
- - 前端只能上报纯 UI 行为信号;菜单访问、CRUD、导入导出、登录生命周期、私有文件实际访问等必须以后端真实执行点为事实源。
175
-
176
- ### 匿名登录/第三方授权接口的追踪日志
177
-
178
- 微信手机号、OAuth、短信快捷登录等匿名接口必须生成追踪号并按阶段记录失败。开发者工具成功不能替代体验版/真机验证。
179
-
180
- ```javascript
181
- var traceId = V8.Method.NewGuid().replace(/-/g, '').substring(0, 16);
182
-
183
- function fail(stage, message, detail) {
184
- V8.Method.AddSysLog({
185
- Type: 'ThirdPartyLogin',
186
- Title: '授权登录失败[' + stage + '][' + traceId + ']',
187
- Content: JSON.stringify({
188
- TraceId: traceId,
189
- Stage: stage,
190
- Message: message,
191
- Detail: detail || {},
192
- OsClient: V8.OsClient
193
- }),
194
- Remark: traceId,
195
- Level: 3
196
- });
197
- return { Code: 0, Msg: '授权登录失败(' + stage + '):' + message + ';追踪号:' + traceId };
198
- }
199
- ```
200
-
201
- - 在身份交换、AccessToken、手机号/用户资料交换、账号匹配、注册/更新、Token 签发前维护明确阶段名,所有显式失败和顶层 `catch` 都走同一个 `fail`。
202
- - 日志保留第三方 `errcode/errmsg`,但先脱敏;禁止记录 Secret、AccessToken、授权 code、LoginCode、OpenId、完整手机号和用户 Token。
203
- - `V8.Method.AddSysLog` 写 MongoDB 系统日志,适合 `Code=0` 仍需保留的结构化失败记录;`console.error` 也按当前 `OsClient` 进入 MongoDB,但不替代带追踪号的业务审计日志。
204
- - 前端响应显示同一个追踪号,排查时先按追踪号查系统日志,再结合第三方错误码定位。
205
-
206
- ## 后端 V8 console 的去向
207
-
208
- - 普通接口引擎和表单后端 V8 的 `console.log/info/warn/error` 按租户写入 MongoDB 系统日志,`Source/TargetType` 为 `V8`,可按接口 Key 或事件名定位。
209
- - MCP 远程执行和 V8 调试会通过请求级上下文捕获当次输出并返回 `ConsoleOutput`;不得用进程级 `Console.SetOut`,否则并发请求会互相截取日志。
210
- - Docker/服务器控制台只保留影响平台启动、主租户、日志管道或进程存活的关键日志,不再作为普通 V8 调试日志入口。
211
- - 前端 V8 的 `console.log` 仍在浏览器开发者工具中查看,与后端日志通道无关。
212
-
213
- ## 性能跟踪(毫秒级耗时)
214
-
215
- ```javascript
216
- var t0 = Date.now();
217
-
218
- var step1 = V8.FormEngine.GetTableData('Big', { _PageSize: 5000 });
219
- var t1 = Date.now();
220
-
221
- var step2 = V8.Db.FromSql('SELECT COUNT(*) FROM Order').ToScalar();
222
- var t2 = Date.now();
223
-
224
- dbg('耗时', { step1Ms: t1 - t0, step2Ms: t2 - t1, totalMs: t2 - t0 });
225
- ```
226
-
227
- ## 前端调试
228
-
229
- ```javascript
230
- // 前端 V8 事件中
231
- console.log('当前表单', V8.Form);
232
- console.warn('弃用字段被使用');
233
- console.error('校验失败', V8.Form);
234
-
235
- // 在浏览器开发者工具控制台查看
236
- // 或显式弹层:
237
- V8.Tips('调试: ' + JSON.stringify(V8.Form), true);
238
- ```
239
-
240
- ## VS Code 插件输出约定
241
-
242
- Microi VS Code 插件的右下角信息、警告和错误通知必须同步写入【输出 → Microi 吾码】,让构建、推送、拉取、登录、同步和调试结果在通知消失后仍可追溯。输出时间使用运行 VS Code 电脑的本地时区,格式统一为 `yyyy-MM-dd HH:mm:ss`,禁止直接使用 `toISOString()` 造成 UTC 时间偏差。
243
-
244
- - 后台 Token/会话维护等静默健康探测设置 `silent=true` 后,预期的网络不可达不得反复写成红色错误。
245
- - 用户主动执行拉取、推送或状态检查时,网络错误必须保留错误码、系统调用、地址、端口及聚合错误明细;禁止出现只有 `Error:`、没有原因的空日志。
246
- - 所有右下角通知统一经过通知封装写入输出;带操作按钮的通知还应记录用户选择,禁止业务模块直接调用 `vscode.window.showInformationMessage/showWarningMessage/showErrorMessage` 绕过持久日志。
247
-
248
- ## 不要在生产泄漏敏感信息
249
-
250
- ```javascript
251
- // ❌ 危险:返回给前端
252
- return { Code: 0, Msg: ex.message, DataAppend: { Stack: ex.stack } };
253
-
254
- // ✅ 只返回关联ID;完整堆栈仅写内部日志
255
- var traceId = V8.Method.NewUlid();
256
- console.error('traceId=' + traceId + ' error=' + ex.message);
257
- return {
258
- Code: 0,
259
- Msg: '系统繁忙',
260
- DataAppend: { TraceId: traceId }
261
- };
262
- ```
263
-
264
- ## DosResult 状态码速查
265
-
266
- | Code | 含义 |
267
- |------|------|
268
- | `1` | 成功 |
269
- | `0` | 业务失败(接口引擎中 return 此 Code 自动回滚事务)|
270
- | `2` | `GetFormData` 数据不存在(特殊:仍是查询正常,只是无数据)|
271
- | `1001` | Token 已失效 |
272
- | `1002` | 身份验证失败 |
273
- | 其它非 1 | 视为失败,自动回滚 |
274
-
275
- 调试时遇到 `Code != 1` 优先看 `Msg`、再开 `isDebugLog=1` 排查。
276
-
277
- ## 检查清单
278
-
279
- - [ ] 接口引擎是否支持 `isDebugLog` 参数?
280
- - [ ] 关键节点是否调用 `dbg()`?
281
- - [ ] 第三方调用是否 `try/catch` + `AddSysLog`?
282
- - [ ] 异常 stack 仅在 debug 模式下返回前端?
283
- - [ ] 业务审计是否 `AddSysLog`(Level 1/2/3)?
284
- - [ ] 性能瓶颈是否打 `TickCount` 耗时?
1
+ ---
2
+ name: v8-debugging
3
+ description: Microi V8 调试与日志指南。用于排查接口引擎、V8 事件、console.log、DataAppend.DebugLog、sys_log、异常处理和远程执行问题。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi V8 调试与日志
9
+
10
+ 你正在为 Microi 吾码平台编写 V8 引擎代码,需要在开发/测试/生产环境进行排错。本指南提供调试模式、异常捕获、系统日志、调试输出的标准做法。
11
+
12
+ 系统级排查优先读取 `../system-observability/SKILL.md` 并通过 `microi_query_system_observability` 查询统一日志、统计、详情、Trace、热点接口和运行数据;`microi_query_mongodb_logs` 仅保留给只需要旧 Mongo 日志列表的兼容场景。两者都必须限制租户、时间窗、页大小和返回字段,不在结果或回答中输出 Token、连接串、Secret 或完整敏感请求体。
13
+
14
+ ## 三种输出通道
15
+
16
+ | 通道 | 何处看 | 用途 |
17
+ |------|--------|------|
18
+ | 后端 V8 的 `console.log` / `console.error` | 租户系统日志(MongoDB);MCP/调试执行同时返回当次 `ConsoleOutput` | 临时诊断、性能日志 |
19
+ | `DataAppend.DebugLog`(返回给前端) | 浏览器开发者工具 / Postman 响应 | 当次请求的关键节点、变量值 |
20
+ | `V8.Method.AddSysLog({...})` | 系统日志页 / `sys_log` 表 | 业务操作审计、第三方回调记录 |
21
+
22
+ ## 调试模式 isDebugLog
23
+
24
+ 调试开关必须同时满足“服务端允许调试 + 当前用户 `Level >= 9999`”。不能只相信 URL/query 的 `isDebugLog=1`,匿名或普通用户否则可获得内部数据与堆栈。
25
+
26
+ ```javascript
27
+ var isAdmin = V8.CurrentUser && Number(V8.CurrentUser.Level || 0) >= 9999;
28
+ var isDebugLog = isAdmin &&
29
+ V8.SysConfig &&
30
+ V8.SysConfig.EnableV8Debug === 1 &&
31
+ (V8.Param.isDebugLog === '1' || V8.Param.isDebugLog === true);
32
+ var debugLog = [];
33
+ function dbg(msg, data) {
34
+ if (!isDebugLog) return;
35
+ debugLog.push({
36
+ time: DateNow('HH:mm:ss.fff'),
37
+ msg: msg,
38
+ data: data
39
+ });
40
+ }
41
+
42
+ dbg('开始查询参数', {
43
+ Keyword: String(V8.Param.Keyword || '').substring(0, 100),
44
+ PageIndex: V8.Param.PageIndex
45
+ });
46
+
47
+ var products = V8.FormEngine.GetTableData('Product', {
48
+ _Where: [['Status', '=', 1]]
49
+ });
50
+ dbg('查询结果', { Code: products.Code, Count: products.Data && products.Data.length });
51
+
52
+ // ... 业务处理 ...
53
+
54
+ return {
55
+ Code: 1,
56
+ Data: result,
57
+ DataAppend: isDebugLog ? { DebugLog: debugLog } : null
58
+ };
59
+ ```
60
+
61
+ 管理员在服务端显式开启调试后,才可用 `?isDebugLog=1` 查看当次请求的脱敏节点日志。生产环境默认关闭,调试完成后立即关闭。
62
+
63
+ ## Jint 内存上限错误
64
+
65
+ 出现 `Script has allocated ... but is limited to ...` 时,不要把它解释为
66
+ 数据库返回数据的实际大小,也不要直接关闭内存限制。
67
+
68
+ - Jint `LimitMemory` 使用当前执行线程的**累计托管分配字节数**,不是当前
69
+ 存活堆或进程工作集;中间对象即使已经被 GC 回收,累计值也不会减少。
70
+ - 平台必须在宿主对象、扩展和全局 V8 准备完成后调用
71
+ `engine.Constraints.Reset()`,让全局 V8 和当前接口 V8 各自获得完整预算;
72
+ 用户脚本以及脚本调用的 CLR/FormEngine 逻辑仍受同一阶段预算限制。
73
+ - 默认单次执行预算为 2048 MB,默认节点硬上限为 8192 MB;根调用树默认
74
+ 8192 MB、节点硬上限 32768 MB。存量接口仅把仍等于
75
+ 历史默认值 1024 MB 的记录迁移到 2048 MB;客户明确设置的其它值不覆盖。
76
+ - 旧版嵌套接口会让子引擎的初始化、查询、JSON 和业务分配被每一层父引擎
77
+ 重复计数,因此四层、少量数据也可能提前触发 2GB。新版默认启用父子单层
78
+ 预算隔离,每层独立计数,同时由根调用树默认 8192MB 的总预算兜底。
79
+ - `LimitRecursion` 只限制当前 JavaScript 函数递归,不限制
80
+ `V8.ApiEngine.Run` 层数;接口嵌套默认 32、节点硬上限默认 64。
81
+ - 排查时记录 `ApiEngineKey`、实际 `LimitMemory`、返回行数、选择字段、
82
+ 分页大小、`V8.Limits`、`DataAppend.V8Limit` 调用路径和重现脚本。若
83
+ 2048 MB 仍触发,继续减少一次性对象图、流式或
84
+ 分批处理;不得把上限无限提高或取消。
85
+ - `V8_MEMORY_LIMIT` 表示单层预算,`V8_CALL_TREE_MEMORY_LIMIT` 表示整棵
86
+ 调用树,`V8_STATEMENTS_LIMIT`、`V8_RECURSION_LIMIT`、`V8_TIMEOUT`、
87
+ `V8_NESTED_DEPTH_LIMIT` 和 `V8_EXECUTION_QUEUE_TIMEOUT` 必须分别处理。
88
+ - 后台任务总时长可以超过 10/30 分钟,但单片仍受上述预算;使用
89
+ `HasMore + Checkpoint` 续跑,不要只提高单次超时或内存。
90
+ - 接口引擎的正向开关是 `sys_apiengine.V8Limit`:默认关闭时
91
+ `V8.Limits.UnlimitedRuntime=true`,打开后才应用超时、语句、函数递归、
92
+ 累计分配和 Promise 等待限制。表后端事件同样使用正向 `diy_table.V8Limit`:
93
+ 缺失、`null`、`0/false` 不设置单次预算,只有 `1/true` 才启用限制;旧
94
+ `V8Unlimited` 仅在新字段不存在时反向兼容。
95
+ 常驻内存保护、外部取消、并发、接口嵌套深度、权限沙箱与数据库限制始终
96
+ 生效;两类开关都只能来自持久化可信元数据,不能从请求参数启用。
97
+ - 服务端另有一个内置受信任特例:主租户中由持久队列恢复的
98
+ `import-microi-store-package`:必须同时具备可信用户快照、`Level >= 9999`
99
+ 和 TaskId,才允许 `V8.Limits.MemoryAccounting=ResidentMemoryGuardOnly`。
100
+ 此模式不是“无限内存”,而是改用容器优先的进程 RSS 防线:95% 拒绝新工作、
101
+ 98% 有界停机;导入器仍必须按资产分片并可从 checkpoint 幂等恢复。前台调用、
102
+ 子租户或其它 Key 看到该模式都属于安全缺陷。
103
+ - 回归至少验证 Jint 包版本、约束重置、默认/硬上限,以及 400 行左右普通
104
+ FormEngine 查询与数据加工不会被平台准备阶段的累计分配误伤。
105
+
106
+ ## try/catch 异常捕获 + 详情上报
107
+
108
+ ```javascript
109
+ try {
110
+ var r = V8.Http.Post({
111
+ Url: 'https://api.partner.com/sync',
112
+ PostParam: {
113
+ Id: V8.Param.Id,
114
+ Action: V8.Param.Action
115
+ },
116
+ ParamType: 'json',
117
+ Timeout: 30
118
+ });
119
+ if (!r || r.indexOf('"code":0') === 0) {
120
+ throw new Error('合作方接口失败:' + r);
121
+ }
122
+ return { Code: 1, Data: JSON.parse(r) };
123
+ } catch (ex) {
124
+ // 完整异常信息
125
+ var traceId = V8.Method.NewUlid();
126
+ var errorDetails = {
127
+ traceId: traceId,
128
+ message: ex.message,
129
+ stack: ex.stack,
130
+ line: ex.lineNumber,
131
+ column: ex.columnNumber,
132
+ fileName: ex.fileName,
133
+ when: DateNow('yyyy-MM-dd HH:mm:ss')
134
+ };
135
+ console.error('SyncError', JSON.stringify(errorDetails));
136
+
137
+ V8.Method.AddSysLog({
138
+ Type: 'IntegrationError',
139
+ Title: '合作方同步失败',
140
+ Content: JSON.stringify(errorDetails),
141
+ Level: 3 // 1=Info / 2=Warn / 3=Error
142
+ });
143
+
144
+ return {
145
+ Code: 0,
146
+ Msg: '同步失败,请按追踪号查询日志',
147
+ DataAppend: isDebugLog ? { TraceId: traceId } : null
148
+ };
149
+ }
150
+ ```
151
+
152
+ ## V8.Method.AddSysLog — 业务审计日志
153
+
154
+ ```javascript
155
+ V8.Method.AddSysLog({
156
+ Type: 'OrderCreate', // 自定义类型,便于过滤
157
+ Title: '客户【' + V8.Form.CustomerName + '】下单',
158
+ Content: JSON.stringify({
159
+ OrderId: V8.Form.Id,
160
+ Amount: V8.Form.TotalAmount,
161
+ UserId: V8.CurrentUser.Id
162
+ }),
163
+ Level: 1 // 1=Info, 2=Warn, 3=Error
164
+ });
165
+ ```
166
+
167
+ 日志保存在按租户、月份拆分的 MongoDB 系统日志集合中,可在系统日志菜单查看并按 Type 过滤。所有 `AddSysLog` 调用统一进入后端异步队列,由后台批量写 MongoDB;批次先写本地 spool,MongoDB 故障和正常重启后自动幂等重放,因此业务请求不得自行启动线程或直接并发写 MongoDB。
168
+
169
+ - 容器环境把固定目录 `logs/syslog-spool` 挂载到持久卷,不为路径增加环境变量。
170
+ - 分布式部署的节点标识由平台自动生成;所有节点写同一 MongoDB 时仍按全局 `EventId` upsert。详情状态和私有文件票据存共享 Redis,本机内存只作故障兜底,不能依赖粘性会话。
171
+ - 多节点可能同时观察到的菜单、详情关闭、附件分片和登录生命周期事件要使用确定性 `EventId`,不能只靠本机字典去重;服务正常停止会落盘排空,重启会自动重放。
172
+ - 平台用户行为统一使用结构化字段 `Category`、`Action`、`Source`、`TargetType`、`TargetId`、`SessionId`、`DurationSeconds`、`Success`、`OccurredAt`。
173
+ - 用户显示采用 `Name(Account)`;禁止记录密码、原始 Token、Authorization、Secret、ApiKey、连接字符串,内容还必须限长。
174
+ - 前端只能上报纯 UI 行为信号;菜单访问、CRUD、导入导出、登录生命周期、私有文件实际访问等必须以后端真实执行点为事实源。
175
+
176
+ ### 匿名登录/第三方授权接口的追踪日志
177
+
178
+ 微信手机号、OAuth、短信快捷登录等匿名接口必须生成追踪号并按阶段记录失败。开发者工具成功不能替代体验版/真机验证。
179
+
180
+ ```javascript
181
+ var traceId = V8.Method.NewGuid().replace(/-/g, '').substring(0, 16);
182
+
183
+ function fail(stage, message, detail) {
184
+ V8.Method.AddSysLog({
185
+ Type: 'ThirdPartyLogin',
186
+ Title: '授权登录失败[' + stage + '][' + traceId + ']',
187
+ Content: JSON.stringify({
188
+ TraceId: traceId,
189
+ Stage: stage,
190
+ Message: message,
191
+ Detail: detail || {},
192
+ OsClient: V8.OsClient
193
+ }),
194
+ Remark: traceId,
195
+ Level: 3
196
+ });
197
+ return { Code: 0, Msg: '授权登录失败(' + stage + '):' + message + ';追踪号:' + traceId };
198
+ }
199
+ ```
200
+
201
+ - 在身份交换、AccessToken、手机号/用户资料交换、账号匹配、注册/更新、Token 签发前维护明确阶段名,所有显式失败和顶层 `catch` 都走同一个 `fail`。
202
+ - 日志保留第三方 `errcode/errmsg`,但先脱敏;禁止记录 Secret、AccessToken、授权 code、LoginCode、OpenId、完整手机号和用户 Token。
203
+ - `V8.Method.AddSysLog` 写 MongoDB 系统日志,适合 `Code=0` 仍需保留的结构化失败记录;`console.error` 也按当前 `OsClient` 进入 MongoDB,但不替代带追踪号的业务审计日志。
204
+ - 前端响应显示同一个追踪号,排查时先按追踪号查系统日志,再结合第三方错误码定位。
205
+
206
+ ## 后端 V8 console 的去向
207
+
208
+ - 普通接口引擎和表单后端 V8 的 `console.log/info/warn/error` 按租户写入 MongoDB 系统日志,`Source/TargetType` 为 `V8`,可按接口 Key 或事件名定位。
209
+ - MCP 远程执行和 V8 调试会通过请求级上下文捕获当次输出并返回 `ConsoleOutput`;不得用进程级 `Console.SetOut`,否则并发请求会互相截取日志。
210
+ - Docker/服务器控制台只保留影响平台启动、主租户、日志管道或进程存活的关键日志,不再作为普通 V8 调试日志入口。
211
+ - 前端 V8 的 `console.log` 仍在浏览器开发者工具中查看,与后端日志通道无关。
212
+
213
+ ## 性能跟踪(毫秒级耗时)
214
+
215
+ ```javascript
216
+ var t0 = Date.now();
217
+
218
+ var step1 = V8.FormEngine.GetTableData('Big', { _PageSize: 5000 });
219
+ var t1 = Date.now();
220
+
221
+ var step2 = V8.Db.FromSql('SELECT COUNT(*) FROM Order').ToScalar();
222
+ var t2 = Date.now();
223
+
224
+ dbg('耗时', { step1Ms: t1 - t0, step2Ms: t2 - t1, totalMs: t2 - t0 });
225
+ ```
226
+
227
+ ## 前端调试
228
+
229
+ ```javascript
230
+ // 前端 V8 事件中
231
+ console.log('当前表单', V8.Form);
232
+ console.warn('弃用字段被使用');
233
+ console.error('校验失败', V8.Form);
234
+
235
+ // 在浏览器开发者工具控制台查看
236
+ // 或显式弹层:
237
+ V8.Tips('调试: ' + JSON.stringify(V8.Form), true);
238
+ ```
239
+
240
+ ## VS Code 插件输出约定
241
+
242
+ Microi VS Code 插件的右下角信息、警告和错误通知必须同步写入【输出 → Microi 吾码】,让构建、推送、拉取、登录、同步和调试结果在通知消失后仍可追溯。输出时间使用运行 VS Code 电脑的本地时区,格式统一为 `yyyy-MM-dd HH:mm:ss`,禁止直接使用 `toISOString()` 造成 UTC 时间偏差。
243
+
244
+ - 后台 Token/会话维护等静默健康探测设置 `silent=true` 后,预期的网络不可达不得反复写成红色错误。
245
+ - 用户主动执行拉取、推送或状态检查时,网络错误必须保留错误码、系统调用、地址、端口及聚合错误明细;禁止出现只有 `Error:`、没有原因的空日志。
246
+ - 所有右下角通知统一经过通知封装写入输出;带操作按钮的通知还应记录用户选择,禁止业务模块直接调用 `vscode.window.showInformationMessage/showWarningMessage/showErrorMessage` 绕过持久日志。
247
+
248
+ ## 不要在生产泄漏敏感信息
249
+
250
+ ```javascript
251
+ // ❌ 危险:返回给前端
252
+ return { Code: 0, Msg: ex.message, DataAppend: { Stack: ex.stack } };
253
+
254
+ // ✅ 只返回关联ID;完整堆栈仅写内部日志
255
+ var traceId = V8.Method.NewUlid();
256
+ console.error('traceId=' + traceId + ' error=' + ex.message);
257
+ return {
258
+ Code: 0,
259
+ Msg: '系统繁忙',
260
+ DataAppend: { TraceId: traceId }
261
+ };
262
+ ```
263
+
264
+ ## DosResult 状态码速查
265
+
266
+ | Code | 含义 |
267
+ |------|------|
268
+ | `1` | 成功 |
269
+ | `0` | 业务失败(接口引擎中 return 此 Code 自动回滚事务)|
270
+ | `2` | `GetFormData` 数据不存在(特殊:仍是查询正常,只是无数据)|
271
+ | `1001` | Token 已失效 |
272
+ | `1002` | 身份验证失败 |
273
+ | 其它非 1 | 视为失败,自动回滚 |
274
+
275
+ 调试时遇到 `Code != 1` 优先看 `Msg`、再开 `isDebugLog=1` 排查。
276
+
277
+ ## 检查清单
278
+
279
+ - [ ] 接口引擎是否支持 `isDebugLog` 参数?
280
+ - [ ] 关键节点是否调用 `dbg()`?
281
+ - [ ] 第三方调用是否 `try/catch` + `AddSysLog`?
282
+ - [ ] 异常 stack 仅在 debug 模式下返回前端?
283
+ - [ ] 业务审计是否 `AddSysLog`(Level 1/2/3)?
284
+ - [ ] 性能瓶颈是否打 `TickCount` 耗时?