@microi.net/cli 5.2.5 → 5.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) 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 +6 -6
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +88 -88
  10. package/scripts/microi-cli.js +15 -0
  11. package/scripts/microi-skills.meta.json +225 -222
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +93 -93
  14. package/skills/README.md +2 -1
  15. package/skills/ai-engine/SKILL.md +1 -1
  16. package/skills/app-store/SKILL.md +13 -9
  17. package/skills/microi-client-frontend/SKILL.md +1 -1
  18. 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 +1 -1
  19. 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 +2 -2
  20. package/skills/microi-docs-coverage/references/capability-map.md +3 -1
  21. package/skills/microi-form-layout/SKILL.md +6 -6
  22. package/skills/microi-frontend-sdk/SKILL.md +6 -6
  23. package/skills/microi-microservice/SKILL.md +2 -1
  24. package/skills/microi-sso/SKILL.md +3 -1
  25. package/skills/microi-sso/references/acceptance.md +1 -1
  26. package/skills/microi-sso/references/configuration-and-security.md +1 -1
  27. package/skills/microi-system-delivery/SKILL.md +2 -2
  28. 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
  29. package/skills/microi.v8.js +1 -1
  30. package/skills/performance-testing/SKILL.md +12 -0
  31. package/skills/system-observability/SKILL.md +139 -0
  32. package/skills/translate-engine/SKILL.md +3 -0
  33. package/skills/ui-design/SKILL.md +6 -3
  34. package/skills/v8-api-config/SKILL.md +31 -9
  35. package/skills/v8-cache-pattern/SKILL.md +304 -289
  36. package/skills/v8-debugging/SKILL.md +1 -1
  37. package/skills/v8-file-upload/SKILL.md +3 -3
  38. 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 +1 -1
  39. package/skills/v8-menu-buttons/SKILL.md +1 -1
  40. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +1 -1
  41. package/skills/v8-mq-mqtt/SKILL.md +130 -109
  42. package/skills/v8-mq-mqtt/references/mqtt-production.md +3 -2
  43. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +14 -16
  44. package/skills/v8-security/SKILL.md +7 -5
  45. package/skills/v8-table-event/SKILL.md +1 -1
  46. 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 +1 -1
  47. package/skills/v8-utilities/SKILL.md +1 -1
  48. package/skills/v8-utilities/references/platform-http-routes.md +4 -2
  49. package/skills/v8-utilities/references/server-api-index.md +6 -3
  50. package/skills/v8-workflow/SKILL.md +1 -1
  51. package/skills/workspace-conventions/SKILL.md +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "5.2.5",
2
+ "version": "5.2.7",
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-23T14:57:38.632Z"
5
+ "updatedAt": "2026-08-24T10:38:18.993Z"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-08-23T11:33:47.095Z",
3
+ "generatedAt": "2026-08-24T10:21:26.245Z",
4
4
  "policy": {
5
5
  "maxEntryLines": 285,
6
6
  "referenceBudgetLines": 245,
@@ -169,11 +169,11 @@
169
169
  ]
170
170
  },
171
171
  "microi-client-frontend": {
172
- "originalSha256": "036e90f87d34b16249c2087a20247a0c574ddfcff34f325f3945f81e4bec7187",
173
- "originalLines": 647,
172
+ "originalSha256": "6f13faa9f35651d2cbda9d4b8283a326537b27724acbf4bf855c5d4138d7d3b0",
173
+ "originalLines": 661,
174
174
  "prefixSha256": "65cd4f270c1895c459014ab1ce7c376f69ec5469fe94ddf0f82827eb8616d579",
175
175
  "prefixBytes": 781,
176
- "entryLines": 198,
176
+ "entryLines": 212,
177
177
  "chunks": [
178
178
  {
179
179
  "id": "microi-client-frontend-000",
@@ -195,8 +195,8 @@
195
195
  "id": "microi-client-frontend-002",
196
196
  "ordinal": 2,
197
197
  "destination": "microi-client-frontend/SKILL.md",
198
- "sha256": "113995bb5eb3f6d9dfdf0b8d8cb45c415dc931c244beb80dd976f56ce782fb13",
199
- "lines": 90,
198
+ "sha256": "ca442fa8a4990040aa7172dd37b49437bc6de0c9b1f88d889a30f5e936321aa1",
199
+ "lines": 104,
200
200
  "heading": "2. 表单引擎三层结构"
201
201
  },
202
202
  {
@@ -219,7 +219,7 @@
219
219
  "id": "microi-client-frontend-005",
220
220
  "ordinal": 3,
221
221
  "destination": "microi-client-frontend/references/progressive-01-3-动态按钮系统.md",
222
- "sha256": "c4aeb714b7eaa724eb7ac8667d474e0707e76c79dcf02c106e8c5b25a1e0ef17",
222
+ "sha256": "0ffafbd99fc0ee478db91200bfc3645c288f20d45120cd7413fb00ac3fbd8952",
223
223
  "lines": 42,
224
224
  "heading": "3. 动态按钮系统"
225
225
  },
@@ -283,7 +283,7 @@
283
283
  "id": "microi-client-frontend-013",
284
284
  "ordinal": 13,
285
285
  "destination": "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md",
286
- "sha256": "41c4bd99de48ccd402eb1d2dc551cf19a4472abce542b7904bf7ee61bdd43f0a",
286
+ "sha256": "8f876b46e20dce5020e17f87ac6f9acfb37c908ab27f7c9568d59e9e7a00d3b2",
287
287
  "lines": 15,
288
288
  "heading": "浏览器访问密钥路由"
289
289
  }
@@ -316,17 +316,17 @@
316
316
  ]
317
317
  },
