@microi.net/cli 5.7.9 → 5.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +106 -106
  10. package/scripts/microi-skills.meta.json +293 -290
  11. package/skills/.microi-skills-version.json +2 -2
  12. package/skills/.progressive-disclosure-manifest.json +441 -441
  13. package/skills/README.md +2 -1
  14. package/skills/ai-engine/SKILL.md +1 -1
  15. package/skills/ai-engine/references/ai-employees.md +4 -0
  16. package/skills/ai-platform-governance/SKILL.md +8 -8
  17. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +9 -9
  18. package/skills/app-store/SKILL.md +58 -4
  19. package/skills/job-engine/SKILL.md +4 -3
  20. package/skills/message-notification/SKILL.md +2 -1
  21. package/skills/microi/SKILL.md +14 -0
  22. package/skills/microi-ai-application/SKILL.md +16 -3
  23. package/skills/microi-client-frontend/SKILL.md +10 -5
  24. 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 +3 -3
  25. 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 +4 -4
  26. 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 +3 -3
  27. package/skills/microi-codex/SKILL.md +15 -0
  28. package/skills/microi-datasource-mapping/SKILL.md +4 -0
  29. package/skills/microi-deployment/SKILL.md +7 -0
  30. package/skills/microi-deployment/references/deployment-matrix.md +8 -0
  31. package/skills/microi-docs-coverage/references/capability-map.md +1 -0
  32. package/skills/microi-form-layout/SKILL.md +6 -6
  33. 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 +3 -3
  34. package/skills/microi-frontend-sdk/SKILL.md +6 -6
  35. 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 +7 -7
  36. package/skills/microi-microservice/SKILL.md +1 -0
  37. package/skills/microi-mobile-app-quality/SKILL.md +12 -8
  38. 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 +10 -10
  39. 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 +4 -4
  40. package/skills/microi-system-delivery/SKILL.md +5 -5
  41. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +1 -1
  42. 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 +6 -4
  43. package/skills/microi-ui/SKILL.md +6 -6
  44. 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 +5 -5
  45. package/skills/microi-uniapp-frontend/SKILL.md +10 -10
  46. 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 +7 -7
  47. 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 +10 -10
  48. package/skills/module-engine/SKILL.md +13 -0
  49. package/skills/page-engine/SKILL.md +19 -8
  50. 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 +3 -3
  51. 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 +4 -4
  52. package/skills/playwright-e2e/SKILL.md +11 -11
  53. 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 +5 -5
  54. 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 +3 -3
  55. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +7 -7
  56. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +4 -4
  57. package/skills/system-observability/SKILL.md +3 -0
  58. package/skills/ui-design/SKILL.md +7 -7
  59. 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 +2 -2
  60. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +3 -3
  61. 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 +2 -2
  62. 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 +1 -1
  63. 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 +3 -3
  64. 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 +2 -2
  65. 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 +4 -4
  66. 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 +5 -5
  67. package/skills/unity-integration/references/ai-app-delivery.md +16 -0
  68. package/skills/v8-api-config/SKILL.md +6 -0
  69. package/skills/v8-crud-api/SKILL.md +9 -7
  70. 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 +8 -8
  71. 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 +2 -2
  72. package/skills/v8-explorer-tree/SKILL.md +2 -2
  73. package/skills/v8-export-import/SKILL.md +4 -4
  74. 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 +3 -3
  75. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +4 -4
  76. 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 +1 -1
  77. package/skills/v8-file-upload/SKILL.md +32 -4
  78. 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 +3 -3
  79. 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 +3 -3
  80. package/skills/v8-frontend-events/SKILL.md +6 -6
  81. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +5 -5
  82. package/skills/v8-http-integration/SKILL.md +4 -4
  83. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +7 -7
  84. 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 +2 -2
  85. package/skills/v8-image-processing/SKILL.md +1 -1
  86. package/skills/v8-menu-buttons/SKILL.md +4 -4
  87. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +4 -4
  88. 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 +5 -5
  89. 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 +3 -3
  90. package/skills/v8-mq-mqtt/SKILL.md +3 -2
  91. package/skills/v8-mq-mqtt/references/mqtt-production.md +1 -1
  92. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +1 -1
  93. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +1 -1
  94. package/skills/v8-security/SKILL.md +15 -5
  95. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +3 -3
  96. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +8 -6
  97. package/skills/v8-table-event/SKILL.md +5 -5
  98. 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 +6 -6
  99. 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 +2 -2
  100. package/skills/v8-tcp-integration/SKILL.md +2 -2
  101. package/skills/v8-workflow/SKILL.md +42 -7
  102. 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 +7 -7
  103. package/skills/workspace-conventions/SKILL.md +19 -10
  104. 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 +8 -7
  105. 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 +21 -21
  106. 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 +1 -1
@@ -10,7 +10,7 @@ description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScrip
10
10
  你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
11
 
12
12
  <!-- microi-progressive:begin -->
13
- <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
13
+ <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=522eba2beee1f0b0df087fe86f1ff70bc74b8e9f68a844a5bea1471389a0df22 -->
14
14
  ## 本地优先与版本头(必做)
15
15
 
16
16
  AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
@@ -38,12 +38,14 @@ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `
38
38
  生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
39
 
40
40
  <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
41
+ <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=2e7809a53af3dcbafecc617f40dbb528a892fc734ab6029072d1fcf55e7ed968 -->
42
42
  ## 核心规则
43
43
 
44
44
  - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
45
45
  - 全局对象 `V8` 是所有后端能力的入口
46
46
  - 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
47
+ - 严格业务字段白名单先逐项排除本入口支持的宿主传输字段:固定 `ApiEngineKey / ApiAddress`、调用类型、设备和 HTTP 请求元数据;不得把整个下划线前缀视为安全字段,不解析 `_RawBody` 重写动作,也不从传输字段取授权。历史调试器的 `TestParam1` 仅兼容 null/undefined、最多 200 字符的字符串、有限数字或布尔值并立即丢弃;对象、数组、超长值和其它未知字段继续拒绝。真实 HTTP 与内部调用都须验收,普通岗位无初始化配置副作用,权限继续读取权威当前用户与目标租户。
48
+ - `V8.Param` 中嵌套 JSON 的 `JObject/JArray` 可能是 Jint 宿主对象,`Array.isArray` 不一定成立。需要严格数组、布尔或结构校验时,在业务入口对有界业务参数使用 `JSON.parse(JSON.stringify(V8.Param || {}))` 转为纯 JSON,再执行原字段白名单、类型、大小与权限校验;不能把只有 `length` 的对象当数组。只规范化业务参数,不复制或信任客户端身份、`V8.CurrentUser`、`V8.DbTrans` 或 `V8.WF`;大文件继续使用专用文件通道。验收须同时覆盖真实 HTTP 宿主集合和离线 JavaScript 数组。
47
49
  - 通过 `V8.CurrentUser` 获取当前登录用户信息
48
50
  - 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
49
51
  - 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
@@ -51,7 +53,7 @@ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `
51
53
  - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
52
54
 
53
55
  <!-- /microi-progressive:chunk -->
54
- <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
56
+ <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=8a2aee7581fd589e15b219f2f79fdb442cb29adba667fc76e1e2e7a1f3bb1b43 -->
55
57
  ## 性能底线(必须自检)
56
58
 
57
59
  - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
@@ -71,7 +73,7 @@ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `
71
73
  - 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
72
74
 
73
75
  <!-- /microi-progressive:chunk -->
74
- <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=d46768bbaaf8b2ebfdd38e09d11e886b135cb65e78984dbfa67d75ec5f947175 -->
76
+ <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=a60257da3c153170b731b125c9b58614fe84030645c343688f70c9d060b0e0eb -->
75
77
  ## DosResult 状态码
76
78
 
77
79
  | Code | 含义 |
@@ -91,7 +93,7 @@ if (r.Code !== 1) return r;
91
93
  ```
