@microi.net/cli 6.2.2 → 6.2.3
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 +111 -110
- package/scripts/microi-cli.js +63 -63
- package/scripts/microi-skills.meta.json +254 -248
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +66 -66
- package/skills/app-store/SKILL.md +7 -6
- package/skills/microi-ai-application/SKILL.md +5 -5
- package/skills/microi-client-frontend/SKILL.md +2 -2
- package/skills/microi-codex-installer/SKILL.md +6 -0
- package/skills/microi-datasource-mapping/SKILL.md +1 -0
- package/skills/microi-db-schema/SKILL.md +8 -0
- package/skills/microi-docs-coverage/references/capability-map.md +8 -8
- package/skills/microi-form-engine/SKILL.md +25 -0
- package/skills/microi-form-engine/references/data-source-events.md +6 -1
- package/skills/microi-form-layout/SKILL.md +1 -1
- 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 +6 -0
- package/skills/microi-microservice/SKILL.md +387 -382
- package/skills/microi-microservice/references/runtime-delivery.md +15 -0
- package/skills/microi-ui/SKILL.md +192 -192
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/module-engine/SKILL.md +5 -1
- package/skills/ui-design/SKILL.md +227 -223
- package/skills/ui-design/assets/pattern-showcase/index.html +2 -2
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +221 -206
- package/skills/ui-design/references/data-workspace-density.md +77 -0
- package/skills/ui-design/references/design-pattern-library.md +186 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +165 -164
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +237 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +154 -152
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/uniapp-mall-assets/SKILL.md +7 -2
- package/skills/v8-crud-api/SKILL.md +2 -1
- package/skills/v8-explorer-tree/SKILL.md +22 -1
- package/skills/v8-saas-multi-tenant/SKILL.md +6 -0
- package/skills/v8-security/SKILL.md +11 -1
- package/skills/v8-sql-query/SKILL.md +38 -1
- package/skills/v8-sql-query/examples/business-query.js +18 -0
- package/skills/v8-table-event/SKILL.md +51 -2
- 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 +3 -1
- package/skills/vision-engine/references/video-timeline.md +52 -0
|
@@ -14,7 +14,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
14
14
|
| `form-engine/form-custom-control.md` | microi-form-engine, microi-client-frontend | 定制控件、前端扩展边界 |
|
|
15
15
|
| `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping | 选项数据源、逐字段关联回填/清空/异步代次、快照和回显 |
|
|
16
16
|
| `form-engine/form-engine-info.md` | microi-form-engine, microi-client-frontend, v8-crud-api | 表单模型、工具栏、可读记录标题、字段定位、紧凑密度及草稿归属与恢复 |
|
|
17
|
-
| `form-engine/form-field-info.md` | microi-form-engine, v8-table-event |
|
|
17
|
+
| `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件、字段级 TableAlign 自动/显式覆盖及表级 FieldDescriptionMode 行内/图标说明 |
|
|
18
18
|
| `form-engine/model-engine.md` | v8-template-engine | 表格/表单模板 |
|
|
19
19
|
| `getting-started/docker-run.md` | microi-deployment, vision-engine | Docker 部署、历史独立编排、群晖CPU视觉双服务及可选行为模型与验收 |
|
|
20
20
|
| `server-panel/overview.md` | microi-deployment, microi-ui | 独立服务器面板、Docker 插件版本、Nginx/SSL、冷备份恢复、共存与 Ops 迁移 |
|
|
@@ -32,7 +32,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
32
32
|
| `more/hdfs.md` | v8-file-upload | 分布式文件存储、URL、本机原始流断点续传、固定 Primary/BackupPrivate 私有备份及显式 BackupPublic 最终文件公开、共享日额、原字节与匿名有界回读 |
|
|
33
33
|
| `more/identity-verification.md` | v8-security, v8-utilities, microi-microservice, app-store, v8-saas-multi-tenant | DiyToken、登录方式气泡、Passkey、Authenticator TOTP、Gitee/微信/GitHub、动态租户设置、严格人脸、一次性步进票据、个人中心和自动升级包 |
|
|
34
34
|
| `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
|
|
35
|
-
| `more/security.md` | v8-security |
|
|
35
|
+
| `more/security.md` | v8-security, v8-sql-query | 平台安全和兼容基线、业务接口禁止客户端 SQL 与受权控制面边界 |
|
|
36
36
|
| `more/sso.md` | microi-sso, v8-security, app-store | 双向 OIDC/SAML2/CAS、账号映射、协议端点、安全基线、商城发布与验收 |
|
|
37
37
|
| `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend | 系统/租户配置、登录前外观缓存与壁纸、个人覆盖、全框架密度、框架显隐和敏感边界 |
|
|
38
38
|
| `system-engine/ai-engine.md` | ai-engine, v8-http-integration, microi-ai-application | 模型代理、License、V8.AI、MCP 对话、跨端调用和安全 |
|
|
@@ -44,13 +44,13 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
44
44
|
| `system-engine/ai-platform-governance.md` | ai-platform-governance, app-store, business-blueprint, page-engine | 门户、身份、配置、发布、服务韧性、Trace/日志、资产协作与可恢复导入 |
|
|
45
45
|
| `system-engine/ai-workflow-suite.md` | business-blueprint, v8-workflow, microi-system-delivery | AI 工作流、蓝图、状态机、自动化流和流程挖掘 |
|
|
46
46
|
| `system-engine/system-observability.md` | system-observability, performance-testing, v8-debugging, microi-microservice | 系统日志、Trace、热点接口、资源监控、网络流量归因、安全治理、AI/MCP 与商城交付 |
|
|
47
|
-
| `system-engine/app-store.md` | app-store |
|
|
47
|
+
| `system-engine/app-store.md` | app-store | 应用包、安装、升级和回滚;当前公开 API 固定入口、精确历史 CDN 预览与内部发布字段边界 |
|
|
48
48
|
| `system-engine/databases.md` | dos-orm, v8-sql-query, microi-deployment | 扩展数据库与迁移 |
|
|
49
49
|
| `system-engine/datasource-engine.md` | datasource-engine | 数据源定义、执行和供数 |
|
|
50
50
|
| `system-engine/cache.md` | v8-cache-pattern, v8-saas-multi-tenant | L1/L2 架构、租户 Redis、Pub/Sub 失效、V8 安全代理与 Redis 管理器 |
|
|
51
51
|
| `system-engine/file-manage.md` | v8-file-upload, microi-client-frontend | 文件柜、公私桶管理、在线预览、回收站、跨平台与 MinIO 同步 |
|
|
52
52
|
| `system-engine/job.md` | job-engine | 调度、后台任务和分布式恢复 |
|
|
53
|
-
| `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI
|
|
53
|
+
| `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI 前端应用的工程架构与交付;API 固定入口不顶层跳转、历史版本实际地址及菜单/内部资产路由区分 |
|
|
54
54
|
| `system-engine/multi-end-client.md` | microi-client-frontend, microi-mobile-app-quality, microi-uniapp-frontend | PC/WebOS/UniApp/App 边界;统一快捷登录、租户长效会话、地图服务、单列安全区、持续动效与公开交付 |
|
|
55
55
|
| `system-engine/microi-ui.md` | microi-ui | Microi.UI 组件和主题 |
|
|
56
56
|
| `system-engine/message-notification.md` | message-notification | 统一消息通知微服务、原 mic_msgset 多通道配置、MCP/Skills、租户/产品版本与帐号范围、后端重启领取、居中弹窗与 SignalR/轮询恢复 |
|
|
@@ -61,7 +61,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
61
61
|
| `system-engine/print-engine.md` | print-engine, v8-frontend-events | 服务端模板打印与蓝牙直连边界 |
|
|
62
62
|
| `system-engine/bluetooth-printer.md` | v8-frontend-events, print-engine, microi-client-frontend, microi-microservice | GP-M322 与 CC4 双型号、TSPL/CPCL/ESC-POS、BLE/SPP、微服务平台普通打印桥、旧 V8 兼容及实机验收 |
|
|
63
63
|
| `system-engine/report-engine.md` | report-engine | 虚拟报表和导出 |
|
|
64
|
-
| `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP
|
|
64
|
+
| `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP 开库进度与长任务租约、创建结果主/备用入口与实际版本/迁移游标区分 |
|
|
65
65
|
| `system-engine/search-engine.md` | search-engine | Elasticsearch 索引和查询 |
|
|
66
66
|
| `system-engine/email-engine.md` | email-engine | 邮箱系统、源码商城安装、账号维护、收发同步和邮箱 MCP |
|
|
67
67
|
| `system-engine/spider-engine.md` | spider-engine | 浏览器采集和 Worker |
|
|
@@ -73,12 +73,12 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
73
73
|
| `system-engine/wf-engine.md` | v8-workflow | 工作流设计和事件 |
|
|
74
74
|
| `v8-engine/ai-apiengine.md` | ai-engine, v8-api-config, microi-system-delivery | AI 编程与短提示词;完整开发默认清单覆盖原推荐提示词 1–8 |
|
|
75
75
|
| `v8-engine/api-engine.md` | v8-api-config, v8-utilities | 接口上下文、配置、分布式锁续租和调用 |
|
|
76
|
-
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config |
|
|
76
|
+
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config, v8-sql-query | 接口引擎实战、参数白名单与禁止客户端 SQL 的生成规范 |
|
|
77
77
|
| `v8-engine/form-engine.md` | v8-crud-api, v8-formengine-http, module-engine, microi-form-engine | FormEngine API、HTTP、原生查询身份/统计范围与按表主库策略 |
|
|
78
78
|
| `v8-engine/mcp-server.md` | microi-system-delivery, microi-codex-installer, v8-security | MCP 工具、确认、审计、文件、日志、备份与访问密钥 |
|
|
79
79
|
| `v8-engine/microi-agent.md` | microi-codex, microi-codex-installer | Microi Agent 桌面安装、连接诊断与更新 |
|
|
80
|
-
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine, uniapp-mall-assets | 全部前端 V8
|
|
81
|
-
| `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8
|
|
80
|
+
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-table-event, v8-http-integration, v8-security, ai-engine, print-engine, uniapp-mall-assets | 全部前端 V8、日志/评论/版本四阶段事件及真实写入回执、平台 AI、强身份验证、扫码与文件边界 |
|
|
81
|
+
| `v8-engine/v8-server.md` | v8-utilities, v8-table-event, v8-api-config, v8-http-integration, v8-security, ai-engine, v8-sql-query | 全部后端 V8、活动事件同父事务/空配置兼容、强身份票据、平台 AI、专项路由及可信服务端 SQL/绑定值边界 |
|
|
82
82
|
| `v8-engine/vs-code-plugin.md` | v8-explorer-tree, microi-client-frontend, workspace-conventions | VS Code 插件、Microi CLI、AI/MCP 初始化、类型、资源树和共享工作区 |
|
|
83
83
|
| `v8-engine/where.md` | v8-crud-api, v8-sql-query | 参数化 `_Where` 条件 |
|
|
84
84
|
|
|
@@ -30,6 +30,8 @@ Config/Data、菜单查询列与缓存保持一致。
|
|
|
30
30
|
- 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
|
|
31
31
|
- 表单分组与宽度:`../microi-form-layout/SKILL.md`
|
|
32
32
|
- 后端表单事件:`../v8-table-event/SKILL.md`
|
|
33
|
+
- 日志/评论/数据版本的四阶段事件也属于顶层 `diy_table`,共十二项;
|
|
34
|
+
用标准事件目录及 Manifest `events[]` 保存,名称与新原子事务适用条件以该责任 Skill 为准。
|
|
33
35
|
- 前端字段事件:`../v8-frontend-events/SKILL.md`
|
|
34
36
|
|
|
35
37
|
## 标准工作流
|
|
@@ -72,6 +74,22 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
72
74
|
普通身份真实 Rows/Count/SUM/Tree/Export 与撤权边界;离线会话选择测试不能冒充复制延迟
|
|
73
75
|
或七种数据库实机测试。所有新普通表字段保持可空,不把已有表批量设为主库。
|
|
74
76
|
|
|
77
|
+
## 列对齐与字段说明模式
|
|
78
|
+
|
|
79
|
+
- 表格单元格对齐持久化为顶层 `diy_field.TableAlign`,值为 `auto/left/center/right`。
|
|
80
|
+
省略不改已有值,`null/''/auto` 采用类型感知默认:文本、日期、Select、部门及 AutoNumber
|
|
81
|
+
左对齐,NumberText 右对齐,布尔/视觉控件居中;未知控件再参考真实物理数值/布尔类型。
|
|
82
|
+
显式配置优先;模块复合列 `ViewSchema.Layout.List.Columns[].Align` 保持独立优先,不混写 Config。
|
|
83
|
+
- 普通字段说明由顶层 `diy_table.FieldDescriptionMode` 统一配置:`inline`(空/null 的兼容默认)
|
|
84
|
+
直接显示灰字;`tooltip` 在 Label 旁显示可聚焦的感叹号图标,支持悬停、键盘焦点及窄屏点击。
|
|
85
|
+
不改变 CollapseGroup/Tabs 等布局控件自身的说明,也不改变任何校验和权限。
|
|
86
|
+
- 标准 MCP `microi_add_field/microi_update_field/microi_update_field_list` 使用 `tableAlign`,
|
|
87
|
+
`microi_create_table/microi_update_table` 使用 `fieldDescriptionMode`;Manifest 分别写
|
|
88
|
+
`tables[].fields[].tableAlign` 与 `tables[].fieldDescriptionMode`。未知枚举写前拒绝。
|
|
89
|
+
`microi_get_form_component_catalog` 同时返回 `metadataProperties`,它们是顶层元数据而非控件 Config。
|
|
90
|
+
- 先配套升级前后端与表单引擎官方应用,再回读真实配置、刷新缓存,验证列表/分组表头/行内编辑
|
|
91
|
+
及 Add/Edit/View、多列 Label、键盘与移动端。MCP 成功或配置回读不等于旧客户端已支持。
|
|
92
|
+
|
|
75
93
|
## 上传字段配置(AI 生成时强制)
|
|
76
94
|
|
|
77
95
|
- `Config.FileUpload.MediaType` 明确指定 `file/image/video`,缺省为 `file`。设计器【媒体类型】
|
|
@@ -319,6 +337,13 @@ MCP 建模只使用:
|
|
|
319
337
|
`OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
|
|
320
338
|
用于展示关联集合,不能用前端拼接代替数据权限。
|
|
321
339
|
|
|
340
|
+
一对一关联需要保留已占用候选以便区分时,使用 `Config.OpenTable.SelectionDisabledField`
|
|
341
|
+
指定目标记录的占用字段,`SelectionDisabledText` 提供小程序提示。非空且非 `0/false` 的值
|
|
342
|
+
置灰禁选,字段未返回也失败关闭;空值可选,未配置兼容旧行为。先更新 PC 与小程序客户端,
|
|
343
|
+
再通过 `microi_get_field_list` / `microi_update_field` 合并 Config 并回读;不把禁选条件改成
|
|
344
|
+
查询过滤而隐藏记录。覆盖单选、行点击、卡片、全选、刷新后占用及缺字段;服务端仍必须在
|
|
345
|
+
事务中保证一对一、权限和并发占用,前端禁选不能代替后端约束。
|
|
346
|
+
|
|
322
347
|
### 子表验收与复盘
|
|
323
348
|
|
|
324
349
|
- 回读主表字段、子表字段、隐藏子菜单和索引,确认配置中的表 Id、菜单 Id、外键名均真实存在。
|
|
@@ -86,7 +86,12 @@ if (!V8.Form.Name) return { Code: 0, Msg: '名称不能为空' };
|
|
|
86
86
|
## 字段属性
|
|
87
87
|
|
|
88
88
|
常用持久化属性包括 `Visible`、`AppVisible`、`NotEmpty`、`Readonly`、`Data`、
|
|
89
|
-
`Config`、`FormWidth`、`TableWidth`、`Tab`、角色绑定和前端事件代码。
|
|
89
|
+
`Config`、`FormWidth`、`TableWidth`、`TableAlign`、`Tab`、角色绑定和前端事件代码。
|
|
90
|
+
|
|
91
|
+
`TableAlign` 是 `diy_field` 顶层属性,值 `auto/left/center/right`,空/null 按控件类型自动;
|
|
92
|
+
不能放进 `Config`。说明显示模式是 `diy_table.FieldDescriptionMode=inline/tooltip`,空/null
|
|
93
|
+
保持 inline;模式作用于普通字段 Description,不覆盖布局控件自己的说明。具体默认与 MCP 参数见
|
|
94
|
+
`../SKILL.md` 的“列对齐与字段说明模式”。
|
|
90
95
|
|
|
91
96
|
- 除非明确隐藏,`Visible=1`、`AppVisible=1`。
|
|
92
97
|
- 角色绑定只缩小界面可见性,不能代替服务器数据权限。
|
|
@@ -18,7 +18,7 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
|
|
|
18
18
|
表单打开方式与分组是两个独立决策:顶层新表默认 `FormOpenType=Dialog`、
|
|
19
19
|
`FormOpenWidth=80%`。完整系统开发的子表宽度按 `microi-system-delivery` 必读清单第 4 项配置:第一层 75%、第二层 70%,再逐层递减 5 个百分点。只有约 36 个以上业务字段、至少 2 个大型子表,或同等密度的重型控件
|
|
20
20
|
才评估 Drawer;不能用 Drawer 代替 Tabs/CollapseGroup 的信息架构。Dialog 统一使用居中、可拖动、
|
|
21
|
-
|
|
21
|
+
现有宿主 Dialog 壳;圆角依当前主题契约,独立应用采用适度圆角并遵循 ui-design,不以大圆角作为默认;Drawer 贴边。
|
|
22
22
|
|
|
23
23
|
`CollapseGroup` 的运行态视觉统一使用清爽的白色/主题表面卡片:短主题色指示条、紧凑
|
|
24
24
|
标题、可选图标、单行副标题、标题旁轻量 `x 项` 文案,以及最右侧无底色的折叠箭头。
|
|
@@ -171,6 +171,12 @@ if (ctx.token && ctx.token !== appliedHostToken) {
|
|
|
171
171
|
普通 `request`、浏览器 `fetch(FormData)` 上传和 `uni.uploadFile` 都必须读取响应头的新 Token。验收时必须连续执行至少两个需要登录态的请求(前一个允许发生 Token 轮换),确认后一个仍返回 `Code=1`;不能只看页面首屏渲染成功。
|
|
172
172
|
<!-- /microi-progressive:chunk -->
|
|
173
173
|
|
|
174
|
+
### 嵌入长会话验收
|
|
175
|
+
|
|
176
|
+
- 从宿主标准登录开始,打开原菜单中的微应用,再切到原生列表使微应用隐藏;保持同一浏览器会话,跨过该次真实 JWT 的原始 `exp` 后返回原菜单,并执行新的受保护业务调用。分别证明宿主与子应用经标准机制续签、继承同一有效会话,以及返回后的 HTTP/业务结果;只保存脱敏时间和结果,不记录 Token。独立入口通过、缓存首屏、几分钟业务 heartbeat 或 SignalR 房间租期均不能代替宿主长会话验收;浏览器意外退出应记为中断。
|
|
177
|
+
- 若旧宿主从匿名登录页启动后没有开启原有维护,先核对事件作用域与宿主实际能力。在已授权租户中优先使用既有 `LoginEndV8Code` 调用现有根组件标准维护(如 `self.$root.RefreshTokenWithLock`);先完整读取并保留原文,采用项目命名的幂等追加,复用原租户锁和定时器销毁,注销后停止,多次登录不重复安装。写入后回读前后哈希与原文前缀、刷新对应配置缓存,再标准登录并跨真实有效期验证。
|
|
178
|
+
- 钩子只能启动现有标准维护,不得复制 JWT/HTTP 会话实现、另造 Token 算法、放宽鉴权或修改有效期。检查次数及未抛异常不代表续签成功,必须以真实续签响应、新会话同步和后续受保护调用为证据;本地 Skill 增补也不代表 CLI、插件、平台或既有应用已发行升级。
|
|
179
|
+
|
|
174
180
|
## 运行时 ApiBase / OsClient 切换
|
|
175
181
|
|
|
176
182
|
允许用户切换平台的客户端必须把 `ApiBase + OsClient` 视为完整安全边界,而不是只替换请求 URL。候选端点应先匿名探测,成功后再原子更新配置并清除旧 Token、用户和平台派生缓存;账号、RSA 密文、菜单、表元数据和页面状态不得跨边界复用。SDK 每次修改 `apiBase` 或 `osClient` 都必须推进端点代次,请求记录发起时代次,并在处理响应头 Token、鉴权失效或响应体之前拒绝旧代次的迟到响应。验收至少覆盖“旧平台登录请求未返回 -> 切换平台 -> 旧响应携带 Token 返回”,并确认旧 Token 没有写入、新请求只发送一个新 `osclient`。
|