@microi.net/cli 4.6.9 → 4.7.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.
@@ -1,13 +1,13 @@
1
1
  {
2
- "builtAt": "2026-08-05T18:12:16.135Z",
2
+ "builtAt": "2026-08-06T15:39:37.381Z",
3
3
  "source": "../microi.skills",
4
4
  "extension": {
5
5
  "name": "v8-engine",
6
- "version": "4.6.9",
6
+ "version": "4.7.3",
7
7
  "publisher": "Microi"
8
8
  },
9
9
  "skills": {
10
- "version": "4.6.9",
10
+ "version": "4.7.3",
11
11
  "versionRule": "Microi version uses three numeric parts. Each publish increments the last part; when a part exceeds 9 it carries to the previous part: 1.0.9 -> 1.1.0, 1.9.9 -> 2.0.0.",
12
12
  "managedBy": "Microi.VSCode/bump-version.js"
13
13
  },
@@ -15,14 +15,14 @@
15
15
  "dir": "dist/microi.skills",
16
16
  "files": 105,
17
17
  "skills": 58,
18
- "bytes": 1608004
18
+ "bytes": 1621098
19
19
  },
20
20
  "fileHashes": {
21
- ".microi-skills-version.json": "293cf1ba47b09bafca90160d341b49eb4a731aaebf33284c6603a612afaf2c09",
21
+ ".microi-skills-version.json": "9d8a0469b26b691a733a6d13c5220360c18a379ba06fe740ee5e2b467985ee11",
22
22
  "README.md": "f88db8f5a0ad3788583b1a0787cb4c485f1027e50a5c21997da41334e2be3b82",
23
23
  "ai-engine/SKILL.md": "371b00ce9860d1516f6eb7eeaed001cbfa852c52e7c0cfccbedc4a71a113e568",
24
24
  "ai-engine/agents/openai.yaml": "40deb07801006a46b9a7f0020d13251955eeadd04c8e591160210479936f8b5b",
25
- "app-store/SKILL.md": "24329f1ee4e4bc5d22b9f15edfeb0f8a7661d4717409cd55507ca9433499efc8",
25
+ "app-store/SKILL.md": "ce238cf6860256fcfd5eba8ae52a03320ffca9137d57504f27f64e6d9f6ac3dd",
26
26
  "app-store/agents/openai.yaml": "eda8f5cf043e7b8fb0e4fb3acf0625fef95eb49586b43187ced277cd0ae4a2c4",
27
27
  "business-blueprint/SKILL.md": "ea379a85476d262f4fc72a5846a06354893065052ef64370bbc7e3a2753a498d",
28
28
  "datasource-engine/SKILL.md": "bfd0cab8318eef375ca49f27c0511fce7e939a1c795678e83cf2d3438e24915f",
@@ -47,29 +47,29 @@
47
47
  "microi-db-schema/references/schema-overview.md": "8909f78c1eb651f1c1f251474051d75e548ac95c961e4e8491160e15a04ec0a1",
48
48
  "microi-db-schema/references/schema.md": "4e533fce9b42a26e404bfe86e2808f30c0bc3ddfe0d65b568c2ff4825c1742d3",
49
49
  "microi-db-schema/references/table-catalog.md": "ea0ef573d0e112c335e3ab66035bce4e5c3039c7bf25c6e3743f086913b46b97",
50
- "microi-deployment/SKILL.md": "f1261f8f9ffe09c69079e9a66efaa9679dd6aa8d50d0e94ab6f2e5869ceec5b4",
50
+ "microi-deployment/SKILL.md": "26faa91740c874cfd676ceb69c1e4f8c12acfb85a2fc9fe1e8d0298ffe84b310",
51
51
  "microi-deployment/references/deployment-matrix.md": "32d9d1424bf19eae0d2cee2b1667203c830ea7610c71a806e7ddf785a0083009",
52
52
  "microi-docs-coverage/SKILL.md": "5fad3dd7b83cf01ef7a303506902c95da7ae85d60b0067d266f1e2fa2326db95",
53
53
  "microi-docs-coverage/references/capability-map.md": "0d3ffff2ecaf3612680a610ffa0df0b731f9ed39432605aa5720c16ce42bd93a",
54
54
  "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "ebd57f17f2ebae499bfa59ad17830db458590feb76f7f0f20219ff0987b33af3",
55
- "microi-form-engine/SKILL.md": "568f669aae269ed34466415a05c263f31c1487acd2f52a43405749f3be780644",
55
+ "microi-form-engine/SKILL.md": "1afefedb468b5bab219f726bddb9ceca99547ee4149722a847a50eb9001b6927",
56
56
  "microi-form-engine/references/component-catalog.md": "68963c2d5211a4610c09fab1fa127a349339abbb7427509b183d4be72e977c7b",
57
57
  "microi-form-engine/references/data-source-events.md": "59a95a36624476b12cdc84e4c23975d074b1f115df19992fd0fd075bb982e7cb",
58
58
  "microi-form-layout/SKILL.md": "48814c2c138e2c0fb6a11d39cf458df6a1cc28a3156c7540db1fa482a2ce6aec",
59
59
  "microi-frontend-sdk/SKILL.md": "0ff6e2df0dc01a42ca875bb6eeb92a4397c5dd4ecae0f808ccf36f1f549c58f0",
60
60
  "microi-left-right-layout/SKILL.md": "d8c482224846477b6c3068bdf94930cca6d699570f59b09f946601b0a65715f6",
61
- "microi-microservice/SKILL.md": "909b0cd048734a21369b1f13ed8291038883aa09f7c451854f27262865e00109",
61
+ "microi-microservice/SKILL.md": "38b95724999b7a990c1ef992a1e5719c4ff2571b1cbd1a9b5703efdd1d19a551",
62
62
  "microi-microservice/references/runtime-delivery.md": "704ed30623d91c971bed359403caa1f848edd07528ecbf211fa3b619ccec117d",
63
63
  "microi-mobile-app-quality/SKILL.md": "810bc23f3cfd4ee47ff3a51917b9aaa46cad8d59d2e3a880ed5f4c41b70eb1d7",
64
64
  "microi-solution-quotation/SKILL.md": "1bd47bd019a62bdc904612a7d8e2501c76df66eed9ef247544dd7fe38eba02e4",
65
65
  "microi-solution-quotation/agents/openai.yaml": "9e3f994cc842c927ca25e23216f6ce5e8f8313fc39b1c7142d9b652ca73e7dd1",
66
66
  "microi-solution-quotation/scripts/build_solution_quote.py": "2a8a90ed95308b900da3db433402d857f838b594df624f5a83b62307471a31e7",
67
- "microi-system-delivery/SKILL.md": "e659f133eccec698742bf854677dfe4666a527adb392bfb1264808cbf779e7af",
67
+ "microi-system-delivery/SKILL.md": "74afccf9e01c29a72f1f0bbd8a654875b53e10188d98cb6f0d65cf0055ff4d7f",
68
68
  "microi-ui/SKILL.md": "606a9cfc2e9cbcb41e9e26ef9c09bb2ca31c4edc24af00058aa059b54a01f2fe",
69
69
  "microi-uniapp-frontend/SKILL.md": "d031dca0ed4182954e383e9828263d46414330f0a014487867b628f655b5bb26",
70
70
  "microi.v8.js": "bc886f196fc4dc9604a5edc89afd59a75a64dcb36066fc0ca7f07879d5870732",
71
- "module-engine/SKILL.md": "c5624f19be8abba47bc7194c75df938fc635d815eb3e5a6e225adc4e8ef83c0c",
72
- "module-engine/references/module-config.md": "314ccec98665b1991913c35c65ca245fd9a8850c8b7bb2116db655c7ef687496",
71
+ "module-engine/SKILL.md": "ee19f0b8f7f960a274236c93cb9639c216004efdc9ea529df39e3ab5645ae340",
72
+ "module-engine/references/module-config.md": "99664bde53029bc3342bff8de820aab56ee94898df7dbc31f054e911871c46dc",
73
73
  "ocr-engine/SKILL.md": "16f7ee8d3485f47d2cb524f0c3fdea609f7de5581ba46da9f34d32772422c050",
74
74
  "ocr-engine/agents/openai.yaml": "3a6cc9984a246c41332c5f53d1badef31b78f81324333ea0d6337cb20c7fc898",
75
75
  "page-engine/SKILL.md": "9ee0ff0e27ce39a45cea836a5d387c16b891b20f551163e0dd6878580c07696d",
@@ -94,7 +94,7 @@
94
94
  "ui-design/references/motion-and-media.md": "3d73161a5ad19e3d1ebecf681febd592ea0e1bca42e6340ef6a08cd9a9fd25be",
95
95
  "ui-design/references/product-flow-recipes.md": "b6a41c2d2b18f59594024f232e38497c140e5d8f25b54099a7e2a47609c52edc",
96
96
  "uniapp-mall-assets/SKILL.md": "153b661fdbfdbb1200f676e8d35d213bbbf2cd8a1fcacfc75370004c3acffa21",
97
- "v8-api-config/SKILL.md": "a8043eef7e3183f56a33da4eca4e025c645512800459d24e729a8926fe062fa4",
97
+ "v8-api-config/SKILL.md": "f74deb2b18007c114ed4e944c5a7b5a29594a6f5bf1d72c7f464016cac7e7314",
98
98
  "v8-cache-pattern/SKILL.md": "703f7e096934221ee40ce6b6c7a9fced8e07d0a538935d6019111c11f647e3fe",
99
99
  "v8-crud-api/SKILL.md": "6c49fcd99e0dd5f61adeed6d359c04e781b775132df945365caa306bb8490b80",
100
100
  "v8-debugging/SKILL.md": "92cfb55d7d4597fd458d8bd657839856497ef02886c58ba96e002980ad33bd39",
@@ -102,7 +102,7 @@
102
102
  "v8-export-import/SKILL.md": "e55299d75b24bcbb6248ec2572b55cd0515fb4fbfadaa1f78bcbe4a8d701a1f9",
103
103
  "v8-file-upload/SKILL.md": "3c1f9390ed6c2457796b341e45fca7f5492a9cda4419d35dae33cbfa2fc80383",
104
104
  "v8-formengine-http/SKILL.md": "d975bc116e100f91d80acf7932128de6fff78c5fcd17557d3d5a5504e3359682",
105
- "v8-frontend-events/SKILL.md": "f6da61a6389d6f01e92b7bcc4bd24588164c60fecf951993c2b42f2890470eb0",
105
+ "v8-frontend-events/SKILL.md": "b4265a5e6d0dbeb8c64441465caf764ffe2039decff0f16b3572ce685cf6e911",
106
106
  "v8-frontend-events/references/bluetooth-print-api.md": "c5667cc6a9ed1bf385a21ddbc28e39993bc9e6d527bc31b53fb4ad582abf719e",
107
107
  "v8-frontend-events/references/bluetooth-print.md": "d57f6981d846093277c1456c84bbf9586f65db70129d007fe25fdfb12f58e589",
108
108
  "v8-http-integration/SKILL.md": "08bb5e9e7a18be162dc907cc02ab8b60ab0aee198617f3c9e1354c620b6f2dc4",
@@ -113,7 +113,7 @@
113
113
  "v8-mongodb/SKILL.md": "7da703b5dc9fb9613cca1929fd854e3d333ad7d86200b839bb78ccdc8e0cc6cf",
114
114
  "v8-mq-mqtt/SKILL.md": "3894fc353a3e9896b16b54b9e12758f0aea950968f80b7f3ec86c6652040341c",
115
115
  "v8-saas-multi-tenant/SKILL.md": "0145ddd39e109e39b601cfac45b746624f21d9dfce5951b662ac713e80f3fc72",
116
- "v8-security/SKILL.md": "9558b6888bcb30593e38f5c4544529ecc4077643fe4ec8311950f3d94f0c058a",
116
+ "v8-security/SKILL.md": "7cd66077bf297d9f57b2d045cd3cba02fd120d84c22e1b58cfd35aee3bce08d2",
117
117
  "v8-sql-query/SKILL.md": "0ebedf72732479e24ca7528120345d468f98fbf96c21a8f45aaa64eb8ef6a488",
118
118
  "v8-table-event/SKILL.md": "ddeb3020e8c7e3002c8f8598a65208b7a2f706ee13f040037f85979c7bc1e8fd",
119
119
  "v8-template-engine/SKILL.md": "20002c2124214641b782db9deabb367c151b6be1b2d32f6689c163dcb0925cce",
@@ -122,114 +122,114 @@
122
122
  "v8-utilities/references/platform-http-routes.md": "87579eef4e89b4c80e1757ad34ec951e0ccadb6bd15aab4f3ab247f55d5f1cd5",
123
123
  "v8-utilities/references/server-api-index.md": "761f4910050b217d3fecc14f4405b779a0f1661cbd8051086fd35b067a794dc8",
124
124
  "v8-workflow/SKILL.md": "cd6738edd79f628948adfac898b6d58a81feb28d1ec6d1f83fc12758fb570819",
125
- "workspace-conventions/SKILL.md": "a498653fca2c3f1b43241b789a3f07f6aece36d89609999a5177a42705615b0d"
125
+ "workspace-conventions/SKILL.md": "90ed592cebb82f786f3810cfb04f6b4a58af74690a4dc6818c8d819bd230c53f"
126
126
  },
