@microi.net/cli 5.7.9 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +107 -107
- package/scripts/microi-skills.meta.json +216 -216
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +27 -27
- package/skills/ai-engine/SKILL.md +1 -1
- package/skills/app-store/SKILL.md +5 -1
- package/skills/job-engine/SKILL.md +4 -3
- package/skills/message-notification/SKILL.md +2 -1
- package/skills/microi-ai-application/SKILL.md +7 -3
- package/skills/microi-client-frontend/SKILL.md +8 -3
- package/skills/microi-codex/SKILL.md +6 -0
- package/skills/microi-datasource-mapping/SKILL.md +4 -0
- package/skills/microi-docs-coverage/references/capability-map.md +1 -0
- package/skills/microi-microservice/SKILL.md +1 -0
- package/skills/module-engine/SKILL.md +13 -0
- package/skills/page-engine/SKILL.md +12 -1
- package/skills/playwright-e2e/SKILL.md +3 -3
- package/skills/v8-explorer-tree/SKILL.md +2 -2
- package/skills/v8-file-upload/SKILL.md +7 -0
- package/skills/v8-mq-mqtt/SKILL.md +2 -1
- package/skills/v8-tcp-integration/SKILL.md +2 -2
- package/skills/v8-workflow/SKILL.md +27 -0
- package/skills/workspace-conventions/SKILL.md +3 -3
- 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 +3 -3
- 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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-30T10:38:46.982Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -169,11 +169,11 @@
|
|
|
169
169
|
]
|
|
170
170
|
},
|
|
171
171
|
"microi-client-frontend": {
|
|
172
|
-
"originalSha256": "
|
|
173
|
-
"originalLines":
|
|
174
|
-
"prefixSha256": "
|
|
175
|
-
"prefixBytes":
|
|
176
|
-
"entryLines":
|
|
172
|
+
"originalSha256": "811f79af5f1479a59e8e1784029a08b5f3532032d951c6c19e4c6b26ef748bd4",
|
|
173
|
+
"originalLines": 700,
|
|
174
|
+
"prefixSha256": "650039258e4d5a0b1bb6f93baaf3dae02995573f6f053152eb71eabfb3d64783",
|
|
175
|
+
"prefixBytes": 1363,
|
|
176
|
+
"entryLines": 242,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"id": "microi-client-frontend-001",
|
|
188
188
|
"ordinal": 1,
|
|
189
189
|
"destination": "microi-client-frontend/SKILL.md",
|
|
190
|
-
"sha256": "
|
|
190
|
+
"sha256": "112177bb326f8d26803e3bd9248011d839fe8d081431320d0e09f90f82487984",
|
|
191
191
|
"lines": 30,
|
|
192
192
|
"heading": "1. 技术栈和源码入口"
|
|
193
193
|
},
|
|
@@ -195,8 +195,8 @@
|
|
|
195
195
|
"id": "microi-client-frontend-002",
|
|
196
196
|
"ordinal": 2,
|
|
197
197
|
"destination": "microi-client-frontend/SKILL.md",
|
|
198
|
-
"sha256": "
|
|
199
|
-
"lines":
|
|
198
|
+
"sha256": "2a10489fe38576db661f08076d5bd9c7cf0a39a0329a137810d899d7a395d36d",
|
|
199
|
+
"lines": 109,
|
|
200
200
|
"heading": "2. 表单引擎三层结构"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
"id": "microi-client-frontend-004",
|
|
212
212
|
"ordinal": 7,
|
|
213
213
|
"destination": "microi-client-frontend/SKILL.md",
|
|
214
|
-
"sha256": "
|
|
214
|
+
"sha256": "7d9e9b8b8f6b2c790d3cefd02b9dc0cda5d55ede477f98a48d92c8975990d3ff",
|
|
215
215
|
"lines": 40,
|
|
216
216
|
"heading": "7. 验证建议"
|
|
217
217
|
},
|
|
@@ -1196,11 +1196,11 @@
|
|
|
1196
1196
|
]
|
|
1197
1197
|
},
|
|
1198
1198
|
"page-engine": {
|
|
1199
|
-
"originalSha256": "
|
|
1200
|
-
"originalLines":
|
|
1201
|
-
"prefixSha256": "
|
|
1202
|
-
"prefixBytes":
|
|
1203
|
-
"entryLines":
|
|
1199
|
+
"originalSha256": "503ccbd8872dc275f4517c04422480b2f28fbf816ed24ef1734ace0b76b42dc5",
|
|
1200
|
+
"originalLines": 455,
|
|
1201
|
+
"prefixSha256": "c2d87a18beb8ff701da099fd402a180bdfc26d26be1da0180108fa1a2c6c92f5",
|
|
1202
|
+
"prefixBytes": 4140,
|
|
1203
|
+
"entryLines": 207,
|
|
1204
1204
|
"chunks": [
|
|
1205
1205
|
{
|
|
1206
1206
|
"id": "page-engine-000",
|
|
@@ -1262,8 +1262,8 @@
|
|
|
1262
1262
|
"id": "page-engine-007",
|
|
1263
1263
|
"ordinal": 8,
|
|
1264
1264
|
"destination": "page-engine/SKILL.md",
|
|
1265
|
-
"sha256": "
|
|
1266
|
-
"lines":
|
|
1265
|
+
"sha256": "ce0486eb9d2282bc199972e167e85aca7b03860d15abdd03982c4a23a90e206e",
|
|
1266
|
+
"lines": 14,
|
|
1267
1267
|
"heading": "运行态布局与滚动规范"
|
|
1268
1268
|
},
|
|
1269
1269
|
{
|
|
@@ -2221,11 +2221,11 @@
|
|
|
2221
2221
|
]
|
|
2222
2222
|
},
|
|
2223
2223
|
"v8-file-upload": {
|
|
2224
|
-
"originalSha256": "
|
|
2225
|
-
"originalLines":
|
|
2226
|
-
"prefixSha256": "
|
|
2227
|
-
"prefixBytes":
|
|
2228
|
-
"entryLines":
|
|
2224
|
+
"originalSha256": "6e430d7c55b30526baa86aa0bc534f78384a62a0f6beb4766cff938939a2f561",
|
|
2225
|
+
"originalLines": 615,
|
|
2226
|
+
"prefixSha256": "3554bc485deead22c00ae25dee693baf2ca81a0839769e046fff8a8f2eb87462",
|
|
2227
|
+
"prefixBytes": 13535,
|
|
2228
|
+
"entryLines": 258,
|
|
2229
2229
|
"chunks": [
|
|
2230
2230
|
{
|
|
2231
2231
|
"id": "v8-file-upload-000",
|
|
@@ -2745,11 +2745,11 @@
|
|
|
2745
2745
|
]
|
|
2746
2746
|
},
|
|
2747
2747
|
"v8-mq-mqtt": {
|
|
2748
|
-
"originalSha256": "
|
|
2749
|
-
"originalLines":
|
|
2748
|
+
"originalSha256": "f6c8f7bd873b40c9de383445f3a2b5aeab8d801e0e3615a497732067915cc5e8",
|
|
2749
|
+
"originalLines": 339,
|
|
2750
2750
|
"prefixSha256": "b20db62e20fefcd72f899ff2eccbccfc8240e65cabb87d7ff0e61ea89fcc4b01",
|
|
2751
2751
|
"prefixBytes": 812,
|
|
2752
|
-
"entryLines":
|
|
2752
|
+
"entryLines": 177,
|
|
2753
2753
|
"chunks": [
|
|
2754
2754
|
{
|
|
2755
2755
|
"id": "v8-mq-mqtt-000",
|
|
@@ -2763,8 +2763,8 @@
|
|
|
2763
2763
|
"id": "v8-mq-mqtt-001",
|
|
2764
2764
|
"ordinal": 2,
|
|
2765
2765
|
"destination": "v8-mq-mqtt/SKILL.md",
|
|
2766
|
-
"sha256": "
|
|
2767
|
-
"lines":
|
|
2766
|
+
"sha256": "834e8270912c25c900ca046d533f64c104a875acf8865919ffff5dca5442e7e6",
|
|
2767
|
+
"lines": 14,
|
|
2768
2768
|
"heading": "注意事项"
|
|
2769
2769
|
},
|
|
2770
2770
|
{
|
|
@@ -49,7 +49,7 @@ description: Microi AI 引擎、MiniMax 图片/音乐/视频生成与预览、
|
|
|
49
49
|
|
|
50
50
|
当前入口并不共用一条检索链路:普通 `Chat/ChatStream` 使用服务端会话上下文和固定核心规范 Prompt;`NL2SQL` 使用当前租户 Schema 双模式检索;`NL2V8` 使用 Skill 镜像与当前租户 Schema 双模式检索。默认模式不依赖 Ollama、`nomic-embed-text` 或 Qdrant;只有显式开启向量数据库时才增加向量通道。在线低代码建模在 `Microi.AI` 内建立同版 `microi.mcp` 会话,模型通过 `microi_codex` 执行工具循环。普通对话仍不调用 MCP;不能仅凭 Prompt 声称工具已执行,必须检查工具返回和回读。
|
|
51
51
|
|
|
52
|
-
在线 `/#/mic-ai-engine` 的低代码建模模式使用本地 Microi.
|
|
52
|
+
在线 `/#/mic-ai-engine` 的低代码建模模式使用本地 Microi.Agent 同一份 `microi.mcp` 工具目录:先 `list_tools`/`describe_tool`,再执行表、字段、菜单、接口引擎、Manifest 系统编排、删除等原 MCP 工具。用户在对话中明确要求写入时自动执行,不需要网页按钮;明确“只规划、不执行”时只调用只读工具。前端仅向 `Level >= 9999` 开放建模入口;服务端进入模式和每次工具调用前都以当前 DiyToken、主库账号及有效角色复核。工具原有确认值、审计和回读规则继续生效;超时或结果不确定时停止,不自动重试写操作。商城包不替换平台前后端程序。
|
|
53
53
|
|
|
54
54
|
建模对话使用非流式 `/api/Ai/Chat` 获取服务端 MCP 工具循环最终答案和工具名称/状态;普通对话保持流式。完整系统先调用 `microi_get_db_schema`、`microi_get_manifest_schema`、`microi_plan_system`,用 `microi_generate_system(dryRun=true)` 验证,再按用户明确创建请求调用 `dryRun=false` 并用 `microi_validate_system` 回读。模型提交的参数由原 MCP Schema 校验,不能在前端绕过。
|
|
55
55
|
|
|
@@ -183,7 +183,11 @@ description: Microi 应用商城开发、打包、安装和升级规范。用于
|
|
|
183
183
|
## 版本与回滚
|
|
184
184
|
|
|
185
185
|
- 版本号单调递增,保存变更清单和前后哈希。
|
|
186
|
-
-
|
|
186
|
+
- 官方 Web、UniApp、MicroService 体验路径统一为公有桶对象键 `/{OsClient小写}/micro-app/{AppKey}/index.html`,通过 `https://static.itdos.com` 访问;`/{OsClient小写}/micro-app/{AppKey}/{Version}/index.html` 及同目录资源是不可变历史版本。私有桶按同样相对目录保存最新版与各历史版本的源码;编译包没有源码时明确记为 `NotIncluded`。v3 的 `microi/application-assets/v3/...` 仍可作为内部校验源,但 `/micro-app/v3/tenants/...` API resolver 和旧 `ai-app-publish` 不再作为官方商城体验链接。
|
|
187
|
+
- 发布顺序为完整上传并验证版本目录、复制私有源码快照、提升固定根的非入口资源、最后提升固定 `index.html`。CDN 对所有被覆写的固定路径做精确刷新并回读任务 `Complete`,再从 `static.itdos.com` 回读入口及引用资源,最后更新 `sys_microistore.PreviewUrl/PublicPublishPath`;任一步失败保留旧商城入口并进入可恢复状态。跨版本重发不得覆写历史目录的不同内容。官网列表、详情、二维码和“立即体验”只能展示固定根的 CDN URL,不带版本、请求指纹或缓存绕过参数。
|
|
188
|
+
- v3 数据库中的 `PreviewUrl/PublicPublishPath` 可以保存以 `/` 开头的对象路径,完成态检查依赖此相对值;官网接口和商城工作台使用租户 `FileServer` 生成完整 CDN 体验 URL。展示层修复不得直接改写 v3 记录为绝对 URL。
|
|
189
|
+
- 官方 CDN 凭据按当前租户系统设置 `Integration.Cdn.Aliyun.*`、`Integration.Dns.Aliyun.*`、历史 SaaS `AlidnsKeyId/AlidnsKeySecret` 顺序读取;半配置失败关闭,不静默跳过刷新。阿里云可能把并发 URL 合并为同一任务号,需等待该任务返回的全部 URL 完成并按原始字节哈希回读。批量迁移应按每日刷新配额限速或分日执行。
|
|
190
|
+
- 旧版对象若已丢失,只能从商城编译包、仍可访问的当前体验路由或本地归档取得逐文件匹配冻结清单的原始字节后补齐;哈希或长度不符时拒绝写入。历史版本无法恢复时保留原版本记录和链接并列出待补清单,可独立迁移已完整校验的当前版本,但不得把未恢复的历史目录标为已归档。
|
|
187
191
|
- stage 前回读并冻结应用的 `CurrentVersion + AppVersion`;finalize 必须同时传 `ExpectedCurrentVersion + ExpectedAppVersion`,在以不可变 AppId 加锁后再次 compare-and-set。缺失前置条件、AppId/AppKey 漂移或旧请求晚到一律失败关闭;重新发布必须重新盘点,不能静默回退。
|
|
188
192
|
- 新清单发布成功时,同应用 `dist/` 下不再出现的 active 文件元数据只能条件式改为可逆归档 scope,条件必须包含 AppId、路径、旧 scope 与版本;禁止删除 HDFS/数据库记录,也不得触碰 Private、非 `dist/` 或另一应用的行。
|
|
189
193
|
- 官网、二维码和用户分享只使用无版本号根入口,不追加 `v/apiBase/OsClient`。目标租户的 `ApiBase/OsClient` 在发布或安装时写入入口 HTML 的 `window.__MICROI_APP_CONTEXT__ / MICROI_API_BASE / MICROI_OS_CLIENT`;安装包不得沿用发布端运行上下文。
|
|
@@ -26,16 +26,17 @@ Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任
|
|
|
26
26
|
|
|
27
27
|
### 执行日志与只读诊断
|
|
28
28
|
|
|
29
|
-
- 新执行/失败/跳过记录使用 `ScheduleExecutionLog
|
|
29
|
+
- 新执行/失败/跳过记录使用 `ScheduleExecutionLog`,直接等待 MongoDB 确认写入 `sys_log_<tenant>/log_yyyyMM`;固定 `TargetType=ScheduledJob`、`TargetId=JobName`,`EventId` 幂等。MongoDB 确认失败才写当前租户的 `diy_schedule_job_log`,两者均失败不得改变业务结果。`AddSysLog` 仅代表异步入队,不能用作本能力的持久化确认。
|
|
30
30
|
- 表单使用字段级 Tabs,分别放置“运行日志”和“历史日志”只读表格;仅显示的页签发起查询。历史 `diy_schedule_job_log` 保留,不自动删除、搬迁或清空。
|
|
31
31
|
- `platform-schedule-job` 的 `logs/historylogs` 要求任务名、月份,每页最多 100 条,按时间+Id 游标多取一条判断 `HasMore`,不计算多年数据总数。Mongo 索引为 `(TargetType,TargetId,CreateTime,EventId)`;历史表索引 `(JobName,CreateTime,Id)` 通过声明式应用包交付并现场回读。
|
|
32
32
|
- 用 `microi_query_job_runtime` 或 `microi_run_engine` 的 `Action=diagnostics` 核验启动、待机、实际执行数、领取进展、设置读取失败、触发器与心跳。一个租户的设置读取超时只能关闭该租户,不能拖住其它租户;每租户最多一个在途读,不能按轮询叠加请求。
|
|
33
|
-
- MongoDB
|
|
33
|
+
- `logs` 优先读 MongoDB,MongoDB 查询失败时自动读关系库;成功的空集合不回退。`historylogs` 固定读关系库。两个库都不可用必须显示查询失败,不能伪装为空日志。镜像更新不等于 Mongo 升级;后台系统日志队列的 spool 仍应在持久卷并验收恢复重放。
|
|
34
34
|
|
|
35
35
|
### 运行时间刷新与配置版本分离
|
|
36
36
|
|
|
37
37
|
- Quartz 周期同步 `LastTime/NextTime` 是运行状态投影,不能调用通用 `UptFormData` 生成配置版本或数据日志;用户保存名称、Cron、代码等配置仍走原表单事件和版本链路。
|
|
38
38
|
- 只读取 Id、任务名和两个时间列;时间未变化时不写入。变化时由可信调度内核向同一租户主库执行固定两列参数化 CAS,匹配原时间、任务名、正常状态与未删除条件;并发/陈旧结果命中 0 行时不重放。
|
|
39
|
+
- 编辑 Cron 重建触发器后,Quartz 的 PreviousFireTime 可能为空;同步时不得因此清空数据库已有的 `LastTime`,新的 `NextTime` 仍应更新。验收需覆盖“已执行任务改到当天已过时间,下一次排到次日”的场景,并分别核对新旧执行日志。
|
|
39
40
|
- 历史版本保留不自动删除。持续高 CPU 时核对 `mic_data_version` 实际物理索引,不以应用包已声明索引推断旧库已安装;用 MCP 回读 `(TableId,TableRowId,CreateTime)`,并比较 MySQL digest 两次采样的执行数、扫描行数与耗时差值。
|
|
40
41
|
- 此修复要求更新调度后端;既有 `platform-schedule-job`、任务元数据及 MCP 查询/保存协议保持兼容。验收覆盖两租户同名任务、两连接竞争、未变化、暂停/软删除/重命名后陈旧写入、主库选择和配置字段不变。
|
|
41
42
|
|
|
@@ -45,7 +46,7 @@ Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任
|
|
|
45
46
|
- 开启时在 Quartz 领取触发器、处理 Misfire 之前按租户过滤;领取后、真正触发前重新读取系统设置缓存。禁止仅在 `IJob.Execute`、Listener veto 或业务 V8 入口 return:共享 Quartz 可能已经推进 NextFireTime,造成旧版漏执行。
|
|
46
47
|
- 集群故障恢复也不得清理停用租户的在途记录或创建其补偿触发器。Quartz 以故障节点为单位清理记录,所以同一故障节点混有被停用租户时,新版推迟该故障节点整组恢复,交给旧节点或关闭开关后处理;其它健康节点仍正常领取。
|
|
47
48
|
- 正常保存系统设置在事务提交后失效缓存,下一次调度检查生效,不用重启;不是强制中断,已经开始的任务允许完成。缓存/配置读取失败拒绝该租户的新领取,不影响其它健康租户;Redis/失效通知异常时不能承诺硬实时。
|
|
48
|
-
- 停用期间只读观察周期计划,不推进共享触发器;每个“租户 + Job + Trigger +
|
|
49
|
+
- 停用期间只读观察周期计划,不推进共享触发器;每个“租户 + Job + Trigger + 计划时间”持久化确定性事件,包含 `Status=Skipped`、`Executed=false`、`Reason=SystemTaskSchedulingDisabled` 和中文说明。Redis 原子预留与日志确定性主键共同防止多新版节点重复记录;日志说明仅代表新版未执行,旧版仍可能正常执行。不补跑业务、不补写进程停机历史;新增/修改计划的日志目录最多约 10 秒更新。
|
|
49
50
|
- 普通接口调用、MQ 消费、升级/应用安装等持久后台任务不属于此开关的范围。手动触发 Quartz 任务仍经过门禁。
|
|
50
51
|
- 交付顺序:先安装字段并打开开关,再让新版节点参与调度;确认旧版所有调度进程已停止且在途任务完成后,关闭开关交接。不同业务库分别设置,不能用一个租户的值控制全部租户。
|
|
51
52
|
- 验收至少覆盖:默认兼容、开关实时读取、租户隔离、共享库旧节点继续领取、领取后开关变化不推进触发器、Misfire 不误推进、多节点日志去重;不得在真实生产任务上制造副作用做测试。
|
|
@@ -132,9 +132,10 @@ await V8.Notification.MarkRead({ All: true });
|
|
|
132
132
|
- `Users` 面向当前租户用户,`Tenants` 仅允许主租户选择当前环境和网络的启用子租户,`Editions` 仅由宿主现有 License 发放判断确定官方身份。官方选项需明确选择 `OpenSource / Personal / Enterprise`,不得默认给全部版本发送。请求中的用户、租户、官方标志和产品版本不构成授权。
|
|
133
133
|
- 试用提醒只绑定一个子租户,配置到期时间和提前分钟数,不改 License。所有提醒都必须有有效结束时间,支持 `Once / EveryEntry / AfterServerRestart`;定时支持一次、每日、每周和分钟间隔。每日/每周是固定时间间隔;时间传 UTC,界面显示浏览器时区;恢复上线不补弹所有历史周期。
|
|
134
134
|
- 后端三个 Managed Key 为 `platform-reminder-runtime / platform-reminder-official-feed / platform-reminder-tick`。运行时动作包括 `Capabilities / Recipients / List / Get / Validate / Save / Publish / Withdraw / History / Inbox / Presented / Acknowledge`。发布需草稿 Id、`ExpectedRevision` 和稳定 `RequestId`;每次进入模式的收件箱和回执需稳定的本页面 `EntryId`。
|
|
135
|
-
- `AccountScope=SuperAdmins`
|
|
135
|
+
- `AccountScope=SuperAdmins` 的提醒接收资格由接收服务的真实 DiyToken 与主库有效用户 Level >= 9999 双重核验,不限 admin 或指定角色;配置写权限继续额外核验有效管理员角色。`AllAccounts` 面向全部帐号。缺省字段保留旧公告的全部帐号语义;新 UI 和 MCP 的跨租户/版本默认范围为超级管理员。普通服务器不能伪造官方 License 发放身份。
|
|
136
136
|
- 自动授权提醒通过 `LicensePolicyGet/LicensePolicyValidate/LicensePolicySave` 配置,`ScopeType=Editions` 仅官方,`Tenants` 仅主租户。Policy 为 `{Personal:{AdvanceDays:7,Content:''},Enterprise:{AdvanceDays:7,Content:''}}`,天数 1–3650;空文案回退默认,支持 `{版本}/{到期时间}/{倒计时}`,分钟倒计时总会保留。保存携带 ExpectedRevision(首次 0)并回读,不通过普通公告 Save/Withdraw 修改策略。MCP 复用 get_notification_context(recipientScope)和 manage_system_reminder(scopeType、policy),确认串 `LicensePolicySave:<scopeType>`。
|
|
137
137
|
- 接收端先检查固定官方源,再独立检查主租户对子租户的授权提醒。签名期限、子租户期限和超级管理员身份只接受宿主可信上下文;每次真实登录分别去重,未确认刷新继续出现,站内“查看授权”不能写确认回执。右上角版本标签固定在不足 7 天时显示秒级倒计时。验收覆盖两层同时触发、各自确认、30 天配置、空默认与非 admin 管理员。
|
|
138
|
+
- 开源版无付费到期日;`DateTime.MinValue`(`0001-01-01`)不是已到期授权,不得生成“系统授权已到期”提醒或按付费版向官方源请求。官方 OpenSource 欢迎公告沿用已发布的 `Editions + OpenSource + SuperAdmins + AfterServerRestart` 规则,不另建硬编码弹窗;每名有效 `Level >= 9999` 帐号分别领取、确认,同批次不重复,下次 API 进程启动批次重新领取。真实已验签且有有效日期的付费合同到期后,仍保留其付费到期提醒。
|
|
138
139
|
- `AfterServerRestart` 用可信后端进程启动标识和主租户当前运行分区的共享 Redis 最新批次计算 occurrence,`Presented` 按数据库稳定回执主键抢占领取资格;同帐号多页面只有一个领取,刷新和重新登录不再次弹出。展示成功前回执应已持久化;响应丢失以同一个页面 `EntryId` 恢复,不以 localStorage 作为事实源。`ShownAt` 与 `ClosedAt` 分离,当前已领取弹窗需保留到关闭、撤回或过期。
|
|
139
140
|
- 超级管理员范围和重启频率的最低接收协议为 2;官方 feed 必须对协议 1 隐去此类公告,接收端出缓存后再次按当前身份裁剪。未知范围、异常协议或无法核验的启动批次失败关闭。重启频率不能再叠加周期计划;多节点滚动发布采用共享最新启动批次,验证负载切换不回退、不重复。
|
|
140
141
|
- 定时任务 `platform-reminder-tick` 每分钟只发送唤醒信号;权威计划与回执保存在数据库。前端监听 `ReceivePlatformReminder` 后回读,SignalR 正常约 60 秒对账、断线约 15 秒轮询并对错误退避;关闭失败重试、撤回和过期收回,禁止使用本机定时器或 localStorage 作为已读事实源。
|
|
@@ -89,9 +89,13 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
|
|
|
89
89
|
3. 检查 `dist/build` 不含源码、Token、密钥、localhost、source map 或陈旧 chunk。
|
|
90
90
|
4. 同步私有源码,再流式发布公有构建目录;源码同步失败不得继续发布。发布前回读并冻结应用的 `CurrentVersion` 与 `AppVersion`,stage 只上传不可变版本资产,finalize 必须同时提交 `ExpectedCurrentVersion` 与 `ExpectedAppVersion` 做 compare-and-set;缺一项、状态漂移或回读不一致都停止,不能自动覆盖较新发布。
|
|
91
91
|
5. 每次创建、修改、升级或重新发布 AI 应用,必须在任何源码同步、stage、finalize 或商城制包之前,为目标精确 `AppVersion` 写入 `sys_microistore_changelog`。日志的 `StoreId / Version / Title / ChangeType / Content / ReleaseTime` 必须完整;发布工具显式传入含义一致且非空的 `changeSummary`,发布后同时回读商城子表与 `mci_ai_app_version.ChangeSummary`。缺日志或版本不一致必须停止发布。
|
|
92
|
-
6. Web
|
|
93
|
-
7.
|
|
94
|
-
8. `
|
|
92
|
+
6. 官方 Web、UniApp、MicroService 的体验地址统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶对象键与域名后的路径完全一致;不再按运行类型分叉到 `ai-app-publish`,也不把 v3 内部 API resolver 用作公开体验地址。当前版本的全部编译文件写入该应用固定根,历史版本写入同根的 `/{Version}/` 目录;历史目录一旦验证不得覆写成不同字节。
|
|
93
|
+
7. 同一版本私有源码文件使用相同的租户、应用、版本相对路径写入私有桶;固定根保存最近一次已完成发布的源码。确实不含源码的编译包在包声明中记录 `Source=NotIncluded`,运行时版本的 `SourceSnapshotPath` 保持空值,不得从公有产物伪造源码。先校验完整公有版本与私有源码快照,再提升固定根的非入口资产和 `index.html`;固定入口切换后提交 CDN 精确路径刷新,回读刷新任务终态和公有入口及引用资源,再更新商城 `PreviewUrl/PublicPublishPath`。刷新任务仅提交成功、单个 CDN 节点 200 或本地构建成功都不算完成。
|
|
94
|
+
8. 官网、二维码、分享链接和商城“立即体验”只使用固定根 `index.html`;版本目录仅供回滚与显式历史预览。CDN 直接读取公有桶对象,不要求其做动态版本解析或反向代理。发布器必须使 HTML 引用的 JS/CSS 在切换时已存在,并验证从 `static.itdos.com` 打开的应用仍把业务 API 请求发往目标租户的 `ApiBase`。
|
|
95
|
+
v3 的 `sys_microistore.PreviewUrl/PublicPublishPath` 和版本 `PreviewUrl` 在数据库内保留以 `/` 开头的对象路径,后端完成态检查会与投影路径逐字比较;官网接口与商城工作台对外展示时使用租户 `FileServer` 转为完整 CDN URL。不得为统一展示直接把这些 v3 内部字段改写成绝对 URL。
|
|
96
|
+
9. 新的官方 Web、UniApp、MicroService 发布统一使用支持固定 CDN 投影的 v3 目录流式发布;旧 `ai_app_build` 只保留历史兼容和迁移读取,不作为新版本发布入口。目标 API 的 `ApplicationCdnProjectionSupported` 未启用时先部署后端并停止新发布,不回退到 `ai-app-publish`。
|
|
97
|
+
10. 官方 `static.itdos.com` 的刷新凭据从当前租户后端系统设置 `Integration.Cdn.Aliyun.*` 读取,兼容旧的 `Integration.Dns.Aliyun.*` 与 SaaS `AlidnsKeyId/AlidnsKeySecret`;必须成对配置并具备刷新及任务查询权限。刷新任务可能合并多个 URL 到同一任务号,应以全部任务 `Complete` 和 CDN 文件哈希回读为准;不得仅凭提交成功切换商城入口。批量发布须考虑 CDN 每日刷新配额。
|
|
98
|
+
11. `SharedPublicRuntime.EntryUrl` 和历史版本目录仅用于历史记录、回滚、摘要校验与审计。回读应用、版本、active 文件清单和 SHA-256;旧清单文件只能可逆归档,不能删除。再分别直接请求稳定当前入口、不可变版本入口及主要 JS/CSS,并断言前者完成加载后地址栏仍不含版本段。
|
|
95
99
|
|
|
96
100
|
## 完成定义
|
|
97
101
|
|
|
@@ -27,7 +27,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
<!-- /microi-progressive:chunk -->
|
|
30
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=
|
|
30
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=112177bb326f8d26803e3bd9248011d839fe8d081431320d0e09f90f82487984 -->
|
|
31
31
|
## 1. 技术栈和源码入口
|
|
32
32
|
|
|
33
33
|
### 详情评论与代码版本的按需读取
|
|
@@ -58,7 +58,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
60
|
<!-- /microi-progressive:chunk -->
|
|
61
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
61
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=2a10489fe38576db661f08076d5bd9c7cf0a39a0329a137810d899d7a395d36d -->
|
|
62
62
|
## 2. 表单引擎三层结构
|
|
63
63
|
|
|
64
64
|
### 模块级跨端视图
|
|
@@ -155,6 +155,11 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
155
155
|
|
|
156
156
|
### 用户级界面偏好(强制)
|
|
157
157
|
|
|
158
|
+
右上角主题设置的边角风格默认圆角;已安装 `sys_user.CornerStyle` 时从账号偏好恢复,旧租户才使用浏览器本地兼容值。根元素 `data-mci-corner-style` 控制全局角半径,覆盖动态挂载的 Element Plus 弹层。顶栏入口统一使用 40px 触控区域和 20px 图标,AI 入口使用图标组件,不使用图片。模块 `HideTableBanner`、`HideFormBanner` 只在值明确为 `1/true` 时隐藏对应 Banner,并跳过其专属统计请求;未安装开关字段的旧菜单继续显示。
|
|
159
|
+
|
|
160
|
+
- 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
|
|
161
|
+
- 桌面经典布局使用 `NavigationLayout=Side/Top`,个人空值或 `System` 继承租户,租户空值为侧边导航。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。右上角同时配置 `MenuChildExpandMode=System/Down/Right`,通过同一个个人偏好接口跨设备保存。
|
|
162
|
+
- 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
|
|
158
163
|
- 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
|
|
159
164
|
- 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
|
|
160
165
|
- 自助保存优先使用官方 `Managed` 接口引擎,由 `V8.CurrentUser.Id` 与 `V8.OsClient` 推导用户和租户,并在服务端构造固定白名单更新对象;接口参数禁止决定目标 Id/OsClient,也禁止写入 Account、Phone、Tenant、Dept、Role、Level、State、Pwd、认证因子和登录审计字段。只有缺少可复用可信原子能力时才新增 C# DTO/端点。保存成功后调用 `V8.Method.RefreshLoginUser` 刷新登录缓存,并让微服务宿主重新同步 `CurrentUser`。
|
|
@@ -185,7 +190,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
185
190
|
---
|
|
186
191
|
|
|
187
192
|
<!-- /microi-progressive:chunk -->
|
|
188
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=
|
|
193
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=7d9e9b8b8f6b2c790d3cefd02b9dc0cda5d55ede477f98a48d92c8975990d3ff -->
|
|
189
194
|
## 7. 验证建议
|
|
190
195
|
|
|
191
196
|
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
@@ -29,6 +29,12 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
29
29
|
- 当前 Electron 桌面运行时不能直接打包 iOS/Android,也不能把现有 DMG 原样提交 Mac App Store。移动端和 MAS 版应作为受限客户端,复用账号、模型、会话、MCP 与桌面配对协议,把 Node/Harness/Shell/插件执行放到配对桌面或合规远端;分别完成 Apple/Google 签名和商店审核。
|
|
30
30
|
- 官方账号页和关于标签通过 `platform-current-user` 接口引擎读取当前 `sys_user.LicenseType`。桌面相关平台业务逻辑优先通过 `microi_itdos` 接口引擎实现;只有接口引擎缺少必需底层原子能力时才能改后端源码,并说明原因。
|
|
31
31
|
- 正式 Windows/macOS 安装包必须内置固定版本且经过 SHA-256 校验的 cloudflared,运行时优先使用安装包 `resources/bin`,避免首次联网临时下载。检查更新从 `https://api.itdos.com/microi-code/updates/` 的匿名接口引擎读取 YAML/JSON,安装包二进制仍通过 HDFS 流式发布。
|
|
32
|
+
- Windows 安装验收必须包含旧卸载器损坏后的升级、同版本重装、超过 260 字符的路径以及全部文件 SHA-256 回读。安装器使用当次发布的兼容卸载器,并用固定哈希的 Unicode 7-Zip 直接解压到目标目录,禁止恢复临时目录解压后使用 NSIS `CopyFiles` 复制的流程;该流程会将路径或复制错误误报为“应用无法关闭”。进程检查仅匹配安装目录内的产品主程序及内置 Node,不能按整个目录匹配安装器或无关程序。
|
|
33
|
+
- 长路径验收必须先安装完整旧版本,再在同一目录覆盖升级及再次重装,不能只在空目录或仅含模拟卸载器的目录安装。卸载清理、旧文件备份迁移和失败回滚均须支持 Windows 扩展路径;通过真实 NSIS 与独占文件句柄验证长路径迁移和占用回滚,不能仅用 JS 文件操作或首次解压测试替代。
|
|
34
|
+
- Windows 1.2.7 起安装失败诊断直接集成于安装器:失败窗口提供「复制安装日志」与「打开日志」,不另发独立诊断工具。`build/microi-installer-log.nsh` 在实际清理/解压/回滚步骤写入安装目录外的 UTF-8 日志,`build/microi-installer-diagnostics.ps1` 作为内嵌的只读补充,记录 Win32 访问错误和 Restart Manager 占用 PID。整份日志通过原生 Unicode 剪贴板复制;超过容量时明确拒绝而不截断。验收须真实点击复制按钮、核对中文长日志、占用文件的 Win32=32 与回滚;卸载退出码 2 不等同于 Win32 错误码 2,本机通过不代表客户机升级通过。
|
|
35
|
+
- Windows 1.2.8 起升级先在安装盘同级目录完整解压,再切换程序目录;旧文件仅同盘重命名,禁止回退到逐文件跨盘搬运。`build/microi-installer-transaction.nsh` 与相关 NSIS 补丁必须随上游同步永久保留。Win32=33 是文件区域锁错误,不能仅凭此指认某个安全软件;验收须在安装盘与 TEMP 不同的条件下持有真实字节锁,证明旧跨盘操作失败而新版安装成功,并验证持续占用、回滚与未知目标目录冲突。未恢复的同盘备份必须在安装退出后保留,不能存入会自动删除的临时目录;完整源文件哈希检查与客户设备验收分别记录。
|
|
36
|
+
- Windows 1.2.9 起本机启动探测必须使用覆盖 TCP 连接和响应头的硬超时;Harness 输出认证地址后,Node 请求失败可使用实际渲染页面的 Chromium 网络通道回退,严格限制为本次 `http://127.0.0.1:端口/`、不带凭据、不跟随重定向。记录两个通道的真实错误;只有响应正常且存在本次认证信息才可启动页面。恢复日志只能去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布必须运行 `scripts/verify-harness-startup.mjs`,使用发布包内 Node/Harness 验证普通与安全模式、注入 Node 超时后由真实 Chromium 渲染新会话控件,以及双通道真实不响应的有界失败;本机验证不能称为客户设备已通过。
|
|
37
|
+
- 桌面平台 Worker 必须在真实安装包内验证 IPC 与 Windows DPAPI。旧保险库只有成功解密且明文为零字节时才允许迁移为空文档;损坏或其他 Windows 用户的保险库保留原文件并返回具体错误。启动初始化拒绝不能让 Node 服务退出;单元测试、安装成功与真实桌面账号/AI 员工页面联调是三个独立验收层。
|
|
32
38
|
- dsh-desktop 升级必须遵循 `Microi.Agent/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
33
39
|
|
|
34
40
|
### 默认中文输出
|
|
@@ -18,6 +18,10 @@ Microi 低代码平台中,`Select / Radio / Checkbox` 等选项组件支持两
|
|
|
18
18
|
|
|
19
19
|
> ⚠️ 注意:若误将 Key 与 Value 设置为相同中文,后台和 DB 中存的就是中文字符串(如 `Level='普通会员'`)。
|
|
20
20
|
|
|
21
|
+
### 字段 V8 必须按保存格式读取选中值
|
|
22
|
+
|
|
23
|
+
`SelectSaveFormat='Text'` 时,`V8.Form.<字段>` 可以是保存字段的原始文本;旧配置可能仍为对象或 JSON 文本。按钮不能无条件读取 `.TableName`、`.Id` 等对象属性。先按真实 Config 提取值并校验非空,再调用接口;接口失败和网络异常均在 `finally` 恢复 Loading。验收须覆盖文本、旧对象、JSON 文本和空选项。
|
|
24
|
+
|
|
21
25
|
---
|
|
22
26
|
|
|
23
27
|
## 二、移动端前端显示枚举值的规范
|
|
@@ -76,6 +76,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
76
76
|
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config | 接口引擎实战和规范 |
|
|
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
|
+
| `v8-engine/microi-agent.md` | microi-codex, microi-codex-installer | Microi Agent 桌面安装、连接诊断与更新 |
|
|
79
80
|
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine | 全部前端 V8、平台 AI、强身份验证、扫码和蓝牙打印 |
|
|
80
81
|
| `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8、强身份票据、平台 AI 和专项路由 |
|
|
81
82
|
| `v8-engine/vs-code-plugin.md` | v8-explorer-tree, microi-client-frontend, workspace-conventions | VS Code 插件、Microi CLI、AI/MCP 初始化、类型、资源树和共享工作区 |
|
|
@@ -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
|
|
|
@@ -120,6 +120,13 @@ HTTP 成功或菜单字段非空不足以证明统计有效。
|
|
|
120
120
|
| `Report` | 虚拟报表 |
|
|
121
121
|
| `MicroService` | 已发布前端微服务页面 |
|
|
122
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`。
|
|
123
130
|
|
|
124
131
|
`CodeForm` 复用 MicroService 宿主与菜单权限上下文。先在表单设计器生成源码,保存至 `microi-generated-forms`,构建并发布微服务;再配置 `MicroServiceKey + MicroServiceRoutePath`(以及当前租户真实的 `MicroServiceId + MicroServicePageId`),保留原表的 `DiyTableId`。Manifest 生成器可解析可移植的 Key/RoutePath;`microi_create_module` 必须传实际 Id。不能把只保存私有源码当作已发布运行产物。
|
|
125
132
|
|
|
@@ -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,6 +19,16 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
|
|
|
19
19
|
|
|
20
20
|
用户提供参考截图时,先拆出面板行列比例、指标主次、图表与表格高度、标题/筛选位置,再用原生 pannel/statistic/chart/tabel/list 组合配置。不能把所有指标替换成一排大色块,也不能用模板假数据声称已接通客户业务。必须用同一视口截图检查浅色和平台深色,检查页面缩放后的断行与纵向空白;布局接近度和真实数据绑定分别验收。
|
|
21
21
|
|
|
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[0].value` 应绑定当前账号可访问、关联 `microi_calendar` 的真实模块 Id;`[1].value="compact"` 只压缩月历密度,仍须支持点击日期新增及事件编辑、删除。备注字段为 `Remark`。隐藏菜单也可以是授权入口,旧模块可能没有 `DiyTableName`,此时必须显式绑定实际模块,不把只读日期回退当作日程验收成功。无模块时展示本月日期并明确提示未配置,不伪造任务。
|
|
29
|
+
- `diytable.widgetParams[4].value="NoticeList"` 以只读公告列表展示真实授权公告;表、菜单仍在 `[0]/[1]`,模块缺失时使用 `referencePolicy.onMissing="RemoveWidget"` 移除可选组件及空容器。
|
|
30
|
+
- 修改已有首页前通过 MCP 读取页面及历史 `CurrentHash`,保存传 `expectedCurrentHash`,再回读 JSON 和历史,保留可恢复版本。
|
|
31
|
+
|
|
22
32
|
你正在为 Microi 吾码平台生成界面引擎页面的 JSON 数据。界面引擎页面由 `formData` 对象描述,用户导入 JSON 即可使用。
|
|
23
33
|
|
|
24
34
|
<!-- microi-progressive:begin -->
|
|
@@ -172,10 +182,11 @@ $ApiBase$/apiengine/{ApiEngineKey}
|
|
|
172
182
|
```
|
|
173
183
|
|
|
174
184
|
<!-- /microi-progressive:chunk -->
|
|
175
|
-
<!-- microi-progressive:chunk id=page-engine-007 sha256=
|
|
185
|
+
<!-- microi-progressive:chunk id=page-engine-007 sha256=ce0486eb9d2282bc199972e167e85aca7b03860d15abdd03982c4a23a90e206e -->
|
|
176
186
|
## 运行态布局与滚动规范
|
|
177
187
|
|
|
178
188
|
- 页面只保留一个主滚动容器:仪表盘、首页和嵌套界面优先继承最外层页面滚动;单个 `pannel`、`workcenter`、`diytable`、`diycalendar`、嵌套 `pageengine` 在运行态默认使用内容自适应高度和 `overflow: visible`,不得无条件设置 `overflow: auto`。
|
|
189
|
+
- 经典桌面主滚动容器为路由内容区,导航与 Tab 留在视口内;移动端继续保留外层文档滚动。图表在异步挂载后绑定尺寸观察器,切换导航、收缩侧栏及改变窗口宽度都应重新测量,禁止仅隐藏溢出而保留错误画布宽度。真实回归覆盖两种导航、两种桌面宽度,以及日程创建后刷新、备注编辑和删除。
|
|
179
190
|
- 固定高度只用于设计器拖拽预览、图表画布或确有虚拟滚动需求的组件。设计态可按 `widgetOption.height` 提供滚动,运行态必须先验证内容能完整展开;不能用双滚动条掩盖容器高度不足。
|
|
180
191
|
- 表格型容器通常按 15 条数据验收,表头、工具栏、全部数据行和分页区应同时可见;首页紧凑表格可通过 `diy-table` 的 `PageSizeList` 追加 `[10]`,并在 `sys_menu.DefaultPageSize` 为空时默认选择候选页码中的最小值。空间不足时先压缩统计卡、工具栏、行高和间距,再考虑增加外层页面长度,不隐藏分页、不在卡片内部滚动。
|
|
181
192
|
- 同一行的容器使用一致的左右边距、内边距、标题高度和顶部基线;同层卡片间距必须相同,左右边缘、标题、工具栏和内容区应形成稳定对齐线。推荐使用统一的 8px 基础间距和 8/12/16px 倍数。
|
|
@@ -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 -->
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: v8-explorer-tree
|
|
3
|
-
description: Microi.
|
|
3
|
+
description: Microi.Agent 插件 V8 资源管理器目录规范(表单引擎 / 字段V8事件 / 模块引擎按钮)。覆盖 diy_table V8 事件、diy_field V8 事件、sys_menu 按钮 JSON 拆分回写,含 7 条安全不变量。用于实现 VSCode V8 事件树、重构目录布局或处理 sys_menu 按钮 JSON 序列化。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
7
|
|
|
8
8
|
# v8-explorer-tree — V8 资源管理器目录规范 v2(2026-05)
|
|
9
9
|
|
|
10
|
-
> 涉及文件:[Microi.
|
|
10
|
+
> 涉及文件:[Microi.Agent/src/explorer/engineTreeProvider.ts](Microi.Agent/src/explorer/engineTreeProvider.ts)、[Microi.Agent/src/sync/syncManager.ts](Microi.Agent/src/sync/syncManager.ts)、[Microi.Agent/src/constants.ts](Microi.Agent/src/constants.ts)、[Microi.Agent/src/utils.ts](Microi.Agent/src/utils.ts)、[Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs](Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs)
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -42,6 +42,7 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
|
|
|
42
42
|
- 浏览器上传必须携带 `FormEngineKey + FieldId + SysMenuId`,编辑已有记录再带 `FormDataId`,TableChild 再带父子授权上下文。后端先用 FormEngine 校验动作权限,再从当前租户回读 `diy_field.Component/Config`,用权威 `Limit` 覆盖请求值,并把目录固定为 `ImgUpload→img`、`FileUpload→file`、`RichText→editor`。
|
|
43
43
|
- 客户端 `Limit`、`Path`、字段 Id 和菜单 Id 都只是待验证线索。没有可验证字段上下文的普通交互式上传默认私有并限制到安全一级目录;不能为了恢复公有字段语义而重新信任裸 `Limit=false`。
|
|
44
44
|
- 兼容旧移动端/定制页面时,在普通系统设置 `sys_config.HdfsUploadRules` 配置目录与角色规则,无需逐个改客户端。`Path` 使用区分大小写的租户内相对路径;`RoleIds` 是真实角色 Id 数组,或显式启用 `AllAuthenticated`;`IncludeSubdirectories` 和 `AllowPublic` 默认关闭。只有后端有效角色命中且显式允许公有,才尊重请求 `Limit=false`。规则不是秘密,不必放入后端私有设置,修改权限与服务端判定必须严格受控。
|
|
45
|
+
- 排查目录授权失败时先检查 multipart 是否同时提交 `Path` 和 `path`。客户端只应提交一个 `Path`;后端对相同值归一,对不同值拒绝,不能因重复字段误判而扩大 `HdfsUploadRules`。
|
|
45
46
|
- 后端 v8.2.9+ 的配置 `Path` 支持 `*`(单层任意字符)、`**`(零到多层目录,须独占层级)、`?`、`[abc]`、`[a-z]`、`[!0-9]`/`[^0-9]`、`{a,b}` 候选及组合;优先 `files/{inspection,quality}/**` 这类最小业务前缀,不能为省事直接向全部用户配置 `** + AllowPublic`。只匹配请求目录,不匹配文件名或服务端追加的年月。实际上传路径不接受通配符;保留目录先于 glob 校验,不能用宽泛规则绕过。最多512字符/规则、4层花括号、32候选、4096令牌;有界动态规划和有界语法缓存不得缓存租户授权结果。先更新全部后端节点再配置新语法,精确旧规则仍兼容。
|
|
46
47
|
- 目录规则只扩展无字段上下文上传,不绕过表/菜单/行权限、租户隔离、保留路径、文件类型、内容检测及配额;不能授予访问密钥会话、私有文件读取或应用发布权限。规则通过系统设置共享缓存读取,保存/删除后失效;应用包只发布字段和可空 DDL,禁止附带会覆盖租户规则的配置数据。验收覆盖授权/未授权角色、路径边界、公私桶、禁用用户、跨租户、规则撤销及缓存生效。
|
|
47
48
|
- 老 `ImgUpload/FileUpload` 缺失 `Limit` 时兼容为公有;老 `RichText` 缺失上传配置时默认私有。微信待审图片与裁剪/压缩 `_origin` 原图始终私有,字段公有配置不能放宽这些特殊边界。客户端保存与预览必须以上传响应的实际 `Limit` 为准。
|
|
@@ -82,10 +83,16 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
|
|
|
82
83
|
| `V8.FilesByteBase64` | 接收上传时携带的文件字典 `{ FileName: base64 }` |
|
|
83
84
|
| `V8.Method.Upload({...})` | 服务端上传文件到 HDFS(推荐) |
|
|
84
85
|
| `V8.Method.GetPrivateFileUrl({FilePathName})` | 生成私有桶临时访问 URL |
|
|
86
|
+
| `V8.Method.CopyObject({FilePathName,Path,Limit})` | 当前租户同一桶内服务端复制,保留原对象;用于固定入口与版本快照 |
|
|
87
|
+
| `V8.Method.ObjectExist({FilePathName,Limit})` | 检查当前租户公有/私有桶对象是否存在 |
|
|
88
|
+
| `V8.Method.GetObjectSha256({FilePathName,Limit})` | 在服务端流式计算对象原始字节与旧版 Base64 文本的 SHA-256 和字节数;不把对象内容送入 V8 |
|
|
89
|
+
| `V8.Method.ListObjects({Path,Limit,Recursive,Marker,MaxKeys})` | 分页列举当前租户前缀,单页最多 1000 个 |
|
|
85
90
|
| `/apiengine/platform-private-file-url` | 官网 PC/UniApp 按菜单、记录、字段和对象引用换取私有文件短链 |
|
|
86
91
|
| `V8.Http.GetResponse({Url}).RawBytes` | 下载远程文件为字节数组 |
|
|
87
92
|
| 接口返回 `{ FileName, ContentType, FileByteBase64 }` | 接口直接响应文件 |
|
|
88
93
|
|
|
94
|
+
固定 CDN 应用回填优先使用服务端 `CopyObject`,公有桶复制编译资产、私有桶复制源码;`Limit` 在源与目标间保持一致,`Path` 和 `FilePathName` 均由后端收敛到当前租户。大对象用 `GetObjectSha256` 流式核对原对象和复制目标,公有体验路径仍须从 CDN 独立回读。历史版本目标已存在时须核对字节哈希,发现不同内容立即停止;固定根可在新版本验证后覆盖。`ListObjects` 必须分页并限制到单个应用前缀,不得把这些存储管理原子直接开放为匿名业务接口。
|
|
95
|
+
|
|
89
96
|
<!-- /microi-progressive:chunk -->
|
|
90
97
|
<!-- microi-progressive:chunk id=v8-file-upload-001 sha256=bacff382201c915334757946ee60d4a65db4e9663dd9e1f86bb68c1c16589321 -->
|
|
91
98
|
## 第三方数据库附件迁移
|
|
@@ -151,12 +151,13 @@ try {
|
|
|
151
151
|
---
|
|
152
152
|
|
|
153
153
|
<!-- /microi-progressive:chunk -->
|
|
154
|
-
<!-- microi-progressive:chunk id=v8-mq-mqtt-001 sha256=
|
|
154
|
+
<!-- microi-progressive:chunk id=v8-mq-mqtt-001 sha256=834e8270912c25c900ca046d533f64c104a875acf8865919ffff5dca5442e7e6 -->
|
|
155
155
|
## 注意事项
|
|
156
156
|
|
|
157
157
|
- MQ 消费者接口引擎通过 `V8.Param.Message` 获取消息,包含 `EventId`、兼容 `Id`、`OsClient`、`Message`、`CurrentUserId`
|
|
158
158
|
- MQ 适合异步解耦、削峰填谷、耗时操作异步化
|
|
159
159
|
- MQTT 七类事件在同一个接口引擎中处理,通过 `V8.EventName` 区分
|
|
160
|
+
- MQTT 运行日志确认写入租户 MongoDB 月度系统日志,`TargetType=MqttEvent`;MongoDB 持久化失败才写当前租户的 `mci_mqtt_log`。`platform-mqtt` 的 `Action=Logs` 按月读 MongoDB,查询失败时才回退 MySQL;`Action=HistoryLogs` 显式读旧记录及故障兜底记录,`ClientId` 可选。新版 PC 客户端的设备 `MqttLogs` 字段及 MQTT 日志菜单使用此入口;旧客户端仍读关系库,须随 API 一起升级。
|
|
160
161
|
- MQTT 适合 IoT 设备管理、实时数据采集
|
|
161
162
|
- 设备/告警/工单等业务事实优先进入关系库,高频遥测可进入 MongoDB,大附件进入对象存储
|
|
162
163
|
- RabbitMQ 租户凭据在 SaaS 引擎登记前必须先在真实 RabbitMQ 创建 user/vhost/权限;内嵌 MQTT Broker 直接校验 SaaS 中的 MQTT 凭据,使用外部 MQTT Broker 时另行完成真实 Broker 账号、ACL 与适配器配置
|
|
@@ -9,7 +9,7 @@ description: Microi 后端 V8 TCP 原始字节集成规范。用于通过 V8.Tcp
|
|
|
9
9
|
|
|
10
10
|
使用后端 `V8.Tcp` 完成一次性 TCP 连接、原始字节写入和可选的有界响应读取。典型场景是 RAW/JetDirect 9100 网络小票机、串口服务器和 PLC;具体协议帧、校验码与打印业务仍由接口引擎编排。
|
|
11
11
|
|
|
12
|
-
文档维护时,只在 `microi.doc/docs/doc/v8-engine/v8-server.md` 原位更新后端 API;不要新建重复页面,也不要手工维护英文文档。改变公共契约时同步后端源码/测试、Microi.Client Monaco 定义、Microi.
|
|
12
|
+
文档维护时,只在 `microi.doc/docs/doc/v8-engine/v8-server.md` 原位更新后端 API;不要新建重复页面,也不要手工维护英文文档。改变公共契约时同步后端源码/测试、Microi.Client Monaco 定义、Microi.Agent 类型与生成知识、AI Skill 镜像。
|
|
13
13
|
|
|
14
14
|
## 先判断是否适用
|
|
15
15
|
|
|
@@ -142,6 +142,6 @@ var hex = result.Data.Hex;
|
|
|
142
142
|
|
|
143
143
|
- 源码:`Microi.Server/Microi.V8Engine/Extend/Tcp/V8Tcp.cs` 与 `V8Extend.cs`。
|
|
144
144
|
- 测试:真实 Jint 注入、Byte/Base64/Hex/Text、回环收发、超时/上限/非法参数。
|
|
145
|
-
- 编辑器:`Microi.Client/.../v8-api-server-definitions.js` 与 `Microi.
|
|
145
|
+
- 编辑器:`Microi.Client/.../v8-api-server-definitions.js` 与 `Microi.Agent/src/editor/typingsManager.ts`。
|
|
146
146
|
- 文档与知识:官网中文后端 V8 页面、`microi.skills/README.md`、`v8-utilities` 索引、`Microi.AI/Resource` 镜像和向量资源列表。
|
|
147
147
|
- 验收:目标测试、后端构建、精确重启与健康检查、独立 TCP 回环;真实打印机出纸必须单独报告,不能用回环测试替代。
|
|
@@ -7,6 +7,33 @@ description: Microi V8 工作流事件指南。用于编写审批流条件、节
|
|
|
7
7
|
|
|
8
8
|
# Microi V8 工作流事件开发
|
|
9
9
|
|
|
10
|
+
## AI / MCP 生成流程的必检契约
|
|
11
|
+
|
|
12
|
+
这里的流程是 `wf_flowdesign + wf_node + wf_line` 审批引擎,不是 `ai-workflow`。
|
|
13
|
+
先用 `microi_get_db_schema` 查询 `wf_flowdesign`、`wf_node`、`wf_line`、
|
|
14
|
+
`sys_menu` 与目标业务表,再用 `microi_list_roles` 或管理员只读表查询确认当前租户的
|
|
15
|
+
真实用户、角色、部门、岗位 Id。人工节点 `Approve/Countersign/End` 必须配置
|
|
16
|
+
`Users/Roles/Depts/BindJobs` 至少一种真实 `[{"Id":"...","Name":"..."}]`
|
|
17
|
+
绑定,或明确采用上游节点 `AllowSelectUsers=1` 手动选人。
|
|
18
|
+
`SameDeptApprove=1` 只筛选候选人,不能单独产生审批人。
|
|
19
|
+
不能把 `Roles:"Manager"`、字符串 Id 数组或另一个租户的 Id 当作绑定。
|
|
20
|
+
|
|
21
|
+
节点类型只使用 `Start/Auto/Business/Approve/Countersign/End/AutoEnd`;
|
|
22
|
+
`End` 是人工节点,自动结束用 `AutoEnd`。每个节点应有稳定 Id;
|
|
23
|
+
`PositionLeft/PositionTop` 使用像素(如 `"320px"`)。新版 MCP 对缺失坐标按
|
|
24
|
+
拓扑层级布局并补 `px`,明确重叠、非法类型、断线、不可达、无人审批会在写入前失败。
|
|
25
|
+
节点人员绑定在写入时仅保留 `Id/Name`,不能把完整 `sys_user` 记录及密码字段嵌入流程。
|
|
26
|
+
MCP 写入前会回读当前租户的用户、角色、部门和岗位 Id;回读失败或 Id 不存在时停止保存。
|
|
27
|
+
|
|
28
|
+
模块入口使用 `sys_menu.OpenType="WorkFlow"`、`FlowDesignId=<已启用流程真实 Id>`,
|
|
29
|
+
`DiyTableId` 与 `wf_flowdesign.TableId` 相同。完整 Manifest 内可用模块
|
|
30
|
+
`flowName` 指向同一份 `workflows[].FlowDesign.FlowName`,生成器保存流程后补写并回读
|
|
31
|
+
`FlowDesignId`;引用既有流程时传 `flowDesignId`。上线前从模块打开并发起一条真实
|
|
32
|
+
业务记录,确认流程图节点、人员待办、审批、历史与模块入口均正确。
|
|
33
|
+
|
|
34
|
+
全部配置字段、节点类型和运行操作见
|
|
35
|
+
[流程配置清单](references/workflow-configuration.md)。
|
|
36
|
+
|
|
10
37
|
你正在开发 Microi 吾码平台的工作流(审批流程)V8 事件。流程引擎基于表单引擎,通过 V8 事件控制审批逻辑。
|
|
11
38
|
|
|
12
39
|
## 后端类库与接口边界
|
|
@@ -115,7 +115,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
115
115
|
|------|---------|
|
|
116
116
|
| 一次性脚本(.py / .mjs / .ps1 / .sh) | `.tmp/` |
|
|
117
117
|
| 诊断截图、调试图片 | `.tmp/screenshots/` |
|
|
118
|
-
| E2E 测试产物(Microi.
|
|
118
|
+
| E2E 测试产物(Microi.Agent 插件生成) | `.microi-e2e/` |
|
|
119
119
|
| AI 一次性 E2E 脚本、截图、日志、报告 | `.tmp/`、`.tmp/screenshots/`、`.tmp/reports/` |
|
|
120
120
|
| 性能测试 HTML 报告 | `.microi-performance/` |
|
|
121
121
|
| 项目专属临时文件 | `<对应子项目目录>/` 内,不要写到根目录 |
|
|
@@ -129,7 +129,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
129
129
|
|
|
130
130
|
`.tmp/` 已在 `.gitignore` 中排除,可以随意创建临时文件。任务完成后如无保留价值可以不清理。
|
|
131
131
|
|
|
132
|
-
**2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.
|
|
132
|
+
**2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.Agent 插件生成时可以继续使用 `.microi-e2e/`,但 AI 为某个任务手写的一次性 Playwright 脚本、报告和截图仍然必须放在 `.tmp/`。
|
|
133
133
|
|
|
134
134
|
<!-- /microi-progressive:chunk -->
|
|
135
135
|
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=c48d857c8e3086b29f99ab14d362f99c60d7dd00f9617709ea4f4dcad370611e -->
|
|
@@ -142,7 +142,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
142
142
|
| 吾码 MCP 前端源码 | `microi.mcp/` |
|
|
143
143
|
| 吾码 MCP 后端源码 | `Microi.Server/Microi.MCP/`;HTTP 接口声明保留在 `Microi.Server/Microi.net.Api/Controllers/V8EngineController.cs` |
|
|
144
144
|
| 吾码 skills / 知识库 | `microi.skills/` |
|
|
145
|
-
| 吾码 VS Code 插件项目 | `Microi.
|
|
145
|
+
| 吾码 VS Code 插件项目 | `Microi.Agent/` |
|
|
146
146
|
| 吾码低代码平台后台系统前端源码 | `Microi.Client/` |
|
|
147
147
|
| 吾码后台系统前端移动端自适应源码 | `Microi.Client/src/views/mobile/` |
|
|
148
148
|
| 吾码低代码后端源码 | `Microi.Server/` |
|