@microi.net/cli 5.6.5 → 5.6.6

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.6.5",
8
+ "version": "5.6.6",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.6.5",
14
+ "version": "5.6.6",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.6.5",
3
+ "version": "5.6.6",
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.6.5",
3
+ "version": "5.6.6",
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.6.5",
8
+ "version": "5.6.6",
9
9
  "plugins": [
10
10
  {
11
11
  "name": "microi",
12
12
  "source": ".",
13
13
  "description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
14
- "version": "5.6.5",
14
+ "version": "5.6.6",
15
15
  "strict": true
16
16
  }
17
17
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microi",
3
- "version": "5.6.5",
3
+ "version": "5.6.6",
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-09-14T06:02:20.272Z",
3
- "version": "5.6.5",
2
+ "builtAt": "2026-09-14T09:25:23.955Z",
3
+ "version": "5.6.6",
4
4
  "sourceProducts": [
5
5
  "vscode-extension",
6
6
  "microi-cli",
@@ -14,6 +14,6 @@
14
14
  "cli": "ebc3d11a53c655ed983f994e9ceb65c651b39bc2377783a578e337db0b92dd12",
15
15
  "router": "ffc14787fc2d3d6173b7a779b77139b759eb1d482cea787f71283f4017a4e223",
16
16
  "broker": "caae2730cc411d11c20f33b367968f7538aae8f5b65a713fcc557deedaefcf70",
17
- "dshBundle": "ee032e4d67734a46799af008f94c7ee9c45e38dae740f425e8b728e3cf4ebad1"
17
+ "dshBundle": "7e518bf21fda8827f34928fbd9cd83f23e9f3800023bdf07f8a1187841be8252"
18
18
  }
19
19
  }
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.6.5';\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.6.6';\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.6.5",
3
+ "version": "5.6.6",
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-09-14T06:02:19.423Z",
2
+ "builtAt": "2026-09-14T09:25:22.303Z",
3
3
  "source": "../microi.skills",
4
4
  "extension": {
5
5
  "name": "v8-engine",
6
- "version": "5.6.5",
6
+ "version": "5.6.6",
7
7
  "publisher": "Microi"
8
8
  },
9
9
  "skills": {
10
- "version": "5.6.5",
10
+ "version": "5.6.6",
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.Code/bump-version.js"
13
13
  },
@@ -15,11 +15,11 @@
15
15
  "dir": "dist/microi.skills",
16
16
  "files": 186,
17
17
  "skills": 67,
18
- "bytes": 2529056
18
+ "bytes": 2531912
19
19
  },
20
20
  "fileHashes": {
21
- ".microi-skills-version.json": "d26f8474f5abcb50ff5db9491694268acf05d0df4cc3511a8d09d501811cd370",
22
- ".progressive-disclosure-manifest.json": "59c1bb239d691ae1cc2cd6595d8dc84064b64ad633e7b639c285a2734d30a9ce",
21
+ ".microi-skills-version.json": "c6f59854d7040de271bc6e1eeadb11519e50c235705758ad5bad4d4cea1f2f7d",
22
+ ".progressive-disclosure-manifest.json": "4e00fbafad386c157de1cefef2991dfda647294d560aa710d288435579398025",
23
23
  "README.md": "504222216e683f58bb20c2770ccfe2a50246424a362b33b71036282dae836051",
24
24
  "ai-engine/SKILL.md": "74898360085d21bebaa2ec950397d156baf1acda287c55424c24f20516524452",
25
25
  "ai-engine/agents/openai.yaml": "40deb07801006a46b9a7f0020d13251955eeadd04c8e591160210479936f8b5b",
@@ -43,7 +43,7 @@
43
43
  "microi-ai-application/SKILL.md": "7de7534f009968990b763f546be74352756aedf5837323de64639f113697f1c3",
44
44
  "microi-ai-application/agents/openai.yaml": "8cfacaa0f628d645d3c66166cdd8a3028451d2bc638d3fddf3578df07cfaa9ed",
45
45
  "microi-ai-application/references/frontend-baseline.md": "7b376f95167325cda0d865f72e9a5c8184a916bb020bc5eea307a21289ee9609",
46
- "microi-client-frontend/SKILL.md": "7b155912dd6c91a5ff0d671d859822280c28cb7ee810f35feabae9c21b5887e2",
46
+ "microi-client-frontend/SKILL.md": "ef9d995fdb0e35a0a11fa5e0918ee8ca14979d1ec36bb8ea57821adac9287511",
47
47
  "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "0178136c6675568a7423cd4eb936975a8a917a0d9faddbdcfede1611d61d3805",
48
48
  "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "c0196a475fffd875da10bf5a1689f7a8add828ab9b9d588d58ae6120c25dd8d5",
49
49
  "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "06671fa6c8b1b1b488031fc0b3eea13895e87ff6b5137538f850ee9b676c9d83",
@@ -58,7 +58,7 @@
58
58
  "microi-db-schema/references/schema-overview.md": "c9bd1ae8e44269b48733732411610abbd65bf2ba32a7cfd141fb559c8f62b877",
59
59
  "microi-db-schema/references/schema.md": "3b515919a184fea3821770960b1d2c3341c44c14eebfbe20232b4309f99098ed",
60
60
  "microi-db-schema/references/table-catalog.md": "538bb32fc23085c5755833d9a6da97085481f9ad7ac95c80e15cd79644ab7b27",
61
- "microi-deployment/SKILL.md": "8987589a7932a3689d562dac7e346e03e635d37449d9866caf6fb6b99e5b3c0b",
61
+ "microi-deployment/SKILL.md": "18ab1030e09e3bb0e70cdf7e7085d926d6415980622058e7e02b6525a8671ba3",
62
62
  "microi-deployment/references/deployment-matrix.md": "143b1081ccddd65b1ebb404592684e3bdf0b12b5ea9a6148796f1a25dc0e6871",
63
63
  "microi-docs-coverage/SKILL.md": "ca93c8268d13eda526703ea63a8cc33fa85d9c325386f96349b423cef20e53ba",
64
64
  "microi-docs-coverage/references/capability-map.md": "c990a2869eb5dff28b61cb16515552a011352ada9bdb75fe6862aaa2cc496417",
@@ -181,8 +181,8 @@
181
181
  "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "a66a716aedbc32d27e9b9807ee0f55e06c8a91e951ae28c1c3a21d21e1b48516",
182
182
  "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "2a3cbc864783b39ba20ad877efd65275953707f47fbef48b1aa79ffca7463ea9",
183
183
  "v8-saas-multi-tenant/SKILL.md": "b73d507170a8b80b88f44e63d76be6b557e5530af0b451281984496232168992",
184
- "v8-security/SKILL.md": "749cfd3c1162aa5bf42e1927cb4e19473d86211be9667898f6460def66e833aa",
185
- "v8-security/references/progressive-01-2-权限校验.md": "8fb1040191034ff71ffcdc6528a10a594d4bcb9e66dd300011f297590a49e69f",
184
+ "v8-security/SKILL.md": "808606cc7a6048df1726d150e6f3aec5cf433f2cdc583fba365d06e84a0a718c",
185
+ "v8-security/references/progressive-01-2-权限校验.md": "7d30b8676f5fd4cf69f347ca544d450b786d5ff111dda393bd631170d8385807",
186
186
  "v8-security/references/progressive-02-7-日志记录.md": "412be2c82f7e00e5f26711e6dee7b5eb9b734751fee553b9a4a0ce9216bbe928",
187
187
  "v8-sql-query/SKILL.md": "02187836848d3f411d46166560121e72af82bd90c055d0b97d0282cef362622d",
188
188
  "v8-table-event/SKILL.md": "783e2a34d3b10019ef0b377a5345db59fa8bcb0bbc110f7a1ea683bdf49876c4",
@@ -206,192 +206,192 @@
206
206
  "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "225ee599f8810a614ffcc19fd082829cf2e8ef55a0ce7428ba8a4ede0fdb0e3c"
207
207
  },