127
127
  "fileVersions": {
128
- ".microi-skills-version.json": "4.6.9",
129
- "README.md": "4.6.9",
130
- "ai-engine/SKILL.md": "4.6.9",
131
- "ai-engine/agents/openai.yaml": "4.6.9",
132
- "app-store/SKILL.md": "4.6.9",
133
- "app-store/agents/openai.yaml": "4.6.9",
134
- "business-blueprint/SKILL.md": "4.6.9",
135
- "datasource-engine/SKILL.md": "4.6.9",
136
- "datasource-engine/agents/openai.yaml": "4.6.9",
137
- "dos-orm/SKILL.md": "4.6.9",
138
- "dos-orm/references/api-reference.md": "4.6.9",
139
- "job-engine/SKILL.md": "4.6.9",
140
- "job-engine/agents/openai.yaml": "4.6.9",
141
- "message-notification/SKILL.md": "4.6.9",
142
- "message-notification/agents/openai.yaml": "4.6.9",
143
- "message-notification/references/contracts.md": "4.6.9",
144
- "microi-ai-app-auth.js": "4.6.9",
145
- "microi-ai-application/SKILL.md": "4.6.9",
146
- "microi-ai-application/agents/openai.yaml": "4.6.9",
147
- "microi-ai-application/references/frontend-baseline.md": "4.6.9",
148
- "microi-client-frontend/SKILL.md": "4.6.9",
149
- "microi-datasource-mapping/SKILL.md": "4.6.9",
150
- "microi-db-schema/SKILL.md": "4.6.9",
151
- "microi-db-schema/agents/openai.yaml": "4.6.9",
152
- "microi-db-schema/references/core-tables.md": "4.6.9",
153
- "microi-db-schema/references/form-component-options.md": "4.6.9",
154
- "microi-db-schema/references/schema-overview.md": "4.6.9",
155
- "microi-db-schema/references/schema.md": "4.6.9",
156
- "microi-db-schema/references/table-catalog.md": "4.6.9",
157
- "microi-deployment/SKILL.md": "4.6.9",
158
- "microi-deployment/references/deployment-matrix.md": "4.6.9",
159
- "microi-docs-coverage/SKILL.md": "4.6.9",
160
- "microi-docs-coverage/references/capability-map.md": "4.6.9",
161
- "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "4.6.9",
162
- "microi-form-engine/SKILL.md": "4.6.9",
163
- "microi-form-engine/references/component-catalog.md": "4.6.9",
164
- "microi-form-engine/references/data-source-events.md": "4.6.9",
165
- "microi-form-layout/SKILL.md": "4.6.9",
166
- "microi-frontend-sdk/SKILL.md": "4.6.9",
167
- "microi-left-right-layout/SKILL.md": "4.6.9",
168
- "microi-microservice/SKILL.md": "4.6.9",
169
- "microi-microservice/references/runtime-delivery.md": "4.6.9",
170
- "microi-mobile-app-quality/SKILL.md": "4.6.9",
171
- "microi-solution-quotation/SKILL.md": "4.6.9",
172
- "microi-solution-quotation/agents/openai.yaml": "4.6.9",
173
- "microi-solution-quotation/scripts/build_solution_quote.py": "4.6.9",
174
- "microi-system-delivery/SKILL.md": "4.6.9",
175
- "microi-ui/SKILL.md": "4.6.9",
176
- "microi-uniapp-frontend/SKILL.md": "4.6.9",
177
- "microi.v8.js": "4.6.9",
178
- "module-engine/SKILL.md": "4.6.9",
179
- "module-engine/references/module-config.md": "4.6.9",
180
- "ocr-engine/SKILL.md": "4.6.9",
181
- "ocr-engine/agents/openai.yaml": "4.6.9",
182
- "page-engine/SKILL.md": "4.6.9",
183
- "performance-testing/SKILL.md": "4.6.9",
184
- "playwright-e2e/SKILL.md": "4.6.9",
185
- "print-engine/SKILL.md": "4.6.9",
186
- "production-readonly-audit/SKILL.md": "4.6.9",
187
- "report-engine/SKILL.md": "4.6.9",
188
- "report-engine/agents/openai.yaml": "4.6.9",
189
- "search-engine/SKILL.md": "4.6.9",
190
- "search-engine/agents/openai.yaml": "4.6.9",
191
- "spider-engine/SKILL.md": "4.6.9",
192
- "translate-engine/SKILL.md": "4.6.9",
193
- "translate-engine/agents/openai.yaml": "4.6.9",
194
- "ui-design/SKILL.md": "4.6.9",
195
- "ui-design/assets/pattern-showcase/app.js": "4.6.9",
196
- "ui-design/assets/pattern-showcase/index.html": "4.6.9",
197
- "ui-design/assets/pattern-showcase/styles.css": "4.6.9",
198
- "ui-design/assets/templates/MCI-DESIGN.md": "4.6.9",
199
- "ui-design/references/design-pattern-library.md": "4.6.9",
200
- "ui-design/references/mci-design-contract.md": "4.6.9",
201
- "ui-design/references/motion-and-media.md": "4.6.9",
202
- "ui-design/references/product-flow-recipes.md": "4.6.9",
203
- "uniapp-mall-assets/SKILL.md": "4.6.9",
204
- "v8-api-config/SKILL.md": "4.6.9",
205
- "v8-cache-pattern/SKILL.md": "4.6.9",
206
- "v8-crud-api/SKILL.md": "4.6.9",
207
- "v8-debugging/SKILL.md": "4.6.9",
208
- "v8-explorer-tree/SKILL.md": "4.6.9",
209
- "v8-export-import/SKILL.md": "4.6.9",
210
- "v8-file-upload/SKILL.md": "4.6.9",
211
- "v8-formengine-http/SKILL.md": "4.6.9",
212
- "v8-frontend-events/SKILL.md": "4.6.9",
213
- "v8-frontend-events/references/bluetooth-print-api.md": "4.6.9",
214
- "v8-frontend-events/references/bluetooth-print.md": "4.6.9",
215
- "v8-http-integration/SKILL.md": "4.6.9",
216
- "v8-image-processing/SKILL.md": "4.6.9",
217
- "v8-image-processing/agents/openai.yaml": "4.6.9",
218
- "v8-image-processing/references/api-reference.md": "4.6.9",
219
- "v8-menu-buttons/SKILL.md": "4.6.9",
220
- "v8-mongodb/SKILL.md": "4.6.9",
221
- "v8-mq-mqtt/SKILL.md": "4.6.9",
222
- "v8-saas-multi-tenant/SKILL.md": "4.6.9",
223
- "v8-security/SKILL.md": "4.6.9",
224
- "v8-sql-query/SKILL.md": "4.6.9",
225
- "v8-table-event/SKILL.md": "4.6.9",
226
- "v8-template-engine/SKILL.md": "4.6.9",
227
- "v8-utilities/SKILL.md": "4.6.9",
228
- "v8-utilities/references/client-api-index.md": "4.6.9",
229
- "v8-utilities/references/platform-http-routes.md": "4.6.9",
230
- "v8-utilities/references/server-api-index.md": "4.6.9",
231
- "v8-workflow/SKILL.md": "4.6.9",
232
- "workspace-conventions/SKILL.md": "4.6.9"
128
+ ".microi-skills-version.json": "4.7.3",
129
+ "README.md": "4.7.3",
130
+ "ai-engine/SKILL.md": "4.7.3",
131
+ "ai-engine/agents/openai.yaml": "4.7.3",
132
+ "app-store/SKILL.md": "4.7.3",
133
+ "app-store/agents/openai.yaml": "4.7.3",
134
+ "business-blueprint/SKILL.md": "4.7.3",
135
+ "datasource-engine/SKILL.md": "4.7.3",
136
+ "datasource-engine/agents/openai.yaml": "4.7.3",
137
+ "dos-orm/SKILL.md": "4.7.3",
138
+ "dos-orm/references/api-reference.md": "4.7.3",
139
+ "job-engine/SKILL.md": "4.7.3",
140
+ "job-engine/agents/openai.yaml": "4.7.3",
141
+ "message-notification/SKILL.md": "4.7.3",
142
+ "message-notification/agents/openai.yaml": "4.7.3",
143
+ "message-notification/references/contracts.md": "4.7.3",
144
+ "microi-ai-app-auth.js": "4.7.3",
145
+ "microi-ai-application/SKILL.md": "4.7.3",
146
+ "microi-ai-application/agents/openai.yaml": "4.7.3",
147
+ "microi-ai-application/references/frontend-baseline.md": "4.7.3",
148
+ "microi-client-frontend/SKILL.md": "4.7.3",
149
+ "microi-datasource-mapping/SKILL.md": "4.7.3",
150
+ "microi-db-schema/SKILL.md": "4.7.3",
151
+ "microi-db-schema/agents/openai.yaml": "4.7.3",
152
+ "microi-db-schema/references/core-tables.md": "4.7.3",
153
+ "microi-db-schema/references/form-component-options.md": "4.7.3",
154
+ "microi-db-schema/references/schema-overview.md": "4.7.3",
155
+ "microi-db-schema/references/schema.md": "4.7.3",
156
+ "microi-db-schema/references/table-catalog.md": "4.7.3",
157
+ "microi-deployment/SKILL.md": "4.7.3",
158
+ "microi-deployment/references/deployment-matrix.md": "4.7.3",
159
+ "microi-docs-coverage/SKILL.md": "4.7.3",
160
+ "microi-docs-coverage/references/capability-map.md": "4.7.3",
161
+ "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "4.7.3",
162
+ "microi-form-engine/SKILL.md": "4.7.3",
163
+ "microi-form-engine/references/component-catalog.md": "4.7.3",
164
+ "microi-form-engine/references/data-source-events.md": "4.7.3",
165
+ "microi-form-layout/SKILL.md": "4.7.3",
166
+ "microi-frontend-sdk/SKILL.md": "4.7.3",
167
+ "microi-left-right-layout/SKILL.md": "4.7.3",
168
+ "microi-microservice/SKILL.md": "4.7.3",
169
+ "microi-microservice/references/runtime-delivery.md": "4.7.3",
170
+ "microi-mobile-app-quality/SKILL.md": "4.7.3",
171
+ "microi-solution-quotation/SKILL.md": "4.7.3",
172
+ "microi-solution-quotation/agents/openai.yaml": "4.7.3",
173
+ "microi-solution-quotation/scripts/build_solution_quote.py": "4.7.3",
174
+ "microi-system-delivery/SKILL.md": "4.7.3",
175
+ "microi-ui/SKILL.md": "4.7.3",
176
+ "microi-uniapp-frontend/SKILL.md": "4.7.3",
177
+ "microi.v8.js": "4.7.3",
178
+ "module-engine/SKILL.md": "4.7.3",
179
+ "module-engine/references/module-config.md": "4.7.3",
180
+ "ocr-engine/SKILL.md": "4.7.3",
181
+ "ocr-engine/agents/openai.yaml": "4.7.3",
182
+ "page-engine/SKILL.md": "4.7.3",
183
+ "performance-testing/SKILL.md": "4.7.3",
184
+ "playwright-e2e/SKILL.md": "4.7.3",
185
+ "print-engine/SKILL.md": "4.7.3",
186
+ "production-readonly-audit/SKILL.md": "4.7.3",
187
+ "report-engine/SKILL.md": "4.7.3",
188
+ "report-engine/agents/openai.yaml": "4.7.3",
189
+ "search-engine/SKILL.md": "4.7.3",
190
+ "search-engine/agents/openai.yaml": "4.7.3",
191
+ "spider-engine/SKILL.md": "4.7.3",
192
+ "translate-engine/SKILL.md": "4.7.3",
193
+ "translate-engine/agents/openai.yaml": "4.7.3",
194
+ "ui-design/SKILL.md": "4.7.3",
195
+ "ui-design/assets/pattern-showcase/app.js": "4.7.3",
196
+ "ui-design/assets/pattern-showcase/index.html": "4.7.3",
197
+ "ui-design/assets/pattern-showcase/styles.css": "4.7.3",
198
+ "ui-design/assets/templates/MCI-DESIGN.md": "4.7.3",
199
+ "ui-design/references/design-pattern-library.md": "4.7.3",
200
+ "ui-design/references/mci-design-contract.md": "4.7.3",
201
+ "ui-design/references/motion-and-media.md": "4.7.3",
202
+ "ui-design/references/product-flow-recipes.md": "4.7.3",
203
+ "uniapp-mall-assets/SKILL.md": "4.7.3",
204
+ "v8-api-config/SKILL.md": "4.7.3",
205
+ "v8-cache-pattern/SKILL.md": "4.7.3",
206
+ "v8-crud-api/SKILL.md": "4.7.3",
207
+ "v8-debugging/SKILL.md": "4.7.3",
208
+ "v8-explorer-tree/SKILL.md": "4.7.3",
209
+ "v8-export-import/SKILL.md": "4.7.3",
210
+ "v8-file-upload/SKILL.md": "4.7.3",
211
+ "v8-formengine-http/SKILL.md": "4.7.3",
212
+ "v8-frontend-events/SKILL.md": "4.7.3",
213
+ "v8-frontend-events/references/bluetooth-print-api.md": "4.7.3",
214
+ "v8-frontend-events/references/bluetooth-print.md": "4.7.3",
215
+ "v8-http-integration/SKILL.md": "4.7.3",
216
+ "v8-image-processing/SKILL.md": "4.7.3",
217
+ "v8-image-processing/agents/openai.yaml": "4.7.3",
218
+ "v8-image-processing/references/api-reference.md": "4.7.3",
219
+ "v8-menu-buttons/SKILL.md": "4.7.3",
220
+ "v8-mongodb/SKILL.md": "4.7.3",
221
+ "v8-mq-mqtt/SKILL.md": "4.7.3",
222
+ "v8-saas-multi-tenant/SKILL.md": "4.7.3",
223
+ "v8-security/SKILL.md": "4.7.3",
224
+ "v8-sql-query/SKILL.md": "4.7.3",
225
+ "v8-table-event/SKILL.md": "4.7.3",
226
+ "v8-template-engine/SKILL.md": "4.7.3",
227
+ "v8-utilities/SKILL.md": "4.7.3",
228
+ "v8-utilities/references/client-api-index.md": "4.7.3",
229
+ "v8-utilities/references/platform-http-routes.md": "4.7.3",
230
+ "v8-utilities/references/server-api-index.md": "4.7.3",
231
+ "v8-workflow/SKILL.md": "4.7.3",
232
+ "workspace-conventions/SKILL.md": "4.7.3"
233
233
  },
234
234
  "files": [
235
235
  ".microi-skills-version.json",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "4.6.9",
2
+ "version": "4.7.3",
3
3
  "versionRule": "Microi version uses three numeric parts. Each publish increments the last part; when a part exceeds 9 it carries to the previous part: 1.0.9 -> 1.1.0, 1.9.9 -> 2.0.0.",
4
4
  "managedBy": "Microi.VSCode/bump-version.js",
5
- "updatedAt": "2026-08-05T18:12:05.984Z"
5
+ "updatedAt": "2026-08-06T15:39:27.945Z"
6
6
  }
@@ -11,15 +11,30 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
11
11
 
12
12
  `AppType` 是历史复用字段:旧包/接口曾把它用于官方/社区来源,也曾把它作为运行类型回退。新代码不能把 `AppType` 当事实源;只在读取旧数据时回退,写入新数据使用 `ApplicationType + PublisherType`。
13
13
 
14
- 客户已有的全局 V8、表单配置、菜单、字段和自定义代码必须保留。升级采用存在性检查、差异合并和包隔离,禁止整表覆盖或把发布方租户数据原样复制到目标租户。
14
+ 客户已有的全局 V8、表单配置、菜单、字段和自定义代码必须保留。升级采用存在性检查、差异合并和包隔离,禁止整表覆盖或把发布方租户数据原样复制到目标租户。
15
+
16
+ ## 平台升级的应用商城边界(强制)
17
+
18
+ - 表、字段、Tab、菜单、权限、接口引擎、事件、数据源、页面、打印、工作流、任务和可幂等种子数据都应通过应用包升级;不得为这些资源在 `Microi.Server/Microi.Upgrade/` 新增租户定制 .NET 代码。
19
+ - 有官方 MCP 权限时,固定使用 `microi_itdos`(`https://api.itdos.com`、`OsClient=iTdos`)更新官方母版、制作并发布对应应用,按内容哈希/包版本回读后,再由目标租户 MCP 安装或更新。无官方权限时只通过当前用户自己的 MCP/Manifest 更新其数据库并回读,不得假借通用升级器越权发布官方应用。
20
+ - `Microi.Upgrade` 只保留应用商城/安装器启动前必需的核心物理兼容或协议迁移,并要求持久化版本门、共享租约、幂等、失败不推进版本。禁止每次启动对每个租户重跑不断增长的历史迁移清单。
21
+ - 平台通用缺陷的交付证据必须分开记录:源码修复、官方母版资源、商城包发布后回读、目标租户后台安装任务、目标租户资源回读和真实 UI/接口验收;其中任一步未完成都不能笼统称为“已发布并安装”。
15
22
 
16
- ## 包内容
23
+ ## 包内容
17
24
 
18
25
  - Manifest:应用 Key、版本、兼容平台版本、依赖和资源清单。
19
26
  - 数据模型:表、字段、菜单、角色权限、接口引擎、事件、数据源、页面、打印、工作流、任务。
20
27
  - 源码与构建:私有源码包与可部署构建包分离,记录 SHA-256。
21
28
  - 安装/升级脚本:幂等、可恢复、可回读;不包含租户密钥、Token、连接串或 License keys。
22
- - 迁移采用“先扩展、后迁移、再收缩”,支持新旧节点短暂并存。
29
+ - 迁移采用“先扩展、后迁移、再收缩”,支持新旧节点短暂并存。
30
+
31
+ ## 接口引擎资源所有权(强制)
32
+
33
+ - 新发布包必须声明 `ResourcePolicies.ApiEngines`,不得再依赖“同 Key 直接覆盖”。官方不可随租户修改的核心使用 `{ Ownership:'Application', UpgradePolicy:'Managed' }`;提供给租户改业务的 Hook 使用 `{ Ownership:'Tenant', UpgradePolicy:'CreateIfMissing' }`。
34
+ - 发布器从上一版 `AppPakcet.SysApiEngines` 计算 `BaseHash`;导入成功后把本版摘要写入 `sys_microistoreversion.InstallResult.ResourceState.ApiEngines`。更新判定固定为 Base/Local/Incoming:`Local == Base` 才允许更新;`Local != Base && Local != Incoming` 必须回滚并报告冲突,禁止静默覆盖。
35
+ - `CreateIfMissing` 只在目标 Key 不存在时创建,存在时不得对齐 Id、源码、启用状态或其它字段。扩展模板发布后即归租户维护;后续版本禁止把同一 Key 改回 `Managed` 接管,确需新的官方核心时发布新 Key 并显式迁移。
36
+ - 官方功能采用“Managed 核心 + CreateIfMissing Hook”。核心只提供稳定协议和默认行为;客户日志、写表、通知和业务动作放 Hook,并以稳定 `EventId`、唯一约束或 outbox 幂等。安全核心冲突不自动三方合并代码。
37
+ - 历史包未声明策略时只能按旧兼容流程安装;重新发布时发布器必须生成策略。验收至少覆盖首次安装、未修改核心升级、核心被改后冲突回滚、Hook 被改后保持原样、重复安装和两节点竞态。
23
38
 
24
39
  ## 安装流程
25
40
 
@@ -97,6 +97,10 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
97
97
  只在端口、命令行和当前工作区路径同时匹配时停止 Microi API/Vite,并额外查找当前工作区
98
98
  的 Release API;身份不匹配时失败关闭,禁止使用 `/IM dotnet.exe`、`/IM node.exe`、
99
99
  `/IM chrome.exe` 或 `/IM msedge.exe` 全机清理。
100
+ - Vite 以相对 `node_modules/vite/bin/vite.js` 启动且父进程退出时,命令行可能没有绝对工作区路径。
101
+ 进程管理器只能把只读回读到的 CWD 精确等于当前 `Microi.Client` 作为补充证据;读取失败、
102
+ CWD 属于其它目录或仅检测到孤儿状态时仍须失败关闭。回归同时覆盖当前工作区可精确停止、
103
+ 外部工作区同名相对 Vite 保持运行。
100
104
  - 停止后必须确认 `61500/61501` 已释放,并以 `FileShare.None` 独占打开
101
105
  `Microi.net.Api/bin/Release/net10.0` DLL。只结束 `VBCSCompiler` 不能解决正在运行的
102
106
  `.NET Host` 对业务 DLL 的锁定。
@@ -144,10 +144,13 @@ MCP 建模只使用:
144
144
  优先使用现有 44 类标准控件。只有标准控件无法表达交互、且该交互会长期复用时,
145
145
  才使用 `DevComponent`:
146
146
 
147
- - Vue 组件路径必须稳定并纳入 `Microi.Client` 源码/构建。
148
- - 支持 Add/Edit/View、只读、必填、清空、校验、移动端和暗色主题。
149
- - 不在组件内绕过 FormEngine 权限直接访问任意表。
150
- - 复杂但租户独有的页面优先使用 MicroService + `V8.OpenAppDialog`,避免把客户逻辑打进主前端。
147
+ - Vue 组件路径必须稳定并纳入 `Microi.Client` 源码/构建。
148
+ - 支持 Add/Edit/View、只读、必填、清空、校验、移动端和暗色主题。
149
+ - 不在组件内绕过 FormEngine 权限直接访问任意表。
150
+ - 复杂但租户独有的页面优先使用 MicroService + `V8.OpenAppDialog`,避免把客户逻辑打进主前端。
151
+ - `DevComponent` 配置了非空字段标题时必须正常渲染 Label;只有标题本身为空时才允许隐藏,
152
+ 不能按组件类型全局吞掉业务标题。`el-form--label-top` 下的字段级 `Button` 仍保留与其它
153
+ 控件等高的不可见 Label 占位,使按钮对齐控件区而不是对齐标题行。
151
154
 
152
155
  ## 固定审计字段
153
156
 
@@ -67,6 +67,13 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
67
67
  构建前遵守本地 OOM 保护;已有 dev server 可复用时不重复启动。独立 Vite 预览缺少
68
68
  完整宿主 Token/OsClient/菜单/弹窗上下文,不能替代宿主验收。
69
69
 
70
+ 迁移 Vue2 定制页到独立 Vite 微服务时,不得假设宿主会提供 Tailwind/UnoCSS 等原子类;
71
+ 页面依赖的宽高、颜色、间距、响应式和打印/下载样式必须由组件自身的语义 class 明确声明,
72
+ 并检查最终 CSS 产物确实包含这些规则。合并多个客户分支的同名组件前逐份比对功能,选择
73
+ 业务能力超集并保留各分支共同的数据契约;不能仅按文件名去重,否则会静默丢失某一分支的
74
+ 筛选、确认、导入参数或状态同步。验收需用旧版截图逐项核对标题、工具栏、选项、按钮、表格
75
+ 和分页,而不只确认组件已挂载。
76
+
70
77
  ## 发布
71
78
 
72
79
  - 创建/更新元数据:`microi_create_microservice`。
@@ -15,7 +15,8 @@ description: Microi 吾码从自然语言交付完整系统的总控规范。用
15
15
  4. **本地改完必须远端验收**:V8 文件、表单事件、菜单按钮、数据源、工作流、页面配置等不能只改本地文件。必须写入远端数据库,并通过 HTTP 或平台工具回读确认。
16
16
  5. **测试不等于接口能通**:交付前必须跑构建、接口契约、真实登录、核心写流程、截图、人眼复核、网络 404/5xx 守卫、远端同步状态。
17
17
  6. **生产数据谨慎优先**:涉及真实会员、余额、积分、订单、库存、卡券、收益、佣金、分润等资金/资产数据时,先确认服务器、租户、目标表、筛选条件和影响范围,再执行 MCP、接口引擎或 SQL 写操作。除用户明确要求清理/重置或必须修复错误数据外,不得擅自批量改真实数据。
18
- 7. **默认按分布式交付**:任何后端能力都假设会有至少两个节点连接同一数据库和 Redis,并经历滚动升级、重复投递与节点硬重启。定时任务/消费者使用分布式租约且业务本身幂等;会话、票据和任务状态使用共享存储;新旧版本并存时采用“先扩展、后迁移、再收缩”。只在单节点验证通过不能视为完整交付。
18
+ 7. **默认按分布式交付**:任何后端能力都假设会有至少两个节点连接同一数据库和 Redis,并经历滚动升级、重复投递与节点硬重启。定时任务/消费者使用分布式租约且业务本身幂等;会话、票据和任务状态使用共享存储;新旧版本并存时采用“先扩展、后迁移、再收缩”。只在单节点验证通过不能视为完整交付。
19
+ 8. **业务逻辑默认接口引擎、元数据升级默认应用商城**:先用低代码 CRUD/事件,再用接口引擎;只缺底层原子能力时先扩展 V8,只有协议/鉴权/密钥隔离/运行时内核才进入 C#。表、字段、Tab、菜单、权限、引擎、页面和任务等可打包资源不得新增 `Microi.Upgrade` 定制类;官方开发者通过 `microi_itdos` 发布官方应用后再由目标租户 MCP 更新,无官方权限时只升级自己的租户。
19
20
 
20
21
  ## 用户问题编号跟踪(强制)
21
22
 
@@ -139,7 +140,7 @@ description: Microi 吾码从自然语言交付完整系统的总控规范。用
139
140
  ### 5. V8 接口引擎与事件
140
141
 
141
142
  - 接口引擎代码必须格式化、语义版本可追踪、可回读。
142
- - 保存后必须走 HTTP 稳定路径 `/apiengine/{ApiEngineKey}` 并通过 `osclient` Header 传租户做 smoke test;只用内部 run 通过不够。普通 POST/PUT/PATCH/DELETE 禁止追加 `--OsClient--...--`。
143
+ - 保存后必须走 HTTP 稳定路径 `/apiengine/{ApiEngineKey}` 并通过 `osclient` Header 传租户做 smoke test;只用内部 run 通过不够。普通 POST/PUT/PATCH/DELETE 禁止追加 `--OsClient--...--`;只有调用方无法设置 Header/Query 的第三方回调才使用 `--OsClient--{OsClient}--`,可使用 Query 时固定为 `?OsClient=`。
143
144
  - 返回必须是标准 DosResult,除明确文件/HTML场景外,不允许返回字符串 `null`、空响应、非 JSON。
144
145
  - 业务异常必须给用户可理解的 `Msg`,不能吞异常或只 `catch(e){}`。
145
146
  - 定时任务、超时取消、VIP 过期、自动拒绝、库存释放等跨时间逻辑,必须建 Job 或可被 Job 调用的接口引擎。
@@ -400,14 +401,20 @@ AI 零代码交付不能只验证管理员帐号和页面能打开。任何涉
400
401
  - 通用规则:宿主必须提供唯一的 DI 授权服务,负责缓存刷新、HID、有效期和 RSA 签名验证;所有 Controller、AI、工作流等付费功能只读取这个实例,插件禁止自行缓存或再次创建 `LicenseValidator`。授权验证接口必须返回功能实际读取的 `OnlineFeatureLicensed/ProductType` 与宿主、插件程序集版本。核心插件接口应包含授权状态契约,使旧插件混入新发布包时直接启动/类型加载失败并暴露版本不一致,禁止静默退回开源版。
401
402
  - 自动化检查:先以无授权状态启动,再写入或挂载有效签名文件,验证统一服务限频刷新后授权接口与真实付费功能同时恢复;替换为旧插件 DLL 时启动必须失败或健康检查明确报版本不兼容,不能出现“Verify=Enterprise、功能=OpenSource”。无效签名、错误 HID、过期文件必须继续拒绝。
402
403
 
403
- ### 复盘:全局版本已升级但基础应用并未完整安装
404
+ ### 复盘:全局版本已升级但基础应用并未完整安装
404
405
 
405
406
  - 触发场景:客户旧库的 `ServerVersion` 已被后续步骤推进,但应用商城、导入器、菜单权限或关键元数据仍缺失;客户服务器不通外网时,重启也无法自愈。
406
407
  - 根因:升级器把全局版本号当成所有步骤成功的证明,单步失败后仍继续执行并更新版本;基础应用只依赖在线资源,且完整性检查继续走可能已经失真的 FormEngine 元数据。
407
408
  - 通用规则:后端发布包必须内置可启动的基础应用基线,在线资源只能整组校验成功后作为最新版覆盖,断网或任一资源失败时整组回退;迁移步骤必须失败即停且失败时禁止推进版本。导入器、必要表、菜单和权限等启动前置能力要独立做幂等完整性检查,老库检查以参数化物理表只读查询为准,不能只依赖全局版本或低代码元数据。
408
- - 自动化检查:选择一个版本号偏高但故意缺基础应用的旧库,以禁止外网模式启动,验证后端自动安装基础应用、管理员可见并打开应用商城、插件列表接口可拉取;再次冷启动不得重复导入。再注入任一步骤失败,验证后续步骤不执行且 `ServerVersion` 不前进。
409
-
410
- ### 复盘:平台升级覆盖客户菜单的移动端显隐
409
+ - 自动化检查:选择一个版本号偏高但故意缺基础应用的旧库,以禁止外网模式启动,验证后端自动安装基础应用、管理员可见并打开应用商城、插件列表接口可拉取;再次冷启动不得重复导入。再注入任一步骤失败,验证后续步骤不执行且 `ServerVersion` 不前进。
410
+
411
+ 流式应用发布等当前运行时入口若会直接查询新增物理字段,其扩展型结构不能只挂在
412
+ `ServerVersion` 条件升级链里。必须在后台启动服务的共享分布式升级租约内、入口接流量前
413
+ 独立幂等维护,并在版本链之前回读验证;历史版本号漂移或更早无关迁移失败时也要自愈。
414
+ 自动化至少构造“版本号已高但发布字段缺失”的旧库并并发启动两个节点,断言只扩展一次、
415
+ 没有永久锁,随后流式发布预检和首个文件写入不再出现缺列错误。
416
+
417
+ ### 复盘:平台升级覆盖客户菜单的移动端显隐
411
418
 
412
419
  - 触发场景:旧租户切换到新版后端并执行自动升级后,移动端工作台整棵菜单消失;顶级 `sys_menu.AppDisplay` 为 `NULL` 或被升级包写成 `0` 时,所有下级菜单即使为 `1` 也无法展示。
413
420
  - 根因:旧 `UptSysMenu` 部分更新接口读取旧菜单后又丢弃旧实体,重新创建非空 `int` 字段默认为 `0` 的 `SysMenu` 再全字段更新;仅修改排序或父级也会把未传的 `Display/AppDisplay` 清零。历史加列迁移的不可重入多语句 SQL、应用包全量覆盖目标菜单,以及移动端把 `NULL/未配置` 当作隐藏,都会进一步放大影响。