318
318
  "microi-form-layout": {
319
- "originalSha256": "a279abf5400932ba725da58ec510407ea1155ac95ce330ea46a19abde98655bb",
320
- "originalLines": 398,
321
- "prefixSha256": "e1876f78d666d81d6aba19c4c6515b2312d4b78b965199f518f4105f3a595131",
322
- "prefixBytes": 2508,
323
- "entryLines": 192,
319
+ "originalSha256": "06f5ede02c22b7b060889b938b7d2bf1c9aab96f5a5708c50b3a88534acfaa56",
320
+ "originalLines": 412,
321
+ "prefixSha256": "619ed5b612cb11a3eafaa85f9f3aadc09a02f1e0e4ee04997c3ae65133354db5",
322
+ "prefixBytes": 4214,
323
+ "entryLines": 206,
324
324
  "chunks": [
325
325
  {
326
326
  "id": "microi-form-layout-000",
327
327
  "ordinal": 0,
328
328
  "destination": "microi-form-layout/SKILL.md",
329
- "sha256": "cade6a415454aa04f5fcf840e6d9df1323ac9751c0e3c8e1b07b360007413819",
329
+ "sha256": "79fcf1787c0fbdbe51363f25fcf72b060b714eed9cbc5593760f9080cff48e31",
330
330
  "lines": 10,
331
331
  "heading": "1. 三种分组能力速查"
332
332
  },
@@ -334,7 +334,7 @@
334
334
  "id": "microi-form-layout-001",
335
335
  "ordinal": 1,
336
336
  "destination": "microi-form-layout/SKILL.md",
337
- "sha256": "f43f8c6f1c156ef3669f0c1f9a9d9d2cb7baf630d0b0cb2f48307a31f3f82ae2",
337
+ "sha256": "eb8f9a306f46484217f8fc6094a7dc8ea1f5315187430329d79fa71134c3b2da",
338
338
  "lines": 50,
339
339
  "heading": "2. 黄金决策流程(AI 必须按此顺序判断)"
340
340
  },
@@ -342,7 +342,7 @@
342
342
  "id": "microi-form-layout-002",
343
343
  "ordinal": 3,
344
344
  "destination": "microi-form-layout/SKILL.md",
345
- "sha256": "9165f561ba90696ce130d24f71a0e56c521b5f8935eac2ddcffb852f3af5d9b2",
345
+ "sha256": "119311f1ec30de83c323a0604c0aefb12676da7c421fc459d1555b0a1a7858d0",
346
346
  "lines": 41,
347
347
  "heading": "4. AI 生成表单布局的标准动作"
348
348
  },
@@ -350,15 +350,15 @@
350
350
  "id": "microi-form-layout-003",
351
351
  "ordinal": 4,
352
352
  "destination": "microi-form-layout/SKILL.md",
353
- "sha256": "c737fc8b0d488548e5a3de616ff172b8b645553c818fb09e70a196f4e9c0e2ae",
354
- "lines": 27,
353
+ "sha256": "02934831afff7bd9065406b074f5780cb5686ccdb63fcb350b8c409dad315c74",
354
+ "lines": 29,
355
355
  "heading": "5. 必填与禁止"
356
356
  },
357
357
  {
358
358
  "id": "microi-form-layout-004",
359
359
  "ordinal": 5,
360
360
  "destination": "microi-form-layout/SKILL.md",
361
- "sha256": "539ae919554ca9eda5b5a26ac405181f601f4195f6a59baf1fd368d315987e6c",
361
+ "sha256": "5de749261dec123edd0fc9186188cb90887892490298dad9d6944670457177df",
362
362
  "lines": 20,
363
363
  "heading": "6. 验收清单"
364
364
  },
@@ -366,7 +366,7 @@
366
366
  "id": "microi-form-layout-005",
367
367
  "ordinal": 8,
368
368
  "destination": "microi-form-layout/SKILL.md",
369
- "sha256": "db6759bef83e520e5f137347070f85df1275e14dcbc742bebfdaac4da14be375",
369
+ "sha256": "941d45f4389751946df34ec388e28adbbe9965d6ad9f637f48fd35cc6aca5065",
370
370
  "lines": 8,
371
371
  "heading": "9. 与其他 Skill 的关系"
372
372
  },
@@ -407,17 +407,17 @@
407
407
  ]
408
408
  },
409
409
  "microi-frontend-sdk": {
410
- "originalSha256": "ebd28fbc6b8ac47c713cf9c44e89b4043bc7ecf652b7796e65d28c4844188c0e",
410
+ "originalSha256": "7d244b24626787ccc88be38f5088ffcd6dbb736a8155a1ab7ae71ce134284644",
411
411
  "originalLines": 317,
412
- "prefixSha256": "dc0f266bc26abc96d90f7cc653f85fb5968ee99405a393a8ae54b0b03d1bdbba",
413
- "prefixBytes": 884,
414
- "entryLines": 183,
412
+ "prefixSha256": "5ee94a9174a22577011c64f29a93f6983c8450d471d26f12fa884d7c4b3a879a",
413
+ "prefixBytes": 895,
414
+ "entryLines": 190,
415
415
  "chunks": [
416
416
  {
417
417
  "id": "microi-frontend-sdk-000",
418
418
  "ordinal": 0,
419
419
  "destination": "microi-frontend-sdk/SKILL.md",
420
- "sha256": "06f944bc009a4e773ae6d5496d435d3e4a4fdb23d59107dac9cedffcfdf18f86",
420
+ "sha256": "4b1d4f626b1c4de344339a2fba6b2eaf48e9e5a018c2faa1f7480b90254a4cfb",
421
421
  "lines": 45,
422
422
  "heading": "必须采用的模式"
423
423
  },
@@ -425,7 +425,7 @@
425
425
  "id": "microi-frontend-sdk-001",
426
426
  "ordinal": 1,
427
427
  "destination": "microi-frontend-sdk/SKILL.md",
428
- "sha256": "f1c2ab1fadc01dbe8ea4b9de98f7c02192c3f2cfed8b792fe62f8ef516b67d83",
428
+ "sha256": "c418c6c9e6846d2ce4db04501520036e2c6b0f162c282d6e099e802c9b83f72d",
429
429
  "lines": 14,
430
430
  "heading": "必须委托 SDK 的能力"
431
431
  },
@@ -433,7 +433,7 @@
433
433
  "id": "microi-frontend-sdk-002",
434
434
  "ordinal": 2,
435
435
  "destination": "microi-frontend-sdk/SKILL.md",
436
- "sha256": "5842c30af751f60041e4435efe5c993144a874cb2e9d97c41fb37d1f06d6474e",
436
+ "sha256": "54b302bfe2a8830a3043ae7804ca775d6159453bea0cfdeac61c3b97d36466ed",
437
437
  "lines": 48,
438
438
  "heading": "登录与验证码封装"
439
439
  },
@@ -441,7 +441,7 @@
441
441
  "id": "microi-frontend-sdk-003",
442
442
  "ordinal": 3,
443
443
  "destination": "microi-frontend-sdk/SKILL.md",
444
- "sha256": "d5d1984e6cd4efbb2340f984473146c66bb342d60bb571454c457f5673b1c68f",
444
+ "sha256": "fd0dbc19f767d1b69c41582a99d2c578c2e4ee8c871df89fd67ed054641d1931",
445
445
  "lines": 11,
446
446
  "heading": "请求头规则"
447
447
  },
@@ -449,7 +449,7 @@
449
449
  "id": "microi-frontend-sdk-004",
450
450
  "ordinal": 5,
451
451
  "destination": "microi-frontend-sdk/SKILL.md",
452
- "sha256": "c5f546fd4ef770459d42239b40af81d52399a3623340472b703cffe09a7b5d1e",
452
+ "sha256": "f5644fc45280e53988d1eed432e57afc2c56fc58b1232505950359219b5220d2",
453
453
  "lines": 17,
454
454
  "heading": "上传规则"
455
455
  },
@@ -457,7 +457,7 @@
457
457
  "id": "microi-frontend-sdk-005",
458
458
  "ordinal": 6,
459
459
  "destination": "microi-frontend-sdk/SKILL.md",
460
- "sha256": "1a9d0a33adbff849decf01d114e72cad96f80a6122f0b281cecf9092bbcd0c42",
460
+ "sha256": "ea5ffc6757b73bb3251b34d26b2902674c3a0c7f5277dcf8745e39ff11fe6b56",
461
461
  "lines": 23,
462
462
  "heading": "项目封装规则"
463
463
  },
@@ -745,17 +745,17 @@
745
745
  ]
746
746
  },
747
747
  "microi-system-delivery": {
748
- "originalSha256": "740d8c11607a2847b8059808e69c51c9715ccb0e8b514213a7adb7f98bc36639",
749
- "originalLines": 495,
750
- "prefixSha256": "1688ecd4ba46b3259a847a87658280071e6dd4cdbe37bf6562f0f286276a4c69",
751
- "prefixBytes": 955,
752
- "entryLines": 131,
748
+ "originalSha256": "8c6b1c249454fa833693406b7de31d7f1e729ed87df5b9df64d182026da18ce7",
749
+ "originalLines": 503,
750
+ "prefixSha256": "0af36d909e7a31f49d0c8dcd66478251a1c9140a2dd7e118da7a99415448e563",
751
+ "prefixBytes": 1529,
752
+ "entryLines": 137,
753
753
  "chunks": [
754
754
  {
755
755
  "id": "microi-system-delivery-000",
756
756
  "ordinal": 0,
757
757
  "destination": "microi-system-delivery/SKILL.md",
758
- "sha256": "b09c3f2d05e2927322de0c42913f85813296e9001bccf31b6dc85779cbe3099f",
758
+ "sha256": "088aaa73360be7d63b64ca476e884371140c7807d118c05f04d87a12de0c7701",
759
759
  "lines": 12,
760
760
  "heading": "交付总原则"
761
761
  },
@@ -771,7 +771,7 @@
771
771
  "id": "microi-system-delivery-002",
772
772
  "ordinal": 3,
773
773
  "destination": "microi-system-delivery/SKILL.md",
774
- "sha256": "aa3d244481565608bc92f7c389f8647e8cd551d241aabad9a9d876f1d15aab52",
774
+ "sha256": "5b929c8ab1cf588601fb0e27149ef05893bc5000eecf05e58961c4f785251e31",
775
775
  "lines": 52,
776
776
  "heading": "平台安全与存量兼容验收(强制)"
777
777
  },
@@ -795,8 +795,8 @@
795
795
  "id": "microi-system-delivery-005",
796
796
  "ordinal": 2,
797
797
  "destination": "microi-system-delivery/references/progressive-01-标准工作流.md",
798
- "sha256": "e27ee98421974395b858927ab7b7fbebe27f314e54a8f616064b9c77c01ba808",
799
- "lines": 181,
798
+ "sha256": "8e90f8c4618b882000935a83b8ed581ff20c32d9b888f74eb0ace8c39439a46e",
799
+ "lines": 183,
800
800
  "heading": "标准工作流"
801
801
  },
802
802
  {
@@ -942,11 +942,11 @@
942
942
  ]
943
943
  },
944
944
  "microi-uniapp-frontend": {
945
- "originalSha256": "e00b5bcbbf2cfb0cf4993229698a9f2c2ef5f41d428f8772eb778265c193e4a2",
946
- "originalLines": 491,
947
- "prefixSha256": "dddbf061feda3687afb0e6958c24386a7c3fbcf838fc6f6bb229d1c375aa7ffa",
948
- "prefixBytes": 836,
949
- "entryLines": 182,
945
+ "originalSha256": "3727756264593f239e06109dbd5d11c1f53eb576484e445f4d664303b38260c8",
946
+ "originalLines": 499,
947
+ "prefixSha256": "6b843b9a940cd2a4019b3873d72a9d346b0e6ab872afb0966f093b76dcc27131",
948
+ "prefixBytes": 2486,
949
+ "entryLines": 190,
950
950
  "chunks": [
951
951
  {
952
952
  "id": "microi-uniapp-frontend-000",
@@ -1610,11 +1610,11 @@
1610
1610
  ]
1611
1611
  },
1612
1612
  "ui-design": {
1613
- "originalSha256": "cf2d6bef2450c4ee6227d960fcdfcb1c38f5eddab58a764af89918338a23acf5",
1614
- "originalLines": 1636,
1613
+ "originalSha256": "f4c2d975c1fe1332cb419be8cf036effc29393a809868015b6602a25bc318f8e",
1614
+ "originalLines": 1639,
1615
1615
  "prefixSha256": "d537abb190e152d01a556e7fb730fc15304e14a28ba6853e76056e883c79097f",
1616
1616
  "prefixBytes": 1101,
1617
- "entryLines": 210,
1617
+ "entryLines": 213,
1618
1618
  "chunks": [
1619
1619
  {
1620
1620
  "id": "ui-design-000",
@@ -1636,8 +1636,8 @@
1636
1636
  "id": "ui-design-002",
1637
1637
  "ordinal": 2,
1638
1638
  "destination": "ui-design/SKILL.md",
1639
- "sha256": "4339d981ddbc6340663729c1bd89f6be9f9215fa1c6768260377b6feaf202505",
1640
- "lines": 21,
1639
+ "sha256": "0d1bac0d19d61d288a6eb25f18fc15a045bca3df9a01399d5ce5224c8accffd3",
1640
+ "lines": 24,
1641
1641
  "heading": "高端视觉标准"
1642
1642
  },
1643
1643
  {
@@ -2221,11 +2221,11 @@
2221
2221
  ]
2222
2222
  },
2223
2223
  "v8-file-upload": {
2224
- "originalSha256": "a812df73c7f9e29bdfeeaa7f740a4b7b7490a6431e642d56ada31b2b9206923a",
2225
- "originalLines": 529,
2226
- "prefixSha256": "2cb0db96cd348d7a50f36b6e4f43435188e374ace1962eb639a501b9c7490c7e",
2227
- "prefixBytes": 1074,
2228
- "entryLines": 191,
2224
+ "originalSha256": "5378f79b6d46af00107a26d466badc5074027bef383084a298c768e93f74803d",
2225
+ "originalLines": 554,
2226
+ "prefixSha256": "ebc8749554b5ded9e5e7508e017d09cd8eefddfc58e13c87dce1234491eb90bb",
2227
+ "prefixBytes": 5841,
2228
+ "entryLines": 216,
2229
2229
  "chunks": [
2230
2230
  {
2231
2231
  "id": "v8-file-upload-000",
@@ -2247,7 +2247,7 @@
2247
2247
  "id": "v8-file-upload-002",
2248
2248
  "ordinal": 2,
2249
2249
  "destination": "v8-file-upload/SKILL.md",
2250
- "sha256": "01111b2fe994a2a5e424f45d405821f0b4f5c29235bc93757352d4c7e10d8d84",
2250
+ "sha256": "dc69d3bcadb1b40d98e1346a8d9d0a3599cae7f7dd6b850dd95ad054c747b2dd",
2251
2251
  "lines": 101,
2252
2252
  "heading": "接收前端上传的文件"
2253
2253
  },
@@ -2255,7 +2255,7 @@
2255
2255
  "id": "v8-file-upload-003",
2256
2256
  "ordinal": 5,
2257
2257
  "destination": "v8-file-upload/SKILL.md",
2258
- "sha256": "5765949bee76ce3ccd05503174ff7601135f1d330f8c11a2bf5f268cdeb74133",
2258
+ "sha256": "a31f0170454bb9e44007e24ed280873e99ae4ca4f4ecc7307ecc3e738eb51df9",
2259
2259
  "lines": 13,
2260
2260
  "heading": "跨平台文件同步登录会话"
2261
2261
  },
@@ -2271,7 +2271,7 @@
2271
2271
  "id": "v8-file-upload-005",
2272
2272
  "ordinal": 3,
2273
2273
  "destination": "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md",
2274
- "sha256": "431aed9f824e7a604e8e1e02e03404cc4940814f352e6afd3f7639a106d1f332",
2274
+ "sha256": "6136a38af209aad174ca1cacd61fcfc66e3428e1e8bf75be8a2490bcb094b71e",
2275
2275
  "lines": 143,
2276
2276
  "heading": "公有桶 vs 私有桶"
2277
2277
  },
@@ -2579,11 +2579,11 @@
2579
2579
  ]
2580
2580
  },