92
94
 
93
95
  <!-- /microi-progressive:chunk -->
94
- <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=6d58584cabd1659ae3af6cbddb797df2c0844c99fd8d2627d02a9c0eae98e8c2 -->
96
+ <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=4efce43d196d67f3b6125747c645477442235b39ecf0ddfca325fb3bd1f444ae -->
95
97
  ## 全局日期函数
96
98
 
97
99
  ```javascript
@@ -101,7 +103,7 @@ DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
101
103
  ```
102
104
 
103
105
  <!-- /microi-progressive:chunk -->
104
- <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=35220022799bbed7f9b3d82fe14dc0855aa8f77d0640ac411c61d222d02b0eda -->
106
+ <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=f3d8f0628ddd51845fc700fe63bfa037480f131484c8238874d380cb05a89a92 -->
105
107
  ## 查询单条
106
108
 
107
109
  ```javascript
@@ -123,7 +125,7 @@ return { Code: 1, Data: result.Data };
123
125
  ```
124
126
 
125
127
  <!-- /microi-progressive:chunk -->
126
- <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=510588ad14503caff0a92c614f0e7453bdd343a1e22711c6c5a2b3f8893b5a8d -->
128
+ <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=b8ae0ea6ccd746994ea5fa74f4ae4e6163c1ffd09eb141d6fd5863d77d36f35b -->
127
129
  ## 新增
128
130
 
129
131
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-crud-api-007 sha256=0c2f3755beaa958d4642f98835743cc37063725746a256db7c18e1e0628a0e90 -->
5
+ <!-- microi-progressive:chunk id=v8-crud-api-007 sha256=66648d1a9ca67cc9cb1cdc0dd231f73c61723fbc48fc197cbd74ba6a2cde4319 -->
6
6
  ## 查询列表(分页)
7
7
 
8
8
  ```javascript
@@ -80,7 +80,7 @@ var result = V8.FormEngine.GetTableDataCount('SysUser', {
80
80
  ```
81
81
 
82
82
  <!-- /microi-progressive:chunk -->
83
- <!-- microi-progressive:chunk id=v8-crud-api-008 sha256=f7141662789ec6013eb3a7723d9c76449f3ef705e76c694e0fa6b1a065869f6a -->
83
+ <!-- microi-progressive:chunk id=v8-crud-api-008 sha256=3ac0bc88bec40eb1a24e0d4829fae58094760efd3a5b77d1cc52d87c5931a58b -->
84
84
  ## 更新
85
85
 
86
86
  ```javascript
@@ -115,7 +115,7 @@ V8.FormEngine.UptTableData(uptList);
115
115
  ```
116
116
 
117
117
  <!-- /microi-progressive:chunk -->
118
- <!-- microi-progressive:chunk id=v8-crud-api-009 sha256=b4c668215e95f9c25b0581251b5ba0a3ac52ac30a5deed994383d22334c3f484 -->
118
+ <!-- microi-progressive:chunk id=v8-crud-api-009 sha256=70e57be16e8676712be6910bfe9d50b87482d02cbbe0ab18a397a58f70916dae -->
119
119
  ## 删除
120
120
 
121
121
  ```javascript
@@ -138,7 +138,7 @@ V8.FormEngine.DelTableData(delList);
138
138
  ```
139
139
 
140
140
  <!-- /microi-progressive:chunk -->
141
- <!-- microi-progressive:chunk id=v8-crud-api-010 sha256=62326b11ca42eb72bddd7e9e72974aa6b1e36f3a85c10ac19e677fed197b03ec -->
141
+ <!-- microi-progressive:chunk id=v8-crud-api-010 sha256=620f7edf12046f4cc4f7142b9e8dbae4495d826b38efb97abdf36fde4206e7d4 -->
142
142
  ## 按条件批量操作
143
143
 
144
144
  ```javascript
@@ -156,7 +156,7 @@ V8.FormEngine.DelFormDataByWhere('SysUser', {
156
156
  ```
157
157
 
158
158
  <!-- /microi-progressive:chunk -->
159
- <!-- microi-progressive:chunk id=v8-crud-api-011 sha256=e3fac807511be04f71971c32cfce5c4b87f7a5a349d171624e5c598452dc1def -->
159
+ <!-- microi-progressive:chunk id=v8-crud-api-011 sha256=8bfaf89705627a0c0dd1a7723c09832cb00a1206910e3ed70ebdbde7ffa832f4 -->
160
160
  ## 事务处理
161
161
 
162
162
  ```javascript
@@ -175,7 +175,7 @@ V8.ApiEngine.Run('other-engine-key', { Id: 'xxx' }, V8.DbTrans);
175
175
  ```
176
176
 
177
177
  <!-- /microi-progressive:chunk -->
178
- <!-- microi-progressive:chunk id=v8-crud-api-012 sha256=c8fe5dc10f0a971d3763b51f54cd77e4f23aed816206edf019db56dd37f603ce -->
178
+ <!-- microi-progressive:chunk id=v8-crud-api-012 sha256=9ddaf59ae87f41e640674a98efe47cee9d9a614b68e32003d229e16d48056609 -->
179
179
  ## 请求内异步与后台处理
180
180
 
181
181
  ```javascript
@@ -193,7 +193,7 @@ return resp.StatusCode >= 200 && resp.StatusCode < 300
193
193
  禁止用 `setTimeout` / `Task.Run` 实现“立即返回、后台继续”:接口返回后 Jint Engine、租户上下文、事务和执行租约会释放。脱离请求的任务使用后台任务、Job、MQ 或 outbox,并按 `EventId` 幂等处理与恢复。
194
194
 
195
195
  <!-- /microi-progressive:chunk -->
196
- <!-- microi-progressive:chunk id=v8-crud-api-013 sha256=2bc08bec5b03ec51679c79db4b654c5c4f66179d8258de61d949d3e3affa379d -->
196
+ <!-- microi-progressive:chunk id=v8-crud-api-013 sha256=6af864eb1b50594c3c0dcae5e550e51bd65e58b5cd1cb792e2dc7cda39432e5f -->
197
197
  ## 动态加字段(运行时改表结构)
198
198
 
199
199
  ```javascript