@@ -76,7 +76,7 @@ Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使
76
76
 
77
77
  ## 跨端 ViewSchema
78
78
 
79
- 顶层 PC 数据列表默认使用紧凑的新模块标题样式;即使未启用 ViewSchema,也不能退回无标题的旧外观。无指标头部固定 `44px`、含指标头部固定 `58px`,连同间距总纵向占用约 `50px / 64px`。子表、关联表、嵌入表不重复显示,移动端由固定导航栏承载标题。`ViewSchema` 只负责个性化标题、指标、复合列和卡片,不改变 Detail/Edit 的显式启用语义。
79
+ 顶层 PC 数据列表默认使用紧凑的新模块标题样式;即使未启用 ViewSchema,也不能退回无标题的旧外观。无指标头部固定 `44px`、含指标头部固定 `62px`,连同间距总纵向占用约 `50px / 68px`。子表、关联表、嵌入表不重复显示,移动端由固定导航栏承载标题。`ViewSchema` 只负责个性化标题、指标、复合列和卡片,不改变 Detail/Edit 的显式启用语义。
80
80
 
81
81
  PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标)→ PageTabs → 查询与表格”,Hero 必须渲染在页面多 Tab 上方。头部只使用一次性入场和一次性轻量光效,禁止持续循环动画;`prefers-reduced-motion: reduce` 必须关闭动画和过渡。
82
82
 
@@ -96,6 +96,10 @@ PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标
96
96
  - `Scene=List` 的 `Layout.Hero` 用 `Eyebrow/Title/Description/Metrics` 建立模块标题与
97
97
  指标条。相同 `ApiEngineKey` 的指标必须由一个聚合接口批量返回,使用 `ValuePath`
98
98
  取值;禁止一个指标一次请求。
99
+ - PC Hero 有指标时采用“左侧标题说明约 25%~30% + 右侧指标区弹性占满”的信息层级,
100
+ 中间只允许一条弱化渐变分隔;指标条容器和单个指标不得叠加多层描边。无指标时标题说明
101
+ 自动占满整行,不保留空指标区。每个指标必须显式配置 `Icon`,并通过不同的 `Tone` 或
102
+ `Color` 形成可辨识的图标色块与轻背景;同一 Hero 内不得让全部指标使用相同图标和颜色。
99
103
  - Hero 指标可用 `Source=DataCount` 读取当前筛选总记录数、用 `Source=PageCount` 读取本页
100
104
  已加载记录数;两者复用列表结果,不调用额外接口。字段汇总继续用 `Field`,跨表或复合
101
105
  统计才用 `ApiEngineKey + ValuePath`。
@@ -127,5 +131,7 @@ PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标
127
131
  - 权限用户可访问,未授权用户不能靠 URL、`_SysMenuId` 或前端字段绕过。
128
132
  - MoreBtns/FormBtns/PageTabs/BatchSelectMoreBtns 显隐、调用和刷新正确;PageTabs 数字角标使用稳定 Tab Id 取 `Data.Buttons`。
129
133
  - 菜单角标、模块指标和按钮角标按真实权限返回,零值/超限/接口失败降级正确且无 N+1。
134
+ - Hero 在有指标、无指标、长标题和 3~5 个指标时均层级清晰;指标无多层线框,同一组图标与
135
+ 语义色可区分,并在浅色/深色主题下保持可读。
130
136
  - PC 复合列和 Mobile Card 引用的附加字段均在查询结果中;长文本、空值、模板值不破版。
131
137
  - PC 和移动端分别验证;MicroService 还要验证运行时、页面路由和宿主上下文。
@@ -99,7 +99,7 @@
99
99
  | 配置路径 | 用途 | 核心字段 |
100
100
  |---|---|---|
101
101
  | `Layout.Hero` | 模块眉题、标题、说明、统计条 | `Eyebrow/Title/Description/Metrics` |
102
- | `Hero.Metrics[]` | 内置、字段或接口引擎指标 | `Key/Label/Source/Field/ApiEngineKey/ValuePath/Prefix/Suffix/Tone/RefreshSeconds` |
102
+ | `Hero.Metrics[]` | 内置、字段或接口引擎指标 | `Key/Label/Source/Field/ApiEngineKey/ValuePath/Prefix/Suffix/Icon/Tone/Color/RefreshSeconds` |
103
103
  | `Layout.List.Columns[]` | PC 复合列 | `Field/Lines/TrailingFields/RequiredFields/Align/MinWidth` |
104
104
  | `Layout.Card` | 移动端业务卡片 | `AvatarTextField/TitleField/TopFields/SubtitleFields/RightFields/Fields/MetaFields/BottomFields` |
105
105
 
@@ -108,8 +108,12 @@ FontWeight/DisplayStyle`。运行时会把引用字段并入 `_SelectFields`;
108
108
  返回这些字段。多字段模板沿用对应 `diy_field.V8TmpEngineTable`,不在 ViewSchema 内保存
109
109
  可执行脚本。
110
110
 
111
- Hero 必须在 PageTabs 上方渲染。PC 无指标/含指标头部分别为 `44px / 58px`,连同间距的
112
- 总纵向占用约 `50px / 64px`。只允许一次性入场与一次性轻量光效,禁止持续循环动画;
111
+ Hero 必须在 PageTabs 上方渲染。PC 无指标/含指标头部分别为 `44px / 62px`,连同间距的
112
+ 总纵向占用约 `50px / 68px`。有指标时标题说明区占约 25%~30%,指标区弹性占满其余空间,
113
+ 两区只用弱化渐变分隔;指标容器不加外框,单指标使用轻量语义色背景和图标色块,禁止
114
+ “外层框 + 指标条框 + 指标卡框”的多层线框。无指标时标题说明自动铺满。每个指标必须
115
+ 显式配置 `Icon`,同一 Hero 内使用不同 `Tone` 或 `Color` 与不同图标,不能只靠数字区分。
116
+ 只允许一次性入场与一次性轻量光效,禁止持续循环动画;
113
117
  `prefers-reduced-motion: reduce` 下关闭动画和过渡。
114
118
 
115
119
  `Hero.Metrics[].Source` 可直接配置 `DataCount`(当前筛选总记录数)或 `PageCount`(本页
@@ -216,7 +216,8 @@ Body: {"ApiEngineKey":"your_key","Action":"Bootstrap"}
216
216
  - HTTP 请求中的 `_CurrentUser`、`_InvokeType:'Server'`、`_TrustedServerInvocation` 都不能建立可信服务端身份;当前用户和调用类型必须由认证中间件与接口层重新写入。
217
217
  - `ApiAddress` 不能为空字符串;空字符串可能导致 404。
218
218
  - 响应不能是空 body、字符串 `null`、非 JSON;业务接口必须返回标准 DosResult。
219
- - 普通 `POST/PUT/PATCH/DELETE` 必须使用稳定路径 `/apiengine/{ApiEngineKey}`,租户放在唯一的 `osclient` Header,并可在 JSON/Form Body 中冗余传入;禁止无脑给路径追加 `--OsClient--...--`。普通 GET 优先 Header 或 `?OsClient=`。只有第三方回调、浏览器直接下载等确实无法设置 Header/Form/Query GET/HEAD 场景,才使用 `--OsClient--{OsClient}--` 特殊路径。
219
+ - 普通 `POST/PUT/PATCH/DELETE` 必须使用稳定路径 `/apiengine/{ApiEngineKey}`,租户放在唯一的 `osclient` Header,并可在 JSON/Form Body 中冗余传入;禁止无脑给路径追加 `--OsClient--...--`。普通 GET 优先 Header 或 `?OsClient=`。只有微信/支付等第三方回调(包括 POST)、浏览器直接下载等调用方确实无法设置 Header Query 的场景,才使用 `--OsClient--{OsClient}--` 特殊路径;Query 参数名固定为 `OsClient`,禁止 `o` 等缩写。
220
+ - 需要 C# 验签/AES 解密或隐藏 SaaS 密钥的回调,使用“最小协议网关 + `Managed` 核心接口 + `CreateIfMissing` 租户 Hook”。网关不得承载日志、写表、通知等业务逻辑;传给 V8 的事件必须脱敏,并包含稳定 `EventId` 供 Hook 幂等。
220
221
  - 更新接口代码时保留 HTTP 元数据,避免只覆盖 JS 代码却把匿名、启用、自定义地址等配置冲掉。
221
222
 
222
223
  ## 请求内异步与可靠后台任务
@@ -124,17 +124,23 @@ V8.ConfirmTips('确认审核通过?', function() {
124
124
  });
125
125
  ```