2581
2581
  "v8-menu-buttons": {
2582
- "originalSha256": "2a26a222efc7a4750b200cbb3cf0f38a806e5ba4fc0d5d70f62c567594ef319c",
2583
- "originalLines": 675,
2582
+ "originalSha256": "d1a252ab09149e5058b016002193b189f33084c336ec7c407d80351c75783baa",
2583
+ "originalLines": 680,
2584
2584
  "prefixSha256": "5967d6ba9436052555abaf1397243096e55015aedf618a3aa61baee3c46896c5",
2585
2585
  "prefixBytes": 966,
2586
- "entryLines": 179,
2586
+ "entryLines": 183,
2587
2587
  "chunks": [
2588
2588
  {
2589
2589
  "id": "v8-menu-buttons-000",
@@ -2613,16 +2613,16 @@
2613
2613
  "id": "v8-menu-buttons-003",
2614
2614
  "ordinal": 4,
2615
2615
  "destination": "v8-menu-buttons/SKILL.md",
2616
- "sha256": "ae7e519897a8c331be2f657549997a91cd24a053fe00558e2b51d5c2477fc290",
2617
- "lines": 91,
2616
+ "sha256": "d04e7a71ffe8baa47c2430077d0fd0bb44dffc62c7e7ce2bca9d02b220ae24f5",
2617
+ "lines": 95,
2618
2618
  "heading": "4.1 模式 B2:在线微服务定制页(OpenAppDialog)"
2619
2619
  },
2620
2620
  {
2621
2621
  "id": "v8-menu-buttons-004",
2622
2622
  "ordinal": 1,
2623
2623
  "destination": "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md",
2624
- "sha256": "f18f04c54a81c7aaf5c79867eda0f7ec716a5e9b05c723dae9b77cde127326f3",
2625
- "lines": 155,
2624
+ "sha256": "9550f2e3a75583bb6f2ab940d423931511f39b6ad8a11fc982c6b24bca6416d1",
2625
+ "lines": 156,
2626
2626
  "heading": "2. 按钮对象 Schema"
2627
2627
  },
2628
2628
  {
@@ -2745,25 +2745,25 @@
2745
2745
  ]
2746
2746
  },
2747
2747
  "v8-mq-mqtt": {
2748
- "originalSha256": "e60ccacc645efe824a9d63842d52f390900b888d9dbd51587ea6012aa527d126",
2749
- "originalLines": 318,
2750
- "prefixSha256": "d60be0f8ff7dc5f171ce6efe81b44950fed1503d38de9b6e45485395565e3bd7",
2751
- "prefixBytes": 811,
2752
- "entryLines": 154,
2748
+ "originalSha256": "179866e71e8e00ba97327b9e1853a62221566811fade4b434056aea75f3ed0a2",
2749
+ "originalLines": 337,
2750
+ "prefixSha256": "d601c2986655b2fbf818fe9739ee41543c4ff3c9df2f12a825e5d4b9a532aa08",
2751
+ "prefixBytes": 801,
2752
+ "entryLines": 175,
2753
2753
  "chunks": [
2754
2754
  {
2755
2755
  "id": "v8-mq-mqtt-000",
2756
2756
  "ordinal": 0,
2757
2757
  "destination": "v8-mq-mqtt/SKILL.md",
2758
- "sha256": "a883bb502b306ada654b8f45bd6f955c84049f3a032568e5ef8e25e24aa1c2c6",
2759
- "lines": 121,
2758
+ "sha256": "4a6559aed1af036591a04002c6e3311d9f0957fbbabbcafdc4a6bad95dabd843",
2759
+ "lines": 140,
2760
2760
  "heading": "V8.MQ — RabbitMQ 消息队列"
2761
2761
  },
2762
2762
  {
2763
2763
  "id": "v8-mq-mqtt-001",
2764
2764
  "ordinal": 2,
2765
2765
  "destination": "v8-mq-mqtt/SKILL.md",
2766
- "sha256": "1f51deb2673c77cdd3a096ca658dfe0f025531760f1aee04987f3bb2723131cf",
2766
+ "sha256": "f65fe365f1adca83c0eabe95f73a658d6d79f33b3d9a8d34c5b35ede841e7d73",
2767
2767
  "lines": 12,
2768
2768
  "heading": "注意事项"
2769
2769
  },
@@ -2786,25 +2786,25 @@
2786
2786
  ]
2787
2787
  },
2788
2788
  "v8-security": {
2789
- "originalSha256": "f84dc7ac07651b87d1e35a0f170c0059e5a42f04a27d75ea654fe4670df92151",
2790
- "originalLines": 491,
2791
- "prefixSha256": "529a335f022a9c01309e2aca8254abf8aa72ea9b3bd4f0e73ec737697118ae51",
2792
- "prefixBytes": 1071,
2793
- "entryLines": 178,
2789
+ "originalSha256": "ddf2ac0fceae3cf50c240b0740be07ae2ba59520950e039fd10413c247390813",
2790
+ "originalLines": 495,
2791
+ "prefixSha256": "e94c6e73f300d807957d87a76f4db2fc7c377855be352ce8c1e7cac9c17d703c",
2792
+ "prefixBytes": 1077,
2793
+ "entryLines": 182,
2794
2794
  "chunks": [
2795
2795
  {
2796
2796
  "id": "v8-security-000",
2797
2797
  "ordinal": 0,
2798
2798
  "destination": "v8-security/SKILL.md",
2799
- "sha256": "0346bd9ca3fe98dd2b589d1777aa1e55cd24cf7dedc69ee65d4ca91461db7dee",
2800
- "lines": 46,
2799
+ "sha256": "d03ee34e72925db55f9022de26dfc251c0d3d69fac52ae6a910d42ddfc142ae7",
2800
+ "lines": 50,
2801
2801
  "heading": "0. 租户动态系统设置与密钥边界"
2802
2802
  },
2803
2803
  {
2804
2804
  "id": "v8-security-001",
2805
2805
  "ordinal": 1,
2806
2806
  "destination": "v8-security/SKILL.md",
2807
- "sha256": "c5868fd8a159b72f1038658873dfee83a9eca68661eebd837ecadab13dea5c22",
2807
+ "sha256": "9e477268919238bb6a2525116de3c8386aa439d8e93c5d66f3893cb07740b374",
2808
2808
  "lines": 13,
2809
2809
  "heading": "0.5 接口引擎配置安全"
2810
2810
  },
@@ -2812,7 +2812,7 @@
2812
2812
  "id": "v8-security-002",
2813
2813
  "ordinal": 2,
2814
2814
  "destination": "v8-security/SKILL.md",
2815
- "sha256": "ed6c3fabf36da5a359778a0e7d085aa9b0d8a2f55337c0c9a1d39da4d72bac95",
2815
+ "sha256": "7229e5f8d200c0dfbab08752405f5e88d7edc80e9e92b6802880c022b09ca893",
2816
2816
  "lines": 28,
2817
2817
  "heading": "1. 防 SQL 注入"
2818
2818
  },
@@ -2828,7 +2828,7 @@
2828
2828
  "id": "v8-security-004",
2829
2829
  "ordinal": 5,
2830
2830
  "destination": "v8-security/SKILL.md",
2831
- "sha256": "e811dff8614c24c751291dda271b1574debccf741c0e166790f5324a3d3594ad",
2831
+ "sha256": "1703ea824e4807b24d30225d41e16fb36b0fecc21c63a4ab0296106185460a27",
2832
2832
  "lines": 22,
2833
2833
  "heading": "4. 防 XSS"
2834
2834
  },
@@ -2928,7 +2928,7 @@
2928
2928
  ]