@@ -213,7 +213,7 @@ V8.FormEngine.AddField({
213
213
  日期时间字段统一使用 `varchar(25)` 保存 `yyyy-MM-dd HH:mm:ss`,组件使用 `DateTime`。禁止 `datetime/date/timestamp/float/double/boolean/string/text/nvarchar` 等平台不允许的物理类型。动态表/字段属于控制面能力,只允许 `Level >= 9999` 的可信管理脚本使用。
214
214
 
215
215
  <!-- /microi-progressive:chunk -->
216
- <!-- microi-progressive:chunk id=v8-crud-api-014 sha256=42b43027eb510916aed85a3a21ea8a1c1c7697581ac8c48863e8ba8d0c793784 -->
216
+ <!-- microi-progressive:chunk id=v8-crud-api-014 sha256=c2d308a122ce6bb284fef1cecc98aabb861cafcd7b2f6c8e12cfda664fdb359f -->
217
217
  ## 旧版 _Where 兼容
218
218
 
219
219
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-crud-api-015 sha256=f68c7713878a84a265a5185940d25db21525e73a7dba6d05ba6f82030b96e60a -->
5
+ <!-- microi-progressive:chunk id=v8-crud-api-015 sha256=75eb96d81537ac44c7bca1a97a557c427baa198434cfab003e91982b8b81c419 -->
6
6
  ## _Where 条件语法速查
7
7
 
8
8
  ```javascript
@@ -36,7 +36,7 @@
36
36
  **支持的操作符:** `=`, `==`, `<>`, `!=`, `>`, `>=`, `<`, `<=`, `Like`, `NotLike`, `StartLike`, `EndLike`, `In`, `NotIn`
37
37
 
38
38
  <!-- /microi-progressive:chunk -->
39
- <!-- microi-progressive:chunk id=v8-crud-api-016 sha256=6fe2c6360151a569c46bdc2234b622f7ae8a2f3f76376fda5d90b2ab10ac4e51 -->
39
+ <!-- microi-progressive:chunk id=v8-crud-api-016 sha256=820f49da26c6be5baa52520152780fc155ed84e747e89a1f50b954d3112fa202 -->
40
40
  ## 注意事项
41
41
 
42
42
  - `_Where` 是参数化查询,自动防 SQL 注入,**不要拼接 SQL 字符串**
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: v8-explorer-tree
3
- description: Microi.Code 插件 V8 资源管理器目录规范(表单引擎 / 字段V8事件 / 模块引擎按钮)。覆盖 diy_table V8 事件、diy_field V8 事件、sys_menu 按钮 JSON 拆分回写,含 7 条安全不变量。用于实现 VSCode V8 事件树、重构目录布局或处理 sys_menu 按钮 JSON 序列化。
3
+ description: Microi.Agent 插件 V8 资源管理器目录规范(表单引擎 / 字段V8事件 / 模块引擎按钮)。覆盖 diy_table V8 事件、diy_field V8 事件、sys_menu 按钮 JSON 拆分回写,含 7 条安全不变量。用于实现 VSCode V8 事件树、重构目录布局或处理 sys_menu 按钮 JSON 序列化。
4
4
  ---
5
5
 
6
6
  > **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
7
7
 
8
8
  # v8-explorer-tree — V8 资源管理器目录规范 v2(2026-05)
9
9
 
10
- > 涉及文件:[Microi.Code/src/explorer/engineTreeProvider.ts](Microi.Code/src/explorer/engineTreeProvider.ts)、[Microi.Code/src/sync/syncManager.ts](Microi.Code/src/sync/syncManager.ts)、[Microi.Code/src/constants.ts](Microi.Code/src/constants.ts)、[Microi.Code/src/utils.ts](Microi.Code/src/utils.ts)、[Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs](Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs)
10
+ > 涉及文件:[Microi.Agent/src/explorer/engineTreeProvider.ts](Microi.Agent/src/explorer/engineTreeProvider.ts)、[Microi.Agent/src/sync/syncManager.ts](Microi.Agent/src/sync/syncManager.ts)、[Microi.Agent/src/constants.ts](Microi.Agent/src/constants.ts)、[Microi.Agent/src/utils.ts](Microi.Agent/src/utils.ts)、[Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs](Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs)
11
11
 
12
12
  ---
13
13
 
@@ -12,7 +12,7 @@ description: Microi V8 Office 导入导出指南。用于使用 V8.Office 导出
12
12
  文档维护必须优先更新既有后端 V8 主文档 `microi.doc/docs/doc/v8-engine/v8-server.md`,再按需补充已有专题页;不得为同一组 `V8.Office` API 新建重复 Markdown 页面或文档路由。只维护 `microi.doc/docs/doc/` 中文文档,`docs/en/` 由官网统一翻译生成,不手工同步英文版。
13
13
 
14
14
  <!-- microi-progressive:begin -->
15
- <!-- microi-progressive:chunk id=v8-export-import-000 sha256=e4f13e7292335a4ea683c34ae13c3f794bdc297079a61c4099e3f547eb5e07ac -->
15
+ <!-- microi-progressive:chunk id=v8-export-import-000 sha256=ea1d8edd1c2da7c7aeea5aa415d7b11d64c6243752b48b50667f3ba80be76e5b -->
16
16
  ## 核心 API
17
17
 
18
18
  标准表格导出使用 `.xlsx` 文件名及对应 OpenXML MIME。历史平台生成的“XLSX 内容但扩展名为 .xls”仅在 Excel 导入入口兼容:必须验证 OpenXML 工作簿包结构,再由 NPOI 解析;真正的 `.xls` 继续支持。禁止取消文件签名检查或把此兼容扩张到 OnlyOffice 回源、任意 ZIP、HTML/可执行文件。
@@ -27,7 +27,7 @@ description: Microi V8 Office 导入导出指南。用于使用 V8.Office 导出
27
27
  | `V8.Office.SendEmail({...})` | 发送邮件(HTML 内容) |
28
28
 
29
29
  <!-- /microi-progressive:chunk -->
30
- <!-- microi-progressive:chunk id=v8-export-import-001 sha256=9e166678e0cbc3b96814e9945a66c93426dd5ffb6a3c98bfbfe8dcb9e92ea5f9 -->
30
+ <!-- microi-progressive:chunk id=v8-export-import-001 sha256=71c2d539b2dbc034927410e093775be9251b5883e2551a77d87d4e6121eed73a -->
31
31
  ## 自定义导出 Excel(接口引擎)
32
32
 
33
33
  平台默认导出仅支持表格已展示的字段。如需自定义(如列重排、合并、计算列、图片),用接口引擎替换【导出接口】。
@@ -132,7 +132,7 @@ return {
132
132
  优先级:列级样式覆盖全局样式;`Width` 覆盖 `DefaultColumnWidth`;开启 `AutoSize` 后以自动宽度为准,再应用 `MinWidth/MaxWidth`。不传这些新参数时保持旧版导出行为。
133
133
 
134
134
  <!-- /microi-progressive:chunk -->
135
- <!-- microi-progressive:chunk id=v8-export-import-002 sha256=c18ba2c06baf3e7fb2cea79fe46637d3223d1f6b6454aa46057cfb80addd352a -->
135
+ <!-- microi-progressive:chunk id=v8-export-import-002 sha256=d26555b9a045d6a5920cf3dfd69cd20e2351aa3bab9c8499d3a5d79f58ffa6cd -->
136
136
  ## 文件响应与前端调用约定
137
137
 
138
138
  - 接口引擎必须开启【响应文件】,并返回正确的 `FileName`、`ContentType`、`FileByteBase64`。
@@ -154,7 +154,7 @@ return {
154
154
  | `NumberFormat/HeaderStyle/Style` | 数字格式与列级样式 |
155
155
 
156
156
  <!-- /microi-progressive:chunk -->
157
- <!-- microi-progressive:chunk id=v8-export-import-003 sha256=5975618ee1d3b9a4828d9f88cf35bc4efe4a8d7f45b94bd40077fa50b1d89c1f -->
157
+ <!-- microi-progressive:chunk id=v8-export-import-003 sha256=9adee471586dce589c6cf5dcaa32820ad05025c670ca885801cfa4711c584cdb -->
158
158
  ## 解析上传的 Excel / CSV(导入)
159
159
 
160
160
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-export-import-004 sha256=db7feb545a95cfb37daca76a8bd25c386f508be3d26914d8dcbdda860c8d2b05 -->
5
+ <!-- microi-progressive:chunk id=v8-export-import-004 sha256=828669707ddc19320767ac4b787383136ec820deb6ad1dc861b42b5d39097677 -->
6
6
  ## `ExcelLayout` 高级自由布局
7
7
 
8
8
  审批单、套打表、主子表、多级表头和复杂合并单元格不要硬塞入 `ExcelData + ExcelHeader`。改用 `ExcelLayout`:
@@ -94,7 +94,7 @@ V8.Result = exportResult;
94
94
  预览 URL 形式:`/?OsClient=tenant_demo#/online-office?fileUrl=<URL编码后的接口地址>&fileName=示例.xlsx&fileType=xlsx&canEdit=0`。`canEdit` 只是编辑申请,不是授权依据;未登录时即使传 `canEdit=1` 也必须强制只读,并隐藏左侧菜单、顶部导航和页签。公网匿名文件接口应配置频率限制或让导出逻辑足够轻量,不能依赖进程内变量控制并发。
95
95
 
96
96
  <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=v8-export-import-005 sha256=28d8f6a66069fa5774f090cab74c5231228f48425caa0145729c86a8405e535e -->
97
+ <!-- microi-progressive:chunk id=v8-export-import-005 sha256=401c2cd0a4b9ea45b1709d14277cf71d74ab29dcda72d404f452a0e67b56eddc -->
98
98
  ## 多 Sheet Excel 导出
99
99
 
100
100
  `ExcelSheets` 中每项是一张独立工作表,可以使用 `ExcelLayout` 高级布局,也可以传 `ExcelData + ExcelHeader` 标准表格;标准表格还可传 `FormEngineKey`、查询条件等让后端自行查询。两种模式可以在同一工作簿混用。`Sheets` 是兼容别名;新代码统一使用 `ExcelSheets`。
@@ -145,7 +145,7 @@ return {
145
145
  图片列:`ImgUpload.Multiple=1` 会按最大图片数展开为多列并合并表头;列上的 `Width` 会应用到每个展开列,`DataRowHeight/RowHeight` 控制图片行高。自动列宽会遍历单元格,大批量导出不要对所有列盲目开启。
146
146
 
147
147
  <!-- /microi-progressive:chunk -->
148
- <!-- microi-progressive:chunk id=v8-export-import-006 sha256=fd97ce1f87c32cad8539f3307bfdf679b0abc9e747281f6aaf06e7d322046c8f -->
148
+ <!-- microi-progressive:chunk id=v8-export-import-006 sha256=1a74f8359e67ca4b270de414000f8416a7564c1595189c091281d0fea6dd4a45 -->
149
149
  ## Word 导出
150
150
 
151
151
  新代码使用对象参数的 `ExportWord`;`ExportWordText` 继续保留,只用于兼容旧版纯文本场景。Word 的页面边距、图片宽高单位为厘米,字体大小单位为磅。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-export-import-007 sha256=33d817757174d42d2833f2ce3bbca6d8da341938f242d48bdad3891d6ab25230 -->
5
+ <!-- microi-progressive:chunk id=v8-export-import-007 sha256=d2958751b32d5143693cbdb6fb72aeca97f450c80c360aa7d826d4f6595c0ab1 -->
6
6
  ## PowerPoint 导出
7
7
 
8
8
  PowerPoint 的幻灯片尺寸、图片/表格位置与宽高单位均为英寸,默认画布为 16:9(13.333 × 7.5)。
@@ -67,7 +67,7 @@ return {
67
67
  `Layout` 支持 `TitleSlide`、`TitleAndContent`。单页支持独立覆盖 `BackgroundColor/TitleColor/TextColor/TitleFontSize/BodyFontSize`。`TextItems` 支持 `Text/Level/Bullet/Bold/Italic/FontSize/FontColor/Alignment`;表格支持位置、尺寸、列宽、表头/单元格颜色;图片支持 Base64/data URI、位置和尺寸。
68
68
 
69
69
  <!-- /microi-progressive:chunk -->
70
- <!-- microi-progressive:chunk id=v8-export-import-008 sha256=4dcd566dd9c5b38703831c67cc5cc2f2a99b0e7121fe2d2be2c068cfc8f739c3 -->
70
+ <!-- microi-progressive:chunk id=v8-export-import-008 sha256=af467dae5c05433fe3be2759f48a6ed09f67be04f620791652033804535ea39c -->
71
71
  ## 完整导入模式(含进度跟踪)
72
72
 
73
73
  模块引擎【导入接口替换】+【导入进度接口替换】可实现实时进度提示。
@@ -139,7 +139,7 @@ return { Code: 1, Data: stepStr ? JSON.parse(stepStr) : [] };
139
139
  ```
140
140
 
141
141
  <!-- /microi-progressive:chunk -->
142
- <!-- microi-progressive:chunk id=v8-export-import-009 sha256=ba923bb2b464910d063e94a6f88dbb9b3229739cb5e39611c8cf275bc77b743c -->
142
+ <!-- microi-progressive:chunk id=v8-export-import-009 sha256=f1583c2154c79acea7445119be851654d0cec81620fe0c1f0fadeee90f330bbf -->
143
143
  ## 接收并下载文件(HTTP 链接转 Excel)
144
144
 
145
145
  ```javascript
@@ -152,7 +152,7 @@ var base64 = System.Convert.ToBase64String(bytes);
152
152
  ```
153
153
 
154
154
  <!-- /microi-progressive:chunk -->
155
- <!-- microi-progressive:chunk id=v8-export-import-010 sha256=372a60e928fe1b46d20ed8a7b8bd3736b2bc96465d6e6645c4ae849ca71ce987 -->
155
+ <!-- microi-progressive:chunk id=v8-export-import-010 sha256=0df463f76ba60100c087364b48dab1886d1315b093577ea9485471b34a7a3f6c -->
156
156
  ## 子表导入自动关联主表
157
157
 
158
158
  当单独导入 `TableChild` 子表时,Excel 经常没有主表 Id,只带项目编号、客户名称等业务字段。默认导入引擎支持通过子表控件配置批量反查主表,并自动补齐子表外键。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-export-import-011 sha256=a98c3b7c70f039fdd37128c3254acebd6fb527e78900f8fb38294e03baca083e -->
5
+ <!-- microi-progressive:chunk id=v8-export-import-011 sha256=13a671d4b3628e57bdac68f283af740c405faf3a004ded4dcfa13c638b341505 -->
6
6
  ## 安全 / 性能注意
7
7
 
8
8
  - ❌ 不要在循环中逐条 `AddFormData` 而不传 `V8.DbTrans`:每条独立事务,性能差且部分失败会留脏数据
@@ -11,6 +11,18 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
11
11
 
12
12
  公开入口覆盖 `V8.uploadFile`、多文件 `V8.uploadFiles` 与 MCP `microi_upload_file_base64`。多文件上传必须限制并发、逐文件返回结果;Base64 工具只接受明确文件名、大小和租户内目标范围,写后回读路径、大小与哈希。
13
13
 
14
+ ## MCP stdio 与完整包的传输边界
15
+
16
+ - 标准 MCP 服务的 stdio 使用固定 `128 MiB`(`134217728` 字节)未解析 JSON-RPC 缓冲,超过边界立即拒绝并关闭连接;不读取动态环境变量放大。SDK 调用端若仍使用
17
+ 默认 `10 MiB` 缓冲,大响应仍可能关闭客户端,必须核对调用端支持的真实边界。
18
+ - 该限制计算 UTF-8 wire 字节,包含完整 JSON 信封、Base64 和重复 `Data/Result` 正文。单个 Base64 字段的理论原始字节上限约 `96 MiB` 减信封,不能据此保证
19
+ 任意 `64 MiB` 包响应都通过,也不能把它当成 HDFS `256 MiB` 应用包能力的新上限。
20
+ - 已存在的正规完整包协议仍可使用 `PreparedPersistPackageByteBase64`;先按精确正文计算编码和整个请求/响应字节数,保留版本、CAS、哈希、HDFS 回读及快照 finalize。
21
+ 连接关闭属于结果未知,先回读同版本、同请求身份,不能换请求键盲重传。
22
+ - 超过 wire 能力的源码、运行资产优先使用已有目录/文件 stream 或分片协议及其
23
+ 小型指针/回执,不把私有源码、超大资产常态化塞入 JSON/Jint;支持更大正文的其它
24
+ 连接也须有明确边界。不能用增大stdio缓冲绕过能力鉴权、业务配额或包完整性检查。
25
+
14
26
  ## 表单字段的公有桶与私有桶(强制)
15
27
 
16
28
  - `Config.FileUpload.EnableRolePermission=true` 的字段强制私有上传,优先级高于字段和请求 `Limit`。
@@ -42,6 +54,7 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
42
54
  - 浏览器上传必须携带 `FormEngineKey + FieldId + SysMenuId`,编辑已有记录再带 `FormDataId`,TableChild 再带父子授权上下文。后端先用 FormEngine 校验动作权限,再从当前租户回读 `diy_field.Component/Config`,用权威 `Limit` 覆盖请求值,并把目录固定为 `ImgUpload→img`、`FileUpload→file`、`RichText→editor`。
43
55
  - 客户端 `Limit`、`Path`、字段 Id 和菜单 Id 都只是待验证线索。没有可验证字段上下文的普通交互式上传默认私有并限制到安全一级目录;不能为了恢复公有字段语义而重新信任裸 `Limit=false`。
44
56
  - 兼容旧移动端/定制页面时,在普通系统设置 `sys_config.HdfsUploadRules` 配置目录与角色规则,无需逐个改客户端。`Path` 使用区分大小写的租户内相对路径;`RoleIds` 是真实角色 Id 数组,或显式启用 `AllAuthenticated`;`IncludeSubdirectories` 和 `AllowPublic` 默认关闭。只有后端有效角色命中且显式允许公有,才尊重请求 `Limit=false`。规则不是秘密,不必放入后端私有设置,修改权限与服务端判定必须严格受控。
57
+ - 排查目录授权失败时先检查 multipart 是否同时提交 `Path` 和 `path`。客户端只应提交一个 `Path`;后端对相同值归一,对不同值拒绝,不能因重复字段误判而扩大 `HdfsUploadRules`。
45
58
  - 后端 v8.2.9+ 的配置 `Path` 支持 `*`(单层任意字符)、`**`(零到多层目录,须独占层级)、`?`、`[abc]`、`[a-z]`、`[!0-9]`/`[^0-9]`、`{a,b}` 候选及组合;优先 `files/{inspection,quality}/**` 这类最小业务前缀,不能为省事直接向全部用户配置 `** + AllowPublic`。只匹配请求目录,不匹配文件名或服务端追加的年月。实际上传路径不接受通配符;保留目录先于 glob 校验,不能用宽泛规则绕过。最多512字符/规则、4层花括号、32候选、4096令牌;有界动态规划和有界语法缓存不得缓存租户授权结果。先更新全部后端节点再配置新语法,精确旧规则仍兼容。
46
59
  - 目录规则只扩展无字段上下文上传,不绕过表/菜单/行权限、租户隔离、保留路径、文件类型、内容检测及配额;不能授予访问密钥会话、私有文件读取或应用发布权限。规则通过系统设置共享缓存读取,保存/删除后失效;应用包只发布字段和可空 DDL,禁止附带会覆盖租户规则的配置数据。验收覆盖授权/未授权角色、路径边界、公私桶、禁用用户、跨租户、规则撤销及缓存生效。
47
60
  - 老 `ImgUpload/FileUpload` 缺失 `Limit` 时兼容为公有;老 `RichText` 缺失上传配置时默认私有。微信待审图片与裁剪/压缩 `_origin` 原图始终私有,字段公有配置不能放宽这些特殊边界。客户端保存与预览必须以上传响应的实际 `Limit` 为准。
@@ -70,11 +83,13 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
70
83
  - 私有正文持久化 `/__microi_richtext_private__/...` 稳定对象标识,严禁保存对象存储签名 URL、`OpenPrivateFile` Ticket、DiyToken 或其它会过期的凭据。每次打开记录时携带 `FormEngineKey/FormDataId/FieldId/SysMenuId` 批量换取短效审计代理地址。
71
84
  - 私有文件后端授权必须重新校验当前租户、菜单、表、行和 RichText 字段,并确认所请求路径精确存在于 `img/video/source.src` 或 `a.href`;普通上传字段的对象/数组只认 `Path/FilePath/FilePathName`,不得递归把 `Name/Size/Metadata` 等任意标量当作路径。未经当前租户 FileServer 主机权威校验的绝对 HTTP(S) URL 不得等价为本地对象 Key;正文文字、`data-src/data-href`、脚本标签和前缀相似路径都必须失败关闭。
72
85
  - 外部匿名页面没有后台记录权限上下文,不能解析私有标识。公开文章应由设计者把 RichText 字段配置为 `Limit=false`,有该表单新增/编辑权限的用户即可按权威配置发布;不得通过延长私有 URL 有效期模拟公开资源。
86
+ - 若业务明确要求撤稿后旧媒体地址立即停止返回字节,使用私有对象和专用批准引用代理:只接受固定业务标识,权威校验当前租户、不可变批准版本与精确媒体引用,读取前后复核发布/许可/撤回状态,限制 MIME/体积并返回 `no-store`;不开放裸路径,不返回签名 URL 或重定向。普通文件短链接口不能代替这种业务撤权能力。
87
+ - 撤回授权与稳定请求键待办先在共享数据库事务提交,再执行 HDFS 删除。未知结果沿用原请求键探查重放,原上传请求摘要保持。删除源对象不等于删除 CDN 缓存;历史公开链接必须有官方失效任务和独立缓存字节读回证据,否则保留未确认状态,不把 `Offline`、隐藏前台或源站 `404` 记作完整撤回。
73
88
 
74
89
  官网客户端读取私有文件统一调用 `/apiengine/platform-private-file-url`,提交 `FilePathName` 或有界 `FilePathNames`,并按资源类型提供权威定位参数:普通表单字段使用 `FormEngineKey + FormDataId + FieldId + SysMenuId`;用户头像使用 `ResourceKind=UserAvatar + ResourceId=用户Id`;菜单/部门导入模板分别使用 `MenuImportTemplate`、`DeptImportTemplate` 与对应记录 Id。CAD 私有派生预览使用 `ResourceKind=FormFieldDerivedPreview`,除表单四元组外必须同时提交字段中保存的 `OriginalFilePathName` 和单个派生 `FilePathName`;后端只接受同目录同 basename 的 DWG→`_preview.dxf`、STEP/STP→`_preview.stl` 唯一映射,并在对象存在后签名。文件柜对象使用 `ResourceKind=FileManagerObject`,`ResourceId` 必须与单个 `FilePathName` 大小写精确相同,并提交能力探针返回的当前租户权威 `SysMenuId`;此类签名只允许平台超级管理员 DiyToken 会话,访问密钥和普通菜单用户一律拒绝。后端会从权威字段或对象存储重新读取并精确匹配路径;管理员也不能只传裸路径绕过对象引用,普通客户端禁止换取私有文件原始 Byte/Stream。旧 `/api/HDFS/GetPrivateFileUrl` 与 `/api/HDFS/MallFileUrl` 只保留令牌格式兼容并转发同一 Managed 接口,新代码不得继续引用。
75
90
 
76
91
  <!-- microi-progressive:begin -->
77
- <!-- microi-progressive:chunk id=v8-file-upload-000 sha256=841bb634227ea21cf97abcbee5dc6220042e73139170e6a6c304bfce83274e7a -->
92
+ <!-- microi-progressive:chunk id=v8-file-upload-000 sha256=6155d8bbc643dc0034c66190ab5b4173ef56eba1d99a994bfce7d12ec70f52ee -->
78
93
  ## 核心 API
79
94
 
80
95
  | API | 说明 |
@@ -82,12 +97,18 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
82
97
  | `V8.FilesByteBase64` | 接收上传时携带的文件字典 `{ FileName: base64 }` |
83
98
  | `V8.Method.Upload({...})` | 服务端上传文件到 HDFS(推荐) |
84
99
  | `V8.Method.GetPrivateFileUrl({FilePathName})` | 生成私有桶临时访问 URL |
100
+ | `V8.Method.CopyObject({FilePathName,Path,Limit})` | 当前租户同一桶内服务端复制,保留原对象;用于固定入口与版本快照 |
101
+ | `V8.Method.ObjectExist({FilePathName,Limit})` | 检查当前租户公有/私有桶对象是否存在 |
102
+ | `V8.Method.GetObjectSha256({FilePathName,Limit})` | 在服务端流式计算对象原始字节与旧版 Base64 文本的 SHA-256 和字节数;不把对象内容送入 V8 |
103
+ | `V8.Method.ListObjects({Path,Limit,Recursive,Marker,MaxKeys})` | 分页列举当前租户前缀,单页最多 1000 个 |
85
104
  | `/apiengine/platform-private-file-url` | 官网 PC/UniApp 按菜单、记录、字段和对象引用换取私有文件短链 |
86
105
  | `V8.Http.GetResponse({Url}).RawBytes` | 下载远程文件为字节数组 |
87
106
  | 接口返回 `{ FileName, ContentType, FileByteBase64 }` | 接口直接响应文件 |
88
107
 
108
+ 固定 CDN 应用回填优先使用服务端 `CopyObject`,公有桶复制编译资产、私有桶复制源码;`Limit` 在源与目标间保持一致,`Path` 和 `FilePathName` 均由后端收敛到当前租户。大对象用 `GetObjectSha256` 流式核对原对象和复制目标,公有体验路径仍须从 CDN 独立回读。历史版本目标已存在时须核对字节哈希,发现不同内容立即停止;固定根可在新版本验证后覆盖。`ListObjects` 必须分页并限制到单个应用前缀,不得把这些存储管理原子直接开放为匿名业务接口。
109
+
89
110
  <!-- /microi-progressive:chunk -->
90
- <!-- microi-progressive:chunk id=v8-file-upload-001 sha256=bacff382201c915334757946ee60d4a65db4e9663dd9e1f86bb68c1c16589321 -->
111
+ <!-- microi-progressive:chunk id=v8-file-upload-001 sha256=d535a333639a9005f5d20f25e36e2753a11835380713c1bb063ae618e6cea4af -->
91
112
  ## 第三方数据库附件迁移
92
113
 
93
114
  当第三方表只保存附件路径时,先用 `microi_inspect_external_database` / `microi_query_external_database` 或 `V8.Dbs.<DbKey>` 查询记录。`microi_import_external_attachment` 允许后端已确认的 `Level >= 9999` 当前用户直接提供 HTTP/HTTPS URL、API 节点可读的本机绝对路径或 UNC 路径。
@@ -104,7 +125,7 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
104
125
  可信后端 V8 可用 `V8.Http.GetResponse({ Url: url }).RawBytes` 下载,再用 `System.Convert.ToBase64String` 和 `V8.Method.Upload` 上传。该路径同样必须校验域名、大小、Content-Type、后缀和最终重定向目标。
105
126
 
106
127
  <!-- /microi-progressive:chunk -->
107
- <!-- microi-progressive:chunk id=v8-file-upload-002 sha256=d55c1a7fce715bf15224a74a2ae3006f38bab04bfe876ad88d9cc064fbe7cb9a -->
128
+ <!-- microi-progressive:chunk id=v8-file-upload-002 sha256=176e9f91705f20416e177d7dbdbd32fb8f81dff6ba0da1a45b533795d187f0e0 -->
108
129
  ## 接收前端上传的文件
109
130
 
110
131
  前端发起文件上传时,平台自动把文件以 base64 形式注入到 `V8.FilesByteBase64`:
@@ -220,7 +241,14 @@ Unity `Data`、WASM、Windows 安装包、视频模型等发布资产不得进
220
241
  - 验收至少覆盖:登录成功显示身份、退出后 Token 清空、历史连接一键重连、删除连接、密文落库、服务重启后仍可解密、目标平台缺少能力接口时的升级提示。
221
242
 
222
243
  <!-- /microi-progressive:chunk -->
223
- <!-- microi-progressive:chunk id=v8-file-upload-004 sha256=176fe6d254d2cff9d3dcb4b8620888243d3881704ca1432bbff023c9c553cb74 -->
244
+ <!-- microi-progressive:chunk id=v8-file-upload-004 sha256=8393c7b2b7ce36e563843f43f42e9a06a8cb69fc7b792930912353d846ee769f -->
245
+ ## 空目录标记的受控恢复
246
+
247
+ - 只需移除一个目录占位对象时,使用 `V8.HDFS.DeleteObject({FilePathName:'当前租户目录/', Limit:true/false, EmptyDirectoryOnly:true})` 并等待异步结果。必须是当前租户实际有效超级管理员的可信 V8/DiyToken 会话;不能使用参数中的 `_CurrentUser`、访问密钥或临时维护引擎代替授权。
248
+ - HTTP/MCP 必须使用专用 `/api/HDFS/DeleteEmptyDirectoryMarker` / `microi_delete_empty_directory_marker`,显式选择桶并保留末尾 `/`。旧后端缺路由、非标准结果或成功缺少 `DeletionMode=EmptyDirectoryMarkerOnly` / `VerifiedAbsent=true` 均停止,绝不回退普通递归删除。
249
+ - MCP 默认 dry run;执行 `confirmExecution` 精确等于 `filePathName`。旧 `/api/HDFS/DeleteObject` 不能作为缺少专用路由时的回退。路径拒绝租户根、跨租户、未知绝对前缀、URL、通配符与穿越。原始列表必须完整、大小明确为零,供应商只删精确标记 key,再完整回读;不允许前缀批量删除、忽略续页或把缺失 Size 默认成零。
250
+ - 这不是零字节对象 CAS,也不证明历史 NoPUT。同 key 版本替换没有跨供应商统一条件 DELETE;执行前必须隔离原请求并排除活跃写入。保留历史/当前证据的区别;未知结果先只读回查,不换请求键、不清其它对象、不自动再次 PUT。
251
+
224
252
  ## 下载远程文件并存到 HDFS
225
253
 
226
254
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-file-upload-005 sha256=9efd186d8af26854bbed4d675b31fff57202a0139094798d9a41c3e4769fd092 -->
5
+ <!-- microi-progressive:chunk id=v8-file-upload-005 sha256=45f848d78235d8a315663fc77a2d9565b1a22791917591704040712fb56d1bee -->
6
6
  ## 公有桶 vs 私有桶
7
7
 
8
8
  ### 应用商城 ZIP
@@ -153,7 +153,7 @@ var url = V8.Method.GetPrivateFileUrl({
153
153
  - `Limit:false` 的公有文件允许通过 CDN/公有桶直接访问,不要求记录用户行为日志,也不要为了审计强制改走私有代理。
154
154
 
155
155
  <!-- /microi-progressive:chunk -->
156
- <!-- microi-progressive:chunk id=v8-file-upload-006 sha256=8d4fedab2418c7df7973b78d4b9d6c5fa77907929d401800689cd1b5b468f32f -->
156
+ <!-- microi-progressive:chunk id=v8-file-upload-006 sha256=2dcf2dd7a571cc4757e9015cf213191be2dc3f041d91b0de51ed8ee00b0b86e7 -->
157
157
  ## 接口直接响应文件(下载/导出)
158
158
 
159
159
  接口引擎需要在配置中开启【**响应文件**】选项,然后返回特殊结构:
@@ -204,7 +204,7 @@ return {
204
204
  注意:如果远程系统返回的是错误页、登录页、业务容器格式(例如金蝶 PLM 电子仓 `KD_C_PLM`、或其它文件头不是 `%PDF-` 的伪 PDF),不要在 V8 里伪装成 PDF。后端会返回 JSON 错误,包含 `ExpectedFirstAscii`、`ActualFirstAscii`、`ActualFirstHex`、`Length`,按这些信息排查上游下载接口。
205
205
 
206
206
  <!-- /microi-progressive:chunk -->
207
- <!-- microi-progressive:chunk id=v8-file-upload-007 sha256=59ebcaa605d26def44cd027c0975a01fffee8670a890b4ed18b4138527be8a1b -->
207
+ <!-- microi-progressive:chunk id=v8-file-upload-007 sha256=710eb73f616aff2ebce65a82568abe8208b701c1211a7e95ce500b1ce20b363f -->
208
208
  ## 通过 URL 列表批量下载并入库
209
209
 
210
210
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-file-upload-008 sha256=b7b809862a9d82f0270ae99486acb5fe23185b9d5efad073ae39b282724e2e32 -->
5
+ <!-- microi-progressive:chunk id=v8-file-upload-008 sha256=5dacdb706cc408a76a576da55c497756cd974819863162c6a50ad36504738051 -->
6
6
  ## Office 文件在线编辑版本号规则
7
7
 
8
8
  ### 文件柜 Office 版本
@@ -49,7 +49,7 @@ OnlyOffice 前端组件 npm 包不能替代 Docs 文档服务。`DocsAPI.DocEdit
49
49
  ```
50
50
 
51
51
  <!-- /microi-progressive:chunk -->
52
- <!-- microi-progressive:chunk id=v8-file-upload-009 sha256=1cc3ff1b6a5c756d957819f198c13ea181143db484527d1931aefc8e0d52993c -->
52
+ <!-- microi-progressive:chunk id=v8-file-upload-009 sha256=fa3e980be41d5e1030b516f91ddaf5505917073936f08f919f34cad979b9b054 -->
53
53
  ## ImgUpload / FileUpload 字段值兼容规则
54
54
 
55
55
  `ImgUpload` 不能假设只是一种值结构。PC 表单、移动端、旧数据、单图/多图、公开/私有桶会混合出现以下格式:
@@ -132,7 +132,7 @@ function publicUploadUrl(path) {
132
132
  跨端保存时保留上传响应的实际 `Limit`(兼容布尔值、`1/0` 与对应字符串),只删除临时签名地址和本地预览状态。历史对象缺少该标记时按字段配置取址;已有私有标记优先于公有字段缺省值。单图字段兼容历史单元素数组,不应在字段值预处理阶段把数组直接清空。
133
133
 
134
134
  <!-- /microi-progressive:chunk -->
135
- <!-- microi-progressive:chunk id=v8-file-upload-010 sha256=229294a07a8db953219c35292db5558430addb576505695b9ce88a275eb46232 -->
135
+ <!-- microi-progressive:chunk id=v8-file-upload-010 sha256=f34d476435c3a8321df017b481771d757f580c8d75f7648fdd54ee1c624d116c -->
136
136
  ## 安全注意
137
137
 
138
138
  - ❌ 不要让前端任意指定 `Path`(路径穿越风险),只允许后端固定路径
@@ -14,7 +14,7 @@ description: Microi 前端 V8 事件与客户端能力指南。用于编写浏
14
14
  > 本文重点是 **字段事件、按钮事件、列表事件、模板引擎、其它前端钩子**。
15
15
 
16
16
  <!-- microi-progressive:begin -->
17
- <!-- microi-progressive:chunk id=v8-frontend-events-000 sha256=70e28f65232cb781fcf3dadd2e1896bd1534b15876545170e81667aa6322724d -->
17
+ <!-- microi-progressive:chunk id=v8-frontend-events-000 sha256=69ad0ebf0c8aca6edcbc0bbfe7e280986525bf28f68da8cb33c8efbc4509f7da -->
18
18
  ## 能力路由
19
19
 
20
20
  - 查询前端 V8 全部上下文、导航、表单、列表、网络、引擎与工具入口时,读取 `../v8-utilities/references/client-api-index.md`。
@@ -25,7 +25,7 @@ description: Microi 前端 V8 事件与客户端能力指南。用于编写浏
25
25
  - 登录后的敏感操作使用 `V8.Identity.Verify` 完成 Passkey/严格人脸交互;前端只取得一次性 Ticket,后端接口引擎必须重算 `ActionHash` 并原子消费,不能把前端成功当作授权。
26
26
 
27
27
  <!-- /microi-progressive:chunk -->
28
- <!-- microi-progressive:chunk id=v8-frontend-events-001 sha256=a9f8e1aed64db4b57ff762eb557c0d764b5f703a722dc080d273c4111afe234f -->
28
+ <!-- microi-progressive:chunk id=v8-frontend-events-001 sha256=eaab87d01b0fd2b6964326ee11edd7b793899c679930c575a0a2b309d36a367a -->
29
29
  ## 字段事件(在【字段属性】中配置)
30
30
 
31
31
  ### FieldValueChange — 值变更事件(最常用)
@@ -111,7 +111,7 @@ V8.OpenAnyTable({
111
111
  `ReadOnlyButton` 的产品文案是【禁用插槽按钮】:只控制按钮是否可点击,不等同于字段只读,应保留用于权限和状态控制。
112
112
 
113
113
  <!-- /microi-progressive:chunk -->
114
- <!-- microi-progressive:chunk id=v8-frontend-events-002 sha256=332a6ed2c90fe8ff23f04d7fd1c3a24df263b2692f2c292337a468a0423b409f -->
114
+ <!-- microi-progressive:chunk id=v8-frontend-events-002 sha256=faf64dbf6ded2a086c347bea31edecb7d6fc8b765114290d17998b7370d17372 -->
115
115
  ## 按钮事件
116
116
 
117
117
  ### V8BtnRun — 按钮点击执行(菜单按钮、表单按钮)
@@ -151,19 +151,19 @@ return V8.Form.Status === '待审核' && V8.CurrentUser.RoleName.indexOf('审批
151
151
  至少覆盖“主表详情 → 定制子表 → 子记录详情”链路中的含 `await` 显隐代码。
152
152
 
153
153
  <!-- /microi-progressive:chunk -->
154
- <!-- microi-progressive:chunk id=v8-frontend-events-003 sha256=68aab95ab02bfca93b69eaea1c188650cb7ef13f8566bee81a63c660a4437512 -->
154
+ <!-- microi-progressive:chunk id=v8-frontend-events-003 sha256=6c44ac4b3bc74f128b5efb8b7b51851ca28bdfc3e8f8b52a3d50f9fc043d4977 -->
155
155
  ## 模板引擎事件
156
156
 
157
157
  `TableTemplateEngine` / `FormTemplateEngine` — 见 `v8-template-engine/SKILL.md`。
158
158
 
159
159
  <!-- /microi-progressive:chunk -->
160
- <!-- microi-progressive:chunk id=v8-frontend-events-004 sha256=2db34699ad5433a8c8b194c9ce9909ed4d420d257dd8c6532238215402499c82 -->
160
+ <!-- microi-progressive:chunk id=v8-frontend-events-004 sha256=4071ce5e92d2352e455e4dbe5310cc3d8f8c349721ad53f734397d30dc0b2c4e -->
161
161
  ## 工作流事件(前端)
162
162
 
163
163
  `WFNodeEnd` — 流程节点结束后前端通知。详见 `v8-workflow/SKILL.md`。
164
164
 
165
165
  <!-- /microi-progressive:chunk -->
166
- <!-- microi-progressive:chunk id=v8-frontend-events-005 sha256=e7f73123dfc00720f60c49705e91854b6f18cb0506a115a6078481dc37aed41c -->
166
+ <!-- microi-progressive:chunk id=v8-frontend-events-005 sha256=717095c6c96b1895cf607d787854a6f99c9ac90cc9282bdc95b5f9b4cfa4095e -->
167
167
  ## 设计模式保护(CRITICAL)
168
168
 
169
169
  ```javascript
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-frontend-events-006 sha256=7ef892121df52256c6d8c4e9da546c3f60d365f2a3cab0cb315da0b8d1fe68cd -->
5
+ <!-- microi-progressive:chunk id=v8-frontend-events-006 sha256=b5dc7a887237bb719a26a0d56974d3fc99cb051b88223351742204eb7612b2ef -->
6
6
  ## 列表事件
7
7
 
8
8
  ### TableRowClick — 行点击
@@ -40,7 +40,7 @@ V8.RefreshTable({ _PageIndex: 1 });
40
40
  ```
41
41
 
42
42
  <!-- /microi-progressive:chunk -->
43
- <!-- microi-progressive:chunk id=v8-frontend-events-007 sha256=3f634f1942bdd72c87a68a2a6c4883eb2bf1e95b64bc9dc895646484f9d77a9d -->
43
+ <!-- microi-progressive:chunk id=v8-frontend-events-007 sha256=72ebf0b52fe19865043c3315ebaab9009e34db5abaf988c81965fce4fa8ae879 -->
44
44
  ## 常用前端 API
45
45
 
46
46
  | API | 说明 |
@@ -150,7 +150,7 @@ V8.OpenAppDialog({
150
150
  `V8.ConfirmTips` 当前是 callback API,且内容使用 HTML 模式渲染。只传固定文案或经过 HTML 转义的简单展示;严禁直接拼接用户输入、接口消息、数据库富文本和不可信 URL。三个以上字段、上传、表格、Tab、步骤条、代码编辑器或需要复用的页面必须使用 `V8.OpenAppDialog`。
151
151
 
152
152
  <!-- /microi-progressive:chunk -->
153
- <!-- microi-progressive:chunk id=v8-frontend-events-008 sha256=eebeb0230087c0deb368baac02bd39bb4b5aa054ed19d9aa43be9447f8ef1d6d -->
153
+ <!-- microi-progressive:chunk id=v8-frontend-events-008 sha256=6811b564f0992b3251578d40ad30ceda68c3c4d2938f413d76e276de4e1a65db -->
154
154
  ## 前端 FormEngine 菜单上下文与兼容授权
155
155
 
156
156
  前端 V8 不需要为每个历史项目手工补 `_SysMenuId`。新版 PC 表单引擎通过作用域 FormEngine facade 透明处理菜单上下文:
@@ -182,7 +182,7 @@ var products = await V8.FormEngine.GetTableData('Product', {
182
182
  前端没有 `GetTableDataCount`、`GetTableDataTree`(前端名称是 `GetTableTree`)、`AddTableData`、`UptTableData`、`DelTableData`、`AddField`。Import/Export 是独立端点与专项菜单权限,也不是 facade 方法。
183
183
 
184
184
  <!-- /microi-progressive:chunk -->
185
- <!-- microi-progressive:chunk id=v8-frontend-events-009 sha256=5e83f07a0fbcebf1eb02f3af5aa58936b3d1c3d19b0a6a0b1a0f14c66fcd6177 -->
185
+ <!-- microi-progressive:chunk id=v8-frontend-events-009 sha256=d5f628b4cdc5b4cc116f60af04742242f5c0411784593338ea13c89e1e90afe5 -->
186
186
  ## 异步写法(async/await vs 回调)
187
187
 
188
188
  ```javascript
@@ -197,7 +197,7 @@ V8.FormEngine.GetTableData('Product', { _PageSize: 10 }, function(r) {
197
197
  ```
198
198
 
199
199
  <!-- /microi-progressive:chunk -->
200
- <!-- microi-progressive:chunk id=v8-frontend-events-010 sha256=3ca077a857ffc9f58c7290e26c7e106c0e882897b1b9b669c66b4fe7615c3821 -->
200
+ <!-- microi-progressive:chunk id=v8-frontend-events-010 sha256=efea9a8791d11e8d51aa2869c92583a451a5f20d93961faf763945458bca60de -->
201
201
  ## 死循环陷阱
202
202
 
203
203
  ❌ **禁止** 在 `SubmitFormV8.js` 里调用 `V8.FormSubmit()` —— 会无限递归
@@ -14,7 +14,7 @@ description: Microi V8 HTTP 集成指南。用于通过 V8.Http.Get/Post/Patch
14
14
  文档维护时,前端用法更新现有 `microi.doc/docs/doc/v8-engine/v8-client.md`,后端用法更新现有 `microi.doc/docs/doc/v8-engine/v8-server.md`;不要新建重复的 V8.Http 文档页面或路由。只维护中文 `docs/doc/`,英文 `docs/en/` 由官网统一翻译生成。
15
15
 
16
16
  <!-- microi-progressive:begin -->
17
- <!-- microi-progressive:chunk id=v8-http-integration-000 sha256=0a2600eb1fc1308232c8b23aa9e6859a4927df69b20f043537df305628d46c89 -->
17
+ <!-- microi-progressive:chunk id=v8-http-integration-000 sha256=87c42439055059080e765dc466c015267021eb78a7f7c67efd49c00a30fd17af -->
18
18
  ## V8.Http API
19
19
 
20
20
  | 方法 | 说明 | 返回值 |
@@ -71,7 +71,7 @@ if (resp.StatusCode < 200 || resp.StatusCode >= 300) {
71
71
  `GetResponse/PostResponse/PatchResponse` 返回 `Content`、`Headers`、`RawBytes`、`StatusCode`、`ErrorMessage`。后端 `RawBytes` 是 `.NET byte[]`,前端是 `Uint8Array`。
72
72
 
73
73
  <!-- /microi-progressive:chunk -->
74
- <!-- microi-progressive:chunk id=v8-http-integration-001 sha256=3ea3068fc215afae5c0f36ac54f277542a218e7a2aa2a953be8403e77b31f947 -->
74
+ <!-- microi-progressive:chunk id=v8-http-integration-001 sha256=4cbbdd385e24d19413b7534665333c07f2516067e9f34aa40e6adabe9e0506f4 -->
75
75
  ## V8.AI 与底层 HTTP
76
76
 
77
77
  - 前端 V8 的平台 AI 普通调用优先 `await V8.AI.Chat(...)`。它自动使用当前 ApiBase 和平台登录头、接收响应 Token 轮换,并清除调用参数中的租户、身份、Endpoint、ApiKey 和认证头覆盖;只有确认问题适合进入 URL 日志时才用 `V8.AI.ChatGet(...)`。
@@ -94,7 +94,7 @@ else V8.Result = result.Data;
94
94
  完整授权矩阵、SSE、后端安全边界与 MCP 示例维护在官网现有 `system-engine/ai-engine.md`,不要新建重复文档。
95
95
 
96
96
  <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=v8-http-integration-002 sha256=bf9d4f5162ff81798521f69a82e41db50c95f4a0b3d1338d35983c1b161d6192 -->
97
+ <!-- microi-progressive:chunk id=v8-http-integration-002 sha256=9ac13cff3cf1bef6fb28a3b387aea0353c3e81faf657245cdf30a57af9b8dfa2 -->
98
98
  ## POST 请求(对象参数格式)
99
99
 
100
100
  > V8 接口引擎中必须使用对象参数格式。尤其禁止 `V8.Http.Get(url)`:当前 .NET 同名重载包含 `Task<string> Get(string)`,Jint 可能把字符串调用解析为异步重载,脚本最终拿到 `[object Promise]`。GET 必须写成 `V8.Http.Get({ Url: url })`;第三方登录、微信 `jscode2session`、AccessToken 等链路保存后必须用无效 code 烟测,确认返回的是第三方明确错误而不是 Promise。
@@ -114,7 +114,7 @@ var data = JSON.parse(result);
114
114
  ```
115
115
 
116
116
  <!-- /microi-progressive:chunk -->
117
- <!-- microi-progressive:chunk id=v8-http-integration-003 sha256=4c7e61dfc8a2539f65ea18d068c13d0168f84d0227ea93f17c8073a2a1cc8643 -->
117
+ <!-- microi-progressive:chunk id=v8-http-integration-003 sha256=24ce5ca40f3f55b8f832db9463cc8f683c3a408e0f942490ed29db19c7416cab -->
118
118
  ## PATCH 请求
119
119
 
120
120
  PATCH 与 POST 的参数完全对称,只需把请求体参数改为 `PatchParam` / `PatchParamString`: