@microi.net/cli 5.6.6 → 5.6.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 +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +81 -79
- package/scripts/microi-cli.js +53 -52
- package/scripts/microi-skills.meta.json +249 -249
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +210 -210
- package/skills/ai-engine/SKILL.md +6 -3
- package/skills/ai-platform-governance/SKILL.md +8 -8
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +9 -9
- package/skills/app-store/SKILL.md +3 -1
- package/skills/datasource-engine/SKILL.md +3 -1
- package/skills/job-engine/SKILL.md +12 -2
- package/skills/microi-client-frontend/SKILL.md +7 -1
- package/skills/microi-codex/SKILL.md +16 -3
- package/skills/microi-codex-installer/SKILL.md +2 -2
- package/skills/microi-form-engine/SKILL.md +3 -0
- package/skills/microi-form-engine/references/component-catalog.md +1 -1
- package/skills/microi-form-layout/SKILL.md +1 -1
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +3 -3
- package/skills/microi-frontend-sdk/SKILL.md +2 -2
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +8 -7
- package/skills/microi-mobile-app-quality/SKILL.md +8 -8
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +10 -10
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +4 -4
- package/skills/microi-sso/SKILL.md +1 -0
- package/skills/microi-uniapp-frontend/SKILL.md +12 -10
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +7 -7
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +10 -10
- package/skills/microi.v8.js +14 -3
- package/skills/module-engine/SKILL.md +8 -2
- package/skills/page-engine/SKILL.md +4 -4
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +3 -3
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +4 -4
- package/skills/system-observability/SKILL.md +2 -1
- package/skills/ui-design/SKILL.md +10 -3
- package/skills/uniapp-mall-assets/SKILL.md +6 -0
- package/skills/v8-crud-api/SKILL.md +3 -3
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +4 -4
- package/skills/v8-export-import/SKILL.md +16 -10
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +3 -3
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +3 -3
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +1 -1
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +2 -0
- package/skills/v8-frontend-events/SKILL.md +4 -3
- package/skills/v8-frontend-events/references/bluetooth-print.md +13 -2
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +2 -2
- package/skills/v8-http-integration/SKILL.md +4 -4
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +2 -2
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +1 -1
- package/skills/v8-menu-buttons/SKILL.md +10 -6
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +4 -4
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +5 -5
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +3 -3
- package/skills/v8-mongodb/SKILL.md +8 -1
- package/skills/v8-mq-mqtt/SKILL.md +2 -2
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +1 -1
- package/skills/v8-saas-multi-tenant/SKILL.md +5 -2
- package/skills/v8-table-event/SKILL.md +1 -1
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +1 -1
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +2 -2
- package/skills/v8-utilities/SKILL.md +6 -2
- package/skills/v8-workflow/SKILL.md +2 -2
- package/skills/vision-engine/SKILL.md +1 -1
|
@@ -7,7 +7,7 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
|
|
|
7
7
|
|
|
8
8
|
# Microi AI Engine
|
|
9
9
|
|
|
10
|
-
平台媒体生成的受控 HTTP 入口包括 `/api/Ai/GenerateMiniMaxImage`、`/api/Ai/GenerateMiniMaxMusic`、`/api/Ai/CreateMiniMaxVideo`、`/api/Ai/GetMiniMaxVideoTask`、`/api/Ai/GetMiniMaxVideoFile`、`/api/Ai/PersistMiniMaxVideoFile`;AI 工作流统一调用 Managed 接口引擎 `/apiengine/platform-ai-workflow`,通过 `Action` 选择概览、节点详情、生成、列表、读取、保存或删除。调用方只提交业务参数和模型选择,供应商密钥、租户配额、任务归属和文件读取权限由服务端判定。生成结果必须先进入当前租户 HDFS 或受控临时句柄,浏览器不接触供应商密钥、图片 Base64、音频十六进制或原始视频任务 Id。`PersistMiniMaxVideoFile` 只能转存当前登录用户所属且已完成的任务,禁止作为任意 URL 搬运器。
|
|
10
|
+
平台媒体生成的受控 HTTP 入口包括 `/api/Ai/`、`/api/Ai/GenerateMiniMaxImage`、`/api/Ai/GenerateMiniMaxMusic`、`/api/Ai/CreateMiniMaxVideo`、`/api/Ai/GetMiniMaxVideoTask`、`/api/Ai/GetMiniMaxVideoFile`、`/api/Ai/PersistMiniMaxVideoFile` 和恢复原任务的 `/api/Ai/RecoverMiniMaxImageTask`;AI 工作流统一调用 Managed 接口引擎 `/apiengine/platform-ai-workflow`,通过 `Action` 选择概览、节点详情、生成、列表、读取、保存或删除。调用方只提交业务参数和模型选择,供应商密钥、租户配额、任务归属和文件读取权限由服务端判定。生成结果必须先进入当前租户 HDFS 或受控临时句柄,浏览器不接触供应商密钥、图片 Base64、音频十六进制或原始视频任务 Id。`PersistMiniMaxVideoFile` 只能转存当前登录用户所属且已完成的任务,禁止作为任意 URL 搬运器。
|
|
11
11
|
|
|
12
12
|
## 能力
|
|
13
13
|
|
|
@@ -27,7 +27,9 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
|
|
|
27
27
|
|
|
28
28
|
平台 AI 包含聊天/流式聊天、模型代理、模型路由、订阅配额、NL2SQL、NL2V8、数据库 Schema 关键词检索、可选向量融合和 V8 Skill 文档检索。AI 输出是建议,不是授权;执行 SQL、V8 或 MCP 写入前仍走平台权限与确认。
|
|
29
29
|
|
|
30
|
-
当前入口并不共用一条检索链路:普通 `Chat/ChatStream` 使用服务端会话上下文和固定核心规范 Prompt;`NL2SQL` 使用当前租户 Schema 双模式检索;`NL2V8` 使用 Skill 镜像与当前租户 Schema 双模式检索。默认模式不依赖 Ollama、`nomic-embed-text` 或 Qdrant;只有显式开启向量数据库时才增加向量通道。`Microi.Server/Microi.AI` 不是 MCP Host,没有注册 MCP Tools,也没有处理 `tool_calls` 的代理循环。MCP Server 目前由 Codex、Copilot、Cursor、Claude Code 等外部宿主调用。禁止仅凭 Prompt 中出现“使用 MCP”就声称在线 AI 已经执行工具。
|
|
30
|
+
当前入口并不共用一条检索链路:普通 `Chat/ChatStream` 使用服务端会话上下文和固定核心规范 Prompt;`NL2SQL` 使用当前租户 Schema 双模式检索;`NL2V8` 使用 Skill 镜像与当前租户 Schema 双模式检索。默认模式不依赖 Ollama、`nomic-embed-text` 或 Qdrant;只有显式开启向量数据库时才增加向量通道。`Microi.Server/Microi.AI` 不是 MCP Host,没有注册 MCP Tools,也没有处理 `tool_calls` 的代理循环。MCP Server 目前由 Codex、Copilot、Cursor、Claude Code 等外部宿主调用。禁止仅凭 Prompt 中出现“使用 MCP”就声称在线 AI 已经执行工具。
|
|
31
|
+
|
|
32
|
+
在线 `/#/mic-ai-engine` 的低代码建模模式采用受限动作卡片:先经 `/api/V8Engine/GetDbSchema` 读取当前租户,再由模型提出已允许的建表、字段、菜单、接口引擎等动作,管理员核对后通过同一 MCP 后端入口顺序执行并回读。前端仅向 `Level >= 9999` 展示执行入口;服务端 `Chat/ChatStream` 建模模式和每个 MCP 写入口均以当前 Token、主库账号及有效 `Level >= 9999` 复核,不能采信 `_IsAdmin` 或请求体身份标记。超时及回读失败为不确定结果,先回读再处理,禁止自动重试写操作。这仍不是 Microi.Code 的完整 MCP Host 或通用 `tool_calls` 循环;商城包也不替换平台前后端程序。
|
|
31
33
|
|
|
32
34
|
未来若给平台在线 AI 增加工具调用,优先在 `Microi.AI` 内建立受限 Tool Gateway,复用 FormEngine、V8McpLogic 等后端服务的授权入口;不要让后端使用超级管理员 Token 再请求自己的 MCP。每次工具调用必须继承当前用户、`OsClient`、Token/权限快照和审计上下文,模型只能提出调用建议,服务端仍负责参数白名单、写操作确认、幂等、步数/时长/结果大小上限和权威回读。工具返回的数据继续按不可信内容处理,不能反向覆盖系统规则。
|
|
33
35
|
|
|
@@ -75,7 +77,8 @@ AI 业务统一实现在 `Microi.Server/Microi.AI`。`Microi.Server/Microi.net.A
|
|
|
75
77
|
- 模型 Provider、Endpoint、ApiKey、AuthPrefix 和上游模型 Id 只保存在服务端受保护配置。
|
|
76
78
|
- 普通用户使用平台签发的受限 API Key/订阅身份,不能枚举或读取上游密钥。
|
|
77
79
|
- MiniMax 对话媒体必须区分意图模型与生成工具:`MiniMax-M3` 是对话与工具编排模型;图片入口兼容名仍为 `GenerateMiniMaxImage`,实际模型由 `mic_ai.MediaProtocol / MediaModels` 与当前媒体选择决定,不能固定为 `image-01`。MiniMax Code 的 `generate_image + input_urls` 使用 `minimax-connector-image` 协议和逻辑路由 `minimax-code-image`;供应商未公开底层图像模型名,不得把界面选择的 M3 当成图片生成底模。纯音乐优先使用所配置且可用的 `music-3.0`,兼容 `music-2.6`;托管音乐只有明确返回 410 退役终态时才允许切到官方开源 `MiniMax-Music3`,不得把超时、5xx、额度不足当作回退条件。目标账号能力必须实时校准,不得用文本说明冒充生成产物。
|
|
78
|
-
- `GenerateMiniMaxImage` 使用稳定 `RequestId` 持久入队,返回 `Code=2 + Data.TaskId` 后只通过 `GET /api/Ai/GetMiniMaxImageTask?taskId=...` 查询。只有 `Code=1 + Images` 才表示原图已写入 HDFS;浏览器超时、刷新或停止等待不能取消后台生成,也不能换请求号自动重发。图片任务复用 `mci_background_task` 的租户/用户隔离、数据库唯一键、分布式租约和 fencing,原生 Worker Key 为 `__microi_native_ai_image__`,不可由租户 V8 覆盖。请求参数只保存在服务端私有任务列,状态接口不返回提示词或参考图。
|
|
80
|
+
- `GenerateMiniMaxImage` 使用稳定 `RequestId` 持久入队,返回 `Code=2 + Data.TaskId` 后只通过 `GET /api/Ai/GetMiniMaxImageTask?taskId=...` 查询。只有 `Code=1 + Images` 才表示原图已写入 HDFS;浏览器超时、刷新或停止等待不能取消后台生成,也不能换请求号自动重发。图片任务复用 `mci_background_task` 的租户/用户隔离、数据库唯一键、分布式租约和 fencing,原生 Worker Key 为 `__microi_native_ai_image__`,不可由租户 V8 覆盖。请求参数只保存在服务端私有任务列,状态接口不返回提示词或参考图。
|
|
81
|
+
- MCP 对应工具为 `microi_generate_minimax_image`、`microi_get_minimax_image_task`、`microi_recover_minimax_image_task`。生成工具未提供 `confirmExecution=requestId` 时只返回 dry-run;确认后接受 `Code=2` 排队结果。状态工具只读同一 TaskId;恢复工具仅在 `CanRecoverResult=true` 时重新落盘既有结果,禁止重新生成。工具不接收供应商密钥、Endpoint、Authorization 或租户覆盖,宽高必须成对出现,平台发布前仍须回读当前租户 HDFS 地址和文件摘要。
|
|
79
82
|
- `GenerateMiniMaxImage` 可接收最多 4 张 JPEG/PNG/WebP 参考图;先写当前租户私有 HDFS,由可信适配器上传原图或提供短时签名 URL,浏览器与响应均不得得到供应商上传票据和签名地址。`image-01` 的 `subject_reference` 是人物参考重绘,不能据此声称所有 MiniMax 工具都不支持消除。消除、换背景等操作须选择目录中声明对应编辑能力的协议:MiniMax Code 使用 `input_urls`,OpenAI Images 兼容模型使用 edits;实际效果必须逐张检查,生成式身份保持、发丝边缘与像素不变不能仅凭接口成功判为通过。黑白、纯色背景抠除、缩放、裁剪、旋转、翻转、格式转换和拼图使用 `platform-ai-runtime/ProcessImage + V8.Image` 精确处理。
|
|
80
83
|
- MiniMax Code 媒体连接使用管理员独立 OAuth 授权,不读取或复用桌面客户端凭据。令牌在可信后端按租户及引擎记录绑定加密保存,刷新使用共享锁与旧值比较;明确 401 可刷新后重试一次,不确定生成请求不得重发。生成结果节点须先保存到共享存储;下载或 HDFS 失败且存在节点时,通过同一 TaskId 的 `RecoverMiniMaxImageTask` 或 `/v1/microi/image_tasks/{taskId}/recover` 恢复已有图片,不再次生成。目录只公开能力元数据。`MediaModels` 可扩展同协议模型;新的供应商协议仍需适配器、商城字段及真实中转验收,不能只填名称就宣称已接通。
|
|
81
84
|
- 吾码节点之间的图片中转使用 `POST /v1/microi/image_tasks` 与 `GET /v1/microi/image_tasks/{taskId}`,服务端平台 API Key 鉴权,提交必须有稳定 `Idempotency-Key`。查询不占用生成额度;接收节点只能使用已启用且公布的供应商媒体模型,禁止自调用中转环路。MiniMax 官方适配器调用同步 `/v1/image_generation`,其它供应商由对应协议适配器处理。消费者、官方中转节点和前端必须更新到同一持久任务协议;应用包更新不能代替平台二进制与前端更新。
|
|
@@ -8,7 +8,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
8
8
|
# Microi吾码 AI 平台治理中心
|
|
9
9
|
|
|
10
10
|
<!-- microi-progressive:begin -->
|
|
11
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-000 sha256=
|
|
11
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-000 sha256=db3f5112eb1f1fbf530fc846f27b062df2a0aca481a4488b3cd31ad2562a3571 -->
|
|
12
12
|
## 何时使用
|
|
13
13
|
|
|
14
14
|
以下任一需求都应使用本 Skill:
|
|
@@ -24,7 +24,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
24
24
|
- 发布或安装官方应用 `ai-platform-studio`。
|
|
25
25
|
|
|
26
26
|
<!-- /microi-progressive:chunk -->
|
|
27
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-001 sha256=
|
|
27
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-001 sha256=854b349825066903060e0012a61c2e496e5241829ccb2ae743c17bc5ad716411 -->
|
|
28
28
|
## 不可破坏的边界
|
|
29
29
|
|
|
30
30
|
- DiyToken 是唯一会话入口;继续复用现有用户、角色、部门、菜单、表权限和数据范围,禁止建立第二套 Token/RBAC。
|
|
@@ -36,7 +36,7 @@ description: Microi吾码 AI 平台治理中心设计、调用、扩展、应用
|
|
|
36
36
|
- Secret 只保存引用;列表、Diff、错误、日志、截图、导出和运行台账不得出现密码、Token、私钥或连接串原文。
|
|
37
37
|
|
|
38
38
|
<!-- /microi-progressive:chunk -->
|
|
39
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-002 sha256=
|
|
39
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-002 sha256=f67f0ed08ec5b5d42a1bb2cc8b73db373c297d2ad78b646bd16a9ed08fe2d158 -->
|
|
40
40
|
## 官方应用事实
|
|
41
41
|
|
|
42
42
|
应用 Key:`ai-platform-studio`,当前资源合同版本:`v2.0.9`。
|
|
@@ -63,7 +63,7 @@ mci-release-execute-extension
|
|
|
63
63
|
Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key 改回 `Managed`。
|
|
64
64
|
|
|
65
65
|
<!-- /microi-progressive:chunk -->
|
|
66
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-003 sha256=
|
|
66
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-003 sha256=620f19f67eae2f6c6b0888240423594df96c3c0fa96b9df0fe60327438b9209a -->
|
|
67
67
|
## 菜单层级与语义
|
|
68
68
|
|
|
69
69
|
应用安装或升级后只保留一个可见入口,禁止把历史工作台或 40 个数据菜单继续暴露到导航:
|
|
@@ -90,7 +90,7 @@ Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key
|
|
|
90
90
|
向用户解释时必须区分页面类型:`配置` 是日常维护入口,`审批/处置` 在有待办或异常时使用,`运行` 用于观察和恢复任务,`台账` 主要供审计与排错。不得把台账页描述成需要人工逐项维护的业务模块。
|
|
91
91
|
|
|
92
92
|
<!-- /microi-progressive:chunk -->
|
|
93
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-004 sha256=
|
|
93
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-004 sha256=b112a5de375c999e536f5c216132db83d11d024a766b9a4deab71963a5a017f6 -->
|
|
94
94
|
## 通用调用规则
|
|
95
95
|
|
|
96
96
|
1. 通过 MCP 回读当前表结构、菜单、接口、应用和微服务事实。
|
|
@@ -103,7 +103,7 @@ Hook 首次创建后归租户维护,升级永不覆盖,也不得把同 Key
|
|
|
103
103
|
旧 Hash、旧 RowVersion、旧 fencing token、未知状态、未知步骤或未知字段一律失败关闭。
|
|
104
104
|
|
|
105
105
|
<!-- /microi-progressive:chunk -->
|
|
106
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-005 sha256=
|
|
106
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-005 sha256=0c1db1cd39cbe0878388da8871c4094d3853179815d0ede9ce99cbfa5fa849d0 -->
|
|
107
107
|
## 门户与资源版本
|
|
108
108
|
|
|
109
109
|
调用顺序:
|
|
@@ -121,7 +121,7 @@ mci-portal-publish-plan
|
|
|
121
121
|
- `mci-resource-rollback` 校验 `ExpectedCurrentHash` 并创建新回滚版本,不能删除历史。
|
|
122
122
|
|
|
123
123
|
<!-- /microi-progressive:chunk -->
|
|
124
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-006 sha256=
|
|
124
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-006 sha256=32b79f58d3ef41a3d7c550c50db8ce6bb4d00717282e9aa3fbaa35ea9ac9a33e -->
|
|
125
125
|
## 身份与访问治理
|
|
126
126
|
|
|
127
127
|
### 身份同步
|
|
@@ -148,7 +148,7 @@ mci-identity-sync-plan → 人工处置冲突 → mci-identity-sync-apply
|
|
|
148
148
|
`mci-permission-explain` 必须调用 `V8.Method.ExplainAuthorizationDecision` 复用真实 FormEngine 授权逻辑;禁止从菜单/角色表重新拼近似结论。
|
|
149
149
|
|
|
150
150
|
<!-- /microi-progressive:chunk -->
|
|
151
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-007 sha256=
|
|
151
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-007 sha256=ad22d6e14c7ccdc2f6de6cf9285b9c94a949425f30be39e52949fedc60fd7d6a -->
|
|
152
152
|
## 配置模板与漂移
|
|
153
153
|
|
|
154
154
|
`mci-configuration-publish` 输入要点:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-008 sha256=9e2dfb6ca71a12bc39c54aca498a6f0eafdb700716db2a9bd0f9dc6f14194e85 -->
|
|
6
6
|
## 功能开关
|
|
7
7
|
|
|
8
8
|
发布调用 `mci-feature-flag-publish`,求值调用 `mci-feature-flag-evaluate`。
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- 功能开关不能代替任何权限、状态机、幂等或审计。
|
|
15
15
|
|
|
16
16
|
<!-- /microi-progressive:chunk -->
|
|
17
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-009 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-009 sha256=0ef9057b5d6a346f09931a7aac5007f6f0760096990b142931814b16043423c4 -->
|
|
18
18
|
## 发布状态机
|
|
19
19
|
|
|
20
20
|
### 固定计划
|
|
@@ -73,7 +73,7 @@ Submit / Approve / Reject / Cancel / Reopen
|
|
|
73
73
|
- 变更子步骤使用独立事务;成功后台账中断时用 `StepIdempotencyKey` 重试。
|
|
74
74
|
|
|
75
75
|
<!-- /microi-progressive:chunk -->
|
|
76
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-010 sha256=
|
|
76
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-010 sha256=09cf92ff56f8dfd4bb95872741da05e462d06b8027e934a3282b265c48203a40 -->
|
|
77
77
|
## 服务治理
|
|
78
78
|
|
|
79
79
|
### 实例协议
|
|
@@ -93,7 +93,7 @@ Submit / Approve / Reject / Cancel / Reopen
|
|
|
93
93
|
V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原子能力,不能获得原始 Redis 客户端或自定义 Key 前缀逃逸租户边界。
|
|
94
94
|
|
|
95
95
|
<!-- /microi-progressive:chunk -->
|
|
96
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-011 sha256=
|
|
96
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-011 sha256=9f62550921dccdb4f550a093183c44b0523822a2e75e9de3bfc3255406cecfe2 -->
|
|
97
97
|
## Trace、告警与日志
|
|
98
98
|
|
|
99
99
|
### 可信原子能力
|
|
@@ -122,7 +122,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
122
122
|
- `Extension` 模式由 `mci-log-archive-extension` 处理;法律保留不能删除。
|
|
123
123
|
|
|
124
124
|
<!-- /microi-progressive:chunk -->
|
|
125
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-012 sha256=
|
|
125
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-012 sha256=05f16e1c9370170a8bf20152439b3ebde4e85aa1bf360a6375c7c344380d2ace -->
|
|
126
126
|
## 资产、协作和变更集
|
|
127
127
|
|
|
128
128
|
- `mci-asset-publish` 使用 `microi.asset.v1`,声明 Component、Props、Setters、DataAdapters、Platforms、DependencyPackages。
|
|
@@ -133,7 +133,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
133
133
|
- Page JSON ↔ Vue SFC 只处理平台生成的受控标记,不执行任意 Vue/JavaScript,也不承诺任意源码无损反编译。
|
|
134
134
|
|
|
135
135
|
<!-- /microi-progressive:chunk -->
|
|
136
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-013 sha256=
|
|
136
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-013 sha256=17cce66f24e666271abc143a77319c9ecb43c476d4d9523f2da1dc3df2649d87 -->
|
|
137
137
|
## 可恢复导入
|
|
138
138
|
|
|
139
139
|
- `mci-import-plan`:JSON/CSV/Excel 解析、字段元数据校验、文件/计划/行 Hash、公式注入与敏感字段拒绝。
|
|
@@ -145,7 +145,7 @@ V8 业务只能使用租户隔离的 `SetIfNotExists/Expire/HashIncrement` 原
|
|
|
145
145
|
单批最多 2,000 行。更大数据应拆批或使用专用迁移作业,不提高内存上限硬顶。
|
|
146
146
|
|
|
147
147
|
<!-- /microi-progressive:chunk -->
|
|
148
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-014 sha256=
|
|
148
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-014 sha256=1f931b62b510316d8e2b9e034b1348c7dc63e307166bee107e9e3430b1be5a2c -->
|
|
149
149
|
## 页面与蓝图版本
|
|
150
150
|
|
|
151
151
|
页面工具:
|
|
@@ -161,7 +161,7 @@ microi_rollback_page_design
|
|
|
161
161
|
蓝图提供对应的历史、读取、比较、导出和回滚工具。修改前读取 CurrentHash,保存传 ExpectedHash,写后回读新 Hash 与不可变历史。回滚创建新版本,不删除旧历史。
|
|
162
162
|
|
|
163
163
|
<!-- /microi-progressive:chunk -->
|
|
164
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-015 sha256=
|
|
164
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-015 sha256=763421b1b0bbf719255cfeee093fdd33517d4ead38ddd1c0043a5ba5ec3fe86a -->
|
|
165
165
|
## 应用商城发布
|
|
166
166
|
|
|
167
167
|
- 官方发布使用绑定 `https://api.itdos.com`、`OsClient=iTdos` 的 `microi_itdos`。
|
|
@@ -175,7 +175,7 @@ microi_rollback_page_design
|
|
|
175
175
|
- 商城发布不等于生产 API/Web 容器部署。
|
|
176
176
|
|
|
177
177
|
<!-- /microi-progressive:chunk -->
|
|
178
|
-
<!-- microi-progressive:chunk id=ai-platform-governance-016 sha256=
|
|
178
|
+
<!-- microi-progressive:chunk id=ai-platform-governance-016 sha256=195d1af8151cf8c8c846799418e822f3c9f17310fac91a0442af8944f3c39899 -->
|
|
179
179
|
## 双节点与浏览器验收
|
|
180
180
|
|
|
181
181
|
至少覆盖:
|
|
@@ -245,7 +245,7 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
245
245
|
|
|
246
246
|
- 触发场景:商城应用包把既有字段从可空升级为 `NOT NULL DEFAULT ...`,老租户的物理列已经存在,但历史记录仍为 `NULL`;导入器直接执行 `ALTER TABLE ... MODIFY COLUMN ... NOT NULL` 时,MySQL 报 `Invalid use of NULL value`,整个安装分片失败。
|
|
247
247
|
- 根因:物理列同步只比较类型、可空性、默认值和注释,没有在收紧可空性前迁移存量数据。列默认值只影响后续写入,不会自动修复既有 `NULL`。
|
|
248
|
-
-
|
|
248
|
+
- 通用规则:除所有主键(不限于 `Id`,包括复合主键的每一列)及自增/identity 列外,平台普通物理列一律允许 `NULL`。导入器必须将历史 `PhysicalColumns.IS_NULLABLE=NO` 归一为允许为空,不收紧已有列,不为迁就非空约束而回填零/空串/租户值;业务必填由表单与后端事件校验。默认值独立保留。启动前必需的核心表必须在共享租约内完成可空兼容,再插入运行时接口;不能等商城运行后才修复商城自身的启动前置结构。
|
|
249
249
|
- 自动化检查:构造 `V8Limit NOT NULL` 无默认值的旧表、含 `NULL` 的历史记录及带默认值/注释/排序规则/索引的列;同时覆盖普通列已允许 NULL 但被 DROP DEFAULT 的情况,使用 `SELECT DEFAULT(列) FROM 表 LIMIT 0` 识别元数据无法区分的缺失默认标志。断言 Id 仍为主键、旧数据和列属性保留,随后省略可选字段的 INSERT 成功;同版本重启和二次安装不重复 DDL 或回填业务值。
|
|
250
250
|
|
|
251
251
|
- 历史数据库的可选菜单关联字段可能仍为整数类型。引用该表的应用包只能按实际物理类型把空字符串归一为 `NULL`,不能将无关联猜成 `0`,也不能越过表所有权修改既有类型;非空值及文本列保持原样。验收同时覆盖旧整数列、新文本列、重复安装和无效非空值继续报错。
|
|
@@ -351,3 +351,5 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
351
351
|
- 强制规则:启动前接口闭包必须由全部内置官方平台应用包动态计算,并递归解析接口调用;当前官方基线为 9 个包、106 个接口(98 个 `Managed`、8 个 `CreateIfMissing`),数量只是发布快照,运行逻辑不得硬编码。门禁逐项校验 Key、地址、启用状态、匿名/HTTP 状态和源码策略;缺失时从受信内置包按原所有权补齐,所有项严格回读成功后才对外提供流量。`CreateIfMissing` 首次创建后永不覆盖客户代码。
|
|
352
352
|
- 控制面自举:官方资源发布必须先保证 `get-microi-upgrade-resource` 自身达到当前协议,再发布其它包;若控制面旧版本不能校验新包,先只发布并回读这一项,刷新动态路由缓存后再发布剩余资源。发布响应超时或 Redis 广播失败时先按资源 SHA 回读判断提交/回滚,禁止盲目重放。
|
|
353
353
|
- 兼容与验收:历史 Controller 回退不能再转调可能缺失的同一个接口引擎;保留旧路由时必须使用可信 Core 原子或明确返回可诊断兼容结果。自动化测试应扫描 PC、UniApp、内置应用包和接口源码的全部 `/apiengine/` 与 `V8.ApiEngine.Run` 引用,证明每个依赖由官方包声明;真实启动必须对每个启用租户输出开始、缺项、修复、逐项成功及最终汇总日志,并同时验证匿名、登录态、商城批量计划和重复启动幂等。
|
|
354
|
+
|
|
355
|
+
跨租户安装验收必须检查 `sys_microiservice.MsUrl`:受托管文件运行时的入口必须使用目标租户与目标 AppKey;数据库运行时保留 `db`,显式外部运行时保留外部地址。源码摘要与编译资源摘要仍需独立回读。
|
|
@@ -11,7 +11,9 @@ description: Microi 数据源引擎设计、调用与安全规范。用于配置
|
|
|
11
11
|
|
|
12
12
|
数据源引擎适合复用“只读或计算型数据获取”,支持 `SQL`、`V8`、`JSON`。需要跨表事务、状态推进、扣减库存或外部副作用时应创建接口引擎,不要把数据源当业务命令。
|
|
13
13
|
|
|
14
|
-
数据源定义保存在 `sys_datasource`,属于平台控制面:创建、修改、删除、匿名开关和角色配置只允许 `Level >= 9999` 的可信管理链路。普通角色只能调用已经授权的数据源。
|
|
14
|
+
数据源定义保存在 `sys_datasource`,属于平台控制面:创建、修改、删除、匿名开关和角色配置只允许 `Level >= 9999` 的可信管理链路。普通角色只能调用已经授权的数据源。
|
|
15
|
+
|
|
16
|
+
兼容 HTTP 入口为 `POST /api/DataSourceEngine/GetData` 与 `POST /api/DataSourceEngine/Run`;新代码优先使用前后端类型化的 `V8.DataSourceEngine.Run/RunAsync`,兼容路由仍必须执行当前租户、角色和数据源权限校验。
|
|
15
17
|
|
|
16
18
|
## 标准调用
|
|
17
19
|
|
|
@@ -18,12 +18,20 @@ description: Microi 定时任务与可靠后台任务规范。用于配置 Micro
|
|
|
18
18
|
|
|
19
19
|
## 平台对象
|
|
20
20
|
|
|
21
|
-
Quartz
|
|
21
|
+
Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任务。V8 中的 `V8.Method.ManageScheduleJob` 用于能力发现、任务查询和受控管理,必须绑定当前租户的管理员身份。任务配置、接口引擎代码和执行日志属于控制面,只允许 `Level >= 9999` 维护;业务用户只能触发明确授权的后台动作。
|
|
22
22
|
|
|
23
23
|
任务通常调用稳定的 `ApiEngineKey`。接口引擎返回 `Code=1` 只表示本次执行成功,不代表调度系统可忽略重试与幂等。
|
|
24
24
|
|
|
25
25
|
## 多节点设计
|
|
26
26
|
|
|
27
|
+
### 执行日志与只读诊断
|
|
28
|
+
|
|
29
|
+
- 新执行/失败/跳过记录使用 `ScheduleExecutionLog` 进入系统日志队列,落入 `sys_log_<tenant>/log_yyyyMM`;固定 `TargetType=ScheduledJob`、`TargetId=JobName`,`EventId` 幂等重放。日志队列失败不得改变业务结果,不再回写关系库日志表。
|
|
30
|
+
- 表单使用字段级 Tabs,分别放置“运行日志”和“历史日志”只读表格;仅显示的页签发起查询。历史 `diy_schedule_job_log` 保留,不自动删除、搬迁或清空。
|
|
31
|
+
- `platform-schedule-job` 的 `logs/historylogs` 要求任务名、月份,每页最多 100 条,按时间+Id 游标多取一条判断 `HasMore`,不计算多年数据总数。Mongo 索引为 `(TargetType,TargetId,CreateTime,EventId)`;历史表索引 `(JobName,CreateTime,Id)` 通过声明式应用包交付并现场回读。
|
|
32
|
+
- 用 `microi_query_job_runtime` 或 `microi_run_engine` 的 `Action=diagnostics` 核验启动、待机、实际执行数、领取进展、设置读取失败、触发器与心跳。一个租户的设置读取超时只能关闭该租户,不能拖住其它租户;每租户最多一个在途读,不能按轮询叠加请求。
|
|
33
|
+
- MongoDB 连接或协议不兼容必须显示查询失败,不能伪装为空日志;先验证目标 Mongo 与驱动兼容。镜像更新不等于 Mongo 升级,队列接受不等于日志已持久化,spool 应在持久卷并验收恢复重放。
|
|
34
|
+
|
|
27
35
|
### 运行时间刷新与配置版本分离
|
|
28
36
|
|
|
29
37
|
- Quartz 周期同步 `LastTime/NextTime` 是运行状态投影,不能调用通用 `UptFormData` 生成配置版本或数据日志;用户保存名称、Cron、代码等配置仍走原表单事件和版本链路。
|
|
@@ -37,7 +45,7 @@ Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任
|
|
|
37
45
|
- 开启时在 Quartz 领取触发器、处理 Misfire 之前按租户过滤;领取后、真正触发前重新读取系统设置缓存。禁止仅在 `IJob.Execute`、Listener veto 或业务 V8 入口 return:共享 Quartz 可能已经推进 NextFireTime,造成旧版漏执行。
|
|
38
46
|
- 集群故障恢复也不得清理停用租户的在途记录或创建其补偿触发器。Quartz 以故障节点为单位清理记录,所以同一故障节点混有被停用租户时,新版推迟该故障节点整组恢复,交给旧节点或关闭开关后处理;其它健康节点仍正常领取。
|
|
39
47
|
- 正常保存系统设置在事务提交后失效缓存,下一次调度检查生效,不用重启;不是强制中断,已经开始的任务允许完成。缓存/配置读取失败拒绝该租户的新领取,不影响其它健康租户;Redis/失效通知异常时不能承诺硬实时。
|
|
40
|
-
- 停用期间只读观察周期计划,不推进共享触发器;每个“租户 + Job + Trigger +
|
|
48
|
+
- 停用期间只读观察周期计划,不推进共享触发器;每个“租户 + Job + Trigger + 计划时间”向 Mongo 日志队列提交确定性事件,包含 `Status=Skipped`、`Executed=false`、`Reason=SystemTaskSchedulingDisabled` 和中文说明。Redis 原子预留与 Mongo 确定性主键共同防止多新版节点重复记录;日志说明仅代表新版未执行,旧版仍可能正常执行。不补跑业务、不补写进程停机历史;新增/修改计划的日志目录最多约 10 秒更新。
|
|
41
49
|
- 普通接口调用、MQ 消费、升级/应用安装等持久后台任务不属于此开关的范围。手动触发 Quartz 任务仍经过门禁。
|
|
42
50
|
- 交付顺序:先安装字段并打开开关,再让新版节点参与调度;确认旧版所有调度进程已停止且在途任务完成后,关闭开关交接。不同业务库分别设置,不能用一个租户的值控制全部租户。
|
|
43
51
|
- 验收至少覆盖:默认兼容、开关实时读取、租户隔离、共享库旧节点继续领取、领取后开关变化不推进触发器、Misfire 不误推进、多节点日志去重;不得在真实生产任务上制造副作用做测试。
|
|
@@ -74,6 +82,8 @@ return { Code: 1, Data: { IdempotencyKey: idempotencyKey } };
|
|
|
74
82
|
|
|
75
83
|
## 失败、重试与停机
|
|
76
84
|
|
|
85
|
+
- 先证明任务真的在执行:读 `Scheduler.IsStarted`、`Scheduler.NumberOfJobsExecuted` 和 `Acquisition.LastAcquisitionError`,参考 `microi.doc/docs/doc/system-engine/job.md` 的“任务不执行”。`diy_schedule_job.Status=正常`、`diy_schedule_job.NextTime` 和“插件启动成功”都不能证明触发成功;列表/详情页的 `LastTime/NextTime` 来自运行时,直接查表看到的是库内快照。
|
|
86
|
+
- 领取错误含 `Key 'IDX_microi_job_T_NFT_ST' doesn't exist` 时,是 Quartz 3.19 MySQL 方言依赖 `USE INDEX (IDX_{tablePrefix}T_NFT_ST)` 与 `IDX_{tablePrefix}T_NFT_ST_MISFIRE`,而触发器表缺少这两个索引(常见于历史租户库仍是旧 `QRTZ_` 前缀索引名)。平台调度器初始化会按前缀幂等补齐;人工抢修可直接执行文档中的两条 `CREATE INDEX`,索引名大小写不敏感,补完后无需重建任务或 Cron。
|
|
77
87
|
- 失败记录错误分类、重试次数和 `NextRetryTime`,采用有上限退避;永久错误进入人工处理。
|
|
78
88
|
- 外部调用设置超时;无法确认对方是否成功时用业务幂等号查询,不盲目重发。
|
|
79
89
|
- 服务停机先停止接单,再在有限宽限期排空或持久化;重启扫描未完成任务。
|
|
@@ -5,7 +5,13 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
5
5
|
|
|
6
6
|
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
7
|
|
|
8
|
-
# Microi.Client 前台源码架构说明
|
|
8
|
+
# Microi.Client 前台源码架构说明
|
|
9
|
+
|
|
10
|
+
表单设计保存请求必须使用 `DiyCommon.GetOsClient()`,不能将导入表定义残留的 `OsClient`
|
|
11
|
+
作为传输租户;元数据来源与当前会话租户是不同概念。回归应覆盖从另一租户迁入的表定义,
|
|
12
|
+
验证表和字段保存成功且会话保持有效,不通过放宽后端租户鉴权修复。
|
|
13
|
+
右上角授权类型优先读取公开启动配置 `SysConfig.PlatformEdition`,兼容旧版会话查询;
|
|
14
|
+
`SysConfig.HideSystemLicenseVersion` 缺省关闭,标签可点击跳转 `/license`,不能因一次请求失败永久消失。
|
|
9
15
|
|
|
10
16
|
<!-- microi-progressive:begin -->
|
|
11
17
|
<!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=9b949c68b0867fc1ecf2e6cb1fd1bec45d22c01ad3be63485e0376d0183d1795 -->
|
|
@@ -13,12 +13,25 @@ description: 在 Microi Code、Codex 或 DeepSeek Harness 中完成 Microi吾码
|
|
|
13
13
|
|
|
14
14
|
## Microi Code 桌面宿主
|
|
15
15
|
|
|
16
|
-
- Microi Code
|
|
16
|
+
- Microi Code 是内部仓库中的独立桌面发行物,直接基于 DataElement/dsh-desktop 与 DeepSeek Harness 二次开发,内置固定版本的 Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
|
|
17
17
|
- 官方 AI 登录只走桌面账号窗口,固定 `https://api.itdos.com`、`OsClient=iTdos`,使用当前用户的中转 Key 和额度。不要让用户把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
|
|
18
|
-
-
|
|
18
|
+
- 业务连接在「服务器连接(MCP)」中单独添加、登录;官方 AI 账号不授予业务租户权限。项目初始化和资源同步优先使用桌面「项目资源」;其余业务继续调用同源 MCP 的原工具。
|
|
19
19
|
- macOS 登录凭据通过桌面 Keychain/受限 IPC 管理;不要在 macOS 改跑当前只支持 Windows 凭据恢复的 `microi auth login`。不要手改 Token 文件。
|
|
20
20
|
- 桌面安装包中的 Harness、Node 和同源资产随桌面版本升级;不运行 npm 自更新去改写正在使用或已签名的安装目录。外部 Codex / WorkBuddy / CLI 的后台更新规则保持不变。
|
|
21
|
-
-
|
|
21
|
+
- 桌面 UI 沿用 dsh-desktop 的设计系统;首页保留 dsh 原生会话区,并在下方用无外层卡片边框、无整块背景的差异层完整展示吾码 AI 大类与 29 项图像工具。工具 Id、名称和分类以 `Microi.Client/src/views/ai-engine/ai-image-tool-directory.js` 为事实源,点击时把 `workspace/tool` 路由参数带入 `/#/mic-ai-engine`;模型来源可选当前对话模型、吾码官方中转站或已登录服务器连接。服务器连接入口和“预览版”不重复放进首页。AI 数据分析明确使用 `microi_run_engine` 调用 `mci_ai_data_assistant`,不能改成绕过 MCP 的直接数据库访问。
|
|
22
|
+
- Microi Code 左侧「功能区」动态读取 dsh 的 `settings.section` 注册表,并在主界面 `main` 面板中渲染原设置组件;第一项「Microi吾码」合并官方账号和吾码 AI,第二项为「服务器连接(MCP)」,之后是 dsh 原生设置。功能区与工作区可拖动调高,默认无滚动条;首页/聊天页不显示虚假选中态。底部入口显示「关于 v版本号」及 `LicenseType` 版本标签,连接手机入口保持同一行。品牌显示 `Microi Code` 与 `HARNESS` 标签,新安装默认深色,用户仍可切换浅色/深色。
|
|
23
|
+
- 桌面安装包版本从 `1.0.0` 开始,使用吾码三段十进制进位规则。Windows/macOS 的公开打包命令必须先执行仓库 `version:bump`,不能复用同版本覆盖已有产物;测试、类型检查和普通 Web 构建不升版。
|
|
24
|
+
- Windows 安装包的构建成功、Authenticode 签名、SmartScreen/商店信任、HDFS 上传与 CDN 回读是不同证据;双击 `一键打包Windows.cmd` 时自动探测 Microsoft Artifact Signing 或本机可信证书,没有凭据则继续生成明确标记的未签名包,显式 `-Signing Signed` 才失败关闭。签名必须先覆盖安装器及独立执行文件,再计算发布 SHA256。macOS 默认 `bash ./一键打包Mac.sh` 同样自动探测并在无凭据时生成未签名包;`--signed` 是正式门禁,必须在缺少证书或公证钥匙串时失败,并通过 `codesign`、`spctl`、`stapler validate` 后才标记已签名公证。
|
|
25
|
+
- 当前 Electron 桌面运行时不能直接打包 iOS/Android,也不能把现有 DMG 原样提交 Mac App Store。移动端和 MAS 版应作为受限客户端,复用账号、模型、会话、MCP 与桌面配对协议,把 Node/Harness/Shell/插件执行放到配对桌面或合规远端;分别完成 Apple/Google 签名和商店审核。
|
|
26
|
+
- 官方账号页和关于标签通过 `platform-current-user` 接口引擎读取当前 `sys_user.LicenseType`。桌面相关平台业务逻辑优先通过 `microi_itdos` 接口引擎实现;只有接口引擎缺少必需底层原子能力时才能改后端源码,并说明原因。
|
|
27
|
+
- 正式 Windows/macOS 安装包必须内置固定版本且经过 SHA-256 校验的 cloudflared,运行时优先使用安装包 `resources/bin`,避免首次联网临时下载。检查更新从 `https://api.itdos.com/microi-code/updates/` 的匿名接口引擎读取 YAML/JSON,安装包二进制仍通过 HDFS 流式发布。
|
|
28
|
+
- dsh-desktop 升级必须遵循 `Microi.Code/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
29
|
+
|
|
30
|
+
### 默认中文输出
|
|
31
|
+
|
|
32
|
+
- 面向用户的回答、计划、工具说明、错误解释和可见进度默认使用简体中文;代码、协议字段、命令、模型名称和路径保留原文。
|
|
33
|
+
- 这条规则通过 Microi Skills 同步到 Microi Code、Codex、DeepSeek Harness、WorkBuddy、CodeBuddy 和 OpenCode 的工作区指令;宿主或模型支持自定义系统提示时,也应将同一条规则放在最高优先级的用户可见输出约束中。
|
|
34
|
+
- 中文规则只能约束可见回答、计划和工具摘要;模型服务内部隐藏思考的语言由模型决定,客户端不能保证每一个内部 token 都是中文,也不应把内部思考当成可导出内容。
|
|
22
35
|
|
|
23
36
|
## 非阻塞自动更新(强制)
|
|
24
37
|
|
|
@@ -14,7 +14,7 @@ description: 当用户在 Codex、DeepSeek Harness、WorkBuddy、CodeBuddy、Qod
|
|
|
14
14
|
- Microi Code 是同仓独立桌面发行物,内置固定版本的 DeepSeek Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
|
|
15
15
|
- 官方 AI 登录只走桌面账号窗口,固定 `https://api.itdos.com`、`OsClient=iTdos`,使用当前用户的中转 Key 和额度。不要让用户把密码或 AI Key 写入对话、命令行、MCP 参数或模型配置。
|
|
16
16
|
- 业务连接在「服务器连接」中单独添加、登录;官方 AI 账号不授予业务租户权限。项目初始化和资源同步优先使用桌面「项目资源」;其余业务继续调用同源 MCP 的原工具。
|
|
17
|
-
- macOS
|
|
17
|
+
- macOS CLI 登录、`auth import --session-stdin` 与 MCP Token 恢复使用系统 Keychain;Windows 使用 DPAPI。只使用包含原生 Keychain 支持的正式 CLI,旧版或用户目录临时兼容补丁不能代替发布包。不要手改 Token 文件;导入后用 `doctor`、MCP `initialize`、`tools/list`、`microi_get_status` 回读。
|
|
18
18
|
- 桌面安装包中的 Harness、Node 和同源资产随桌面版本升级;不运行 npm 自更新去改写正在使用或已签名的安装目录。外部 Codex / WorkBuddy / CLI 的后台更新规则保持不变。
|
|
19
19
|
- 首次为浅色玻璃水纹,支持深色和自选主题色。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
20
20
|
|
|
@@ -165,7 +165,7 @@ microi init --workspace <工作区> --pull
|
|
|
165
165
|
|
|
166
166
|
`init` 必须能够在干净空目录中依次添加服务器连接、交互登录、生成 `microi.skills/`、`AGENTS.md`、`CLAUDE.md`、Copilot/Cursor/CodeBuddy 规则、CodeBuddy/Qoder/Comate 项目 Skill、typings、`jsconfig.json`,并配置 Codex、VS Code、Cursor、Trae、Claude Code、WorkBuddy、CodeBuddy、Qoder、Comate MCP。密码只允许隐式输入,禁止放入命令参数、对话记录或明文生成文件。Windows 需要静默恢复时,只能写入当前工作区 `Microi-V8-Engine/.microi-workspace-secrets.dpapi.json` 的 DPAPI CurrentUser 密文保险库;MCP 环境只保存该路径和 Key 名,保险库与同目录 Token 文件必须 Git-ignore。
|
|
167
167
|
|
|
168
|
-
安装/升级后若 `microi doctor` 返回“Token 签名验证失败”,先区分验签密钥变化与 20 天到期。新版 MCP
|
|
168
|
+
安装/升级后若 `microi doctor` 返回“Token 签名验证失败”,先区分验签密钥变化与 20 天到期。新版 MCP 会从 Windows 工作区 DPAPI 保险库或 macOS Keychain 重载精确 Profile 的帐号密码并自动续登、更新 Token/MCP;不得删除全部 Profile、清空 Token 文件或要求用户反复手工输入。同一 `OsClient` 的多条 SaaS 运行记录必须由后端在 JWT 初始化前收敛到同一个 `AuthSecret`,否则更新后仍会反复失效。
|
|
169
169
|
|
|
170
170
|
原生配置对应关系:
|
|
171
171
|
|
|
@@ -71,6 +71,9 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
71
71
|
- 每个文件的 `VisibleRoleIds` 是真实角色 Id 数组;空数组跟随表单权限。标签名称及 `_FileAccess`
|
|
72
72
|
由后端投影,不能作为客户端授权事实。默认真实持有角色的 Level 严格更高即可继承,
|
|
73
73
|
同级不同角色不继承;多选任一角色命中即可,仍须有菜单/表单/记录访问与编辑权限。
|
|
74
|
+
- `Config.FileUpload.ConfigurableRoleIds` 是“可配置角色列表”,使用真实角色 Id 数组,默认 `[]` 表示全部。
|
|
75
|
+
非空时,角色目录和后端新增附件授权都只允许该范围;缩小范围保留旧附件已有角色,可移除但不可再添加。
|
|
76
|
+
此范围只限制可选授权角色,不改变 Level 继承规则。先用 `microi_list_roles` 读取当前租户角色,禁止复制其它租户的 Id。
|
|
74
77
|
- 无权限附件默认只显示锁定占位、不显示名称;开启隐藏只改变展示,保存时服务端保留原附件,
|
|
75
78
|
篡改无权元数据、复制他人路径及删除含无权附件的整条记录均应失败。条件批量写附件/删除应改为逐条。
|
|
76
79
|
- 新附件必须通过当前记录/字段的私有上传取得短期 `_UploadProof`,保存后由服务端移除。
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
| `StaticText` | 静态文本 | 不承载业务状态 |
|
|
37
37
|
| `Html` | 可信 HTML 展示 | 必须净化,不拼接不可信内容 |
|
|
38
38
|
| `RichText` | 富文本 | `mediumtext`;输出需净化 |
|
|
39
|
-
| `CodeEditor` | 代码/JSON/SQL 编辑 | `mediumtext`;通常 `FormWidth=24
|
|
39
|
+
| `CodeEditor` | 代码/JSON/SQL 编辑 | `mediumtext`;通常 `FormWidth=24`;未配置 `DisplayMode` 默认 `Inline`,长配置表单显式用 `Dialog`。`CodeEditor.ButtonText` 默认 `编辑代码({{charCount}}字)`,支持 `{{charCount}}` 字符数、`{{lineCount}}` 行数 |
|
|
40
40
|
| `JsonTable` | JSON 表格 | `mediumtext`;定义结构与大小上限 |
|
|
41
41
|
|
|
42
42
|
## 文件与高级输入
|
|
@@ -137,7 +137,7 @@ Q1: 核心可见字段数、子表和强任务域?
|
|
|
137
137
|
V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.ClickFormTab('tabId')` 动态控制 Tab 显隐和默认选中。
|
|
138
138
|
|
|
139
139
|
<!-- /microi-progressive:chunk -->
|
|
140
|
-
<!-- microi-progressive:chunk id=microi-form-layout-003 sha256=
|
|
140
|
+
<!-- microi-progressive:chunk id=microi-form-layout-003 sha256=64c443ebb86b5bdc72003016065bd02f358ab62fcd9f35b945c4ddc60ee5de56 -->
|
|
141
141
|
## 5. 必填与禁止
|
|
142
142
|
|
|
143
143
|
### 5.1 必填
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-form-layout-006 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-form-layout-006 sha256=483f58dcfce758809aed7ba010c3d3e402ae9c2701b1cadb5d49b5d1f80a3880 -->
|
|
6
6
|
## 3. 三种分组的存储与配置
|
|
7
7
|
|
|
8
8
|
### 3.1 diy_table.Tabs(表级 Tab)
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
| 适合"互斥分组" | ✅ | ❌ |
|
|
115
115
|
|
|
116
116
|
<!-- /microi-progressive:chunk -->
|
|
117
|
-
<!-- microi-progressive:chunk id=microi-form-layout-007 sha256=
|
|
117
|
+
<!-- microi-progressive:chunk id=microi-form-layout-007 sha256=a54b3e56d39abb37261adc1d2f0ad92ecde35b70c4594f94fd2e830b8b4fa6e1 -->
|
|
118
118
|
## 7. 反例参考(必须避免)
|
|
119
119
|
|
|
120
120
|
### 反例 1:MRP 运算 3 字段单独建 Tab
|
|
@@ -172,7 +172,7 @@ diy_table.Tabs = [
|
|
|
172
172
|
```
|
|
173
173
|
|
|
174
174
|
<!-- /microi-progressive:chunk -->
|
|
175
|
-
<!-- microi-progressive:chunk id=microi-form-layout-008 sha256=
|
|
175
|
+
<!-- microi-progressive:chunk id=microi-form-layout-008 sha256=72af1ae1c77f1acef09e4741141d2aa97beaa7124b4ac824f24535c7f1ca2468 -->
|
|
176
176
|
## 8. 快速参考代码片段
|
|
177
177
|
|
|
178
178
|
### 8.1 MCP 创建表级 Tab
|
|
@@ -71,7 +71,7 @@ export function createApp() {
|
|
|
71
71
|
`Microi.Client` 主后台运行时已内置前后端同构的 `V8.Http.Get/Post/Patch` 及对应 Response 方法;表单事件、按钮 V8 等宿主前端新代码必须优先使用 `V8.Http`,旧 `V8.Post/Get` 仅作兼容保留,其参数和兼容规则以 `v8-http-integration/SKILL.md` 为准。独立项目使用本 SDK、且不在主后台 V8 宿主中时,才使用 SDK 自身的小写 `V8.get/post`、`ApiEngine`、`FormEngine`;不要把它们与宿主旧版大写 `V8.Post/Get` 混为一谈,也不要假设浏览器可以绕过第三方接口的 CORS。
|
|
72
72
|
|
|
73
73
|
<!-- /microi-progressive:chunk -->
|
|
74
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-002 sha256=
|
|
74
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-002 sha256=c514dbf966c96102ea04cdf6f967814f2babe74fceaaee6c1f771d351bfdb8eb -->
|
|
75
75
|
## 登录与验证码封装
|
|
76
76
|
|
|
77
77
|
SDK 或项目请求模块必须提供登录所需的系统配置和验证码薄封装,不要让页面散落手写。
|
|
@@ -132,7 +132,7 @@ SDK 的 `buildHeaders` 必须集中处理所有请求头,不能让页面、业
|
|
|
132
132
|
- 验收时检查真实网络请求:不得出现 `osclient: demo, demo`、`Authorization: Bearer xxx, Bearer xxx` 这类逗号合并值。
|
|
133
133
|
|
|
134
134
|
<!-- /microi-progressive:chunk -->
|
|
135
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-004 sha256=
|
|
135
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-004 sha256=bdb3bd646b06d4fb03c4fb62c8e76a22850e79b4ad230fe19b3feabc6f0578a0 -->
|
|
136
136
|
## 上传规则
|
|
137
137
|
|
|
138
138
|
`V8.uploadFile` 是 Microi 前端唯一允许的上传入口。SDK 实现必须:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-006 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-006 sha256=85694df371b7b889b5bf4aea5bc98d604232eb5c7b88b8a0eae8a26d70877009 -->
|
|
6
6
|
## Token、当前登录用户与当前终端登录协议
|
|
7
7
|
|
|
8
8
|
Microi 后端不是只保存一个全局 Token。每个租户、每个 `sys_user` 在 Redis 中维护一份 `CurrentToken`,其中 `CurrentUser` 表示平台当前登录用户,`Tokens` 表示该用户的多个当前终端登录。每个终端项至少包含 `Token`、`ClientType`、`Did`、`IP`、`CreateTime`、`UpdateTime`;退出、管理员清除登录信息、同终端重新登录或 Token 轮换都会影响该列表。
|
|
@@ -57,6 +57,7 @@ const result = await V8.refreshToken();
|
|
|
57
57
|
- UniApp/App/小程序在 `App.onShow` 调用 `resumeAuthSession(false)`。
|
|
58
58
|
- VS Code 在扩展激活后维护 Token,并在 `vscode.window.onDidChangeWindowState` 恢复焦点时立即检查。
|
|
59
59
|
- 多请求、多 Tab 续签必须 single-flight。PC 后台可使用 Web Locks;收到响应时,如果本地 Token 已被其它 Tab 更新,旧请求不得把旧 Token 覆盖回来或清掉新登录态。
|
|
60
|
+
- 续签请求即使以 `auth:false` 调用,也必须绑定发起时的会话(SDK 内部使用 `sessionBound:true`);退出或重新登录后的旧续签响应不得恢复旧会话。UniApp 登录缓存写入后须回读确认 Token 与用户都已保存,失败时清理半登录态并留在登录页,禁止继续欢迎提示和导航。
|
|
60
61
|
- 调用 `/api/SysUser/RefreshToken` 时同时传旧 `authorization`、当前 `OsClient`、原终端 `_ClientType`,请求头继续传稳定 `did`。不要频繁无条件换新。
|
|
61
62
|
|
|
62
63
|
### 失效提示与租户边界
|
|
@@ -83,13 +84,13 @@ const result = await V8.refreshToken();
|
|
|
83
84
|
- 管理员调用 `ClearUserLoginInfo` 后,旧 Token 返回 `SessionMissing` 或等价明确原因,前端不再循环续签。
|
|
84
85
|
|
|
85
86
|
<!-- /microi-progressive:chunk -->
|
|
86
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-007 sha256=
|
|
87
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-007 sha256=936e2f5619bb4aecfea4e42f46e297a78b816782d648b19d4b9a60ced710c974 -->
|
|
87
88
|
## 仅支持 Vue 3
|
|
88
89
|
|
|
89
90
|
新的 Microi 前端工作只支持 Vue 3。不要把 Vue2、Vuex、`Vue.prototype` 或 Vue2/uni-app 条件编译加入 `microi.v8.js`。状态管理属于项目本身,通常使用 Pinia 或本地组合函数;SDK 只负责平台访问、请求、鉴权、上传、资源 URL 和小工具。
|
|
90
91
|
|
|
91
92
|
<!-- /microi-progressive:chunk -->
|
|
92
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-008 sha256=
|
|
93
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-008 sha256=70275fb9b5183647c002b5a14841a0dced68e211ccd43d95c2df53bc72938aa6 -->
|
|
93
94
|
## Key-Value 枚举的跨端约定(强制)
|
|
94
95
|
|
|
95
96
|
- PC、UniApp、小程序和 Web 页面遇到简单枚举时,应从字段元数据或业务接口返回的公开 `{Key,Value}` 选项获取数据源;`Value` 只负责展示,`Key` 才能进入表单值、URL、缓存键和接口筛选参数。
|
|
@@ -98,7 +99,7 @@ const result = await V8.refreshToken();
|
|
|
98
99
|
- 兼容历史数据时,客户端可以短期识别旧 Value,但提交和新 URL 必须立即归一为 Key;长期迁移由服务端完成并回读验证。
|
|
99
100
|
|
|
100
101
|
<!-- /microi-progressive:chunk -->
|
|
101
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-009 sha256=
|
|
102
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-009 sha256=c1737089a40664006a83fea85d08aca1362ab447ad614c46202df9e165fea62f -->
|
|
102
103
|
## 界面层独立
|
|
103
104
|
|
|
104
105
|
SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue Router 或 axios。界面反馈通过可配置适配器提供:
|
|
@@ -111,7 +112,7 @@ SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue
|
|
|
111
112
|
这样同一个 SDK 才能同时用于 uni-app、PC 网站、后台扩展页面和文档演示。
|
|
112
113
|
|
|
113
114
|
<!-- /microi-progressive:chunk -->
|
|
114
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-010 sha256=
|
|
115
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-010 sha256=e70dbff2f66a986a699fc5ac778b61cc5fb0a49e1a376d955956a87bb0c4d39c -->
|
|
115
116
|
## 验证
|
|
116
117
|
|
|
117
118
|
将项目改为使用 SDK 后:
|
|
@@ -130,7 +131,7 @@ SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue
|
|
|
130
131
|
- 自动化检查:生产构建后扫描 JS 产物不得包含本地 ApiBase,并在正式域名上下文断言接口请求 origin 等于配置的生产 API;本地 `npm run dev` 仍应命中开发 API。
|
|
131
132
|
|
|
132
133
|
<!-- /microi-progressive:chunk -->
|
|
133
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-011 sha256=
|
|
134
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-011 sha256=49b3d764342f0d9c70c93b1462ce65d29f910770c0e0f10c8a8e79f0dc94453e -->
|
|
134
135
|
## 搭配 MCI-UI
|
|
135
136
|
|
|
136
137
|
SDK 负责平台能力,MCI-UI 负责产品界面。新的 Microi Vue3 项目应同时使用:
|
|
@@ -143,7 +144,7 @@ SDK 负责平台能力,MCI-UI 负责产品界面。新的 Microi Vue3 项目
|
|
|
143
144
|
不要在 SDK 内解决界面状态、骨架屏、富文本间距或安全区布局。这一层应使用 MCI-UI 组件处理。
|
|
144
145
|
|
|
145
146
|
<!-- /microi-progressive:chunk -->
|
|
146
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-012 sha256=
|
|
147
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-012 sha256=bfbc732893154d636aeea6d9a28ade3ecb0ab5e717ca19b0dff9bbd45ccc17d9 -->
|
|
147
148
|
## MicroApp 宿主 Token 同步
|
|
148
149
|
|
|
149
150
|
Vue3 前端微服务通过 `window.microApp.getData()` 接收主平台上下文时,不能只把 `token` 放进普通配置对象后假设请求会自动携带。标准 `microi.v8.js` 必须支持 `config.token`,且 `getToken()` 要优先读取运行时 token,再回退到 `storage[tokenKey]`。微服务必须复用同一个 V8 客户端实例,不能在每次按钮点击时重新 `createMicroiV8()`。
|
|
@@ -12,7 +12,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
12
12
|
自动触发:只要任务涉及 Microi 移动端应用、H5、微信小程序、App 构建、uni-app 项目、登录页、tabbar、首页、我的页、工作台、报告页、视觉重设计或移动端验收,即使用户没有明确点名,也要应用本 skill。
|
|
13
13
|
|
|
14
14
|
<!-- microi-progressive:begin -->
|
|
15
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=
|
|
15
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=a900075c32d4cecb8ac00de762363b7eb4db5bb693795e7207cc8d133b4a962b -->
|
|
16
16
|
## 1. 导航和快捷入口必须使用真实图标
|
|
17
17
|
|
|
18
18
|
底部导航、首页快捷入口、会员中心快捷项、九宫格操作和悬浮操作,必须在文字上方或旁边显示可识别的图标。
|
|
@@ -40,7 +40,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
40
40
|
- UniApp H5 桌面预览可以显示手机壳;真机和浏览器移动设备仿真必须自动去壳并铺满视口。自动化测试要分别断言桌面手机壳存在、移动端手机壳标题隐藏,同时检查所有底部菜单包含真实图标节点。
|
|
41
41
|
|
|
42
42
|
<!-- /microi-progressive:chunk -->
|
|
43
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-001 sha256=
|
|
43
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-001 sha256=a5e92f4e6114635b73be59d2a550294bb79dd8c60a3cc2133be16c934e05da8e -->
|
|
44
44
|
## 1.1 包体资源必须按用途分层
|
|
45
45
|
|
|
46
46
|
- 构建前扫描图片、音频、视频、字体和第三方资源;公开的大资源优先上传到当前租户 HDFS 公有桶并通过 `sys_config.FileServer`/CDN 引用,敏感资源使用私有桶。
|
|
@@ -51,7 +51,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
51
51
|
- 迁移到 HDFS/CDN 后必须从构建产物确认原大文件已经消失,并从业务记录/配置回读相对 `Path`;页面要先加载当前租户 `SysConfig.FileServer`,不得以源码硬编码 CDN 域名替代运行期配置。远程资源加载失败时只能回退到轻量本地占位,不得把原大图重新塞回主包。
|
|
52
52
|
|
|
53
53
|
<!-- /microi-progressive:chunk -->
|
|
54
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=
|
|
54
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=24c611992557e53b7bce165d5c555486c8b171c71e130359b2d9bc9228728791 -->
|
|
55
55
|
## 2. 不要猜测 Microi 前端 SDK 登录接口
|
|
56
56
|
|
|
57
57
|
编写登录代码前,先检查本地项目 SDK 封装,例如 `src/utils/microi.v8.js`、`src/utils/api.js`,或标准 `microi.uniapp` 登录实现。
|
|
@@ -78,7 +78,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
78
78
|
- 使用真实系统账号登录后,必须验证“我的”页显示已登录角色,首页/工单/报告不再出现未登录提示,刷新页面或切换底部导航后仍保持一致。
|
|
79
79
|
|
|
80
80
|
<!-- /microi-progressive:chunk -->
|
|
81
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-003 sha256=
|
|
81
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-003 sha256=fec4c841ed7a897643a4c16337dce79a9be22931866af8aa7f888cbae5e72a20 -->
|
|
82
82
|
## 2.1 登录验证码必须跟随 Sys_Config.EnableCaptcha
|
|
83
83
|
|
|
84
84
|
PC 端、H5、App、微信小程序或任何自定义前端只要调用 `/api/SysUser/login`、`/api/SysUser/Login` 或 `V8.Login(param)`,都必须先读取 `Sys_Config` 的 `EnableCaptcha` 配置,并按配置决定是否展示和提交图形验证码。
|
|
@@ -104,7 +104,7 @@ PC 端、H5、App、微信小程序或任何自定义前端只要调用 `/api/Sy
|
|
|
104
104
|
- 参考标准实现:`microi.uniapp/src/pages/login/index.vue`。
|
|
105
105
|
|
|
106
106
|
<!-- /microi-progressive:chunk -->
|
|
107
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-004 sha256=
|
|
107
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-004 sha256=84a0f768af152f584f87643e1037a0ae57261df8947cc59710e1f021b99c287f -->
|
|
108
108
|
## 3. OsClient 请求头不得重复
|
|
109
109
|
|
|
110
110
|
Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览器、代理或服务端运行时可能把 `OsClient` 和 `osclient` 这类大小写重复键合并成 `demo, demo`,导致租户识别失败。
|
|
@@ -126,7 +126,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
126
126
|
- 微信/支付宝/飞书/抖音等小程序授权登录接口也必须检查,例如 `/apiengine/miniprogram-login`,不得出现 `osclient: demo, demo` 这类合并值。
|
|
127
127
|
|
|
128
128
|
<!-- /microi-progressive:chunk -->
|
|
129
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-005 sha256=
|
|
129
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-005 sha256=aefc3f7242a62ac411fa234fe322dd7726a8ed7db4f0d35e01cc364a36e8a335 -->
|
|
130
130
|
## 3.1 小程序授权登录必须可追踪、可读错误
|
|
131
131
|
|
|
132
132
|
微信开发者工具的模拟授权与体验版真机调用不是同一条真实链路。手机号授权登录接口必须按阶段诊断,不能只返回“手机号登录失败”。
|
|
@@ -145,7 +145,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
145
145
|
- 体验版真机复测授权登录;不能只以开发者工具模拟成功作为上线依据。
|
|
146
146
|
|
|
147
147
|
<!-- /microi-progressive:chunk -->
|
|
148
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-006 sha256=
|
|
148
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-006 sha256=e2446ca4c0fca61d3c748c2f91c585d9da0df9ee9a0170f70d823b0c0745a88e -->
|
|
149
149
|
## 3.1.1 手机号快速验证前置页不得混淆腾讯官方
|
|
150
150
|
|
|
151
151
|
- 调用手机号快速验证组件前展示的登录页、弹窗、按钮、说明、分享标题和失败提示中,禁止出现“微信”“微信官方”“微信登录”“一键登录”等可能让用户误认为腾讯官方功能或官方产品的文案。
|
|
@@ -154,7 +154,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
154
154
|
- `build:mp-weixin` 后必须扫描登录页源码和 `dist/build/mp-weixin/pages/login/` 产物中的可见文案,并对手机号快速验证前置页截图;发现混淆词、官方 Logo 或近似元素时阻止上传和提审。
|
|
155
155
|
|
|
156
156
|
<!-- /microi-progressive:chunk -->
|
|
157
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-007 sha256=
|
|
157
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-007 sha256=15dc4a001ce3bf6f3620b741cf1bf7dd92e4ff8372eeb256f01c5e2aabba8398 -->
|
|
158
158
|
## 3.2 微信小程序每个页面默认支持分享
|
|
159
159
|
|
|
160
160
|
小程序项目必须默认支持转发给朋友和分享到朋友圈,不能只给首页或公开页添加分享。登录和权限控制属于访问阶段,不得用来隐藏分享能力。
|