2929
2929
  },
2930
2930
  "v8-table-event": {
2931
- "originalSha256": "c2e623d0f4456a0603a1acabd2f2e844a534c966ed5af311e2f18e9ab290e936",
2931
+ "originalSha256": "b6edccc8a4a64ffb49e51b914a5ba713c76b3919548c3f6758ff66e47c7db4fd",
2932
2932
  "originalLines": 388,
2933
2933
  "prefixSha256": "de1f151904fd00a31a3c680c26bdb1d9c1a210193193e8bfefb5dc68f4c2bc02",
2934
2934
  "prefixBytes": 717,
@@ -2954,7 +2954,7 @@
2954
2954
  "id": "v8-table-event-002",
2955
2955
  "ordinal": 2,
2956
2956
  "destination": "v8-table-event/SKILL.md",
2957
- "sha256": "1956a46955c57434582c8dd5a41ffe9d445a74f42b26706c7d2033dfb822ffc0",
2957
+ "sha256": "86c13bfd4dbc035e5498fe072ed176780ed31975b64eda09c1a378de986ab73d",
2958
2958
  "lines": 9,
2959
2959
  "heading": "事件触发规则"
2960
2960
  },
@@ -3034,7 +3034,7 @@
3034
3034
  "id": "v8-table-event-012",
3035
3035
  "ordinal": 12,
3036
3036
  "destination": "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md",
3037
- "sha256": "380fc790dcf02a27f8b47d9a894b98cb90ebc7ea6b57a5b30075d3d9d32a0262",
3037
+ "sha256": "db5bf410bc6babf14d3d91cc61b9875c81bc1be24b2c1b7c62334bc6819e4e55",
3038
3038
  "lines": 18,
3039
3039
  "heading": "注意事项"
3040
3040
  }
@@ -3061,11 +3061,11 @@
3061
3061
  ]
3062
3062
  },
3063
3063
  "v8-workflow": {
3064
- "originalSha256": "4166c7c69048aafd864212a923853c140e837b9e7b5d2805e1c60a191dc8bae1",
3064
+ "originalSha256": "0392bb7a0a39cdb807bd9dd9f4c8a27342344e93cedc5151b23b7762a91db409",
3065
3065
  "originalLines": 325,
3066
3066
  "prefixSha256": "f6e971cb0401edcf858ee18f0b293f8dc40135e4252789712d1d15fb6b4dd70d",
3067
3067
  "prefixBytes": 714,
3068
- "entryLines": 184,
3068
+ "entryLines": 192,
3069
3069
  "chunks": [
3070
3070
  {
3071
3071
  "id": "v8-workflow-000",
@@ -3119,7 +3119,7 @@
3119
3119
  "id": "v8-workflow-006",
3120
3120
  "ordinal": 8,
3121
3121
  "destination": "v8-workflow/SKILL.md",
3122
- "sha256": "e67b72bf060a38ed5f94a57f3978026d151bb971fcf47a0b30a434dba819c264",
3122
+ "sha256": "8e2a82330c7f49c3a03920123531d310ea329fd310179918d835e3c05d49771a",
3123
3123
  "lines": 22,
3124
3124
  "heading": "前端发起流程"
3125
3125
  },
@@ -3196,11 +3196,11 @@
3196
3196
  ]
3197
3197
  },
