@microi.net/cli 5.9.1 → 5.9.3

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 (200) 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 +5 -5
  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/microi-codex-broker.js +466 -450
  14. package/scripts/microi-codex-router.js +634 -618
  15. package/scripts/microi-skills.meta.json +386 -377
  16. package/skills/.microi-skills-version.json +2 -2
  17. package/skills/.progressive-disclosure-manifest.json +148 -123
  18. package/skills/README.md +287 -287
  19. package/skills/ai-engine/SKILL.md +269 -269
  20. package/skills/ai-engine/agents/openai.yaml +4 -4
  21. package/skills/ai-engine/references/ai-employees.md +48 -48
  22. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  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 +525 -525
  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 +93 -93
  29. package/skills/datasource-engine/agents/openai.yaml +4 -4
  30. package/skills/dos-orm/SKILL.md +101 -95
  31. package/skills/dos-orm/references/api-reference.md +229 -229
  32. package/skills/email-engine/SKILL.md +81 -81
  33. package/skills/email-engine/references/v8-email.md +34 -34
  34. package/skills/job-engine/SKILL.md +176 -176
  35. package/skills/job-engine/agents/openai.yaml +4 -4
  36. package/skills/message-notification/SKILL.md +156 -156
  37. package/skills/message-notification/agents/openai.yaml +5 -5
  38. package/skills/message-notification/references/contracts.md +102 -102
  39. package/skills/microi/SKILL.md +14 -14
  40. package/skills/microi-ai-app-auth.js +652 -652
  41. package/skills/microi-ai-application/SKILL.md +115 -115
  42. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  43. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  44. package/skills/microi-client-frontend/SKILL.md +242 -242
  45. 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
  46. 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
  47. 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
  48. package/skills/microi-codex-installer/SKILL.md +231 -231
  49. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  50. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  51. package/skills/microi-db-schema/SKILL.md +175 -175
  52. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  53. package/skills/microi-db-schema/references/core-tables.md +695 -695
  54. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  55. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  56. package/skills/microi-db-schema/references/schema.md +646 -646
  57. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  58. package/skills/microi-deployment/SKILL.md +239 -220
  59. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  60. package/skills/microi-docs-coverage/SKILL.md +133 -133
  61. package/skills/microi-docs-coverage/references/capability-map.md +90 -90
  62. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  63. package/skills/microi-form-engine/SKILL.md +338 -333
  64. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  65. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  66. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  67. 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
  68. package/skills/microi-left-right-layout/SKILL.md +141 -141
  69. package/skills/microi-microservice/SKILL.md +330 -328
  70. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  71. package/skills/microi-mobile-app-quality/SKILL.md +203 -197
  72. package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +75 -0
  73. 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 +227 -224
  74. 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 +129 -128
  75. package/skills/microi-solution-quotation/SKILL.md +78 -78
  76. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  77. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  78. package/skills/microi-sso/SKILL.md +95 -91
  79. package/skills/microi-sso/references/acceptance.md +51 -49
  80. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  81. package/skills/microi-sso/references/inbound.md +53 -53
  82. package/skills/microi-sso/references/outbound.md +43 -39
  83. package/skills/microi-ui/SKILL.md +192 -192
  84. 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
  85. package/skills/microi-uniapp-frontend/SKILL.md +206 -199
  86. 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 +261 -261
  87. 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
  88. package/skills/microi.v8.js +1921 -1921
  89. package/skills/module-engine/SKILL.md +255 -255
  90. package/skills/module-engine/references/module-config.md +204 -204
  91. package/skills/ocr-engine/SKILL.md +113 -113
  92. package/skills/ocr-engine/agents/openai.yaml +4 -4
  93. package/skills/page-engine/SKILL.md +206 -206
  94. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  95. 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
  96. 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
  97. package/skills/performance-testing/SKILL.md +227 -221
  98. package/skills/playwright-e2e/SKILL.md +197 -196
  99. 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
  100. 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
  101. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  102. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  103. package/skills/print-engine/SKILL.md +259 -259
  104. package/skills/production-readonly-audit/SKILL.md +41 -41
  105. package/skills/report-engine/SKILL.md +71 -71
  106. package/skills/report-engine/agents/openai.yaml +4 -4
  107. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  108. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  109. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  110. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  111. package/skills/search-engine/SKILL.md +75 -75
  112. package/skills/search-engine/agents/openai.yaml +4 -4
  113. package/skills/spider-engine/SKILL.md +190 -190
  114. package/skills/system-observability/SKILL.md +259 -246
  115. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  116. package/skills/translate-engine/SKILL.md +140 -140
  117. package/skills/translate-engine/agents/openai.yaml +4 -4
  118. package/skills/ui-design/SKILL.md +223 -223
  119. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  120. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  121. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  122. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  123. package/skills/ui-design/references/design-pattern-library.md +184 -184
  124. package/skills/ui-design/references/mci-design-contract.md +163 -163
  125. package/skills/ui-design/references/motion-and-media.md +78 -78
  126. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  127. 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
  128. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  129. 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
  130. 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
  131. 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
  132. 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
  133. 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
  134. 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
  135. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  136. package/skills/unity-integration/SKILL.md +178 -171
  137. package/skills/unity-integration/agents/openai.yaml +4 -4
  138. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  139. package/skills/unity-integration/references/sdk-api.md +82 -82
  140. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  141. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  142. package/skills/v8-api-config/SKILL.md +388 -388
  143. package/skills/v8-cache-pattern/SKILL.md +312 -312
  144. package/skills/v8-crud-api/SKILL.md +179 -178
  145. 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
  146. 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
  147. package/skills/v8-debugging/SKILL.md +284 -284
  148. package/skills/v8-explorer-tree/SKILL.md +228 -228
  149. package/skills/v8-export-import/SKILL.md +219 -219
  150. 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
  151. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  152. 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
  153. package/skills/v8-file-upload/SKILL.md +255 -284
  154. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -0
  155. 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
  156. 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
  157. package/skills/v8-file-upload/references/progressive-03-/347/251/272/347/233/256/345/275/225/346/240/207/350/256/260/344/270/216/350/277/234/347/250/213/344/270/213/350/275/275.md +36 -0
  158. package/skills/v8-formengine-http/SKILL.md +238 -238
  159. package/skills/v8-frontend-events/SKILL.md +180 -180
  160. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  161. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  162. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  163. package/skills/v8-http-integration/SKILL.md +182 -182
  164. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  165. 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
  166. package/skills/v8-image-processing/SKILL.md +190 -190
  167. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  168. package/skills/v8-image-processing/references/api-reference.md +623 -623
  169. package/skills/v8-menu-buttons/SKILL.md +186 -186
  170. 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
  171. 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
  172. 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
  173. package/skills/v8-mongodb/SKILL.md +200 -200
  174. package/skills/v8-mq-mqtt/SKILL.md +178 -176
  175. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -342
  176. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  177. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  178. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  179. package/skills/v8-security/SKILL.md +227 -210
  180. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  181. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  182. package/skills/v8-sql-query/SKILL.md +302 -302
  183. package/skills/v8-table-event/SKILL.md +176 -176
  184. 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
  185. 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
  186. package/skills/v8-tcp-integration/SKILL.md +158 -147
  187. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  188. package/skills/v8-template-engine/SKILL.md +167 -167
  189. package/skills/v8-utilities/SKILL.md +104 -104
  190. package/skills/v8-utilities/references/client-api-index.md +143 -143
  191. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  192. package/skills/v8-utilities/references/server-api-index.md +188 -188
  193. package/skills/v8-workflow/SKILL.md +252 -252
  194. 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
  195. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  196. package/skills/vision-engine/SKILL.md +160 -160
  197. package/skills/vision-engine/agents/openai.yaml +4 -4
  198. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  199. package/skills/workspace-conventions/SKILL.md +13 -13
  200. 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 +2 -2
@@ -1,147 +1,158 @@
1
- ---
2
- name: v8-tcp-integration
3
- description: Microi 后端 V8 TCP 原始字节集成规范。用于通过 V8.Tcp.Send/SendAsync/SendAndReceive/SendAndReceiveAsync 连接网络小票机、串口服务器、PLC 或其它 TCP 设备,处理 Byte/Base64/Hex/Text 载荷、GBK/GB18030、超时、响应、幂等与出站安全。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi V8 TCP 原始字节集成
9
-
10
- 使用后端 `V8.Tcp` 完成一次性 TCP 连接、原始字节写入和可选的有界响应读取。典型场景是 RAW/JetDirect 9100 网络小票机、串口服务器和 PLC;具体协议帧、校验码与打印业务仍由接口引擎编排。
11
-
12
- 文档维护时,只在 `microi.doc/docs/doc/v8-engine/v8-server.md` 原位更新后端 API;不要新建重复页面,也不要手工维护英文文档。改变公共契约时同步后端源码/测试、Microi.Client Monaco 定义、Microi.Agent 类型与生成知识、AI Skill 镜像。
13
-
14
- ## 先判断是否适用
15
-
16
- | 需求 | 选择 |
17
- |---|---|
18
- | 后端向设备 TCP 端口发送原始字节 | `V8.Tcp` |
19
- | HTTP/HTTPS API | `V8.Http`,不要用 TCP 重写 HTTP |
20
- | RabbitMQ/MQTT | `V8.MQ` 或 MQTT 引擎 |
21
- | 浏览器/5+App 蓝牙或 SPP 打印 | 前端 `V8.Print`,读取 `v8-frontend-events/references/bluetooth-print.md` |
22
- | 长连接、TCP 服务端监听、TLS、自定义连接池 | 当前 `V8.Tcp` 不提供;设计独立网关/Worker |
23
-
24
- 平台已经提供可复用原子能力后,打印模板、设备选择、订单状态、幂等和审计优先写在接口引擎/表单事件;不要为单个打印业务再写 C# Controller。
25
-
26
- ## API 契约
27
-
28
- | 方法 | 行为 |
29
- |---|---|
30
- | `V8.Tcp.Send({...})` | 连接、发送、关闭,返回 `DosResult` |
31
- | `await V8.Tcp.SendAsync({...})` | 当前请求内异步发送 |
32
- | `V8.Tcp.SendAndReceive({...})` | 发送后读取响应,再关闭 |
33
- | `await V8.Tcp.SendAndReceiveAsync({...})` | 当前请求内异步发送并读取响应 |
34
-
35
- 必填目标参数:
36
-
37
- - `Host`:主机名或 IP;只允许主机,不传 `tcp://` URL。
38
- - `Port`:1-65535。
39
-
40
- 发送内容必须且只能选择一组:
41
-
42
- - `Bytes`(别名 `RawBytes`、`ByteArray`):每项为 0-255 的整数。
43
- - `ByteBase64`(别名 `BytesBase64`、`Base64`)。
44
- - `Hex`:允许空格、`0x`、`-`、`:`、逗号和下划线分隔。
45
- - `Text`:按 `Encoding` 编码。默认 `utf-8`,还支持 `ascii`、`gb18030`、`gbk/gb2312`、UTF-16/UTF-32 大小端。
46
-
47
- 边界参数:
48
-
49
- | 参数 | 默认 | 范围 |
50
- |---|---:|---:|
51
- | `ConnectTimeout` | 10 秒 | 1-120 秒 |
52
- | `SendTimeout` | 10 秒 | 1-120 秒 |
53
- | `ReceiveTimeout` | 3 秒 | 1-120 秒 |
54
- | `MaxReceiveBytes` | 65536 | 1-1048576 |
55
- | `NoDelay` | `true` | 布尔值 |
56
-
57
- 单次发送最多 4 MiB。`Send` 成功数据为 `{BytesSent, RemoteEndPoint}`。收发方法另有 `BytesReceived`、`RawBytes`、`ByteBase64`、`Hex`、`ReceiveEndReason`、`Truncated`;`ReceiveEndReason` 为 `RemoteClosed`、`Timeout` 或 `MaxReceiveBytes`。
58
-
59
- ## 实现流程
60
-
61
- ### 1. 固定并授权设备目标
62
-
63
- 从 SaaS 可信配置或受行权限保护的设备表读取 `Host`、`Port`,按当前用户/门店/租户决定可用设备,再与精确白名单比较。禁止这样写:
64
-
65
- ```javascript
66
- // 错误:匿名或普通调用者可扫描后端可达内网。
67
- return V8.Tcp.Send({
68
- Host: V8.Param.Host,
69
- Port: V8.Param.Port,
70
- Hex: V8.Param.Hex
71
- });
72
- ```
73
-
74
- ### 2. 形成一个完整帧
75
-
76
- ESC/POS、Modbus TCP 或设备私有协议的命令、正文和校验码应先合成一个完整字节载荷。不要为了拼帧而打开多次连接;包含中文和控制命令时,优先在可信后端/上游把完整帧编码为 `Bytes`、`ByteBase64` 或 `Hex`。
77
-
78
- ```javascript
79
- var result = V8.Tcp.Send({
80
- Host: '192.168.1.88', // 示例;生产从可信配置读取
81
- Port: 9100,
82
- Bytes: [
83
- 27, 64, // ESC @ 初始化
84
- 77, 105, 99, 114, 111, 105, 10,
85
- 10, 10,
86
- 29, 86, 0 // GS V 0 切纸
87
- ],
88
- ConnectTimeout: 5,
89
- SendTimeout: 5
90
- });
91
- if (result.Code !== 1) return result;
92
- ```
93
-
94
- 只有纯文本时可使用打印机常见编码:
95
-
96
- ```javascript
97
- var result = await V8.Tcp.SendAsync({
98
- Host: '192.168.1.88',
99
- Port: 9100,
100
- Text: '吾码小票\n合计:12.00\n\n',
101
- Encoding: 'gb18030'
102
- });
103
- if (result.Code !== 1) return result;
104
- ```
105
-
106
- ### 3. 需要协议响应时显式收取
107
-
108
- ```javascript
109
- var result = V8.Tcp.SendAndReceive({
110
- Host: '192.168.1.20',
111
- Port: 4001,
112
- Hex: '01 03 00 00 00 02 C4 0B',
113
- ReceiveTimeout: 3,
114
- MaxReceiveBytes: 4096
115
- });
116
- if (result.Code !== 1) return result;
117
-
118
- var bytes = result.Data.RawBytes;
119
- var hex = result.Data.Hex;
120
- ```
121
-
122
- 接收超时是整段接收的总时间。已收到部分数据后超时会返回成功和已有数据,并标记 `ReceiveEndReason='Timeout'`;未收到任何字节则失败。协议必须知道响应长度或结束条件,不能把超时默认当作完整帧。
123
-
124
- ### 4. 分开判断写入、设备执行和实物结果
125
-
126
- - `Code=1` 只表示字节已写入 TCP 连接。
127
- - 设备协议回执可证明设备接受/处理到哪一步,但仍不一定证明机械动作完成。
128
- - “小票已打印”需要打印机状态、设备回执或实物/硬件验收证据。
129
-
130
- 打印不是天然幂等。不确定失败时自动重试可能重复出纸;需要可靠打印时使用业务打印单号、设备回执、状态机以及 Job/MQ/outbox,且重试策略必须识别“尚未发送”和“结果未知”。
131
-
132
- ## 安全与运行约束
133
-
134
- 1. TCP 不经过 `V8.Http` 的 SSRF 防护。容器网络策略/防火墙只放行目标设备网段和端口;匿名接口不得暴露任意目标。
135
- 2. 不把票据正文、设备口令、原始帧和响应秘密写入日志;日志只记录脱敏设备标识、业务单号、字节数、耗时和错误分类。
136
- 3. `SendAsync` 只是在当前请求内等待 I/O,不能替代后台任务。不要遗留未等待 Promise、`setTimeout` 或 `Task.Run`。
137
- 4. 每次调用都会创建并关闭连接;不能假设设备会保持会话状态。
138
- 5. Docker 内的 `localhost` 指容器自身。验收前从实际后端容器验证到设备 IP/端口的路由和出站策略。
139
- 6. 载荷、超时和响应均有硬上限;不要通过拆成无限循环规避限制。
140
-
141
- ## 修改公共能力时的同步门禁
142
-
143
- - 源码:`Microi.Server/Microi.V8Engine/Extend/Tcp/V8Tcp.cs` 与 `V8Extend.cs`。
144
- - 测试:真实 Jint 注入、Byte/Base64/Hex/Text、回环收发、超时/上限/非法参数。
145
- - 编辑器:`Microi.Client/.../v8-api-server-definitions.js` 与 `Microi.Agent/src/editor/typingsManager.ts`。
146
- - 文档与知识:官网中文后端 V8 页面、`microi.skills/README.md`、`v8-utilities` 索引、`Microi.AI/Resource` 镜像和向量资源列表。
147
- - 验收:目标测试、后端构建、精确重启与健康检查、独立 TCP 回环;真实打印机出纸必须单独报告,不能用回环测试替代。
1
+ ---
2
+ name: v8-tcp-integration
3
+ description: Microi 后端 V8 TCP 原始字节集成规范。用于通过 V8.Tcp.Send/SendAsync/SendAndReceive/SendAndReceiveAsync 连接网络小票机、串口服务器、PLC 或其它 TCP 设备,处理 Byte/Base64/Hex/Text 载荷、GBK/GB18030、超时、响应、幂等与出站安全。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi V8 TCP 原始字节集成
9
+
10
+ 使用后端 `V8.Tcp` 完成一次性 TCP 连接、原始字节写入和可选的有界响应读取。典型场景是 RAW/JetDirect 9100 网络小票机、串口服务器和 PLC;具体协议帧、校验码与打印业务仍由接口引擎编排。
11
+
12
+ 文档维护时,只在 `microi.doc/docs/doc/v8-engine/v8-server.md` 原位更新后端 API;不要新建重复页面,也不要手工维护英文文档。改变公共契约时同步后端源码/测试、Microi.Client Monaco 定义、Microi.Agent 类型与生成知识、AI Skill 镜像。
13
+
14
+ ## 先判断是否适用
15
+
16
+ | 需求 | 选择 |
17
+ |---|---|
18
+ | 后端向设备 TCP 端口发送原始字节 | `V8.Tcp` |
19
+ | HTTP/HTTPS API | `V8.Http`,不要用 TCP 重写 HTTP |
20
+ | RabbitMQ/MQTT | `V8.MQ` 或 MQTT 引擎 |
21
+ | 浏览器/5+App 蓝牙或 SPP 打印 | 前端 `V8.Print`,读取 `v8-frontend-events/references/bluetooth-print.md` |
22
+ | 设备原始 TCP 上报并保持连接等待应答 | API 宿主可选的 `TcpIngressRulesJson` 入站监听;固定租户与接口引擎,协议帧交给接口引擎处理 |
23
+ | TLS、任意协议、可由 V8 动态开端口、自定义连接池 | 当前不提供;单独评估安全边界和传输实现 |
24
+
25
+ 平台已经提供可复用原子能力后,打印模板、设备选择、订单状态、幂等和审计优先写在接口引擎/表单事件;不要为单个打印业务再写 C# Controller。
26
+
27
+ ## API 容器内的原始 TCP 入站
28
+
29
+ `V8.Tcp` 仍然仅是出站客户端。设备只能填主机/IP 与端口、不能发送 HTTP 请求路径时,可在同一个 `Microi.net.Api` 进程启用独立原始 TCP 监听;HTTP 的 `1052` 等端口不变,TCP 必须使用另一个端口。入口由主租户 `sys_osclients.TcpIngressEnable`、`TcpIngressPort` 与 `TcpIngressRulesJson` 配置:启用状态空值/1 允许加载完整规则、0 明确关闭;端口留空时容器内默认 `1885`;规则留空不监听、坏规则只使 TCP `Faulted`。规则 JSON 不得含 `enabled` 或 `listenPort`。运行中每约 30 秒独立回查主库开关,设 `0` 后下一轮关闭 TCP 监听与会话,HTTP 继续;从 `0` 改回空值/1、或修改端口/规则/Key/CIDR,不会热重绑,必须手工重启现有 API 容器。只允许主租户管理员维护,配置不得进入 `V8.OsClientModel` 投影。
30
+
31
+ 入站配置固定 `osClient`、`apiEngineKey`、来源 CIDR、帧头/帧尾、U16BE 长度字段、CRC16/XMODEM 与请求/响应关联区间;独立的 `TcpIngressPort` 固定容器内监听端口。设备报文绝不能决定租户或调用哪个接口引擎。来源网段优先使用已核实的 IPv4 窄网段;确实无法按来源 IP 限制时,只有在规则 JSON 中显式设置 `allowAnySource:true` 且 `allowedCidrs` **仅**为 `["0.0.0.0/0"]` 才允许任意 IPv4 来源。省略/设为 `false` 时,`/0` 不合法;`/0` 也不能与其它网段混写。这是高风险例外,不是默认推荐或设备鉴权。监听器以固定 `_InvokeType=Server` 内部调用已启用的接口引擎,启动时必须验证目标 `StopHttp=1`、`AllowAnonymous=0`,否则 TCP 局部失败关闭、不监听,以免匿名 HTTP 绕过 TCP 来源约束;HTTP API 保持运行。接口引擎接收 `frameHex`,把原始应答字节的十六进制放在 `Data.ResponseFrameHex`;协议明确的失败应答即使业务 `Code=0` 也需要回传。没有合法应答、校验不通过或超时则关闭连接,不制造成功回执。拆包、粘包、连续心跳均须逐帧处理并在原连接回包。
32
+
33
+ 上线顺序:先部署并启动新 API,确认 `sys_config.ServerVersion >= 7.6.16.0` 且旧 `MqttEnable` 空值已迁为 `0`,再通过商城安装/更新 SaaS 包并发布带 `NullValue=1` 的前端;物理迁移不会自动更新旧租户 UI 元数据。新 TCP 包未安装时空规则不监听、HTTP 继续。然后明确设主租户 `TcpIngressEnable=0` 且暂留空规则;核实旧 HTTP 地址没有合法调用方,或先迁移它们,再**仅对目标接口**设置 `StopHttp=1`、`AllowAnonymous=0` 并验证匿名 HTTP 被拒;最后填写完整 TCP 规则、设 `TcpIngressEnable=1`、配置宿主端口及来源策略并重启同一容器。旧 HTTP 仍被使用时不得直接切换。其它厂商的接口与端口不作改动,但 API 容器重启后要逐条回归。
34
+
35
+ 启用前优先限制来源网段与云安全组,设置帧长、连接数和空闲时间上限;CRC、设备号都不是身份认证。经 CLB 时核对后端实际看到的源 IP,且当前不解析 Proxy Protocol v2 报头。全网例外必须有业务接口内的设备身份/授权校验、幂等与异常连接监控;如果协议本身没有不可伪造的设备凭据,应明确记录剩余风险,并在能识别来源时收窄规则及云侧放行。Docker 在同一个 API service 显式增加如 `19011:1885/tcp`(宿主机对外端口:容器内端口)的映射;不要把 `/apiengine/...` URL、HTTP 的 `80/1052` 或 `V8.Tcp.Send` 当作设备端 TCP 监听。新执行的在线一键安装器会在 `61600+` 连续宿主端口段末尾追加 MQTT/TCP 映射;离线默认宿主 `7010/7011`,都映射至 API 容器 `1883/1885` 并尝试放行宿主机防火墙。窄来源方案仍需云安全组/CLB 人工限源;已有 Compose 不会自动补映射,SaaS 内部端口改变后须同步 Compose。TCP 配置、引擎安全位或端口失败时仅 TCP 状态为 `Faulted`,HTTP 仍可健康;验收必须确认 TCP `Listening` 状态/监听日志、端口探测和合法心跳应答,再核对设备数据。只连上端口不能证明已回 ACK;当前没有对外的 TCP 状态 HTTP 端点,不能把 HTTP 健康当成 TCP 就绪。配置、回环测试、设备联调的详细步骤见官网中文后端 V8 页面;本地回环不等于客户真机已联网。
36
+
37
+ ## API 契约
38
+
39
+ | 方法 | 行为 |
40
+ |---|---|
41
+ | `V8.Tcp.Send({...})` | 连接、发送、关闭,返回 `DosResult` |
42
+ | `await V8.Tcp.SendAsync({...})` | 当前请求内异步发送 |
43
+ | `V8.Tcp.SendAndReceive({...})` | 发送后读取响应,再关闭 |
44
+ | `await V8.Tcp.SendAndReceiveAsync({...})` | 当前请求内异步发送并读取响应 |
45
+
46
+ 必填目标参数:
47
+
48
+ - `Host`:主机名或 IP;只允许主机,不传 `tcp://` URL。
49
+ - `Port`:1-65535。
50
+
51
+ 发送内容必须且只能选择一组:
52
+
53
+ - `Bytes`(别名 `RawBytes`、`ByteArray`):每项为 0-255 的整数。
54
+ - `ByteBase64`(别名 `BytesBase64`、`Base64`)。
55
+ - `Hex`:允许空格、`0x`、`-`、`:`、逗号和下划线分隔。
56
+ - `Text`:按 `Encoding` 编码。默认 `utf-8`,还支持 `ascii`、`gb18030`、`gbk/gb2312`、UTF-16/UTF-32 大小端。
57
+
58
+ 边界参数:
59
+
60
+ | 参数 | 默认 | 范围 |
61
+ |---|---:|---:|
62
+ | `ConnectTimeout` | 10 秒 | 1-120 秒 |
63
+ | `SendTimeout` | 10 秒 | 1-120 秒 |
64
+ | `ReceiveTimeout` | 3 秒 | 1-120 秒 |
65
+ | `MaxReceiveBytes` | 65536 | 1-1048576 |
66
+ | `NoDelay` | `true` | 布尔值 |
67
+
68
+ 单次发送最多 4 MiB。`Send` 成功数据为 `{BytesSent, RemoteEndPoint}`。收发方法另有 `BytesReceived`、`RawBytes`、`ByteBase64`、`Hex`、`ReceiveEndReason`、`Truncated`;`ReceiveEndReason` 为 `RemoteClosed`、`Timeout` 或 `MaxReceiveBytes`。
69
+
70
+ ## 实现流程
71
+
72
+ ### 1. 固定并授权设备目标
73
+
74
+ 从 SaaS 可信配置或受行权限保护的设备表读取 `Host`、`Port`,按当前用户/门店/租户决定可用设备,再与精确白名单比较。禁止这样写:
75
+
76
+ ```javascript
77
+ // 错误:匿名或普通调用者可扫描后端可达内网。
78
+ return V8.Tcp.Send({
79
+ Host: V8.Param.Host,
80
+ Port: V8.Param.Port,
81
+ Hex: V8.Param.Hex
82
+ });
83
+ ```
84
+
85
+ ### 2. 形成一个完整帧
86
+
87
+ ESC/POS、Modbus TCP 或设备私有协议的命令、正文和校验码应先合成一个完整字节载荷。不要为了拼帧而打开多次连接;包含中文和控制命令时,优先在可信后端/上游把完整帧编码为 `Bytes`、`ByteBase64` 或 `Hex`。
88
+
89
+ ```javascript
90
+ var result = V8.Tcp.Send({
91
+ Host: '192.168.1.88', // 示例;生产从可信配置读取
92
+ Port: 9100,
93
+ Bytes: [
94
+ 27, 64, // ESC @ 初始化
95
+ 77, 105, 99, 114, 111, 105, 10,
96
+ 10, 10,
97
+ 29, 86, 0 // GS V 0 切纸
98
+ ],
99
+ ConnectTimeout: 5,
100
+ SendTimeout: 5
101
+ });
102
+ if (result.Code !== 1) return result;
103
+ ```
104
+
105
+ 只有纯文本时可使用打印机常见编码:
106
+
107
+ ```javascript
108
+ var result = await V8.Tcp.SendAsync({
109
+ Host: '192.168.1.88',
110
+ Port: 9100,
111
+ Text: '吾码小票\n合计:12.00\n\n',
112
+ Encoding: 'gb18030'
113
+ });
114
+ if (result.Code !== 1) return result;
115
+ ```
116
+
117
+ ### 3. 需要协议响应时显式收取
118
+
119
+ ```javascript
120
+ var result = V8.Tcp.SendAndReceive({
121
+ Host: '192.168.1.20',
122
+ Port: 4001,
123
+ Hex: '01 03 00 00 00 02 C4 0B',
124
+ ReceiveTimeout: 3,
125
+ MaxReceiveBytes: 4096
126
+ });
127
+ if (result.Code !== 1) return result;
128
+
129
+ var bytes = result.Data.RawBytes;
130
+ var hex = result.Data.Hex;
131
+ ```
132
+
133
+ 接收超时是整段接收的总时间。已收到部分数据后超时会返回成功和已有数据,并标记 `ReceiveEndReason='Timeout'`;未收到任何字节则失败。协议必须知道响应长度或结束条件,不能把超时默认当作完整帧。
134
+
135
+ ### 4. 分开判断写入、设备执行和实物结果
136
+
137
+ - `Code=1` 只表示字节已写入 TCP 连接。
138
+ - 设备协议回执可证明设备接受/处理到哪一步,但仍不一定证明机械动作完成。
139
+ - “小票已打印”需要打印机状态、设备回执或实物/硬件验收证据。
140
+
141
+ 打印不是天然幂等。不确定失败时自动重试可能重复出纸;需要可靠打印时使用业务打印单号、设备回执、状态机以及 Job/MQ/outbox,且重试策略必须识别“尚未发送”和“结果未知”。
142
+
143
+ ## 安全与运行约束
144
+
145
+ 1. TCP 不经过 `V8.Http` 的 SSRF 防护。容器网络策略/防火墙只放行目标设备网段和端口;匿名接口不得暴露任意目标。
146
+ 2. 不把票据正文、设备口令、原始帧和响应秘密写入日志;日志只记录脱敏设备标识、业务单号、字节数、耗时和错误分类。
147
+ 3. `SendAsync` 只是在当前请求内等待 I/O,不能替代后台任务。不要遗留未等待 Promise、`setTimeout` 或 `Task.Run`。
148
+ 4. 每次调用都会创建并关闭连接;不能假设设备会保持会话状态。
149
+ 5. Docker 内的 `localhost` 指容器自身。验收前从实际后端容器验证到设备 IP/端口的路由和出站策略。
150
+ 6. 载荷、超时和响应均有硬上限;不要通过拆成无限循环规避限制。
151
+
152
+ ## 修改公共能力时的同步门禁
153
+
154
+ - 源码:`Microi.Server/Microi.V8Engine/Extend/Tcp/V8Tcp.cs` 与 `V8Extend.cs`。
155
+ - 测试:真实 Jint 注入、Byte/Base64/Hex/Text、回环收发、超时/上限/非法参数。
156
+ - 编辑器:`Microi.Client/.../v8-api-server-definitions.js` 与 `Microi.Agent/src/editor/typingsManager.ts`。
157
+ - 文档与知识:官网中文后端 V8 页面、`microi.skills/README.md`、`v8-utilities` 索引、`Microi.AI/Resource` 镜像和向量资源列表。
158
+ - 验收:目标测试、后端构建、精确重启与健康检查、独立 TCP 回环;真实打印机出纸必须单独报告,不能用回环测试替代。
@@ -1,4 +1,4 @@
1
- interface:
2
- display_name: "V8 TCP 原始字节"
3
- short_description: "通过后端 V8 安全发送和接收 TCP 原始字节数据"
4
- default_prompt: "使用 $v8-tcp-integration 编写一个安全、可验证的 Microi 后端 V8 TCP 设备集成。"
1
+ interface:
2
+ display_name: "V8 TCP 原始字节"
3
+ short_description: "通过后端 V8 安全发送和接收 TCP 原始字节数据"
4
+ default_prompt: "使用 $v8-tcp-integration 编写一个安全、可验证的 Microi 后端 V8 TCP 设备集成。"