@microi.net/cli 5.7.4 → 5.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/README.md +71 -71
- package/assets/build-meta.json +7 -7
- package/cordis.patch.yml +2 -2
- package/package.json +1 -1
- package/scripts/mcp-server.js +101 -101
- package/scripts/microi-cli.js +5 -5
- package/scripts/microi-codex-broker.js +2 -2
- package/scripts/microi-codex-router.js +2 -2
- package/scripts/microi-skills.meta.json +221 -218
- package/skills/.microi-skills-version.json +3 -3
- package/skills/.progressive-disclosure-manifest.json +25 -25
- package/skills/ai-engine/SKILL.md +37 -37
- package/skills/ai-engine/references/ai-employees.md +6 -4
- package/skills/app-store/SKILL.md +253 -249
- package/skills/job-engine/SKILL.md +21 -20
- package/skills/message-notification/SKILL.md +156 -155
- package/skills/microi-ai-application/SKILL.md +7 -3
- package/skills/microi-client-frontend/SKILL.md +39 -35
- package/skills/microi-codex/SKILL.md +11 -9
- package/skills/microi-codex-installer/SKILL.md +5 -5
- package/skills/microi-datasource-mapping/SKILL.md +5 -1
- package/skills/microi-microservice/SKILL.md +35 -34
- package/skills/module-engine/SKILL.md +59 -46
- package/skills/page-engine/SKILL.md +11 -1
- package/skills/playwright-e2e/SKILL.md +3 -3
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-file-upload/SKILL.md +189 -182
- package/skills/v8-mq-mqtt/SKILL.md +2 -1
- package/skills/v8-tcp-integration/SKILL.md +2 -2
- package/skills/v8-workflow/SKILL.md +93 -66
- package/skills/v8-workflow/references/workflow-configuration.md +49 -0
- package/skills/workspace-conventions/SKILL.md +261 -261
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -208
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +7 -7
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: microi-codex
|
|
3
|
-
description: 在 Microi
|
|
3
|
+
description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾码 VS Code 扩展的等价工作流,包括连接与登录、AI/MCP 初始化、V8/表单/模块/工作流同步、远程执行与诊断、性能测试、微应用、Playwright 和发布回读。用户提到吾码、Microi、V8引擎、Microi-V8-Engine 或要求使用吾码 AI 插件时使用。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Microi吾码 Codex / DeepSeek Harness Plugin
|
|
7
7
|
|
|
8
|
-
本插件与 `Microi.
|
|
8
|
+
本插件与 `Microi.Agent`、`@microi.net/cli` 共用配置、Token、MCP Server 和 Microi Skills。不要另写原生 HTTP、SQL 或第二套认证实现。
|
|
9
9
|
|
|
10
|
-
平台 Api/Web 版本入口可生成独立开发工具连接。收到连接 JSON 时,用 `microi auth import --session-stdin` 从标准输入导入,再运行 `microi ai init` 和 `microi doctor`;禁止将 Token 放入命令行、源码或日志,不再索取账号密码。开发 Token 使用现有终端有效期,可独立撤销;它只授权该业务租户,不能替代 Microi
|
|
10
|
+
平台 Api/Web 版本入口可生成独立开发工具连接。收到连接 JSON 时,用 `microi auth import --session-stdin` 从标准输入导入,再运行 `microi ai init` 和 `microi doctor`;禁止将 Token 放入命令行、源码或日志,不再索取账号密码。开发 Token 使用现有终端有效期,可独立撤销;它只授权该业务租户,不能替代 Microi Agent 的官方 AI 计费账号登录。访问密钥的最小业务 scope 不能替代完整 MCP 管理身份。第三方 App Secret 默认进入系统设置“安全与服务接入”,优先使用 `microi_manage_server_private_secret`。
|
|
11
11
|
|
|
12
12
|
每次 Microi 对话先完整读取工作区 `microi.skills/workspace-conventions/SKILL.md`;工作区尚未初始化时读取本插件同级 `../workspace-conventions/SKILL.md`。按其中首部完成创始人身份识别及平台功能四项同步检查,再进入专项流程;完整规则只维护该基础入口,不复制到本路由。
|
|
13
13
|
|
|
14
|
-
## Microi
|
|
14
|
+
## Microi Agent 桌面宿主
|
|
15
15
|
|
|
16
|
-
- Microi
|
|
16
|
+
- Microi Agent 是内部仓库中的独立桌面发行物,直接基于 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
|
|
22
|
+
- Microi Agent 左侧「功能区」动态读取 dsh 的 `settings.section` 注册表,并在主界面 `main` 面板中渲染原设置组件;第一项「Microi吾码」合并官方账号和吾码 AI,第二项为「服务器连接(MCP)」,之后提供 AI 员工、采集引擎、环境与服务管理入口,再接 dsh 原生设置。功能区与工作区可拖动调高,默认无滚动条;首页/聊天页不显示虚假选中态。底部入口显示「关于 v版本号」及 `LicenseType` 版本标签,连接手机入口保持同一行。品牌显示 `Microi Agent` 与 `HARNESS` 标签,新安装默认浅色,用户仍可切换浅色/深色。
|
|
23
23
|
- 桌面安装包版本从 `1.0.0` 开始,使用吾码三段十进制进位规则。正式新版本先在发布源码中执行 `version:bump`,核对并提交三个版本文件;Mac 拉取后使用 `bash ./一键打包Mac.sh` 在临时 Git 工作树中打包当前已提交版本,默认不再升版,失败也不能把生成文件留在原检出目录。`--current` 仅作旧命令兼容;同版本本地重打包不得覆盖已公开的不可变产物。测试、类型检查和普通 Web 构建不升版。
|
|
24
24
|
- Windows 安装包的构建成功、Authenticode 签名、SmartScreen/商店信任、HDFS 上传与 CDN 回读是不同证据;双击 `一键打包Windows.cmd` 时自动探测 Microsoft Artifact Signing 或本机可信证书,没有凭据则继续生成明确标记的未签名包,显式 `-Signing Signed` 才失败关闭。签名必须先覆盖安装器及独立执行文件,再计算发布 SHA256。macOS 默认 `bash ./一键打包Mac.sh` 同样自动探测并在无凭据时生成未签名包;`--signed` 是正式门禁,必须在缺少证书或公证钥匙串时失败,并通过 `codesign`、`spctl`、`stapler validate` 后才标记已签名公证。
|
|
25
25
|
- 当前 Electron 桌面运行时不能直接打包 iOS/Android,也不能把现有 DMG 原样提交 Mac App Store。移动端和 MAS 版应作为受限客户端,复用账号、模型、会话、MCP 与桌面配对协议,把 Node/Harness/Shell/插件执行放到配对桌面或合规远端;分别完成 Apple/Google 签名和商店审核。
|
|
26
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
|
-
-
|
|
27
|
+
- 正式 Windows/macOS 安装包必须内置固定版本且经过 SHA-256 校验的 cloudflared,运行时优先使用安装包 `resources/bin`,避免首次联网临时下载。检查更新从 `https://api.itdos.com/microi-code/updates/` 的匿名接口引擎读取 YAML/JSON,安装包二进制仍通过 HDFS 流式发布。
|
|
28
|
+
- Windows 安装验收必须包含旧卸载器损坏后的升级、同版本重装、超过 260 字符的路径以及全部文件 SHA-256 回读。安装器使用当次发布的兼容卸载器,并用固定哈希的 Unicode 7-Zip 直接解压到目标目录,禁止恢复临时目录解压后使用 NSIS `CopyFiles` 复制的流程;该流程会将路径或复制错误误报为“应用无法关闭”。进程检查仅匹配安装目录内的产品主程序及内置 Node,不能按整个目录匹配安装器或无关程序。
|
|
29
|
+
- 桌面平台 Worker 必须在真实安装包内验证 IPC 与 Windows DPAPI。旧保险库只有成功解密且明文为零字节时才允许迁移为空文档;损坏或其他 Windows 用户的保险库保留原文件并返回具体错误。启动初始化拒绝不能让 Node 服务退出;单元测试、安装成功与真实桌面账号/AI 员工页面联调是三个独立验收层。
|
|
30
|
+
- dsh-desktop 升级必须遵循 `Microi.Agent/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
29
31
|
|
|
30
32
|
### 默认中文输出
|
|
31
33
|
|
|
32
34
|
- 面向用户的回答、计划、工具说明、错误解释和可见进度默认使用简体中文;代码、协议字段、命令、模型名称和路径保留原文。
|
|
33
|
-
- 这条规则通过 Microi Skills 同步到 Microi
|
|
35
|
+
- 这条规则通过 Microi Skills 同步到 Microi Agent、Codex、DeepSeek Harness、WorkBuddy、CodeBuddy 和 OpenCode 的工作区指令;宿主或模型支持自定义系统提示时,也应将同一条规则放在最高优先级的用户可见输出约束中。
|
|
34
36
|
- 中文规则只能约束可见回答、计划和工具摘要;模型服务内部隐藏思考的语言由模型决定,客户端不能保证每一个内部 token 都是中文,也不应把内部思考当成可导出内容。
|
|
35
37
|
|
|
36
38
|
## 非阻塞自动更新(强制)
|
|
@@ -7,11 +7,11 @@ description: 当用户在 Codex、DeepSeek Harness、WorkBuddy、CodeBuddy、Qod
|
|
|
7
7
|
|
|
8
8
|
本技能负责发现、安装、初始化、升级和诊断 Microi吾码 AI 开发能力。唯一 npm 包为 `@microi.net/cli`;该包同时提供 `microi` CLI、Codex Plugin、DeepSeek Harness 原生 profile bundle、WorkBuddy/CodeBuddy 兼容插件清单、完整 Skills 与同源 MCP。Codex marketplace 名称固定为 `microi-net`,插件选择器固定为 `microi@microi-net`,禁止新建 `microi-official` 或第二个 npm 包。
|
|
9
9
|
|
|
10
|
-
只要本技能已经由 Microi.
|
|
10
|
+
只要本技能已经由 Microi.Agent、工作区 `microi.skills` 或已安装插件提供,用户说“帮我初始化 Microi吾码插件”时就必须识别该意图,用户不需要再次说出 npm 包名。全新 Codex 与空目录尚未加载任何吾码 Skill 时,用户只需在首次请求中明确 `@microi.net/cli`,例如“通过 `@microi.net/cli` 安装吾码 Codex 插件”;具备终端与网络权限的 AI 必须直接执行本技能中的确定性安装命令。安装完成后,更短的“初始化吾码”“添加服务器/MCP”“拉取全部 V8”均由插件 Skill 自动识别。
|
|
11
11
|
|
|
12
|
-
## Microi
|
|
12
|
+
## Microi Agent 桌面宿主
|
|
13
13
|
|
|
14
|
-
- Microi
|
|
14
|
+
- Microi Agent 是同仓独立桌面发行物,内置固定版本的 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
17
|
- macOS CLI 登录、`auth import --session-stdin` 与 MCP Token 恢复使用系统 Keychain;Windows 使用 DPAPI。只使用包含原生 Keychain 支持的正式 CLI,旧版或用户目录临时兼容补丁不能代替发布包。不要手改 Token 文件;导入后用 `doctor`、MCP `initialize`、`tools/list`、`microi_get_status` 回读。
|
|
@@ -131,7 +131,7 @@ microi dsh status --json
|
|
|
131
131
|
开发者从可信本地源码验收时,可以显式指定 marketplace 源:
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
|
-
microi codex install --yes --source <Microi.
|
|
134
|
+
microi codex install --yes --source <Microi.Agent目录>
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
普通用户不得被引导到来历不明的 Git、本地目录或第三方 registry。不得通过 VPN、伪造地区/企业身份或共享账号绕过 OpenAI 地区与身份政策。
|
|
@@ -147,7 +147,7 @@ microi dsh status --json
|
|
|
147
147
|
|
|
148
148
|
安装器必须调用 DSH 官方 `dsh plugin --profile <name> add <package>` 协议。唯一包 `@microi.net/cli` 通过 `dsh.bundle.patch=./cordis.patch.yml` 贡献 `@deepseek-ai/dsh-mcp-client` 配置,禁止另建 npm 包,也禁止把 `.mcp.json` 写给 DSH 后声称已安装。默认安装官方 `web` 与 `headless` profile;指定单个 profile 使用 `--profile <名称>`。
|
|
149
149
|
|
|
150
|
-
`status` 验收必须回读 `$DSH_HOME/profiles/<profile>/package.json`、安装包版本、bundle patch 与激活列表;工具入口应为 `mcp__microi__microi_codex`。安装后只说明“新 DSH 会话将加载”,不得终止或冒充热更新当前会话。开发者从可信源码验收使用 `microi dsh install --source <Microi.
|
|
150
|
+
`status` 验收必须回读 `$DSH_HOME/profiles/<profile>/package.json`、安装包版本、bundle patch 与激活列表;工具入口应为 `mcp__microi__microi_codex`。安装后只说明“新 DSH 会话将加载”,不得终止或冒充热更新当前会话。开发者从可信源码验收使用 `microi dsh install --source <Microi.Agent目录> --force`;普通用户只允许 npm 官方 registry 的精确版本。
|
|
151
151
|
|
|
152
152
|
## 空工作区与多宿主初始化
|
|
153
153
|
|
|
@@ -16,7 +16,11 @@ Microi 低代码平台中,`Select / Radio / Checkbox` 等选项组件支持两
|
|
|
16
16
|
| **Key ≠ Value**(推荐) | `"key1\|label1,key2\|label2"` | key (如 `"VIP"`) | label (如 `"VIP会员"`) | `"VIP\|VIP会员,普通会员\|普通会员"` |
|
|
17
17
|
| **Key = Value**(简单) | `"值1,值2,值3"` | 原始值 (如 `"普通会员"`) | 原始值 (如 `"普通会员"`) | `"普通会员,VIP"` |
|
|
18
18
|
|
|
19
|
-
> ⚠️ 注意:若误将 Key 与 Value 设置为相同中文,后台和 DB 中存的就是中文字符串(如 `Level='普通会员'`)。
|
|
19
|
+
> ⚠️ 注意:若误将 Key 与 Value 设置为相同中文,后台和 DB 中存的就是中文字符串(如 `Level='普通会员'`)。
|
|
20
|
+
|
|
21
|
+
### 字段 V8 必须按保存格式读取选中值
|
|
22
|
+
|
|
23
|
+
`SelectSaveFormat='Text'` 时,`V8.Form.<字段>` 可以是保存字段的原始文本;旧配置可能仍为对象或 JSON 文本。按钮不能无条件读取 `.TableName`、`.Id` 等对象属性。先按真实 Config 提取值并校验非空,再调用接口;接口失败和网络异常均在 `finally` 恢复 Loading。验收须覆盖文本、旧对象、JSON 文本和空选项。
|
|
20
24
|
|
|
21
25
|
---
|
|
22
26
|
|
|
@@ -44,6 +44,7 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
|
|
|
44
44
|
- `sys_microiservice`:已发布运行时。
|
|
45
45
|
- `sys_microiservice_page`:页面路由。
|
|
46
46
|
- 编译后的 HTML/JS/CSS/图片放公有 HDFS,源码不公开。
|
|
47
|
+
- 官方应用的独立体验入口统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶固定根承载最新版编译文件、`/{Version}/` 承载不可变历史编译文件;私有桶采用相同相对目录承载对应源码文件。宿主内部的 `/micro-app/{AppKey}/{RoutePath}` 是菜单路由,不是对外 CDN 体验地址。发布后核对 CDN 刷新完成、入口及资源可访问、业务 API 仍指向目标租户。
|
|
47
48
|
|
|
48
49
|
不能从 `sys_microiservice` 公有产物反推完整源码,也不把大 JS/CSS 长期塞数据库 JSON。
|
|
49
50
|
|
|
@@ -77,16 +78,16 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
77
78
|
### 线上目标在本地 Microi.Client 复现(强制)
|
|
78
79
|
|
|
79
80
|
- 先在一次性隔离 browser context 打开线上友好路由并读取
|
|
80
|
-
`window.__MICROI_RUNTIME_ENDPOINT__`;旧版回退读取页面全局、同源缓存和域名解析,禁止猜
|
|
81
|
-
ApiBase/OsClient。
|
|
81
|
+
`window.__MICROI_RUNTIME_ENDPOINT__`;旧版回退读取页面全局、同源缓存和域名解析,禁止猜
|
|
82
|
+
ApiBase/OsClient。
|
|
82
83
|
- 在新的独立 context 打开
|
|
83
84
|
`http://localhost:61500/?OsClient=<encoded>&ApiBase=<encoded>#/micro-app/{MsKey}/{RoutePath}`。
|
|
84
85
|
两个 URL 参数是当前页面最高优先级;初始化后回读同一个运行时对象确认命中目标。
|
|
85
86
|
- 同源普通窗口共享 Token、CurrentUser、ApiBase、OsClient。并行不同目标必须一组目标一个
|
|
86
87
|
Playwright `browser.newContext()` 或独立浏览器 Profile;多个无痕窗口不保证彼此隔离。
|
|
87
|
-
- 本地复现、主框架宿主验收、远端运行产物和生产部署分别报告;本地通过不能替代发布后回读。
|
|
88
|
-
- 新租户或历史还原库可能没有 `SysConfig.ApiBase`。微服务安装不得依赖该字段才能写入运行 HTML:按目标 `OsClient` 注入上下文,运行时使用同租户宿主的 `microApp.getData()` 或绑定该租户的 API 稳定入口,保留代理路径;不得沿用发布端上下文、跨租户宿主或把 HDFS/CDN 域名当成 API。独立 Web/UniApp 仍需有效的目标 API 配置。
|
|
89
|
-
- 登录用户的角色等历史字段可能返回数组、JSON 字符串或空值。列表运算前必须归一化类型,并优先使用当前接口给出的结构化字段;验收应使用真实旧格式数据验证页面渲染及导航,不能只断言接口成功或没有 `pageerror`,还应检查 Vue 捕获到的控制台异常。
|
|
88
|
+
- 本地复现、主框架宿主验收、远端运行产物和生产部署分别报告;本地通过不能替代发布后回读。
|
|
89
|
+
- 新租户或历史还原库可能没有 `SysConfig.ApiBase`。微服务安装不得依赖该字段才能写入运行 HTML:按目标 `OsClient` 注入上下文,运行时使用同租户宿主的 `microApp.getData()` 或绑定该租户的 API 稳定入口,保留代理路径;不得沿用发布端上下文、跨租户宿主或把 HDFS/CDN 域名当成 API。独立 Web/UniApp 仍需有效的目标 API 配置。
|
|
90
|
+
- 登录用户的角色等历史字段可能返回数组、JSON 字符串或空值。列表运算前必须归一化类型,并优先使用当前接口给出的结构化字段;验收应使用真实旧格式数据验证页面渲染及导航,不能只断言接口成功或没有 `pageerror`,还应检查 Vue 捕获到的控制台异常。
|
|
90
91
|
|
|
91
92
|
迁移 Vue2 定制页到独立 Vite 微服务时,不得假设宿主会提供 Tailwind/UnoCSS 等原子类;
|
|
92
93
|
页面依赖的宽高、颜色、间距、响应式和打印/下载样式必须由组件自身的语义 class 明确声明,
|
|
@@ -116,8 +117,8 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
116
117
|
|
|
117
118
|
- 创建/更新元数据:`microi_create_microservice`。
|
|
118
119
|
- 同步私有源码:`microi_sync_microservice_source`;本地工程必须优先传 `directory`,不构造 Base64 文件数组。
|
|
119
|
-
- 真实编译目录优先 `microi_publish_application_directory_stream` 流式发布。
|
|
120
|
-
- `changeSummary` 是最多 2000 字符的版本说明文本,不能传对象;v3 在首次 stage 创建版本时存入 `mci_ai_app_version.ChangeSummary`,后续同请求重放和恢复保留原说明。历史节点若发布完成但摘要仍为空,应报告后端版本缺口,不得把编译文件验证成功等同于日志验收通过。
|
|
120
|
+
- 真实编译目录优先 `microi_publish_application_directory_stream` 流式发布。
|
|
121
|
+
- `changeSummary` 是最多 2000 字符的版本说明文本,不能传对象;v3 在首次 stage 创建版本时存入 `mci_ai_app_version.ChangeSummary`,后续同请求重放和恢复保留原说明。历史节点若发布完成但摘要仍为空,应报告后端版本缺口,不得把编译文件验证成功等同于日志验收通过。
|
|
121
122
|
- 每次创建、修改、升级或重新发布微服务,必须先为目标精确 `AppVersion` 在 `sys_microistore_changelog` 写入完整日志,再同步源码、stage、finalize 或制作商城包。日志必须关联真实 `StoreId`,包含 `Title / ChangeType / Content / ReleaseTime`;流式发布显式传入与日志含义一致的非空 `changeSummary`。发布后同时回读商城日志、`mci_ai_app_version.ChangeSummary` 与包内 `PackageInfo.ChangeLog`;缺失或版本不一致必须失败关闭。
|
|
122
123
|
- 发布动作必须明确区分两种模式:默认“源码+编译产物”先把完整工程同步到私有桶并逐文件回读 SHA-256,再把 `dist` 流式发布到公有桶;显式“仅编译产物”只更新公有桶,必须在界面中告知其他用户仍会拉取上一次私有源码,禁止暗示源码已同步。
|
|
123
124
|
- 私有源码同步使用 `ReplacePrivateSourceOnly` 精确清理过期源码;兼容调用可以继续接受 `replace`,但实现不得用旧式全表 `Replace=true` 删除同一应用的公有运行产物元数据。
|
|
@@ -216,23 +217,23 @@ AI 生成菜单微服务时,应优先封装一个 `callMicroiHost(action, data
|
|
|
216
217
|
- 加载容器必须设置 `aria-busy="true"` 并提供可读状态文本;`prefers-reduced-motion: reduce` 时停用 shimmer。成功、空数据、失败和无权限是四种独立终态,失败不得永久停留在骨架。
|
|
217
218
|
- 骨架必须在 import/fetch 之前进入 DOM,切换期间不销毁宿主导航;真实浏览器验收要用网络节流或可控延迟分别截取首次打开和至少一次内部路由切换的骨架,再确认最终页面、前进/后退与错误重试均正常。
|
|
218
219
|
|
|
219
|
-
复盘:AI 工作流业务蓝图曾在路由切换后先显示空白/转圈,根因是只给异步组件配置了加载逻辑,
|
|
220
|
-
没有把路由加载、页面数据加载和最终几何统一成状态协议。通用规则是“路由 fallback + 页面内骨架 +
|
|
221
|
-
明确终态”三层同时存在,并以真实浏览器慢网截图作为交付门禁。
|
|
222
|
-
|
|
223
|
-
### 3D 数字孪生动态资产与许可门禁
|
|
224
|
-
|
|
225
|
-
- 通用 3D 设计器/渲染器与某一楼宇的定制数字孪生应使用不同 AppKey、源码目录、路由清单、运行资产与商城安装包。官方 `Platform` 包只拥有通用引擎和平台菜单;项目专属模型/贴图、业务表与字段、IoT 接口、演示数据和业务菜单属于独立业务应用(本项目采用 `MicroService`)。批量“安装/更新全部平台应用”只覆盖 `ApplicationType=Platform`,不得借平台包向所有租户散发某个客户的项目。拆分时要检查旧商城包的 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 回退选择,清空旧选择后重新制作安装包,并分别回读两个包的资源快照与真实浏览器入口。
|
|
226
|
-
- 道路车辆、人物、设备动画不能只靠静态截图验收。浏览器测试应同时断言对象数量、时间推进后的坐标/骨骼变化、路径末端回绕、切换楼层后的恢复及 `prefers-reduced-motion` 设置下的实际行为;测试探针只暴露非敏感数量和位置,不暴露 Token、人员或设备隐私。若持续运动本身是用户明确要求的核心功能,不得把系统的“减少动态效果”误用为整体动画总开关;只降级装饰性过渡,并提供可见、可键盘操作的暂停/恢复控制。页面隐藏或暂停期间冻结业务动画时钟,恢复时扣除停顿时间,避免物体瞬移。
|
|
227
|
-
- 外部 GLB/GLTF 进入官方运行包前,逐项保存作者、原始地址、许可证、是否允许商用和再分发、署名方式、三角面数、纹理大小及优化记录。“免费下载”、搜索摘要或仓库内没有许可证都不构成可再分发授权;`NC`、`ND` 或用途不明的资产默认不进入商业应用包。
|
|
228
|
-
- 可再分发的外部树木等高模要先校验原站提供的文件校验和,再用免费离线工具焊接顶点、做 LOD 简化和 WebP 纹理压缩;将运行 GLB 与原始下载、处理工具分离。单个共享资产实例化时不要给每棵树复制几何/贴图,也不要在销毁一个场景时释放仍被共享模板引用的 GPU 资源;异步加载完成后须确认原场景仍挂载,防止切换楼层后回填已卸载对象。测试应同时覆盖 GLB 魔数/大小、运行时加载数量与失败降级计数、移动端绘制预算、总览和近景截图。
|
|
229
|
-
- 品牌车辆和真实建筑只能在拥有明确资产/商标使用依据时描述为精确复刻。程序化或原创近似模型使用“风格化/演示模型”措辞,不得把车型标签当作厂商认证。视觉签收与功能、运行发布、商城包、目标租户安装是不同证据层。
|
|
230
|
-
- 运动物体优先使用可复用几何/材质、LOD、实例化和离屏回绕;相机近景仍要检查曲面法线、透明车窗、轮胎方向、脚底接地、穿模和阴影。页面隐藏时暂停动画,恢复时避免累积大时间差导致物体瞬移。
|
|
231
|
-
- 三维数据标牌可以使用透明 PBR 厚度几何、纹理文字与空间连线,但必须保留对齐的 DOM 点击/键盘目标、读屏文本和焦点环。小屏避碰要测试真实矩形交集,不能仅检查页面无横向滚动;把冲突标牌一律向上推会在工具条边界堆叠。玻璃 transmission 会额外渲染场景,密集人群应先量测绘制次数,再选择透明近似或折射质量档。
|
|
232
|
-
- 人群实例化须按可复用几何及材质属性分组,保留各人物肘膝关节矩阵,颜色用实例属性;实例化之后仍验证抬脚/落脚和长时间回绕。车辆座椅按座舱净高缩放,不能所有车型使用同一绝对头枕高度。静态源码断言之外,应实例化真实几何做边界/有限矩阵单测,并提供街景近景入口供实拍验收。
|
|
233
|
-
- 建筑照片立面、实体墙和屋顶若几乎共面,旋转相机时会触发深度缓冲 z-fighting:外露侧墙的纹理面沿法向留明确间距,屋顶纹理面高于实体面,必要时用 `polygonOffset`;被相邻楼翼/门廊遮住的内部端面不要重复画照片面。验收须从东、西两端短侧墙和斜俯视分别实拍,暂停动态物体后比较同角度连续帧的大幅像素跳变;只看主立面截图不能证明无闪烁。
|
|
234
|
-
|
|
235
|
-
### 菜单页签缓存与子应用生命周期(强制)
|
|
220
|
+
复盘:AI 工作流业务蓝图曾在路由切换后先显示空白/转圈,根因是只给异步组件配置了加载逻辑,
|
|
221
|
+
没有把路由加载、页面数据加载和最终几何统一成状态协议。通用规则是“路由 fallback + 页面内骨架 +
|
|
222
|
+
明确终态”三层同时存在,并以真实浏览器慢网截图作为交付门禁。
|
|
223
|
+
|
|
224
|
+
### 3D 数字孪生动态资产与许可门禁
|
|
225
|
+
|
|
226
|
+
- 通用 3D 设计器/渲染器与某一楼宇的定制数字孪生应使用不同 AppKey、源码目录、路由清单、运行资产与商城安装包。官方 `Platform` 包只拥有通用引擎和平台菜单;项目专属模型/贴图、业务表与字段、IoT 接口、演示数据和业务菜单属于独立业务应用(本项目采用 `MicroService`)。批量“安装/更新全部平台应用”只覆盖 `ApplicationType=Platform`,不得借平台包向所有租户散发某个客户的项目。拆分时要检查旧商城包的 `SelectMenu/SelectTable/SelectApiEngine/SelectData` 回退选择,清空旧选择后重新制作安装包,并分别回读两个包的资源快照与真实浏览器入口。
|
|
227
|
+
- 道路车辆、人物、设备动画不能只靠静态截图验收。浏览器测试应同时断言对象数量、时间推进后的坐标/骨骼变化、路径末端回绕、切换楼层后的恢复及 `prefers-reduced-motion` 设置下的实际行为;测试探针只暴露非敏感数量和位置,不暴露 Token、人员或设备隐私。若持续运动本身是用户明确要求的核心功能,不得把系统的“减少动态效果”误用为整体动画总开关;只降级装饰性过渡,并提供可见、可键盘操作的暂停/恢复控制。页面隐藏或暂停期间冻结业务动画时钟,恢复时扣除停顿时间,避免物体瞬移。
|
|
228
|
+
- 外部 GLB/GLTF 进入官方运行包前,逐项保存作者、原始地址、许可证、是否允许商用和再分发、署名方式、三角面数、纹理大小及优化记录。“免费下载”、搜索摘要或仓库内没有许可证都不构成可再分发授权;`NC`、`ND` 或用途不明的资产默认不进入商业应用包。
|
|
229
|
+
- 可再分发的外部树木等高模要先校验原站提供的文件校验和,再用免费离线工具焊接顶点、做 LOD 简化和 WebP 纹理压缩;将运行 GLB 与原始下载、处理工具分离。单个共享资产实例化时不要给每棵树复制几何/贴图,也不要在销毁一个场景时释放仍被共享模板引用的 GPU 资源;异步加载完成后须确认原场景仍挂载,防止切换楼层后回填已卸载对象。测试应同时覆盖 GLB 魔数/大小、运行时加载数量与失败降级计数、移动端绘制预算、总览和近景截图。
|
|
230
|
+
- 品牌车辆和真实建筑只能在拥有明确资产/商标使用依据时描述为精确复刻。程序化或原创近似模型使用“风格化/演示模型”措辞,不得把车型标签当作厂商认证。视觉签收与功能、运行发布、商城包、目标租户安装是不同证据层。
|
|
231
|
+
- 运动物体优先使用可复用几何/材质、LOD、实例化和离屏回绕;相机近景仍要检查曲面法线、透明车窗、轮胎方向、脚底接地、穿模和阴影。页面隐藏时暂停动画,恢复时避免累积大时间差导致物体瞬移。
|
|
232
|
+
- 三维数据标牌可以使用透明 PBR 厚度几何、纹理文字与空间连线,但必须保留对齐的 DOM 点击/键盘目标、读屏文本和焦点环。小屏避碰要测试真实矩形交集,不能仅检查页面无横向滚动;把冲突标牌一律向上推会在工具条边界堆叠。玻璃 transmission 会额外渲染场景,密集人群应先量测绘制次数,再选择透明近似或折射质量档。
|
|
233
|
+
- 人群实例化须按可复用几何及材质属性分组,保留各人物肘膝关节矩阵,颜色用实例属性;实例化之后仍验证抬脚/落脚和长时间回绕。车辆座椅按座舱净高缩放,不能所有车型使用同一绝对头枕高度。静态源码断言之外,应实例化真实几何做边界/有限矩阵单测,并提供街景近景入口供实拍验收。
|
|
234
|
+
- 建筑照片立面、实体墙和屋顶若几乎共面,旋转相机时会触发深度缓冲 z-fighting:外露侧墙的纹理面沿法向留明确间距,屋顶纹理面高于实体面,必要时用 `polygonOffset`;被相邻楼翼/门廊遮住的内部端面不要重复画照片面。验收须从东、西两端短侧墙和斜俯视分别实拍,暂停动态物体后比较同角度连续帧的大幅像素跳变;只看主立面截图不能证明无闪烁。
|
|
235
|
+
|
|
236
|
+
### 菜单页签缓存与子应用生命周期(强制)
|
|
236
237
|
|
|
237
238
|
- 菜单微服务只有一个缓存所有者:Vue 路由宿主固定 `meta.keepAlive=false`,`<micro-app keep-alive>` 独占子应用状态。禁止把外层 Vue `KeepAlive` 打开,也禁止子应用通过随机实例名规避运行时缓存;双层缓存会产生旧宿主与当前路由竞争、无数据、永久骨架屏和白屏。
|
|
238
239
|
- 每个主框架 `fullPath` 使用稳定且不泄露查询参数/Token 的实例指纹。平台最多保留 5 个菜单运行时,超过后按 LRU 销毁最久未使用的隐藏实例;Tab 仍保留,再次进入允许冷启动。关闭当前/其它/全部 Tab、访问记录淘汰、退出登录、Token 重置、角色变化、同路由版本或入口变化时必须精确 `unmountApp(name,{destroy:true,clearData:true})`。
|
|
@@ -285,16 +286,16 @@ window.addEventListener('appstate-change', (event) => {
|
|
|
285
286
|
吾码宿主独立预览时的回退值。不得直接写死 `min-height: 100vh`、`calc(100vh - 100px)` 等
|
|
286
287
|
只适配浏览器视口或某个主站布局的高度,否则嵌入 TagsView、弹窗或移动端时会被裁剪或产生双滚动。
|
|
287
288
|
|
|
288
|
-
菜单型微服务必须只有一个纵向滚动所有者:宿主外层隐藏溢出,`<micro-app>` 边界提供默认
|
|
289
|
-
`overflow-y:auto` 兜底。普通长页面保持自然高度即可;子应用若需要 sticky 工具栏、虚拟列表等
|
|
290
|
-
内部滚动,则自己的滚动容器必须具有基于 `--micro-app-available-height` 的确定高度和
|
|
291
|
-
`overflow-y:auto`。真实子滚动容器会把内容约束在边界内,框架兜底条自动不出现;只给自动高度
|
|
292
|
-
根节点写 `overflow:auto` 不算自滚动容器。验收需分别覆盖框架兜底和子应用自滚动,断言任一时刻
|
|
293
|
-
只有一个 `scrollHeight > clientHeight` 的纵向滚动所有者。
|
|
294
|
-
|
|
295
|
-
相机扫描、收银称台、扫码、签到等高频工具页必须另设“一屏操作”断点:在宿主下发的可用高度内同时显示输入/取景、主操作、处理状态、核心结果和业务要求的最近记录入口,完成主流程不得依赖页面纵向滚动;竖屏优先上下紧凑分区,短横屏切换左右或多列分区。历史明细可在自己的卡片内滚动,但不能隐藏错误、当前结果、暂停/继续/恢复等关键动作。桌面应占满宿主可用宽度,通过有界预览容器和 `object-fit` 防止上传竖图把页面撑高。真实浏览器验收至少覆盖一个常见手机竖屏和一个短横屏,并断言根容器不溢出、取景区/结果区/关键历史入口同时在视口内、平台底部菜单与安全区不遮挡按钮;桌面断点必须回归,不能为移动端压缩破坏 PC 布局。
|
|
296
|
-
|
|
297
|
-
摄像头微服务必须把媒体异步生命周期当作竞态处理:每次打开、关闭和卸载都递增操作令牌或取消版本;`getUserMedia`、设置 `srcObject`、`video.play()` 每个异步边界返回后都要验证令牌仍有效。关闭时先同步切换 UI 状态并使旧操作失效,再停止全部轨道和清空 `srcObject`,防止旧 Promise 把已关闭状态反写为开启。条件渲染或点击后会移动的关闭按钮可在 `pointerdown` 捕获阶段完成停止,再短时去重后续 `click`。自动识别可以按画面指纹去重,但用户点击主识别按钮必须能强制处理当前帧;同一页面不要再放置语义重复且易被宿主底栏遮挡的第二个“再次识别当前画面”。
|
|
289
|
+
菜单型微服务必须只有一个纵向滚动所有者:宿主外层隐藏溢出,`<micro-app>` 边界提供默认
|
|
290
|
+
`overflow-y:auto` 兜底。普通长页面保持自然高度即可;子应用若需要 sticky 工具栏、虚拟列表等
|
|
291
|
+
内部滚动,则自己的滚动容器必须具有基于 `--micro-app-available-height` 的确定高度和
|
|
292
|
+
`overflow-y:auto`。真实子滚动容器会把内容约束在边界内,框架兜底条自动不出现;只给自动高度
|
|
293
|
+
根节点写 `overflow:auto` 不算自滚动容器。验收需分别覆盖框架兜底和子应用自滚动,断言任一时刻
|
|
294
|
+
只有一个 `scrollHeight > clientHeight` 的纵向滚动所有者。
|
|
295
|
+
|
|
296
|
+
相机扫描、收银称台、扫码、签到等高频工具页必须另设“一屏操作”断点:在宿主下发的可用高度内同时显示输入/取景、主操作、处理状态、核心结果和业务要求的最近记录入口,完成主流程不得依赖页面纵向滚动;竖屏优先上下紧凑分区,短横屏切换左右或多列分区。历史明细可在自己的卡片内滚动,但不能隐藏错误、当前结果、暂停/继续/恢复等关键动作。桌面应占满宿主可用宽度,通过有界预览容器和 `object-fit` 防止上传竖图把页面撑高。真实浏览器验收至少覆盖一个常见手机竖屏和一个短横屏,并断言根容器不溢出、取景区/结果区/关键历史入口同时在视口内、平台底部菜单与安全区不遮挡按钮;桌面断点必须回归,不能为移动端压缩破坏 PC 布局。
|
|
297
|
+
|
|
298
|
+
摄像头微服务必须把媒体异步生命周期当作竞态处理:每次打开、关闭和卸载都递增操作令牌或取消版本;`getUserMedia`、设置 `srcObject`、`video.play()` 每个异步边界返回后都要验证令牌仍有效。关闭时先同步切换 UI 状态并使旧操作失效,再停止全部轨道和清空 `srcObject`,防止旧 Promise 把已关闭状态反写为开启。条件渲染或点击后会移动的关闭按钮可在 `pointerdown` 捕获阶段完成停止,再短时去重后续 `click`。自动识别可以按画面指纹去重,但用户点击主识别按钮必须能强制处理当前帧;同一页面不要再放置语义重复且易被宿主底栏遮挡的第二个“再次识别当前画面”。
|
|
298
299
|
|
|
299
300
|
加载/协议/运行时异常只由宿主兜底显示;子应用业务错误标记 `handled=true` 后宿主不得重复提示。
|
|
300
301
|
加载失败页至少显示 AppKey、PageKey、路由、版本、入口、HTTP 状态、发布状态、资产来源、挂载状态和安全原因码,并提供重试、返回与复制诊断。
|
|
@@ -8,14 +8,14 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
|
|
|
8
8
|
# Microi 模块引擎
|
|
9
9
|
|
|
10
10
|
模块引擎决定同一张表在某个菜单、角色和终端中“如何查询、展示和操作”。
|
|
11
|
-
配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
|
|
12
|
-
`diy_table/diy_field`。
|
|
13
|
-
|
|
14
|
-
导入、导出按钮显示条件分别使用 `sys_menu.ImportCodeShowV8`、`ExportCodeShowV8`,
|
|
15
|
-
与新增、编辑、删除条件一样用 `V8.Result=true/false`。通过模块设计“按钮”分组维护,
|
|
16
|
-
或使用 `microi_update_module`;旧后端需先升级模块引擎应用。它们只控制按钮显示,不能代替后端权限。
|
|
17
|
-
代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
|
|
18
|
-
未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
|
|
11
|
+
配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
|
|
12
|
+
`diy_table/diy_field`。
|
|
13
|
+
|
|
14
|
+
导入、导出按钮显示条件分别使用 `sys_menu.ImportCodeShowV8`、`ExportCodeShowV8`,
|
|
15
|
+
与新增、编辑、删除条件一样用 `V8.Result=true/false`。通过模块设计“按钮”分组维护,
|
|
16
|
+
或使用 `microi_update_module`;旧后端需先升级模块引擎应用。它们只控制按钮显示,不能代替后端权限。
|
|
17
|
+
代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
|
|
18
|
+
未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
|
|
19
19
|
|
|
20
20
|
## 必读参考
|
|
21
21
|
|
|
@@ -35,14 +35,14 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
|
|
|
35
35
|
4. 用字段名配置 `listFields/searchFields/sortFields/hiddenFields/mobileFields`;
|
|
36
36
|
MCP 解析为字段 Id 和 `SelectFields/SearchFieldIds/...`。
|
|
37
37
|
5. 同一次创建配齐业务按钮、FormBtns、PageTabs 和批量按钮。
|
|
38
|
-
6. 写后回读模块,检查字段映射、按钮 JSON、路由和目标页面。
|
|
39
|
-
|
|
40
|
-
### 菜单图标必须可辨识(强制)
|
|
41
|
-
|
|
42
|
-
- 每个新建或修改的菜单都必须设置与业务相关的图标;根目录、分类及子菜单不能批量使用同一个默认图标。优先按名称和实际功能选择,例如客户用 `UserFilled`、日程用 `Calendar`、仓储用 `Box`、办公用 `OfficeBuilding`。
|
|
43
|
-
- 主后台侧栏读取 `sys_menu.IconClass`(CSS/组件图标),不是图片字段 `Icon`。优先填写当前前端已注册的 Element Plus 图标名;使用 FontAwesome/CSS 名称时先核对兼容映射,不能填入不存在的类名后让全部菜单回退为 `Document`。
|
|
44
|
-
- 没有贴切图标时,从实际可用图标集合中随机选一个,并将选择结果保存;可以按稳定菜单 Id 生成确定的随机分配,避免每次刷新或重新发布都变图标。同组菜单应有适当差异,不强求不同业务绝对不重复。
|
|
45
|
-
- 通过 `microi_create_module` / `microi_update_module` 或 Manifest 的模块配置写入,并把图标纳入应用包。只修改图片字段、只检查数据库字符串或只改本地 Manifest 不算完成;必须回读 `IconClass`,在真实侧栏检查图标可见且有区别。
|
|
38
|
+
6. 写后回读模块,检查字段映射、按钮 JSON、路由和目标页面。
|
|
39
|
+
|
|
40
|
+
### 菜单图标必须可辨识(强制)
|
|
41
|
+
|
|
42
|
+
- 每个新建或修改的菜单都必须设置与业务相关的图标;根目录、分类及子菜单不能批量使用同一个默认图标。优先按名称和实际功能选择,例如客户用 `UserFilled`、日程用 `Calendar`、仓储用 `Box`、办公用 `OfficeBuilding`。
|
|
43
|
+
- 主后台侧栏读取 `sys_menu.IconClass`(CSS/组件图标),不是图片字段 `Icon`。优先填写当前前端已注册的 Element Plus 图标名;使用 FontAwesome/CSS 名称时先核对兼容映射,不能填入不存在的类名后让全部菜单回退为 `Document`。
|
|
44
|
+
- 没有贴切图标时,从实际可用图标集合中随机选一个,并将选择结果保存;可以按稳定菜单 Id 生成确定的随机分配,避免每次刷新或重新发布都变图标。同组菜单应有适当差异,不强求不同业务绝对不重复。
|
|
45
|
+
- 通过 `microi_create_module` / `microi_update_module` 或 Manifest 的模块配置写入,并把图标纳入应用包。只修改图片字段、只检查数据库字符串或只改本地 Manifest 不算完成;必须回读 `IconClass`,在真实侧栏检查图标可见且有区别。
|
|
46
46
|
|
|
47
47
|
### 新模块表单打开方式(强制默认)
|
|
48
48
|
|
|
@@ -70,15 +70,15 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
|
|
|
70
70
|
- `CardBottomTagFields`
|
|
71
71
|
- `DefaultOrderBy`
|
|
72
72
|
|
|
73
|
-
普通状态、开关等低基数字段不能机械创建单列索引。只有真实查询、关联、唯一约束
|
|
74
|
-
或扫描需要的索引才进入 Manifest 并通过 MCP 创建、回读。
|
|
75
|
-
|
|
76
|
-
Manifest 中按字段名声明统计列,使用 `statFields` 或 `statisticsFieldNames`,例如
|
|
77
|
-
`statFields: ['Amount', 'Quantity']`;MCP 会解析目标租户的字段 Id。
|
|
78
|
-
`statisticsFields` / `StatisticsFields` 表示已经转换好的原生 JSON,元素为
|
|
79
|
-
`{ Id: '真实 diy_field.Id', Type: 'Sum' }`,不能填字段名称字符串。发布前用有记录的
|
|
80
|
-
实际列表检查 `DataAppend.StatisticsFields` 及页面汇总,再以无权限账号检查汇总范围;
|
|
81
|
-
HTTP 成功或菜单字段非空不足以证明统计有效。
|
|
73
|
+
普通状态、开关等低基数字段不能机械创建单列索引。只有真实查询、关联、唯一约束
|
|
74
|
+
或扫描需要的索引才进入 Manifest 并通过 MCP 创建、回读。
|
|
75
|
+
|
|
76
|
+
Manifest 中按字段名声明统计列,使用 `statFields` 或 `statisticsFieldNames`,例如
|
|
77
|
+
`statFields: ['Amount', 'Quantity']`;MCP 会解析目标租户的字段 Id。
|
|
78
|
+
`statisticsFields` / `StatisticsFields` 表示已经转换好的原生 JSON,元素为
|
|
79
|
+
`{ Id: '真实 diy_field.Id', Type: 'Sum' }`,不能填字段名称字符串。发布前用有记录的
|
|
80
|
+
实际列表检查 `DataAppend.StatisticsFields` 及页面汇总,再以无权限账号检查汇总范围;
|
|
81
|
+
HTTP 成功或菜单字段非空不足以证明统计有效。
|
|
82
82
|
|
|
83
83
|
## AI 模块视觉交付门禁(强制)
|
|
84
84
|
|
|
@@ -118,10 +118,17 @@ HTTP 成功或菜单字段非空不足以证明统计有效。
|
|
|
118
118
|
| `Iframe` | 受控外部页面 |
|
|
119
119
|
| `SecondMenu` | 仅作为父菜单 |
|
|
120
120
|
| `Report` | 虚拟报表 |
|
|
121
|
-
| `MicroService` | 已发布前端微服务页面 |
|
|
122
|
-
| `CodeForm` | 表单设计器生成并在已发布微服务中运行的独立 Vue 3 页面;必须绑定 `DiyTableId` |
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
| `MicroService` | 已发布前端微服务页面 |
|
|
122
|
+
| `CodeForm` | 表单设计器生成并在已发布微服务中运行的独立 Vue 3 页面;必须绑定 `DiyTableId` |
|
|
123
|
+
| `WorkFlow` | 审批工作流模块;必须绑定 `DiyTableId` 和已启用流程的 `FlowDesignId` |
|
|
124
|
+
|
|
125
|
+
`WorkFlow` 模块的 `DiyTableId` 必须等于 `wf_flowdesign.TableId`。完整 Manifest
|
|
126
|
+
可填写 `flowName` 引用同一份 `workflows` 定义,生成器保存流程后回填
|
|
127
|
+
`sys_menu.FlowDesignId`;引用已存在流程时填真实 `flowDesignId`。
|
|
128
|
+
使用 `microi_get_module` 回读 `OpenType/FlowDesignId/DiyTableId`,再从模块
|
|
129
|
+
实际发起并检查审批待办。流程节点人员、坐标和拓扑详见 `v8-workflow`。
|
|
130
|
+
|
|
131
|
+
`CodeForm` 复用 MicroService 宿主与菜单权限上下文。先在表单设计器生成源码,保存至 `microi-generated-forms`,构建并发布微服务;再配置 `MicroServiceKey + MicroServiceRoutePath`(以及当前租户真实的 `MicroServiceId + MicroServicePageId`),保留原表的 `DiyTableId`。Manifest 生成器可解析可移植的 Key/RoutePath;`microi_create_module` 必须传实际 Id。不能把只保存私有源码当作已发布运行产物。
|
|
125
132
|
|
|
126
133
|
Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使用短期、一次性、
|
|
127
134
|
可撤销的服务端交换票据,限制 redirect/scope,并在落地后清理地址栏。
|
|
@@ -138,23 +145,23 @@ Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使
|
|
|
138
145
|
- 不复制官网旧“Redis 文本进度 + 长事务循环”导入示例作为新实现;必须有稳定
|
|
139
146
|
幂等键、业务任务状态、真实 Current/Total、失败恢复和必要的 checkpoint 分片。
|
|
140
147
|
|
|
141
|
-
### 原生 SQL 身份占位符与统计安全
|
|
142
|
-
|
|
143
|
-
- 模块 SqlWhere/SqlJoin 及字段选项 SQL 中的 `$CurrentUser.Id$`、
|
|
144
|
-
`$CurrentUser.RoleIds$`、`$CurrentUser.Level$` 必须使用本次可信后端授权快照。
|
|
145
|
-
角色集合只包含当前有效 RoleId,不能按旧 Token、角色名称或请求中的同名属性授予权限。
|
|
146
|
-
`IN ($CurrentUser.RoleIds$)` 继续支持;角色撤销后即使仍拥有同表菜单,也须验证计数与汇总不越权。
|
|
147
|
-
- SQL 替换使用局部克隆;部门等其它扩展保留兼容语义,不覆盖 `V8.CurrentUser`。
|
|
148
|
-
HTTP JSON 不能注入授权快照或可信调用标记,父用户与当前身份不符、用户禁用均失败关闭。
|
|
149
|
-
- 用户访问密钥仍绑定有效 sys_user,沿“账号有效角色 + 密钥 scope/路由/表范围收窄”授权;
|
|
150
|
-
不把访问密钥伪装成无所属账号的独立角色身份,账号不存在或停用时拒绝查询。
|
|
151
|
-
- Count、SUM 在逐行数据过滤之前执行,列表/计数/导出必须共享真正的查询范围;
|
|
152
|
-
不能以 DataFilter 已拒绝详情为由宣称统计安全。验收包含旧 Token 撤角、角色删除、
|
|
153
|
-
管理员降级但仍有菜单、不同父身份和用户对象未被修改。
|
|
154
|
-
- 本能力依赖对应后端二进制;应用包无需复制用户角色数据。它不改变 DbRead 或父事务的隔离语义,
|
|
155
|
-
联查授权表的副本延迟与旧 RR 快照需要独立验证,不将 SQL 生成通过称为真实数据库验收。
|
|
156
|
-
|
|
157
|
-
### 菜单启动查询与字段元数据兼容
|
|
148
|
+
### 原生 SQL 身份占位符与统计安全
|
|
149
|
+
|
|
150
|
+
- 模块 SqlWhere/SqlJoin 及字段选项 SQL 中的 `$CurrentUser.Id$`、
|
|
151
|
+
`$CurrentUser.RoleIds$`、`$CurrentUser.Level$` 必须使用本次可信后端授权快照。
|
|
152
|
+
角色集合只包含当前有效 RoleId,不能按旧 Token、角色名称或请求中的同名属性授予权限。
|
|
153
|
+
`IN ($CurrentUser.RoleIds$)` 继续支持;角色撤销后即使仍拥有同表菜单,也须验证计数与汇总不越权。
|
|
154
|
+
- SQL 替换使用局部克隆;部门等其它扩展保留兼容语义,不覆盖 `V8.CurrentUser`。
|
|
155
|
+
HTTP JSON 不能注入授权快照或可信调用标记,父用户与当前身份不符、用户禁用均失败关闭。
|
|
156
|
+
- 用户访问密钥仍绑定有效 sys_user,沿“账号有效角色 + 密钥 scope/路由/表范围收窄”授权;
|
|
157
|
+
不把访问密钥伪装成无所属账号的独立角色身份,账号不存在或停用时拒绝查询。
|
|
158
|
+
- Count、SUM 在逐行数据过滤之前执行,列表/计数/导出必须共享真正的查询范围;
|
|
159
|
+
不能以 DataFilter 已拒绝详情为由宣称统计安全。验收包含旧 Token 撤角、角色删除、
|
|
160
|
+
管理员降级但仍有菜单、不同父身份和用户对象未被修改。
|
|
161
|
+
- 本能力依赖对应后端二进制;应用包无需复制用户角色数据。它不改变 DbRead 或父事务的隔离语义,
|
|
162
|
+
联查授权表的副本延迟与旧 RR 快照需要独立验证,不将 SQL 生成通过称为真实数据库验收。
|
|
163
|
+
|
|
164
|
+
### 菜单启动查询与字段元数据兼容
|
|
158
165
|
|
|
159
166
|
- 菜单树是登录后的启动控制面。读取 `sys_menu` 时,不能把浏览器传入的
|
|
160
167
|
`_SelectFields` 直接交给依赖 `diy_field` 的通用查询投影:旧库、空库或升级后缓存
|
|
@@ -235,3 +242,9 @@ PageTabs 通过 `TargetSysMenuId` 切换不同模块/表时,入口模块必须
|
|
|
235
242
|
语义色可区分,并在浅色/深色主题下保持可读。
|
|
236
243
|
- PC 复合列和 Mobile Card 引用的附加字段均在查询结果中;长文本、空值、模板值不破版。
|
|
237
244
|
- PC 和移动端分别验证;MicroService 还要验证运行时、页面路由和宿主上下文。
|
|
245
|
+
### 多级表头与顶部 Banner
|
|
246
|
+
|
|
247
|
+
- 数据源【多级表头】使用现有 `sys_menu.TableHeaders`,填写 `[{"Label":"人数(人)","Fields":["Total","Male","Female"]}]`;`Fields` 必须引用可见、连续的查询列字段名。嵌套分组可使用 `Children`。缺省、非法 JSON、重复或不连续字段时客户端回退普通表头。
|
|
248
|
+
- Manifest `modules[].tableHeaders` 接受同一数组,MCP 写入 `sys_menu.TableHeaders`;更新已有菜单可通过 `microi_update_module` 传同名字段并回读,不能把合并表头放入已废弃的 `DiyConfig`。
|
|
249
|
+
- 模块的 `HideTableBanner`、`HideFormBanner` 分别关闭表格与表单顶部 Banner。未配置或 `0` 均显示;设为 `1` 后对应专属统计接口不执行,按钮角标接口不受影响。Manifest 使用 `hideTableBanner`、`hideFormBanner`。
|
|
250
|
+
- 上述配置由模块引擎官方应用交付,验收应分别核对物理列、字段可见性、商城包哈希,以及普通表头、合并表头和两种 Banner 开关的真实页面与请求。
|
|
@@ -19,7 +19,17 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
|
|
|
19
19
|
|
|
20
20
|
用户提供参考截图时,先拆出面板行列比例、指标主次、图表与表格高度、标题/筛选位置,再用原生 pannel/statistic/chart/tabel/list 组合配置。不能把所有指标替换成一排大色块,也不能用模板假数据声称已接通客户业务。必须用同一视口截图检查浅色和平台深色,检查页面缩放后的断行与纵向空白;布局接近度和真实数据绑定分别验收。
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
### 平台智能工作首页
|
|
23
|
+
|
|
24
|
+
保留 `aiengine` 原生 AI 创作中心,与 `homeoverview` 工作概览组成桌面首行 14/10 栅格;任务、月历与公告放在下一行,移动端自动切为 24 栅格。不能把任务的完整 15 行列表或未配置日程的大空白块直接堆在首屏。
|
|
25
|
+
|
|
26
|
+
- `homeoverview.widgetParams[0]` 为真实个人统计接口 `platform-home-overview`,`[1].value="compact"` 启用紧凑指标、常用应用与趋势;所有数据仍受当前用户权限过滤。
|
|
27
|
+
- `workcenter.widgetParams` 按索引依次为视图、工作菜单、流程菜单、公告菜单、日历菜单、分页条数;`[5].value=5` 用于首页任务,范围 5–20,不能影响独立“我的工作”页面。
|
|
28
|
+
- `diycalendar.widgetParams[1].value="compact"` 在没有可访问日程模块时展示本月日期,并明确提示未配置,不伪造任务。
|
|
29
|
+
- `diytable.widgetParams[4].value="NoticeList"` 以只读公告列表展示真实授权公告;表、菜单仍在 `[0]/[1]`,模块缺失时使用 `referencePolicy.onMissing="RemoveWidget"` 移除可选组件及空容器。
|
|
30
|
+
- 修改已有首页前通过 MCP 读取页面及历史 `CurrentHash`,保存传 `expectedCurrentHash`,再回读 JSON 和历史,保留可恢复版本。
|
|
31
|
+
|
|
32
|
+
你正在为 Microi 吾码平台生成界面引擎页面的 JSON 数据。界面引擎页面由 `formData` 对象描述,用户导入 JSON 即可使用。
|
|
23
33
|
|
|
24
34
|
<!-- microi-progressive:begin -->
|
|
25
35
|
<!-- microi-progressive:chunk id=page-engine-000 sha256=e9ccd20e2c3504afc0a91f5dbe93ed755aed4e83e9ffec13af5b9d60528986e0 -->
|
|
@@ -7,7 +7,7 @@ description: 按 Microi 系统真实业务逻辑进行 Playwright 全自动化
|
|
|
7
7
|
|
|
8
8
|
# Microi 吾码 Playwright E2E 自动化测试
|
|
9
9
|
|
|
10
|
-
> **2026-05 更新(重要)**:Microi.
|
|
10
|
+
> **2026-05 更新(重要)**:Microi.Agent 插件生成的所有 E2E 产物现已统一隔离到 `<projectRoot>/.microi-e2e/` 目录,**不再**写入 `tests/e2e/`、根目录 `playwright.config.js` 或 `.env.e2e.example`。
|
|
11
11
|
> - `playwright.config.js` 位于 `.microi-e2e/playwright.config.js`,`testDir` 为 `./` (即 `.microi-e2e/specs/`)
|
|
12
12
|
> - 报告路径 `.microi-e2e/report/`,截图 `.microi-e2e/screenshots/`
|
|
13
13
|
> - 上下文 `.microi-e2e/.microi-playwright-context.json`
|
|
@@ -47,7 +47,7 @@ AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测
|
|
|
47
47
|
|------|---------|
|
|
48
48
|
| 一次性 Python/JS/PS1 脚本 | `<workspace-root>/.tmp/` |
|
|
49
49
|
| 诊断截图、调试输出 | `<workspace-root>/.tmp/screenshots/` 或子目录 |
|
|
50
|
-
| E2E 测试产物(Microi.
|
|
50
|
+
| E2E 测试产物(Microi.Agent 插件生成) | `<workspace-root>/.microi-e2e/` |
|
|
51
51
|
| AI 一次性 Playwright 脚本、截图、日志、报告 | `<workspace-root>/.tmp/`、`<workspace-root>/.tmp/screenshots/`、`<workspace-root>/.tmp/reports/` |
|
|
52
52
|
| 性能测试报告 | `<workspace-root>/.microi-performance/`(仅限此目录) |
|
|
53
53
|
|
|
@@ -55,7 +55,7 @@ AI 在工作区内生成的**一次性临时脚本、诊断文件、截图、测
|
|
|
55
55
|
|
|
56
56
|
`.tmp/` 目录已在 `.gitignore` 中排除,AI 可以在此自由创建临时文件。任务完成后如无价值可以不清理,也可以整体删除该目录。
|
|
57
57
|
|
|
58
|
-
**2026-06 强制补充**:AI 手写的一次性 Playwright 验证脚本、运行日志、截图和报告只能写到工作区根目录 `.tmp/`。不要写到 `Microi.Client/`、`Microi.Server/`、`microi.doc/` 或其它子项目目录,即使这些目录已有 `tests/` 目录也不例外。只有 Microi.
|
|
58
|
+
**2026-06 强制补充**:AI 手写的一次性 Playwright 验证脚本、运行日志、截图和报告只能写到工作区根目录 `.tmp/`。不要写到 `Microi.Client/`、`Microi.Server/`、`microi.doc/` 或其它子项目目录,即使这些目录已有 `tests/` 目录也不例外。只有 Microi.Agent 插件正式初始化的可复用 E2E 工程,才使用 `.microi-e2e/`。
|
|
59
59
|
|
|
60
60
|
<!-- /microi-progressive:chunk -->
|
|
61
61
|
<!-- microi-progressive:chunk id=playwright-e2e-003 sha256=69b8842a221a0de60f8605c5059deee391be0f16f0b6cbc5ddfb3cfd210268db -->
|