@microi.net/cli 6.2.2 → 6.2.4

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 (57) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +117 -116
  10. package/scripts/microi-cli.js +63 -63
  11. package/scripts/microi-skills.meta.json +268 -253
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +83 -83
  14. package/skills/app-store/SKILL.md +7 -6
  15. package/skills/microi-ai-application/SKILL.md +5 -5
  16. package/skills/microi-client-frontend/SKILL.md +11 -7
  17. package/skills/microi-codex-installer/SKILL.md +6 -0
  18. package/skills/microi-datasource-mapping/SKILL.md +1 -0
  19. package/skills/microi-db-schema/SKILL.md +8 -0
  20. package/skills/microi-docs-coverage/references/capability-map.md +10 -10
  21. package/skills/microi-form-engine/SKILL.md +52 -0
  22. package/skills/microi-form-engine/references/component-config-index.md +1 -1
  23. package/skills/microi-form-engine/references/data-source-events.md +6 -1
  24. package/skills/microi-form-layout/SKILL.md +1 -1
  25. 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 +6 -0
  26. package/skills/microi-left-right-layout/SKILL.md +22 -0
  27. package/skills/microi-microservice/SKILL.md +388 -382
  28. package/skills/microi-microservice/references/runtime-delivery.md +15 -0
  29. package/skills/microi-ui/SKILL.md +192 -192
  30. 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
  31. package/skills/module-engine/SKILL.md +7 -1
  32. package/skills/page-engine/SKILL.md +7 -1
  33. package/skills/page-engine/examples/go-view-operations.json +8467 -0
  34. package/skills/page-engine/examples/go-view-procurement.json +2800 -0
  35. package/skills/page-engine/references/go-view-json.md +62 -0
  36. package/skills/ui-design/SKILL.md +227 -223
  37. package/skills/ui-design/assets/pattern-showcase/index.html +2 -2
  38. package/skills/ui-design/assets/templates/MCI-DESIGN.md +221 -206
  39. package/skills/ui-design/references/data-workspace-density.md +77 -0
  40. package/skills/ui-design/references/design-pattern-library.md +186 -184
  41. package/skills/ui-design/references/mci-design-contract.md +163 -163
  42. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +2 -1
  43. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +165 -164
  44. 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 +237 -235
  45. 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 +154 -152
  46. 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
  47. package/skills/uniapp-mall-assets/SKILL.md +7 -2
  48. package/skills/v8-crud-api/SKILL.md +2 -1
  49. package/skills/v8-explorer-tree/SKILL.md +22 -1
  50. package/skills/v8-menu-buttons/SKILL.md +2 -0
  51. package/skills/v8-saas-multi-tenant/SKILL.md +6 -0
  52. package/skills/v8-security/SKILL.md +11 -1
  53. package/skills/v8-sql-query/SKILL.md +38 -1
  54. package/skills/v8-sql-query/examples/business-query.js +18 -0
  55. package/skills/v8-table-event/SKILL.md +51 -2
  56. 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 +3 -1
  57. package/skills/vision-engine/references/video-timeline.md +52 -0
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "6.2.2",
2
+ "version": "6.2.4",
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.Agent/bump-version.js",
5
- "updatedAt": "2026-11-04T17:11:04.392Z"
5
+ "updatedAt": "2026-11-06T13:03:09.986Z"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-11-04T16:35:17.549Z",
3
+ "generatedAt": "2026-11-06T10:46:35.029Z",
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": "e00e8cb939d01a254c40b985ec212b97643a9237ab3a082c2b251950215b4b28",
173
- "originalLines": 747,
172
+ "originalSha256": "d28132d23345c1c14cb1c1b88b3f0bee53bbf31d35dd1dc501af71cf6d50cd6a",
173
+ "originalLines": 751,
174
174
  "prefixSha256": "578d60fc1b769bff36396db2c0c6b2affa61ad02e956d8ad574e8238764b4008",
175
175
  "prefixBytes": 2231,
176
- "entryLines": 281,
176
+ "entryLines": 285,
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": "9d2a95bc17bfd6e11dcb7d3d07d61dbbc0c0939614f28d0a8ed330e5d2200dd6",
199
- "lines": 139,
198
+ "sha256": "5d3b01eb376defa4bcbf754a617bcfab2e0cfa56e492c6f28c081488a049ba2b",
199
+ "lines": 144,
200
200
  "heading": "2. 表单引擎三层结构"
201
201
  },
202
202
  {
@@ -211,8 +211,8 @@
211
211
  "id": "microi-client-frontend-004",
212
212
  "ordinal": 7,
213
213
  "destination": "microi-client-frontend/SKILL.md",
214
- "sha256": "c122ac25dd00abc7af5751c6db50fe5f9fed29a9979f454ba9a23209d25dbaca",
215
- "lines": 45,
214
+ "sha256": "7cf7bca3618237a68089a9891292028c6293c17eee973cb3af40afaef3740383",
215
+ "lines": 44,
216
216
  "heading": "7. 验证建议"
217
217
  },
218
218
  {
@@ -316,10 +316,10 @@
316
316
  ]
317
317
  },