3198
3198
  "workspace-conventions": {
3199
- "originalSha256": "addc28399c319334eb7c437c23dad04fea17a52b899c355f5b6e3ea86110516e",
3200
- "originalLines": 560,
3199
+ "originalSha256": "e3e9df472a85d8a72bac517100de0a8f40d251c524595d14b1d59f8a38809e66",
3200
+ "originalLines": 571,
3201
3201
  "prefixSha256": "b58cd0a59d3643525695b94a5941278a5088c33cbe2ce81620359f37db69878e",
3202
3202
  "prefixBytes": 252,
3203
- "entryLines": 208,
3203
+ "entryLines": 219,
3204
3204
  "chunks": [
3205
3205
  {
3206
3206
  "id": "workspace-conventions-000",
@@ -3246,8 +3246,8 @@
3246
3246
  "id": "workspace-conventions-005",
3247
3247
  "ordinal": 5,
3248
3248
  "destination": "workspace-conventions/SKILL.md",
3249
- "sha256": "fff5f355bea04077c15039b668f0a02b1ed018f5e76aaee47113b6be777fef4a",
3250
- "lines": 26,
3249
+ "sha256": "52273704562fac1245fa364ca811949ccb2685dce8375f99bdc4029a314dd758",
3250
+ "lines": 37,
3251
3251
  "heading": "Microi 源码路径速查(工作区根相对路径)"
3252
3252
  },
3253
3253
  {
package/skills/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 包含的 Skills
10
10
 
11
- 当前仓库包含 64 个 `SKILL.md`。以下清单按任务类型组织;AI 必须先完整读取与当前任务匹配的 Skill,再执行源码、MCP、文档或交付操作。
11
+ 当前仓库包含 65 个 `SKILL.md`。以下清单按任务类型组织;AI 必须先完整读取与当前任务匹配的 Skill,再执行源码、MCP、文档或交付操作。
12
12
 
13
13
  ### V8 引擎核心(后端)
14
14
 
@@ -65,6 +65,7 @@
65
65
  | **translate-engine** | 多语言词条、翻译供应商、租户隔离、缓存和批量翻译 | `translate-engine/SKILL.md` |
66
66
  | **ai-engine** | 模型代理、NL2SQL/NL2V8、Schema/Skill 关键词检索与可选向量融合 | `ai-engine/SKILL.md` |
67
67
  | **ai-platform-governance** | 门户/身份/配置/发布、服务韧性、Trace/日志、资产协作与可恢复导入 | `ai-platform-governance/SKILL.md` |
68
+ | **system-observability** | 系统日志、Trace、热点接口、资源监控、网络流量归因、安全事件与 AI 查询/治理 | `system-observability/SKILL.md` |
68
69
  | **app-store** | 应用包、Manifest、后台安装、差异升级、回滚和验收 | `app-store/SKILL.md` |
69
70
  | **microi-sso** | 双向 OIDC/SAML2/CAS、账号映射、Secret/证书、官方商城发布与伙伴联调 | `microi-sso/SKILL.md` |
70
71
 
@@ -7,7 +7,7 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
7
7
 
8
8
  # Microi AI Engine
9
9
 
10
- 平台媒体生成的受控 HTTP 入口包括 `/api/Ai/GenerateMiniMaxImage`、`/api/Ai/GenerateMiniMaxMusic`、`/api/Ai/CreateMiniMaxVideo`、`/api/Ai/GetMiniMaxVideoTask`、`/api/Ai/GetMiniMaxVideoFile`、`/api/Ai/PersistMiniMaxVideoFile`;AI 工作流入口统一位于 `/api/AIWorkFlow/*`。调用方只提交业务参数和模型选择,供应商密钥、租户配额、任务归属和文件读取权限由服务端判定。生成结果必须先进入当前租户 HDFS 或受控临时句柄,浏览器不接触供应商密钥、图片 Base64、音频十六进制或原始视频任务 Id。`PersistMiniMaxVideoFile` 只能转存当前登录用户所属且已完成的任务,禁止作为任意 URL 搬运器。
10
+ 平台媒体生成的受控 HTTP 入口包括 `/api/Ai/GenerateMiniMaxImage`、`/api/Ai/GenerateMiniMaxMusic`、`/api/Ai/CreateMiniMaxVideo`、`/api/Ai/GetMiniMaxVideoTask`、`/api/Ai/GetMiniMaxVideoFile`、`/api/Ai/PersistMiniMaxVideoFile`;AI 工作流统一调用 Managed 接口引擎 `/apiengine/platform-ai-workflow`,通过 `Action` 选择概览、节点详情、生成、列表、读取、保存或删除。调用方只提交业务参数和模型选择,供应商密钥、租户配额、任务归属和文件读取权限由服务端判定。生成结果必须先进入当前租户 HDFS 或受控临时句柄,浏览器不接触供应商密钥、图片 Base64、音频十六进制或原始视频任务 Id。`PersistMiniMaxVideoFile` 只能转存当前登录用户所属且已完成的任务,禁止作为任意 URL 搬运器。
11
11
 
12
12
  ## 能力
13
13
 
@@ -21,14 +21,14 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
21
21
  - 有官方 MCP 权限时,固定使用 `microi_itdos`(`https://api.itdos.com`、`OsClient=iTdos`)更新官方母版、制作并发布对应应用,按内容哈希/包版本回读后,再由目标租户 MCP 安装或更新。无官方权限时只通过当前用户自己的 MCP/Manifest 更新其数据库并回读,不得假借通用升级器越权发布官方应用。
22
22
  - `Microi.Upgrade` 只保留应用商城/安装器启动前必需的核心物理兼容或协议迁移,并要求持久化版本门、共享租约、幂等、失败不推进版本。禁止每次启动对每个租户重跑不断增长的历史迁移清单。
23
23
  - 平台通用缺陷的交付证据必须分开记录:源码修复、官方母版资源、商城包发布后回读、目标租户后台安装任务、目标租户资源回读和真实 UI/接口验收;其中任一步未完成都不能笼统称为“已发布并安装”。
24
- - 任何计划让全部吾码租户通过“安装/更新官方应用”获得的标准字段、布局、菜单、页面或种子数据,必须先在官方 `microi_itdos` 主租户创建并回读,再从该主租户按精确菜单/表资源导出新版 `AppPakcet`、单调递增应用版本并发布。禁止先只在客户/子租户补字段,再用本地手工 JSON 冒充官方母版;客户验证应发生在官方包发布之后。
25
- - 同一标准能力若同时属于基础 SaaS 空库包和独立官方应用(例如系统设置、系统账号),两条交付链都要更新:基础包保证新租户初始化完整,独立应用保证存量租户可增量安装。发布后分别核对 `PackageInfo.Version`、物理列、`diy_field` 布局节点和商城行 `AppVersion/AppPakcet`,不能用其中一条替代另一条。
24
+ - 任何计划让全部吾码租户通过“安装/更新官方应用”获得的标准字段、布局、菜单、页面或种子数据,必须先在官方 `microi_itdos` 主租户创建并回读,再从该主租户按精确菜单/表资源导出新版包、单调递增应用版本并发布。包正文以 `PackageHdfsPath + PackageSha256 + PackageSize` 为事实源;`AppPakcet` 只作旧版读取兼容,验证完成后应为空。禁止先只在客户/子租户补字段,再用本地手工 JSON 冒充官方母版;客户验证应发生在官方包发布之后。
25
+ - 同一标准能力若同时属于基础 SaaS 空库包和独立官方应用(例如系统设置、系统账号),两条交付链都要更新:基础包保证新租户初始化完整,独立应用保证存量租户可增量安装。发布后分别核对 `PackageInfo.Version`、物理列、`diy_field` 布局节点、商城行 `AppVersion` 和 HDFS 包指针/下载哈希,不能用其中一条替代另一条。
26
26
 
27
27
  ## 吾码创建人开发时的强制发布闭环
28
28
 
29
29
  - 每次任务先检查工作区根的 `Microi.Server/Microi.net/`。只有目录存在且 `rg --files Microi.Server/Microi.net` 能找到至少一个真实源码文件时,才确认当前是吾码创建人在官方完整源码工作区开发;空目录不算,且不要求本次修改位于该目录。确认后,对任意目录中的平台基础能力执行修改、构建或交付时,官方应用数据包都不是“以后再补”的附加产物,而是本次实现的组成部分。目录缺失或为空时按普通用户工作区处理;纯审查、解释或诊断仍保持只读。
30
30
  - 触发资源包括系统设置、表、字段、Tab、菜单、权限、接口引擎、事件、数据源、页面、打印、工作流、任务、平台内置微服务和可幂等种子数据。开始修改时就确定资源归属:系统设置、登录身份、个人中心等通常归 `app.microi.saas-engine`;表单引擎归 `app.microi.form-engine`;模块引擎归 `app.microi.module-engine`;应用商城归 `app.microi.store`。同一能力跨多个包时逐包更新,禁止只挑一个包。
31
- - 强制闭环依次包含:①源码和定向测试;②通过绑定 `https://api.itdos.com + OsClient=iTdos` 的 `microi_itdos` 更新并回读官方母版资源;③从母版导出或按受审计发布契约生成本地应用包,单调提升包版本并核对资源数量、版本和 SHA-256;④发布对应官方 Platform 应用;⑤重新读取商城行和完整 `AppPakcet`,核对 `Published/IsApprove`、`AppVersion`、`PackageInfo.Version`、资源正文和内容哈希;⑥立即做一次同输入幂等重跑,确认无重复升版或漂移。任务还指定目标租户时,再安装/更新并等待后台任务 `Succeeded` 后回读真实资源。
31
+ - 强制闭环依次包含:①源码和定向测试;②通过绑定 `https://api.itdos.com + OsClient=iTdos` 的 `microi_itdos` 更新并回读官方母版资源;③从母版导出或按受审计发布契约生成本地应用包,单调提升包版本并核对资源数量、版本和 SHA-256;④发布对应官方 Platform 应用;⑤重新读取商城行的小型 HDFS 指针,用公有下载或受权私有下载取得原始 JSON,核对 `Published/IsApprove`、`AppVersion`、`PackageInfo.Version`、UTF-8 字节数、SHA-256 和资源正文;⑥立即做一次同输入幂等重跑,确认无重复升版或漂移。任务还指定目标租户时,再安装/更新并等待后台任务 `Succeeded` 后回读真实资源。
32
32
  - 本地包文件、生成器成功、单元测试通过、返回 TaskId 或 HTTP 200 都不能代替官方主数据库与商城回读。`.resource-sync-base` 只能在官网发布后逐项哈希一致时由同步器推进,不得与本地候选一起手工修改。若官方身份、MCP 登录或发布门禁失效,必须保留准确的未发布边界并修复链路;不得把本地 JSON 宣称为“其它吾码用户已经可以安装”。
33
33
  - 应用包不得携带真实地图 Key、Token、连接串或其它租户秘密。浏览器供应商 Key 等配置只交付字段/设置模板和安全读取能力,实际值由每个目标租户在安装后自行填写。
34
34
 
@@ -43,7 +43,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
43
43
  ## 接口引擎资源所有权(强制)
44
44
 
45
45
  - 新发布包必须声明 `ResourcePolicies.ApiEngines`,不得再依赖“同 Key 直接覆盖”。官方不可随租户修改的核心使用 `{ Ownership:'Application', UpgradePolicy:'Managed' }`;提供给租户改业务的 Hook 使用 `{ Ownership:'Tenant', UpgradePolicy:'CreateIfMissing' }`。
46
- - 发布器从上一版 `AppPakcet.SysApiEngines` 计算 `BaseHash`;导入成功后把本版摘要写入 `sys_microistoreversion.InstallResult.ResourceState.ApiEngines`。普通/社区应用仍按 Base/Local/Incoming 三方保护:`Local == Base` 才更新,`Local != Base && Local != Incoming` 必须冲突回滚。唯一覆盖例外是从固定 `https://api.itdos.com + iTdos` 实时回读并校验为官方 `ApplicationType=Platform` 的应用:其中 `Ownership=Application + UpgradePolicy=Managed` 属于平台发行物,安装/更新按包覆盖本地差异;离线包、自报官方、非 Platform 来源都不能获得该权限。
46
+ - 发布器从上一版安装包正文的 `SysApiEngines` 计算 `BaseHash`;正文可能来自已验证的 HDFS 指针或旧版 `AppPakcet`。导入成功后把本版摘要写入 `sys_microistoreversion.InstallResult.ResourceState.ApiEngines`。普通/社区应用仍按 Base/Local/Incoming 三方保护:`Local == Base` 才更新,`Local != Base && Local != Incoming` 必须冲突回滚。唯一覆盖例外是从固定 `https://api.itdos.com + iTdos` 实时回读并校验为官方 `ApplicationType=Platform` 的应用:其中 `Ownership=Application + UpgradePolicy=Managed` 属于平台发行物,安装/更新按包覆盖本地差异;离线包、自报官方、非 Platform 来源都不能获得该权限。
47
47
  - `CreateIfMissing` 只在目标 Key 不存在时创建,存在时不得对齐 Id、源码、启用状态或其它字段。扩展模板发布后即归租户维护;后续版本禁止把同一 Key 改回 `Managed` 接管,确需新的官方核心时发布新 Key 并显式迁移。
48
48
  - 官方功能采用“Managed 核心 + CreateIfMissing Hook”。核心只提供稳定协议和默认行为,并在可信官方 Platform 包更新时覆盖升级;客户日志、写表、通知和业务动作放 Hook,并以稳定 `EventId`、唯一约束或 outbox 幂等。`CreateIfMissing` 一旦交给租户维护,即使后续官方包误改为 Managed 也必须冲突回滚。
49
49
  - 历史包未声明策略时只能按旧兼容流程安装;重新发布时发布器必须生成策略。验收至少覆盖首次安装、可信官方 Managed 本地有差异仍覆盖、普通应用核心差异冲突回滚、Hook 被改后保持原样、重复安装、两节点竞态,以及官方发布数据库连 `ValidateOnly` 也禁止执行安装器。
@@ -77,15 +77,19 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
77
77
  - MySQL 宽表触发 65,535 字节行内上限时,只允许把不参与索引的 `varchar` 配置列无损提升为 `mediumtext`,并把类型覆盖持久化到后台任务 checkpoint;索引列和非行宽错误必须失败关闭。发布包对长连接串、密钥、回调地址、域名/白名单等字段应直接使用 `mediumtext`,同时更新 `DiyFields` 与建表 DDL,不能长期依赖安装时猜测。
78
78
  - 卸载是破坏性操作,必须明确列出将删除/保留的资源、二次确认并优先软删除/归档业务数据。
79
79
 
80
- ## 联邦商城源、公开范围与历史版本(强制)
81
-
82
- - 每个主租户和子租户都可以发布自己的应用;应用行用 `IsPublic` 表达公开范围,缺省/历史空值按公开兼容。公开应用允许未登录来源读取和安装,私有应用只允许来源登录成功后的授权身份读取,列表、详情、版本接口都必须重复执行这一权限判断。
80
+ ## 联邦商城源、公开范围与历史版本(强制)
81
+
82
+ - 每个主租户和子租户都可以发布自己的应用;应用行用 `IsPublic` 表达公开范围,缺省/历史空值按公开兼容。公开应用允许未登录来源读取和安装,私有应用只允许来源登录成功后的授权身份读取,列表、详情、版本接口都必须重复执行这一权限判断。
83
+ - 新版安装包正文不得长期内联在 `sys_microistore.AppPakcet`,也不得随 `mic_data_version.Data` 重复复制。公开应用写入 HDFS 公有桶并记录 `HdfsPublic`,私有应用写入私有桶并记录 `HdfsPrivate`;数据库只保存 `PackageId/PackageHdfsPath/PackageSha256/PackageSize/PackageContentType/PackageFormatVersion/PackageUploadedAt`。`IsPublic` 历史空值按公开兼容,但所有新建应用必须显式落为 `1/0`。
84
+ - 发布顺序必须是“UTF-8 JSON 上传 → HDFS 回读 → 字节数和 SHA-256 一致 → 写入不可变包索引及商城指针 → 以原值 CAS 清空 `AppPakcet`”。普通发布不得仅凭 Redis 命中跳过 HDFS 回读;只有受控历史压缩可复用内容寻址缓存,安装端仍必须独立下载并校验。公开包可通过 FileServer/CDN 公有地址读取;私有包只能由来源后端在当前授权身份下签发短期下载地址,Token、签名 URL 和包正文不得进入浏览器配置、日志或后台任务参数。
85
+ - `mic_data_version` 历史快照保留不可变 `StoreVersionId` 和同一组包指针,因此旧版本仍可精确安装,不再要求 `Data` 内含完整 JSON。导入器先校验快照版本/应用身份,再按指针下载并在解析前核对大小与哈希;指针缺失时才回退旧版内联字段,禁止快照不匹配时退回当前版本。
86
+ - 旧库容量治理使用 `compact-microi-store-packages` 超级管理员持久后台任务:先幂等补齐物理列,再用有界 `Id` 游标逐批处理;每个包都先上传回读,随后 CAS 清理当前行或历史快照。禁止对数 GB `mic_data_version.Data` 执行全表 `LIKE`/包正文计数。逻辑大字段清空后,MySQL 表空间文件是否立即缩小取决于存储引擎;`OPTIMIZE TABLE` 只能在备份完成的维护窗口由管理员另行执行,不能由应用安装或压缩任务自动触发。
83
87
  - 商城来源以 `ApiBase + OsClient` 唯一定位。添加来源先只读发现系统标题、验证码策略和公开应用数;需要私有应用时再登录。帐号、密码、Token 不能写浏览器配置或商城来源 JSON;密码只用于本次登录,长会话 Token 以 `MCP/Mobile` 非 PC 客户端签发,并由当前租户后端加密保存到 `mci_system_setting`,浏览器只持有不具备取密能力的凭据 Key。
84
88
  - 后端来源代理必须固定已保存的 `ApiBase + OsClient`,拒绝过期 Token、访问密钥会话、非超级管理员、非 HTTPS 外网地址、重定向漂移和超限响应;Token 不得返回浏览器、日志、审计或应用包。退出登录同步删除服务端密文。
85
89
  - 商城主页面统一承载应用市场、已安装、我发布的应用、安装离线包和来源管理,不能再通过独立菜单或路由割裂上下文。来源增删改启停逐项自动保存;来源管理、详情和复杂配置使用平台统一 `80%` 可拖动大圆角 Dialog,遮罩服从正向开关 `sys_config.FormMaskBlur`,缺失或 `0/false` 默认关闭毛玻璃。
86
90
  - 每张应用卡必须显示预览图、公开范围、分类、最新版本、当前租户已安装版本及状态色。来源卡必须显示其公开数和当前授权可访问总数;平台官方发布节点只显示“平台官方应用源”身份标记,不显示安装、更新或重新安装操作。
87
- - 安装可明确选择 `sys_microistore` 当前版本或 `mic_data_version` 中仍含完整包正文的历史快照;后台任务在首次取包时必须把计划中的 `AppVersion` 解析为匹配且包含完整包正文的不可变 `StoreVersionId`,写入 checkpoint,并在全部后续分片一直传到详情取包。发布方中途升版时继续完成已锁定快照,新版留给下一轮盘点;快照缺失、版本不匹配、身份变化或快照 Id 漂移必须失败关闭,禁止退回易变当前行。实际安装版本写回 `sys_microistoreversion`。回退旧版属于重新安装,不得静默换成最新版。
88
- - 应用详情的版本选择必须服务端分页和搜索,默认每页不超过 20 条;当前版本固定置顶,历史版本只返回仍包含完整包正文的可安装状态。禁止用 `_PageSize:500` 或一次加载全部版本后在浏览器过滤。翻页、搜索与页大小切换都必须保持已选版本语义并显示总数。
91
+ - 安装可明确选择 `sys_microistore` 当前版本或 `mic_data_version` 中仍含完整包正文或已验证包指针的历史快照;后台任务在首次取包时必须把计划中的 `AppVersion` 解析为匹配且可安装的不可变 `StoreVersionId`,写入 checkpoint,并在全部后续分片一直传到详情取包。发布方中途升版时继续完成已锁定快照,新版留给下一轮盘点;快照缺失、版本不匹配、身份变化或快照 Id 漂移必须失败关闭,禁止退回易变当前行。实际安装版本写回 `sys_microistoreversion`。回退旧版属于重新安装,不得静默换成最新版。
92
+ - 应用详情的版本选择必须服务端分页和搜索,默认每页不超过 20 条;当前版本固定置顶,历史版本只返回含完整旧包或有效 HDFS 指针的可安装状态。禁止用 `_PageSize:500` 或一次加载全部版本后在浏览器过滤。翻页、搜索与页大小切换都必须保持已选版本语义并显示总数。
89
93
  - 商城详情、来源管理等 Teleport 弹层必须使用宿主级固定遮罩,毛玻璃覆盖完整可视区域;标题栏拖动按弹层真实尺寸限制四边,窗口缩放后重新限制,不能依赖固定像素最大位移或允许内容越出视口。
90
94
  - “我发布的应用”只读取当前登录用户拥有的记录,可以包含草稿和构建失败项;普通商城列表只读取已发布项。两者必须在服务端按 Owner 和发布状态过滤,不能依赖浏览器过滤后再分页。
91
95
 
@@ -44,7 +44,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
44
44
  ---
45
45
 
46
46
  <!-- /microi-progressive:chunk -->
47
- <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=113995bb5eb3f6d9dfdf0b8d8cb45c415dc931c244beb80dd976f56ce782fb13 -->
47
+ <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=ca442fa8a4990040aa7172dd37b49437bc6de0c9b1f88d889a30f5e936321aa1 -->
48
48
  ## 2. 表单引擎三层结构
49
49
 
50
50
  ### 模块级跨端视图