@microi.net/cli 5.3.2 → 5.3.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.3.2",
8
+ "version": "5.3.4",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.3.2",
14
+ "version": "5.3.4",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.3.2",
3
+ "version": "5.3.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.3.2",
3
+ "version": "5.3.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.3.2",
8
+ "version": "5.3.4",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.3.2",
14
+ "version": "5.3.4",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.3.2",
3
+ "version": "5.3.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-25T19:42:06.407Z",
3
- "version": "5.3.2",
2
+ "builtAt": "2026-08-26T02:45:36.048Z",
3
+ "version": "5.3.4",
4
4
  "sourceProducts": [
5
5
  "vscode-extension",
6
6
  "microi-cli",
@@ -13,6 +13,6 @@
13
13
  "cli": "19fa79f0727616fbaaa9cdffc2485dc58aede013931d3d5662baa36cdbf5eb07",
14
14
  "router": "ffc14787fc2d3d6173b7a779b77139b759eb1d482cea787f71283f4017a4e223",
15
15
  "broker": "caae2730cc411d11c20f33b367968f7538aae8f5b65a713fcc557deedaefcf70",
16
- "dshBundle": "ad91a1a8d2bbf0406b08b9d3808b07db49bea6cb0e4a0f3b38518c534963eb6e"
16
+ "dshBundle": "d62ff9e60fa3ad84faa76449d1bf8146adcb83ec9bff0a1575b40e0f995e0df3"
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.3.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.3.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.3.2",
3
+ "version": "5.3.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-25T19:42:05.331Z",
2
+ "builtAt": "2026-08-26T02:45:34.848Z",
3
3
  "source": "../microi.skills",
4
4
  "extension": {
5
5
  "name": "v8-engine",
6
- "version": "5.3.2",
6
+ "version": "5.3.4",
7
7
  "publisher": "Microi"
8
8
  },
9
9
  "skills": {
10
- "version": "5.3.2",
10
+ "version": "5.3.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": 2258104
18
+ "bytes": 2263031
19
19
  },
20
20
  "fileHashes": {
21
- ".microi-skills-version.json": "8538b79a3c4c5b7d8a4f2c9d7b5da6b7e9c762a586716a45b61e0952bcfa6b7b",
21
+ ".microi-skills-version.json": "5c4a69fad230f7c7ea552ee67fe2d0b264e19c690c49d31a3dca2bfa16f14bed",
22
22
  ".progressive-disclosure-manifest.json": "647fb9b710b958ca64713c45bb0e8a17252ec7f2913179327a26525a2cd5a31d",
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": "e05b00605910f2d0db27f1ad32742bf89d95468e238d70402997119bd5ebf585",
28
+ "app-store/SKILL.md": "318a0f3b9cd3d2b2cf4e8e06b96f3ccdce928b49461c490654e9fe938e2ccd60",
29
29
  "app-store/agents/openai.yaml": "eda8f5cf043e7b8fb0e4fb3acf0625fef95eb49586b43187ced277cd0ae4a2c4",
30
30
  "business-blueprint/SKILL.md": "01619a3b6d37b5b67649ee59d2701301222006d3b943882b2802b1721c58f8a9",
31
31
  "datasource-engine/SKILL.md": "bed8352f1d43b55145e1c492d1ea0ca1ec8750b5c4d74e1e80cd71aa7b9a2e6f",
@@ -175,7 +175,7 @@
175
175
  "v8-mq-mqtt/references/mqtt-production.md": "fec6dd18d58c0f0fc90a295286945f6e7cb7f43c60022c4fd9d48f9baafb35b9",
176
176
  "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "842c74bd8bc30b932346e34c0d4154edffc1bf6a5a8aaafaaa344f250394762c",
177
177
  "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "433b922578f37e95483a3d794ad0bf60ba6344fe9ea580eeb3d34b42c50d352f",
178
- "v8-saas-multi-tenant/SKILL.md": "5c6dc57f52ed55ac401c4e7debc81a5ee7c97aeba34c303995bcdb61d7bdc9b1",
178
+ "v8-saas-multi-tenant/SKILL.md": "a8463c2759e5872cbf198e67df963d7db4662264b92662bd7efc18fb4cf9db88",
179
179
  "v8-security/SKILL.md": "f7736752de7981deb6b62e468b20a2b7ca5654b6d7a93c56be1ce18a32a15e9b",
180
180
  "v8-security/references/progressive-01-2-权限校验.md": "a7e2314b8f2f9bf413956191ffeda6d2f823760def2b06bf6b4c1565e8f71816",
181
181
  "v8-security/references/progressive-02-7-日志记录.md": "2758de279da56e90587df8422e25a1ccfce5c3bdc1f1c363a90c666b6c3f298a",
@@ -189,7 +189,7 @@
189
189
  "v8-utilities/SKILL.md": "2cf8fc6d1a9296ea60bb89ea1b130ac5c9a1f9eb94802fed0cceaf8b61de1b30",
190
190
  "v8-utilities/references/client-api-index.md": "3362126197bd34191640d6bd532b16f1ed446c4a8a9d805f4973be5d58b90a4a",
191
191
  "v8-utilities/references/platform-http-routes.md": "b081b87dff5848eed9b948e2324d25ff27f26f14dc2045df486e9a66981bb74b",
192
- "v8-utilities/references/server-api-index.md": "8728a1bff73ae5066d48560f2d6e276d7235dd7df6f887c3b7e06e6a1dd2016b",
192
+ "v8-utilities/references/server-api-index.md": "83e263354a04fe7a0174b3e5244def98129b8b389075a6786770d5cf149bddac",
193
193
  "v8-workflow/SKILL.md": "d068ceded6f338fece9443f354dff21dfcf744dd192dd6329b2e98692bb8181e",
194
194
  "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "9b6b01e7ac03c0a11bc837671a30107ff5c5f253029d74fd17713084104d7e99",
195
195
  "workspace-conventions/SKILL.md": "1ba87f3812a83469dfbec33e7efa34a401d3efda5bdbccb083c9c8e0f93f0321",
@@ -198,184 +198,184 @@
198
198
  "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "86db1f03700fd54dd824d28c553c678202e8f74b796fd0f9d91f63bf53a530b1"
199
199
  },
200
200
  "fileVersions": {
201
- ".microi-skills-version.json": "5.3.2",
202
- ".progressive-disclosure-manifest.json": "5.3.2",
203
- "README.md": "5.3.2",
204
- "ai-engine/SKILL.md": "5.3.2",
205
- "ai-engine/agents/openai.yaml": "5.3.2",
206
- "ai-platform-governance/SKILL.md": "5.3.2",
207
- "ai-platform-governance/references/progressive-01-功能开关.md": "5.3.2",
208
- "app-store/SKILL.md": "5.3.2",
209
- "app-store/agents/openai.yaml": "5.3.2",
210
- "business-blueprint/SKILL.md": "5.3.2",
211
- "datasource-engine/SKILL.md": "5.3.2",
212
- "datasource-engine/agents/openai.yaml": "5.3.2",
213
- "dos-orm/SKILL.md": "5.3.2",
214
- "dos-orm/references/api-reference.md": "5.3.2",
215
- "job-engine/SKILL.md": "5.3.2",
216
- "job-engine/agents/openai.yaml": "5.3.2",
217
- "message-notification/SKILL.md": "5.3.2",
218
- "message-notification/agents/openai.yaml": "5.3.2",
219
- "message-notification/references/contracts.md": "5.3.2",
220
- "microi-ai-app-auth.js": "5.3.2",
221
- "microi-ai-application/SKILL.md": "5.3.2",
222
- "microi-ai-application/agents/openai.yaml": "5.3.2",
223
- "microi-ai-application/references/frontend-baseline.md": "5.3.2",
224
- "microi-client-frontend/SKILL.md": "5.3.2",
225
- "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.3.2",
226
- "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.3.2",
227
- "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.3.2",
228
- "microi-codex-installer/SKILL.md": "5.3.2",
229
- "microi-codex-installer/agents/openai.yaml": "5.3.2",
230
- "microi-codex/SKILL.md": "5.3.2",
231
- "microi-datasource-mapping/SKILL.md": "5.3.2",
232
- "microi-db-schema/SKILL.md": "5.3.2",
233
- "microi-db-schema/agents/openai.yaml": "5.3.2",
234
- "microi-db-schema/references/core-tables.md": "5.3.2",
235
- "microi-db-schema/references/form-component-options.md": "5.3.2",
236
- "microi-db-schema/references/schema-overview.md": "5.3.2",
237
- "microi-db-schema/references/schema.md": "5.3.2",
238
- "microi-db-schema/references/table-catalog.md": "5.3.2",
239
- "microi-deployment/SKILL.md": "5.3.2",
240
- "microi-deployment/references/deployment-matrix.md": "5.3.2",
241
- "microi-docs-coverage/SKILL.md": "5.3.2",
242
- "microi-docs-coverage/references/capability-map.md": "5.3.2",
243
- "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.3.2",
244
- "microi-form-engine/SKILL.md": "5.3.2",
245
- "microi-form-engine/references/component-catalog.md": "5.3.2",
246
- "microi-form-engine/references/data-source-events.md": "5.3.2",
247
- "microi-form-layout/SKILL.md": "5.3.2",
248
- "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.3.2",
249
- "microi-frontend-sdk/SKILL.md": "5.3.2",
250
- "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.3.2",
251
- "microi-left-right-layout/SKILL.md": "5.3.2",
252
- "microi-microservice/SKILL.md": "5.3.2",
253
- "microi-microservice/references/runtime-delivery.md": "5.3.2",
254
- "microi-mobile-app-quality/SKILL.md": "5.3.2",
255
- "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.3.2",
256
- "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.3.2",
257
- "microi-solution-quotation/SKILL.md": "5.3.2",
258
- "microi-solution-quotation/agents/openai.yaml": "5.3.2",
259
- "microi-solution-quotation/scripts/build_solution_quote.py": "5.3.2",
260
- "microi-sso/SKILL.md": "5.3.2",
261
- "microi-sso/references/acceptance.md": "5.3.2",
262
- "microi-sso/references/configuration-and-security.md": "5.3.2",
263
- "microi-sso/references/inbound.md": "5.3.2",
264
- "microi-sso/references/outbound.md": "5.3.2",
265
- "microi-system-delivery/SKILL.md": "5.3.2",
266
- "microi-system-delivery/references/progressive-01-标准工作流.md": "5.3.2",
267
- "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.3.2",
268
- "microi-ui/SKILL.md": "5.3.2",
269
- "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.3.2",
270
- "microi-uniapp-frontend/SKILL.md": "5.3.2",
271
- "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.3.2",
272
- "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.3.2",
273
- "microi.v8.js": "5.3.2",
274
- "module-engine/SKILL.md": "5.3.2",
275
- "module-engine/references/module-config.md": "5.3.2",
276
- "ocr-engine/SKILL.md": "5.3.2",
277
- "ocr-engine/agents/openai.yaml": "5.3.2",
278
- "page-engine/SKILL.md": "5.3.2",
279
- "page-engine/references/progressive-01-所有组件类型.md": "5.3.2",
280
- "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.3.2",
281
- "performance-testing/SKILL.md": "5.3.2",
282
- "playwright-e2e/SKILL.md": "5.3.2",
283
- "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.3.2",
284
- "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.3.2",
285
- "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.3.2",
286
- "playwright-e2e/references/progressive-04-ci-建议.md": "5.3.2",
287
- "print-engine/SKILL.md": "5.3.2",
288
- "production-readonly-audit/SKILL.md": "5.3.2",
289
- "report-engine/SKILL.md": "5.3.2",
290
- "report-engine/agents/openai.yaml": "5.3.2",
291
- "scripts/optimize-progressive-disclosure.mjs": "5.3.2",
292
- "scripts/refresh-progressive-disclosure.mjs": "5.3.2",
293
- "scripts/validate-progressive-disclosure.mjs": "5.3.2",
294
- "search-engine/SKILL.md": "5.3.2",
295
- "search-engine/agents/openai.yaml": "5.3.2",
296
- "spider-engine/SKILL.md": "5.3.2",
297
- "system-observability/SKILL.md": "5.3.2",
298
- "translate-engine/SKILL.md": "5.3.2",
299
- "translate-engine/agents/openai.yaml": "5.3.2",
300
- "ui-design/SKILL.md": "5.3.2",
301
- "ui-design/assets/pattern-showcase/app.js": "5.3.2",
302
- "ui-design/assets/pattern-showcase/index.html": "5.3.2",
303
- "ui-design/assets/pattern-showcase/styles.css": "5.3.2",
304
- "ui-design/assets/templates/MCI-DESIGN.md": "5.3.2",
305
- "ui-design/references/design-pattern-library.md": "5.3.2",
306
- "ui-design/references/mci-design-contract.md": "5.3.2",
307
- "ui-design/references/motion-and-media.md": "5.3.2",
308
- "ui-design/references/product-flow-recipes.md": "5.3.2",
309
- "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.3.2",
310
- "ui-design/references/progressive-02-字体.md": "5.3.2",
311
- "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.3.2",
312
- "ui-design/references/progressive-04-组件风格速查.md": "5.3.2",
313
- "ui-design/references/progressive-05-移动端专用规范.md": "5.3.2",
314
- "ui-design/references/progressive-06-主题切换实现.md": "5.3.2",
315
- "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.3.2",
316
- "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.3.2",
317
- "uniapp-mall-assets/SKILL.md": "5.3.2",
318
- "unity-integration/SKILL.md": "5.3.2",
319
- "unity-integration/agents/openai.yaml": "5.3.2",
320
- "unity-integration/references/ai-app-delivery.md": "5.3.2",
321
- "unity-integration/references/sdk-api.md": "5.3.2",
322
- "unity-integration/references/toolbox-migration.md": "5.3.2",
323
- "unity-integration/references/webgl-hosting.md": "5.3.2",
324
- "v8-api-config/SKILL.md": "5.3.2",
325
- "v8-cache-pattern/SKILL.md": "5.3.2",
326
- "v8-crud-api/SKILL.md": "5.3.2",
327
- "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.3.2",
328
- "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.3.2",
329
- "v8-debugging/SKILL.md": "5.3.2",
330
- "v8-explorer-tree/SKILL.md": "5.3.2",
331
- "v8-export-import/SKILL.md": "5.3.2",
332
- "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.3.2",
333
- "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.3.2",
334
- "v8-export-import/references/progressive-03-安全-性能注意.md": "5.3.2",
335
- "v8-file-upload/SKILL.md": "5.3.2",
336
- "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.3.2",
337
- "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.3.2",
338
- "v8-formengine-http/SKILL.md": "5.3.2",
339
- "v8-frontend-events/SKILL.md": "5.3.2",
340
- "v8-frontend-events/references/bluetooth-print-api.md": "5.3.2",
341
- "v8-frontend-events/references/bluetooth-print.md": "5.3.2",
342
- "v8-frontend-events/references/progressive-01-列表事件.md": "5.3.2",
343
- "v8-http-integration/SKILL.md": "5.3.2",
344
- "v8-http-integration/references/progressive-01-get-请求.md": "5.3.2",
345
- "v8-http-integration/references/progressive-02-错误处理模式.md": "5.3.2",
346
- "v8-image-processing/SKILL.md": "5.3.2",
347
- "v8-image-processing/agents/openai.yaml": "5.3.2",
348
- "v8-image-processing/references/api-reference.md": "5.3.2",
349
- "v8-menu-buttons/SKILL.md": "5.3.2",
350
- "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.3.2",
351
- "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.3.2",
352
- "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.3.2",
353
- "v8-mongodb/SKILL.md": "5.3.2",
354
- "v8-mq-mqtt/SKILL.md": "5.3.2",
355
- "v8-mq-mqtt/references/mqtt-production.md": "5.3.2",
356
- "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.3.2",
357
- "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.3.2",
358
- "v8-saas-multi-tenant/SKILL.md": "5.3.2",
359
- "v8-security/SKILL.md": "5.3.2",
360
- "v8-security/references/progressive-01-2-权限校验.md": "5.3.2",
361
- "v8-security/references/progressive-02-7-日志记录.md": "5.3.2",
362
- "v8-sql-query/SKILL.md": "5.3.2",
363
- "v8-table-event/SKILL.md": "5.3.2",
364
- "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.3.2",
365
- "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.3.2",
366
- "v8-tcp-integration/SKILL.md": "5.3.2",
367
- "v8-tcp-integration/agents/openai.yaml": "5.3.2",
368
- "v8-template-engine/SKILL.md": "5.3.2",
369
- "v8-utilities/SKILL.md": "5.3.2",
370
- "v8-utilities/references/client-api-index.md": "5.3.2",
371
- "v8-utilities/references/platform-http-routes.md": "5.3.2",
372
- "v8-utilities/references/server-api-index.md": "5.3.2",
373
- "v8-workflow/SKILL.md": "5.3.2",
374
- "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.3.2",
375
- "workspace-conventions/SKILL.md": "5.3.2",
376
- "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.3.2",
377
- "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.3.2",
378
- "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.3.2"
201
+ ".microi-skills-version.json": "5.3.4",
202
+ ".progressive-disclosure-manifest.json": "5.3.4",
203
+ "README.md": "5.3.4",
204
+ "ai-engine/SKILL.md": "5.3.4",
205
+ "ai-engine/agents/openai.yaml": "5.3.4",
206
+ "ai-platform-governance/SKILL.md": "5.3.4",
207
+ "ai-platform-governance/references/progressive-01-功能开关.md": "5.3.4",
208
+ "app-store/SKILL.md": "5.3.4",
209
+ "app-store/agents/openai.yaml": "5.3.4",
210
+ "business-blueprint/SKILL.md": "5.3.4",
211
+ "datasource-engine/SKILL.md": "5.3.4",
212
+ "datasource-engine/agents/openai.yaml": "5.3.4",
213
+ "dos-orm/SKILL.md": "5.3.4",
214
+ "dos-orm/references/api-reference.md": "5.3.4",
215
+ "job-engine/SKILL.md": "5.3.4",
216
+ "job-engine/agents/openai.yaml": "5.3.4",
217
+ "message-notification/SKILL.md": "5.3.4",
218
+ "message-notification/agents/openai.yaml": "5.3.4",
219
+ "message-notification/references/contracts.md": "5.3.4",
220
+ "microi-ai-app-auth.js": "5.3.4",
221
+ "microi-ai-application/SKILL.md": "5.3.4",
222
+ "microi-ai-application/agents/openai.yaml": "5.3.4",
223
+ "microi-ai-application/references/frontend-baseline.md": "5.3.4",
224
+ "microi-client-frontend/SKILL.md": "5.3.4",
225
+ "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.3.4",
226
+ "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.3.4",
227
+ "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.3.4",
228
+ "microi-codex-installer/SKILL.md": "5.3.4",
229
+ "microi-codex-installer/agents/openai.yaml": "5.3.4",
230
+ "microi-codex/SKILL.md": "5.3.4",
231
+ "microi-datasource-mapping/SKILL.md": "5.3.4",
232
+ "microi-db-schema/SKILL.md": "5.3.4",
233
+ "microi-db-schema/agents/openai.yaml": "5.3.4",
234
+ "microi-db-schema/references/core-tables.md": "5.3.4",
235
+ "microi-db-schema/references/form-component-options.md": "5.3.4",
236
+ "microi-db-schema/references/schema-overview.md": "5.3.4",
237
+ "microi-db-schema/references/schema.md": "5.3.4",
238
+ "microi-db-schema/references/table-catalog.md": "5.3.4",
239
+ "microi-deployment/SKILL.md": "5.3.4",
240
+ "microi-deployment/references/deployment-matrix.md": "5.3.4",
241
+ "microi-docs-coverage/SKILL.md": "5.3.4",
242
+ "microi-docs-coverage/references/capability-map.md": "5.3.4",
243
+ "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.3.4",
244
+ "microi-form-engine/SKILL.md": "5.3.4",
245
+ "microi-form-engine/references/component-catalog.md": "5.3.4",
246
+ "microi-form-engine/references/data-source-events.md": "5.3.4",
247
+ "microi-form-layout/SKILL.md": "5.3.4",
248
+ "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.3.4",
249
+ "microi-frontend-sdk/SKILL.md": "5.3.4",
250
+ "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.3.4",
251
+ "microi-left-right-layout/SKILL.md": "5.3.4",
252
+ "microi-microservice/SKILL.md": "5.3.4",
253
+ "microi-microservice/references/runtime-delivery.md": "5.3.4",
254
+ "microi-mobile-app-quality/SKILL.md": "5.3.4",
255
+ "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.3.4",
256
+ "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.3.4",
257
+ "microi-solution-quotation/SKILL.md": "5.3.4",
258
+ "microi-solution-quotation/agents/openai.yaml": "5.3.4",
259
+ "microi-solution-quotation/scripts/build_solution_quote.py": "5.3.4",
260
+ "microi-sso/SKILL.md": "5.3.4",
261
+ "microi-sso/references/acceptance.md": "5.3.4",
262
+ "microi-sso/references/configuration-and-security.md": "5.3.4",
263
+ "microi-sso/references/inbound.md": "5.3.4",
264
+ "microi-sso/references/outbound.md": "5.3.4",
265
+ "microi-system-delivery/SKILL.md": "5.3.4",
266
+ "microi-system-delivery/references/progressive-01-标准工作流.md": "5.3.4",
267
+ "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.3.4",
268
+ "microi-ui/SKILL.md": "5.3.4",
269
+ "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.3.4",
270
+ "microi-uniapp-frontend/SKILL.md": "5.3.4",
271
+ "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.3.4",
272
+ "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.3.4",
273
+ "microi.v8.js": "5.3.4",
274
+ "module-engine/SKILL.md": "5.3.4",
275
+ "module-engine/references/module-config.md": "5.3.4",
276
+ "ocr-engine/SKILL.md": "5.3.4",
277
+ "ocr-engine/agents/openai.yaml": "5.3.4",
278
+ "page-engine/SKILL.md": "5.3.4",
279
+ "page-engine/references/progressive-01-所有组件类型.md": "5.3.4",
280
+ "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.3.4",
281
+ "performance-testing/SKILL.md": "5.3.4",
282
+ "playwright-e2e/SKILL.md": "5.3.4",
283
+ "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.3.4",
284
+ "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.3.4",
285
+ "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.3.4",
286
+ "playwright-e2e/references/progressive-04-ci-建议.md": "5.3.4",
287
+ "print-engine/SKILL.md": "5.3.4",
288
+ "production-readonly-audit/SKILL.md": "5.3.4",
289
+ "report-engine/SKILL.md": "5.3.4",
290
+ "report-engine/agents/openai.yaml": "5.3.4",
291
+ "scripts/optimize-progressive-disclosure.mjs": "5.3.4",
292
+ "scripts/refresh-progressive-disclosure.mjs": "5.3.4",
293
+ "scripts/validate-progressive-disclosure.mjs": "5.3.4",
294
+ "search-engine/SKILL.md": "5.3.4",
295
+ "search-engine/agents/openai.yaml": "5.3.4",
296
+ "spider-engine/SKILL.md": "5.3.4",
297
+ "system-observability/SKILL.md": "5.3.4",
298
+ "translate-engine/SKILL.md": "5.3.4",
299
+ "translate-engine/agents/openai.yaml": "5.3.4",
300
+ "ui-design/SKILL.md": "5.3.4",
301
+ "ui-design/assets/pattern-showcase/app.js": "5.3.4",
302
+ "ui-design/assets/pattern-showcase/index.html": "5.3.4",
303
+ "ui-design/assets/pattern-showcase/styles.css": "5.3.4",
304
+ "ui-design/assets/templates/MCI-DESIGN.md": "5.3.4",
305
+ "ui-design/references/design-pattern-library.md": "5.3.4",
306
+ "ui-design/references/mci-design-contract.md": "5.3.4",
307
+ "ui-design/references/motion-and-media.md": "5.3.4",
308
+ "ui-design/references/product-flow-recipes.md": "5.3.4",
309
+ "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.3.4",
310
+ "ui-design/references/progressive-02-字体.md": "5.3.4",
311
+ "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.3.4",
312
+ "ui-design/references/progressive-04-组件风格速查.md": "5.3.4",
313
+ "ui-design/references/progressive-05-移动端专用规范.md": "5.3.4",
314
+ "ui-design/references/progressive-06-主题切换实现.md": "5.3.4",
315
+ "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.3.4",
316
+ "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.3.4",
317
+ "uniapp-mall-assets/SKILL.md": "5.3.4",
318
+ "unity-integration/SKILL.md": "5.3.4",
319
+ "unity-integration/agents/openai.yaml": "5.3.4",
320
+ "unity-integration/references/ai-app-delivery.md": "5.3.4",
321
+ "unity-integration/references/sdk-api.md": "5.3.4",
322
+ "unity-integration/references/toolbox-migration.md": "5.3.4",
323
+ "unity-integration/references/webgl-hosting.md": "5.3.4",
324
+ "v8-api-config/SKILL.md": "5.3.4",
325
+ "v8-cache-pattern/SKILL.md": "5.3.4",
326
+ "v8-crud-api/SKILL.md": "5.3.4",
327
+ "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.3.4",
328
+ "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.3.4",
329
+ "v8-debugging/SKILL.md": "5.3.4",
330
+ "v8-explorer-tree/SKILL.md": "5.3.4",
331
+ "v8-export-import/SKILL.md": "5.3.4",
332
+ "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.3.4",
333
+ "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.3.4",
334
+ "v8-export-import/references/progressive-03-安全-性能注意.md": "5.3.4",
335
+ "v8-file-upload/SKILL.md": "5.3.4",
336
+ "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.3.4",
337
+ "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.3.4",
338
+ "v8-formengine-http/SKILL.md": "5.3.4",
339
+ "v8-frontend-events/SKILL.md": "5.3.4",
340
+ "v8-frontend-events/references/bluetooth-print-api.md": "5.3.4",
341
+ "v8-frontend-events/references/bluetooth-print.md": "5.3.4",
342
+ "v8-frontend-events/references/progressive-01-列表事件.md": "5.3.4",
343
+ "v8-http-integration/SKILL.md": "5.3.4",
344
+ "v8-http-integration/references/progressive-01-get-请求.md": "5.3.4",
345
+ "v8-http-integration/references/progressive-02-错误处理模式.md": "5.3.4",
346
+ "v8-image-processing/SKILL.md": "5.3.4",
347
+ "v8-image-processing/agents/openai.yaml": "5.3.4",
348
+ "v8-image-processing/references/api-reference.md": "5.3.4",
349
+ "v8-menu-buttons/SKILL.md": "5.3.4",
350
+ "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.3.4",
351
+ "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.3.4",
352
+ "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.3.4",
353
+ "v8-mongodb/SKILL.md": "5.3.4",
354
+ "v8-mq-mqtt/SKILL.md": "5.3.4",
355
+ "v8-mq-mqtt/references/mqtt-production.md": "5.3.4",
356
+ "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.3.4",
357
+ "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.3.4",
358
+ "v8-saas-multi-tenant/SKILL.md": "5.3.4",
359
+ "v8-security/SKILL.md": "5.3.4",
360
+ "v8-security/references/progressive-01-2-权限校验.md": "5.3.4",
361
+ "v8-security/references/progressive-02-7-日志记录.md": "5.3.4",
362
+ "v8-sql-query/SKILL.md": "5.3.4",
363
+ "v8-table-event/SKILL.md": "5.3.4",
364
+ "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.3.4",
365
+ "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.3.4",
366
+ "v8-tcp-integration/SKILL.md": "5.3.4",
367
+ "v8-tcp-integration/agents/openai.yaml": "5.3.4",
368
+ "v8-template-engine/SKILL.md": "5.3.4",
369
+ "v8-utilities/SKILL.md": "5.3.4",
370
+ "v8-utilities/references/client-api-index.md": "5.3.4",
371
+ "v8-utilities/references/platform-http-routes.md": "5.3.4",
372
+ "v8-utilities/references/server-api-index.md": "5.3.4",
373
+ "v8-workflow/SKILL.md": "5.3.4",
374
+ "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.3.4",
375
+ "workspace-conventions/SKILL.md": "5.3.4",
376
+ "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.3.4",
377
+ "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.3.4",
378
+ "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.3.4"
379
379
  },
380
380
  "files": [
381
381
  ".microi-skills-version.json",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "5.3.2",
2
+ "version": "5.3.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-25T19:41:31.740Z"
5
+ "updatedAt": "2026-08-26T02:45:01.939Z"
6
6
  }
@@ -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
- - 发布器从上一版安装包正文的 `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 来源都不能获得该权限。
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
47
  - `CreateIfMissing` 只在目标 Key 不存在时创建,存在时不得对齐 Id、源码、启用状态或其它字段。扩展模板发布后即归租户维护;后续版本禁止把同一 Key 改回 `Managed` 接管,确需新的官方核心时发布新 Key 并显式迁移。
48
48
  - 官方功能采用“Managed 核心 + CreateIfMissing Hook”。核心只提供稳定协议和默认行为,并在可信官方 Platform 包更新时覆盖升级;客户日志、写表、通知和业务动作放 Hook,并以稳定 `EventId`、唯一约束或 outbox 幂等。`CreateIfMissing` 一旦交给租户维护,即使后续官方包误改为 Managed 也必须冲突回滚。
49
49
  - 每个官方包内的接口引擎源码顶部都必须有醒目所有权提示。Managed 提示必须写明所属官方应用、从可信官方源安装/更新/重新安装会恢复官方代码,并指向该应用的 CreateIfMissing Hook;CreateIfMissing 提示必须写明首次创建后归租户维护、官方升级不得覆盖。官方 SSO、登录、通知等核心在安全阶段调用 Hook 时,只传脱敏上下文,禁止传 Token、Secret、密码或原始协议断言。
@@ -164,8 +164,15 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
164
164
 
165
165
  - 触发场景:租户先升级新版前后端,登录后路由初始化固定调用 `/apiengine/platform-sys-menu`;目标库此前没有该接口。应用商城包只补了 `platform-background-task`,而菜单接口仍由安装顺序靠后的 SaaS 包顺带携带;启动完整性检查也只验证后台任务接口,于是数据库版本和商城版本都显示最新,但用户在进入应用商城之前已经因 `NoExistData sys_apiengine` 全站不可用。
166
166
  - 根因:把单个已修复依赖误当成完整的启动依赖集合,包资源闭包、`NeedRefresh` 完成判定和安装后强回读没有使用同一清单;发布验收只覆盖已有目标租户,未覆盖“新版二进制 + 历史库恰好缺少某一启动接口”的升级排列。
167
- - 通用规则:凡是登录、菜单构建、恢复入口或应用商城打开之前必调的表、接口引擎和微服务路由,都属于启动依赖闭包。每项资源必须只有一个官方 Platform 包作为唯一所有者;需要跨包时,恢复计划必须固定列出全部所有者且按优先顺序形成不可拆分的精确闭包。当前 `platform-sys-menu` 由应用商城单一拥有,六项公开配置/用户/文件门面由 SaaS 引擎单一拥有。每项接口必须同时声明固定自定义地址、最低版本、启用/匿名/HTTP 状态、`Managed` 策略、V8 原子能力和包内能力标记;启动完整性检查与安装后回读必须遍历同一七项清单,任意一项缺失都触发修复且失败不推进任务终态。其它应用不得复制同 Key 形成竞争所有权。
168
- - 竞态与验收:前端可对明确的“启动 Managed 资源尚未落库”做不超过一分钟的有界退避,并在耗尽后显示精确包名和最低版本;它不能吞掉鉴权错误、普通网络错误,也不能代替服务端修复。跨大量历史租户时可由受信持久任务启用只自举模式,从两个不可变官方包补齐七项接口并做物理强回读,成功后不写应用安装版本,普通完整安装保持不变。契约测试须覆盖伪造标志、错误应用范围、每项物理缺失、租户改码和已健康零操作;真实验收先证明旧状态失败,再回读接口源码/地址/策略、执行菜单动作、刷新真实页面,最后以新幂等键做全分区零操作复跑。
167
+ - 通用规则:凡是登录、菜单构建、恢复入口或应用商城打开之前必调的表、接口引擎和微服务路由,都属于启动依赖闭包。每项资源必须只有一个官方 Platform/Application 包作为唯一所有者。API 进程接收流量前的门禁不得维护“登录页七接口”之类手写清单;必须从九个随服务端自动安装的内置官方基础应用包读取全部 `SysApiEngines`,校验 Key/稳定 Id/自定义地址/所有权无重复,再补缺并逐项物理强回读。这样登录后的组织、角色、角标、健康、消息、SSO、AI、商城工作器及内部接口也不会在完整包后台升级完成前出现 `NoExistData`。`Managed` 资源只由所属包升级;`Tenant/CreateIfMissing` 仅在数据库中完全不存在时创建,既有大小写变体、禁用记录或墓碑都归租户维护,不得恢复或覆盖。
168
+ - 竞态与验收:前端可对明确的“启动 Managed 资源尚未落库”做不超过一分钟的有界退避,并在耗尽后显示精确包名和最低版本;它不能吞掉鉴权错误、普通网络错误,也不能代替服务端修复。跨大量历史租户的 `StartupDependencyBootstrapOnly` 是独立的事故工具,仍可从应用商城与 SaaS 两个不可变包只补七项最小可登录接口并做物理强回读;它不是 API 进程的完整运行时就绪定义,成功后仍须执行普通完整应用更新。契约测试须枚举九个包的全部接口资源,覆盖稳定 Id/地址冲突、CreateIfMissing 墓碑保护、登录后实际路由、商城批量安装和已健康零操作。
169
+
170
+ ### 2026-08-26:登录成功后仍成片 `sys_apiengine NoExistData` 与 Upgrade25 历史文件阻断
171
+
172
+ - 触发:新版前后端部署到历史租户后,登录页依赖已被补齐,但 `platform-service-health`、`platform-sys-dept`、`mci-module-presentation-stats`、`platform-runtime-custom-hook`、商城批量工作器等登录后接口继续缺失;与此同时 `mci_ai_app_file.VersionId` 的历史空值使 Upgrade25 在创建唯一索引前失败,后续后台升级链无法收敛。
173
+ - 根因:把“能登录”误当成“平台运行时已就绪”,启动门禁和事故工作器长期依赖固定七项清单;历史应用文件在 V3 引入版本外键前已经存在,升级只做审计并直接失败,没有安全、确定且可重放的归档策略。旧商城工作器还可能访问已经改名的 `/apiengine/get-microi-store` 地址。
174
+ - 通用修复: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
+ - 验收:应用包测试必须证明九包接口 Key/稳定 Id 全局唯一、每项政策与醒目提示完整、旧商城地址和正式地址均存在;升级测试覆盖 MySQL/SQL Server/Oracle 的历史分组、参数化更新和样本诊断 SQL。真实启动日志必须分别显示物理字段、完整平台运行时闭包、Upgrade25 历史归档计数和每个升级步骤终态;登录后逐一调用当前用户、健康、部门、私有文件、菜单角标与商城批量计划,不能只验证匿名系统设置。
169
176
 
170
177
  ## 复盘:应用包切换 HDFS 后旧导入器无法更新自己
171
178
 
@@ -301,3 +308,11 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
301
308
  - 触发场景:平台微服务包只有少量 `BuildAssets`,但后台检查点长期停在 `ApplicationAssets / Build / AssetIndex=1`,`ApplicationAssetUploaded` 却持续超过包内资源总数。目标节点能够上传并回读公有对象,但不支持或拒绝 `MoveObject`;导入器每一片都重新上传同一文件,再因移动失败写回临时路径,下一片继续重复。
302
309
  - 通用规则:新上传文件移动到租户稳定路径失败时,若上传结果已通过摘要和大小校验,应保留这个真实可读路径并写入显式兼容 scope(当前为 `PrivateSource+PublicBuildMoveFallback`)。后续分片只允许在同时命中 AppId、文件路径、摘要、大小、真实 HDFS 路径和该 scope 时直接复用,禁止再次调用 `MoveObject` 或上传;没有兼容标记的历史坏路径仍只允许一次有界重传修复,不能把任意旧元数据误当成有效对象。
303
310
  - 自举与验收:主租户投递每个子任务前必须先复制最新版应用商城导入器和批量工作器,已经排队的任务不得假定会动态取得主租户新代码。回归测试要模拟“上传成功、MoveObject 不可用、下一分片恢复”,断言上传次数保持 1 且资源索引继续前进;真实旧租户验收必须观察 4 个编译资源在有界片数内完成,并在全租户成功后立即做 `Planned=0` 复跑。
311
+
312
+ ## 复盘:只补页面首屏接口导致旧租户持续 `sys_apiengine NoExistData`
313
+
314
+ - 触发场景:新版前端已经切换到 `/apiengine/platform-*`、商城 `get-microi-store` 或模块/消息等官方接口,但客户只更新前后端二进制,没有逐个安装应用;启动门禁只检查少数首屏 Key,于是登录恢复后其它页面仍连续报 `sys_apiengine NoExistData`。
315
+ - 根因:把平台运行依赖维护成手写短清单,并只复制 SaaS 单包;接口之间的 `V8.ApiEngine.Run` 依赖、其它官方平台应用和个性化 Hook 没有进入同一闭包,旧数据库也没有可靠的启动前自愈与逐项回读。
316
+ - 强制规则:启动前接口闭包必须由全部内置官方平台应用包动态计算,并递归解析接口调用;当前官方基线为 9 个包、106 个接口(98 个 `Managed`、8 个 `CreateIfMissing`),数量只是发布快照,运行逻辑不得硬编码。门禁逐项校验 Key、地址、启用状态、匿名/HTTP 状态和源码策略;缺失时从受信内置包按原所有权补齐,所有项严格回读成功后才对外提供流量。`CreateIfMissing` 首次创建后永不覆盖客户代码。
317
+ - 控制面自举:官方资源发布必须先保证 `get-microi-upgrade-resource` 自身达到当前协议,再发布其它包;若控制面旧版本不能校验新包,先只发布并回读这一项,刷新动态路由缓存后再发布剩余资源。发布响应超时或 Redis 广播失败时先按资源 SHA 回读判断提交/回滚,禁止盲目重放。
318
+ - 兼容与验收:历史 Controller 回退不能再转调可能缺失的同一个接口引擎;保留旧路由时必须使用可信 Core 原子或明确返回可诊断兼容结果。自动化测试应扫描 PC、UniApp、内置应用包和接口源码的全部 `/apiengine/` 与 `V8.ApiEngine.Run` 引用,证明每个依赖由官方包声明;真实启动必须对每个启用租户输出开始、缺项、修复、逐项成功及最终汇总日志,并同时验证匿名、登录态、商城批量计划和重复启动幂等。
@@ -58,7 +58,7 @@ V8.OsClientModel.AliOssPublicDomain // 可公开的文件域名
58
58
  - 旧版 UniApp 的 `microi-init` 是 SaaS 包继续托管的 Managed 兼容门面。匿名阶段只组合 `platform-os-client-by-domain` 与 `platform-sys-config` 的公开投影;原始 DiyToken 必须由 `GetCurrentToken` 和 `RefreshLoginUser(..., rawToken)` 在后端重新验证且绑定当前租户,菜单再由只允许该固定 Key 调用的 `GetLegacyInitMenuTree(rawToken, osClient?)` 复用 `SysMenuLogic` 权威角色过滤。禁止在匿名 V8 中直接通过 FormEngine 读取 `sys_menu`;域名解析到其它租户时返回目标 `OsClient` 并要求重试,禁止匿名跨租户读取配置或菜单。
59
59
  - 主租户由运行环境决定:优先读取环境变量 `OsClient`,其次读取 `appsettings.json` 的 `AppSettings:OsClient`。只有这条主租户 `sys_osclients` 数据中的平台级字段会作为全局配置生效。
60
60
  - 同一个主租户可以同时运行在 `Product/Internal`、`Product/Internet` 等多个分区;租户目录、后台任务领取、通知和批量平台应用维护都必须按当前节点的 `OsClientType + OsClientNetwork` 隔离。一次全量维护只证明当前分区,事故恢复必须先盘点所有活跃分区,再从各分区对应节点分别执行并等待 `SucceededCount=ExpectedCount、FailedCount=0`,随后各自以新幂等键做零安装/零更新复跑。禁止临时改租户网络字段、跨分区借用任务或并发维护可能指向同一物理库的重复租户记录。
61
- - 大范围启动事故只允许受信后台编排器使用 `MaintenanceScope=StartupDependencies`,精确闭包固定为 `app.microi.store + app.microi.saas-engine`,并可显式启用 `StartupDependencyBootstrapOnly=true`。编排器必须先用权威当前分区目录校验 `TargetOsClients`,再在子任务仍为 `Pending` 时原子写入并强回读两应用范围与只自举标志;失败即取消,禁止退化为完整安装。工作器只从官方不可变包补齐 `platform-sys-menu` 和六项 SaaS 启动门面,七项物理契约强回读通过后终止,不写安装版本。该模式只恢复可登录性,后续完整应用更新仍走普通商城任务;未带标志的任务行为不得改变。
61
+ - 大范围启动事故只允许受信后台编排器使用 `MaintenanceScope=StartupDependencies`,精确闭包固定为 `app.microi.store + app.microi.saas-engine`,并可显式启用 `StartupDependencyBootstrapOnly=true`。编排器必须先用权威当前分区目录校验 `TargetOsClients`,再在子任务仍为 `Pending` 时原子写入并强回读两应用范围与只自举标志;失败即取消,禁止退化为完整安装。工作器只从官方不可变包补齐 `platform-sys-menu` 和六项 SaaS 启动门面,七项物理契约强回读通过后终止,不写安装版本。该模式只恢复可登录性,不代表 API 进程的完整运行时已经就绪;新版后端接收流量前还必须从九个内置官方基础应用包补齐并回读全部接口引擎,后续完整应用更新仍走普通商城任务。未带标志的任务行为不得改变。
62
62
  - API 启动配置只有十项白名单:`OsClient`、`OsClientType`、`OsClientNetwork`、`OsClientDbType`、`OsClientDbConn`、`OsClientRedisHost`、`OsClientRedisPort`、`OsClientRedisPwd`、`OsClientRedisDataBase`、`OsClientDbMongoConn`。除这十项外,部署/节点级运行参数与基础设施秘密从主控 `sys_osclients` 读取;允许子租户自行维护且需要浏览器判断的业务开关、入口显示和公开交互配置使用该租户 `sys_config` 实体字段,OAuth/第三方集成的凭据、RP/Origin/Issuer/Scope 与仅后端参数使用 `mci_system_setting`,未配置时使用代码安全默认值。官方 License 恢复次数/间隔与固定私钥挂载 `/app/microi_private.pem` 是信任链例外。禁止再增加 `MICROI_*`、`DOS_ORM_*`、自定义 `AppSettings` 节点或动态名称的环境变量读取。节点身份由平台自动生成。
63
63
  - 存量畅捷通/微信 OAuth C# 协议网关有一组已发布到 SaaS 引擎的兼容字段:`OAuthReturnUrlOrigins`、`ChanjetOAuthState`、`ChanjetAesKey`、`ChanjetAppKey`、`WeChatTemplateAppId`、`WeChatTemplateAppSecret`、`WeChatTemplateId`、`WeChatMiniProgramAppId`。只能通过 Core 的租户绑定协议设置原子按请求权威 `OsClient` 读取,禁止使用主租户 `ConfigHelper` RuntimeConfigurationReader;整组字段不得复制给新租户,其中 OAuthState/AES Key/AppKey/AppSecret 不得进入 `V8.OsClientModel` 或前端投影且必须在审计中掩码。新集成不得继续扩展该兼容集合,仍使用当前租户 `mci_system_setting` + Managed ApiEngine。
64
64
  - `ASPNETCORE_*`、`DOTNET_*` 仅用于 .NET 宿主;构建、安装、测试、MCP、发布脚本可使用自身进程变量,但 API 生产代码不得把它们当业务配置。新增 SaaS 运行字段必须配套独立或既有 Tab、幂等升级、缓存刷新、敏感字段脱敏、子租户不继承和源码扫描测试。
@@ -68,6 +68,7 @@
68
68
  | `V8.Method.PrepareCurrentUserProfileUpdate(options)` | 仅允许官方 `platform-user-update-profile` 调用;固定当前用户并规范当前租户头像路径 |
69
69
  | `V8.Method.ManageSysUserAdmin(options)` | 仅允许官方 `platform-sys-user-admin` 调用;固定身份与租户并执行表权限、角色层级、改密 step-up、内容安全及会话安全边界;授权预检返回规范化 `DataAppend.ChangesPassword` |
70
70
  | `V8.Method.AuthorizeOfficialResourcePublish()` | 仅允许官方 `get-microi-upgrade-resource` 的发布分支调用;固定 `iTdos`、拒绝访问密钥并从主库复核平台管理员;不是通用授权 API |
71
+ | `V8.Method.SendWeChatTemplateMessage(options)` | 仅允许消息通知官方 Managed 接口 `wechat_send_tpl_msg` 调用;公众号 AppId/AppSecret 固定从当前租户 `wx_mp` 读取且不进入 V8,脚本只编排接收人、模板、受限模板字段和跳转地址 |
71
72
  | `V8.Method.ValidateTenantSystemSettingsOperation(options)` | 仅允许官方 `platform-tenant-system-settings` 调用;拒绝访问密钥、非管理员、Secret/Sensitive Key 和已迁移公开 Key |
72
73
  | `V8.Method.GetTenantSystemSettingsSecurityProjection()` | 仅允许官方 `platform-tenant-system-settings` 调用;只返回 Secret 是否已配置与迁移 Key,不返回值或密文 |
73
74
  | `V8.Method.Upload(options)` | 受配额限制的上传 |