318
318
  "microi-form-layout": {
319
- "originalSha256": "8aa4b1223988df95bf6f233362f2eba7540ea4f323fdd20f45680ef3ad0a5bfa",
319
+ "originalSha256": "2a402ea3d2db1d8d23ee4a5705e5be962955e52d0c54bab3f4487303fbf0e8bf",
320
320
  "originalLines": 412,
321
- "prefixSha256": "0f3634988800f3bf2f72771dea8c834d08fdfb4d18dc486305a80d55b548b006",
322
- "prefixBytes": 4404,
321
+ "prefixSha256": "61191c1175ae3f5c511212d820378df72838a58ff5e23f4167fd03b32da93c58",
322
+ "prefixBytes": 4503,
323
323
  "entryLines": 206,
324
324
  "chunks": [
325
325
  {
@@ -877,17 +877,17 @@
877
877
  ]
878
878
  },
879
879
  "microi-ui": {
880
- "originalSha256": "85e4040691801d4bebfc61c98324627c6ae676368dd184b82e5d890486c77608",
880
+ "originalSha256": "76e5aec46ca55d1e8707578e1b475ffa1ab66783eb9b4c35f940c71efc099e56",
881
881
  "originalLines": 343,
882
- "prefixSha256": "75af6f0201d9f479c55fe326907a4b682d038895bc0780501331d6bf66a8bfb3",
883
- "prefixBytes": 1523,
882
+ "prefixSha256": "3ead290dee4a8e42582aa01a9d5de7ce81612222fbed81674bf9f783c907ed84",
883
+ "prefixBytes": 1538,
884
884
  "entryLines": 193,
885
885
  "chunks": [
886
886
  {
887
887
  "id": "microi-ui-000",
888
888
  "ordinal": 0,
889
889
  "destination": "microi-ui/SKILL.md",
890
- "sha256": "f7196312987e0d8cb833f3ae0d96f014d57e2ca1fb120333accbe25a05f7c83d",
890
+ "sha256": "a400da7a05d4e24e763880a997f27c1fcd859bcbe01693765695f02214bdb550",
891
891
  "lines": 15,
892
892
  "heading": "核心承诺"
893
893
  },
@@ -895,7 +895,7 @@
895
895
  "id": "microi-ui-001",
896
896
  "ordinal": 1,
897
897
  "destination": "microi-ui/SKILL.md",
898
- "sha256": "044beeb0089cefa69844d2ff8a39f2130987af557cc63c03701c2b822f0b9c88",
898
+ "sha256": "33d0fbc900090983a0e5959e10f611a3ebb3b9b2c0dc1d13ce7569cfc4701211",
899
899
  "lines": 22,
900
900
  "heading": "内置设计模式"
901
901
  },
@@ -903,7 +903,7 @@
903
903
  "id": "microi-ui-002",
904
904
  "ordinal": 2,
905
905
  "destination": "microi-ui/SKILL.md",
906
- "sha256": "cc3389777d88e0dfa5f83cdae60fbe5e23605525cf7ad95a28a41b9c71f8863c",
906
+ "sha256": "37946ecc4b9c4cdca0be4279d6538070cbc9126d9d17305aaaddb0f0806d2fdc",
907
907
  "lines": 9,
908
908
  "heading": "源码结构"
909
909
  },
@@ -911,7 +911,7 @@
911
911
  "id": "microi-ui-003",
912
912
  "ordinal": 3,
913
913
  "destination": "microi-ui/SKILL.md",
914
- "sha256": "749502e10b376884c9f2038fe2e0e385eab8f72646ce1af7daf5c18161c87a79",
914
+ "sha256": "102a394c92631d141e4d3eebcaa1994fc6afca07f7f8d5fb65e59fb2c4ccd63c",
915
915
  "lines": 23,
916
916
  "heading": "默认要求"
917
917
  },
@@ -919,7 +919,7 @@
919
919
  "id": "microi-ui-004",
920
920
  "ordinal": 4,
921
921
  "destination": "microi-ui/SKILL.md",
922
- "sha256": "e40239e4859edb17b2c0bb2bc39009692c3a1207d59b3dd11a983130aede75c2",
922
+ "sha256": "9a12f14587d90978ca676034d65422b7d63dd804c0120164a8e23be957937d64",
923
923
  "lines": 33,
924
924
  "heading": "组件选择"
925
925
  },
@@ -927,7 +927,7 @@
927
927
  "id": "microi-ui-005",
928
928
  "ordinal": 5,
929
929
  "destination": "microi-ui/SKILL.md",
930
- "sha256": "7cd46e4c2b14511700c0c30b449ceff038c029f451e03b7963892354c548ad11",
930
+ "sha256": "f46f6672b60d4faad4a0fc501036bcb7b9d04545952ad8acb716668aac699454",
931
931
  "lines": 62,
932
932
  "heading": "高品质移动端视觉标准"
933
933
  },
@@ -935,7 +935,7 @@
935
935
  "id": "microi-ui-006",
936
936
  "ordinal": 6,
937
937
  "destination": "microi-ui/references/progressive-01-移动端场景蓝图.md",
938
- "sha256": "640cefe2522ed4fa107299f8cebd22f9adb123f2cfa137841483aa43dc2ab446",
938
+ "sha256": "40ae240fde9553bb813fcce576d090ade894cb920da1b3f4f45975f819a10d50",
939
939
  "lines": 111,
940
940
  "heading": "移动端场景蓝图"
941
941
  },
@@ -943,7 +943,7 @@
943
943
  "id": "microi-ui-007",
944
944
  "ordinal": 7,
945
945
  "destination": "microi-ui/references/progressive-01-移动端场景蓝图.md",
946
- "sha256": "7160d9b28fb119dc5ee9c0a59e6a0a333defee6dab7dce52f5e56a8354e597e7",
946
+ "sha256": "cd73bb934f8531154f73f5ed197c7379c5d9c4f37c60d8275272df4a05bcbe81",
947
947
  "lines": 11,
948
948
  "heading": "网站/PC 站标准"
949
949
  },
@@ -951,7 +951,7 @@
951
951
  "id": "microi-ui-008",
952
952
  "ordinal": 8,
953
953
  "destination": "microi-ui/references/progressive-01-移动端场景蓝图.md",
954
- "sha256": "4f6b3174c3353ba42388b1c2cdbeea5262adfbbccbd1021667ae642c80bf7a60",
954
+ "sha256": "77e0a70e1131fe90354eba315727bbd2f49c5929a98c767cb3dfef71f0c55234",
955
955
  "lines": 13,
956
956
  "heading": "后台菜单配套"
957
957
  },
@@ -959,7 +959,7 @@
959
959
  "id": "microi-ui-009",
960
960
  "ordinal": 9,
961
961
  "destination": "microi-ui/references/progressive-01-移动端场景蓝图.md",
962
- "sha256": "741009676a3161ce7aed258306b759ffb8eeca3ee681c55fd4fc5b4fcc823059",
962
+ "sha256": "2fe8adfc7c7d422a94ad667934c71113bbfced5df199a2a7ff0c14ceddb32373",
963
963
  "lines": 19,
964
964
  "heading": "AI 实施清单"
965
965
  },
@@ -967,7 +967,7 @@
967
967
  "id": "microi-ui-010",
968
968
  "ordinal": 10,
969
969
  "destination": "microi-ui/references/progressive-01-移动端场景蓝图.md",
970
- "sha256": "fe2debba61f4ebdab4d67df7df972c5c7456a2eea4e3b4fef6a04256165e999d",
970
+ "sha256": "4cba6feaad134c973d51943e622199c944d12b67a860894a5415cfcd7eeb831f",
971
971
  "lines": 20,
