@microi.net/cli 5.4.2 → 5.4.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.
@@ -5,13 +5,13 @@
5
5
  "url": "https://microi.net"
6
6
  },
7
7
  "description": "Microi吾码官方 AI 插件市场",
8
- "version": "5.4.2",
8
+ "version": "5.4.4",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.4.2",
14
+ "version": "5.4.4",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.4.2",
3
+ "version": "5.4.4",
4
4
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
5
5
  "author": {
6
6
  "name": "Microi.Net",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.4.2",
3
+ "version": "5.4.4",
4
4
  "description": "Microi吾码低代码平台的 Codex 开发插件,共享 VS Code/CLI 的连接、同步、MCP、V8 与交付能力。",
5
5
  "author": {
6
6
  "name": "Microi.Net",
@@ -5,13 +5,13 @@
5
5
  "url": "https://microi.net"
6
6
  },
7
7
  "description": "Microi吾码官方 AI 插件市场",
8
- "version": "5.4.2",
8
+ "version": "5.4.4",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.4.2",
14
+ "version": "5.4.4",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.4.2",
3
+ "version": "5.4.4",
4
4
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
5
5
  "author": {
6
6
  "name": "Microi.Net",
@@ -1,6 +1,6 @@
1
1
  {
2
- "builtAt": "2026-08-30T13:00:22.949Z",
3
- "version": "5.4.2",
2
+ "builtAt": "2026-08-31T19:34:50.414Z",
3
+ "version": "5.4.4",
4
4
  "sourceProducts": [
5
5
  "vscode-extension",
6
6
  "microi-cli",
@@ -13,6 +13,6 @@
13
13
  "cli": "ac621fcaf8b2cbbd8072414f99aba20c30ee1134ef12c3094eaead85943b6b6c",
14
14
  "router": "ffc14787fc2d3d6173b7a779b77139b759eb1d482cea787f71283f4017a4e223",
15
15
  "broker": "caae2730cc411d11c20f33b367968f7538aae8f5b65a713fcc557deedaefcf70",
16
- "dshBundle": "fdf804f017ac8e693859b527ab798cb59ff872b758968550a923e7fadc3a0dd7"
16
+ "dshBundle": "24d4673b3bdcb7b8b71ec074d290d6bd90a49363912633279933d17cfc96aa86"
17
17
  }
18
18
  }
package/cordis.patch.yml CHANGED
@@ -7,7 +7,7 @@
7
7
  serverName: microi
8
8
  transport: stdio
9
9
  command: !!js process.execPath
10
- args: ["-e","/*\n * DeepSeek Harness 通过 profile bundle 加载此 `node -e` 引导脚本。\n * DSH 不保证 MCP 子进程 cwd 位于 npm 包根,因此按 DSH_HOME/profile 定位\n * 当前版本的 @microi.net/cli,再复用 Codex 同源适配器与多连接路由器。\n */\nconst fs = require('node:fs');\nconst os = require('node:os');\nconst path = require('node:path');\nconst packageName = '@microi.net/cli';\nconst expectedVersion = '5.4.2';\n\nfunction readJson(filePath) {\n try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); }\n catch { return undefined; }\n}\n\nfunction expandHome(value) {\n if (value === '~') return os.homedir();\n if (value.startsWith('~/') || value.startsWith('~\\\\')) return path.join(os.homedir(), value.slice(2));\n return value;\n}\n\nfunction validRoot(value) {\n const root = path.resolve(value);\n const pkg = readJson(path.join(root, 'package.json'));\n const patch = path.join(root, 'cordis.patch.yml');\n const adapter = path.join(root, 'scripts', 'mcp-codex-stdio-adapter.js');\n const router = path.join(root, 'scripts', 'microi-codex-router.js');\n if (pkg?.name !== packageName || pkg?.version !== expectedVersion) return undefined;\n if (pkg?.dsh?.bundle?.patch !== './cordis.patch.yml') return undefined;\n if (![patch, adapter, router].every(filePath => fs.existsSync(filePath))) return undefined;\n return { root: fs.realpathSync(root), adapter, router, modifiedAt: fs.statSync(router).mtimeMs };\n}\n\nfunction findPlugin() {\n const explicit = String(process.env.MICROI_DSH_PLUGIN_ROOT || '').trim();\n if (explicit) {\n const plugin = validRoot(explicit);\n if (!plugin) throw new Error(`MICROI_DSH_PLUGIN_ROOT 不是版本 ${expectedVersion} 的有效 Microi DSH bundle:${explicit}`);\n return plugin;\n }\n const configuredHome = String(process.env.DSH_HOME || '').trim();\n const dshHome = path.resolve(expandHome(configuredHome || path.join(os.homedir(), '.dsh')));\n const profilesRoot = path.join(dshHome, 'profiles');\n const candidates = [];\n if (fs.existsSync(profilesRoot)) {\n for (const entry of fs.readdirSync(profilesRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === 'node_modules') continue;\n const root = path.join(profilesRoot, entry.name, 'node_modules', '@microi.net', 'cli');\n const plugin = validRoot(root);\n if (plugin) candidates.push(plugin);\n }\n }\n candidates.sort((left, right) => right.modifiedAt - left.modifiedAt);\n if (!candidates[0]) throw new Error(`未在 ${profilesRoot} 找到版本 ${expectedVersion} 的 ${packageName}`);\n return candidates[0];\n}\n\ntry {\n const plugin = findPlugin();\n process.env.MICROI_DSH_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_CODEX_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_TOOL_SOURCE = 'dsh';\n process.env.MICROI_TOOL_VERSION = expectedVersion;\n process.env.MICROI_WORKSPACE_ROOT = process.env.MICROI_WORKSPACE_ROOT || process.cwd();\n process.argv[2] = plugin.router;\n require(plugin.adapter);\n} catch (error) {\n console.error(`[microi-dsh-bootstrap] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n}\n"]
10
+ args: ["-e","/*\n * DeepSeek Harness 通过 profile bundle 加载此 `node -e` 引导脚本。\n * DSH 不保证 MCP 子进程 cwd 位于 npm 包根,因此按 DSH_HOME/profile 定位\n * 当前版本的 @microi.net/cli,再复用 Codex 同源适配器与多连接路由器。\n */\nconst fs = require('node:fs');\nconst os = require('node:os');\nconst path = require('node:path');\nconst packageName = '@microi.net/cli';\nconst expectedVersion = '5.4.4';\n\nfunction readJson(filePath) {\n try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); }\n catch { return undefined; }\n}\n\nfunction expandHome(value) {\n if (value === '~') return os.homedir();\n if (value.startsWith('~/') || value.startsWith('~\\\\')) return path.join(os.homedir(), value.slice(2));\n return value;\n}\n\nfunction validRoot(value) {\n const root = path.resolve(value);\n const pkg = readJson(path.join(root, 'package.json'));\n const patch = path.join(root, 'cordis.patch.yml');\n const adapter = path.join(root, 'scripts', 'mcp-codex-stdio-adapter.js');\n const router = path.join(root, 'scripts', 'microi-codex-router.js');\n if (pkg?.name !== packageName || pkg?.version !== expectedVersion) return undefined;\n if (pkg?.dsh?.bundle?.patch !== './cordis.patch.yml') return undefined;\n if (![patch, adapter, router].every(filePath => fs.existsSync(filePath))) return undefined;\n return { root: fs.realpathSync(root), adapter, router, modifiedAt: fs.statSync(router).mtimeMs };\n}\n\nfunction findPlugin() {\n const explicit = String(process.env.MICROI_DSH_PLUGIN_ROOT || '').trim();\n if (explicit) {\n const plugin = validRoot(explicit);\n if (!plugin) throw new Error(`MICROI_DSH_PLUGIN_ROOT 不是版本 ${expectedVersion} 的有效 Microi DSH bundle:${explicit}`);\n return plugin;\n }\n const configuredHome = String(process.env.DSH_HOME || '').trim();\n const dshHome = path.resolve(expandHome(configuredHome || path.join(os.homedir(), '.dsh')));\n const profilesRoot = path.join(dshHome, 'profiles');\n const candidates = [];\n if (fs.existsSync(profilesRoot)) {\n for (const entry of fs.readdirSync(profilesRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === 'node_modules') continue;\n const root = path.join(profilesRoot, entry.name, 'node_modules', '@microi.net', 'cli');\n const plugin = validRoot(root);\n if (plugin) candidates.push(plugin);\n }\n }\n candidates.sort((left, right) => right.modifiedAt - left.modifiedAt);\n if (!candidates[0]) throw new Error(`未在 ${profilesRoot} 找到版本 ${expectedVersion} 的 ${packageName}`);\n return candidates[0];\n}\n\ntry {\n const plugin = findPlugin();\n process.env.MICROI_DSH_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_CODEX_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_TOOL_SOURCE = 'dsh';\n process.env.MICROI_TOOL_VERSION = expectedVersion;\n process.env.MICROI_WORKSPACE_ROOT = process.env.MICROI_WORKSPACE_ROOT || process.cwd();\n process.argv[2] = plugin.router;\n require(plugin.adapter);\n} catch (error) {\n console.error(`[microi-dsh-bootstrap] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n}\n"]
11
11
  env:
12
12
  MICROI_TOOL_SOURCE: dsh
13
13
  cwd: !!js process.cwd()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microi.net/cli",
3
- "version": "5.4.2",
3
+ "version": "5.4.4",
4
4
  "description": "Microi吾码 AI 开发 CLI 与多宿主 Plugin:服务器连接、Skills、MCP、V8 同步和低代码交付",
5
5
  "license": "MIT",
6
6
  "homepage": "https://microi.net/doc/v8-engine/vs-code-plugin.html",
@@ -1,13 +1,13 @@
1
1
  {
2
- "builtAt": "2026-08-30T13:00:21.815Z",
2
+ "builtAt": "2026-08-31T19:34:49.736Z",
3
3
  "source": "../microi.skills",
4
4
  "extension": {
5
5
  "name": "v8-engine",
6
- "version": "5.4.2",
6
+ "version": "5.4.4",
7
7
  "publisher": "Microi"
8
8
  },
9
9
  "skills": {
10
- "version": "5.4.2",
10
+ "version": "5.4.4",
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,17 +15,17 @@
15
15
  "dir": "dist/microi.skills",
16
16
  "files": 178,
17
17
  "skills": 65,
18
- "bytes": 2291541
18
+ "bytes": 2293884
19
19
  },
20
20
  "fileHashes": {
21
- ".microi-skills-version.json": "a0a37d70b3f46b782f374981fc79650cc1426e32e6bb81cd8f8f9bbfeb25f0d1",
22
- ".progressive-disclosure-manifest.json": "c039b5bc6761bd0a17b551e3a865cfb4660253254185c96650e83ad13d2f01cb",
21
+ ".microi-skills-version.json": "15d6e0d90190b89a61fb96ee3d853bec04209e5d0ac7cc6a4f4e1a16a9ee3bc6",
22
+ ".progressive-disclosure-manifest.json": "2a16159d7ff1383c44ccb4a7fb79e6edc0879de80ea551f2d7655c55a3a395ea",
23
23
  "README.md": "332aade05015acac5f1387829a42529f37fc203ff0fcfb2f16cc3afdbb23b1ed",
24
24
  "ai-engine/SKILL.md": "df63cf56bd06027f30bd0597003c65b479049141fc0b4a31d33cbc9a5fa044cf",
25
25
  "ai-engine/agents/openai.yaml": "40deb07801006a46b9a7f0020d13251955eeadd04c8e591160210479936f8b5b",
26
26
  "ai-platform-governance/SKILL.md": "84ca4bcacf15deecd0c04dc1a664b23041a6a5f020d3a5288c5458b5e7da4b8e",
27
27
  "ai-platform-governance/references/progressive-01-功能开关.md": "ea46fb02267e9e3ace3d9d72e67b02183c61e5c198f4b2f27e8196d6ee6d0bec",
28
- "app-store/SKILL.md": "929d7d898cc02c5f8d4c5f2a48c4122965a14eedd93e568937e49fb4cf3bfab5",
28
+ "app-store/SKILL.md": "b46f69e912098bfbaa984003bb7eb54a059fc8ecca378d45a89a133c585055be",
29
29
  "app-store/agents/openai.yaml": "eda8f5cf043e7b8fb0e4fb3acf0625fef95eb49586b43187ced277cd0ae4a2c4",
30
30
  "business-blueprint/SKILL.md": "01619a3b6d37b5b67649ee59d2701301222006d3b943882b2802b1721c58f8a9",
31
31
  "datasource-engine/SKILL.md": "bed8352f1d43b55145e1c492d1ea0ca1ec8750b5c4d74e1e80cd71aa7b9a2e6f",
@@ -47,7 +47,7 @@
47
47
  "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "bf78d9d2e2d6d1a8315f44f04f21889b21d845a02801d5f8e0eb11b3f490b6d1",
48
48
  "microi-codex-installer/SKILL.md": "75bec07d087167ab6343c816d07d9c7e1e850871a05737f31aec115e7fa3cdce",
49
49
  "microi-codex-installer/agents/openai.yaml": "e531219b74a70204893a156b1c22c69013a4c9d24b132ead912746b1b312cf80",
50
- "microi-codex/SKILL.md": "89620fa084b90a03a7890f2815d1f1ab1911ddb8849ad53779b901a4aa4d6247",
50
+ "microi-codex/SKILL.md": "61f5e6ffad986766be3d4d09a4111a2c4fd7a1b2247e2fb48ca0e22dd3b9c2d6",
51
51
  "microi-datasource-mapping/SKILL.md": "619c022b668f928129abef10e3f502f2ca0d2dee6e341ccd55f61fdbbcdd9661",
52
52
  "microi-db-schema/SKILL.md": "a69a9bcc87e8b74879c801c7e478a6270da8f2e4724421ff0611bb9a95c2fd1f",
53
53
  "microi-db-schema/agents/openai.yaml": "c725a2be4c904472f9e46dc4b49aa642c9f3a4437c91a28ba7cc27167497ede7",
@@ -61,7 +61,7 @@
61
61
  "microi-docs-coverage/SKILL.md": "44d2e633946af233bdd5a59a9fb74a8613e82031fa2f4635a2664fff0ad6c210",
62
62
  "microi-docs-coverage/references/capability-map.md": "fdc73d7164fddfea8f70107f678ecde3729f7fc34cd51cfab077188d1f7de48b",
63
63
  "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "ebd57f17f2ebae499bfa59ad17830db458590feb76f7f0f20219ff0987b33af3",
64
- "microi-form-engine/SKILL.md": "425ee60dbad2daeea91a980c5d53d7e736405f300fd625f1b33e75ce6f5591fe",
64
+ "microi-form-engine/SKILL.md": "76d9be2c28c9153c9489efa25402268f92ec22b5390538770a33e1126e31d09a",
65
65
  "microi-form-engine/references/component-catalog.md": "f43fee6bc00e72f99efe286a94f46d8920f6159ec1a9745391f641acf7bdf249",
66
66
  "microi-form-engine/references/data-source-events.md": "acae97de68c729745fc831a546cbdee4feb598c10f6b667b678cc6513a3e9e22",
67
67
  "microi-form-layout/SKILL.md": "ce4278f50cd5cea54a20b082525b1a94b58baa7745a27bec626b71725affa061",
@@ -69,7 +69,7 @@
69
69
  "microi-frontend-sdk/SKILL.md": "f05d35dc4427267582404e5e905654b240ffc0fdcd4c155516fa783eb38c5e14",
70
70
  "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5dea28edec5a31b6e6e5e15fefc03df9d1ad9bd4b583388fc77bd2aa67a19165",
71
71
  "microi-left-right-layout/SKILL.md": "e2f051bce91e6b7cd103599ea526d543fd0f8caaa4c92c71e9e5d81b1a90cf7d",
72
- "microi-microservice/SKILL.md": "6714aac779aa0d64d95594a180c0bf72a2c0b41fd21de3894e84643665865532",
72
+ "microi-microservice/SKILL.md": "82077fb2ee7c18d6b28804d3f83b2a694c5ee2204dcb642c6e676bfd95c05316",
73
73
  "microi-microservice/references/runtime-delivery.md": "538ae295826892942b365492b11aa4797599ea7047fc69409aae64ed99ecfe9b",
74
74
  "microi-mobile-app-quality/SKILL.md": "5f096599d539faf2fd57da23686497cf85eb75b4e5c18cc26704c3a856f2f995",
75
75
  "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "ec938bd1a64b9896ff5d3165ad217ee5c68a22a51ddb690d8a8a0c7a9365c512",
@@ -152,7 +152,7 @@
152
152
  "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "71ab3c94a6034f2d0c374de594104543770cb1313a6515494a213a1ecdf5baf7",
153
153
  "v8-export-import/references/progressive-02-powerpoint-导出.md": "5837905a195be7c38fe37e0abd40eee95a8bc26acdab1f3a9aba01c264a125ae",
154
154
  "v8-export-import/references/progressive-03-安全-性能注意.md": "a2acc492740eb693be5a0ad275cabcba7a813aa7378c844e43b04233d03a9d0c",
155
- "v8-file-upload/SKILL.md": "f66136b89d81a423574465d56af486be38d50190e8f6ae16d14e982525c81471",
155
+ "v8-file-upload/SKILL.md": "b8d01a6eede2bd250d8a7abf716ebc5482120d40b93b3f98e4f40c61c4e43b40",
156
156
  "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "351c65619016ef7b1215ffebd19b1d47bd58dcbfc6bc164c839f9ccca0ed0e19",
157
157
  "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "bb5fb267ae55c5637c6b53e76dcb339b761a35a76a451dc0c7ee8057f27db0a1",
158
158
  "v8-formengine-http/SKILL.md": "8338e9087e93bb41ad260863b076db387373c606e481bf49809c447083c761d1",
@@ -193,189 +193,189 @@
193
193
  "v8-workflow/SKILL.md": "676e0742d7c66db3c79cd2e0d96096ba12040e68cb10ee6276a04310486714f1",
194
194
  "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "9b6b01e7ac03c0a11bc837671a30107ff5c5f253029d74fd17713084104d7e99",
195
195
  "workspace-conventions/SKILL.md": "093f4cb8d3eaab696442dd6e2c0f51361d5127f6d38d96607bc0d78e03afa4f6",
196
- "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "576a781ecc529f7b5c9a824326445b2c90b3172ba0285a73fae4a2e45c9b84f5",
196
+ "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "646830875e7abd03f07de98ba506afbd3bcc451d094474ea14774423c4e0cef6",
197
197
  "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "6720c8700972ca2b0b0b4378a137b70763542a280043c75d79d551be1f57b308",
198
198
  "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "86db1f03700fd54dd824d28c553c678202e8f74b796fd0f9d91f63bf53a530b1"
199
199
  },
200
200
  "fileVersions": {
201
- ".microi-skills-version.json": "5.4.2",
202
- ".progressive-disclosure-manifest.json": "5.4.2",
203
- "README.md": "5.4.2",
204
- "ai-engine/SKILL.md": "5.4.2",
205
- "ai-engine/agents/openai.yaml": "5.4.2",
206
- "ai-platform-governance/SKILL.md": "5.4.2",
207
- "ai-platform-governance/references/progressive-01-功能开关.md": "5.4.2",
208
- "app-store/SKILL.md": "5.4.2",
209
- "app-store/agents/openai.yaml": "5.4.2",
210
- "business-blueprint/SKILL.md": "5.4.2",
211
- "datasource-engine/SKILL.md": "5.4.2",
212
- "datasource-engine/agents/openai.yaml": "5.4.2",
213
- "dos-orm/SKILL.md": "5.4.2",
214
- "dos-orm/references/api-reference.md": "5.4.2",
215
- "job-engine/SKILL.md": "5.4.2",
216
- "job-engine/agents/openai.yaml": "5.4.2",
217
- "message-notification/SKILL.md": "5.4.2",
218
- "message-notification/agents/openai.yaml": "5.4.2",
219
- "message-notification/references/contracts.md": "5.4.2",
220
- "microi-ai-app-auth.js": "5.4.2",
221
- "microi-ai-application/SKILL.md": "5.4.2",
222
- "microi-ai-application/agents/openai.yaml": "5.4.2",
223
- "microi-ai-application/references/frontend-baseline.md": "5.4.2",
224
- "microi-client-frontend/SKILL.md": "5.4.2",
225
- "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.4.2",
226
- "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.4.2",
227
- "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.4.2",
228
- "microi-codex-installer/SKILL.md": "5.4.2",
229
- "microi-codex-installer/agents/openai.yaml": "5.4.2",
230
- "microi-codex/SKILL.md": "5.4.2",
231
- "microi-datasource-mapping/SKILL.md": "5.4.2",
232
- "microi-db-schema/SKILL.md": "5.4.2",
233
- "microi-db-schema/agents/openai.yaml": "5.4.2",
234
- "microi-db-schema/references/core-tables.md": "5.4.2",
235
- "microi-db-schema/references/form-component-options.md": "5.4.2",
236
- "microi-db-schema/references/schema-overview.md": "5.4.2",
237
- "microi-db-schema/references/schema.md": "5.4.2",
238
- "microi-db-schema/references/table-catalog.md": "5.4.2",
239
- "microi-deployment/SKILL.md": "5.4.2",
240
- "microi-deployment/references/deployment-matrix.md": "5.4.2",
241
- "microi-docs-coverage/SKILL.md": "5.4.2",
242
- "microi-docs-coverage/references/capability-map.md": "5.4.2",
243
- "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.4.2",
244
- "microi-form-engine/SKILL.md": "5.4.2",
245
- "microi-form-engine/references/component-catalog.md": "5.4.2",
246
- "microi-form-engine/references/data-source-events.md": "5.4.2",
247
- "microi-form-layout/SKILL.md": "5.4.2",
248
- "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.4.2",
249
- "microi-frontend-sdk/SKILL.md": "5.4.2",
250
- "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.4.2",
251
- "microi-left-right-layout/SKILL.md": "5.4.2",
252
- "microi-microservice/SKILL.md": "5.4.2",
253
- "microi-microservice/references/runtime-delivery.md": "5.4.2",
254
- "microi-mobile-app-quality/SKILL.md": "5.4.2",
255
- "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.4.2",
256
- "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.4.2",
257
- "microi-solution-quotation/SKILL.md": "5.4.2",
258
- "microi-solution-quotation/agents/openai.yaml": "5.4.2",
259
- "microi-solution-quotation/scripts/build_solution_quote.py": "5.4.2",
260
- "microi-sso/SKILL.md": "5.4.2",
261
- "microi-sso/references/acceptance.md": "5.4.2",
262
- "microi-sso/references/configuration-and-security.md": "5.4.2",
263
- "microi-sso/references/inbound.md": "5.4.2",
264
- "microi-sso/references/outbound.md": "5.4.2",
265
- "microi-system-delivery/SKILL.md": "5.4.2",
266
- "microi-system-delivery/references/progressive-01-标准工作流.md": "5.4.2",
267
- "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.4.2",
268
- "microi-ui/SKILL.md": "5.4.2",
269
- "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.4.2",
270
- "microi-uniapp-frontend/SKILL.md": "5.4.2",
271
- "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.4.2",
272
- "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.4.2",
273
- "microi.v8.js": "5.4.2",
274
- "module-engine/SKILL.md": "5.4.2",
275
- "module-engine/references/module-config.md": "5.4.2",
276
- "ocr-engine/SKILL.md": "5.4.2",
277
- "ocr-engine/agents/openai.yaml": "5.4.2",
278
- "page-engine/SKILL.md": "5.4.2",
279
- "page-engine/references/progressive-01-所有组件类型.md": "5.4.2",
280
- "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.4.2",
281
- "performance-testing/SKILL.md": "5.4.2",
282
- "playwright-e2e/SKILL.md": "5.4.2",
283
- "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.4.2",
284
- "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.4.2",
285
- "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.4.2",
286
- "playwright-e2e/references/progressive-04-ci-建议.md": "5.4.2",
287
- "print-engine/SKILL.md": "5.4.2",
288
- "production-readonly-audit/SKILL.md": "5.4.2",
289
- "report-engine/SKILL.md": "5.4.2",
290
- "report-engine/agents/openai.yaml": "5.4.2",
291
- "scripts/optimize-progressive-disclosure.mjs": "5.4.2",
292
- "scripts/refresh-progressive-disclosure.mjs": "5.4.2",
293
- "scripts/validate-progressive-disclosure.mjs": "5.4.2",
294
- "search-engine/SKILL.md": "5.4.2",
295
- "search-engine/agents/openai.yaml": "5.4.2",
296
- "spider-engine/SKILL.md": "5.4.2",
297
- "system-observability/SKILL.md": "5.4.2",
298
- "translate-engine/SKILL.md": "5.4.2",
299
- "translate-engine/agents/openai.yaml": "5.4.2",
300
- "ui-design/SKILL.md": "5.4.2",
301
- "ui-design/assets/pattern-showcase/app.js": "5.4.2",
302
- "ui-design/assets/pattern-showcase/index.html": "5.4.2",
303
- "ui-design/assets/pattern-showcase/styles.css": "5.4.2",
304
- "ui-design/assets/templates/MCI-DESIGN.md": "5.4.2",
305
- "ui-design/references/design-pattern-library.md": "5.4.2",
306
- "ui-design/references/mci-design-contract.md": "5.4.2",
307
- "ui-design/references/motion-and-media.md": "5.4.2",
308
- "ui-design/references/product-flow-recipes.md": "5.4.2",
309
- "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.4.2",
310
- "ui-design/references/progressive-02-字体.md": "5.4.2",
311
- "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.4.2",
312
- "ui-design/references/progressive-04-组件风格速查.md": "5.4.2",
313
- "ui-design/references/progressive-05-移动端专用规范.md": "5.4.2",
314
- "ui-design/references/progressive-06-主题切换实现.md": "5.4.2",
315
- "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.4.2",
316
- "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.4.2",
317
- "uniapp-mall-assets/SKILL.md": "5.4.2",
318
- "unity-integration/SKILL.md": "5.4.2",
319
- "unity-integration/agents/openai.yaml": "5.4.2",
320
- "unity-integration/references/ai-app-delivery.md": "5.4.2",
321
- "unity-integration/references/sdk-api.md": "5.4.2",
322
- "unity-integration/references/toolbox-migration.md": "5.4.2",
323
- "unity-integration/references/webgl-hosting.md": "5.4.2",
324
- "v8-api-config/SKILL.md": "5.4.2",
325
- "v8-cache-pattern/SKILL.md": "5.4.2",
326
- "v8-crud-api/SKILL.md": "5.4.2",
327
- "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.4.2",
328
- "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.4.2",
329
- "v8-debugging/SKILL.md": "5.4.2",
330
- "v8-explorer-tree/SKILL.md": "5.4.2",
331
- "v8-export-import/SKILL.md": "5.4.2",
332
- "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.4.2",
333
- "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.4.2",
334
- "v8-export-import/references/progressive-03-安全-性能注意.md": "5.4.2",
335
- "v8-file-upload/SKILL.md": "5.4.2",
336
- "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.4.2",
337
- "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.4.2",
338
- "v8-formengine-http/SKILL.md": "5.4.2",
339
- "v8-frontend-events/SKILL.md": "5.4.2",
340
- "v8-frontend-events/references/bluetooth-print-api.md": "5.4.2",
341
- "v8-frontend-events/references/bluetooth-print.md": "5.4.2",
342
- "v8-frontend-events/references/progressive-01-列表事件.md": "5.4.2",
343
- "v8-http-integration/SKILL.md": "5.4.2",
344
- "v8-http-integration/references/progressive-01-get-请求.md": "5.4.2",
345
- "v8-http-integration/references/progressive-02-错误处理模式.md": "5.4.2",
346
- "v8-image-processing/SKILL.md": "5.4.2",
347
- "v8-image-processing/agents/openai.yaml": "5.4.2",
348
- "v8-image-processing/references/api-reference.md": "5.4.2",
349
- "v8-menu-buttons/SKILL.md": "5.4.2",
350
- "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.4.2",
351
- "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.4.2",
352
- "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.4.2",
353
- "v8-mongodb/SKILL.md": "5.4.2",
354
- "v8-mq-mqtt/SKILL.md": "5.4.2",
355
- "v8-mq-mqtt/references/mqtt-production.md": "5.4.2",
356
- "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.4.2",
357
- "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.4.2",
358
- "v8-saas-multi-tenant/SKILL.md": "5.4.2",
359
- "v8-security/SKILL.md": "5.4.2",
360
- "v8-security/references/progressive-01-2-权限校验.md": "5.4.2",
361
- "v8-security/references/progressive-02-7-日志记录.md": "5.4.2",
362
- "v8-sql-query/SKILL.md": "5.4.2",
363
- "v8-table-event/SKILL.md": "5.4.2",
364
- "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.4.2",
365
- "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.4.2",
366
- "v8-tcp-integration/SKILL.md": "5.4.2",
367
- "v8-tcp-integration/agents/openai.yaml": "5.4.2",
368
- "v8-template-engine/SKILL.md": "5.4.2",
369
- "v8-utilities/SKILL.md": "5.4.2",
370
- "v8-utilities/references/client-api-index.md": "5.4.2",
371
- "v8-utilities/references/platform-http-routes.md": "5.4.2",
372
- "v8-utilities/references/server-api-index.md": "5.4.2",
373
- "v8-workflow/SKILL.md": "5.4.2",
374
- "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.4.2",
375
- "workspace-conventions/SKILL.md": "5.4.2",
376
- "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.4.2",
377
- "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.4.2",
378
- "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.4.2"
201
+ ".microi-skills-version.json": "5.4.4",
202
+ ".progressive-disclosure-manifest.json": "5.4.4",
203
+ "README.md": "5.4.4",
204
+ "ai-engine/SKILL.md": "5.4.4",
205
+ "ai-engine/agents/openai.yaml": "5.4.4",
206
+ "ai-platform-governance/SKILL.md": "5.4.4",
207
+ "ai-platform-governance/references/progressive-01-功能开关.md": "5.4.4",
208
+ "app-store/SKILL.md": "5.4.4",
209
+ "app-store/agents/openai.yaml": "5.4.4",
210
+ "business-blueprint/SKILL.md": "5.4.4",
211
+ "datasource-engine/SKILL.md": "5.4.4",
212
+ "datasource-engine/agents/openai.yaml": "5.4.4",
213
+ "dos-orm/SKILL.md": "5.4.4",
214
+ "dos-orm/references/api-reference.md": "5.4.4",
215
+ "job-engine/SKILL.md": "5.4.4",
216
+ "job-engine/agents/openai.yaml": "5.4.4",
217
+ "message-notification/SKILL.md": "5.4.4",
218
+ "message-notification/agents/openai.yaml": "5.4.4",
219
+ "message-notification/references/contracts.md": "5.4.4",
220
+ "microi-ai-app-auth.js": "5.4.4",
221
+ "microi-ai-application/SKILL.md": "5.4.4",
222
+ "microi-ai-application/agents/openai.yaml": "5.4.4",
223
+ "microi-ai-application/references/frontend-baseline.md": "5.4.4",
224
+ "microi-client-frontend/SKILL.md": "5.4.4",
225
+ "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.4.4",
226
+ "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.4.4",
227
+ "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.4.4",
228
+ "microi-codex-installer/SKILL.md": "5.4.4",
229
+ "microi-codex-installer/agents/openai.yaml": "5.4.4",
230
+ "microi-codex/SKILL.md": "5.4.4",
231
+ "microi-datasource-mapping/SKILL.md": "5.4.4",
232
+ "microi-db-schema/SKILL.md": "5.4.4",
233
+ "microi-db-schema/agents/openai.yaml": "5.4.4",
234
+ "microi-db-schema/references/core-tables.md": "5.4.4",
235
+ "microi-db-schema/references/form-component-options.md": "5.4.4",
236
+ "microi-db-schema/references/schema-overview.md": "5.4.4",
237
+ "microi-db-schema/references/schema.md": "5.4.4",
238
+ "microi-db-schema/references/table-catalog.md": "5.4.4",
239
+ "microi-deployment/SKILL.md": "5.4.4",
240
+ "microi-deployment/references/deployment-matrix.md": "5.4.4",
241
+ "microi-docs-coverage/SKILL.md": "5.4.4",
242
+ "microi-docs-coverage/references/capability-map.md": "5.4.4",
243
+ "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.4.4",
244
+ "microi-form-engine/SKILL.md": "5.4.4",
245
+ "microi-form-engine/references/component-catalog.md": "5.4.4",
246
+ "microi-form-engine/references/data-source-events.md": "5.4.4",
247
+ "microi-form-layout/SKILL.md": "5.4.4",
248
+ "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.4.4",
249
+ "microi-frontend-sdk/SKILL.md": "5.4.4",
250
+ "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.4.4",
251
+ "microi-left-right-layout/SKILL.md": "5.4.4",
252
+ "microi-microservice/SKILL.md": "5.4.4",
253
+ "microi-microservice/references/runtime-delivery.md": "5.4.4",
254
+ "microi-mobile-app-quality/SKILL.md": "5.4.4",
255
+ "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.4.4",
256
+ "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.4.4",
257
+ "microi-solution-quotation/SKILL.md": "5.4.4",
258
+ "microi-solution-quotation/agents/openai.yaml": "5.4.4",
259
+ "microi-solution-quotation/scripts/build_solution_quote.py": "5.4.4",
260
+ "microi-sso/SKILL.md": "5.4.4",
261
+ "microi-sso/references/acceptance.md": "5.4.4",
262
+ "microi-sso/references/configuration-and-security.md": "5.4.4",
263
+ "microi-sso/references/inbound.md": "5.4.4",
264
+ "microi-sso/references/outbound.md": "5.4.4",
265
+ "microi-system-delivery/SKILL.md": "5.4.4",
266
+ "microi-system-delivery/references/progressive-01-标准工作流.md": "5.4.4",
267
+ "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.4.4",
268
+ "microi-ui/SKILL.md": "5.4.4",
269
+ "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.4.4",
270
+ "microi-uniapp-frontend/SKILL.md": "5.4.4",
271
+ "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.4.4",
272
+ "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.4.4",
273
+ "microi.v8.js": "5.4.4",
274
+ "module-engine/SKILL.md": "5.4.4",
275
+ "module-engine/references/module-config.md": "5.4.4",
276
+ "ocr-engine/SKILL.md": "5.4.4",
277
+ "ocr-engine/agents/openai.yaml": "5.4.4",
278
+ "page-engine/SKILL.md": "5.4.4",
279
+ "page-engine/references/progressive-01-所有组件类型.md": "5.4.4",
280
+ "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.4.4",
281
+ "performance-testing/SKILL.md": "5.4.4",
282
+ "playwright-e2e/SKILL.md": "5.4.4",
283
+ "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.4.4",
284
+ "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.4.4",
285
+ "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.4.4",
286
+ "playwright-e2e/references/progressive-04-ci-建议.md": "5.4.4",
287
+ "print-engine/SKILL.md": "5.4.4",
288
+ "production-readonly-audit/SKILL.md": "5.4.4",
289
+ "report-engine/SKILL.md": "5.4.4",
290
+ "report-engine/agents/openai.yaml": "5.4.4",
291
+ "scripts/optimize-progressive-disclosure.mjs": "5.4.4",
292
+ "scripts/refresh-progressive-disclosure.mjs": "5.4.4",
293
+ "scripts/validate-progressive-disclosure.mjs": "5.4.4",
294
+ "search-engine/SKILL.md": "5.4.4",
295
+ "search-engine/agents/openai.yaml": "5.4.4",
296
+ "spider-engine/SKILL.md": "5.4.4",
297
+ "system-observability/SKILL.md": "5.4.4",
298
+ "translate-engine/SKILL.md": "5.4.4",
299
+ "translate-engine/agents/openai.yaml": "5.4.4",
300
+ "ui-design/SKILL.md": "5.4.4",
301
+ "ui-design/assets/pattern-showcase/app.js": "5.4.4",
302
+ "ui-design/assets/pattern-showcase/index.html": "5.4.4",
303
+ "ui-design/assets/pattern-showcase/styles.css": "5.4.4",
304
+ "ui-design/assets/templates/MCI-DESIGN.md": "5.4.4",
305
+ "ui-design/references/design-pattern-library.md": "5.4.4",
306
+ "ui-design/references/mci-design-contract.md": "5.4.4",
307
+ "ui-design/references/motion-and-media.md": "5.4.4",
308
+ "ui-design/references/product-flow-recipes.md": "5.4.4",
309
+ "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.4.4",
310
+ "ui-design/references/progressive-02-字体.md": "5.4.4",
311
+ "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.4.4",
312
+ "ui-design/references/progressive-04-组件风格速查.md": "5.4.4",
313
+ "ui-design/references/progressive-05-移动端专用规范.md": "5.4.4",
314
+ "ui-design/references/progressive-06-主题切换实现.md": "5.4.4",
315
+ "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.4.4",
316
+ "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.4.4",
317
+ "uniapp-mall-assets/SKILL.md": "5.4.4",
318
+ "unity-integration/SKILL.md": "5.4.4",
319
+ "unity-integration/agents/openai.yaml": "5.4.4",
320
+ "unity-integration/references/ai-app-delivery.md": "5.4.4",
321
+ "unity-integration/references/sdk-api.md": "5.4.4",
322
+ "unity-integration/references/toolbox-migration.md": "5.4.4",
323
+ "unity-integration/references/webgl-hosting.md": "5.4.4",
324
+ "v8-api-config/SKILL.md": "5.4.4",
325
+ "v8-cache-pattern/SKILL.md": "5.4.4",
326
+ "v8-crud-api/SKILL.md": "5.4.4",
327
+ "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.4.4",
328
+ "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.4.4",
329
+ "v8-debugging/SKILL.md": "5.4.4",
330
+ "v8-explorer-tree/SKILL.md": "5.4.4",
331
+ "v8-export-import/SKILL.md": "5.4.4",
332
+ "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.4.4",
333
+ "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.4.4",
334
+ "v8-export-import/references/progressive-03-安全-性能注意.md": "5.4.4",
335
+ "v8-file-upload/SKILL.md": "5.4.4",
336
+ "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.4.4",
337
+ "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.4.4",
338
+ "v8-formengine-http/SKILL.md": "5.4.4",
339
+ "v8-frontend-events/SKILL.md": "5.4.4",
340
+ "v8-frontend-events/references/bluetooth-print-api.md": "5.4.4",
341
+ "v8-frontend-events/references/bluetooth-print.md": "5.4.4",
342
+ "v8-frontend-events/references/progressive-01-列表事件.md": "5.4.4",
343
+ "v8-http-integration/SKILL.md": "5.4.4",
344
+ "v8-http-integration/references/progressive-01-get-请求.md": "5.4.4",
345
+ "v8-http-integration/references/progressive-02-错误处理模式.md": "5.4.4",
346
+ "v8-image-processing/SKILL.md": "5.4.4",
347
+ "v8-image-processing/agents/openai.yaml": "5.4.4",
348
+ "v8-image-processing/references/api-reference.md": "5.4.4",
349
+ "v8-menu-buttons/SKILL.md": "5.4.4",
350
+ "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.4.4",
351
+ "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.4.4",
352
+ "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.4.4",
353
+ "v8-mongodb/SKILL.md": "5.4.4",
354
+ "v8-mq-mqtt/SKILL.md": "5.4.4",
355
+ "v8-mq-mqtt/references/mqtt-production.md": "5.4.4",
356
+ "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.4.4",
357
+ "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.4.4",
358
+ "v8-saas-multi-tenant/SKILL.md": "5.4.4",
359
+ "v8-security/SKILL.md": "5.4.4",
360
+ "v8-security/references/progressive-01-2-权限校验.md": "5.4.4",
361
+ "v8-security/references/progressive-02-7-日志记录.md": "5.4.4",
362
+ "v8-sql-query/SKILL.md": "5.4.4",
363
+ "v8-table-event/SKILL.md": "5.4.4",
364
+ "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.4.4",
365
+ "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.4.4",
366
+ "v8-tcp-integration/SKILL.md": "5.4.4",
367
+ "v8-tcp-integration/agents/openai.yaml": "5.4.4",
368
+ "v8-template-engine/SKILL.md": "5.4.4",
369
+ "v8-utilities/SKILL.md": "5.4.4",
370
+ "v8-utilities/references/client-api-index.md": "5.4.4",
371
+ "v8-utilities/references/platform-http-routes.md": "5.4.4",
372
+ "v8-utilities/references/server-api-index.md": "5.4.4",
373
+ "v8-workflow/SKILL.md": "5.4.4",
374
+ "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.4.4",
375
+ "workspace-conventions/SKILL.md": "5.4.4",
376
+ "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.4.4",
377
+ "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.4.4",
378
+ "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.4.4"
379
379
  },
380
380
  "files": [
381
381
  ".microi-skills-version.json",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "5.4.2",
2
+ "version": "5.4.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.VSCode/bump-version.js",
5
- "updatedAt": "2026-08-30T12:59:42.359Z"
5
+ "updatedAt": "2026-08-31T19:34:24.955Z"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-08-26T19:09:39.599Z",
3
+ "generatedAt": "2026-08-31T08:18:54.747Z",
4
4
  "policy": {
5
5
  "maxEntryLines": 285,
6
6
  "referenceBudgetLines": 245,
@@ -2221,11 +2221,11 @@
2221
2221
  ]
2222
2222
  },
2223
2223
  "v8-file-upload": {
2224
- "originalSha256": "69f7195bfeb618f0020da92535f47c8eb183d431cf16492a12f6f61dbcc7a851",
2225
- "originalLines": 571,
2224
+ "originalSha256": "acc9619e305fbb555253598d0904a2c3da5a71e4faf23941f18ee9cca2f343ae",
2225
+ "originalLines": 574,
2226
2226
  "prefixSha256": "796e8308ae21c36dde1b9268ae71ccb8c2afe9f393d7f9865b6648d2f7f0f22e",
2227
2227
  "prefixBytes": 8923,
2228
- "entryLines": 226,
2228
+ "entryLines": 229,
2229
2229
  "chunks": [
2230
2230
  {
2231
2231
  "id": "v8-file-upload-000",
@@ -2239,8 +2239,8 @@
2239
2239
  "id": "v8-file-upload-001",
2240
2240
  "ordinal": 1,
2241
2241
  "destination": "v8-file-upload/SKILL.md",
2242
- "sha256": "a7572bc0fd333c8f0c240d0f62db4763225ba9f69bfd45d0e0d41ae3f4b1edd0",
2243
- "lines": 13,
2242
+ "sha256": "bacff382201c915334757946ee60d4a65db4e9663dd9e1f86bb68c1c16589321",
2243
+ "lines": 16,
2244
2244
  "heading": "第三方数据库附件迁移"
2245
2245
  },
2246
2246
  {
@@ -13,7 +13,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
13
13
 
14
14
  `AppType` 是历史复用字段:旧包/接口曾把它用于官方/社区来源,也曾把它作为运行类型回退。新代码不能把 `AppType` 当事实源;只在读取旧数据时回退,写入新数据使用 `ApplicationType + PublisherType`。
15
15
 
16
- 客户已有的全局 V8、表单配置、菜单、字段和自定义代码必须保留。升级采用存在性检查、差异合并和包隔离,禁止整表覆盖或把发布方租户数据原样复制到目标租户。
16
+ 应用包是声明式资源的权威交付边界:当前包标记为 `Managed` 的表单元数据、菜单、字段、接口引擎等资源按包覆盖;当前包标记为 `CreateIfMissing` 或 `InsertIfMissing` 的租户扩展/配置只补缺。覆盖安装不等于整表清空,仍禁止把发布方租户业务数据、密钥或连接配置原样复制到目标租户。
17
17
 
18
18
  ## 平台升级的应用商城边界(强制)
19
19
 
@@ -42,20 +42,20 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
42
42
 
43
43
  ## 接口引擎资源所有权(强制)
44
44
 
45
- - 新发布包必须声明 `ResourcePolicies.ApiEngines`,不得再依赖“同 Key 直接覆盖”。官方不可随租户修改的核心使用 `{ Ownership:'Platform', UpgradePolicy:'Managed' }`;提供给租户改业务的 Hook 使用 `{ Ownership:'Tenant', UpgradePolicy:'CreateIfMissing' }`。
46
- - 发布器从上一版安装包正文的 `SysApiEngines` 计算 `BaseHash`;正文可能来自已验证的 HDFS 指针或旧版 `AppPakcet`。导入成功后把本版摘要写入 `sys_microistoreversion.InstallResult.ResourceState.ApiEngines`。普通/社区应用仍按 Base/Local/Incoming 三方保护:`Local == Base` 才更新,`Local != Base && Local != Incoming` 必须冲突回滚。允许覆盖官方 Managed 的信任来源只有两种:一是从固定 `https://api.itdos.com + iTdos` 实时回读并校验为官方 `ApplicationType=Platform` 的应用;二是 Upgrade13 从程序集固定九包白名单读取并校验后,在绑定固定导入器 Key 与当前租户的一次性宿主上下文中调用统一导入器。第二种授权必须由宿主上下文消费一次,单独伪造 V8 参数、离线包、自报官方或非 Platform 来源都不能获得;两种路径都只能恢复 `Platform/Managed`,不得覆盖 `Tenant/CreateIfMissing`。
47
- - `CreateIfMissing` 只在目标 Key 不存在时创建,存在时不得对齐 Id、源码、启用状态或其它字段。扩展模板发布后即归租户维护;后续版本禁止把同一 Key 改回 `Managed` 接管,确需新的官方核心时发布新 Key 并显式迁移。
48
- - 官方功能采用“Managed 核心 + CreateIfMissing Hook”。核心只提供稳定协议和默认行为,并在可信官方 Platform 包更新时覆盖升级;客户日志、写表、通知和业务动作放 Hook,并以稳定 `EventId`、唯一约束或 outbox 幂等。`CreateIfMissing` 一旦交给租户维护,即使后续官方包误改为 Managed 也必须冲突回滚。
45
+ - 新发布包必须声明 `ResourcePolicies.ApiEngines`。不可随租户修改的核心使用 `{ Ownership:'Platform'|'Application', UpgradePolicy:'Managed' }`;提供给租户改业务的 Hook 使用 `{ Ownership:'Tenant', UpgradePolicy:'CreateIfMissing' }`。策略以本次选定且通过身份、版本、大小和 SHA-256 校验的包正文为准。
46
+ - 发布器仍从上一版安装包计算 `BaseHash`,导入成功后把本版摘要写入 `sys_microistoreversion.InstallResult.ResourceState.ApiEngines`,但 `Base/Local/Incoming` 只用于审计。所有官方、社区和普通应用的 `Managed` 接口均按 Incoming 覆盖;本地源码较新、同版本不同源码、历史所有权不同或安装记录缺失都不得形成安装冲突。
47
+ - 当前包声明为 `CreateIfMissing` 时,只在目标 Key 完全不存在时创建;存在时不得对齐 Id、源码、启用状态或其它字段,软删除也算存在。若未来包明确把同一 Key 声明为 `Managed`,则以当前包策略执行覆盖,不再因历史所有权阻断;发布方应在更新日志中明确这一行为变化。
48
+ - 官方功能仍优先采用“Managed 核心 + CreateIfMissing Hook”。核心提供稳定协议和默认行为并随包覆盖;客户日志、写表、通知和业务动作放 Hook,并以稳定 `EventId`、唯一约束或 outbox 幂等。这样覆盖式升级核心时无需自动合并客户可执行代码。
49
49
  - 每个官方包内的接口引擎源码顶部都必须有醒目所有权提示。Managed 提示必须写明所属官方应用、从可信官方源安装/更新/重新安装会恢复官方代码,并指向该应用的 CreateIfMissing Hook;CreateIfMissing 提示必须写明首次创建后归租户维护、官方升级不得覆盖。官方 SSO、登录、通知等核心在安全阶段调用 Hook 时,只传脱敏上下文,禁止传 Token、Secret、密码或原始协议断言。
50
- - 兼容旧 Controller/移动端地址时,在唯一 Managed 接口的 `ApiRoutes` 中用英文分号声明全部旧路径;包导入、启动闭包和写后回读必须校验 `ApiAddress + ApiRoutes` 的全局唯一性。禁止为每个旧路径复制一条接口引擎,也禁止只更新本地 JSON 而遗漏 `.resource-sync-base`、官方商城资源和缓存别名。
51
- - 历史包未声明策略时只能按旧兼容流程安装;重新发布时发布器必须生成策略。验收至少覆盖首次安装、可信官方 Managed 本地有差异仍覆盖、普通应用核心差异冲突回滚、Hook 被改后保持原样、重复安装、两节点竞态,以及官方发布数据库连 `ValidateOnly` 也禁止执行安装器。
50
+ - 兼容旧 Controller/移动端地址时,在唯一 Managed 接口的 `ApiRoutes` 中用英文分号声明全部旧路径。主地址被其它接口占用时,安装器清除旧占用者的该地址并让当前包收回;稳定 Id 被其它 Key 占用时为当前包资源生成新 Id。每次都要清理旧缓存别名并强回读 `ApiAddress + ApiRoutes + ApiV8Code + Version`。
51
+ - 历史包未声明策略时按旧 `LegacyOverwrite` 覆盖兼容;重新发布时发布器必须生成策略。验收至少覆盖首次安装、官方/社区/普通 Managed 本地差异覆盖、同版本重装、软删除恢复、Id/地址自动重映射、Hook 被改后保持原样、两节点竞态,以及官方发布数据库连 `ValidateOnly` 也禁止执行安装器。
52
52
 
53
53
  ## 安装流程
54
54
 
55
55
  1. 校验签名/哈希、包版本、平台兼容性、依赖和磁盘/配额。
56
56
  2. 创建全局唯一 `InstallationId` 和稳定幂等键。
57
57
  3. 使用后台任务执行,阶段性持久化进度与 checkpoint。
58
- 4. 按 Manifest 差异创建缺失资源;已有资源只更新包拥有且允许升级的属性。
58
+ 4. 按 Manifest 创建缺失资源;已有 `Managed` 资源覆盖为包声明值,`CreateIfMissing`/`InsertIfMissing` 既有值保持原样。
59
59
  5. `PostSchema` 完成后,在独立 `ScheduleJobs` checkpoint 中幂等安装定时任务并回读 Quartz 运行元数据。
60
60
  6. 写入成功后刷新共享缓存版本。
61
61
  7. 回读表、字段、引擎、菜单、权限、页面、定时任务等关键资源。
@@ -75,7 +75,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
75
75
  - 每次安装、更新、重新安装生成稳定 `OperationId`。官方计数服务用共享数据库事件表唯一约束去重,并在同一事务内登记事件和递增 `InstallCount`;重试、跨节点和响应丢失不得重复计数。
76
76
  - 安装次数回传属于非阻塞幂等遥测,不是应用导入事务的成功条件。来源节点返回旧格式 `True`、空响应、非 JSON、业务失败或请求异常时,只能写入带 `OperationId`/`InstallationKey` 的 warning 诊断,不得用 `_error_` 标记或回滚已经成功导入的应用;重试仍须复用同一幂等键。
77
77
  - “全部安装/更新”固定只处理 `ApplicationType=Platform` 的官方平台应用中未安装与存在新版本的项目,不得把 UniApp、Web、MicroService 或其它社区/AI 应用整库安装;已是最新版的应用不重新安装。批量计划、子项状态、checkpoint 和进度必须持久化到共享数据库/后台任务,支持多节点抢占、失败重试和重启恢复,不能依赖进程内集合或浏览器状态。
78
- - 主租户批量维护全部子租户时,前端入口和接口引擎都必须校验主租户上下文及 `Level >= 9999`,再由可信控制面为每个启用子租户创建独立持久后台任务;父任务必须按子任务真实百分比聚合进度,等全部子任务终态后才成功或失败,并在通知中心保留每个租户、阶段和原始失败原因。所有子任务可立即创建,但固定商城工作器必须通过配置租户 Redis 的集群并发租约跨租户串行执行,避免共享物理库并发 DDL/元数据写入死锁;分片幂等任务使用足以覆盖短时死锁和滚动重启的有界重试预算,禁止无限重试。`MaxAttempts` 表示连续失败预算:任一分片成功写入 checkpoint 后必须把 `AttemptCount` 与陈旧 `LastError` 清零,不能让数百个成功分片之间偶发的网络错误按任务生命周期累计并误终结。分片重新入队后必须按 `COALESCE(NextRunTime, CreateTime)` 选取最早就绪任务,禁止只按 `CreateTime` 让最早长任务重复抢占全部分片。商城包属于只读权威数据,可对空响应做有界退避重试,并优先用完整响应的 `Content`、`RawBytes`、HTTP 状态和传输错误诊断;不得把该规则扩展到安装写入请求。目标租户固定商城工作器只允许从受信任官方谱系向更高版本刷新;同版本不同源码、目标端更新版或未知谱系必须失败关闭。历史空库缺少生成实体所需物理列时,导入器须在首次 FormEngine 调用前幂等补齐并回读,不能再把真实表结构错误包装成 `Value cannot be null (source)`。
78
+ - 主租户批量维护全部子租户时,前端入口和接口引擎都必须校验主租户上下文及 `Level >= 9999`,再由可信控制面为每个启用子租户创建独立持久后台任务;父任务必须按子任务真实百分比聚合进度,等全部子任务终态后才成功或失败,并在通知中心保留每个租户、阶段和原始失败原因。所有子任务可立即创建,但固定商城工作器必须通过配置租户 Redis 的集群并发租约跨租户串行执行,避免共享物理库并发 DDL/元数据写入死锁;分片幂等任务使用足以覆盖短时死锁和滚动重启的有界重试预算,禁止无限重试。`MaxAttempts` 表示连续失败预算:任一分片成功写入 checkpoint 后必须把 `AttemptCount` 与陈旧 `LastError` 清零,不能让数百个成功分片之间偶发的网络错误按任务生命周期累计并误终结。分片重新入队后必须按 `COALESCE(NextRunTime, CreateTime)` 选取最早就绪任务,禁止只按 `CreateTime` 让最早长任务重复抢占全部分片。商城包属于只读权威数据,可对空响应做有界退避重试,并优先用完整响应的 `Content`、`RawBytes`、HTTP 状态和传输错误诊断;不得把该规则扩展到安装写入请求。目标租户固定商城工作器必须锁定并校验精确包快照;同版本重装、显式选择历史版本或目标端存在更新源码时,仍以所选包的 `Managed` 资源覆盖,不得用版本/源码差异制造冲突。历史空库缺少生成实体所需物理列时,导入器须在首次 FormEngine 调用前幂等补齐并回读,不能再把真实表结构错误包装成 `Value cannot be null (source)`。
79
79
  - 批量维护的权威目录按当前节点 `OsClientType + OsClientNetwork` 隔离;同一主租户同时存在 Internal、Internet 或其它活动分区时,必须在每个分区对应的主租户节点独立发起并验收,不能用一个分区的成功任务推断全平台成功。每个分区先回读精确预期租户数与名单,等待父子任务全部终态且 `SucceededCount=ExpectedCount、FailedCount=0`,再用新幂等键立即执行一次无操作复跑并确认零安装/零更新。禁止修改 `sys_osclients` 的网络字段来把租户临时塞进另一分区,也禁止让两个分区同时维护可能指向同一物理库的重复租户记录。
80
80
  - 必须随所有后端版本自动落地的平台基础能力,仍要封装成受信任的官方 Platform 应用包,再由升级器调用统一 `import-microi-store-package` 幂等导入;禁止把表、字段、页面或微服务复制成定制 C# 迁移。`app.microi.saas-engine.json` 可携带基础空库所需的 `mci_system_setting`、`mci_user_external_identity`、默认设置和平台内置微服务;系统账号的 `platform-user-update-preferences`、`platform-user-update-profile`、`platform-user-custom-hook` 只由 `app.microi.sys_user.json` 交付,租户设置的 `platform-tenant-system-settings`、`platform-system-settings-custom-hook` 只由 `app.microi.sys-config.json` 交付。SaaS/Store 不得保留这些 Key、策略或 RequiredPlatformCapabilities。默认行必须使用 `InsertIfMissing + ConfigKey`,只补缺失,不覆盖 `ValueSource=Tenant` 的租户值或租户后来明确关闭的功能。小型平台启动微服务应以 `Source=NotIncluded + Build=DatabaseOnly + StorageMode=db` 随程序集交付并接受 256 文件/5MB、逐文件哈希和无源码门禁,使新租户在 HDFS 故障时仍能打开商城与恢复入口;普通应用安装、源码编辑和文件能力继续失败关闭,不得伪装成全平台健康。
81
81
  - 批量任务已经以“一个应用”为外层持久化恢复单元。规模可控的小型官方包应在一个事务中完成,避免对同一包体按 8 个字段反复下载、解析和重新排队;超过字段、表、DDL、流程、随包数据或资产安全阈值的大包继续使用内部 checkpoint 分片。热更新发现旧版批量计划不含 `ApplicationType` 时,必须丢弃旧计划并重新盘点,不能继续安装历史计划中的社区应用。
@@ -165,21 +165,21 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
165
165
 
166
166
  - 触发场景:租户先升级新版前后端,登录后路由初始化固定调用 `/apiengine/platform-sys-menu`;目标库此前没有该接口。应用商城包只补了 `platform-background-task`,而菜单接口仍由安装顺序靠后的 SaaS 包顺带携带;启动完整性检查也只验证后台任务接口,于是数据库版本和商城版本都显示最新,但用户在进入应用商城之前已经因 `NoExistData sys_apiengine` 全站不可用。
167
167
  - 根因:把单个已修复依赖误当成完整的启动依赖集合,包资源闭包、`NeedRefresh` 完成判定和安装后强回读没有使用同一清单;发布验收只覆盖已有目标租户,未覆盖“新版二进制 + 历史库恰好缺少某一启动接口”的升级排列。
168
- - 通用规则:凡是登录、菜单构建、恢复入口或应用商城打开之前必调的表、接口引擎和微服务路由,都属于启动依赖闭包。每项资源必须只有一个官方 Platform/Application 包作为唯一所有者。API 进程接收流量前的门禁不得维护“登录页七接口”之类手写清单;必须从九个随服务端自动安装的内置官方基础应用包读取全部 `SysApiEngines`,校验 Key/稳定 Id/自定义地址/所有权无重复,再补缺并逐项物理强回读。这样登录后的组织、角色、角标、健康、消息、SSO、AI、商城工作器及内部接口也不会在完整包后台升级完成前出现 `NoExistData`。`Managed` 资源只由所属包升级;`Tenant/CreateIfMissing` 仅在数据库中完全不存在时创建,既有大小写变体、禁用记录或墓碑都归租户维护,不得恢复或覆盖。
169
- - 竞态与验收:前端可对明确的“启动 Managed 资源尚未落库”做不超过一分钟的有界退避,并在耗尽后显示精确包名和最低版本;它不能吞掉鉴权错误、普通网络错误,也不能代替服务端修复。跨大量历史租户的 `StartupDependencyBootstrapOnly` 是独立的事故工具,仍可从应用商城与 SaaS 两个不可变包只补七项最小可登录接口并做物理强回读;它不是 API 进程的完整运行时就绪定义,成功后仍须执行普通完整应用更新。契约测试须枚举九个包的全部接口资源,覆盖稳定 Id/地址冲突、CreateIfMissing 墓碑保护、登录后实际路由、商城批量安装和已健康零操作。
168
+ - 通用规则:凡是登录、菜单构建、恢复入口或应用商城打开之前必调的表、接口引擎和微服务路由,都属于启动依赖闭包。每项资源必须只有一个官方 Platform/Application 包作为唯一所有者。API 进程接收流量前的门禁不得维护“登录页七接口”之类手写清单;必须从九个随服务端自动安装的内置官方基础应用包读取全部 `SysApiEngines`。同 Key `Managed` 记录原位覆盖包内源码、版本、主路由、多路由和开关,软删除必须恢复;包内 Id 被其它 Key 占用时生成新 Id,包内主地址被其它接口占用时收回地址。`Tenant/CreateIfMissing` 仅在数据库中完全不存在时创建,既有大小写变体、禁用记录或墓碑都归租户维护,不得恢复或覆盖。
169
+ - 竞态与验收:前端可对明确的“启动 Managed 资源尚未落库”做不超过一分钟的有界退避,并在耗尽后显示精确包名和最低版本;它不能吞掉鉴权错误、普通网络错误,也不能代替服务端修复。跨大量历史租户的 `StartupDependencyBootstrapOnly` 是独立事故工具,可从应用商城与 SaaS 两个不可变包覆盖式恢复七项最小可登录 Managed 接口并做物理强回读;它不是 API 进程的完整运行时就绪定义,成功后仍须执行普通完整应用覆盖更新。契约测试须枚举九个包的全部接口资源,覆盖 Managed 本地漂移/软删除、Id/地址自动重映射、CreateIfMissing 墓碑保护、登录后实际路由、商城批量安装和已健康零操作。
170
170
 
171
171
  ### 2026-08-26:登录成功后仍成片 `sys_apiengine NoExistData` 与 Upgrade25 历史文件阻断
172
172
 
173
173
  - 触发:新版前后端部署到历史租户后,登录页依赖已被补齐,但 `platform-service-health`、`platform-sys-dept`、`mci-module-presentation-stats`、`platform-runtime-custom-hook`、商城批量工作器等登录后接口继续缺失;与此同时 `mci_ai_app_file.VersionId` 的历史空值使 Upgrade25 在创建唯一索引前失败,后续后台升级链无法收敛。
174
174
  - 根因:把“能登录”误当成“平台运行时已就绪”,启动门禁和事故工作器长期依赖固定七项清单;历史应用文件在 V3 引入版本外键前已经存在,升级只做审计并直接失败,没有安全、确定且可重放的归档策略。旧商城工作器还可能访问已经改名的 `/apiengine/get-microi-store` 地址。
175
- - 通用修复:API 进程启动门禁以上述九包全部接口为事实源,缺失 Managed 资源从程序集内置官方包创建,CreateIfMissing 只补完全不存在的记录;应用商城保留独立 Managed 旧地址接口并转发到 `get-microi-store` Key 的正式 `/apiengine/get-microi-store-list` 实现。Upgrade25 必须先按 `OsClient + AppId + legacy-unversioned-v3` 生成确定性历史版本 Id,把每个应用的空 `VersionId` 文件原样归档并强回读为零,再计算路径 Hash 和创建唯一索引;文件同时缺少 `AppId`、确定性 Id 被占用或同名版本身份不一致时失败关闭,不猜测、不合并、不删除。
175
+ - 通用修复:API 进程启动门禁以上述九包全部接口为事实源,Managed 资源无论缺失、漂移、软删除或同版本都从程序集内置官方包覆盖恢复,CreateIfMissing 只补完全不存在的记录;应用商城保留独立 Managed 旧地址接口并转发到 `get-microi-store` Key 的正式 `/apiengine/get-microi-store-list` 实现。Upgrade25 必须先按 `OsClient + AppId + legacy-unversioned-v3` 生成确定性历史版本 Id,把每个应用的空 `VersionId` 文件原样归档并强回读为零,再计算路径 Hash 和创建唯一索引;文件同时缺少 `AppId`、确定性 Id 被占用或同名版本身份不一致时失败关闭,不猜测、不合并、不删除。
176
176
  - 验收:应用包测试必须证明九包接口 Key/稳定 Id 全局唯一、每项政策与醒目提示完整、旧商城地址和正式地址均存在;升级测试覆盖 MySQL/SQL Server/Oracle 的历史分组、参数化更新和样本诊断 SQL。真实启动日志必须分别显示物理字段、完整平台运行时闭包、Upgrade25 历史归档计数和每个升级步骤终态;登录后逐一调用当前用户、健康、部门、私有文件、菜单角标与商城批量计划,不能只验证匿名系统设置。
177
177
 
178
178
  ## 复盘:应用包切换 HDFS 后旧导入器无法更新自己
179
179
 
180
180
  - 触发场景:商城行与不可变版本快照已经只保存 HDFS 路径、大小和 SHA-256;历史租户仍运行只读取 `AppPakcet` 的导入器。用户尝试先更新“应用商城”以获得新版导入器时,旧导入器从商城源取得空 `AppPakcet`,在 3% 直接报“Package不能为空”,形成更新器无法更新自己的引导死锁。
181
181
  - 通用协议:新版导入器请求商城模型时必须显式声明 `PackagePointerMode=HdfsV1`,自行下载一次并校验 UTF-8 字节数与 SHA-256。商城模型面对未声明该能力的旧调用端,允许从同一个受信 HDFS 指针读取并严格校验正文,只在本次响应的 `AppPakcet` 中临时回填;绝对禁止写回 `sys_microistore`、`mic_data_version`、任务参数或检查点。私有包仍必须使用短期授权地址,大小上限、HTTP 状态和摘要任一异常都失败关闭。
182
- - 发布顺序与验收:先把兼容桥更新到官方商城源的 `get-microi-store-model`,再发布包含新版模型接口、导入器和启动依赖的精确应用商城版本。自动化同时覆盖新版请求零回填、旧请求可安装、摘要/大小不符拒绝、数据库无包正文字段更新;真实历史租户必须保留旧导入器启动第一次正式更新,等待终态成功并回读新版导入器,然后立即同版本复跑为零更新。直接通过 MCP 替换目标导入器只能作为已故障租户的最后恢复手段,不能代替协议兼容性验收。
182
+ - 发布顺序与验收:先把兼容桥更新到官方商城源的 `get-microi-store-model`,再发布包含新版模型接口、导入器和启动依赖的精确应用商城版本。自动化同时覆盖新版请求零回填、旧请求可安装、摘要/大小不符拒绝、数据库无包正文字段更新;真实历史租户必须保留旧导入器启动第一次正式更新,等待终态成功并回读新版导入器,然后立即同版本覆盖式复跑,确认资源仍精确等于包正文且不产生重复记录。直接通过 MCP 替换目标导入器只能作为已故障租户的最后恢复手段,不能代替协议兼容性验收。
183
183
 
184
184
  ## 复盘:可信后台任务被 StopHttp 提前拦截
185
185
 
@@ -212,10 +212,17 @@ MCP 建模只使用:
212
212
  }
213
213
  ```
214
214
 
215
- `FieldRelations` 使用紧凑格式 `[["父表字段","子表字段",true?], ...]`。全部关系用于新增回写和导入回填;第三位 `true` 仅标记参与导入反查父表的关系。后端兼容旧三项配置,新版前端会合并去重并在字段下次保存时清除旧键。
216
-
217
- `OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
218
- 用于展示关联集合,不能用前端拼接代替数据权限。
215
+ `FieldRelations` 使用紧凑格式 `[["父表字段","子表字段",true?], ...]`。全部关系用于新增回写和导入回填;第三位 `true` 仅标记参与导入反查父表的关系。后端兼容旧三项配置,新版前端会合并去重并在字段下次保存时清除旧键。
216
+
217
+ - `TableChild` 的父关联键为空、`null` 或仅空白时必须失败关闭:不得发起子表列表请求,服务端
218
+ 收到空关联键也必须返回空集合,不能把空筛选忽略后退化成全表查询。旧客户端无法在请求层保证时,
219
+ 应让控件在关联键有效前保持不挂载;`DisablePagination` 必须为 `false`,只作为第二道限流保护。
220
+ - `InFormV8`、字段进入事件和抽屉打开回调不得为预生成的父 `Id` 持久化默认子记录;用户取消
221
+ 新增不会提交父表,会留下无法回滚的孤儿数据。默认行应保留在前端状态,或在父表保存成功后通过
222
+ 幂等的后端事件创建;不需要真实明细时保持 0 行。
223
+
224
+ `OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
225
+ 用于展示关联集合,不能用前端拼接代替数据权限。
219
226
 
220
227
  ### 子表验收与复盘
221
228
 
@@ -99,6 +99,14 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
99
99
  - AI 工具单次读取上限不是 MicroService 源码文件上限。即使 `microi.v8.js` 等文件超过 50KB,也应保持一个完整文件,由 MCP 直接从磁盘读取。
100
100
  - `sourceFiles` 仅用于调用方本来就持有内存文件的旧版兼容场景;不得把它作为本地工程默认路径,也不得用人工切片规避上下文限制。
101
101
 
102
+ ### 多人协作发布前远端合并门禁(强制)
103
+
104
+ - 每一次同步或发布(包括同版本重试、紧急修复和仅编译产物发布)开始前,必须重新调用 `microi_get_application_context` 拉取目标租户当前完整私有源码清单、正文、版本与逐文件哈希;禁止沿用任务开始时或上一次发布后的旧快照。
105
+ - 以最近一次已确认同步的源码清单为 Base,对 Base、本地 Local、远端 Remote 做逐文件三方比较:仅远端变化先拉取,仅本地变化保留本地,双方变化必须按真实业务语义合并并重新构建测试;删除/重命名同样纳入冲突判断。没有可靠 Base、远端源码不完整或冲突未解决时失败关闭,不能把时间戳较新当作自动胜出规则。
106
+ - `replace`、`ReplacePrivateSourceOnly` 和流式发布都不是覆盖他人代码的授权。发现远端版本、文件正文或哈希晚于本地基线时,禁止直接用本地目录整包覆盖;必须先完成上述合并,并让本地唯一事实源保存合并结果。
107
+ - 合并完成后冻结 `expectedCurrentVersion`、`expectedAppVersion`、`SourceManifestHash`、`RuntimeManifestHash` 与 `DeliveryBatchId`。在源码同步、stage、finalize 任一步之前再次回读;任一版本或哈希漂移都说明期间有人发布,必须废弃当前 stage,重新拉取、三方合并、构建和预检。
108
+ - 发布后必须逐文件回读远端私有源码与公有运行产物并核对哈希,再把该远端清单保存为下一次三方比较的共同 Base。只回读入口 `200`、只核对版本号或只保留本地构建目录,都不能证明多人协作发布没有丢代码。
109
+
102
110
  ## 发布
103
111
 
104
112
  - 创建/更新元数据:`microi_create_microservice`。
@@ -59,7 +59,7 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
59
59
  | 接口返回 `{ FileName, ContentType, FileByteBase64 }` | 接口直接响应文件 |
60
60
 
61
61
  <!-- /microi-progressive:chunk -->
62
- <!-- microi-progressive:chunk id=v8-file-upload-001 sha256=a7572bc0fd333c8f0c240d0f62db4763225ba9f69bfd45d0e0d41ae3f4b1edd0 -->
62
+ <!-- microi-progressive:chunk id=v8-file-upload-001 sha256=bacff382201c915334757946ee60d4a65db4e9663dd9e1f86bb68c1c16589321 -->
63
63
  ## 第三方数据库附件迁移
64
64
 
65
65
  当第三方表只保存附件路径时,先用 `microi_inspect_external_database` / `microi_query_external_database` 或 `V8.Dbs.<DbKey>` 查询记录。`microi_import_external_attachment` 允许后端已确认的 `Level >= 9999` 当前用户直接提供 HTTP/HTTPS URL、API 节点可读的本机绝对路径或 UNC 路径。
@@ -68,6 +68,9 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
68
68
  - 下载与上传使用临时文件和文件流,不经过 Base64;不设固定 20/100 MB 上限,`MaxBytes=0` 或省略表示不设置 MCP 上限,可处理 200/500 MB 或更大文件。
69
69
  - 带签名参数或用户凭据的源 URL、鉴权 Header 和本机/UNC 路径不得出现在结果、日志或目标表;脱敏审计只记录来源 SHA-256、类型和字节数,目标字段只保存吾码租户内相对路径。
70
70
  - 使用第三方附件 Id/版本作为幂等键,回读目标记录后才标记成功;多节点重投不能重复产生业务附件。
71
+ - 写入目标 `FileUpload` 字段前必须回读其权威 `diy_field.Config.FileUpload.Limit`;目标字段为 `Limit=true` 时,迁移上传也必须使用 `Limit=true` 写入私有桶,不得上传到公有桶后仅靠字段路径伪装为私有文件。
72
+ - 源附件为空、大小为 `0` 或源对象不可读取时,不得创建目标业务记录并把上传字段保存为 `[]`、`'[]'` 或其它空占位值;应仅在迁移账本中记录为跳过或失败,保留来源 Id、原因和可重试状态。
73
+ - 私有附件只有在目标记录回读成功,并使用该记录的权威资源上下文调用 `/apiengine/platform-private-file-url` 取得代理地址,再对该地址执行 `Range: bytes=0-0` 且确认返回 `200/206`、实际读到字节并且不是 JSON 错误后,才允许标记迁移成功;完整验收再核对总字节数或 SHA-256。
71
74
  - 批量迁移应落任务状态表并分页处理,失败可重试;不要让 MCP 一次加载整库路径或大文件集合。
72
75
 
73
76
  可信后端 V8 可用 `V8.Http.GetResponse({ Url: url }).RawBytes` 下载,再用 `System.Convert.ToBase64String` 和 `V8.Method.Upload` 上传。该路径同样必须校验域名、大小、Content-Type、后缀和最终重定向目标。
@@ -105,7 +105,7 @@ AI 为 Microi 平台新增或修改任何业务逻辑、后台工具、数据维
105
105
 
106
106
  能由应用包声明、差异安装和回读验收完成的升级,不得在 `Microi.Server/Microi.Upgrade/` 新增定制 .NET 升级类。表、字段、Tab、菜单、角色权限、接口引擎、表单事件、数据源、页面、打印、工作流、任务及可幂等安装的种子数据,默认都属于应用商城资源。
107
107
 
108
- - 应用包中的接口引擎必须声明 `ResourcePolicies.ApiEngines`:官方核心使用 `Managed`,租户 Hook 使用 `CreateIfMissing`。`Managed` 以目标端安装记录的上游 SHA-256 为 Base,仅当 `Local == Base` 才升级;本地已改则整包冲突回滚。`CreateIfMissing` 首次创建后永不覆盖,且同一 Key 后续禁止改回 `Managed`;确需收回官方维护时必须发布新 Key 并显式迁移。安全核心禁止自动合并可执行代码,要求把客户差异迁移到 Hook 或人工确认。
108
+ - 应用包中的接口引擎必须声明 `ResourcePolicies.ApiEngines`:当前包声明为 `Managed` 的资源以本次选定且已校验的包正文为最终事实,同版本重装、目标端源码/版本差异、软删除、稳定 Id 或路由占用都自动覆盖或重映射;`BaseHash/LocalHash` 只保留审计,不得再形成整包冲突。当前包声明为 `CreateIfMissing` 的租户 Hook 只在 Key 完全不存在时创建,既有记录(含禁用或软删除)保持原样。覆盖范围只限包拥有的声明式资源,禁止整表清空业务数据或覆盖 `InsertIfMissing` 租户配置值。
109
109
  - 吾码官方开发者若可调用绑定 `https://api.itdos.com`、`OsClient=iTdos` 的 `microi_itdos`,必须先在官方主租户通过 MCP 更新资源,重新制作并发布对应官方应用,发布后按字段/菜单/引擎/包版本回读;再用目标租户 MCP 安装/更新并轮询后台任务到 `Succeeded`。
110
110
  - 当前用户没有 `microi_itdos` 权限时,通过其自己的 MCP/Manifest 幂等升级自己的数据库并回读;不得为了单个租户把定制迁移塞进通用后端。确需让更多用户复用时,应生成其有权维护的社区/私有应用包。
111
111
  - 只有应用商城运行前就必须存在的物理兼容基础、跨版本核心协议迁移、存储格式变化,或安装器自身无法安全表达的不可逆平台迁移,才允许进入 `Microi.Upgrade`。每个例外必须写明“为什么应用包不能完成”、影响范围、回滚/前后兼容、分布式幂等和验收依据。