@microi.net/cli 4.8.7 → 4.8.8
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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +4 -4
- package/package.json +1 -1
- package/scripts/mcp-server.js +83 -79
- package/scripts/microi-cli.js +2 -2
- package/scripts/microi-skills.meta.json +119 -119
- package/skills/.microi-skills-version.json +2 -2
- package/skills/microi-docs-coverage/SKILL.md +16 -0
- package/skills/microi-frontend-sdk/SKILL.md +10 -0
- package/skills/microi-microservice/SKILL.md +27 -4
- package/skills/microi-microservice/references/runtime-delivery.md +17 -3
- package/skills/ui-design/SKILL.md +15 -2
- package/skills/v8-file-upload/SKILL.md +8 -0
package/scripts/microi-cli.js
CHANGED
|
@@ -1184,7 +1184,7 @@ AI \u5728\u7528\u6237\u672C\u673A\u542F\u52A8 Node.js\u3001Vite\u3001Webpack\u30
|
|
|
1184
1184
|
- \u65E5\u5E38\u529F\u80FD\u5F00\u53D1\u3001\u7F3A\u9677\u4FEE\u590D\u3001\u6D4B\u8BD5\u3001\u666E\u901A\u6587\u6863\u8865\u5145\u3001Skill \u5B8C\u5584\u548C\u4EE3\u7801\u91CD\u6784\u671F\u95F4\uFF0C\u4E0D\u5F97\u4FEE\u6539 \`microi.doc/docs/doc/about/update-log.md\`\u3002
|
|
1185
1185
|
- \u53EA\u6709\u7528\u6237\u660E\u786E\u63D0\u51FA\u201C\u53D1\u5E03\u7248\u672C\u201D\u201C\u51C6\u5907\u53D1\u7248\u201D\u201C\u66F4\u65B0\u7248\u672C\u65E5\u5FD7\u201D\u6216\u76F4\u63A5\u70B9\u540D\u8981\u6C42\u4FEE\u6539\u8BE5\u6587\u4EF6\u65F6\uFF0C\u624D\u5141\u8BB8\u7F16\u8F91\u66F4\u65B0\u65E5\u5FD7\uFF1B\u201C\u5B8C\u5584\u6587\u6863\u201D\u6216\u201C\u8865\u5145\u5B98\u7F51\u8BF4\u660E\u201D\u4E0D\u7B49\u4E8E\u6388\u6743\u4FEE\u6539\u7248\u672C\u65E5\u5FD7\u3002
|
|
1186
1186
|
- \u5982\u679C\u672C\u8F6E\u8BEF\u6539\u4E86\u66F4\u65B0\u65E5\u5FD7\uFF0C\u6536\u5C3E\u524D\u53EA\u64A4\u56DE\u672C\u8F6E\u7531 AI \u65B0\u589E\u7684\u6539\u52A8\uFF1B\u5FC5\u987B\u4FDD\u7559\u7528\u6237\u6216\u5176\u5B83\u4EFB\u52A1\u5DF2\u6709\u7684\u672A\u63D0\u4EA4\u5185\u5BB9\uFF0C\u4E0D\u5F97\u6574\u6587\u4EF6\u8986\u76D6\u6216\u56DE\u9000\u3002
|
|
1187
|
-
`,Zr="\n\n---\n\n## \u6570\u636E\u5E93\u7ED3\u6784\n\n\u6570\u636E\u5E93\u7ED3\u6784\u4E0D\u4F1A\u5199\u5165\u672C\u57FA\u7840\u77E5\u8BC6\u5E93\u6587\u4EF6\uFF0C\u907F\u514D\u4E0D\u540C\u5F00\u53D1\u8005\u8FDE\u63A5\u4E0D\u540C\u670D\u52A1\u5668\u540E\u4EA7\u751F\u63D0\u4EA4\u51B2\u7A81\u3002\n\n\u7F16\u5199 `V8.FormEngine` \u6216 `V8.Db` \u4EE3\u7801\u65F6\uFF1A\n- \u4F18\u5148\u901A\u8FC7 MCP \u5DE5\u5177 `microi_get_db_schema` \u83B7\u53D6\u5F53\u524D\u670D\u52A1\u5668\u7684\u5B9E\u65F6\u8868\u7ED3\u6784\u3002\n- \u5982\u9700\u8BFB\u53D6\u672C\u5730\u5FEB\u7167\uFF0C\u8BF7\u67E5\u770B\u5F53\u524D\u5F15\u64CE\u6587\u4EF6\u6240\u5C5E OsClient \u76EE\u5F55\u4E0B\u7684 `.microi-db-schema.md`\u3002\n\n\u4ECE\u81EA\u7136\u8BED\u8A00\u9700\u6C42\u521B\u5EFA\u5B8C\u6574 Microi \u4F4E\u4EE3\u7801\u7CFB\u7EDF\u65F6\uFF1A\n- \u5148\u8C03\u7528 `microi_get_db_schema` \u4E86\u89E3\u5DF2\u6709\u8868\u3001\u83DC\u5355\u3001\u5B57\u6BB5\uFF0C\u907F\u514D\u91CD\u590D\u5EFA\u6A21\u3002\n- \u518D\u8C03\u7528 `microi_get_manifest_schema` \u83B7\u53D6\u5B8C\u6574 Manifest \u534F\u8BAE\u548C\u793A\u4F8B\u3002\n- \u5C06\u9700\u6C42\u6574\u7406\u4E3A Manifest\uFF0C\u6A21\u5757\u914D\u7F6E\u4F18\u5148\u5199\u5B57\u6BB5\u540D\uFF1A`listFields`\u3001`searchFields`\u3001`sortFields`\u3001`hiddenFields`\u3001`mobileFields`\u3001`cardTitleFields`\u3001`cardBottomFields`\u3002MCP \u4F1A\u81EA\u52A8\u89E3\u6790\u4E3A `diy_field.Id`\u3001`SelectFields`\u3001`SearchFieldIds` \u7B49 `sys_menu` \u6240\u9700\u683C\u5F0F\u3002\n- \u521B\u5EFA\u7ED1\u5B9A `diyTableId` \u7684\u540E\u53F0\u83DC\u5355\u65F6\uFF0C\u5FC5\u987B\u914D\u7F6E\u6216\u5141\u8BB8 MCP/\u540E\u7AEF\u81EA\u52A8\u63A8\u65AD `TableDiyFieldIds`\u3001`SelectFields`\u3001`SearchFieldIds`\u3001`SortFieldIds`\u3001`NotShowFields`\u3001`StatisticsFields`\u3001`MobileListFields`\u3001`CardTitleTagFields`\u3001`CardBottomTagFields`\u3001`DefaultOrderBy`\u3002\n- `NotShowFields` \u9ED8\u8BA4\u9690\u85CF Id/\u5916\u952E/\u7CFB\u7EDF\u5B57\u6BB5/\u5E03\u5C40\u63A7\u4EF6/\u4E0A\u4F20\u5BCC\u6587\u672C\u5730\u56FE\u5B50\u8868\u7B49\u91CD\u5B57\u6BB5\uFF1B`SearchFieldIds` \u9ED8\u8BA4\u9009\u62E9\u540D\u79F0\u3001\u6807\u9898\u3001\u7F16\u53F7\u3001\u72B6\u6001\u3001\u5206\u7C7B\u3001\u8D1F\u8D23\u4EBA\u3001\u65F6\u95F4\u7B49\u5E38\u7528\u7B5B\u9009\uFF1B`StatisticsFields` \u9ED8\u8BA4\u9009\u62E9\u91D1\u989D\u3001\u4EF7\u683C\u3001\u6570\u91CF\u3001\u79EF\u5206\u3001\u4F59\u989D\u7B49\u6570\u503C\u5B57\u6BB5\uFF1B\u79FB\u52A8\u7AEF/\u5361\u7247\u5217\u9ED8\u8BA4\u4FDD\u7559 3-4 \u4E2A\u6838\u5FC3\u53EF\u8BFB\u5B57\u6BB5\u3002\n- \u8868\u5355\u63A7\u4EF6\u4EE5 `Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json` \u4E3A\u4E8B\u5B9E\u6E90\u3002\u5B57\u6BB5\u8F83\u591A\u65F6\u4F18\u5148\u4F7F\u7528 `diy_table.Tabs` \u548C\u5B57\u6BB5 `Tab` \u5206\u7EC4\uFF0C\u5C40\u90E8\u590D\u6742\u533A\u57DF\u518D\u7528 `CollapseGroup` \u6216\u5B57\u6BB5\u7EA7 `Tabs` \u63A7\u4EF6\u6298\u53E0/\u5206\u6BB5\u3002\n- \u751F\u6210\u6216\u65B0\u589E\u5B57\u6BB5\u65F6\uFF0C\u666E\u901A\u5B57\u6BB5\u9ED8\u8BA4\u4E0D\u8981\u8BBE\u7F6E `diy_field.FormWidth`\uFF08\u4FDD\u6301 null/\u7701\u7565\uFF09\uFF1B\u53EA\u6709 `CodeEditor`\u3001`Textarea`\u3001`RichText`\u3001\u4E0A\u4F20\u3001\u5B50\u8868\u3001\u5730\u56FE/\u5E03\u5C40/\u81EA\u5B9A\u4E49\u7B49\u9700\u8981\u72EC\u5360\u6574\u884C\u7684\u63A7\u4EF6\u624D\u8BBE\u7F6E\u4E3A `24`\u3002\n- \u751F\u6210\u5BA1\u6279\u6D41\u65F6\uFF0CManifest \u7684 workflows \u9700\u5305\u542B FlowDesign\u3001Nodes\u3001Lines\uFF1B\u8FDE\u7EBF\u6807\u9898\u9ED8\u8BA4\u4F7F\u7528 `{\u8D77\u70B9\u8282\u70B9} \u5230 {\u7EC8\u70B9\u8282\u70B9}`\uFF0C\u591A\u8DEF\u7EBF\u8282\u70B9\u4F18\u5148\u751F\u6210\u8BBE\u7F6E `V8.NextNodeId` \u7684 `LineValueV8`\u3002\n- \u4FDD\u5B58\u5DE5\u4F5C\u6D41\u524D\u8C03\u7528 `microi_check_workflow_package` \u68C0\u67E5\u62D3\u6251\uFF0C\u5FC5\u8981\u65F6\u7528 `microi_test_workflow_condition` \u5E26\u6837\u4F8B\u8868\u5355\u6570\u636E\u6D4B\u8BD5\u56FE\u5F62\u6761\u4EF6\u8DEF\u7EBF\u3002\n- \u8C03\u7528 `microi_plan_system` \u505A\u672C\u5730\u7ED3\u6784\u68C0\u67E5\uFF0C\u518D\u8C03\u7528 `microi_generate_system` \u4E14\u4FDD\u6301 `dryRun:true`\u3002\n- \u53EA\u6709\u7528\u6237\u660E\u786E\u540C\u610F\u5199\u5165\u65F6\uFF0C\u624D\u7528 `dryRun:false` \u5E76\u4F20 `confirmExecution`\uFF0C\u968F\u540E\u8C03\u7528 `microi_validate_system` \u9A8C\u6536\u3002\n",ei='\n\n## JoinForm \u4E0E TableChild \u5173\u7CFB\u95E8\u7981\uFF08\u5F3A\u5236\uFF09\n\n- \u5148\u786E\u5B9A\u5173\u7CFB\u57FA\u6570\uFF1A`JoinForm` \u53EA\u5141\u8BB8 1:1/N:1\uFF0C\u76EE\u6807\u8868\u5FC5\u987B\u4E0E\u5F53\u524D\u8868\u4E0D\u540C\uFF0C`joinFieldName` \u5FC5\u987B\u662F\u5F53\u524D\u4E3B\u8868\u4E2D\u5DF2\u5B58\u5728\u4E14\u771F\u5B9E\u4FDD\u5B58\u76EE\u6807\u8BB0\u5F55 Id \u7684\u5B57\u6BB5\uFF1B\u7981\u6B62\u9ED8\u8BA4\u5199\u6210 `Name`\u3002\n- \u201C\u5B50\u8868\u3001\u660E\u7EC6\u3001\u6E05\u5355\u3001\u6761\u76EE\u3001\u884C\u9879\u76EE\u3001\u591A\u4E2A\u8BB0\u5F55\u201D\u9ED8\u8BA4\u662F 1:N\uFF0C\u5FC5\u987B\u4F7F\u7528 `TableChild`\u3002\u5728\u72EC\u7ACB\u5B50\u8868\u521B\u5EFA\u771F\u5B9E\u7236\u7EA7\u5916\u952E\u548C\u4EE5 `(OsClient, FK)` \u5F00\u5934\u7684\u7EC4\u5408\u7D22\u5F15\uFF0C\u5E76\u521B\u5EFA\u7ED1\u5B9A\u5B50\u8868\u4E14 `display=0\u3001appDisplay=0\u3001hasChild=0` \u7684\u9690\u85CF\u6A21\u5757\u3002\n- \u5B8C\u6574\u7CFB\u7EDF Manifest \u7684\u5173\u7CFB\u5B57\u6BB5\u5FC5\u987B\u5199\u53EF\u79FB\u690D `relation`\uFF1AJoinForm \u4F7F\u7528 `{cardinality:"N:1",targetTable,joinFieldName}`\uFF1BTableChild \u4F7F\u7528 `{cardinality:"1:N",targetTable,childForeignKey,childModule,primaryTableFieldName:"Id"}`\u3002\u7981\u6B62\u5728 Manifest \u4E2D\u7F16\u9020 `diy_table.Id` \u6216 `sys_menu.Id`\u3002\n- `microi_plan_system` / `microi_generate_system` \u4F1A\u5728\u4EFB\u4F55\u5199\u5165\u524D\u62D2\u7EDD\u81EA\u5173\u8054\u3001\u57FA\u6570/\u7EC4\u4EF6\u4E0D\u7B26\u3001\u7F3A\u5916\u952E\u3001\u7F3A\u9690\u85CF\u5B50\u83DC\u5355\u6216\u7F3A\u56DE\u67E5\u7D22\u5F15\uFF1B\u751F\u6210\u5668\u4F1A\u5728\u8868\u3001\u666E\u901A\u5B57\u6BB5\u548C\u83DC\u5355\u5C31\u7EEA\u540E\u624D\u89E3\u6790\u5F53\u524D\u79DF\u6237\u771F\u5B9E Id \u5E76\u5199\u5173\u7CFB\u5B57\u6BB5\u3002\u4E0D\u5F97\u6539\u7528\u5355\u5B57\u6BB5\u5DE5\u5177\u7ED5\u8FC7\uFF1B\u540E\u7AEF MCP \u8FB9\u754C\u4F1A\u518D\u6B21\u6821\u9A8C\u3002\n',ti="\n\n## \u6570\u636E\u5E93\u7D22\u5F15 MCP \u89C4\u8303\uFF08\u5F3A\u5236\uFF09\n\n- \u9700\u6C42\u3001\u84DD\u56FE\u3001\u63A5\u53E3\u3001Job \u6216\u8BC4\u5BA1\u4E00\u65E6\u660E\u786E\u67D0\u8868\u5B57\u6BB5\u9700\u8981\u7D22\u5F15\uFF0C\u5FC5\u987B\u5199\u5165 Manifest `tables[].indexes`\uFF0C\u5E76\u8C03\u7528 `microi_create_table_index`\uFF1B\u7981\u6B62\u5728 V8\u3001\u63A5\u53E3\u5F15\u64CE\u3001FormEngine \u6216\u4E00\u6B21\u6027 SQL \u4E2D\u624B\u5199 CREATE/DROP INDEX\u3002\n- \u521B\u5EFA\u524D\u540E\u8C03\u7528 `microi_get_table_indexes` \u56DE\u8BFB\u771F\u5B9E\u7269\u7406\u7D22\u5F15\u3002\u5220\u9664\u53EA\u80FD\u7528 `microi_drop_table_index`\uFF0C\u4E3B\u952E\u7D22\u5F15\u7981\u6B62\u5220\u9664\u3002\n- \u79DF\u6237\u4E1A\u52A1\u7EC4\u5408\u7D22\u5F15\u901A\u5E38\u4EE5 `OsClient` \u5F00\u5934\uFF1B\u4E1A\u52A1\u552F\u4E00\u952E\u3001\u5E42\u7B49\u952E\u7528\u79DF\u6237\u8303\u56F4\u552F\u4E00\u7D22\u5F15\uFF1B\u5916\u952E\u3001\u5B50\u8868\u3001Job/outbox/\u5F85\u529E\u626B\u63CF\u6309\u771F\u5B9E WHERE/JOIN/ORDER BY \u8BBE\u8BA1\u3002\n- \u4E0D\u5F97\u628A SearchFieldIds\u3001SortFieldIds\u3001StatisticsFields \u673A\u68B0\u8F6C\u6362\u6210\u4E00\u6279\u5355\u5217\u7D22\u5F15\uFF1B\u4F4E\u57FA\u6570\u5B57\u6BB5\u3001LIKE '%keyword%' \u548C\u957F\u6587\u672C\u4E0D\u80FD\u6EE5\u7528\u666E\u901A B-tree \u7D22\u5F15\u3002\n- DIY \u8868\u7D22\u5F15\u56DE\u8BFB\u540E\u8FD8\u5FC5\u987B\u80FD\u5728 Microi.Client \u201C\u5F00\u53D1\u8BBE\u8BA1 \u2192 \u7D22\u5F15\u7BA1\u7406\u201D\u770B\u5230\u76F8\u540C\u540D\u79F0\u3001\u6709\u5E8F\u5B57\u6BB5\u4E0E\u552F\u4E00\u6027\u3002\n",ni="\n\n## MCP \u9ED8\u8BA4\u663E\u9690\u89C4\u5219\n\n- \u521B\u5EFA `sys_menu` \u83DC\u5355\u6A21\u5757\u65F6\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u9690\u85CF\uFF0C\u5426\u5219 `Display` \u548C `AppDisplay` \u9ED8\u8BA4\u8BBE\u4E3A `1`\u3002\n- \u7ED1\u5B9A `diyTableId` \u7684\u83DC\u5355\u9ED8\u8BA4\u8865\u9F50\u5217\u8868\u5217\u3001\u641C\u7D22\u5217\u3001\u9690\u85CF\u5217\u3001\u6392\u5E8F\u5217\u3001\u7EDF\u8BA1\u5217\u3001\u79FB\u52A8\u7AEF/\u5361\u7247\u5217\u548C\u9ED8\u8BA4\u6392\u5E8F\uFF1B\u7528\u6237\u663E\u5F0F\u4F20\u5165\u7684 `sys_menu` JSON \u4F18\u5148\u3002\n- \u521B\u5EFA `diy_field` \u5B57\u6BB5\u65F6\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u9690\u85CF\uFF0C\u5426\u5219 `Visible` \u548C `AppVisible` \u9ED8\u8BA4\u8BBE\u4E3A `1`\u3002\n- \u5B57\u6BB5\u8F83\u591A\u7684\u8868\u5355\u9ED8\u8BA4\u4F18\u5148\u751F\u6210 `diy_table.Tabs`\uFF0C\u5E76\u7ED9\u5B57\u6BB5\u5199\u5165 `Tab`\uFF1B\u6574\u884C\u63A7\u4EF6\u624D\u4F7F\u7528 `FormWidth=24`\u3002\n",ri="\n\n## MCP \u5199\u5165\u8D85\u65F6\u3001\u6E90\u7801\u5B8C\u6574\u6027\u4E0E\u56DE\u8BFB\u89C4\u5219\n\n- \u4F18\u5148\u4F7F\u7528\u8BED\u4E49\u660E\u786E\u7684\u6807\u51C6 MCP \u5DE5\u5177\uFF1A\u63A5\u53E3\u5F15\u64CE\u4EE3\u7801\u7528 `microi_save_engine_code`\uFF0C\u8868\u5355\u4E8B\u4EF6\u7528 `microi_save_event_code`\uFF0C\u83DC\u5355\u6309\u94AE\u3001Tab\u3001SqlJoin\u3001SqlWhere \u7528 `microi_update_module`\u3002\u4E0D\u8981\u5148\u7ED5\u5230\u539F\u751F HTTP\u3001FormEngine \u6216 SQL\u3002\n- MCP \u5199\u8BF7\u6C42\u8D85\u65F6\u53EA\u8868\u793A\u5BA2\u6237\u7AEF\u672A\u53CA\u65F6\u6536\u5230\u54CD\u5E94\uFF0C\u4E0D\u8868\u793A\u670D\u52A1\u5668\u4E00\u5B9A\u6CA1\u6709\u5199\u5165\u3002\u4E0A\u8FF0\u6807\u51C6\u5199\u5DE5\u5177\u4EE5\u53CA `microi_create_engine` \u4F1A\u81EA\u52A8\u77ED\u8D85\u65F6\u56DE\u8BFB\uFF1B\u8FD4\u56DE `RecoveredAfterTransportError:true` \u65F6\u5E94\u89C6\u4E3A\u5DF2\u786E\u8BA4\u6210\u529F\u3002\n- \u6062\u590D\u6027\u56DE\u8BFB\u5FC5\u987B\u4F7F\u7528\u72EC\u7ACB\u77ED\u8D85\u65F6\uFF0C\u4E0D\u80FD\u6CBF\u7528\u666E\u901A\u67E5\u8BE2\u957F\u8D85\u65F6\u5E76\u957F\u671F\u505C\u7559\u5728\u201C\u7B49\u5F85\u8FDC\u7AEF\u56DE\u8BFB\u201D\u3002\u5982\u679C\u6807\u51C6\u5DE5\u5177\u8FD4\u56DE\u201C\u5199\u5165\u7ED3\u679C\u4E0D\u786E\u5B9A\u201D\uFF0C\u53EA\u7528\u5BF9\u5E94 get \u5DE5\u5177\u7EE7\u7EED\u56DE\u8BFB\u4E00\u6B21\u5E76\u62A5\u544A\u771F\u5B9E\u5DEE\u5F02\u3002\n- `\u2026N tokens truncated\u2026`\u3001`Exit code:`\u3001`Chunk ID:`\u3001`Wall time:` \u662F AI/\u7EC8\u7AEF\u5DE5\u5177\u5305\u88C5\u6587\u672C\uFF0C\u4E0D\u662F V8 \u6E90\u7801\u3002\u8BFB\u53D6\u957F\u6E90\u7801\u5FC5\u987B\u6309 MCP \u8FD4\u56DE\u7684\u5B57\u7B26\u533A\u95F4\u53D6\u5B8C\u5E76\u6838\u5BF9 SHA-256\uFF1B\u63D2\u4EF6\u63A8\u9001\u548C MCP \u5199\u5DE5\u5177\u68C0\u6D4B\u5230\u8FD9\u4E9B\u6807\u8BB0\u65F6\u5FC5\u987B\u62D2\u7EDD\u5199\u5165\u3002\u8FDC\u7AEF\u6E90\u7801\u4E0D\u5C11\u4E8E 8000 \u5B57\u7B26\u4E14\u65B0\u6E90\u7801\u7A81\u7136\u51CF\u5C11\u8D85\u8FC7 15% \u65F6\uFF0C\u672A\u6838\u5BF9\u5B8C\u6574\u6E90\u7801\u524D\u4E0D\u5F97\u786E\u8BA4\u5927\u5E45\u5220\u51CF\u3002\n- \u7981\u6B62\u56E0\u4E3A\u8D85\u65F6\u91CD\u590D\u5EFA\u8868\u3001\u91CD\u590D\u52A0\u5B57\u6BB5\u3001\u91CD\u590D\u521B\u5EFA\u63A5\u53E3\u5F15\u64CE\uFF0C\u6216\u65B0\u5EFA\u4E00\u6B21\u6027\u7EF4\u62A4\u5F15\u64CE\u7ED5\u8FC7\u539F\u64CD\u4F5C\u3002\u521B\u5EFA\u63A5\u53E3\u5F15\u64CE\u6570\u636E\u5E93\u5165\u5E93\u6210\u529F\u4F46\u8DEF\u7531\u7F13\u5B58\u5237\u65B0\u8D85\u65F6\u65F6\uFF0C\u5E94\u4FDD\u7559\u6210\u529F\u7ED3\u679C\u5E76\u68C0\u67E5 `CacheRefresh`\uFF0C\u4E0D\u80FD\u5F53\u4F5C\u521B\u5EFA\u5931\u8D25\u91CD\u590D\u63D0\u4EA4\u3002\n- `MoreBtns`\u3001`FormBtns`\u3001`PageTabs`\u3001`BatchSelectMoreBtns` \u7B49\u83DC\u5355\u5B57\u6BB5\u59CB\u7EC8\u5411 MCP \u4F20\u660E\u6587 JSON \u6570\u7EC4\u3002\u79DF\u6237\u8868\u5355\u4E8B\u4EF6\u4E2D\u7684 Base64 \u517C\u5BB9\u903B\u8F91\u5C5E\u4E8E\u5E73\u53F0\u5185\u90E8\u7EC6\u8282\uFF0CAI \u4E0D\u5F97\u81EA\u884C\u7F16\u7801\u3002\n- VS Code \u8BBE\u7F6E\u91CC\u663E\u793A MCP \u5DF2\u542F\u7528\u53EA\u4EE3\u8868\u914D\u7F6E\u5B58\u5728\u3002\u63D2\u4EF6\u201C\u8BCA\u65AD MCP \u53EF\u8C03\u7528\u6027\u201D\u5FC5\u987B\u5B8C\u6210 `initialize`\u3001`tools/list` \u548C\u771F\u5B9E `microi_get_status`\u3002\n- \u9047\u5230 `ByteString` \u6216 `greater than 255` \u65F6\uFF0C\u5148\u6309\u5F02\u5E38\u5B57\u7B26\u7D22\u5F15\u68C0\u67E5 HTTP Header\u3002Microi MCP \u7684\u8BBE\u5907\u6807\u8BC6\u6765\u81EA `did` / `MICROI_MCP_DID`\uFF1B\u4E2D\u6587 Windows \u4E3B\u673A\u540D\u4F1A\u4ECE `MCP:` \u540E\u7B2C 4 \u4E2A\u5B57\u7B26\u89E6\u53D1\u9519\u8BEF\u3002`MICROI_LABEL_BASE64` \u53EA\u7528\u4E8E\u663E\u793A\uFF0C\u4E0D\u662F\u8BF7\u6C42 Header\uFF0C\u4E0D\u5F97\u5148\u731C\u6D4B\u6216\u6539\u5199\u4E2D\u6587 Label\u3002\u8FDE\u63A5\u6062\u590D\u524D\u7981\u6B62\u8FDC\u7AEF\u5199\u5165\uFF0C\u6062\u590D\u540E\u5148\u505A\u53EA\u8BFB\u57FA\u7EBF\u76D8\u70B9\u3002\n- Codex \u672A\u6CE8\u5165\u666E\u901A MCP \u5DE5\u5177\u65F6\uFF0C\u5148\u8C03\u7528 `list_mcp_resources` \u5E76\u8BFB\u53D6 `microi://codex/status`\uFF1B\u901A\u7528\u8C03\u7528\u4F7F\u7528 `list_mcp_resource_templates` \u53D1\u73B0 `microi://codex/action/{action}/{params}`\uFF0C\u5176\u4E2D params \u662F URI \u7F16\u7801 JSON\u3002\u8BE5\u8D44\u6E90\u6A21\u677F\u4ECD\u590D\u7528\u539F\u5DE5\u5177\u7684 schema\u3001\u786E\u8BA4\u53E3\u4EE4\u3001\u5BA1\u8BA1\u548C\u56DE\u8BFB\u89C4\u5219\uFF0C\u4E0D\u5F97\u6539\u8D70\u539F\u751F HTTP/SQL\u3002\n",ii="\n\n## V8 \u6E90\u7801\u540C\u6B65\u4FDD\u62A4\u89C4\u5219\uFF08\u5F3A\u5236\uFF09\n\n- \u591A\u4EBA\u5F00\u53D1\u65F6\uFF0C\u6BCF\u6B21\u51C6\u5907\u63A8\u9001\u63A5\u53E3\u5F15\u64CE\u3001\u8868\u5355/\u5B57\u6BB5 V8\u3001\u6A21\u5757\u6309\u94AE\u3001\u6A21\u5757 SqlJoin/SqlWhere \u6216\u6D41\u7A0B\u8282\u70B9 V8 \u524D\uFF0C\u5FC5\u987B\u5148\u6309\u5F53\u524D\u670D\u52A1\u5668\u548C\u5F15\u64CE\u5206\u7C7B\u68C0\u67E5\u540C\u6B65\u72B6\u6001\u3002\u4E0D\u5F97\u51ED\u672C\u5730\u6587\u4EF6\u65F6\u95F4\u6216\u4E0A\u6B21\u5BF9\u8BDD\u7ED3\u8BBA\u76F4\u63A5\u8986\u76D6\u8FDC\u7AEF\u3002\n- \u53EA\u6709 `localModified` \u53EF\u4EE5\u63A8\u9001\uFF1B`remoteModified` \u5FC5\u987B\u5148\u62C9\u53D6\uFF1B`remoteDeleted` \u8868\u793A\u670D\u52A1\u5668\u5DF2\u5220\u9664\u4E14\u672C\u5730\u672A\u6539\uFF0C\u62C9\u53D6\u65F6\u5148\u5907\u4EFD\u518D\u6E05\u7406\uFF1B\u670D\u52A1\u5668\u5DF2\u5220\u9664\u4F46\u672C\u5730\u4E5F\u4FEE\u6539\u65F6\u6309 `conflict` \u5904\u7406\uFF1B`conflict` \u5FC5\u987B\u6BD4\u8F83\u540C\u6B65\u57FA\u7EBF\u3001\u672C\u5730\u548C\u8FDC\u7AEF\u540E\u5408\u5E76\u3002\u65E0\u540C\u6B65\u57FA\u7EBF\u6216\u9884\u68C0\u5931\u8D25\u65F6\u505C\u6B62\u63A8\u9001\u3002\n- \u63D2\u4EF6\u201C\u63A8\u9001\u5F53\u524D\u6587\u4EF6\u201D\u5FC5\u987B\u81EA\u52A8\u6267\u884C\u4E0A\u8FF0\u9884\u68C0\uFF1B\u4E00\u952E\u540C\u6B65\u53EF\u4EE5\u590D\u7528\u521A\u5B8C\u6210\u4E14\u65E0\u51B2\u7A81\u7684\u5B8C\u6574\u5FEB\u7167\uFF0C\u5E76\u8986\u76D6\u63A5\u53E3\u5F15\u64CE\u3001\u8868\u5355\u4E8B\u4EF6\u3001\u5B57\u6BB5 V8\u3001\u6A21\u5757\u6309\u94AE\u3001\u6A21\u5757 SqlJoin/SqlWhere \u548C\u6D41\u7A0B\u8282\u70B9\u3002\u6B63\u6587\u4E00\u81F4\u4EC5 meta/mtime \u4E0D\u4E00\u81F4\u65F6\u81EA\u52A8\u6821\u51C6\u3002\n- AI \u901A\u8FC7 MCP \u76F4\u63A5\u5199\u8FDC\u7AEF\u540E\uFF0C\u8981\u56DE\u8BFB\u751F\u6548\u4EE3\u7801\u5E76\u540C\u6B65\u672C\u5730\u6587\u4EF6\u3001`.microi-meta.json` \u548C mtime\u3002\u5DE5\u4F5C\u7ED3\u675F\u524D\u518D\u6B21\u68C0\u67E5\uFF0C\u5E76\u62A5\u544A\u672C\u5730\u672A\u63A8\u9001\u3001\u8FDC\u7AEF\u8F83\u65B0\u3001\u670D\u52A1\u5668\u5DF2\u5220\u9664\u3001\u51B2\u7A81\u662F\u5426\u4E3A 0\u3002\n",si="\n\n## MCP \u5728\u7EBF\u5E94\u7528\u9ED8\u8BA4\u53D1\u73B0\u4E0E\u590D\u6742\u9875\u9762\u89C4\u5219\n\n- \u5904\u7406 Web\u3001UniApp\u3001MicroService\u3001\u5B9A\u5236\u5F39\u7A97\u6216\u590D\u6742\u9875\u9762\u524D\uFF0C\u5148\u8C03\u7528 `microi_list_applications` \u83B7\u53D6\u5F53\u524D\u79DF\u6237\u6240\u6709\u5728\u7EBF\u5E94\u7528\u53CA\u5B8C\u6574\u6587\u4EF6\u6E05\u5355\uFF0C\u518D\u5BF9\u76EE\u6807\u5E94\u7528\u8C03\u7528 `microi_get_application_context`\uFF08\u9ED8\u8BA4\u8BFB\u53D6\u5168\u90E8\u6E90\u7801\u5185\u5BB9\uFF09\uFF1B\u5355\u6587\u4EF6\u6309\u9700\u4F7F\u7528 `microi_get_application_file`\u3002\u8FD4\u56DE\u6E05\u5355\u540E\u8FD8\u5FC5\u987B\u68C0\u67E5 `ContentsComplete/ContentErrorCount` \u548C\u9010\u6587\u4EF6 `ContentReadError`\uFF0C\u4E0D\u80FD\u628A\u201C\u6709\u6E05\u5355\u201D\u8BEF\u62A5\u6210\u201C\u6E90\u7801\u5B8C\u6574\u53EF\u8BFB\u201D\u3002\n- \u5DF2\u6709\u5408\u9002 MicroService \u65F6\u4F18\u5148\u65B0\u589E\u9875\u9762/\u8DEF\u7531\uFF1B\u6CA1\u6709\u65F6\u5148\u7528 `microi_scaffold_vue_microservice` \u5728\u5F53\u524D\u79DF\u6237 `AI\u5E94\u7528/{appKey}` \u76EE\u5F55\u9884\u6F14\u5E76\u786E\u8BA4\u751F\u6210 Vue \u811A\u624B\u67B6\uFF0C\u518D\u4F9D\u6B21\u8C03\u7528 `microi_create_microservice`\u3001`microi_sync_microservice_source`\u3001`microi_publish_application_directory_stream`\u3002\n- \u6D41\u5F0F\u53D1\u5E03\u5931\u8D25\u65F6\u5FC5\u987B\u8BFB\u53D6 `uploadedCount/retrySafe`\uFF1B\u53EA\u6709\u5C1A\u672A\u4E0A\u4F20\u4EFB\u4F55\u6587\u4EF6\u3001\u660E\u786E\u53EF\u5B89\u5168\u91CD\u8BD5\u4E14\u7F16\u8BD1\u4EA7\u7269\u8F83\u5C0F\u65F6\uFF0C\u624D\u53EF\u4E34\u65F6\u56DE\u9000 `microi_publish_microservice`\uFF0C\u5E76\u5728\u7ED3\u8BBA\u4E2D\u8BB0\u5F55\u8FDC\u7AEF\u7248\u672C\u7F3A\u53E3\u3002\n- \u6BCF\u4E2A\u5FAE\u670D\u52A1\u9875\u9762\u83DC\u5355\u5FC5\u987B\u901A\u8FC7 `microi_create_module` \u7ED1\u5B9A `MicroServiceId/MicroServicePageId/MicroServiceRoutePath/MicroServiceKey`\uFF0C\u968F\u540E\u7528 `microi_get_module` \u56DE\u8BFB\uFF1B\u666E\u901A URL \u83DC\u5355\u6210\u529F\u4E0D\u7B49\u4E8E\u5FAE\u670D\u52A1\u83DC\u5355\u5DF2\u4EA4\u4ED8\u3002\n- \u62C9\u53D6\u5DF2\u6709 MicroService \u6E90\u7801\u524D\u5FC5\u987B\u6BD4\u8F83\u4E0A\u6B21\u540C\u6B65\u57FA\u7EBF\u3001\u672C\u5730\u6587\u4EF6\u548C\u79C1\u6709 HDFS \u6E90\u7801\uFF0C\u5148\u5C55\u793A\u4EC5\u672C\u5730\u3001\u4EC5\u8FDC\u7AEF\u548C\u51B2\u7A81\u6587\u4EF6\uFF1B\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u624D\u80FD\u5F3A\u5236\u8986\u76D6\u3002\n- \u6784\u5EFA\u5E76\u63A8\u9001 MicroService \u65F6\u5FC5\u987B\u5148\u6210\u529F\u540C\u6B65\u5B8C\u6574\u6E90\u7801\u5230\u5F53\u524D\u79DF\u6237\u79C1\u6709 HDFS\uFF0C\u518D\u53D1\u5E03\u516C\u6709\u7F16\u8BD1\u4EA7\u7269\uFF1B\u6E90\u7801\u5931\u8D25\u65F6\u7981\u6B62\u7EE7\u7EED\u53D1\u5E03\u3002\n- `V8.ConfirmTips` \u53EA\u7528\u4E8E\u7EAF\u6587\u672C\u786E\u8BA4\u6216\u6781\u5C11\u91CF\u4E00\u6B21\u6027\u8F93\u5165\u3002\u4E09\u4E2A\u4EE5\u4E0A\u5B57\u6BB5\u3001\u8054\u52A8\u6821\u9A8C\u3001\u4E0A\u4F20\u3001\u8868\u683C\u3001Tab\u3001\u6B65\u9AA4\u6761\u3001\u4EE3\u7801\u7F16\u8F91\u5668\u6216\u9700\u957F\u671F\u7EF4\u62A4\u7684\u5F39\u7A97\uFF0C\u5FC5\u987B\u4F7F\u7528\u5FAE\u670D\u52A1\u9875\u9762\u5E76\u901A\u8FC7 `V8.OpenAppDialog` \u6253\u5F00\uFF0C\u7981\u6B62\u5728 V8 \u4EE3\u7801\u91CC\u62FC\u63A5\u5927\u6BB5 HTML\u3002\n- \u5E94\u7528\u5546\u57CE\u5386\u53F2\u5B57\u6BB5 `AppType` \u8868\u793A\u5B98\u65B9/\u793E\u533A\u5206\u7C7B\uFF1B\u8FD0\u884C\u5E94\u7528\u7C7B\u578B\u4F7F\u7528 `ApplicationType`\uFF0C\u503C\u4E3A `Regular / MicroService / UniApp / Web`\u3002\n",oi="\n\n## \u5B98\u65B9\u6587\u6863\u539F\u4F4D\u589E\u8865\u4E0E\u4E2D\u6587\u5355\u6E90\u89C4\u5219\n\n- \u4FEE\u6539\u5B98\u65B9\u6587\u6863\u524D\u5148\u641C\u7D22\u5DF2\u6709\u9875\u9762\u5E76\u539F\u4F4D\u8865\u5145\uFF1B\u9664\u975E\u786E\u6709\u957F\u671F\u72EC\u7ACB\u4E3B\u9898\uFF0C\u4E0D\u5F97\u65B0\u5EFA\u76F8\u8FD1 Markdown \u9875\u9762\u3001\u5BFC\u822A\u9879\u6216\u9875\u9762\u8DEF\u7531\u3002\n- \u524D\u7AEF V8 API \u56FA\u5B9A\u7EF4\u62A4 `microi.doc/docs/doc/v8-engine/v8-client.md`\uFF0C\u540E\u7AEF V8 / \u63A5\u53E3\u5F15\u64CE API \u56FA\u5B9A\u7EF4\u62A4 `microi.doc/docs/doc/v8-engine/v8-server.md`\u3002\n- \u65E5\u5E38\u529F\u80FD\u5F00\u53D1\u53EA\u7EF4\u62A4 `microi.doc/docs/doc/` \u4E2D\u6587\u6587\u6863\uFF1B`microi.doc/docs/en/` \u7531\u5B98\u7F51\u7EDF\u4E00\u7FFB\u8BD1\u751F\u6210\uFF0C\u4E0D\u624B\u5DE5\u91CD\u590D\u7F16\u5199\u82F1\u6587\u7248\u3002\n- \u524D\u7AEF\u65B0 HTTP \u4EE3\u7801\u4F18\u5148\u4F7F\u7528\u4E0E\u540E\u7AEF\u53C2\u6570\u57FA\u672C\u4E00\u81F4\u7684 `V8.Http`\uFF1B\u65E7 `V8.Post/Get` \u53EA\u4F5C\u517C\u5BB9\u4FDD\u7559\u3002\n",ai=`
|
|
1187
|
+
`,Zr="\n\n---\n\n## \u6570\u636E\u5E93\u7ED3\u6784\n\n\u6570\u636E\u5E93\u7ED3\u6784\u4E0D\u4F1A\u5199\u5165\u672C\u57FA\u7840\u77E5\u8BC6\u5E93\u6587\u4EF6\uFF0C\u907F\u514D\u4E0D\u540C\u5F00\u53D1\u8005\u8FDE\u63A5\u4E0D\u540C\u670D\u52A1\u5668\u540E\u4EA7\u751F\u63D0\u4EA4\u51B2\u7A81\u3002\n\n\u7F16\u5199 `V8.FormEngine` \u6216 `V8.Db` \u4EE3\u7801\u65F6\uFF1A\n- \u4F18\u5148\u901A\u8FC7 MCP \u5DE5\u5177 `microi_get_db_schema` \u83B7\u53D6\u5F53\u524D\u670D\u52A1\u5668\u7684\u5B9E\u65F6\u8868\u7ED3\u6784\u3002\n- \u5982\u9700\u8BFB\u53D6\u672C\u5730\u5FEB\u7167\uFF0C\u8BF7\u67E5\u770B\u5F53\u524D\u5F15\u64CE\u6587\u4EF6\u6240\u5C5E OsClient \u76EE\u5F55\u4E0B\u7684 `.microi-db-schema.md`\u3002\n\n\u4ECE\u81EA\u7136\u8BED\u8A00\u9700\u6C42\u521B\u5EFA\u5B8C\u6574 Microi \u4F4E\u4EE3\u7801\u7CFB\u7EDF\u65F6\uFF1A\n- \u5148\u8C03\u7528 `microi_get_db_schema` \u4E86\u89E3\u5DF2\u6709\u8868\u3001\u83DC\u5355\u3001\u5B57\u6BB5\uFF0C\u907F\u514D\u91CD\u590D\u5EFA\u6A21\u3002\n- \u518D\u8C03\u7528 `microi_get_manifest_schema` \u83B7\u53D6\u5B8C\u6574 Manifest \u534F\u8BAE\u548C\u793A\u4F8B\u3002\n- \u5C06\u9700\u6C42\u6574\u7406\u4E3A Manifest\uFF0C\u6A21\u5757\u914D\u7F6E\u4F18\u5148\u5199\u5B57\u6BB5\u540D\uFF1A`listFields`\u3001`searchFields`\u3001`sortFields`\u3001`hiddenFields`\u3001`mobileFields`\u3001`cardTitleFields`\u3001`cardBottomFields`\u3002MCP \u4F1A\u81EA\u52A8\u89E3\u6790\u4E3A `diy_field.Id`\u3001`SelectFields`\u3001`SearchFieldIds` \u7B49 `sys_menu` \u6240\u9700\u683C\u5F0F\u3002\n- \u521B\u5EFA\u7ED1\u5B9A `diyTableId` \u7684\u540E\u53F0\u83DC\u5355\u65F6\uFF0C\u5FC5\u987B\u914D\u7F6E\u6216\u5141\u8BB8 MCP/\u540E\u7AEF\u81EA\u52A8\u63A8\u65AD `TableDiyFieldIds`\u3001`SelectFields`\u3001`SearchFieldIds`\u3001`SortFieldIds`\u3001`NotShowFields`\u3001`StatisticsFields`\u3001`MobileListFields`\u3001`CardTitleTagFields`\u3001`CardBottomTagFields`\u3001`DefaultOrderBy`\u3002\n- `NotShowFields` \u9ED8\u8BA4\u9690\u85CF Id/\u5916\u952E/\u7CFB\u7EDF\u5B57\u6BB5/\u5E03\u5C40\u63A7\u4EF6/\u4E0A\u4F20\u5BCC\u6587\u672C\u5730\u56FE\u5B50\u8868\u7B49\u91CD\u5B57\u6BB5\uFF1B`SearchFieldIds` \u9ED8\u8BA4\u9009\u62E9\u540D\u79F0\u3001\u6807\u9898\u3001\u7F16\u53F7\u3001\u72B6\u6001\u3001\u5206\u7C7B\u3001\u8D1F\u8D23\u4EBA\u3001\u65F6\u95F4\u7B49\u5E38\u7528\u7B5B\u9009\uFF1B`StatisticsFields` \u9ED8\u8BA4\u9009\u62E9\u91D1\u989D\u3001\u4EF7\u683C\u3001\u6570\u91CF\u3001\u79EF\u5206\u3001\u4F59\u989D\u7B49\u6570\u503C\u5B57\u6BB5\uFF1B\u79FB\u52A8\u7AEF/\u5361\u7247\u5217\u9ED8\u8BA4\u4FDD\u7559 3-4 \u4E2A\u6838\u5FC3\u53EF\u8BFB\u5B57\u6BB5\u3002\n- \u8868\u5355\u63A7\u4EF6\u4EE5 `Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json` \u4E3A\u4E8B\u5B9E\u6E90\u3002\u5B57\u6BB5\u8F83\u591A\u65F6\u4F18\u5148\u4F7F\u7528 `diy_table.Tabs` \u548C\u5B57\u6BB5 `Tab` \u5206\u7EC4\uFF0C\u5C40\u90E8\u590D\u6742\u533A\u57DF\u518D\u7528 `CollapseGroup` \u6216\u5B57\u6BB5\u7EA7 `Tabs` \u63A7\u4EF6\u6298\u53E0/\u5206\u6BB5\u3002\n- \u751F\u6210\u6216\u65B0\u589E\u5B57\u6BB5\u65F6\uFF0C\u666E\u901A\u5B57\u6BB5\u9ED8\u8BA4\u4E0D\u8981\u8BBE\u7F6E `diy_field.FormWidth`\uFF08\u4FDD\u6301 null/\u7701\u7565\uFF09\uFF1B\u53EA\u6709 `CodeEditor`\u3001`Textarea`\u3001`RichText`\u3001\u4E0A\u4F20\u3001\u5B50\u8868\u3001\u5730\u56FE/\u5E03\u5C40/\u81EA\u5B9A\u4E49\u7B49\u9700\u8981\u72EC\u5360\u6574\u884C\u7684\u63A7\u4EF6\u624D\u8BBE\u7F6E\u4E3A `24`\u3002\n- \u751F\u6210\u5BA1\u6279\u6D41\u65F6\uFF0CManifest \u7684 workflows \u9700\u5305\u542B FlowDesign\u3001Nodes\u3001Lines\uFF1B\u8FDE\u7EBF\u6807\u9898\u9ED8\u8BA4\u4F7F\u7528 `{\u8D77\u70B9\u8282\u70B9} \u5230 {\u7EC8\u70B9\u8282\u70B9}`\uFF0C\u591A\u8DEF\u7EBF\u8282\u70B9\u4F18\u5148\u751F\u6210\u8BBE\u7F6E `V8.NextNodeId` \u7684 `LineValueV8`\u3002\n- \u4FDD\u5B58\u5DE5\u4F5C\u6D41\u524D\u8C03\u7528 `microi_check_workflow_package` \u68C0\u67E5\u62D3\u6251\uFF0C\u5FC5\u8981\u65F6\u7528 `microi_test_workflow_condition` \u5E26\u6837\u4F8B\u8868\u5355\u6570\u636E\u6D4B\u8BD5\u56FE\u5F62\u6761\u4EF6\u8DEF\u7EBF\u3002\n- \u8C03\u7528 `microi_plan_system` \u505A\u672C\u5730\u7ED3\u6784\u68C0\u67E5\uFF0C\u518D\u8C03\u7528 `microi_generate_system` \u4E14\u4FDD\u6301 `dryRun:true`\u3002\n- \u53EA\u6709\u7528\u6237\u660E\u786E\u540C\u610F\u5199\u5165\u65F6\uFF0C\u624D\u7528 `dryRun:false` \u5E76\u4F20 `confirmExecution`\uFF0C\u968F\u540E\u8C03\u7528 `microi_validate_system` \u9A8C\u6536\u3002\n",ei='\n\n## JoinForm \u4E0E TableChild \u5173\u7CFB\u95E8\u7981\uFF08\u5F3A\u5236\uFF09\n\n- \u5148\u786E\u5B9A\u5173\u7CFB\u57FA\u6570\uFF1A`JoinForm` \u53EA\u5141\u8BB8 1:1/N:1\uFF0C\u76EE\u6807\u8868\u5FC5\u987B\u4E0E\u5F53\u524D\u8868\u4E0D\u540C\uFF0C`joinFieldName` \u5FC5\u987B\u662F\u5F53\u524D\u4E3B\u8868\u4E2D\u5DF2\u5B58\u5728\u4E14\u771F\u5B9E\u4FDD\u5B58\u76EE\u6807\u8BB0\u5F55 Id \u7684\u5B57\u6BB5\uFF1B\u7981\u6B62\u9ED8\u8BA4\u5199\u6210 `Name`\u3002\n- \u201C\u5B50\u8868\u3001\u660E\u7EC6\u3001\u6E05\u5355\u3001\u6761\u76EE\u3001\u884C\u9879\u76EE\u3001\u591A\u4E2A\u8BB0\u5F55\u201D\u9ED8\u8BA4\u662F 1:N\uFF0C\u5FC5\u987B\u4F7F\u7528 `TableChild`\u3002\u5728\u72EC\u7ACB\u5B50\u8868\u521B\u5EFA\u771F\u5B9E\u7236\u7EA7\u5916\u952E\u548C\u4EE5 `(OsClient, FK)` \u5F00\u5934\u7684\u7EC4\u5408\u7D22\u5F15\uFF0C\u5E76\u521B\u5EFA\u7ED1\u5B9A\u5B50\u8868\u4E14 `display=0\u3001appDisplay=0\u3001hasChild=0` \u7684\u9690\u85CF\u6A21\u5757\u3002\n- \u5B8C\u6574\u7CFB\u7EDF Manifest \u7684\u5173\u7CFB\u5B57\u6BB5\u5FC5\u987B\u5199\u53EF\u79FB\u690D `relation`\uFF1AJoinForm \u4F7F\u7528 `{cardinality:"N:1",targetTable,joinFieldName}`\uFF1BTableChild \u4F7F\u7528 `{cardinality:"1:N",targetTable,childForeignKey,childModule,primaryTableFieldName:"Id"}`\u3002\u7981\u6B62\u5728 Manifest \u4E2D\u7F16\u9020 `diy_table.Id` \u6216 `sys_menu.Id`\u3002\n- `microi_plan_system` / `microi_generate_system` \u4F1A\u5728\u4EFB\u4F55\u5199\u5165\u524D\u62D2\u7EDD\u81EA\u5173\u8054\u3001\u57FA\u6570/\u7EC4\u4EF6\u4E0D\u7B26\u3001\u7F3A\u5916\u952E\u3001\u7F3A\u9690\u85CF\u5B50\u83DC\u5355\u6216\u7F3A\u56DE\u67E5\u7D22\u5F15\uFF1B\u751F\u6210\u5668\u4F1A\u5728\u8868\u3001\u666E\u901A\u5B57\u6BB5\u548C\u83DC\u5355\u5C31\u7EEA\u540E\u624D\u89E3\u6790\u5F53\u524D\u79DF\u6237\u771F\u5B9E Id \u5E76\u5199\u5173\u7CFB\u5B57\u6BB5\u3002\u4E0D\u5F97\u6539\u7528\u5355\u5B57\u6BB5\u5DE5\u5177\u7ED5\u8FC7\uFF1B\u540E\u7AEF MCP \u8FB9\u754C\u4F1A\u518D\u6B21\u6821\u9A8C\u3002\n',ti="\n\n## \u6570\u636E\u5E93\u7D22\u5F15 MCP \u89C4\u8303\uFF08\u5F3A\u5236\uFF09\n\n- \u9700\u6C42\u3001\u84DD\u56FE\u3001\u63A5\u53E3\u3001Job \u6216\u8BC4\u5BA1\u4E00\u65E6\u660E\u786E\u67D0\u8868\u5B57\u6BB5\u9700\u8981\u7D22\u5F15\uFF0C\u5FC5\u987B\u5199\u5165 Manifest `tables[].indexes`\uFF0C\u5E76\u8C03\u7528 `microi_create_table_index`\uFF1B\u7981\u6B62\u5728 V8\u3001\u63A5\u53E3\u5F15\u64CE\u3001FormEngine \u6216\u4E00\u6B21\u6027 SQL \u4E2D\u624B\u5199 CREATE/DROP INDEX\u3002\n- \u521B\u5EFA\u524D\u540E\u8C03\u7528 `microi_get_table_indexes` \u56DE\u8BFB\u771F\u5B9E\u7269\u7406\u7D22\u5F15\u3002\u5220\u9664\u53EA\u80FD\u7528 `microi_drop_table_index`\uFF0C\u4E3B\u952E\u7D22\u5F15\u7981\u6B62\u5220\u9664\u3002\n- \u79DF\u6237\u4E1A\u52A1\u7EC4\u5408\u7D22\u5F15\u901A\u5E38\u4EE5 `OsClient` \u5F00\u5934\uFF1B\u4E1A\u52A1\u552F\u4E00\u952E\u3001\u5E42\u7B49\u952E\u7528\u79DF\u6237\u8303\u56F4\u552F\u4E00\u7D22\u5F15\uFF1B\u5916\u952E\u3001\u5B50\u8868\u3001Job/outbox/\u5F85\u529E\u626B\u63CF\u6309\u771F\u5B9E WHERE/JOIN/ORDER BY \u8BBE\u8BA1\u3002\n- \u4E0D\u5F97\u628A SearchFieldIds\u3001SortFieldIds\u3001StatisticsFields \u673A\u68B0\u8F6C\u6362\u6210\u4E00\u6279\u5355\u5217\u7D22\u5F15\uFF1B\u4F4E\u57FA\u6570\u5B57\u6BB5\u3001LIKE '%keyword%' \u548C\u957F\u6587\u672C\u4E0D\u80FD\u6EE5\u7528\u666E\u901A B-tree \u7D22\u5F15\u3002\n- DIY \u8868\u7D22\u5F15\u56DE\u8BFB\u540E\u8FD8\u5FC5\u987B\u80FD\u5728 Microi.Client \u201C\u5F00\u53D1\u8BBE\u8BA1 \u2192 \u7D22\u5F15\u7BA1\u7406\u201D\u770B\u5230\u76F8\u540C\u540D\u79F0\u3001\u6709\u5E8F\u5B57\u6BB5\u4E0E\u552F\u4E00\u6027\u3002\n",ni="\n\n## MCP \u9ED8\u8BA4\u663E\u9690\u89C4\u5219\n\n- \u521B\u5EFA `sys_menu` \u83DC\u5355\u6A21\u5757\u65F6\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u9690\u85CF\uFF0C\u5426\u5219 `Display` \u548C `AppDisplay` \u9ED8\u8BA4\u8BBE\u4E3A `1`\u3002\n- \u7ED1\u5B9A `diyTableId` \u7684\u83DC\u5355\u9ED8\u8BA4\u8865\u9F50\u5217\u8868\u5217\u3001\u641C\u7D22\u5217\u3001\u9690\u85CF\u5217\u3001\u6392\u5E8F\u5217\u3001\u7EDF\u8BA1\u5217\u3001\u79FB\u52A8\u7AEF/\u5361\u7247\u5217\u548C\u9ED8\u8BA4\u6392\u5E8F\uFF1B\u7528\u6237\u663E\u5F0F\u4F20\u5165\u7684 `sys_menu` JSON \u4F18\u5148\u3002\n- \u521B\u5EFA `diy_field` \u5B57\u6BB5\u65F6\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u9690\u85CF\uFF0C\u5426\u5219 `Visible` \u548C `AppVisible` \u9ED8\u8BA4\u8BBE\u4E3A `1`\u3002\n- \u5B57\u6BB5\u8F83\u591A\u7684\u8868\u5355\u9ED8\u8BA4\u4F18\u5148\u751F\u6210 `diy_table.Tabs`\uFF0C\u5E76\u7ED9\u5B57\u6BB5\u5199\u5165 `Tab`\uFF1B\u6574\u884C\u63A7\u4EF6\u624D\u4F7F\u7528 `FormWidth=24`\u3002\n",ri="\n\n## MCP \u5199\u5165\u8D85\u65F6\u3001\u6E90\u7801\u5B8C\u6574\u6027\u4E0E\u56DE\u8BFB\u89C4\u5219\n\n- \u4F18\u5148\u4F7F\u7528\u8BED\u4E49\u660E\u786E\u7684\u6807\u51C6 MCP \u5DE5\u5177\uFF1A\u63A5\u53E3\u5F15\u64CE\u4EE3\u7801\u7528 `microi_save_engine_code`\uFF0C\u8868\u5355\u4E8B\u4EF6\u7528 `microi_save_event_code`\uFF0C\u83DC\u5355\u6309\u94AE\u3001Tab\u3001SqlJoin\u3001SqlWhere \u7528 `microi_update_module`\u3002\u4E0D\u8981\u5148\u7ED5\u5230\u539F\u751F HTTP\u3001FormEngine \u6216 SQL\u3002\n- MCP \u5199\u8BF7\u6C42\u8D85\u65F6\u53EA\u8868\u793A\u5BA2\u6237\u7AEF\u672A\u53CA\u65F6\u6536\u5230\u54CD\u5E94\uFF0C\u4E0D\u8868\u793A\u670D\u52A1\u5668\u4E00\u5B9A\u6CA1\u6709\u5199\u5165\u3002\u4E0A\u8FF0\u6807\u51C6\u5199\u5DE5\u5177\u4EE5\u53CA `microi_create_engine` \u4F1A\u81EA\u52A8\u77ED\u8D85\u65F6\u56DE\u8BFB\uFF1B\u8FD4\u56DE `RecoveredAfterTransportError:true` \u65F6\u5E94\u89C6\u4E3A\u5DF2\u786E\u8BA4\u6210\u529F\u3002\n- \u6062\u590D\u6027\u56DE\u8BFB\u5FC5\u987B\u4F7F\u7528\u72EC\u7ACB\u77ED\u8D85\u65F6\uFF0C\u4E0D\u80FD\u6CBF\u7528\u666E\u901A\u67E5\u8BE2\u957F\u8D85\u65F6\u5E76\u957F\u671F\u505C\u7559\u5728\u201C\u7B49\u5F85\u8FDC\u7AEF\u56DE\u8BFB\u201D\u3002\u5982\u679C\u6807\u51C6\u5DE5\u5177\u8FD4\u56DE\u201C\u5199\u5165\u7ED3\u679C\u4E0D\u786E\u5B9A\u201D\uFF0C\u53EA\u7528\u5BF9\u5E94 get \u5DE5\u5177\u7EE7\u7EED\u56DE\u8BFB\u4E00\u6B21\u5E76\u62A5\u544A\u771F\u5B9E\u5DEE\u5F02\u3002\n- `\u2026N tokens truncated\u2026`\u3001`Exit code:`\u3001`Chunk ID:`\u3001`Wall time:` \u662F AI/\u7EC8\u7AEF\u5DE5\u5177\u5305\u88C5\u6587\u672C\uFF0C\u4E0D\u662F V8 \u6E90\u7801\u3002\u8BFB\u53D6\u957F\u6E90\u7801\u5FC5\u987B\u6309 MCP \u8FD4\u56DE\u7684\u5B57\u7B26\u533A\u95F4\u53D6\u5B8C\u5E76\u6838\u5BF9 SHA-256\uFF1B\u63D2\u4EF6\u63A8\u9001\u548C MCP \u5199\u5DE5\u5177\u68C0\u6D4B\u5230\u8FD9\u4E9B\u6807\u8BB0\u65F6\u5FC5\u987B\u62D2\u7EDD\u5199\u5165\u3002\u8FDC\u7AEF\u6E90\u7801\u4E0D\u5C11\u4E8E 8000 \u5B57\u7B26\u4E14\u65B0\u6E90\u7801\u7A81\u7136\u51CF\u5C11\u8D85\u8FC7 15% \u65F6\uFF0C\u672A\u6838\u5BF9\u5B8C\u6574\u6E90\u7801\u524D\u4E0D\u5F97\u786E\u8BA4\u5927\u5E45\u5220\u51CF\u3002\n- \u7981\u6B62\u56E0\u4E3A\u8D85\u65F6\u91CD\u590D\u5EFA\u8868\u3001\u91CD\u590D\u52A0\u5B57\u6BB5\u3001\u91CD\u590D\u521B\u5EFA\u63A5\u53E3\u5F15\u64CE\uFF0C\u6216\u65B0\u5EFA\u4E00\u6B21\u6027\u7EF4\u62A4\u5F15\u64CE\u7ED5\u8FC7\u539F\u64CD\u4F5C\u3002\u521B\u5EFA\u63A5\u53E3\u5F15\u64CE\u6570\u636E\u5E93\u5165\u5E93\u6210\u529F\u4F46\u8DEF\u7531\u7F13\u5B58\u5237\u65B0\u8D85\u65F6\u65F6\uFF0C\u5E94\u4FDD\u7559\u6210\u529F\u7ED3\u679C\u5E76\u68C0\u67E5 `CacheRefresh`\uFF0C\u4E0D\u80FD\u5F53\u4F5C\u521B\u5EFA\u5931\u8D25\u91CD\u590D\u63D0\u4EA4\u3002\n- `MoreBtns`\u3001`FormBtns`\u3001`PageTabs`\u3001`BatchSelectMoreBtns` \u7B49\u83DC\u5355\u5B57\u6BB5\u59CB\u7EC8\u5411 MCP \u4F20\u660E\u6587 JSON \u6570\u7EC4\u3002\u79DF\u6237\u8868\u5355\u4E8B\u4EF6\u4E2D\u7684 Base64 \u517C\u5BB9\u903B\u8F91\u5C5E\u4E8E\u5E73\u53F0\u5185\u90E8\u7EC6\u8282\uFF0CAI \u4E0D\u5F97\u81EA\u884C\u7F16\u7801\u3002\n- VS Code \u8BBE\u7F6E\u91CC\u663E\u793A MCP \u5DF2\u542F\u7528\u53EA\u4EE3\u8868\u914D\u7F6E\u5B58\u5728\u3002\u63D2\u4EF6\u201C\u8BCA\u65AD MCP \u53EF\u8C03\u7528\u6027\u201D\u5FC5\u987B\u5B8C\u6210 `initialize`\u3001`tools/list` \u548C\u771F\u5B9E `microi_get_status`\u3002\n- \u9047\u5230 `ByteString` \u6216 `greater than 255` \u65F6\uFF0C\u5148\u6309\u5F02\u5E38\u5B57\u7B26\u7D22\u5F15\u68C0\u67E5 HTTP Header\u3002Microi MCP \u7684\u8BBE\u5907\u6807\u8BC6\u6765\u81EA `did` / `MICROI_MCP_DID`\uFF1B\u4E2D\u6587 Windows \u4E3B\u673A\u540D\u4F1A\u4ECE `MCP:` \u540E\u7B2C 4 \u4E2A\u5B57\u7B26\u89E6\u53D1\u9519\u8BEF\u3002`MICROI_LABEL_BASE64` \u53EA\u7528\u4E8E\u663E\u793A\uFF0C\u4E0D\u662F\u8BF7\u6C42 Header\uFF0C\u4E0D\u5F97\u5148\u731C\u6D4B\u6216\u6539\u5199\u4E2D\u6587 Label\u3002\u8FDE\u63A5\u6062\u590D\u524D\u7981\u6B62\u8FDC\u7AEF\u5199\u5165\uFF0C\u6062\u590D\u540E\u5148\u505A\u53EA\u8BFB\u57FA\u7EBF\u76D8\u70B9\u3002\n- Codex \u672A\u6CE8\u5165\u666E\u901A MCP \u5DE5\u5177\u65F6\uFF0C\u5148\u8C03\u7528 `list_mcp_resources` \u5E76\u8BFB\u53D6 `microi://codex/status`\uFF1B\u901A\u7528\u8C03\u7528\u4F7F\u7528 `list_mcp_resource_templates` \u53D1\u73B0 `microi://codex/action/{action}/{params}`\uFF0C\u5176\u4E2D params \u662F URI \u7F16\u7801 JSON\u3002\u8BE5\u8D44\u6E90\u6A21\u677F\u4ECD\u590D\u7528\u539F\u5DE5\u5177\u7684 schema\u3001\u786E\u8BA4\u53E3\u4EE4\u3001\u5BA1\u8BA1\u548C\u56DE\u8BFB\u89C4\u5219\uFF0C\u4E0D\u5F97\u6539\u8D70\u539F\u751F HTTP/SQL\u3002\n",ii="\n\n## V8 \u6E90\u7801\u540C\u6B65\u4FDD\u62A4\u89C4\u5219\uFF08\u5F3A\u5236\uFF09\n\n- \u591A\u4EBA\u5F00\u53D1\u65F6\uFF0C\u6BCF\u6B21\u51C6\u5907\u63A8\u9001\u63A5\u53E3\u5F15\u64CE\u3001\u8868\u5355/\u5B57\u6BB5 V8\u3001\u6A21\u5757\u6309\u94AE\u3001\u6A21\u5757 SqlJoin/SqlWhere \u6216\u6D41\u7A0B\u8282\u70B9 V8 \u524D\uFF0C\u5FC5\u987B\u5148\u6309\u5F53\u524D\u670D\u52A1\u5668\u548C\u5F15\u64CE\u5206\u7C7B\u68C0\u67E5\u540C\u6B65\u72B6\u6001\u3002\u4E0D\u5F97\u51ED\u672C\u5730\u6587\u4EF6\u65F6\u95F4\u6216\u4E0A\u6B21\u5BF9\u8BDD\u7ED3\u8BBA\u76F4\u63A5\u8986\u76D6\u8FDC\u7AEF\u3002\n- \u53EA\u6709 `localModified` \u53EF\u4EE5\u63A8\u9001\uFF1B`remoteModified` \u5FC5\u987B\u5148\u62C9\u53D6\uFF1B`remoteDeleted` \u8868\u793A\u670D\u52A1\u5668\u5DF2\u5220\u9664\u4E14\u672C\u5730\u672A\u6539\uFF0C\u62C9\u53D6\u65F6\u5148\u5907\u4EFD\u518D\u6E05\u7406\uFF1B\u670D\u52A1\u5668\u5DF2\u5220\u9664\u4F46\u672C\u5730\u4E5F\u4FEE\u6539\u65F6\u6309 `conflict` \u5904\u7406\uFF1B`conflict` \u5FC5\u987B\u6BD4\u8F83\u540C\u6B65\u57FA\u7EBF\u3001\u672C\u5730\u548C\u8FDC\u7AEF\u540E\u5408\u5E76\u3002\u65E0\u540C\u6B65\u57FA\u7EBF\u6216\u9884\u68C0\u5931\u8D25\u65F6\u505C\u6B62\u63A8\u9001\u3002\n- \u63D2\u4EF6\u201C\u63A8\u9001\u5F53\u524D\u6587\u4EF6\u201D\u5FC5\u987B\u81EA\u52A8\u6267\u884C\u4E0A\u8FF0\u9884\u68C0\uFF1B\u4E00\u952E\u540C\u6B65\u53EF\u4EE5\u590D\u7528\u521A\u5B8C\u6210\u4E14\u65E0\u51B2\u7A81\u7684\u5B8C\u6574\u5FEB\u7167\uFF0C\u5E76\u8986\u76D6\u63A5\u53E3\u5F15\u64CE\u3001\u8868\u5355\u4E8B\u4EF6\u3001\u5B57\u6BB5 V8\u3001\u6A21\u5757\u6309\u94AE\u3001\u6A21\u5757 SqlJoin/SqlWhere \u548C\u6D41\u7A0B\u8282\u70B9\u3002\u6B63\u6587\u4E00\u81F4\u4EC5 meta/mtime \u4E0D\u4E00\u81F4\u65F6\u81EA\u52A8\u6821\u51C6\u3002\n- AI \u901A\u8FC7 MCP \u76F4\u63A5\u5199\u8FDC\u7AEF\u540E\uFF0C\u8981\u56DE\u8BFB\u751F\u6548\u4EE3\u7801\u5E76\u540C\u6B65\u672C\u5730\u6587\u4EF6\u3001`.microi-meta.json` \u548C mtime\u3002\u5DE5\u4F5C\u7ED3\u675F\u524D\u518D\u6B21\u68C0\u67E5\uFF0C\u5E76\u62A5\u544A\u672C\u5730\u672A\u63A8\u9001\u3001\u8FDC\u7AEF\u8F83\u65B0\u3001\u670D\u52A1\u5668\u5DF2\u5220\u9664\u3001\u51B2\u7A81\u662F\u5426\u4E3A 0\u3002\n",si="\n\n## MCP \u5728\u7EBF\u5E94\u7528\u9ED8\u8BA4\u53D1\u73B0\u4E0E\u590D\u6742\u9875\u9762\u89C4\u5219\n\n- \u5904\u7406 Web\u3001UniApp\u3001MicroService\u3001\u5B9A\u5236\u5F39\u7A97\u6216\u590D\u6742\u9875\u9762\u524D\uFF0C\u5148\u8C03\u7528 `microi_list_applications` \u83B7\u53D6\u5F53\u524D\u79DF\u6237\u6240\u6709\u5728\u7EBF\u5E94\u7528\u53CA\u5B8C\u6574\u6587\u4EF6\u6E05\u5355\uFF0C\u518D\u5BF9\u76EE\u6807\u5E94\u7528\u8C03\u7528 `microi_get_application_context` \u8BFB\u53D6\u5143\u6570\u636E\u3001\u54C8\u5E0C\u3001\u8FD0\u884C\u65F6\u548C\u5FC5\u8981\u7684\u5C0F\u6587\u4EF6\uFF1B\u5355\u6587\u4EF6\u6309\u9700\u4F7F\u7528 `microi_get_application_file`\u3002\u8FD4\u56DE\u6E05\u5355\u540E\u8FD8\u5FC5\u987B\u68C0\u67E5 `ContentsComplete/ContentErrorCount` \u548C\u9010\u6587\u4EF6 `ContentReadError`\uFF0C\u4E0D\u80FD\u628A\u201C\u6709\u6E05\u5355\u201D\u8BEF\u62A5\u6210\u201C\u6E90\u7801\u5B8C\u6574\u53EF\u8BFB\u201D\u3002\n- \u5DF2\u6709\u5408\u9002 MicroService \u65F6\u4F18\u5148\u65B0\u589E\u9875\u9762/\u8DEF\u7531\uFF1B\u6CA1\u6709\u65F6\u5148\u7528 `microi_scaffold_vue_microservice` \u5728\u5F53\u524D\u79DF\u6237 `AI\u5E94\u7528/{appKey}` \u76EE\u5F55\u9884\u6F14\u5E76\u786E\u8BA4\u751F\u6210 Vue \u811A\u624B\u67B6\uFF0C\u518D\u4F9D\u6B21\u8C03\u7528 `microi_create_microservice`\u3001`microi_sync_microservice_source`\u3001`microi_publish_application_directory_stream`\u3002\n- \u6D41\u5F0F\u53D1\u5E03\u5931\u8D25\u65F6\u5FC5\u987B\u8BFB\u53D6 `uploadedCount/retrySafe`\uFF1B\u53EA\u6709\u5C1A\u672A\u4E0A\u4F20\u4EFB\u4F55\u6587\u4EF6\u3001\u660E\u786E\u53EF\u5B89\u5168\u91CD\u8BD5\u4E14\u7F16\u8BD1\u4EA7\u7269\u8F83\u5C0F\u65F6\uFF0C\u624D\u53EF\u4E34\u65F6\u56DE\u9000 `microi_publish_microservice`\uFF0C\u5E76\u5728\u7ED3\u8BBA\u4E2D\u8BB0\u5F55\u8FDC\u7AEF\u7248\u672C\u7F3A\u53E3\u3002\n- \u6BCF\u4E2A\u5FAE\u670D\u52A1\u9875\u9762\u83DC\u5355\u5FC5\u987B\u901A\u8FC7 `microi_create_module` \u7ED1\u5B9A `MicroServiceId/MicroServicePageId/MicroServiceRoutePath/MicroServiceKey`\uFF0C\u968F\u540E\u7528 `microi_get_module` \u56DE\u8BFB\uFF1B\u666E\u901A URL \u83DC\u5355\u6210\u529F\u4E0D\u7B49\u4E8E\u5FAE\u670D\u52A1\u83DC\u5355\u5DF2\u4EA4\u4ED8\u3002\n- \u62C9\u53D6\u5DF2\u6709 MicroService \u6E90\u7801\u524D\u5FC5\u987B\u6BD4\u8F83\u4E0A\u6B21\u540C\u6B65\u57FA\u7EBF\u3001\u672C\u5730\u6587\u4EF6\u548C\u79C1\u6709 HDFS \u6E90\u7801\uFF0C\u5148\u5C55\u793A\u4EC5\u672C\u5730\u3001\u4EC5\u8FDC\u7AEF\u548C\u51B2\u7A81\u6587\u4EF6\uFF1B\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u624D\u80FD\u5F3A\u5236\u8986\u76D6\u3002\n- \u6784\u5EFA\u5E76\u63A8\u9001 MicroService \u65F6\u5FC5\u987B\u5148\u6210\u529F\u540C\u6B65\u5B8C\u6574\u6E90\u7801\u5230\u5F53\u524D\u79DF\u6237\u79C1\u6709 HDFS\uFF0C\u518D\u53D1\u5E03\u516C\u6709\u7F16\u8BD1\u4EA7\u7269\uFF1B\u6E90\u7801\u5931\u8D25\u65F6\u7981\u6B62\u7EE7\u7EED\u53D1\u5E03\u3002\n- `V8.ConfirmTips` \u53EA\u7528\u4E8E\u7EAF\u6587\u672C\u786E\u8BA4\u6216\u6781\u5C11\u91CF\u4E00\u6B21\u6027\u8F93\u5165\u3002\u4E09\u4E2A\u4EE5\u4E0A\u5B57\u6BB5\u3001\u8054\u52A8\u6821\u9A8C\u3001\u4E0A\u4F20\u3001\u8868\u683C\u3001Tab\u3001\u6B65\u9AA4\u6761\u3001\u4EE3\u7801\u7F16\u8F91\u5668\u6216\u9700\u957F\u671F\u7EF4\u62A4\u7684\u5F39\u7A97\uFF0C\u5FC5\u987B\u4F7F\u7528\u5FAE\u670D\u52A1\u9875\u9762\u5E76\u901A\u8FC7 `V8.OpenAppDialog` \u6253\u5F00\uFF0C\u7981\u6B62\u5728 V8 \u4EE3\u7801\u91CC\u62FC\u63A5\u5927\u6BB5 HTML\u3002\n- \u5E94\u7528\u5546\u57CE\u5386\u53F2\u5B57\u6BB5 `AppType` \u8868\u793A\u5B98\u65B9/\u793E\u533A\u5206\u7C7B\uFF1B\u8FD0\u884C\u5E94\u7528\u7C7B\u578B\u4F7F\u7528 `ApplicationType`\uFF0C\u503C\u4E3A `Regular / MicroService / UniApp / Web`\u3002\n",oi="\n\n## \u5B98\u65B9\u6587\u6863\u539F\u4F4D\u589E\u8865\u4E0E\u4E2D\u6587\u5355\u6E90\u89C4\u5219\n\n- \u4FEE\u6539\u5B98\u65B9\u6587\u6863\u524D\u5148\u641C\u7D22\u5DF2\u6709\u9875\u9762\u5E76\u539F\u4F4D\u8865\u5145\uFF1B\u9664\u975E\u786E\u6709\u957F\u671F\u72EC\u7ACB\u4E3B\u9898\uFF0C\u4E0D\u5F97\u65B0\u5EFA\u76F8\u8FD1 Markdown \u9875\u9762\u3001\u5BFC\u822A\u9879\u6216\u9875\u9762\u8DEF\u7531\u3002\n- \u524D\u7AEF V8 API \u56FA\u5B9A\u7EF4\u62A4 `microi.doc/docs/doc/v8-engine/v8-client.md`\uFF0C\u540E\u7AEF V8 / \u63A5\u53E3\u5F15\u64CE API \u56FA\u5B9A\u7EF4\u62A4 `microi.doc/docs/doc/v8-engine/v8-server.md`\u3002\n- \u65E5\u5E38\u529F\u80FD\u5F00\u53D1\u53EA\u7EF4\u62A4 `microi.doc/docs/doc/` \u4E2D\u6587\u6587\u6863\uFF1B`microi.doc/docs/en/` \u7531\u5B98\u7F51\u7EDF\u4E00\u7FFB\u8BD1\u751F\u6210\uFF0C\u4E0D\u624B\u5DE5\u91CD\u590D\u7F16\u5199\u82F1\u6587\u7248\u3002\n- \u524D\u7AEF\u65B0 HTTP \u4EE3\u7801\u4F18\u5148\u4F7F\u7528\u4E0E\u540E\u7AEF\u53C2\u6570\u57FA\u672C\u4E00\u81F4\u7684 `V8.Http`\uFF1B\u65E7 `V8.Post/Get` \u53EA\u4F5C\u517C\u5BB9\u4FDD\u7559\u3002\n",ai=`
|
|
1188
1188
|
|
|
1189
1189
|
## MicroService \u53D1\u5E03\u540E\u8FD0\u884C\u63A2\u6D4B\u4E0E 502 \u6062\u590D\u89C4\u5219
|
|
1190
1190
|
|
|
@@ -1738,7 +1738,7 @@ console.log('\u8C03\u8BD5\u4FE1\u606F') // \u63
|
|
|
1738
1738
|
- \u4E8B\u52A1\u7BA1\u7406\uFF1A\u5E73\u53F0\u4E8B\u52A1\u7981\u6B62\u624B\u52A8 Commit/Rollback\uFF1B\u5E26Code\u5BF9\u8C61\u4EC5Code=1\u63D0\u4EA4\u3001\u65E0Code\u5BF9\u8C61\u56DE\u6EDA\uFF0C\u539F\u59CB\u503C\u65E0\u5F02\u5E38\u65F6\u63D0\u4EA4
|
|
1739
1739
|
- \`_InvokeType: 'Client'\`\uFF1AFormEngine\u8C03\u7528\u65F6\u89E6\u53D1\u8868\u5355V8\u4E8B\u4EF6\uFF08\u9ED8\u8BA4Server\u6A21\u5F0F\u4E0D\u89E6\u53D1\uFF09
|
|
1740
1740
|
- \u540E\u7AEF\u53EF\u4FE1V8\u8C03\u7528FormEngine\u4E0D\u8981\u6C42 \`_SysMenuId\`\uFF1B\u6D4F\u89C8\u5668\u4E0D\u80FD\u901A\u8FC7 \`_InvokeType\` \u4F2A\u9020\u4FE1\u4EFB
|
|
1741
|
-
`,li="\n\n## MicroService \u5927\u578B\u4EA7\u7269\u4E0E\u4E0A\u4E0B\u6587\u89C4\u5219\uFF08\u8986\u76D6\u65E7\u517C\u5BB9\u8BF4\u660E\uFF09\n\n- `microi_get_application_context` \u9ED8\u8BA4\u53EA\u8BFB\u5143\u6570\u636E\u3001\u54C8\u5E0C\u3001\u8FD0\u884C\u65F6\u548C\u9875\u9762\uFF1B\u5C11\u91CF\u6B63\u6587\u663E\u5F0F\u5F00\u542F\u5185\u5BB9\u8BFB\u53D6\uFF0C\u5355\u6587\u4EF6\u4F7F\u7528 `microi_get_application_file`\u3002\n- \u771F\u5B9E\u7F16\u8BD1\u76EE\u5F55\u4E00\u5F8B\u9010\u6587\u4EF6\u6D41\u5F0F\u53D1\u5E03\uFF0C\u652F\u6301\u6700\u591A 20,000 \u6587\u4EF6/\u603B\u8BA1 20GB\uFF1B\u51E0\u767E MB\u30011GB \u7EA7\u9879\u76EE\u4E0D\u5F97\u56DE\u9000 Base64\u3002\n- `StorageMode=db` \u7684 256 \u6587\u4EF6/5MB \u4EC5\u7528\u4E8E\u663E\u5F0F\u5C0F\u578B\u5E94\u6025\u6062\u590D\uFF0C\u4E0D\u662F\u6B63\u5E38\u53D1\u5E03\u5BB9\u91CF\u3002\n- \u6D41\u5F0F\u5931\u8D25\u8BFB\u53D6 `uploadedCount/retrySafe` \u5E76\u6309\u540C\u7248\u672C\u5E42\u7B49\u91CD\u8BD5\uFF1B\u7981\u6B62\u56E0\u5927\u6587\u4EF6\u81EA\u52A8\u6539\u8D70 `microi_publish_microservice`\u3002\n- \u5B50\u79DF\u6237\u6240\u6709\u6E90\u7801\u3001\u8D44\u4EA7\u3001\u56DE\u8BFB\u9A8C\u7B7E\u3001\u9875\u9762\u548C\u7F13\u5B58\u5FC5\u987B\u7ED1\u5B9A\u5F53\u524D Token \u7684 OsClient\uFF0C\u4E0D\u5F97\u56DE\u9000\u4E3B\u79DF\u6237\u9ED8\u8BA4\u914D\u7F6E\u3002\n",Nt=class a{static getInstance(){return a._instance||(a._instance=new a),a._instance}inject(){let e=I.getInstance();if(!e.getWorkspaceRoot())return;let n;try{n=e.getSyncRootDir()}catch{return}let r=_.join(n,st);k.existsSync(r)||k.mkdirSync(r,{recursive:!0});let i=_.join(r,Et);k.writeFileSync(i,qr,"utf-8"),this.injectAiDocs(n),this.ensureJsConfig(n,r)}injectAiDocs(e){try{this.generatePerOsClientSchemaDocs(e);let t=I.getInstance().getWorkspaceRoot();if(!t)return;this.ensureLocalRuntimeFilesIgnored(t,e),this.syncBundledSkills(t);let n=this.collectSkillEntries(t),r=this.buildSkillsReference(n),i=ci+Zn+er+Xn+tr+Xr+Zr+ei+ti+ni+ri+ii+si+li+ai+oi+r,s=[{relativePath:`${zt}/${Jt}`,content:Ye+i},{relativePath:qt,content:Ye+i},{relativePath:Qt,content:Ye+i},{relativePath:Yt,content:Ye+i}];if(n.length>0){s.push({relativePath:`${Xt}/${Zt}`,content:this.buildCursorSkillRule(n)});let o=this.buildPortableAiSkill(n);for(let c of Qn)s.push({relativePath:c,content:o});s.push({relativePath:Yn,content:this.buildCodeBuddyRule()})}this.syncGeneratedAiDocs(t,s)}catch{}}ensureLocalRuntimeFilesIgnored(e,t){let n=[".vscode/mcp.json",`.vscode/${Mt}`,".cursor/mcp.json",".trae/mcp.json",".workbuddy/mcp.json",".comate/mcp.json",bn,".claude/settings.local.json"],r=_.relative(e,t);if(r&&!r.startsWith("..")&&!_.isAbsolute(r)){let i=r.replace(/\\/g,"/");n.push(`${i}/**/${We}`,`${i}/**/${Ne}`,`${i}/**/${Ue}`,`${i}/${nt}`,`${i}/**/${nt}`,`${i}/.backups/`,`${i}/**/.backups/`,`${i}/${st}/`)}ze(e),De(e,n)}getBundledSkillsDir(){let e=_.join(__dirname,"microi.skills");if(k.existsSync(e))return e;let t=_.resolve(__dirname,"..","skills");return k.existsSync(t)?t:e}syncBundledSkills(e){let t=this.getBundledSkillsDir();if(!k.existsSync(t))return;let n=_.join(e,qn),r=_.join(n,cn),i=this.readSkillManifest(r),s=this.readBundledSkillsMeta(),o=s.skills?.version,c=this.compareMicroiVersions(o,i.bundleVersion)<0,l={version:1,generatedBy:"Microi\u543E\u7801 VSCode Extension",bundleVersion:c?i.bundleVersion:o||i.bundleVersion,bundleBuiltAt:c?i.bundleBuiltAt:s.builtAt||i.bundleBuiltAt,fileVersions:{...i.fileVersions||{}},files:{...i.files}},u=[];this.walkSkillSource(t,(g,m)=>{let p=_.join(n,m),h=k.readFileSync(g,"utf-8"),f=this.hashText(h),y=i.files[m],S=s.fileVersions?.[m]||o,C=i.fileVersions?.[m]||i.bundleVersion,E=this.compareMicroiVersions(S,C)<0,R=!1;if(!k.existsSync(p))R=!E;else if(y)try{R=this.hashText(k.readFileSync(p,"utf-8"))===y&&!E}catch{R=!1}if(R){let w=_.dirname(p);k.existsSync(w)||k.mkdirSync(w,{recursive:!0}),k.writeFileSync(p,h,"utf-8"),u.push(m)}if(R)l.files[m]=f,S&&(l.fileVersions[m]=S);else try{if(this.hashText(k.readFileSync(p,"utf-8"))===f){l.files[m]=f;let b=this.pickNewerMicroiVersion(S,i.fileVersions?.[m]);b&&(l.fileVersions[m]=b)}else y?(l.files[m]=y,i.fileVersions?.[m]&&(l.fileVersions[m]=i.fileVersions[m])):(delete l.files[m],delete l.fileVersions[m])}catch{y&&(l.files[m]=y,i.fileVersions?.[m]&&(l.fileVersions[m]=i.fileVersions[m]))}});let d=JSON.stringify(l)!==JSON.stringify(i);(u.length>0||d||!k.existsSync(r))&&(k.existsSync(n)||k.mkdirSync(n,{recursive:!0}),k.writeFileSync(r,JSON.stringify(l,null,2)+`
|
|
1741
|
+
`,li="\n\n## MicroService \u5927\u578B\u4EA7\u7269\u4E0E\u4E0A\u4E0B\u6587\u89C4\u5219\uFF08\u8986\u76D6\u65E7\u517C\u5BB9\u8BF4\u660E\uFF09\n\n- `microi_get_application_context` \u9ED8\u8BA4\u53EA\u8BFB\u5143\u6570\u636E\u3001\u54C8\u5E0C\u3001\u8FD0\u884C\u65F6\u548C\u9875\u9762\uFF1B\u5C11\u91CF\u6B63\u6587\u663E\u5F0F\u5F00\u542F\u5185\u5BB9\u8BFB\u53D6\uFF0C\u5355\u6587\u4EF6\u4F7F\u7528 `microi_get_application_file`\u3002\n- \u672C\u5730\u6E90\u7801\u540C\u6B65\u8C03\u7528 `microi_sync_microservice_source` \u65F6\u53EA\u4F20\u9879\u76EE\u7EDD\u5BF9\u8DEF\u5F84 `directory`\uFF0C\u7531 MCP \u8FDB\u7A0B\u626B\u63CF\u3001\u54C8\u5E0C\u548C\u8BFB\u53D6\u6587\u4EF6\uFF1B\u7981\u6B62\u628A\u6E90\u7801\u8BFB\u6210 Base64\u3001\u751F\u6210 `.sync-seg-*` / `sync-source-files.json` \u6216\u628A\u4E00\u4E2A\u6587\u4EF6\u4EBA\u5DE5\u5206\u6BB5\u3002\u6A21\u578B\u4E0A\u4E0B\u6587\u53EA\u63A5\u89E6\u6E05\u5355\u3002\n- \u65B0\u811A\u624B\u67B6\u5FC5\u987B\u652F\u6301\u72EC\u7ACB\u5730\u5740\u8FD0\u884C\uFF1A\u65E0\u5BBF\u4E3B Token \u65F6\u663E\u793A\u543E\u7801\u5E10\u53F7\u5BC6\u7801\u767B\u5F55\uFF0C\u5E76\u6309 `V8.GetSysConfig(true).EnableCaptcha` \u52A8\u6001\u52A0\u8F7D\u9A8C\u8BC1\u7801\uFF1B\u83DC\u5355\u548C `V8.OpenAppDialog` \u5165\u53E3\u590D\u7528\u5BBF\u4E3B Token\u3002\n- \u83DC\u5355\u3001\u5F39\u5C42\u548C\u7EC4\u4EF6\u5BBF\u4E3B\u5FC5\u987B\u4F20\u9012 `permissionContext={sysMenuId,moduleEngineKey,diyTableId}`\u3002\u65E0\u6743\u9650\u6309 Token/OsClient\u3001ModuleEngineKey\u3001\u5BBF\u4E3B\u4E0A\u4E0B\u6587\u3001\u89D2\u8272\u6388\u6743\u987A\u5E8F\u6392\u67E5\uFF0C\u7981\u6B62\u6539\u533F\u540D\u6216\u53BB\u6389\u6743\u9650\u6821\u9A8C\u3002\n- \u771F\u5B9E\u7F16\u8BD1\u76EE\u5F55\u4E00\u5F8B\u9010\u6587\u4EF6\u6D41\u5F0F\u53D1\u5E03\uFF0C\u652F\u6301\u6700\u591A 20,000 \u6587\u4EF6/\u603B\u8BA1 20GB\uFF1B\u51E0\u767E MB\u30011GB \u7EA7\u9879\u76EE\u4E0D\u5F97\u56DE\u9000 Base64\u3002\n- `StorageMode=db` \u7684 256 \u6587\u4EF6/5MB \u4EC5\u7528\u4E8E\u663E\u5F0F\u5C0F\u578B\u5E94\u6025\u6062\u590D\uFF0C\u4E0D\u662F\u6B63\u5E38\u53D1\u5E03\u5BB9\u91CF\u3002\n- \u6D41\u5F0F\u5931\u8D25\u8BFB\u53D6 `uploadedCount/retrySafe` \u5E76\u6309\u540C\u7248\u672C\u5E42\u7B49\u91CD\u8BD5\uFF1B\u7981\u6B62\u56E0\u5927\u6587\u4EF6\u81EA\u52A8\u6539\u8D70 `microi_publish_microservice`\u3002\n- \u5B50\u79DF\u6237\u6240\u6709\u6E90\u7801\u3001\u8D44\u4EA7\u3001\u56DE\u8BFB\u9A8C\u7B7E\u3001\u9875\u9762\u548C\u7F13\u5B58\u5FC5\u987B\u7ED1\u5B9A\u5F53\u524D Token \u7684 OsClient\uFF0C\u4E0D\u5F97\u56DE\u9000\u4E3B\u79DF\u6237\u9ED8\u8BA4\u914D\u7F6E\u3002\n",Nt=class a{static getInstance(){return a._instance||(a._instance=new a),a._instance}inject(){let e=I.getInstance();if(!e.getWorkspaceRoot())return;let n;try{n=e.getSyncRootDir()}catch{return}let r=_.join(n,st);k.existsSync(r)||k.mkdirSync(r,{recursive:!0});let i=_.join(r,Et);k.writeFileSync(i,qr,"utf-8"),this.injectAiDocs(n),this.ensureJsConfig(n,r)}injectAiDocs(e){try{this.generatePerOsClientSchemaDocs(e);let t=I.getInstance().getWorkspaceRoot();if(!t)return;this.ensureLocalRuntimeFilesIgnored(t,e),this.syncBundledSkills(t);let n=this.collectSkillEntries(t),r=this.buildSkillsReference(n),i=ci+Zn+er+Xn+tr+Xr+Zr+ei+ti+ni+ri+ii+si+li+ai+oi+r,s=[{relativePath:`${zt}/${Jt}`,content:Ye+i},{relativePath:qt,content:Ye+i},{relativePath:Qt,content:Ye+i},{relativePath:Yt,content:Ye+i}];if(n.length>0){s.push({relativePath:`${Xt}/${Zt}`,content:this.buildCursorSkillRule(n)});let o=this.buildPortableAiSkill(n);for(let c of Qn)s.push({relativePath:c,content:o});s.push({relativePath:Yn,content:this.buildCodeBuddyRule()})}this.syncGeneratedAiDocs(t,s)}catch{}}ensureLocalRuntimeFilesIgnored(e,t){let n=[".vscode/mcp.json",`.vscode/${Mt}`,".cursor/mcp.json",".trae/mcp.json",".workbuddy/mcp.json",".comate/mcp.json",bn,".claude/settings.local.json"],r=_.relative(e,t);if(r&&!r.startsWith("..")&&!_.isAbsolute(r)){let i=r.replace(/\\/g,"/");n.push(`${i}/**/${We}`,`${i}/**/${Ne}`,`${i}/**/${Ue}`,`${i}/${nt}`,`${i}/**/${nt}`,`${i}/.backups/`,`${i}/**/.backups/`,`${i}/${st}/`)}ze(e),De(e,n)}getBundledSkillsDir(){let e=_.join(__dirname,"microi.skills");if(k.existsSync(e))return e;let t=_.resolve(__dirname,"..","skills");return k.existsSync(t)?t:e}syncBundledSkills(e){let t=this.getBundledSkillsDir();if(!k.existsSync(t))return;let n=_.join(e,qn),r=_.join(n,cn),i=this.readSkillManifest(r),s=this.readBundledSkillsMeta(),o=s.skills?.version,c=this.compareMicroiVersions(o,i.bundleVersion)<0,l={version:1,generatedBy:"Microi\u543E\u7801 VSCode Extension",bundleVersion:c?i.bundleVersion:o||i.bundleVersion,bundleBuiltAt:c?i.bundleBuiltAt:s.builtAt||i.bundleBuiltAt,fileVersions:{...i.fileVersions||{}},files:{...i.files}},u=[];this.walkSkillSource(t,(g,m)=>{let p=_.join(n,m),h=k.readFileSync(g,"utf-8"),f=this.hashText(h),y=i.files[m],S=s.fileVersions?.[m]||o,C=i.fileVersions?.[m]||i.bundleVersion,E=this.compareMicroiVersions(S,C)<0,R=!1;if(!k.existsSync(p))R=!E;else if(y)try{R=this.hashText(k.readFileSync(p,"utf-8"))===y&&!E}catch{R=!1}if(R){let w=_.dirname(p);k.existsSync(w)||k.mkdirSync(w,{recursive:!0}),k.writeFileSync(p,h,"utf-8"),u.push(m)}if(R)l.files[m]=f,S&&(l.fileVersions[m]=S);else try{if(this.hashText(k.readFileSync(p,"utf-8"))===f){l.files[m]=f;let b=this.pickNewerMicroiVersion(S,i.fileVersions?.[m]);b&&(l.fileVersions[m]=b)}else y?(l.files[m]=y,i.fileVersions?.[m]&&(l.fileVersions[m]=i.fileVersions[m])):(delete l.files[m],delete l.fileVersions[m])}catch{y&&(l.files[m]=y,i.fileVersions?.[m]&&(l.fileVersions[m]=i.fileVersions[m]))}});let d=JSON.stringify(l)!==JSON.stringify(i);(u.length>0||d||!k.existsSync(r))&&(k.existsSync(n)||k.mkdirSync(n,{recursive:!0}),k.writeFileSync(r,JSON.stringify(l,null,2)+`
|
|
1742
1742
|
`,"utf-8"),De(e,[`${qn}/${cn}`]))}readSkillManifest(e){if(!k.existsSync(e))return{version:1,generatedBy:"Microi\u543E\u7801 VSCode Extension",files:{}};try{let t=JSON.parse(k.readFileSync(e,"utf-8"));return{version:typeof t.version=="number"?t.version:1,generatedBy:t.generatedBy||"Microi\u543E\u7801 VSCode Extension",bundleVersion:typeof t.bundleVersion=="string"?t.bundleVersion:void 0,bundleBuiltAt:typeof t.bundleBuiltAt=="string"?t.bundleBuiltAt:void 0,fileVersions:t.fileVersions&&typeof t.fileVersions=="object"?t.fileVersions:{},files:t.files&&typeof t.files=="object"?t.files:{}}}catch{return{version:1,generatedBy:"Microi\u543E\u7801 VSCode Extension",files:{}}}}readBundledSkillsMeta(){let e=_.join(__dirname,Qr);if(!k.existsSync(e))return{};try{let t=JSON.parse(k.readFileSync(e,"utf-8"));return t&&typeof t=="object"?t:{}}catch{return{}}}walkSkillSource(e,t){let n=r=>{for(let i of k.readdirSync(r,{withFileTypes:!0})){if(i.name===".git"||i.name==="node_modules"||i.name===cn)continue;let s=_.join(r,i.name);if(i.isDirectory())n(s);else if(i.isFile()){let o=_.relative(e,s).replace(/\\/g,"/");t(s,o)}}};n(e)}hashText(e){return nr.createHash("sha256").update(e,"utf-8").digest("hex")}compareMicroiVersions(e,t){let n=s=>{if(!(!s||!/^\d+(?:\.\d+){2}$/.test(s)))return s.split(".").map(o=>Number(o))},r=n(e),i=n(t);if(!r||!i)return 0;for(let s=0;s<3;s++)if(r[s]!==i[s])return r[s]>i[s]?1:-1;return 0}pickNewerMicroiVersion(e,t){return e?t?this.compareMicroiVersions(e,t)>=0?e:t:e:t}syncGeneratedAiDocs(e,t){let n=t.map(g=>g.relativePath.replace(/\\/g,"/")),r=n.map(g=>this.normalizeRelativePath(g)),i=this.getGitTrackedWorkspaceFiles(e,n);if(i===void 0)return;let s=_.join(e,".vscode",Mt),o=this.readAiDocsManifest(s),c=this.readBundledSkillsMeta().skills?.version,l=this.pickNewerMicroiVersion(c,o.bundleVersion),u={version:2,generatedBy:"Microi\u543E\u7801 AI\u5F00\u53D1\u5DE5\u5177",bundleVersion:l,fileVersions:{...o.fileVersions||{}},fileHashes:{...o.fileHashes||{}},files:{...o.files}},d=new Set(r);for(let g of Object.keys(u.files))d.has(this.normalizeRelativePath(g))||(delete u.files[g],delete u.fileHashes[g],delete u.fileVersions[g]);for(let g of Object.keys(u.fileHashes))d.has(this.normalizeRelativePath(g))||(delete u.fileHashes[g],delete u.fileVersions[g],delete u.files[g]);for(let g of t){let m=this.normalizeRelativePath(g.relativePath);if(i.has(m)){delete u.files[m],delete u.fileHashes[m],delete u.fileVersions[m];continue}let p=_.join(e,m),h=this.hashText(g.content),f=o.files[m],y=o.fileHashes?.[m]||(/^[a-f0-9]{64}$/i.test(f||"")?f:void 0),S=o.fileVersions?.[m]||o.bundleVersion,C=this.compareMicroiVersions(c,S)<0,E=!k.existsSync(p)&&!C,R="";if(k.existsSync(p))try{let b=k.readFileSync(p,"utf-8");R=this.hashText(b),E=!!y&&R===y&&!C,!y&&b.includes("Generated by Microi\u543E\u7801 VSCode Extension")&&(u.fileHashes[m]=R,S&&(u.fileVersions[m]=S))}catch{E=!1}if(E){let b=_.dirname(p);k.existsSync(b)||k.mkdirSync(b,{recursive:!0}),k.writeFileSync(p,g.content,"utf-8"),R=h,u.fileHashes[m]=h,c&&(u.fileVersions[m]=c)}else if(R===h){u.fileHashes[m]=h;let b=this.pickNewerMicroiVersion(c,S);b&&(u.fileVersions[m]=b)}else y?(u.fileHashes[m]=y,S&&(u.fileVersions[m]=S)):u.fileHashes[m]||delete u.fileVersions[m];let w=u.fileHashes[m];if(w){let b=u.fileVersions[m]||l||"unknown";u.files[m]=`${Yr}${b}:${w}`}else delete u.files[m]}if(JSON.stringify(u)!==JSON.stringify(o)||!k.existsSync(s)){let g=_.dirname(s);k.existsSync(g)||k.mkdirSync(g,{recursive:!0}),k.writeFileSync(s,JSON.stringify(u,null,2)+`
|
|
1743
1743
|
`,"utf-8")}De(e,[`.vscode/${Mt}`])}readAiDocsManifest(e){if(!k.existsSync(e))return{version:2,generatedBy:"Microi\u543E\u7801 AI\u5F00\u53D1\u5DE5\u5177",files:{},fileHashes:{},fileVersions:{}};try{let t=JSON.parse(k.readFileSync(e,"utf-8"));return{version:typeof t.version=="number"?t.version:1,generatedBy:t.generatedBy||"Microi\u543E\u7801 AI\u5F00\u53D1\u5DE5\u5177",bundleVersion:typeof t.bundleVersion=="string"?t.bundleVersion:void 0,fileVersions:t.fileVersions&&typeof t.fileVersions=="object"?t.fileVersions:{},fileHashes:t.fileHashes&&typeof t.fileHashes=="object"?t.fileHashes:{},files:t.files&&typeof t.files=="object"?t.files:{}}}catch{return{version:2,generatedBy:"Microi\u543E\u7801 AI\u5F00\u53D1\u5DE5\u5177",files:{},fileHashes:{},fileVersions:{}}}}normalizeRelativePath(e){let t=e.replace(/\\/g,"/").replace(/^\.\//,"");return process.platform==="win32"?t.toLowerCase():t}getGitTrackedWorkspaceFiles(e,t){let n=(0,ln.spawnSync)("git",["-C",e,"rev-parse","--show-toplevel"],{encoding:"utf-8",windowsHide:!0,timeout:3e3});if(n.error)return this.hasGitMetadata(e)?void 0:new Set;if(n.status!==0)return new Set;let r=String(n.stdout||"").trim();if(!r)return;let i=new Map,s=[];for(let l of t){let u=_.relative(r,_.join(e,l));u.startsWith("..")||_.isAbsolute(u)||(s.push(u.replace(/\\/g,"/")),i.set(this.normalizeRelativePath(u),this.normalizeRelativePath(l)))}if(s.length===0)return new Set;let o=(0,ln.spawnSync)("git",["-C",r,"ls-files","-z","--",...s],{encoding:"utf-8",windowsHide:!0,timeout:3e3,maxBuffer:1024*1024});if(o.error||o.status!==0)return;let c=new Set;for(let l of String(o.stdout||"").split("\0").filter(Boolean)){let u=i.get(this.normalizeRelativePath(l));u&&c.add(u)}return c}hasGitMetadata(e){let t=_.resolve(e);for(;;){if(k.existsSync(_.join(t,".git")))return!0;let n=_.dirname(t);if(n===t)return!1;t=n}}canRemoveGeneratedAiDoc(e,t){if(!k.existsSync(t))return!1;let n=_.relative(e,t).replace(/\\/g,"/"),r=this.normalizeRelativePath(n),i=this.getGitTrackedWorkspaceFiles(e,[n]);if(i===void 0||i.has(r))return!1;let s=this.readAiDocsManifest(_.join(e,".vscode",Mt)),o=s.files[r],c=s.fileHashes?.[r]||(/^[a-f0-9]{64}$/i.test(o||"")?o:void 0);if(!c)return!1;try{return this.hashText(k.readFileSync(t,"utf-8"))===c}catch{return!1}}collectSkillEntries(e){let t=_.join(e,"microi.skills");if(!k.existsSync(t))return[];let n=new Map,r=_.join(t,"README.md");if(k.existsSync(r))try{let o=k.readFileSync(r,"utf-8").matchAll(/`([^`]+\/SKILL\.md)`/g),c=0;for(let l of o){let u=l[1].split(/[\\/]/)[0];u&&!n.has(u)&&n.set(u,c++)}}catch{}let i=[];try{for(let s of k.readdirSync(t,{withFileTypes:!0})){if(!s.isDirectory())continue;let o=_.join(t,s.name,"SKILL.md");k.existsSync(o)&&i.push({name:s.name,relativePath:`microi.skills/${s.name}/SKILL.md`,description:this.readSkillDescription(o,s.name)})}}catch{}return i.sort((s,o)=>{let c=n.get(s.name),l=n.get(o.name);return c!==void 0&&l!==void 0?c-l:c!==void 0?-1:l!==void 0?1:s.name.localeCompare(o.name)})}readSkillDescription(e,t){try{let r=k.readFileSync(e,"utf-8").split(/\r?\n/).find(i=>i.startsWith("# "));if(r)return r.replace(/^#\s+/,"").trim()}catch{}return t}buildSkillsReference(e){if(!e.length)return"";let t=e.map(n=>`- \`${n.relativePath}\` \u2014 ${n.description}`).join(`
|
|
1744
1744
|
`);return`
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"builtAt": "2026-08-
|
|
2
|
+
"builtAt": "2026-08-10T14:46:19.696Z",
|
|
3
3
|
"source": "../microi.skills",
|
|
4
4
|
"extension": {
|
|
5
5
|
"name": "v8-engine",
|
|
6
|
-
"version": "4.8.
|
|
6
|
+
"version": "4.8.8",
|
|
7
7
|
"publisher": "Microi"
|
|
8
8
|
},
|
|
9
9
|
"skills": {
|
|
10
|
-
"version": "4.8.
|
|
10
|
+
"version": "4.8.8",
|
|
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,10 +15,10 @@
|
|
|
15
15
|
"dir": "dist/microi.skills",
|
|
16
16
|
"files": 108,
|
|
17
17
|
"skills": 60,
|
|
18
|
-
"bytes":
|
|
18
|
+
"bytes": 1695117
|
|
19
19
|
},
|
|
20
20
|
"fileHashes": {
|
|
21
|
-
".microi-skills-version.json": "
|
|
21
|
+
".microi-skills-version.json": "9070c01b9b16d137c2e59b2ba9adf07d287d7a8955aaf3f6b519ffd5a8fe2d2e",
|
|
22
22
|
"README.md": "020086cc87e3f1c02cdaac86fe1a0ae58f16f0b1bb854d7a52f3e8f966f58bd7",
|
|
23
23
|
"ai-engine/SKILL.md": "be814942df611fa72fbd86ad67ac2cd0aa519cd348bcc085dd03e8ac81b7ec4b",
|
|
24
24
|
"ai-engine/agents/openai.yaml": "40deb07801006a46b9a7f0020d13251955eeadd04c8e591160210479936f8b5b",
|
|
@@ -52,17 +52,17 @@
|
|
|
52
52
|
"microi-db-schema/references/table-catalog.md": "ea0ef573d0e112c335e3ab66035bce4e5c3039c7bf25c6e3743f086913b46b97",
|
|
53
53
|
"microi-deployment/SKILL.md": "b85107988a0744b11c47dcb7a5c65a89faefe046b6400f3e7a7a4afa1cdcea80",
|
|
54
54
|
"microi-deployment/references/deployment-matrix.md": "32d9d1424bf19eae0d2cee2b1667203c830ea7610c71a806e7ddf785a0083009",
|
|
55
|
-
"microi-docs-coverage/SKILL.md": "
|
|
55
|
+
"microi-docs-coverage/SKILL.md": "29edc0eaee583e09e78cb5777ca9920202cf2b926ea0eb033496a1be8cf59f1e",
|
|
56
56
|
"microi-docs-coverage/references/capability-map.md": "2cfc6a10ca017519b1b6ba9d4a33c2055f6793162a36b511ba319945f08972e1",
|
|
57
57
|
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "ebd57f17f2ebae499bfa59ad17830db458590feb76f7f0f20219ff0987b33af3",
|
|
58
58
|
"microi-form-engine/SKILL.md": "e2bff491312643b16383c91280d81e3985cf81a70c10c5c366623601df7325ed",
|
|
59
59
|
"microi-form-engine/references/component-catalog.md": "68963c2d5211a4610c09fab1fa127a349339abbb7427509b183d4be72e977c7b",
|
|
60
60
|
"microi-form-engine/references/data-source-events.md": "59a95a36624476b12cdc84e4c23975d074b1f115df19992fd0fd075bb982e7cb",
|
|
61
61
|
"microi-form-layout/SKILL.md": "48814c2c138e2c0fb6a11d39cf458df6a1cc28a3156c7540db1fa482a2ce6aec",
|
|
62
|
-
"microi-frontend-sdk/SKILL.md": "
|
|
62
|
+
"microi-frontend-sdk/SKILL.md": "06f5d51605c6cceef35b986062dcfae76a8fe4efce28a93f267ec1fd2dc28372",
|
|
63
63
|
"microi-left-right-layout/SKILL.md": "d8c482224846477b6c3068bdf94930cca6d699570f59b09f946601b0a65715f6",
|
|
64
|
-
"microi-microservice/SKILL.md": "
|
|
65
|
-
"microi-microservice/references/runtime-delivery.md": "
|
|
64
|
+
"microi-microservice/SKILL.md": "5f73a351d7ed17395c631524defab72155c7fe2db576785a2926d639453b659a",
|
|
65
|
+
"microi-microservice/references/runtime-delivery.md": "f6f90258a8be86e5d10837c68de70cbad4d2efb4333966891105da7ddc0c5ca5",
|
|
66
66
|
"microi-mobile-app-quality/SKILL.md": "3d7c4e89a5abe98658ebce0a31f3db05ff5e38b3f1ac5957aa44ebef9ae282ee",
|
|
67
67
|
"microi-solution-quotation/SKILL.md": "1bd47bd019a62bdc904612a7d8e2501c76df66eed9ef247544dd7fe38eba02e4",
|
|
68
68
|
"microi-solution-quotation/agents/openai.yaml": "9e3f994cc842c927ca25e23216f6ce5e8f8313fc39b1c7142d9b652ca73e7dd1",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"spider-engine/SKILL.md": "09e9e164dc09c35bb4bebfbe77e3ba18164c89503313b28a1b4f1061e0de5e30",
|
|
88
88
|
"translate-engine/SKILL.md": "384ab8a4c064f1ded98ef3890d5f65daee0001c784cd42d8560623ae64469203",
|
|
89
89
|
"translate-engine/agents/openai.yaml": "8eb47e08a691219bbe22a797ddbdf73234ec77f86e5724bc735fb0738d899112",
|
|
90
|
-
"ui-design/SKILL.md": "
|
|
90
|
+
"ui-design/SKILL.md": "e8aadf972a5d7713af0e710608938c7b1fc7e5a7f1f3d648f5a4f45c4412a39f",
|
|
91
91
|
"ui-design/assets/pattern-showcase/app.js": "68a8d404c30096da853c6edbc7cb27f336982147ddfebccd66c03ba3d99427cd",
|
|
92
92
|
"ui-design/assets/pattern-showcase/index.html": "242f94772a5f14e38296f1e925f30a9a5fef2103975831cbd47861a3fc14d5bc",
|
|
93
93
|
"ui-design/assets/pattern-showcase/styles.css": "77c34ddae0dd9c665c8774dc6def4bd8f4f5ed02470d4343d116ed141c87eccb",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"v8-debugging/SKILL.md": "c6cad8bc10fd97bfdf22d854ecb50a064ff5b5556aa0475b9e147cc00e9803f9",
|
|
104
104
|
"v8-explorer-tree/SKILL.md": "9ecb0a2bdb9a6cbdf1ce74c0a97ca1ffa9157fae4e18fd87f97104c14d54ef5d",
|
|
105
105
|
"v8-export-import/SKILL.md": "e55299d75b24bcbb6248ec2572b55cd0515fb4fbfadaa1f78bcbe4a8d701a1f9",
|
|
106
|
-
"v8-file-upload/SKILL.md": "
|
|
106
|
+
"v8-file-upload/SKILL.md": "f2e229b3fb551d853fffc8650c7e06dc8788bcebe1ed931a7727da65f335d24b",
|
|
107
107
|
"v8-formengine-http/SKILL.md": "d975bc116e100f91d80acf7932128de6fff78c5fcd17557d3d5a5504e3359682",
|
|
108
108
|
"v8-frontend-events/SKILL.md": "1e7edb8c77e13a8489533d81f36cfc134430be6f4d7c4eab2f581713ee5f083a",
|
|
109
109
|
"v8-frontend-events/references/bluetooth-print-api.md": "c5667cc6a9ed1bf385a21ddbc28e39993bc9e6d527bc31b53fb4ad582abf719e",
|
|
@@ -128,114 +128,114 @@
|
|
|
128
128
|
"workspace-conventions/SKILL.md": "a8bb98c6abc109394208af83052b5cf646ce4c91c969a8358a1265c5e61b314b"
|
|
129
129
|
},
|
|
130
130
|
"fileVersions": {
|
|
131
|
-
".microi-skills-version.json": "4.8.
|
|
132
|
-
"README.md": "4.8.
|
|
133
|
-
"ai-engine/SKILL.md": "4.8.
|
|
134
|
-
"ai-engine/agents/openai.yaml": "4.8.
|
|
135
|
-
"ai-platform-governance/SKILL.md": "4.8.
|
|
136
|
-
"app-store/SKILL.md": "4.8.
|
|
137
|
-
"app-store/agents/openai.yaml": "4.8.
|
|
138
|
-
"business-blueprint/SKILL.md": "4.8.
|
|
139
|
-
"datasource-engine/SKILL.md": "4.8.
|
|
140
|
-
"datasource-engine/agents/openai.yaml": "4.8.
|
|
141
|
-
"dos-orm/SKILL.md": "4.8.
|
|
142
|
-
"dos-orm/references/api-reference.md": "4.8.
|
|
143
|
-
"job-engine/SKILL.md": "4.8.
|
|
144
|
-
"job-engine/agents/openai.yaml": "4.8.
|
|
145
|
-
"message-notification/SKILL.md": "4.8.
|
|
146
|
-
"message-notification/agents/openai.yaml": "4.8.
|
|
147
|
-
"message-notification/references/contracts.md": "4.8.
|
|
148
|
-
"microi-ai-app-auth.js": "4.8.
|
|
149
|
-
"microi-ai-application/SKILL.md": "4.8.
|
|
150
|
-
"microi-ai-application/agents/openai.yaml": "4.8.
|
|
151
|
-
"microi-ai-application/references/frontend-baseline.md": "4.8.
|
|
152
|
-
"microi-client-frontend/SKILL.md": "4.8.
|
|
153
|
-
"microi-codex-installer/SKILL.md": "4.8.
|
|
154
|
-
"microi-codex-installer/agents/openai.yaml": "4.8.
|
|
155
|
-
"microi-datasource-mapping/SKILL.md": "4.8.
|
|
156
|
-
"microi-db-schema/SKILL.md": "4.8.
|
|
157
|
-
"microi-db-schema/agents/openai.yaml": "4.8.
|
|
158
|
-
"microi-db-schema/references/core-tables.md": "4.8.
|
|
159
|
-
"microi-db-schema/references/form-component-options.md": "4.8.
|
|
160
|
-
"microi-db-schema/references/schema-overview.md": "4.8.
|
|
161
|
-
"microi-db-schema/references/schema.md": "4.8.
|
|
162
|
-
"microi-db-schema/references/table-catalog.md": "4.8.
|
|
163
|
-
"microi-deployment/SKILL.md": "4.8.
|
|
164
|
-
"microi-deployment/references/deployment-matrix.md": "4.8.
|
|
165
|
-
"microi-docs-coverage/SKILL.md": "4.8.
|
|
166
|
-
"microi-docs-coverage/references/capability-map.md": "4.8.
|
|
167
|
-
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "4.8.
|
|
168
|
-
"microi-form-engine/SKILL.md": "4.8.
|
|
169
|
-
"microi-form-engine/references/component-catalog.md": "4.8.
|
|
170
|
-
"microi-form-engine/references/data-source-events.md": "4.8.
|
|
171
|
-
"microi-form-layout/SKILL.md": "4.8.
|
|
172
|
-
"microi-frontend-sdk/SKILL.md": "4.8.
|
|
173
|
-
"microi-left-right-layout/SKILL.md": "4.8.
|
|
174
|
-
"microi-microservice/SKILL.md": "4.8.
|
|
175
|
-
"microi-microservice/references/runtime-delivery.md": "4.8.
|
|
176
|
-
"microi-mobile-app-quality/SKILL.md": "4.8.
|
|
177
|
-
"microi-solution-quotation/SKILL.md": "4.8.
|
|
178
|
-
"microi-solution-quotation/agents/openai.yaml": "4.8.
|
|
179
|
-
"microi-solution-quotation/scripts/build_solution_quote.py": "4.8.
|
|
180
|
-
"microi-system-delivery/SKILL.md": "4.8.
|
|
181
|
-
"microi-ui/SKILL.md": "4.8.
|
|
182
|
-
"microi-uniapp-frontend/SKILL.md": "4.8.
|
|
183
|
-
"microi.v8.js": "4.8.
|
|
184
|
-
"module-engine/SKILL.md": "4.8.
|
|
185
|
-
"module-engine/references/module-config.md": "4.8.
|
|
186
|
-
"ocr-engine/SKILL.md": "4.8.
|
|
187
|
-
"ocr-engine/agents/openai.yaml": "4.8.
|
|
188
|
-
"page-engine/SKILL.md": "4.8.
|
|
189
|
-
"performance-testing/SKILL.md": "4.8.
|
|
190
|
-
"playwright-e2e/SKILL.md": "4.8.
|
|
191
|
-
"print-engine/SKILL.md": "4.8.
|
|
192
|
-
"production-readonly-audit/SKILL.md": "4.8.
|
|
193
|
-
"report-engine/SKILL.md": "4.8.
|
|
194
|
-
"report-engine/agents/openai.yaml": "4.8.
|
|
195
|
-
"search-engine/SKILL.md": "4.8.
|
|
196
|
-
"search-engine/agents/openai.yaml": "4.8.
|
|
197
|
-
"spider-engine/SKILL.md": "4.8.
|
|
198
|
-
"translate-engine/SKILL.md": "4.8.
|
|
199
|
-
"translate-engine/agents/openai.yaml": "4.8.
|
|
200
|
-
"ui-design/SKILL.md": "4.8.
|
|
201
|
-
"ui-design/assets/pattern-showcase/app.js": "4.8.
|
|
202
|
-
"ui-design/assets/pattern-showcase/index.html": "4.8.
|
|
203
|
-
"ui-design/assets/pattern-showcase/styles.css": "4.8.
|
|
204
|
-
"ui-design/assets/templates/MCI-DESIGN.md": "4.8.
|
|
205
|
-
"ui-design/references/design-pattern-library.md": "4.8.
|
|
206
|
-
"ui-design/references/mci-design-contract.md": "4.8.
|
|
207
|
-
"ui-design/references/motion-and-media.md": "4.8.
|
|
208
|
-
"ui-design/references/product-flow-recipes.md": "4.8.
|
|
209
|
-
"uniapp-mall-assets/SKILL.md": "4.8.
|
|
210
|
-
"v8-api-config/SKILL.md": "4.8.
|
|
211
|
-
"v8-cache-pattern/SKILL.md": "4.8.
|
|
212
|
-
"v8-crud-api/SKILL.md": "4.8.
|
|
213
|
-
"v8-debugging/SKILL.md": "4.8.
|
|
214
|
-
"v8-explorer-tree/SKILL.md": "4.8.
|
|
215
|
-
"v8-export-import/SKILL.md": "4.8.
|
|
216
|
-
"v8-file-upload/SKILL.md": "4.8.
|
|
217
|
-
"v8-formengine-http/SKILL.md": "4.8.
|
|
218
|
-
"v8-frontend-events/SKILL.md": "4.8.
|
|
219
|
-
"v8-frontend-events/references/bluetooth-print-api.md": "4.8.
|
|
220
|
-
"v8-frontend-events/references/bluetooth-print.md": "4.8.
|
|
221
|
-
"v8-http-integration/SKILL.md": "4.8.
|
|
222
|
-
"v8-image-processing/SKILL.md": "4.8.
|
|
223
|
-
"v8-image-processing/agents/openai.yaml": "4.8.
|
|
224
|
-
"v8-image-processing/references/api-reference.md": "4.8.
|
|
225
|
-
"v8-menu-buttons/SKILL.md": "4.8.
|
|
226
|
-
"v8-mongodb/SKILL.md": "4.8.
|
|
227
|
-
"v8-mq-mqtt/SKILL.md": "4.8.
|
|
228
|
-
"v8-saas-multi-tenant/SKILL.md": "4.8.
|
|
229
|
-
"v8-security/SKILL.md": "4.8.
|
|
230
|
-
"v8-sql-query/SKILL.md": "4.8.
|
|
231
|
-
"v8-table-event/SKILL.md": "4.8.
|
|
232
|
-
"v8-template-engine/SKILL.md": "4.8.
|
|
233
|
-
"v8-utilities/SKILL.md": "4.8.
|
|
234
|
-
"v8-utilities/references/client-api-index.md": "4.8.
|
|
235
|
-
"v8-utilities/references/platform-http-routes.md": "4.8.
|
|
236
|
-
"v8-utilities/references/server-api-index.md": "4.8.
|
|
237
|
-
"v8-workflow/SKILL.md": "4.8.
|
|
238
|
-
"workspace-conventions/SKILL.md": "4.8.
|
|
131
|
+
".microi-skills-version.json": "4.8.8",
|
|
132
|
+
"README.md": "4.8.8",
|
|
133
|
+
"ai-engine/SKILL.md": "4.8.8",
|
|
134
|
+
"ai-engine/agents/openai.yaml": "4.8.8",
|
|
135
|
+
"ai-platform-governance/SKILL.md": "4.8.8",
|
|
136
|
+
"app-store/SKILL.md": "4.8.8",
|
|
137
|
+
"app-store/agents/openai.yaml": "4.8.8",
|
|
138
|
+
"business-blueprint/SKILL.md": "4.8.8",
|
|
139
|
+
"datasource-engine/SKILL.md": "4.8.8",
|
|
140
|
+
"datasource-engine/agents/openai.yaml": "4.8.8",
|
|
141
|
+
"dos-orm/SKILL.md": "4.8.8",
|
|
142
|
+
"dos-orm/references/api-reference.md": "4.8.8",
|
|
143
|
+
"job-engine/SKILL.md": "4.8.8",
|
|
144
|
+
"job-engine/agents/openai.yaml": "4.8.8",
|
|
145
|
+
"message-notification/SKILL.md": "4.8.8",
|
|
146
|
+
"message-notification/agents/openai.yaml": "4.8.8",
|
|
147
|
+
"message-notification/references/contracts.md": "4.8.8",
|
|
148
|
+
"microi-ai-app-auth.js": "4.8.8",
|
|
149
|
+
"microi-ai-application/SKILL.md": "4.8.8",
|
|
150
|
+
"microi-ai-application/agents/openai.yaml": "4.8.8",
|
|
151
|
+
"microi-ai-application/references/frontend-baseline.md": "4.8.8",
|
|
152
|
+
"microi-client-frontend/SKILL.md": "4.8.8",
|
|
153
|
+
"microi-codex-installer/SKILL.md": "4.8.8",
|
|
154
|
+
"microi-codex-installer/agents/openai.yaml": "4.8.8",
|
|
155
|
+
"microi-datasource-mapping/SKILL.md": "4.8.8",
|
|
156
|
+
"microi-db-schema/SKILL.md": "4.8.8",
|
|
157
|
+
"microi-db-schema/agents/openai.yaml": "4.8.8",
|
|
158
|
+
"microi-db-schema/references/core-tables.md": "4.8.8",
|
|
159
|
+
"microi-db-schema/references/form-component-options.md": "4.8.8",
|
|
160
|
+
"microi-db-schema/references/schema-overview.md": "4.8.8",
|
|
161
|
+
"microi-db-schema/references/schema.md": "4.8.8",
|
|
162
|
+
"microi-db-schema/references/table-catalog.md": "4.8.8",
|
|
163
|
+
"microi-deployment/SKILL.md": "4.8.8",
|
|
164
|
+
"microi-deployment/references/deployment-matrix.md": "4.8.8",
|
|
165
|
+
"microi-docs-coverage/SKILL.md": "4.8.8",
|
|
166
|
+
"microi-docs-coverage/references/capability-map.md": "4.8.8",
|
|
167
|
+
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "4.8.8",
|
|
168
|
+
"microi-form-engine/SKILL.md": "4.8.8",
|
|
169
|
+
"microi-form-engine/references/component-catalog.md": "4.8.8",
|
|
170
|
+
"microi-form-engine/references/data-source-events.md": "4.8.8",
|
|
171
|
+
"microi-form-layout/SKILL.md": "4.8.8",
|
|
172
|
+
"microi-frontend-sdk/SKILL.md": "4.8.8",
|
|
173
|
+
"microi-left-right-layout/SKILL.md": "4.8.8",
|
|
174
|
+
"microi-microservice/SKILL.md": "4.8.8",
|
|
175
|
+
"microi-microservice/references/runtime-delivery.md": "4.8.8",
|
|
176
|
+
"microi-mobile-app-quality/SKILL.md": "4.8.8",
|
|
177
|
+
"microi-solution-quotation/SKILL.md": "4.8.8",
|
|
178
|
+
"microi-solution-quotation/agents/openai.yaml": "4.8.8",
|
|
179
|
+
"microi-solution-quotation/scripts/build_solution_quote.py": "4.8.8",
|
|
180
|
+
"microi-system-delivery/SKILL.md": "4.8.8",
|
|
181
|
+
"microi-ui/SKILL.md": "4.8.8",
|
|
182
|
+
"microi-uniapp-frontend/SKILL.md": "4.8.8",
|
|
183
|
+
"microi.v8.js": "4.8.8",
|
|
184
|
+
"module-engine/SKILL.md": "4.8.8",
|
|
185
|
+
"module-engine/references/module-config.md": "4.8.8",
|
|
186
|
+
"ocr-engine/SKILL.md": "4.8.8",
|
|
187
|
+
"ocr-engine/agents/openai.yaml": "4.8.8",
|
|
188
|
+
"page-engine/SKILL.md": "4.8.8",
|
|
189
|
+
"performance-testing/SKILL.md": "4.8.8",
|
|
190
|
+
"playwright-e2e/SKILL.md": "4.8.8",
|
|
191
|
+
"print-engine/SKILL.md": "4.8.8",
|
|
192
|
+
"production-readonly-audit/SKILL.md": "4.8.8",
|
|
193
|
+
"report-engine/SKILL.md": "4.8.8",
|
|
194
|
+
"report-engine/agents/openai.yaml": "4.8.8",
|
|
195
|
+
"search-engine/SKILL.md": "4.8.8",
|
|
196
|
+
"search-engine/agents/openai.yaml": "4.8.8",
|
|
197
|
+
"spider-engine/SKILL.md": "4.8.8",
|
|
198
|
+
"translate-engine/SKILL.md": "4.8.8",
|
|
199
|
+
"translate-engine/agents/openai.yaml": "4.8.8",
|
|
200
|
+
"ui-design/SKILL.md": "4.8.8",
|
|
201
|
+
"ui-design/assets/pattern-showcase/app.js": "4.8.8",
|
|
202
|
+
"ui-design/assets/pattern-showcase/index.html": "4.8.8",
|
|
203
|
+
"ui-design/assets/pattern-showcase/styles.css": "4.8.8",
|
|
204
|
+
"ui-design/assets/templates/MCI-DESIGN.md": "4.8.8",
|
|
205
|
+
"ui-design/references/design-pattern-library.md": "4.8.8",
|
|
206
|
+
"ui-design/references/mci-design-contract.md": "4.8.8",
|
|
207
|
+
"ui-design/references/motion-and-media.md": "4.8.8",
|
|
208
|
+
"ui-design/references/product-flow-recipes.md": "4.8.8",
|
|
209
|
+
"uniapp-mall-assets/SKILL.md": "4.8.8",
|
|
210
|
+
"v8-api-config/SKILL.md": "4.8.8",
|
|
211
|
+
"v8-cache-pattern/SKILL.md": "4.8.8",
|
|
212
|
+
"v8-crud-api/SKILL.md": "4.8.8",
|
|
213
|
+
"v8-debugging/SKILL.md": "4.8.8",
|
|
214
|
+
"v8-explorer-tree/SKILL.md": "4.8.8",
|
|
215
|
+
"v8-export-import/SKILL.md": "4.8.8",
|
|
216
|
+
"v8-file-upload/SKILL.md": "4.8.8",
|
|
217
|
+
"v8-formengine-http/SKILL.md": "4.8.8",
|
|
218
|
+
"v8-frontend-events/SKILL.md": "4.8.8",
|
|
219
|
+
"v8-frontend-events/references/bluetooth-print-api.md": "4.8.8",
|
|
220
|
+
"v8-frontend-events/references/bluetooth-print.md": "4.8.8",
|
|
221
|
+
"v8-http-integration/SKILL.md": "4.8.8",
|
|
222
|
+
"v8-image-processing/SKILL.md": "4.8.8",
|
|
223
|
+
"v8-image-processing/agents/openai.yaml": "4.8.8",
|
|
224
|
+
"v8-image-processing/references/api-reference.md": "4.8.8",
|
|
225
|
+
"v8-menu-buttons/SKILL.md": "4.8.8",
|
|
226
|
+
"v8-mongodb/SKILL.md": "4.8.8",
|
|
227
|
+
"v8-mq-mqtt/SKILL.md": "4.8.8",
|
|
228
|
+
"v8-saas-multi-tenant/SKILL.md": "4.8.8",
|
|
229
|
+
"v8-security/SKILL.md": "4.8.8",
|
|
230
|
+
"v8-sql-query/SKILL.md": "4.8.8",
|
|
231
|
+
"v8-table-event/SKILL.md": "4.8.8",
|
|
232
|
+
"v8-template-engine/SKILL.md": "4.8.8",
|
|
233
|
+
"v8-utilities/SKILL.md": "4.8.8",
|
|
234
|
+
"v8-utilities/references/client-api-index.md": "4.8.8",
|
|
235
|
+
"v8-utilities/references/platform-http-routes.md": "4.8.8",
|
|
236
|
+
"v8-utilities/references/server-api-index.md": "4.8.8",
|
|
237
|
+
"v8-workflow/SKILL.md": "4.8.8",
|
|
238
|
+
"workspace-conventions/SKILL.md": "4.8.8"
|
|
239
239
|
},
|
|
240
240
|
"files": [
|
|
241
241
|
".microi-skills-version.json",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.8.
|
|
2
|
+
"version": "4.8.8",
|
|
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-
|
|
5
|
+
"updatedAt": "2026-08-10T14:46:01.921Z"
|
|
6
6
|
}
|
|
@@ -39,6 +39,22 @@ V8 函数”或新增、调整官方中文文档时,使用本 Skill。
|
|
|
39
39
|
6. 对每个新增或改动的 Skill 运行 `skill-creator` 的 `quick_validate.py`,
|
|
40
40
|
再执行 `git diff --check` 和相对链接检查。
|
|
41
41
|
|
|
42
|
+
## 中文文档视觉与可读性契约(强制)
|
|
43
|
+
|
|
44
|
+
文档正确但密密麻麻仍属于未完成。修改 `microi.doc/docs/doc/**/*.md` 时同时遵守:
|
|
45
|
+
|
|
46
|
+
- 正文使用清晰的 H1/H2/H3 层级和 80–90 字符左右的阅读宽度;连续长段落拆为短段、列表、对比表、步骤、流程或有语义的卡片。不要为了“丰富”把每句话都做成卡片。
|
|
47
|
+
- 首屏先回答“这是什么、有什么价值、怎么选择”,再展开原理和完整参数;长篇高级细节可使用可访问的 `details/summary` 渐进披露。
|
|
48
|
+
- 三个以上可比较能力优先使用表格或网格卡片;三步以上的依赖流程优先使用流程图/步骤带。图标必须帮助辨识,不能只作装饰噪声。
|
|
49
|
+
- 颜色至少区分主能力、成功、警告、风险,但正文对比度必须满足易读要求;不能只靠颜色表达状态。亮色、暗色、窄屏和 `prefers-reduced-motion` 都要有样式。
|
|
50
|
+
- 真实案例截图进入 `docs/public/images/...`,使用稳定英文文件名、有效 `alt` 和简短图注;图片不得代替关键文字说明,移动端不得横向撑破页面。
|
|
51
|
+
- 整站共同规则优先落在 VitePress 主题层 `mci-site.scss` / `doc-readable.scss`,页面独有展示放独立 SCSS;禁止为几十篇 Markdown 机械复制内联 `<style>`。
|
|
52
|
+
- 新页面可复用 `.mci-doc-grid`、`.mci-doc-card`、`.mci-doc-chip`;产品页需要独立视觉时使用页面 marker + `body:has(...)` 限定作用域,不能污染登录页、首页或英文生成页。
|
|
53
|
+
- 改动后运行 `npm run check:readability` 与 `npm run check:content`,再在真实浏览器至少检查一个桌面宽度和一个移动宽度,覆盖亮/暗主题、代码块、表格、图片、侧栏与锚点。
|
|
54
|
+
- `microi.doc/docs/en/` 由脚本生成,不手工同步样式化内容;日常文档工作继续禁止修改 `about/update-log.md`。
|
|
55
|
+
|
|
56
|
+
自动可读性检查只能阻止缺少 H1、超长连续文字块或整站主题契约丢失,不能证明页面真正好看。最终仍要查看渲染结果,不能用构建成功替代视觉验收。
|
|
57
|
+
|
|
42
58
|
## 自动审计能证明什么
|
|
43
59
|
|
|
44
60
|
脚本验证:
|
|
@@ -101,6 +101,16 @@ export async function login(account, pwd, captcha = {}) {
|
|
|
101
101
|
}
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
### MicroService 独立运行认证(强制)
|
|
105
|
+
|
|
106
|
+
AI 生成的前端微服务不能假定永远在主平台 iframe/micro-app 宿主中运行:
|
|
107
|
+
|
|
108
|
+
- `window.microApp` 存在且宿主下发 Token 时,直接配置同一个 SDK 实例并进入业务页,不重复显示登录。
|
|
109
|
+
- 独立访问时从 `.microi-micro-app.json`/构建配置取得 `apiBase` 与 `osClient`,先复用 SDK 已保存的有效 Token;无 Token 时显示平台帐号密码登录。
|
|
110
|
+
- 初始化必须调用 `V8.GetSysConfig(true)` 并按 `EnableCaptcha` 动态决定验证码。验证码接口固定为 `GET /api/Captcha/GetCaptcha`,响应头读取 `captchaid`;只有启用时才向 `V8.Login` 追加 `_CaptchaId/_CaptchaValue`。
|
|
111
|
+
- 登录仍签发平台 DiyToken,不创建平行 Token、平行用户表或微服务自有密码体系。失效事件回到登录态,Token 续签仍按本 Skill 的单实例规则处理。
|
|
112
|
+
- 宿主额外传入 `permissionContext={sysMenuId,moduleEngineKey,diyTableId}`。SDK/服务层需要访问 FormEngine 时使用真实授权 `moduleEngineKey`;该对象不能代替后端权限,也不能成为放宽匿名接口的理由。
|
|
113
|
+
|
|
104
114
|
## 请求头规则
|
|
105
115
|
|
|
106
116
|
SDK 的 `buildHeaders` 必须集中处理所有请求头,不能让页面、业务 wrapper 或上传逻辑各自拼接租户和鉴权头。
|
|
@@ -66,8 +66,8 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
66
66
|
|
|
67
67
|
本地项目必须位于当前连接对应的 `Microi-V8-Engine/{系统名称} ({ApiBase域名})/{OsClient}.{OsClientType}.{OsClientNetwork}/AI应用/{appKey}`。`microi.apps/` 是官方应用商城发行包工程目录,不是 MicroService 源码目录;发行包只能引用、构建或快照当前租户的唯一源码,不得在包内嵌套第二份可编辑 `microservice/` 工程。
|
|
68
68
|
|
|
69
|
-
构建前遵守本地 OOM 保护;已有 dev server
|
|
70
|
-
|
|
69
|
+
构建前遵守本地 OOM 保护;已有 dev server 可复用时不重复启动。新脚手架必须支持独立
|
|
70
|
+
访问时的平台帐号登录,但独立 Vite 预览仍没有菜单/弹窗等完整宿主上下文,不能替代宿主验收。
|
|
71
71
|
|
|
72
72
|
迁移 Vue2 定制页到独立 Vite 微服务时,不得假设宿主会提供 Tailwind/UnoCSS 等原子类;
|
|
73
73
|
页面依赖的宽高、颜色、间距、响应式和打印/下载样式必须由组件自身的语义 class 明确声明,
|
|
@@ -76,10 +76,18 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
76
76
|
筛选、确认、导入参数或状态同步。验收需用旧版截图逐项核对标题、工具栏、选项、按钮、表格
|
|
77
77
|
和分页,而不只确认组件已挂载。
|
|
78
78
|
|
|
79
|
+
### 本地源码同步禁止人工分段
|
|
80
|
+
|
|
81
|
+
- 已有本地工程时,`microi_sync_microservice_source` 首选只传项目绝对路径 `directory`;先 dry-run 审阅文件数、总大小、逐文件哈希和清单哈希,再传 `confirmExecution`。
|
|
82
|
+
- 源码扫描、读取、哈希和上传内容组装必须在 MCP 进程内完成,模型上下文只接触清单。禁止让 AI 读取整个源码为 Base64,禁止生成 `.sync-seg-*`、`sync-source-files.json`,禁止把一个真实源码文件拆成多个临时文件反复调用工具。
|
|
83
|
+
- 目录扫描必须排除 `node_modules`、`dist`、`build`、`coverage`、缓存、版本库和 UniApp 构建目录;发现 `.env`、证书、私钥、符号链接或越过根目录时失败关闭。
|
|
84
|
+
- AI 工具单次读取上限不是 MicroService 源码文件上限。即使 `microi.v8.js` 等文件超过 50KB,也应保持一个完整文件,由 MCP 直接从磁盘读取。
|
|
85
|
+
- `sourceFiles` 仅用于调用方本来就持有内存文件的旧版兼容场景;不得把它作为本地工程默认路径,也不得用人工切片规避上下文限制。
|
|
86
|
+
|
|
79
87
|
## 发布
|
|
80
88
|
|
|
81
89
|
- 创建/更新元数据:`microi_create_microservice`。
|
|
82
|
-
- 同步私有源码:`microi_sync_microservice_source
|
|
90
|
+
- 同步私有源码:`microi_sync_microservice_source`;本地工程必须优先传 `directory`,不构造 Base64 文件数组。
|
|
83
91
|
- 真实编译目录优先 `microi_publish_application_directory_stream` 流式发布。
|
|
84
92
|
- 发布动作必须明确区分两种模式:默认“源码+编译产物”先把完整工程同步到私有桶并逐文件回读 SHA-256,再把 `dist` 流式发布到公有桶;显式“仅编译产物”只更新公有桶,必须在界面中告知其他用户仍会拉取上一次私有源码,禁止暗示源码已同步。
|
|
85
93
|
- 私有源码同步使用 `ReplacePrivateSourceOnly` 精确清理过期源码;兼容调用可以继续接受 `replace`,但实现不得用旧式全表 `Replace=true` 删除同一应用的公有运行产物元数据。
|
|
@@ -100,6 +108,20 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
100
108
|
完整系统 Manifest 不得固化不同租户会变化的两个 Id;模块声明 `openType=MicroService`、`microServiceKey` 和 `microServiceRoutePath` 即可,由 `microi_generate_system` 在任何写入前回读 `sys_microiservice/sys_microiservice_page`,解析并校验当前租户的 `MicroServiceId/MicroServicePageId`。微服务或页面不存在时必须在首个写操作前失败,不能留下半套系统。
|
|
101
109
|
复杂弹窗用 `V8.OpenAppDialog`,业务参数放 `Data`,回调放顶层。
|
|
102
110
|
|
|
111
|
+
### 独立、菜单与弹层三种入口
|
|
112
|
+
|
|
113
|
+
- 同一发布物必须支持:直接打开独立运行、`sys_menu` 使用 `/micro-app/{AppKey}/{RoutePath}` 打开指定路由、`V8.OpenAppDialog` 按 AppKey/RoutePath 以 Dialog 或 Drawer 打开。
|
|
114
|
+
- 菜单路由必须同时回读并传入 `SysMenuId`、`ModuleEngineKey`、`DiyTableId`;弹层默认继承调用菜单,也允许跨模块时显式传真实授权模块。宿主统一下发 `{ sysMenuId, moduleEngineKey, diyTableId }` 的 `permissionContext`。
|
|
115
|
+
- `permissionContext` 只是选择正确 API 调用上下文,不是授权凭证。后端仍依据 DiyToken、OsClient、角色、菜单、表、按钮和数据范围校验;禁止删除权限参数、改成匿名接口或写死管理员 Token 来消除“没权限”。
|
|
116
|
+
|
|
117
|
+
### 独立运行的认证门
|
|
118
|
+
|
|
119
|
+
- 嵌入菜单或 `V8.OpenAppDialog` 时直接复用宿主 Token,不显示第二套登录页;同一个 V8 SDK 实例继续处理 Token 轮换。
|
|
120
|
+
- 独立访问时先配置当前 `apiBase/osClient` 并复用本地有效 Token;没有有效 Token 才显示吾码帐号密码登录。
|
|
121
|
+
- 页面启动时调用 `V8.GetSysConfig(true)`,用统一 `isEnabledFlag` 解析 `EnableCaptcha`。开启时请求 `GET /api/Captcha/GetCaptcha?OsClient=...`、读取响应头 `captchaid`,登录提交 `_CaptchaId/_CaptchaValue`;关闭时不渲染、不提交验证码字段。
|
|
122
|
+
- 登录使用统一 `V8.Login` 与 DiyToken,不创建第二套用户体系。Token 失效后回到认证门;禁止在 URL、日志、源码、`.env` 或业务数据中保存 Token。
|
|
123
|
+
- “无权限”排查顺序固定为:Token/OsClient → 目标 `ModuleEngineKey` → 宿主 `permissionContext` → 当前角色的菜单/表/按钮/数据范围。登录成功不等于拥有全部模块权限。
|
|
124
|
+
|
|
103
125
|
微服务内部禁止调用浏览器原生 `alert/confirm/prompt`。优先复用宿主 `Tips`/`V8.ConfirmTips`;需要由子应用自行承载时,使用 teleport 到 `body` 的品牌化可访问弹层,固定在当前视口正中央并高于宿主滚动内容。长列表只允许一次性加载后在前端内存搜索时,不得随着关键词重复请求服务器。
|
|
104
126
|
|
|
105
127
|
Token 只通过宿主上下文传递,不硬编码、不放 URL、不写日志。子应用回传成功/取消/
|
|
@@ -155,7 +177,8 @@ AI 生成菜单微服务时,应优先封装一个 `callMicroiHost(action, data
|
|
|
155
177
|
- 组合发布成功前,私有源码回读必须与本地源码在路径集合、文件数、字节数、逐文件 SHA-256 和规范化清单哈希上完全一致;任何缺失、多余或读取错误都要阻止运行版本切换。
|
|
156
178
|
- 直接刷新友好路由与连续切换多个微应用不 404、白屏或实例名冲突。
|
|
157
179
|
- Dialog/Drawer 成功、取消、错误和关闭协议正确。
|
|
158
|
-
-
|
|
180
|
+
- 独立地址覆盖“已有 Token 自动进入”和“无 Token 显示帐号密码”;`EnableCaptcha` 开/关各验一次,验证码响应头和登录参数正确。
|
|
181
|
+
- 宿主 API 请求携带当前 Token/OsClient/`permissionContext`,普通用户用真实授权模块成功、未授权模块仍明确拒绝。
|
|
159
182
|
- 至少验证桌面和窄屏;上传、表格、滚动、弹窗底部操作不被截断。
|
|
160
183
|
- 长弹窗滚动到顶部/中部/底部后,错误提示和确认层仍位于当前视口中央;自动化监听到原生 JavaScript 对话框直接判失败。
|
|
161
184
|
- 本地构建、MCP 发布和真实浏览器验收分别说明,未执行的层不宣称通过。
|