972
972
  "heading": "禁止输出"
973
973
  }
@@ -1240,11 +1240,11 @@
1240
1240
  ]
1241
1241
  },
1242
1242
  "page-engine": {
1243
- "originalSha256": "f78874306dcf69d9d78a8afcab395cf0da0928f287549151454878ddb2543aea",
1244
- "originalLines": 498,
1245
- "prefixSha256": "80274e1eed95e3ea4816f244ee711ac92f4b43d2cb51798f2afd127728a92da0",
1246
- "prefixBytes": 6685,
1247
- "entryLines": 250,
1243
+ "originalSha256": "70a5ff3b1731fb37377ecd3de472c496791ab9342a2f4afd9d9526ddb4dd7228",
1244
+ "originalLines": 504,
1245
+ "prefixSha256": "275d241756ef499f32137058e70c4ab73123d9491c1341a27b733583592ae0fb",
1246
+ "prefixBytes": 7505,
1247
+ "entryLines": 256,
1248
1248
  "chunks": [
1249
1249
  {
1250
1250
  "id": "page-engine-000",
@@ -1654,17 +1654,17 @@
1654
1654
  ]
1655
1655
  },
1656
1656
  "ui-design": {
1657
- "originalSha256": "504a6106b863e05570d807c05ffd53ca6cb1018ded0fda829c27a0d80fc33a66",
1658
- "originalLines": 1643,
1659
- "prefixSha256": "744a375f6365c12aa0dd3a3158a6b3f6af4feecb482e01fa474a4fc48fdf50d0",
1660
- "prefixBytes": 1141,
1661
- "entryLines": 224,
1657
+ "originalSha256": "66f933fe29b2e92085ceb312f325f1bae47f0442f4ae09ee61d0daaba76f14e6",
1658
+ "originalLines": 1653,
1659
+ "prefixSha256": "fe80f1234b699c315ae180876dd81f374516eee7d57455e4a4b2ffca488f7d9a",
1660
+ "prefixBytes": 1679,
1661
+ "entryLines": 228,
1662
1662
  "chunks": [
1663
1663
  {
1664
1664
  "id": "ui-design-000",
1665
1665
  "ordinal": 0,
1666
1666
  "destination": "ui-design/SKILL.md",
1667
- "sha256": "cb6d5153948310d2ec489d63189cef0387e23e5023b0977a39e4981ac7ddf8f5",
1667
+ "sha256": "b8b3dedc3fc95b9d32189e094b8b90fbf67b9f7c2e4a0307fa3e58ccce6d5de1",
1668
1668
  "lines": 37,
1669
1669
  "heading": "整体风格定义"
1670
1670
  },
@@ -1672,7 +1672,7 @@
1672
1672
  "id": "ui-design-001",
1673
1673
  "ordinal": 1,
1674
1674
  "destination": "ui-design/SKILL.md",
1675
- "sha256": "1fe31e1ccbb6ede7c2f549b374f91056fa8a11c0b8f4e86e60041f68b23d434b",
1675
+ "sha256": "9593e1ab2bf4931cf4f0d96b87ce59c04a8d340dbf30c705f90375ec38d131fd",
1676
1676
  "lines": 12,
1677
1677
  "heading": "样式隔离与抗覆盖"
1678
1678
  },
@@ -1680,7 +1680,7 @@
1680
1680
  "id": "ui-design-002",
1681
1681
  "ordinal": 2,
1682
1682
  "destination": "ui-design/SKILL.md",
1683
- "sha256": "ee85cba1f72b3b7e8327aaf86b4a713e0c45792c910b18a8d3518cfdcc42b572",
1683
+ "sha256": "72fea6fc01b6bd0de8b0c7a1766f45e9dc92a9a0dbb0e5ad9b38b626e0dfd27a",
1684
1684
  "lines": 24,
1685
1685
  "heading": "高端视觉标准"
1686
1686
  },
@@ -1688,7 +1688,7 @@
1688
1688
  "id": "ui-design-003",
1689
1689
  "ordinal": 3,
1690
1690
  "destination": "ui-design/SKILL.md",
1691
- "sha256": "e1d719d0eeab855b943a4f0de45af1c5b5d08b310e9ea6b183c229c3f5ae0e06",
1691
+ "sha256": "d744e6f89c17eb5e9e3a68214961f8db0b99ea68ed83832b1d0ad156d5388d64",
1692
1692
  "lines": 13,
1693
1693
  "heading": "PC 后台菜单宫格 / 入口页规范"
1694
1694
  },
@@ -1696,7 +1696,7 @@
1696
1696
  "id": "ui-design-004",
1697
1697
  "ordinal": 4,
1698
1698
  "destination": "ui-design/SKILL.md",
1699
- "sha256": "ea379e7873b78b532fa959b64d4a97b89af19959037c5211afec47c30d58410f",
1699
+ "sha256": "5d3aebaa07bf0df572b5eadfbc567fa58138a78816f0edf25fcff1a93d914ac7",
1700
1700
  "lines": 15,
1701
1701
  "heading": "PC 后台数据卡片模式规范"
1702
1702
  },
@@ -1704,7 +1704,7 @@
1704
1704
  "id": "ui-design-005",
1705
1705
  "ordinal": 5,
1706
1706
  "destination": "ui-design/SKILL.md",
1707
- "sha256": "02cd6f4dfc86ebafc58fd770795f4ccb55fe43f1e851ef450ae49ceb0413bc1d",
1707
+ "sha256": "60b6d9e8702a72f422c18fb7a4631953530f45d7d91e58bd816b20eb71311f0c",
1708
1708
  "lines": 35,
1709
1709
  "heading": "形态模式(圆角 / 扁平)"
1710
1710
  },
@@ -1712,16 +1712,16 @@
1712
1712
  "id": "ui-design-006",
1713
1713
  "ordinal": 8,
1714
1714
  "destination": "ui-design/SKILL.md",
1715
- "sha256": "0a13456c54c0413d3055802d8789f924eb0d2f5918de2763d1e1fc0b5f60f634",
1716
- "lines": 24,
1715
+ "sha256": "0a4c4dec4d1c268b067b71e931d77943277a691b9be023e03bc261789fbafcac",
1716
+ "lines": 26,
1717
1717
  "heading": "圆角"
1718
1718
  },
1719
1719
  {
1720
1720
  "id": "ui-design-007",
1721
1721
  "ordinal": 6,
1722
1722
  "destination": "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md",
1723
- "sha256": "bd9e24e1cdc0017a1bffccbe48505ad8d0a274d65f28f4e6a80e591dec813407",
1724
- "lines": 147,
1723
+ "sha256": "ebbab60498811bb1736c9ee40b0942539a3a838b18ab866b42c9445d5bd6b0e7",
1724
+ "lines": 148,
1725
1725
  "heading": "颜色体系(CSS Variables — 支持主题切换)"
1726
1726
  },
1727
1727
  {
@@ -1736,23 +1736,23 @@
1736
1736
  "id": "ui-design-009",
1737
1737
  "ordinal": 9,
1738
1738
  "destination": "ui-design/references/progressive-02-字体.md",
1739
- "sha256": "e7dcc4c0be203d5cddf6ec93d7db66ff78f4997e60eafcbd4c91cabab227767f",
1740
- "lines": 70,
1739
+ "sha256": "b13e29dd73879a49db3ad5c4b60c4abf3e7e4e86d305b35e774e372a7db80ca8",
1740
+ "lines": 69,
1741
1741
  "heading": "字体"
1742
1742
  },
1743
1743
  {
1744
1744
  "id": "ui-design-010",
1745
1745
  "ordinal": 10,
1746
1746
  "destination": "ui-design/references/progressive-02-字体.md",
1747
- "sha256": "cb6d86f002d44d484b3bb10b12e4194360739323609450f9c99e6aa10004cb24",
1748
- "lines": 45,
1747
+ "sha256": "8d26f2f07ca65b43dc38880b0b02299f233edb5378254f2982fa3cfc3a3c69d3",
1748
+ "lines": 47,
1749
1749
  "heading": "间距与触摸目标"
1750
1750
  },
1751
1751
  {
1752
1752
  "id": "ui-design-011",
1753
1753
  "ordinal": 11,
1754
1754
  "destination": "ui-design/references/progressive-02-字体.md",
1755
- "sha256": "dc8c655353a6349e385ea9187fe23a377b4d69e1f2bf102aa736e987a624bcc5",
1755
+ "sha256": "bebc60aaa973e63aafc4ea7a73b6c2bc3aa876c33125b1b386e8901ddcc43d72",
1756
1756
  "lines": 42,
1757
1757
  "heading": "骨架屏 Loading 设计规范"
1758
1758
  },
@@ -1760,15 +1760,15 @@
1760
1760
  "id": "ui-design-012",
1761
1761
  "ordinal": 12,
1762
1762
  "destination": "ui-design/references/progressive-03-动效规范-丰富但不卡.md",
1763
- "sha256": "78f4544796729b2eb49bc892472e397962ec4fd3112dd4cecf29eba883a6888a",
1764
- "lines": 203,
1763
+ "sha256": "b9ac274e5b98631c3262fc87ca294fd43a59dc226829a299d1db24321ad203df",
1764
+ "lines": 205,
1765
1765
  "heading": "动效规范(丰富但不卡)"
1766
1766
  },
1767
1767
  {
1768
1768
  "id": "ui-design-013",
1769
1769
  "ordinal": 13,
1770
1770
  "destination": "ui-design/references/progressive-03-动效规范-丰富但不卡.md",
1771
- "sha256": "c2a784b1fc7d6f6f554661f4f1719d35c6c667037a817f697cb72e9535ae15eb",
1771
+ "sha256": "385528713388a28e0182e2df9e2ed828ddb7cccaf7a3a5e78354f46a588f6f1c",
1772
1772
  "lines": 26,
1773
1773
  "heading": "Vue 3 过渡动画"
1774
1774
  },
@@ -1776,8 +1776,8 @@
1776
1776
  "id": "ui-design-014",
1777
1777
  "ordinal": 14,
1778
1778
  "destination": "ui-design/references/progressive-04-组件风格速查.md",
1779
- "sha256": "cf27a0b68280343d0a942dd327a92ee6753527756e48123daf5fa4a15c36520f",
1780
- "lines": 147,
1779
+ "sha256": "5d81e9cc239c08e67a573d80186f7e462fb7d929c609b2b6218cae97ef8f7f44",
1780
+ "lines": 149,
1781
1781
  "heading": "组件风格速查"
1782
1782
  },
1783
1783
  {
@@ -1824,7 +1824,7 @@
1824
1824
  "id": "ui-design-020",
1825
1825
  "ordinal": 20,
1826
1826
  "destination": "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md",
1827
- "sha256": "2efd631603aff04a45f251f0fc06ac83b39b2aebc1551b311920aac4ac6b9273",
1827
+ "sha256": "8af48a2af341cf338cbb3937def060827f39f40795330c2cca7c342897f48ce7",
1828
1828
  "lines": 53,
1829
1829
  "heading": "速查:从头搭建一个移动端页面"
1830
1830
  },
@@ -1832,7 +1832,7 @@
1832
1832
  "id": "ui-design-021",
1833
1833
  "ordinal": 21,
1834
1834
  "destination": "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md",
1835
- "sha256": "210d5091c308f562b56bce93b257a74ed1894cf0f15393f703149c05c3ac2584",
1835
+ "sha256": "8a8884b0b064e7805cd03d904541b12da4539e73172d31f00d32c1ecfaee32f6",
1836
1836
  "lines": 65,
1837
1837
  "heading": "🚨 移动端低代码项目落地踩坑(必读,2026.5)"
1838
1838
  },
@@ -1840,7 +1840,7 @@
1840
1840
  "id": "ui-design-022",
1841
1841
  "ordinal": 22,
1842
1842
  "destination": "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md",
1843
- "sha256": "8f8a9a69e2816682ac2b6a26d932c23240c477191d4f3029a821dafe23250c7b",
1843
+ "sha256": "4962a1ec7bc49ae1a2706c58fb6f929304ca254e3fd4d8b626fefbc17067bce2",
1844
1844
  "lines": 42,
1845
1845
  "heading": "🔗 关联字段:保存真实 Id,界面展示可读标签"
1846
1846
  },
@@ -1848,7 +1848,7 @@
1848
1848
  "id": "ui-design-023",
1849
1849
  "ordinal": 23,
1850
1850
  "destination": "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md",
1851
- "sha256": "9767f1e46e8491d63a9f9a00fadef9125d124841a79141f07dd7e4529da3bc25",
1851
+ "sha256": "1c731f6915dae4de788e84af3f6a59cf5d116a4de1f9ca5541f13b55110521ca",
1852
1852
  "lines": 39,
1853
1853
  "heading": "表单布局规范(Column)"
1854
1854
  },
@@ -1968,11 +1968,11 @@
1968
1968
  ]
1969
1969
  },
1970
1970
  "v8-crud-api": {
1971
- "originalSha256": "6b0cd8d2436fc0cb08d1cd9461855ea5b22c4ba8b5263467d66050f88a7bc788",
1972
- "originalLines": 405,
1971
+ "originalSha256": "768404707d7caa39865fa3887a575665fe7c8894dad3e818a36e05a48e368b22",
1972
+ "originalLines": 406,
1973
1973
  "prefixSha256": "13f655834028b792eb87f441f2929a90688ca77dd56029bb932af229a9946162",
1974
1974
  "prefixBytes": 818,
1975
- "entryLines": 180,
1975
+ "entryLines": 181,
1976
1976
  "chunks": [
1977
1977
  {
1978
1978
  "id": "v8-crud-api-000",
@@ -1986,8 +1986,8 @@
1986
1986
  "id": "v8-crud-api-001",
1987
1987
  "ordinal": 1,
1988
1988
  "destination": "v8-crud-api/SKILL.md",
1989
- "sha256": "93eb45145fcf6849628c73e51f8ae5e450532b425bf763d63587a44dc84bd7aa",
1990
- "lines": 16,
1989
+ "sha256": "6aab6dc9a9cefda0938f29ca5f13c85c5c86ccfde52b9f31e8510465fc56a730",
1990
+ "lines": 17,
1991
1991
  "heading": "核心规则"
1992
1992
  },
1993
1993
  {
@@ -2646,11 +2646,11 @@
2646
2646
  ]
2647
2647
  },
2648
2648
  "v8-menu-buttons": {
2649
- "originalSha256": "04209857890b743e491296d674392a05aea8f08596775c20df74c120998e5921",
2650
- "originalLines": 688,
2651
- "prefixSha256": "555f377b40b30c30b628b0744d89bc4d93e720235ab65834d64fdd9b3a5397d1",
2652
- "prefixBytes": 1004,
2653
- "entryLines": 187,
2649
+ "originalSha256": "31a0bd6b4f5b3a6d19099c8bd6d8a3f97e80f9757d2265580792da69806b07ef",
2650
+ "originalLines": 690,
2651
+ "prefixSha256": "485069ce8a2192366d730b50e1ac27c5c66d38a0e5a8949a978cb27b6ac15e23",
2652
+ "prefixBytes": 1612,
2653
+ "entryLines": 189,
2654
2654
  "chunks": [
2655
2655
  {
2656
2656
  "id": "v8-menu-buttons-000",
@@ -2853,11 +2853,11 @@
2853
2853
  ]
2854
2854
  },
2855
2855
  "v8-security": {
2856
- "originalSha256": "bfcd9423cab69bea59a890fb2d112651e450edfde534b91d0a88500c0cb2d365",
2857
- "originalLines": 590,
2856
+ "originalSha256": "4a216e0bacba70e223f6ce0b0c9930e99515be41baea8613dbf7327006590b0f",
2857
+ "originalLines": 600,
2858
2858
  "prefixSha256": "bf500844894621ccc29468c41013bc423fdc5768bfcc87e0cfe20675a0b0f1d8",
2859
2859
  "prefixBytes": 8550,
2860
- "entryLines": 255,
2860
+ "entryLines": 265,
2861
2861
  "chunks": [
2862
2862
  {
2863
2863
  "id": "v8-security-000",
@@ -2879,8 +2879,8 @@
2879
2879
  "id": "v8-security-002",
2880
2880
  "ordinal": 2,
2881
2881
  "destination": "v8-security/SKILL.md",
2882
- "sha256": "fdc1cbd297d141bfef8e9e0ee58a972410ffc9b6b778b217b5610f86139f514c",
2883
- "lines": 28,
2882
+ "sha256": "4fbec4fff91a887a9daa2386d60375e5b411e51fd305a3d89086bc4619231144",
2883
+ "lines": 38,
2884
2884
  "heading": "1. 防 SQL 注入"
2885
2885
  },
2886
2886
  {
@@ -2995,11 +2995,11 @@
2995
2995
  ]
2996
2996
  },
2997
2997
  "v8-table-event": {
2998
- "originalSha256": "157ed861396d612b27ad3c0fa5f0432a5ed7cf51fa34594a8967b52cf0926bef",
2999
- "originalLines": 397,
3000
- "prefixSha256": "a132433d534bf15d72db277eec9196e0af74ac5575cb726c7beabd298ef37a7f",
3001
- "prefixBytes": 759,
3002
- "entryLines": 177,
2998
+ "originalSha256": "92247553f3c7315c6522fbeadc64ad79ee5cc48deaa12c9a4c2a93273b509576",
2999
+ "originalLines": 448,
3000
+ "prefixSha256": "e5e476797c36afccdac42a3e05d9ecb50415013274b84f4f89212b0b1a6b7621",
3001
+ "prefixBytes": 778,
3002
+ "entryLines": 226,
3003
3003
  "chunks": [
3004
3004
  {
3005
3005
  "id": "v8-table-event-000",
@@ -3021,8 +3021,8 @@
3021
3021
  "id": "v8-table-event-002",
3022
3022
  "ordinal": 2,
3023
3023
  "destination": "v8-table-event/SKILL.md",
3024
- "sha256": "230de68b48d85dd28ec5667bb46953305b41d34d376cf3eb5f223d63fb463837",
3025
- "lines": 9,
3024
+ "sha256": "470d1827cce01a45e424639cc7273c7b838c8e158f125bff524466393c1e4b41",
3025
+ "lines": 58,
3026
3026
  "heading": "事件触发规则"
3027
3027
  },
3028
3028
  {
@@ -3093,8 +3093,8 @@
3093
3093
  "id": "v8-table-event-011",
3094
3094
  "ordinal": 11,
3095
3095
  "destination": "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md",
3096
- "sha256": "80a852d31b69084c28828f124a83a2240d82309642619bc72debe3e7c271b3db",
3097
- "lines": 22,
3096
+ "sha256": "e2ae9d89779e1f31eef74faa34a9e5a35ac1ba2b9f86cd5c112875eeae5a42e0",
3097
+ "lines": 24,
3098
3098
  "heading": "前端事件名(V8.EventName 可能的值)"
3099
3099
  },
3100
3100
  {
@@ -294,7 +294,7 @@ staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本
294
294
  - 商城来源以 `ApiBase + OsClient` 唯一定位。添加来源先只读发现系统标题、验证码策略和公开应用数;需要私有应用时再登录。帐号、密码、Token 不能写浏览器配置或商城来源 JSON;密码只用于本次登录,长会话 Token 以 `MCP/Mobile` 非 PC 客户端签发,并由当前租户后端加密保存到 `mci_system_setting`,浏览器只持有不具备取密能力的凭据 Key。
295
295
  - 后端来源代理必须固定已保存的 `ApiBase + OsClient`,拒绝过期 Token、访问密钥会话、非超级管理员、非 HTTPS 外网地址、重定向漂移和超限响应;Token 不得返回浏览器、日志、审计或应用包。退出登录同步删除服务端密文。
296
296
  - 商城源业务由 `app.microi.store` 单一拥有的 `platform-marketplace-source`(`Managed`)编排,租户扩展只写 `platform-marketplace-source-hook`(`CreateIfMissing`,默认可执行正文精确为 `return { Code : 1 };`)。登录必须在远端配置读取、密码发送和凭据保存之前执行 `BeforeMarketplaceSourceLogin`;断开必须在删除服务端凭据之前执行 `BeforeMarketplaceSourceDisconnect`。Hook 失败直接阻断操作。Before Hook 仅允许 `Stage / SourceApiEngineKey / Action / SourceId`,不得传 `ApiBase`、远端 `OsClient`、账号、密码、Token、签名地址或凭据密文;协议、加密和密钥隔离继续由可信网关负责。
297
- - 商城主页面统一承载应用市场、已安装、我发布的应用、安装离线包和来源管理,不能再通过独立菜单或路由割裂上下文。来源增删改启停逐项自动保存;来源管理、详情和复杂配置使用平台统一 `80%` 可拖动大圆角 Dialog,遮罩服从正向开关 `sys_config.FormMaskBlur`,缺失或 `0/false` 默认关闭毛玻璃。
297
+ - 商城主页面统一承载应用市场、已安装、我发布的应用、安装离线包和来源管理,不能再通过独立菜单或路由割裂上下文。来源增删改启停逐项自动保存;来源管理、详情和复杂配置使用平台统一 `80%` 可拖动 Dialog,圆角遵循当前宿主与 ui-design 的紧凑适度约束,遮罩服从正向开关 `sys_config.FormMaskBlur`,缺失或 `0/false` 默认关闭毛玻璃。
298
298
  - 每张应用卡必须显示预览图、公开范围、分类、最新版本、当前租户已安装版本及状态色。来源卡必须显示其公开数和当前授权可访问总数;平台官方发布节点只显示“平台官方应用源”身份标记,不显示安装、更新或重新安装操作。
299
299
  - 安装可明确选择 `sys_microistore` 当前版本或 `mic_data_version` 中仍含完整包正文或已验证包指针的历史快照;后台任务在首次取包时必须把计划中的 `AppVersion` 解析为匹配且可安装的不可变 `StoreVersionId`,写入 checkpoint,并在全部后续分片一直传到详情取包。发布方中途升版时继续完成已锁定快照,新版留给下一轮盘点;快照缺失、版本不匹配、身份变化或快照 Id 漂移必须失败关闭,禁止退回易变当前行。实际安装版本写回 `sys_microistoreversion`。回退旧版属于重新安装,不得静默换成最新版。
300
300
  - 应用详情的版本选择必须服务端分页和搜索,默认每页不超过 20 条;当前版本固定置顶,历史版本只返回含完整旧包或有效 HDFS 指针的可安装状态。禁止用 `_PageSize:500` 或一次加载全部版本后在浏览器过滤。翻页、搜索与页大小切换都必须保持已选版本语义并显示总数。
@@ -336,9 +336,10 @@ staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本
336
336
  ## 版本与回滚
337
337
 
338
338
  - 版本号单调递增,保存变更清单和前后哈希。
339
- - 官方 Web、UniApp、MicroService 体验路径统一为公有桶对象键 `/{OsClient小写}/micro-app/{AppKey}/index.html`,通过 `https://static.itdos.com` 访问;`/{OsClient小写}/micro-app/{AppKey}/{Version}/index.html` 及同目录资源是不可变历史版本。私有桶按同样相对目录保存最新版与各历史版本的源码;编译包没有源码时明确记为 `NotIncluded`。v3 的 `microi/application-assets/v3/...` 仍可作为内部校验源,但 `/micro-app/v3/tenants/...` API resolver 和旧 `ai-app-publish` 不再作为官方商城体验链接。
340
- - 发布顺序为完整上传并验证版本目录、复制私有源码快照、提升固定根的非入口资源、最后提升固定 `index.html`。CDN 对所有被覆写的固定路径做精确刷新并回读任务 `Complete`,再从 `static.itdos.com` 回读入口及引用资源,最后更新 `sys_microistore.PreviewUrl/PublicPublishPath`;任一步失败保留旧商城入口并进入可恢复状态。跨版本重发不得覆写历史目录的不同内容。官网列表、详情、二维码和“立即体验”只能展示固定根的 CDN URL,不带版本、请求指纹或缓存绕过参数。
341
- - v3 数据库中的 `PreviewUrl/PublicPublishPath` 可以保存以 `/` 开头的对象路径,完成态检查依赖此相对值;官网接口和商城工作台使用租户 `FileServer` 生成完整 CDN 体验 URL。展示层修复不得直接改写 v3 记录为绝对 URL。
339
+ - 当前公开 Web、UniApp、MicroService 的体验入口统一为 `{可信ApiBase}/micro-app/{tenantLower}/{权威AppKey}/index.html`,租户段取当前可信连接 OsClient 小写;入口直接返回已提交 HTML,地址栏不顶层 30x 跳到 typed v3、CDN/NAS 或版本目录。公开性、应用类型与 AppKey 取同源权威记录;已安装应用取目标租户记录,不按源商城或显示名称猜身份。公有桶固定根 `/{tenantLower}/micro-app/{AppKey}/index.html` 仍是 CDN 投影,不作为当前体验链接;内部 `/micro-app/v3/tenants/...` 与原始 `microi/application-assets/v3/...` 校验对象也不作为用户当前入口。
340
+ - 历史预览只用已回读版本的实际 `{可信FileServer}/{tenantLower}/micro-app/{AppKey}/{exactPublishedVersion}/index.html`,保留 FileServer 的路径前缀。不能从数字 `CurrentVersion` 推算 `AppVersion`,不能宣称旧 `/{version}/...` 短 API 或 `?version=` 支持通用 V3 历史。签名 URL、显式历史和私有/未知公开性保持原访问语义,不改成 current。私有桶仍保存各版本源码;编译包没有源码时明确记为 `NotIncluded`。已验证历史目录不得覆写成不同字节,缺失时报告未恢复。
341
+ - 发布顺序仍为完整上传并验证版本目录、复制私有源码快照、提升固定根的非入口资源、最后提升固定 `index.html`。适用的 CDN 精确刷新完成并回读入口及引用资源后,才提交 `sys_microistore.PreviewUrl/PublicPublishPath`;任一步失败保留旧商城入口并进入可恢复状态。官网列表、详情、二维码和“立即体验”在展示层使用 API 固定入口,不带版本、请求指纹或缓存绕过参数;清单内 JS/CSS/图片可按原规则分流到 CDN/NAS。
342
+ - v3 数据库中的 `PreviewUrl/PublicPublishPath` 继续保留以 `/` 开头的对象路径,完成态检查依赖此相对值;`StableResolverPath` 保留 typed v3 内部协议。官网接口和商城工作台只转换已确认公开的当前体验 URL,不直接改写 v3 记录、历史快照或安装身份。
342
343
  - 官方 CDN 凭据按当前租户系统设置 `Integration.Cdn.Aliyun.*`、`Integration.Dns.Aliyun.*`、历史 SaaS `AlidnsKeyId/AlidnsKeySecret` 顺序读取;半配置失败关闭,不静默跳过刷新。阿里云可能把并发 URL 合并为同一任务号,需等待该任务返回的全部 URL 完成并按原始字节哈希回读。批量迁移应按每日刷新配额限速或分日执行。
343
344
  - 旧版对象若已丢失,只能从商城编译包、仍可访问的当前体验路由或本地归档取得逐文件匹配冻结清单的原始字节后补齐;哈希或长度不符时拒绝写入。历史版本无法恢复时保留原版本记录和链接并列出待补清单,可独立迁移已完整校验的当前版本,但不得把未恢复的历史目录标为已归档。
344
345
  - stage 前回读并冻结应用的 `CurrentVersion + AppVersion`;finalize 必须同时传 `ExpectedCurrentVersion + ExpectedAppVersion`,在以不可变 AppId 加锁后再次 compare-and-set。缺失前置条件、AppId/AppKey 漂移或旧请求晚到一律失败关闭;重新发布必须重新盘点,不能静默回退。
@@ -353,9 +354,9 @@ staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本
353
354
  - [ ] 同一包重复安装无重复表/字段/菜单/任务
354
355
  - [ ] 客户自定义 V8 与非包拥有配置保持不变
355
356
  - [ ] 源码包、构建包、Manifest 和数据库版本一致且哈希可核
356
- - [ ] 无版本号根入口与当前商城版本一致,历史版本 URL 仍可独立访问
357
+ - [ ] API 固定入口返回当前已提交版本且加载后地址栏不跳到 typed v3、CDN/NAS 或版本目录;已回读的精确历史 CDN URL 独立验证,不用当前版本替代
357
358
  - [ ] 安装到不同 ApiBase/OsClient 后,入口 HTML 使用目标租户上下文且分享 URL 无运行参数
358
- - [ ] Web/UniApp 安装后的 `PreviewUrl` 使用目标租户 `FileServer + 真实对象 Key`,不含 OSS/S3 内网域名或临时签名;即使发布包漏选菜单,也会幂等生成可直接在线使用的 Iframe 入口,已有入口则重绑到目标租户地址
359
+ - [ ] Web/UniApp 安装后的内部 `PreviewUrl` 保留原协议及目标租户绑定,已确认公开的当前体验由展示层转为目标租户 API 固定入口,不含 OSS/S3 内网域名或临时签名;即使发布包漏选菜单,也会幂等生成可直接在线使用的 Iframe 入口,已有入口则重绑到目标租户地址
359
360
  - [ ] 只更新菜单/说明/声明式资源且复用旧运行时的版本,`sys_microistore.AppVersion` 跟随安装包版本,运行版本表保留真实构建版本;商城安装状态不能因两种版本合同合法分离而显示异常
360
361
  - [ ] 中断/重启后可恢复,两个节点不会重复副作用
361
362
  - [ ] 普通角色不能安装、升级、卸载或读取私有源码
@@ -90,13 +90,13 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
90
90
  4. 同步私有源码,再流式发布公有构建目录;源码同步失败不得继续发布。发布前回读并冻结应用的 `CurrentVersion` 与 `AppVersion`,stage 只上传不可变版本资产,finalize 必须同时提交 `ExpectedCurrentVersion` 与 `ExpectedAppVersion` 做 compare-and-set;缺一项、状态漂移或回读不一致都停止,不能自动覆盖较新发布。
91
91
  - v3 的应用基线、fence、应用行版本及 active/committed 指针是原始请求的不可变事实;stage 后只按回读更新版本行的 `ExpectedVersionRowVersion`。已提交但仍为 `ProjectionPending` 时,先回读版本与应用,保留原 `RequestId / RequestFingerprint / DeliveryBatchId` 和首次 finalize 的应用基线,重放原请求取得幂等完成回执;禁止把提交后的新指针或 fence 拼入旧请求。只有 `Completed=true` 与 CDN 文件完整性回读同时通过,才继续发布安装包。
92
92
  5. 每次创建、修改、升级或重新发布 AI 应用,必须在任何源码同步、stage、finalize 或商城制包之前,为目标精确 `AppVersion` 写入 `sys_microistore_changelog`。日志的 `StoreId / Version / Title / ChangeType / Content / ReleaseTime` 必须完整;发布工具显式传入含义一致且非空的 `changeSummary`,发布后同时回读商城子表与 `mci_ai_app_version.ChangeSummary`。缺日志或版本不一致必须停止发布。
93
- 6. 官方 Web、UniApp、MicroService 的体验地址统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶对象键与域名后的路径完全一致;不再按运行类型分叉到 `ai-app-publish`,也不把 v3 内部 API resolver 用作公开体验地址。当前版本的全部编译文件写入该应用固定根,历史版本写入同根的 `/{Version}/` 目录;历史目录一旦验证不得覆写成不同字节。
93
+ 6. 当前公开 Web、UniApp、MicroService 的体验地址统一为 `{可信ApiBase}/micro-app/{tenantLower}/{权威AppKey}/index.html`;租户段取当前连接 OsClient 小写,应用身份与公开范围来自同源权威记录。入口直接返回当前已提交 HTML,页面加载后地址栏仍保持固定入口,不作顶层 30x 跳转到 typed v3、CDN/NAS 或版本目录。清单内的 JS/CSS/图片仍可按原协议分流。公有桶 `{tenantLower}/micro-app/{AppKey}/` 固定根和 `/{exactPublishedVersion}/` 历史目录继续作为 CDN 发布投影,历史目录一旦验证不得覆写成不同字节。
94
94
  7. 同一版本私有源码文件使用相同的租户、应用、版本相对路径写入私有桶;固定根保存最近一次已完成发布的源码。确实不含源码的编译包在包声明中记录 `Source=NotIncluded`,运行时版本的 `SourceSnapshotPath` 保持空值,不得从公有产物伪造源码。先校验完整公有版本与私有源码快照,再提升固定根的非入口资产和 `index.html`;固定入口切换后提交 CDN 精确路径刷新,回读刷新任务终态和公有入口及引用资源,再更新商城 `PreviewUrl/PublicPublishPath`。刷新任务仅提交成功、单个 CDN 节点 200 或本地构建成功都不算完成。
95
- 8. 官网、二维码、分享链接和商城“立即体验”只使用固定根 `index.html`;版本目录仅供回滚与显式历史预览。CDN 直接读取公有桶对象,不要求其做动态版本解析或反向代理。发布器必须使 HTML 引用的 JS/CSS 在切换时已存在,并验证从 `static.itdos.com` 打开的应用仍把业务 API 请求发往目标租户的 `ApiBase`。
96
- v3 的 `sys_microistore.PreviewUrl/PublicPublishPath` 和版本 `PreviewUrl` 在数据库内保留以 `/` 开头的对象路径,后端完成态检查会与投影路径逐字比较;官网接口与商城工作台对外展示时使用租户 `FileServer` 转为完整 CDN URL。不得为统一展示直接把这些 v3 内部字段改写成绝对 URL。
95
+ 8. 官网、二维码、分享链接和商城“立即体验”使用上方 API 固定入口。显式历史预览使用已回读版本的实际 `{可信FileServer}/{tenantLower}/micro-app/{AppKey}/{exactPublishedVersion}/index.html`,保留 FileServer 的路径前缀;不能从数字 `CurrentVersion` 推算语义 `AppVersion`,也不能把旧 `/{version}/...` 短 API 或 `?version=` 当作通用 V3 历史读取。签名 URL、明确历史版本、私有或未知公开性的入口不规范化成 current。CDN 直接读取公有桶对象,不要求其做动态版本解析;发布器仍须在切换前确保 HTML 引用的 JS/CSS 已存在,并核对业务请求使用目标租户的 ApiBase。
96
+ v3 的 `sys_microistore.PreviewUrl/PublicPublishPath` 和版本 `PreviewUrl` 在数据库内保留以 `/` 开头的对象路径,后端完成态检查会与投影路径逐字比较;`StableResolverPath` 继续保留 typed v3 内部协议。官网接口与商城工作台只在展示层转换已确认公开的当前入口,不为统一展示批量改写这些字段或安装身份。
97
97
  9. 新的官方 Web、UniApp、MicroService 发布统一使用支持固定 CDN 投影的 v3 目录流式发布;旧 `ai_app_build` 只保留历史兼容和迁移读取,不作为新版本发布入口。目标 API 的 `ApplicationCdnProjectionSupported` 未启用时先部署后端并停止新发布,不回退到 `ai-app-publish`。
98
- 10. 官方 `static.itdos.com` 的刷新凭据从当前租户后端系统设置 `Integration.Cdn.Aliyun.*` 读取,兼容旧的 `Integration.Dns.Aliyun.*` 与 SaaS `AlidnsKeyId/AlidnsKeySecret`;必须成对配置并具备刷新及任务查询权限。刷新任务可能合并多个 URL 到同一任务号,应以全部任务 `Complete` 和 CDN 文件哈希回读为准;不得仅凭提交成功切换商城入口。批量发布须考虑 CDN 每日刷新配额。
99
- 11. `SharedPublicRuntime.EntryUrl` 和历史版本目录仅用于历史记录、回滚、摘要校验与审计。回读应用、版本、active 文件清单和 SHA-256;旧清单文件只能可逆归档,不能删除。再分别直接请求稳定当前入口、不可变版本入口及主要 JS/CSS,并断言前者完成加载后地址栏仍不含版本段。
98
+ 10. 命中 `static.itdos.com` 官方 CDN 刷新分支时,凭据从当前租户后端系统设置 `Integration.Cdn.Aliyun.*` 读取,兼容旧的 `Integration.Dns.Aliyun.*` 与 SaaS `AlidnsKeyId/AlidnsKeySecret`;必须成对配置并具备刷新及任务查询权限。刷新任务可能合并多个 URL 到同一任务号,应以全部任务 `Complete` 和 CDN 文件哈希回读为准;不得仅凭提交成功切换商城入口。批量发布须考虑 CDN 每日刷新配额。该投影步骤不把 CDN 地址改成用户当前体验入口。
99
+ 11. `SharedPublicRuntime.EntryUrl` 仍用于共享不可变运行资源,历史版本目录用于显式历史预览、回滚、摘要校验与审计,不能替代当前公开固定入口。回读应用、版本、active 文件清单和 SHA-256;旧清单文件只能可逆归档,不能删除。再分别直接请求 API 当前入口、已核验历史入口及主要 JS/CSS,并在真实浏览器断言当前入口加载后地址栏未跳到 typed v3、CDN/NAS 或版本段。历史对象缺失时报告未恢复,不以当前字节冒充历史。
100
100
 
101
101
  ## 完成定义
102
102