126
126
 
127
- ### V8BtnLimit — 按钮显隐(V8CodeShow)
127
+ ### V8BtnLimit — 按钮显隐(V8CodeShow)
128
128
 
129
129
  ```javascript
130
130
  // 推荐:直接 return boolean
131
131
  return V8.Form.Status === '待审核' && V8.CurrentUser.RoleName.indexOf('审批员') !== -1;
132
132
 
133
133
  // 兼容旧写法:V8.Result = true/false
134
- // V8.Result = V8.Form.Status === '待审核';
135
- ```
136
-
137
- ## 列表事件
134
+ // V8.Result = V8.Form.Status === '待审核';
135
+ ```
136
+
137
+ `V8CodeShow` 与点击事件使用同一套前端 V8 能力,允许直接使用 `await`。平台所有
138
+ 按钮入口(列表按钮、表单顶部按钮、更多按钮和子表打开的嵌套表单按钮)都必须走
139
+ 异步执行器并等待结果后再决定显隐;不得在某一层退回同步 `new Function`,否则同一段
140
+ 代码在列表可用、进入嵌套表单后会报 `await is only valid in async functions`。回归测试
141
+ 至少覆盖“主表详情 → 定制子表 → 子记录详情”链路中的含 `await` 显隐代码。
142
+
143
+ ## 列表事件
138
144
 
139
145
  ### TableRowClick — 行点击
140
146
 
@@ -354,7 +354,10 @@ try {
354
354
  - 普通访问默认阈值为 10 秒 600 请求/120 异常。VS Code 多服务器源码拉取不能通过减少并发或请求量规避;符合条件的只读 V8Debug `Get/List` 使用独立桶,默认 10 秒 6000 请求/1200 异常。
355
355
  - 受信判断必须同时满足:服务端共享登录态确认 `Level >= 9999`、请求 Token 是活动 `ClientType=VSCode` Token、请求 `did` 与该 Token 保存的 Did 完全一致、路由为只读 `/api/V8Debug/Get*` 或 `/api/V8Debug/List*`。自报 `ClientType`、User-Agent、`X-User-Level`、单独伪造 did 都不可信;Update/Create/Execute/Upload/Finalize 和 FormEngine 写入不放宽。
356
356
  - 普通请求的计数 scope 固定为当前 API 主运行实例,不能使用请求方可控的 `OsClient` Query/Header 选择 Redis 桶;只有已通过上述联合校验的 VS Code profile 才能使用活动 Token 服务端绑定的租户 scope。测试必须覆盖轮换两个真实租户 Key 仍落入同一普通桶。
357
- - SecurityGuard 只读取 `Connection.RemoteIpAddress`,不得直接解析 `X-Forwarded-For`/`X-Real-IP`。宿主在 `UseForwardedHeaders` 中只信任主租户 SaaS 引擎【后端运行配置】的 `BackendForwardedKnownProxies` 精确 IP 和 `BackendForwardedKnownNetworks` 受控 CIDR;禁止使用环境变量、自定义 `appsettings` 节点、`0.0.0.0/0` 或 `::/0`。历史 `SecurityRespectForwardedHeaders` 字段不能建立 Header 信任。该宿主配置变更需滚动重启节点,测试必须覆盖公网 Remote IP 携带伪造 `X-Forwarded-For: 127.0.0.1` 时仍识别公网 IP。
357
+ - SecurityGuard 只读取 `Connection.RemoteIpAddress`,不得直接解析 `X-Forwarded-For`/`X-Real-IP`。容器运行时可自动信任当前容器路由表实际发现的 RFC1918/ULA 私有默认网关**精确 IP**,用于宿主 Nginx 经 Docker 发布端口转发的最后一跳;不得自动信任公网网关或任意私有网段。其它代理只信任主租户 SaaS 引擎【后端运行配置】的 `BackendForwardedKnownProxies` 精确 IP 和 `BackendForwardedKnownNetworks` 受控 CIDR;禁止使用环境变量、自定义 `appsettings` 节点、`0.0.0.0/0` 或 `::/0`。历史 `SecurityRespectForwardedHeaders` 字段不能建立 Header 信任。该宿主配置变更需滚动重启节点,测试必须覆盖容器网关把 XFF 投影为真实 IP,以及公网 Remote IP 携带伪造 `X-Forwarded-For: 127.0.0.1` 时仍识别公网 IP。
358
+ - `UseForwardedHeaders` 后若 Remote IP 仍是自动发现的精确容器网关,表示代理未提供可验证的客户端地址;该请求不得进入按 IP 自动封禁,否则任一用户可导致全站误封。此降级不跳过后续全局请求压力、内存和业务鉴权,公网或普通私网地址也不适用;运维仍应补齐最后一跳转发头。
359
+ - IP 错误窗口只把未匹配端点的 404/405 作为扫描计数;400/401/403/413/429、5xx、已匹配 Controller 以及 `/api`、`/apiengine` 动态路由的应用级 404/405 只能审计,不能触发自动封禁。请求总量窗口继续作为独立的高频攻击门禁,禁止用服务端故障或正常业务拒绝反向惩罚客户端。
360
+ - 旧版 `HighError`/`TrustedVsCodeHighError` 宽泛错误策略产生的自动封禁属于可识别的失效状态;升级节点应从共享 Redis 和本机缓存幂等退休,不能要求所有租户等待旧 TTL,也不能解除手动、`HighFrequency` 或新版 `RouteScan` 封禁。
358
361
  - 自动封禁按 `ExpiresAtUtc` 到期解除。立即解除只能从未被封禁的管理网络,以平台超级管理员进入【系统日志 → 安全防护】操作 `/api/SecurityGuard/UnblockIp`;同一被封出口不能给自己解封。
359
362
  - 固定可信出口才可精确加入当前服务器匹配 `sys_osclients.SecurityWhitelistIps`。禁止全网段、动态用户 IP 或请求参数自动入白名单,也不要关闭安全防护或全局放大普通阈值。
360
363
  - 多节点封禁、解封和到期状态必须进入共享 Redis/数据库;本机静态字典只能做缓存。Redis 可用且共享 block 不存在就是权威已解封,节点必须删除本机旧 block,禁止把旧状态回写复活;Redis 不可用时才允许本机降级。验收要让同一出口分别命中至少两个 API 节点,覆盖普通阈值、受信读取、伪造 Header、手动解除和自动到期。