208
208
  "fileVersions": {
209
- ".microi-skills-version.json": "5.6.5",
210
- ".progressive-disclosure-manifest.json": "5.6.5",
211
- "README.md": "5.6.5",
212
- "ai-engine/SKILL.md": "5.6.5",
213
- "ai-engine/agents/openai.yaml": "5.6.5",
214
- "ai-platform-governance/SKILL.md": "5.6.5",
215
- "ai-platform-governance/references/progressive-01-功能开关.md": "5.6.5",
216
- "app-store/SKILL.md": "5.6.5",
217
- "app-store/agents/openai.yaml": "5.6.5",
218
- "business-blueprint/SKILL.md": "5.6.5",
219
- "datasource-engine/SKILL.md": "5.6.5",
220
- "datasource-engine/agents/openai.yaml": "5.6.5",
221
- "dos-orm/SKILL.md": "5.6.5",
222
- "dos-orm/references/api-reference.md": "5.6.5",
223
- "email-engine/SKILL.md": "5.6.5",
224
- "email-engine/references/v8-email.md": "5.6.5",
225
- "job-engine/SKILL.md": "5.6.5",
226
- "job-engine/agents/openai.yaml": "5.6.5",
227
- "message-notification/SKILL.md": "5.6.5",
228
- "message-notification/agents/openai.yaml": "5.6.5",
229
- "message-notification/references/contracts.md": "5.6.5",
230
- "microi-ai-app-auth.js": "5.6.5",
231
- "microi-ai-application/SKILL.md": "5.6.5",
232
- "microi-ai-application/agents/openai.yaml": "5.6.5",
233
- "microi-ai-application/references/frontend-baseline.md": "5.6.5",
234
- "microi-client-frontend/SKILL.md": "5.6.5",
235
- "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.6.5",
236
- "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.6.5",
237
- "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.6.5",
238
- "microi-codex-installer/SKILL.md": "5.6.5",
239
- "microi-codex-installer/agents/openai.yaml": "5.6.5",
240
- "microi-codex/SKILL.md": "5.6.5",
241
- "microi-datasource-mapping/SKILL.md": "5.6.5",
242
- "microi-db-schema/SKILL.md": "5.6.5",
243
- "microi-db-schema/agents/openai.yaml": "5.6.5",
244
- "microi-db-schema/references/core-tables.md": "5.6.5",
245
- "microi-db-schema/references/form-component-options.md": "5.6.5",
246
- "microi-db-schema/references/schema-overview.md": "5.6.5",
247
- "microi-db-schema/references/schema.md": "5.6.5",
248
- "microi-db-schema/references/table-catalog.md": "5.6.5",
249
- "microi-deployment/SKILL.md": "5.6.5",
250
- "microi-deployment/references/deployment-matrix.md": "5.6.5",
251
- "microi-docs-coverage/SKILL.md": "5.6.5",
252
- "microi-docs-coverage/references/capability-map.md": "5.6.5",
253
- "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.6.5",
254
- "microi-form-engine/SKILL.md": "5.6.5",
255
- "microi-form-engine/references/component-catalog.md": "5.6.5",
256
- "microi-form-engine/references/data-source-events.md": "5.6.5",
257
- "microi-form-layout/SKILL.md": "5.6.5",
258
- "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.6.5",
259
- "microi-frontend-sdk/SKILL.md": "5.6.5",
260
- "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.6.5",
261
- "microi-left-right-layout/SKILL.md": "5.6.5",
262
- "microi-microservice/SKILL.md": "5.6.5",
263
- "microi-microservice/references/runtime-delivery.md": "5.6.5",
264
- "microi-mobile-app-quality/SKILL.md": "5.6.5",
265
- "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.6.5",
266
- "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.6.5",
267
- "microi-solution-quotation/SKILL.md": "5.6.5",
268
- "microi-solution-quotation/agents/openai.yaml": "5.6.5",
269
- "microi-solution-quotation/scripts/build_solution_quote.py": "5.6.5",
270
- "microi-sso/SKILL.md": "5.6.5",
271
- "microi-sso/references/acceptance.md": "5.6.5",
272
- "microi-sso/references/configuration-and-security.md": "5.6.5",
273
- "microi-sso/references/inbound.md": "5.6.5",
274
- "microi-sso/references/outbound.md": "5.6.5",
275
- "microi-system-delivery/SKILL.md": "5.6.5",
276
- "microi-system-delivery/references/progressive-01-标准工作流.md": "5.6.5",
277
- "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.6.5",
278
- "microi-ui/SKILL.md": "5.6.5",
279
- "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.6.5",
280
- "microi-uniapp-frontend/SKILL.md": "5.6.5",
281
- "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.6.5",
282
- "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.6.5",
283
- "microi.v8.js": "5.6.5",
284
- "module-engine/SKILL.md": "5.6.5",
285
- "module-engine/references/module-config.md": "5.6.5",
286
- "ocr-engine/SKILL.md": "5.6.5",
287
- "ocr-engine/agents/openai.yaml": "5.6.5",
288
- "page-engine/SKILL.md": "5.6.5",
289
- "page-engine/examples/compact-dashboard.json": "5.6.5",
290
- "page-engine/references/progressive-01-所有组件类型.md": "5.6.5",
291
- "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.6.5",
292
- "performance-testing/SKILL.md": "5.6.5",
293
- "playwright-e2e/SKILL.md": "5.6.5",
294
- "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.6.5",
295
- "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.6.5",
296
- "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.6.5",
297
- "playwright-e2e/references/progressive-04-ci-建议.md": "5.6.5",
298
- "print-engine/SKILL.md": "5.6.5",
299
- "production-readonly-audit/SKILL.md": "5.6.5",
300
- "report-engine/SKILL.md": "5.6.5",
301
- "report-engine/agents/openai.yaml": "5.6.5",
302
- "scripts/optimize-progressive-disclosure.mjs": "5.6.5",
303
- "scripts/refresh-progressive-disclosure.mjs": "5.6.5",
304
- "scripts/sync-embedded-skills.mjs": "5.6.5",
305
- "scripts/validate-progressive-disclosure.mjs": "5.6.5",
306
- "search-engine/SKILL.md": "5.6.5",
307
- "search-engine/agents/openai.yaml": "5.6.5",
308
- "spider-engine/SKILL.md": "5.6.5",
309
- "system-observability/SKILL.md": "5.6.5",
310
- "system-observability/references/memory-incident-triage.md": "5.6.5",
311
- "translate-engine/SKILL.md": "5.6.5",
312
- "translate-engine/agents/openai.yaml": "5.6.5",
313
- "ui-design/SKILL.md": "5.6.5",
314
- "ui-design/assets/pattern-showcase/app.js": "5.6.5",
315
- "ui-design/assets/pattern-showcase/index.html": "5.6.5",
316
- "ui-design/assets/pattern-showcase/styles.css": "5.6.5",
317
- "ui-design/assets/templates/MCI-DESIGN.md": "5.6.5",
318
- "ui-design/references/design-pattern-library.md": "5.6.5",
319
- "ui-design/references/mci-design-contract.md": "5.6.5",
320
- "ui-design/references/motion-and-media.md": "5.6.5",
321
- "ui-design/references/product-flow-recipes.md": "5.6.5",
322
- "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.6.5",
323
- "ui-design/references/progressive-02-字体.md": "5.6.5",
324
- "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.6.5",
325
- "ui-design/references/progressive-04-组件风格速查.md": "5.6.5",
326
- "ui-design/references/progressive-05-移动端专用规范.md": "5.6.5",
327
- "ui-design/references/progressive-06-主题切换实现.md": "5.6.5",
328
- "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.6.5",
329
- "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.6.5",
330
- "uniapp-mall-assets/SKILL.md": "5.6.5",
331
- "unity-integration/SKILL.md": "5.6.5",
332
- "unity-integration/agents/openai.yaml": "5.6.5",
333
- "unity-integration/references/ai-app-delivery.md": "5.6.5",
334
- "unity-integration/references/sdk-api.md": "5.6.5",
335
- "unity-integration/references/toolbox-migration.md": "5.6.5",
336
- "unity-integration/references/webgl-hosting.md": "5.6.5",
337
- "v8-api-config/SKILL.md": "5.6.5",
338
- "v8-cache-pattern/SKILL.md": "5.6.5",
339
- "v8-crud-api/SKILL.md": "5.6.5",
340
- "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.6.5",
341
- "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.6.5",
342
- "v8-debugging/SKILL.md": "5.6.5",
343
- "v8-explorer-tree/SKILL.md": "5.6.5",
344
- "v8-export-import/SKILL.md": "5.6.5",
345
- "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.6.5",
346
- "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.6.5",
347
- "v8-export-import/references/progressive-03-安全-性能注意.md": "5.6.5",
348
- "v8-file-upload/SKILL.md": "5.6.5",
349
- "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.6.5",
350
- "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.6.5",
351
- "v8-formengine-http/SKILL.md": "5.6.5",
352
- "v8-frontend-events/SKILL.md": "5.6.5",
353
- "v8-frontend-events/references/bluetooth-print-api.md": "5.6.5",
354
- "v8-frontend-events/references/bluetooth-print.md": "5.6.5",
355
- "v8-frontend-events/references/progressive-01-列表事件.md": "5.6.5",
356
- "v8-http-integration/SKILL.md": "5.6.5",
357
- "v8-http-integration/references/progressive-01-get-请求.md": "5.6.5",
358
- "v8-http-integration/references/progressive-02-错误处理模式.md": "5.6.5",
359
- "v8-image-processing/SKILL.md": "5.6.5",
360
- "v8-image-processing/agents/openai.yaml": "5.6.5",
361
- "v8-image-processing/references/api-reference.md": "5.6.5",
362
- "v8-menu-buttons/SKILL.md": "5.6.5",
363
- "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.6.5",
364
- "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.6.5",
365
- "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.6.5",
366
- "v8-mongodb/SKILL.md": "5.6.5",
367
- "v8-mq-mqtt/SKILL.md": "5.6.5",
368
- "v8-mq-mqtt/references/mqtt-production.md": "5.6.5",
369
- "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.6.5",
370
- "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.6.5",
371
- "v8-saas-multi-tenant/SKILL.md": "5.6.5",
372
- "v8-security/SKILL.md": "5.6.5",
373
- "v8-security/references/progressive-01-2-权限校验.md": "5.6.5",
374
- "v8-security/references/progressive-02-7-日志记录.md": "5.6.5",
375
- "v8-sql-query/SKILL.md": "5.6.5",
376
- "v8-table-event/SKILL.md": "5.6.5",
377
- "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.6.5",
378
- "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.6.5",
379
- "v8-tcp-integration/SKILL.md": "5.6.5",
380
- "v8-tcp-integration/agents/openai.yaml": "5.6.5",
381
- "v8-template-engine/SKILL.md": "5.6.5",
382
- "v8-utilities/SKILL.md": "5.6.5",
383
- "v8-utilities/references/client-api-index.md": "5.6.5",
384
- "v8-utilities/references/platform-http-routes.md": "5.6.5",
385
- "v8-utilities/references/server-api-index.md": "5.6.5",
386
- "v8-workflow/SKILL.md": "5.6.5",
387
- "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.6.5",
388
- "vision-engine/SKILL.md": "5.6.5",
389
- "vision-engine/agents/openai.yaml": "5.6.5",
390
- "vision-engine/references/architecture-and-acceptance.md": "5.6.5",
391
- "workspace-conventions/SKILL.md": "5.6.5",
392
- "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.6.5",
393
- "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.6.5",
394
- "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.6.5"
209
+ ".microi-skills-version.json": "5.6.6",
210
+ ".progressive-disclosure-manifest.json": "5.6.6",
211
+ "README.md": "5.6.6",
212
+ "ai-engine/SKILL.md": "5.6.6",
213
+ "ai-engine/agents/openai.yaml": "5.6.6",
214
+ "ai-platform-governance/SKILL.md": "5.6.6",
215
+ "ai-platform-governance/references/progressive-01-功能开关.md": "5.6.6",
216
+ "app-store/SKILL.md": "5.6.6",
217
+ "app-store/agents/openai.yaml": "5.6.6",
218
+ "business-blueprint/SKILL.md": "5.6.6",
219
+ "datasource-engine/SKILL.md": "5.6.6",
220
+ "datasource-engine/agents/openai.yaml": "5.6.6",
221
+ "dos-orm/SKILL.md": "5.6.6",
222
+ "dos-orm/references/api-reference.md": "5.6.6",
223
+ "email-engine/SKILL.md": "5.6.6",
224
+ "email-engine/references/v8-email.md": "5.6.6",
225
+ "job-engine/SKILL.md": "5.6.6",
226
+ "job-engine/agents/openai.yaml": "5.6.6",
227
+ "message-notification/SKILL.md": "5.6.6",
228
+ "message-notification/agents/openai.yaml": "5.6.6",
229
+ "message-notification/references/contracts.md": "5.6.6",
230
+ "microi-ai-app-auth.js": "5.6.6",
231
+ "microi-ai-application/SKILL.md": "5.6.6",
232
+ "microi-ai-application/agents/openai.yaml": "5.6.6",
233
+ "microi-ai-application/references/frontend-baseline.md": "5.6.6",
234
+ "microi-client-frontend/SKILL.md": "5.6.6",
235
+ "microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.6.6",
236
+ "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.6.6",
237
+ "microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.6.6",
238
+ "microi-codex-installer/SKILL.md": "5.6.6",
239
+ "microi-codex-installer/agents/openai.yaml": "5.6.6",
240
+ "microi-codex/SKILL.md": "5.6.6",
241
+ "microi-datasource-mapping/SKILL.md": "5.6.6",
242
+ "microi-db-schema/SKILL.md": "5.6.6",
243
+ "microi-db-schema/agents/openai.yaml": "5.6.6",
244
+ "microi-db-schema/references/core-tables.md": "5.6.6",
245
+ "microi-db-schema/references/form-component-options.md": "5.6.6",
246
+ "microi-db-schema/references/schema-overview.md": "5.6.6",
247
+ "microi-db-schema/references/schema.md": "5.6.6",
248
+ "microi-db-schema/references/table-catalog.md": "5.6.6",
249
+ "microi-deployment/SKILL.md": "5.6.6",
250
+ "microi-deployment/references/deployment-matrix.md": "5.6.6",
251
+ "microi-docs-coverage/SKILL.md": "5.6.6",
252
+ "microi-docs-coverage/references/capability-map.md": "5.6.6",
253
+ "microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.6.6",
254
+ "microi-form-engine/SKILL.md": "5.6.6",
255
+ "microi-form-engine/references/component-catalog.md": "5.6.6",
256
+ "microi-form-engine/references/data-source-events.md": "5.6.6",
257
+ "microi-form-layout/SKILL.md": "5.6.6",
258
+ "microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.6.6",
259
+ "microi-frontend-sdk/SKILL.md": "5.6.6",
260
+ "microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.6.6",
261
+ "microi-left-right-layout/SKILL.md": "5.6.6",
262
+ "microi-microservice/SKILL.md": "5.6.6",
263
+ "microi-microservice/references/runtime-delivery.md": "5.6.6",
264
+ "microi-mobile-app-quality/SKILL.md": "5.6.6",
265
+ "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.6.6",
266
+ "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.6.6",
267
+ "microi-solution-quotation/SKILL.md": "5.6.6",
268
+ "microi-solution-quotation/agents/openai.yaml": "5.6.6",
269
+ "microi-solution-quotation/scripts/build_solution_quote.py": "5.6.6",
270
+ "microi-sso/SKILL.md": "5.6.6",
271
+ "microi-sso/references/acceptance.md": "5.6.6",
272
+ "microi-sso/references/configuration-and-security.md": "5.6.6",
273
+ "microi-sso/references/inbound.md": "5.6.6",
274
+ "microi-sso/references/outbound.md": "5.6.6",
275
+ "microi-system-delivery/SKILL.md": "5.6.6",
276
+ "microi-system-delivery/references/progressive-01-标准工作流.md": "5.6.6",
277
+ "microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.6.6",
278
+ "microi-ui/SKILL.md": "5.6.6",
279
+ "microi-ui/references/progressive-01-移动端场景蓝图.md": "5.6.6",
280
+ "microi-uniapp-frontend/SKILL.md": "5.6.6",
281
+ "microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.6.6",
282
+ "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.6.6",
283
+ "microi.v8.js": "5.6.6",
284
+ "module-engine/SKILL.md": "5.6.6",
285
+ "module-engine/references/module-config.md": "5.6.6",
286
+ "ocr-engine/SKILL.md": "5.6.6",
287
+ "ocr-engine/agents/openai.yaml": "5.6.6",
288
+ "page-engine/SKILL.md": "5.6.6",
289
+ "page-engine/examples/compact-dashboard.json": "5.6.6",
290
+ "page-engine/references/progressive-01-所有组件类型.md": "5.6.6",
291
+ "page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.6.6",
292
+ "performance-testing/SKILL.md": "5.6.6",
293
+ "playwright-e2e/SKILL.md": "5.6.6",
294
+ "playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.6.6",
295
+ "playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.6.6",
296
+ "playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.6.6",
297
+ "playwright-e2e/references/progressive-04-ci-建议.md": "5.6.6",
298
+ "print-engine/SKILL.md": "5.6.6",
299
+ "production-readonly-audit/SKILL.md": "5.6.6",
300
+ "report-engine/SKILL.md": "5.6.6",
301
+ "report-engine/agents/openai.yaml": "5.6.6",
302
+ "scripts/optimize-progressive-disclosure.mjs": "5.6.6",
303
+ "scripts/refresh-progressive-disclosure.mjs": "5.6.6",
304
+ "scripts/sync-embedded-skills.mjs": "5.6.6",
305
+ "scripts/validate-progressive-disclosure.mjs": "5.6.6",
306
+ "search-engine/SKILL.md": "5.6.6",
307
+ "search-engine/agents/openai.yaml": "5.6.6",
308
+ "spider-engine/SKILL.md": "5.6.6",
309
+ "system-observability/SKILL.md": "5.6.6",
310
+ "system-observability/references/memory-incident-triage.md": "5.6.6",
311
+ "translate-engine/SKILL.md": "5.6.6",
312
+ "translate-engine/agents/openai.yaml": "5.6.6",
313
+ "ui-design/SKILL.md": "5.6.6",
314
+ "ui-design/assets/pattern-showcase/app.js": "5.6.6",
315
+ "ui-design/assets/pattern-showcase/index.html": "5.6.6",
316
+ "ui-design/assets/pattern-showcase/styles.css": "5.6.6",
317
+ "ui-design/assets/templates/MCI-DESIGN.md": "5.6.6",
318
+ "ui-design/references/design-pattern-library.md": "5.6.6",
319
+ "ui-design/references/mci-design-contract.md": "5.6.6",
320
+ "ui-design/references/motion-and-media.md": "5.6.6",
321
+ "ui-design/references/product-flow-recipes.md": "5.6.6",
322
+ "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.6.6",
323
+ "ui-design/references/progressive-02-字体.md": "5.6.6",
324
+ "ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.6.6",
325
+ "ui-design/references/progressive-04-组件风格速查.md": "5.6.6",
326
+ "ui-design/references/progressive-05-移动端专用规范.md": "5.6.6",
327
+ "ui-design/references/progressive-06-主题切换实现.md": "5.6.6",
328
+ "ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.6.6",
329
+ "ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.6.6",
330
+ "uniapp-mall-assets/SKILL.md": "5.6.6",
331
+ "unity-integration/SKILL.md": "5.6.6",
332
+ "unity-integration/agents/openai.yaml": "5.6.6",
333
+ "unity-integration/references/ai-app-delivery.md": "5.6.6",
334
+ "unity-integration/references/sdk-api.md": "5.6.6",
335
+ "unity-integration/references/toolbox-migration.md": "5.6.6",
336
+ "unity-integration/references/webgl-hosting.md": "5.6.6",
337
+ "v8-api-config/SKILL.md": "5.6.6",
338
+ "v8-cache-pattern/SKILL.md": "5.6.6",
339
+ "v8-crud-api/SKILL.md": "5.6.6",
340
+ "v8-crud-api/references/progressive-01-查询列表-分页.md": "5.6.6",
341
+ "v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.6.6",
342
+ "v8-debugging/SKILL.md": "5.6.6",
343
+ "v8-explorer-tree/SKILL.md": "5.6.6",
344
+ "v8-export-import/SKILL.md": "5.6.6",
345
+ "v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.6.6",
346
+ "v8-export-import/references/progressive-02-powerpoint-导出.md": "5.6.6",
347
+ "v8-export-import/references/progressive-03-安全-性能注意.md": "5.6.6",
348
+ "v8-file-upload/SKILL.md": "5.6.6",
349
+ "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.6.6",
350
+ "v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.6.6",
351
+ "v8-formengine-http/SKILL.md": "5.6.6",
352
+ "v8-frontend-events/SKILL.md": "5.6.6",
353
+ "v8-frontend-events/references/bluetooth-print-api.md": "5.6.6",
354
+ "v8-frontend-events/references/bluetooth-print.md": "5.6.6",
355
+ "v8-frontend-events/references/progressive-01-列表事件.md": "5.6.6",
356
+ "v8-http-integration/SKILL.md": "5.6.6",
357
+ "v8-http-integration/references/progressive-01-get-请求.md": "5.6.6",
358
+ "v8-http-integration/references/progressive-02-错误处理模式.md": "5.6.6",
359
+ "v8-image-processing/SKILL.md": "5.6.6",
360
+ "v8-image-processing/agents/openai.yaml": "5.6.6",
361
+ "v8-image-processing/references/api-reference.md": "5.6.6",
362
+ "v8-menu-buttons/SKILL.md": "5.6.6",
363
+ "v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.6.6",
364
+ "v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.6.6",
365
+ "v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.6.6",
366
+ "v8-mongodb/SKILL.md": "5.6.6",
367
+ "v8-mq-mqtt/SKILL.md": "5.6.6",
368
+ "v8-mq-mqtt/references/mqtt-production.md": "5.6.6",
369
+ "v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.6.6",
370
+ "v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.6.6",
371
+ "v8-saas-multi-tenant/SKILL.md": "5.6.6",
372
+ "v8-security/SKILL.md": "5.6.6",
373
+ "v8-security/references/progressive-01-2-权限校验.md": "5.6.6",
374
+ "v8-security/references/progressive-02-7-日志记录.md": "5.6.6",
375
+ "v8-sql-query/SKILL.md": "5.6.6",
376
+ "v8-table-event/SKILL.md": "5.6.6",
377
+ "v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.6.6",
378
+ "v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.6.6",
379
+ "v8-tcp-integration/SKILL.md": "5.6.6",
380
+ "v8-tcp-integration/agents/openai.yaml": "5.6.6",
381
+ "v8-template-engine/SKILL.md": "5.6.6",
382
+ "v8-utilities/SKILL.md": "5.6.6",
383
+ "v8-utilities/references/client-api-index.md": "5.6.6",
384
+ "v8-utilities/references/platform-http-routes.md": "5.6.6",
385
+ "v8-utilities/references/server-api-index.md": "5.6.6",
386
+ "v8-workflow/SKILL.md": "5.6.6",
387
+ "v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.6.6",
388
+ "vision-engine/SKILL.md": "5.6.6",
389
+ "vision-engine/agents/openai.yaml": "5.6.6",
390
+ "vision-engine/references/architecture-and-acceptance.md": "5.6.6",
391
+ "workspace-conventions/SKILL.md": "5.6.6",
392
+ "workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.6.6",
393
+ "workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.6.6",
394
+ "workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.6.6"
395
395
  },
396
396
  "files": [
397
397
  ".microi-skills-version.json",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "5.6.5",
2
+ "version": "5.6.6",
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.Code/bump-version.js",
5
- "updatedAt": "2026-09-14T06:02:18.304Z"
5
+ "updatedAt": "2026-09-14T09:25:05.637Z"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-09-14T05:18:40.880Z",
3
+ "generatedAt": "2026-09-14T07:24:52.477Z",
4
4
  "policy": {
5
5
  "maxEntryLines": 285,
6
6
  "referenceBudgetLines": 245,
@@ -169,11 +169,11 @@
169
169
  ]
170
170
  },
171
171
  "microi-client-frontend": {
172
- "originalSha256": "341cd39dbe7904e65bc9b37362c7e22da9fc6f66093cea74a2399f12e5ce4291",
173
- "originalLines": 681,
172
+ "originalSha256": "741f264b78764e37e7aa8c410f350573af1294c2edcc9d1ddb620f6ddcc7b378",
173
+ "originalLines": 689,
174
174
  "prefixSha256": "87ada6841f976552d9f5b88477fa91a92e4cd9cd040a8a725267d9fa2e4635c2",
175
175
  "prefixBytes": 782,
176
- "entryLines": 223,
176
+ "entryLines": 231,
177
177
  "chunks": [
178
178
  {
179
179
  "id": "microi-client-frontend-000",
@@ -187,8 +187,8 @@
187
187
  "id": "microi-client-frontend-001",
188
188
  "ordinal": 1,
189
189
  "destination": "microi-client-frontend/SKILL.md",
190
- "sha256": "c17e7292fa264d10c6d21a2d634b60f40e12bb7168e69a46a85f351f5ed48f2f",
191
- "lines": 22,
190
+ "sha256": "e9667a3a534e09b964c4a11796c003b48edc4093c66ed0c8777aefd4188a4ba8",
191
+ "lines": 30,
192
192
  "heading": "1. 技术栈和源码入口"
193
193
  },
194
194
  {
@@ -2786,26 +2786,26 @@
2786
2786
  ]
2787
2787
  },
2788
2788
  "v8-security": {
2789
- "originalSha256": "f3624718dfa642f4c3ab5d48a33022014aa467af1be756fdbc78c4bae2231d1c",
2790
- "originalLines": 503,
2789
+ "originalSha256": "ef779c0c6eb788f3c78c4e77ce5774f3e290e36fad344316368b0ee26e1f49e9",
2790
+ "originalLines": 511,
2791
2791
  "prefixSha256": "c3b2ae10a39461ee69fda3c7e994d072ca6d8c9dc6f2338742bc8f07e0dcffd0",
2792
2792
  "prefixBytes": 1648,
2793
- "entryLines": 190,
2793
+ "entryLines": 197,
2794
2794
  "chunks": [
2795
2795
  {
2796
2796
  "id": "v8-security-000",
2797
2797
  "ordinal": 0,
2798
2798
  "destination": "v8-security/SKILL.md",
2799
- "sha256": "d03ee34e72925db55f9022de26dfc251c0d3d69fac52ae6a910d42ddfc142ae7",
2800
- "lines": 50,
2799
+ "sha256": "2e81552d91b61d9d7f96cba1502306e186f0a288d5db8d443c4e524fce748bc9",
2800
+ "lines": 52,
2801
2801
  "heading": "0. 租户动态系统设置与密钥边界"
2802
2802
  },
2803
2803
  {
2804
2804
  "id": "v8-security-001",
2805
2805
  "ordinal": 1,
2806
2806
  "destination": "v8-security/SKILL.md",
2807
- "sha256": "aad35b2c3e1876d98ead7e604307bcb7d39fe8c480d72f102ae956972580a35b",
2808
- "lines": 19,
2807
+ "sha256": "ccec93b880295123923b2375dbc616c5ab02aaf43af9a79f26b7ac953609866d",
2808
+ "lines": 24,
2809
2809
  "heading": "0.5 接口引擎配置安全"
2810
2810
  },
2811
2811
  {
@@ -2836,15 +2836,15 @@
2836
2836
  "id": "v8-security-005",
2837
2837
  "ordinal": 3,
2838
2838
  "destination": "v8-security/references/progressive-01-2-权限校验.md",
2839
- "sha256": "c2bc7b1ec3ad6240b05537e1ffada3ef2e07e7a10e15102d9e3c8f777ae7ee31",
2840
- "lines": 100,
2839
+ "sha256": "0a0f4864a315285b0ed3824e31d1f62d83077a389628f4eae6a0b3550ca50237",
2840
+ "lines": 101,
2841
2841
  "heading": "2. 权限校验"
2842
2842
  },
2843
2843
  {
2844
2844
  "id": "v8-security-006",
2845
2845
  "ordinal": 6,
2846
2846
  "destination": "v8-security/references/progressive-01-2-权限校验.md",
2847
- "sha256": "ba49a1e5ea27c6cca4c78c6ee3e95a5e41032bb08f6813753bc8aa855ddfc832",
2847
+ "sha256": "3a40db54a44c9c76bd3dd7255d1a6b15dcf8b8b90c2d032b7eda80532f023d7d",
2848
2848
  "lines": 21,
2849
2849
  "heading": "5. 防重复提交"
2850
2850
  },
@@ -2852,7 +2852,7 @@
2852
2852
  "id": "v8-security-007",
2853
2853
  "ordinal": 7,
2854
2854
  "destination": "v8-security/references/progressive-01-2-权限校验.md",
2855
- "sha256": "60297c515c7c7b6e35cd871ab2fd7c772f8b227dfcefa0419868943213556c06",
2855
+ "sha256": "35706b9a254fb5788b64535947261f66fd8c06e17103b2169f8be02fce05fa65",
2856
2856
  "lines": 71,
2857
2857
  "heading": "6. 敏感数据"
2858
2858
  },
@@ -21,10 +21,18 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
21
21
  ---
22
22
 
23
23
  <!-- /microi-progressive:chunk -->
24
- <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=c17e7292fa264d10c6d21a2d634b60f40e12bb7168e69a46a85f351f5ed48f2f -->
25
- ## 1. 技术栈和源码入口
26
-
27
- - Vue 3 + Options API + mixins,构建工具是 Vite。
24
+ <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=e9667a3a534e09b964c4a11796c003b48edc4093c66ed0c8777aefd4188a4ba8 -->
25
+ ## 1. 技术栈和源码入口
26
+
27
+ ### 详情评论与代码版本的按需读取
28
+
29
+ - 评论用 `/api/FormEngine/AddFormComment`,只传 `ParentFormEngineKey/ParentTableRowId/_SysMenuId/Content/ParentCommentId/RequestId`。服务端固定作者、父表及回复上下文;同一提交重试必须复用 RequestId,兼容 GUID 与平台 `DiyCommon.NewGuid()` 实际生成的 ULID。
30
+ - 评论归属为 `diy_comment.ParentTableId + TableRowId`,新表字段与复合索引通过表单引擎应用交付,主库回读保证写后可见。已有 TableId 绑定兼容,空归属历史评论禁止仅按记录 Id 自动猜测或后台回填。
31
+ - `/api/FormEngine/GetFormRelatedData` 的版本列表只含元信息;`HistoryContentMode=OnDemand` 时,点击动作再传 `VersionId` 读取一条,并要求返回 `Authorized`。不要把 Data 缓存到列表,不要并发预取全部正文。
32
+ - 代码历史只向当前有效的平台管理员开放代码字段白名单;当前行可读不等于历史秘密可读。局部版本比较/加载只涉及快照中的字段,保存继续走正常表单鉴权和事件。
33
+ - 不得为了修复右栏恢复调度器通用 FormEngine 状态写回、启动历史回填或无变化版本写入。必须同时运行评论归属/去重、按需读取以及 ScheduleRuntimeTimeWriter、V8CodeVersionService 的性能回归。
34
+
35
+ - Vue 3 + Options API + mixins,构建工具是 Vite。
28
36
  - UI 主要使用 Element Plus、FontAwesome、项目内 `dynamic-icon`。
29
37
  - 状态入口:`src/pinia`,常用 `useDiyStore()` 读取 `GetCurrentUser`、`OsClient`、终端类型等。
30
38
  - 低代码主入口集中在 `src/views/form-engine/`,不要只看一个 `.vue` 文件就下结论。
@@ -188,6 +188,17 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
188
188
  - 通用规则:任何在 FormEngine 可用前直接写核心物理表的可信自愈,都必须先规范化已知历史别名,再应用固定实体字段白名单,并与目标租户实时回读的物理列取交集;SQL 只使用经过双重筛选的固定标识符和参数值。官方包本身必须携带完整审计字段;无登录上下文的启动门禁还必须为历史必填审计列提供稳定的系统身份兜底,并为 `IsDeleted/IsEnable/Lock` 等开关及 `ApiRole/Files` 等集合字段补齐语义明确的插入默认值,这些默认值不得参与授权。必需业务列缺失时给出明确物理升级错误,写入后按稳定 Key 强回读,禁止把包级元数据直接转换成列名。
189
189
  - 自动化检查:使用包含旧 `Name`、未来包级字段、新版本可选列及缺失 `UserId/UserName/Lock` 的官方包样例,分别对完整结构与精简旧结构断言 `Name -> ApiName`、未知字段被丢弃、必需字段保留、审计字段和传统必填列获得稳定非空值;同时扫描全部启动闭包包,保证 `SysApiEngines` 只输出 `ApiName` 且审计字段及传统必填开关完整,并锁定新增接口生成器输出的集合字段,最后执行真实启动日志门禁回归。
190
190
 
191
+ ## 空数据库 SQL 导入回归
192
+
193
+ - PostgreSQL 导出中的 V8、默认值和注释使用显式 `E'…'` 字符串,同时转义反斜杠、引号、
194
+ 物理换行及控制字符。分别在 `standard_conforming_strings=on/off` 中完整导入,回读代码
195
+ 哈希、长度、空字符串与 NULL;不能把关闭标准字符串模式当作通用修复,也不能删改 V8 代码。
196
+ - MySQL 5.7/8 分别在隔离 Docker 数据库执行完整原始脚本。SaaS 宽表的非索引配置文本
197
+ 优先使用 `mediumtext`,保留主键、租户标识和索引列;字段元数据、物理列与应用包 DDL
198
+ 必须一致。不通过关闭严格模式掩盖行宽错误,不将字符转义问题一概归为字段长度不足。
199
+ - 通过官方 MCP 修复母版后发布归属应用,后端导出修复进入镜像后再运行既有空库制作后台任务。
200
+ 等待成功终态,完整下载各 ZIP 并校验 SHA-256,再做导入与数据完整性验收。
201
+
191
202
  ## 禁止事项
192
203
 
193
204
  - 启动字段门禁必须检查核心普通列的可空约束,不能仅以“字段存在”判定就绪。旧库非空列在程序共享租约内放宽为 `NULL`,保留 Id/数据库主键、列类型、默认值、注释和索引;同版本热修复也需回读真实结构。修复必须在插入启动接口之前执行,禁止通过逐次补默认值掩盖结构问题。
@@ -14,7 +14,7 @@ description: Microi V8 安全指南。用于审查 DiyToken 与权限、可逆
14
14
  官方升级资源属于独立控制面。`get-microi-upgrade-resource` 可以匿名读取固定白名单,但 `Publish/PublishBatch` 必须调用仅绑定该 Managed ApiEngineKey 的 `V8.Method.AuthorizeOfficialResourcePublish()`:固定 `iTdos` 官方租户、拒绝访问密钥会话,并从主库复核当前用户、状态和平台管理员角色。禁止只相信 `V8.CurrentUser.Level`,也禁止把这个可信原子复用于普通接口、租户 Hook 或表单事件;资源校验、SHA 乐观锁、事务行锁、写入及回读仍由 Managed V8 编排。
15
15
 
16
16
  <!-- microi-progressive:begin -->
17
- <!-- microi-progressive:chunk id=v8-security-000 sha256=d03ee34e72925db55f9022de26dfc251c0d3d69fac52ae6a910d42ddfc142ae7 -->
17
+ <!-- microi-progressive:chunk id=v8-security-000 sha256=2e81552d91b61d9d7f96cba1502306e186f0a288d5db8d443c4e524fce748bc9 -->
18
18
  ## 0. 租户动态系统设置与密钥边界
19
19
 
20
20
  **AI 默认处理路径:** 用户交付第三方 Secret 并授权配置时,优先调用 `microi_manage_server_private_secret`:List 只确认 Key/HasSecret;Save 使用 `confirmExecution=SAVE:<ConfigKey>`,固定 `IsSecret=true / IsPublic=false` 并自动脱敏回读。例如畅捷通使用 `Integration.Changjet.AppSecret`,后端从 `V8.SysConfig.ServerPrivateSettings` 使用。不要仅拒绝硬编码后停止,也不要因为 `OsClientModel` 不暴露密钥而误判服务端 V8 无法调用第三方。工具不提供原文揭示;更换已有 Key 前回读现状,超时只回读、不盲目重写。
@@ -67,7 +67,7 @@ Secret 只通过租户管理员专用端点写入租户绑定的认证密文。
67
67
  - 多节点保存连接使用按 `OsClient + DbKey` 隔离的分布式锁,并由数据库唯一索引兜底;同步数据和附件仍必须使用业务幂等键,锁不能替代唯一约束、状态机或 inbox/outbox。
68
68
 
69
69
  <!-- /microi-progressive:chunk -->
70
- <!-- microi-progressive:chunk id=v8-security-001 sha256=bcb95a6c33b3abb6bfce13589e21ce56ff2aea8578d05180f2f2538cc5117fb8 -->
70
+ <!-- microi-progressive:chunk id=v8-security-001 sha256=ccec93b880295123923b2375dbc616c5ab02aaf43af9a79f26b7ac953609866d -->
71
71
  ## 0.5 接口引擎配置安全
72
72
 
73
73
  代码以外,接口本身的配置项也是安全防线(详见 `v8-api-config/SKILL.md`):
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=v8-security-005 sha256=c2bc7b1ec3ad6240b05537e1ffada3ef2e07e7a10e15102d9e3c8f777ae7ee31 -->
5
+ <!-- microi-progressive:chunk id=v8-security-005 sha256=0a0f4864a315285b0ed3824e31d1f62d83077a389628f4eae6a0b3550ca50237 -->
6
6
  ## 2. 权限校验
7
7
 
8
8
  ### DiyToken 是平台会话与权限入口,不替换为 ASP.NET Identity
@@ -29,7 +29,8 @@ DiyToken 与 `sys_user`、`OsClient`、终端 `did`、共享 Redis 登录态、
29
29
  - 菜单 `SqlWhere`、`SqlJoin` / `JoinTables` 数据范围必须在服务端形成的**真实列表、计数和导出查询**中执行,不能只用于界面展示或查询后过滤。单行详情只校验同表菜单访问权,不应用这些模块列表过滤;它们也不是行级写权限。
30
30
  - 主表新增、修改、删除分别由当前角色的 `Add`、`Edit`、`Del` 权限控制;不得把查询 SqlWhere 追加到写入 SQL,也不得因为查询包含跨表 Join 拒绝已获授权的写入。需要“仅可修改本人数据”等业务限制时,在 `SubmitBeforeServerV8` 或专用接口引擎中以可信服务器代码校验,并统一写入 `TenantId`、负责人、创建人等归属字段。
31
31
  - 导入、导出必须携带真实菜单上下文,并分别拥有 `Import`、`Export`;不能用 Table 级直接授权绕过。
32
- - 平台表必须按后端 `PlatformResourceSecurity` 分级:账号/角色/权限、SaaS 配置、接口引擎、表字段元数据、任务、数据源、密钥和基础设施等管理员专用表,对 `Level < 9999` 的通用客户端 FormEngine 全操作硬拒绝;工作流、微服务/商店、蓝图和微应用运行元数据只允许显式授权后的 `Read/List`,写入仍硬拒绝;`mic_page/mic_print` 按真实菜单或 Table 的 `Read/Add/Edit/Del` 权限管理。
32
+ - 平台表必须按后端 `PlatformResourceSecurity` 分级:角色/权限、SaaS 配置、接口引擎、任务、数据源、密钥和基础设施等管理员专用表,对 `Level < 9999` 的通用客户端 FormEngine 全操作硬拒绝;`diy_table/diy_field`、工作流、微服务/商店、蓝图和微应用运行元数据只允许显式授权后的 `Read/List`,增删改及导入导出仍硬拒绝;`mic_page/mic_print/sys_user` 按真实菜单或 Table 的 `Read/Add/Edit/Del` 权限管理,账号管理另外执行层级校验和密码脱敏。
33
+ - 需要角色查询表/字段目录时,在 `/#/system/role` 的【表直连权限】选择 `diy_table/diy_field` 并仅授予【查】,不必强制改用接口引擎。授权包含配置与事件源码,仅授予可信角色;选列参数不构成字段权限,需限制返回字段时仍用固定投影的接口引擎。此策略由后端发布,前端读取 `GetDirectTableGrantPolicies`,不维护第二份表名白名单;不得自动给存量角色补授权。
33
34
  - 匿名读取/新增仅适用于 `diy_table` 明确开启匿名能力的普通业务表;上述三类平台表必须先于匿名开关拒绝。
34
35
  - 角色增删改接口不能只相信 Token 缓存或前端禁用状态,必须覆盖请求中的 `_CurrentUser/OsClient`,并从租户主库复核活动用户、数据库 Level 与有效角色 Level。角色降级要先同步受影响用户 Level,再提升共享授权 `epoch`,避免旧令牌窗口;Postman 伪造 `_IsAdmin/Level/RoleIds` 必须失败。
35
36
  - 权限 JSON、角色 Id 或菜单上下文解析失败时必须失败关闭;角色 Id 使用精确集合匹配,禁止 `Contains` 子串判断。
@@ -103,7 +104,7 @@ var result = V8.FormEngine.GetTableData('Order', {
103
104
  ```
104
105
 
105
106
  <!-- /microi-progressive:chunk -->
106
- <!-- microi-progressive:chunk id=v8-security-006 sha256=ba49a1e5ea27c6cca4c78c6ee3e95a5e41032bb08f6813753bc8aa855ddfc832 -->
107
+ <!-- microi-progressive:chunk id=v8-security-006 sha256=3a40db54a44c9c76bd3dd7255d1a6b15dcf8b8b90c2d032b7eda80532f023d7d -->
107
108
  ## 5. 防重复提交
108
109
 
109
110
  前端禁用按钮或普通 Cache 的 `Exists → Set` 只能改善体验,不能保证业务只执行一次。写操作必须接收稳定幂等键,并通过数据库唯一约束、条件更新或状态机原子落库;接口引擎可再配置 `LockKey` 降低并发,但锁不能代替业务幂等。
@@ -125,7 +126,7 @@ if (old.Code === 1 && old.Data) {
125
126
  ```
126
127
 
127
128
  <!-- /microi-progressive:chunk -->
128
- <!-- microi-progressive:chunk id=v8-security-007 sha256=60297c515c7c7b6e35cd871ab2fd7c772f8b227dfcefa0419868943213556c06 -->
129
+ <!-- microi-progressive:chunk id=v8-security-007 sha256=35706b9a254fb5788b64535947261f66fd8c06e17103b2169f8be02fce05fa65 -->
129
130
  ## 6. 敏感数据
130
131
 
131
132
  ### 密码与认证