@microi.net/cli 6.1.7 → 6.1.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 +43 -43
- 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 +82 -82
- package/scripts/mcp-server.js +82 -81
- package/scripts/microi-skills.meta.json +221 -215
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +26 -10
- package/skills/ai-engine/references/ai-employees.md +4 -0
- package/skills/app-store/SKILL.md +1 -0
- package/skills/job-engine/SKILL.md +12 -0
- package/skills/message-notification/SKILL.md +2 -0
- package/skills/microi-codex/SKILL.md +8 -0
- package/skills/microi-deployment/SKILL.md +23 -1
- package/skills/microi-frontend-sdk/SKILL.md +12 -0
- package/skills/microi-microservice/SKILL.md +1 -1
- package/skills/microi.v8.js +445 -0
- package/skills/scripts/sync-public-resource-router.mjs +29 -0
- package/skills/system-observability/SKILL.md +18 -2
- package/skills/v8-file-upload/SKILL.md +15 -28
- package/skills/v8-file-upload/references/hotspot-offload-operations.md +103 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-29T04:40:40.047Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
"originalLines": 321,
|
|
412
412
|
"prefixSha256": "f64639b7e1c6cd7b2793d3506101cf1b91f77d306daabaae45599ecaefc551bb",
|
|
413
413
|
"prefixBytes": 936,
|
|
414
|
-
"entryLines":
|
|
414
|
+
"entryLines": 207,
|
|
415
415
|
"chunks": [
|
|
416
416
|
{
|
|
417
417
|
"id": "microi-frontend-sdk-000",
|
|
@@ -2259,11 +2259,11 @@
|
|
|
2259
2259
|
]
|
|
2260
2260
|
},
|
|
2261
2261
|
"v8-file-upload": {
|
|
2262
|
-
"originalSha256": "
|
|
2263
|
-
"originalLines":
|
|
2264
|
-
"prefixSha256": "
|
|
2265
|
-
"prefixBytes":
|
|
2266
|
-
"entryLines":
|
|
2262
|
+
"originalSha256": "7b4bbe849df820c5de33f90965e701009a0d5b43ca64b264df299eb3e740cf76",
|
|
2263
|
+
"originalLines": 783,
|
|
2264
|
+
"prefixSha256": "414f3c18ed82ea52f3b02fbfdc2be5608a660aedc77bee2d70e26890894afc95",
|
|
2265
|
+
"prefixBytes": 21314,
|
|
2266
|
+
"entryLines": 266,
|
|
2267
2267
|
"chunks": [
|
|
2268
2268
|
{
|
|
2269
2269
|
"id": "v8-file-upload-000",
|
|
@@ -2292,9 +2292,9 @@
|
|
|
2292
2292
|
{
|
|
2293
2293
|
"id": "v8-file-upload-003",
|
|
2294
2294
|
"ordinal": 5,
|
|
2295
|
-
"destination": "v8-file-upload/
|
|
2296
|
-
"sha256": "
|
|
2297
|
-
"lines":
|
|
2295
|
+
"destination": "v8-file-upload/references/hotspot-offload-operations.md",
|
|
2296
|
+
"sha256": "18bfbc6466abb62cec99d226b3bdd5091669a8317ab02f5045b7913f366c4334",
|
|
2297
|
+
"lines": 31,
|
|
2298
2298
|
"heading": "跨平台文件同步登录会话"
|
|
2299
2299
|
},
|
|
2300
2300
|
{
|
|
@@ -2352,6 +2352,14 @@
|
|
|
2352
2352
|
"sha256": "f34d476435c3a8321df017b481771d757f580c8d75f7648fdd54ee1c624d116c",
|
|
2353
2353
|
"lines": 26,
|
|
2354
2354
|
"heading": "安全注意"
|
|
2355
|
+
},
|
|
2356
|
+
{
|
|
2357
|
+
"id": "v8-file-upload-011",
|
|
2358
|
+
"ordinal": 11,
|
|
2359
|
+
"destination": "v8-file-upload/references/hotspot-offload-operations.md",
|
|
2360
|
+
"sha256": "4983b127efd106705151c7a304de2b3eb30e824068f5b92df73352e79663b322",
|
|
2361
|
+
"lines": 67,
|
|
2362
|
+
"heading": "从费用需求到实际分流"
|
|
2355
2363
|
}
|
|
2356
2364
|
],
|
|
2357
2365
|
"references": [
|
|
@@ -2377,6 +2385,14 @@
|
|
|
2377
2385
|
"空目录标记的受控恢复",
|
|
2378
2386
|
"下载远程文件并存到 HDFS"
|
|
2379
2387
|
]
|
|
2388
|
+
},
|
|
2389
|
+
{
|
|
2390
|
+
"path": "references/hotspot-offload-operations.md",
|
|
2391
|
+
"headings": [
|
|
2392
|
+
"从费用需求到实际分流",
|
|
2393
|
+
"跨平台文件同步登录会话",
|
|
2394
|
+
"热点公开资源的可信分流"
|
|
2395
|
+
]
|
|
2380
2396
|
}
|
|
2381
2397
|
]
|
|
2382
2398
|
},
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
## 模型与持久执行
|
|
15
15
|
|
|
16
|
+
项目群中同一员工的桌面模型按租户、负责人和员工标识持久绑定,不随新群创建而重置。保存时只提交本次选中的员工;已有群和新群读取同一绑定。旧群配置唯一一致时可只读继承,冲突时保留原值,由负责人明确选择;密钥和 Endpoint 继续留在本机。已经排队或执行中的运行保留原始模型快照,只有确认尚未调用模型的安全重试才重新读取当前绑定。
|
|
17
|
+
|
|
18
|
+
项目列表置顶优先,其余按最后消息倒序;无消息的新群按创建时间排序。置顶、归档和恢复属于当前用户的群成员偏好,不删除群、消息或工作链,不改其它成员的列表。列表时间与绑定需要有界批量读取,不能按群查询完整历史;新 schema 与受管引擎通过新的应用商城版本交付,源码或浏览器夹具通过不等于线上升级完成。
|
|
19
|
+
|
|
16
20
|
后端 `V8.AI.Chat` 的 `AiModel` 不能假定可留空。先从当前用户获授权的目录选择 `AiModel / AiModelId`;显式模型不可用时失败,不能静默切换账号。Key 与 Endpoint 保留在可信后端。
|
|
17
21
|
|
|
18
22
|
长调用通过平台持久后台任务执行。领取先提交,再调用外部模型;组合稳定幂等键、数据库条件写入、租约和旧执行者拒绝。调用无法回滚时,独立保存开始标记;重启后结果未知就核对,不盲目重发。等待模型时不能持有业务行锁。
|
|
@@ -287,6 +287,7 @@ staged 行、请求参数、`StableFilePathName` 或外部 CDN URL 推断版本
|
|
|
287
287
|
- 新版安装包正文不得长期内联在 `sys_microistore.AppPakcet`,也不得随 `mic_data_version.Data` 重复复制。公开应用写入 HDFS 公有桶并记录 `HdfsPublic`,私有应用写入私有桶并记录 `HdfsPrivate`;数据库只保存 `PackageId/PackageHdfsPath/PackageSha256/PackageSize/PackageContentType/PackageFormatVersion/PackageUploadedAt`。`IsPublic` 历史空值按公开兼容,但所有新建应用必须显式落为 `1/0`。
|
|
288
288
|
- 发布顺序必须是“UTF-8 JSON 上传 → HDFS 回读 → 字节数和 SHA-256 一致 → 写入不可变包索引及商城指针 → 以原值 CAS 清空 `AppPakcet`”。普通发布不得仅凭 Redis 命中跳过 HDFS 回读;只有受控历史压缩可复用内容寻址缓存,安装端首次下载与后续缓存命中均必须独立核对正文大小与 SHA-256。公开包可通过 FileServer/CDN 公有地址读取;私有包只能由来源后端在当前授权身份下签发短期下载地址,Token、签名 URL 和包正文不得进入浏览器配置、日志或后台任务参数。
|
|
289
289
|
- `MARKETPLACE_VERIFIED_PACKAGE_CACHE_V1` 用于详情摘要与安装分片的重复整包下载治理。每租户每用途一个固定槽,原文上限64 MiB、序列化上限96 MiB、TTL900秒且命中不续期;不能按应用/版本无限增键。缓存只写入已校验正文,绑定来源ApiBase/OsClient、当前租户、Id、StoreVersionId、PackageHdfsPath、存储范围、SHA与大小,不存签名URL或凭据;每片仍先重新读取来源权限与权威指针,命中重新校验实际字节与SHA。缓存损坏/故障/超限回退完整下载,不能为了减少下载取消后台分片或把包正文塞进checkpoint。详情`PackageContentRead`及导入诊断`marketplace_package_read`只报告包下载字节,测试覆盖撤权、来源/快照/路径变化、污染、不可用与固定槽有界;真实同包两次读取须有`VerifiedDownload → VerifiedCache / NetworkBytes=0`回执。官方发布源禁止运行安装器,客户安装与包发布分别验收。
|
|
290
|
+
- `MARKETPLACE_VERIFIED_PUBLIC_PACKAGE_ROUTE_V1` 只为当前来源公开 `HdfsPublic` 的精确 `packages/*.json` 选择传输地址。模型用 `GetPublicResourceBackupUrls`,安装器只向已固定来源 `ApiBase + OsClient` 的 `mci-file-resource-public-url` 做一次有界匿名查询;不能调用目标租户 resolver 代替来源。结果必须核对 `GenericPublicResourceRoutes/1`、来源租户、Binding 的 BackupOrigin/PublicBucket/TargetConfigHash、精确 ObjectKey、短效期限和不可变目标路径,且 `VerifiedSha256/VerifiedSize` 等于权威快照的 PackageSha256/PackageSize;SourceRevision 不是内容摘要。私有、跨租户、非包路径、旧合同及无效回执保持原地址,不能复制或公开私有包。实际下载继续原始字节 SHA/大小校验,凭据不转发 NAS;缓存命中不再次查询路由,不持久化路由 URL,不重写源包指针、版本或后台 checkpoint。长期阈值资格归调度器管理,与两分钟健康回执分开。回归必须执行旧直链故障/新 NAS 成功、未 Ready、错误 hash/size、历史快照、当前撤权、恶意 URL/路径、跨来源和缓存复用;正式包需同步独立脚本、商城内嵌与最小启动副本后发布回读,单元测试不算生产分流。
|
|
290
291
|
- `mic_data_version` 历史快照保留不可变 `StoreVersionId` 和同一组包指针,因此旧版本仍可精确安装,不再要求 `Data` 内含完整 JSON。导入器先校验快照版本/应用身份,再按指针下载并在解析前核对大小与哈希;指针缺失时才回退旧版内联字段,禁止快照不匹配时退回当前版本。
|
|
291
292
|
- 旧库容量治理使用 `compact-microi-store-packages` 超级管理员持久后台任务:先幂等补齐物理列,再用有界 `Id` 游标逐批处理;每个包都先上传回读,随后 CAS 清理当前行或历史快照。禁止对数 GB `mic_data_version.Data` 执行全表 `LIKE`/包正文计数。逻辑大字段清空后,MySQL 表空间文件是否立即缩小取决于存储引擎;`OPTIMIZE TABLE` 只能在备份完成的维护窗口由管理员另行执行,不能由应用安装或压缩任务自动触发。
|
|
292
293
|
- 商城来源以 `ApiBase + OsClient` 唯一定位。添加来源先只读发现系统标题、验证码策略和公开应用数;需要私有应用时再登录。帐号、密码、Token 不能写浏览器配置或商城来源 JSON;密码只用于本次登录,长会话 Token 以 `MCP/Mobile` 非 PC 客户端签发,并由当前租户后端加密保存到 `mci_system_setting`,浏览器只持有不具备取密能力的凭据 Key。
|
|
@@ -64,6 +64,18 @@ Quartz 管理能力包含查询、添加、更新、暂停、恢复、删除任
|
|
|
64
64
|
|
|
65
65
|
锁只能减少并发,不能替代幂等。
|
|
66
66
|
|
|
67
|
+
## 公开热点分流的固定调度入口
|
|
68
|
+
|
|
69
|
+
以下协议适用于包含通用公开对象 v3 的后端候选;任务元数据、应用包和客户端均须另有部署回执,不能用本文或离线测试推断已经在线分流。
|
|
70
|
+
|
|
71
|
+
- 任务表为 `diy_schedule_job`,固定 `JobName=microiPublicResourceOffloadScheduler`、`ApiEngineKey=mci-file-resource-scheduler`、`JobType=1`、`Status=正常`。只由 Quartz 原生分派进入受信调度原子;每次从当前主库回读,重复、已删除、停用、改名或改 Key 均拒绝。可编辑 V8/普通 HTTP 不能伪造宿主上下文或通过 CLR 直调运行时;目录和任务资源通过应用包交付,管理员管理沿标准 MCP;固定任务保存额外要求当前主租户管理员主库复核,拒绝访问密钥会话和仅具通用任务写权的角色。Quartz 副作用之前按当前主库、参数化 Id/名称、5 秒命令读取旧身份;新旧任一名称大小写等价命中保留任务均复核,禁止用旧 Id 改名或大小写变体绕过。
|
|
72
|
+
- Quartz 与旧 `PublicResourceOffloadHostedService` 共用 `PublicResourceOffload:tick` 租约;主租户范围、当前持有者、续租、fencing 和签名状态共同约束执行。管理员标准保存确认元数据持久化后,对固定主租户任务在同一租约内写入签名 `scheduler-handoff`;已暂停的合法任务也可接管,但不执行采集。表单事务 `RuntimeOnly` 路径不提前跨写,仍由首次合法原生 tick 接管。保存成功而接管未确认时返回部分保存提示,先回读,不盲目重建。接管后暂停、删除、改名、禁用任务不自动恢复旧 HostedService;handoff 按 Revision CAS 写入主库签名状态,进程重启和 Redis 丢失仍保持接管,主库不可读失败关闭。恢复必须修复原受控任务,不能删除标记绕过停用意图。
|
|
73
|
+
- 采集使用独立共享租约 `PublicResourceOffload:cloud-collection` 与 30 分钟 `NextAtUtc` 门禁;手动 Collect 同样受限,没有调用方 force 绕过。最新完整北京时间自然日、1 GiB / 24 小时仅为已观测字节正向下界;TOP 榜不是全部路径,空值不当零,不用客户端上报字节制造晋级。首次可信达标保存持久偏好,后续低流量不取消;新版本仍重验公开权限/副本,显式停用不被采集自动恢复。
|
|
74
|
+
- 每轮 4 分钟执行预算,租约最多 5 分钟。预算耗尽保存可恢复检查点并返回 `State=BudgetReached, Partial=true, AllResourcesReady=false`;`Code=1` 仍不等于所有资源复制或分流完成。外部取消、采集失败、失租和发布失败分别保留真实结果;单轮不能承诺任意体积全量复制。已确认的 8 MiB 私有暂存块可复用,通用复制受单对象 64 MiB、组 256 MiB、含入口 128 对象限制。
|
|
75
|
+
- 先安装拥有方应用包的 mci_file_offload_state 和 Owner/StateKey 唯一索引再部署新后端,缺表失败关闭。主库单条命令 5 秒,恢复最多 2000 条身份及 32 MiB 回执,超限/并发变更整批拒绝。4 分钟是调度预算,不承诺全部同步数据库或远端 I/O 在该时刻绝对结束;阿里云同步 SDK 使用自身 20 秒超时,取消后可能仍有在途尾部。MinIO 策略 SET 没有远端原子 CAS/fencing,前后验租、策略比对及未知结果回读无法消除外部策略写入竞态;未知结果不盲重写,不把本地租约或离线测试称为远端副作用“恰好一次”。
|
|
76
|
+
- 复制、Ready、公开授权、旧前缀撤权均验证当前租约;源 ACL/版本变化或停用先停止新路由,按签名 `PublishedRuns` 对旧授权逐项回读和匿名拒绝核验。旧目标无法绑定时阻断并保留未撤销事实,不能因任务返回成功而宣称旧 URL 已失效。暂停整个任务也停止后台复制/撤权推进;需要完成撤权时应保持该受控任务可运行,并先停用对应资源。
|
|
77
|
+
- 验收覆盖 job/host 同时竞争、双节点领取、失租前后副作用、暂停/删除后不退回 host、改 Key/主库不可用/CLR 拒绝、4 分钟部分工作恢复、源版本或权限变化、旧目标未知,以及真实消费者的第一次请求。私有、独立 JS 缺可信清单、旧富文本 HTML、Three.js 硬编码和平台 bootstrap 不因任务存在而自动分流;七个已接入客户端文件及完整边界见 `../v8-file-upload/SKILL.md` 与官网 `more/hdfs.md`。上线、小时请求下降、完整日费用下降必须分层独立验收。
|
|
78
|
+
|
|
67
79
|
## 任务骨架
|
|
68
80
|
|
|
69
81
|
```js
|
|
@@ -15,6 +15,8 @@ description: 设计、实现、迁移和验收 Microi 多通道消息通知与
|
|
|
15
15
|
- `microi_manage_system_reminder` 提供 `Validate / Save / Publish / Withdraw`,确认串为 `<action>:<id或requestId>`。保存仅草稿;发布前核对用户已经授权的具体内容、范围与时间。保存/发布使用稳定 `requestId`,编辑/发布/撤回传最新 `expectedRevision`,超时先按原 Id/Key 回读,禁止换请求标识盲目新建。
|
|
16
16
|
- `AccountScope` 在本租户 `Users` 默认 `AllAccounts`,在 `Tenants / Editions` 默认 `SuperAdmins`;不要让已指定的普通帐号被默认管理员筛选误排除。用户显式指定的帐号范围优先。
|
|
17
17
|
- 配置接口只管理原表、校验引用和读取脱敏投递记录;实际发送继续调用 `msg_event`。`ConfigRevision` 缺省按 0 兼容旧记录,更新使用同事务条件写,失败不能覆盖别人修改。停用旧配置允许保留失效引用,再启用时重新核验。
|
|
18
|
+
- 业务规则详情的“查看投递记录”必须携带规则 Id,日志页提供独立分页读取的全规则筛选,不能只从当前日志页反推选项。MCP `Logs` 使用 `configId` 对应 `MsgEventId` 精确筛选;日志按 `CreateTime DESC, Id DESC` 稳定排序。历史空标题/通道通过本页规则批量映射显示,失败原因脱敏,禁止返回原始 `MsgResult/Payload`。FormEngine 的 CLR 宿主记录先转普通 JSON,再删除敏感字段,不能直接在宿主对象上 `delete`;同时验收真实 Jint 和只读原记录夹具。
|
|
19
|
+
- 微信可信原子先将 dynamic 参数和 FormEngine.Data 落为静态 JObject,避免字符串扩展方法发生动态绑定异常;当前模板的 `thingN/character_stringN/timeN` 等类型化字段必须原样进入 SDK JSON,同时保留旧 first/keyword/remark 和字段数/长度边界。模板必须属于实际 `WxMpId`,未绑定 OpenId、未认证/权限失效与后端缺陷分别排查。通知应用安装不代替 API 镜像部署或真实微信投递验收。
|
|
18
20
|
- MCP 缺少上述工具时优先更新本机插件/CLI;当前宿主未重载可复用已有 `microi_run_engine` 调用同一固定接口,不另建临时维护引擎或绕过授权。明确区分本机工具打包成功与用户渠道已发布。
|
|
19
21
|
|
|
20
22
|
## 目标
|
|
@@ -119,6 +119,11 @@ Codex Router 启动后会异步调用 bundled CLI 的 `microi update --backgroun
|
|
|
119
119
|
|
|
120
120
|
## 同步与安全边界
|
|
121
121
|
|
|
122
|
+
处理“降低 OSS/CDN 费用、热点资源自动复制到 NAS、FileServerBak”时,先读取
|
|
123
|
+
`v8-file-upload/SKILL.md` 及其 `references/hotspot-offload-operations.md`,再读取
|
|
124
|
+
`system-observability/SKILL.md`。复用 `microi_run_engine` 的受管资源和 CDN 接口,
|
|
125
|
+
配置使用标准表工具、MinIO 凭据使用专用管理工具;不要仅保存备用地址就报告已分流。
|
|
126
|
+
|
|
122
127
|
- 发布扩展与 CLI/AI Plugin 前检查实际 VSIX:完整清单、字节数、SHA-256 和敏感文件扫描回执保存在 `.tmp/development-tools-releases/<版本>/`;逐字节核对 MCP 输出/构建输入与 Skills 全部文件同源。归档超过 64 MiB 或混入签名资料、凭据、桌面安装包、工具链、apps、upstream、同步目录或 node_modules 时停止,修复误包后复测;断点补发使用同一门禁,不用 `vsce ls` 替代归档检查。npm Token 只绑定官方 HTTPS registry,私有 npmrc 仅引用 `${NPM_TOKEN}`;同时固定 `npm_config_userconfig` / `NPM_CONFIG_USERCONFIG` 与 registry 两种大小写变量,避免外层 `npm run` 的配置遮蔽有效 Token。不输出凭据,不因继承错误重复要求登录;已发布正确制品保留,发行内容变化使用新不可变版本。npm、Visual Studio Marketplace、Open VSX 的发布命令明确提示成功即可报告对应渠道发布成功;默认不追加 `--verify-all` / `--verify-only`、版本轮询或下载回读,不因传播延迟重复发布。用户明确确认其本机终端已发布成功,也作为该渠道的完成依据;不得再要求确认结果行、提供回执或等待 npm/市场公开可见。只有发布命令确实报错、结果未知且用户也未确认成功,或用户明确要求核验时,才按需查询渠道状态。
|
|
123
128
|
|
|
124
129
|
- `Microi-V8-Engine/.microi-config.json` 是三端连接配置事实源;未知字段必须保留。
|
|
@@ -126,5 +131,8 @@ Codex Router 启动后会异步调用 bundled CLI 的 `microi update --backgroun
|
|
|
126
131
|
- 推送前先做远端差异检查。写请求超时只表示结果不确定,使用对应 get 工具短超时回读,禁止盲目重复创建或覆盖。
|
|
127
132
|
- 配置和 Token 文件使用现有原子写与锁协议;不要手工拼接或清空用户已有 MCP 配置。
|
|
128
133
|
- Codex Plugin 路由器只选择连接,业务行为必须继续走原 MCP bundle。
|
|
134
|
+
- SaaS MinIO 的部署凭据使用 `microi_manage_saas_minio`;先 Inspect 取得 Revision,
|
|
135
|
+
Save 以 `SAVE_MINIO:<tenant>:<revision>` 确认,Probe 验证已保存绑定。通用表密钥禁写
|
|
136
|
+
继续保留;不会修改 HDFS/OSS,不通过普通第三方 Secret 工具错存,不用临时 V8 绕过。
|
|
129
137
|
|
|
130
138
|
完整 VS Code 命令覆盖关系见插件根目录 `assets/feature-matrix.json`。
|
|
@@ -26,7 +26,7 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
26
26
|
|
|
27
27
|
收到“发布吾码”“完整正式发布”“一键发布”时,默认执行根目录 `Microi一键编译发布.sh --platform-release`(默认完整选项):新版本号按原规则 +1 一次,NuGet、API Docker、PC Docker、官方网站文档及其 Docker 全部发布。官网不再是可选追加项;只有用户明确要求“仅前端/仅后端/仅官网”等局部发布时才缩小范围。完整入口使用 `PlatformRelease` 执行常规 Microi.Tests(平台单元/组件,不自动追加 Full 专项)、吾码前端通用 Node 测试、真实接口检查与最终加密产物启动/运行冒烟;扩展浏览器验收仅在显式传入 `--platform-frontend-tests` 时追加。真实付费 AI、鸿地/JUNCHI、XJY 等指定客户数据专项和 SQL Server 等独立提供商专项默认不纳入,不再逐次询问;只有用户另行明确要求专项时才执行,回执逐项列为“不适用/未执行”,不能冒充通过。独立商城应用、OpenClaw 等应用源码专项由各自入口执行,不作为平台发布前置;平台 SDK、商城协议、安装器、SaaS 与工作流通用回归继续保留。Microi Code/Agent 是独立产品,不混入吾码平台测试与发行。
|
|
28
28
|
|
|
29
|
-
1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1
|
|
29
|
+
1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。中断后使用脚本输出的 `--resume=<会话JSON>` 恢复同一完整发布,沿用原版本、渠道、候选和累计起点;`--release-version=x.y.z` 只用于显式选择版本,本身不代表复用测试或产物。不能仅凭版本文件未提交推断为续发。
|
|
30
30
|
2. 取得对应产品锁并冻结源码、依赖与官网构建输入;执行本次基础范围全部 C#/Node 测试,核对接口及启动/运行回执;扩展浏览器测试仅显式追加 --platform-frontend-tests 时执行。禁止把缺少授权/夹具、零用例、失败、取消或跳过写成成功;不能因测试需要依赖就自动新建租户、安装应用或创建 Docker。保留既有测试数据写入保护。
|
|
31
31
|
3. 以 `.microi-local` 选定配置复用 MySQL、Redis、MongoDB 和 SaaS 生效的 MinIO/OSS;生成平台正式产物,执行完整 DLL 加密和一致性校验,在本机进程运行最终产物冒烟。PC 执行自身正式构建与产物检查,官网执行原完整构建与页面验收,不使用临时运行容器替代本机程序。
|
|
32
32
|
4. 完成 NuGet 与全部选中 API/PC/官网 Docker 推送,逐标签回读远端不可变 digest;新推送和断点复用都必须验证,并回读官网关键页面。任一渠道缺凭据、未执行、失败或未知,不能报告全部发布成功。
|
|
@@ -38,6 +38,18 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
38
38
|
|
|
39
39
|
普通发布的“完整”指全部发行渠道,不自动扩展测试深度。默认只运行基础平台 C#、平台/前端 Node 与最终产物冒烟。发布前一次完成版本、凭据、资源与官网基础预检;完成代码合并后冻结候选,避免边发布边追加其它任务。后续阶段失败时先保存候选、原始测试和已发布渠道回执,重新核验相同源码、配置、工具与实际产物后复用有效结果,只续做未完成范围;结果不匹配或缺少必要证据时按原门禁复验,不能把通过截图当作缓存。npm、NuGet 等渠道的正式发布命令明确成功,即记录对应渠道发布完成;用户已明确确认其本机终端发布成功时,同样直接按成功继续,不再要求提供最终输出或回执。默认不查版本索引、包页面或下载地址,不等待公共索引/CDN 传播,不因即时 404 重传、升版、降为未完成或再次追问。公共可见状态仅在用户另外要求时核验。
|
|
40
40
|
|
|
41
|
+
**原生断点续发**:完整入口在发布结果目录保存 `session-*.json`,失败提示给出准确恢复命令。始终重新运行同一个正式入口并使用 `--resume=<会话JSON>`,禁止临时截取、拼接或改写脚本尾部。原始 TRX/TAP 重新核验后复用;前端构建文件、最终后端/加密/冒烟产物及 NuGet 包字节不变时复用。每个已接受的 NuGet 包单独记录,每个 Docker 标签须有独立摘要回执;续发只上传缺项,已完成 Docker 标签仍只读核对摘要,不覆盖其它任务后续发布。镜像身份读取 `docker image inspect` 的实际 `.Id`,不能拿构建日志的 config digest 代替。官网恢复只执行官网未完成部分,不重新选择 API/PC 渠道。
|
|
42
|
+
|
|
43
|
+
**静态镜像校验复用**:一键入口的 `release-image-verification.mjs` 将同一次 `docker image save` 交给原有配置和五个 DLL 严格解析器,不创建容器;成功回执绑定同一发布会话、冻结候选、不可变 ImageID/configId、模板 SHA-256、加密回执原始 SHA-256 和校验器源码 SHA-256。绑定一致且证据完整才复用,命中仍读取真实 DLL 与加密签名,不能无意义重写 `encryptedAt`。身份、输入或证据变化时重新校验,失败不写成功缓存;每个远端标签仍独立回读摘要,缓存不能替代发布确认。
|
|
44
|
+
|
|
45
|
+
**成功资源与共同基线回交**:准备前核对当前工作区实际脚本版本和门禁工具,不能因修复已推远端就认定旧工作区已更新。上轮及本轮成功发布、经官网真实回读的资源与 `.resource-sync-base` 必须随源码提交并回交原分支,不能只推版本文件导致下次重复合并。共同基线滞后时先核对上轮成功回执和当前远端差异,仅通过原生 `--repair-base-from-remote` 入口读取真实远端修复;不得伪造基线或强选本地吞掉远端变更。
|
|
46
|
+
|
|
47
|
+
**耗时优化验收边界**:阶段回执续发、上述静态镜像复用和一次收集已选 Node 各组失败已有实现;Node 各组仍按原顺序各执行一次,任一组失败、缺用例、异常退出或取消均整体失败,不生成成功摘要。失败后的测试组级复用、测试并行和渠道并行尚未实施,不能作为已获得的提速承诺。30 分钟仍是待完整端到端实测的目标,须计入整合准备、失败修复、等待与最终验收;定向夹具通过不等于真实发布已达标,超时继续完成并如实报告。
|
|
48
|
+
|
|
49
|
+
候选冻结前一次合并本批功能、修复和依赖输入;冻结后不继续接收下一批业务能力。新增需求或与本轮无关的改动排到下一候选。确需修改当前发布源码时,原测试不能继续冒充新候选结果;保留前次耗时和失败,再按实际变更复验。对没有改变的候选、制品与渠道,不重新准备、重测或重发。
|
|
50
|
+
|
|
51
|
+
官网打包 Skills 一致性等构建输入在整套回归前检查;这是分发输入校验,不是执行 Agent 产品测试。官方资源 HTTP 524 按原同步器先回读完整状态,再用相同候选和 CAS 只补差异,最多定向恢复一次;其它真实错误直接保留失败。重试沿用原计时文件,退出后的修复/等待也计入累计总耗时。候选、配置、渠道、原始证据或制品变化时拒绝复用,先说明具体失效项;不能清空会话来掩盖失败,也不能给一个变化的候选换签成功回执。
|
|
52
|
+
|
|
41
53
|
**普通发布禁止混入**:新建/准入主子租户、安装消息通知或聊天应用、Microi Code/Agent 的 Vitest/E2E/桌面打包、全提供商兼容专项。隔离测试数据与新建租户不是同一件事,不得借“准备权限夹具”触发安装。平台已有的通用消息/权限离线回归仍保留,不能为缩短耗时删掉已选断言。
|
|
42
54
|
|
|
43
55
|
`--full-only` 仅供用户明确要求的独立深度测试;它不推送镜像,也不作为普通发布的隐含前置。`--microi-agent` / `--microi-code` 仅供独立产品显式发布。发布流程自身的修改只执行对应定向回归;没有新的发版要求时,不为验证规范再发一轮镜像。
|
|
@@ -72,6 +84,9 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
72
84
|
- 新面板默认独立 HTTPS 端口 61890,管理员密码与 PFX 密码存于服务器权限受限文件;不要把它们复制进业务 SaaS、V8、MCP 参数或日志。旧 Ops 保留原 `OPS_*`、目录、账号、端口、数据保护密钥及 `MicroiOpsUrl`,用原 Compose 替换为 Panel 镜像,不能重新初始化。
|
|
73
85
|
- 业务 MCP 继续通过 `microi_get_administrative_capabilities`、`microi_admin_table_data`、`microi_update_module` 和应用发布工具维护平台入口;DiyToken 不授予主机 Docker 权限,不增加能从租户会话执行任意宿主机命令的工具。主机安装与恢复使用授权的 SSH/终端和独立面板会话。
|
|
74
86
|
- 真实验收归入 `Microi.Tests/Panel` 专项,包含全部目录版本、数据库/对象存储写读与冷恢复、SSL/续期、文件、任务重启、独立安装升级回退,以及真实宝塔/1Panel 两种安装顺序。普通外部容器只能证明资源归属保护,不能替代第三方面板共存结论。
|
|
87
|
+
- 主机密码防爆破必须同时核对镜像 `io.microi.panel.authguard.protocol=1`、root 专用 Unix socket 和 `microi-auth-guard` 的真实回执。默认开启,同 IP 跨已接入服务累计 3 次封禁 86400 秒,窗口 0 表示累计至解封;成功登录不清零。配置与实际保护分别回读,来源日志/代理或防火墙异常不能标为已生效。当前 `2.0.1` 为源码候选,未完成正式发行;新版必须显式选定 `--image`。默认安装入口仍保持已发布 `v2.0.0` 并明确标注旧版范围,显式选择历史镜像需 `--legacy-panel-only`;两者都不能称为新主机防护已交付,也不能把新镜像失败后回退成旧镜像。
|
|
88
|
+
- 面板登录有独立 SQLite 防护与可撤销会话;SSH 读取真实宿主认证日志,新 MySQL/MongoDB 使用可验证认证日志,Redis 必须经逐次认证结果代理。禁止根据跨 IP 聚合的 Redis ACL LOG count 封禁最后一个 IP。新 Redis 使用独立网络、不直接发布后端端口;存量实例需维护窗口迁移,不能升级时静默断开连接或宣称已保护。
|
|
89
|
+
- 主机防护使用最小 systemd 服务,面板只挂载其 root Unix socket,不给业务 V8/MCP 泛化 Shell/防火墙能力。nftables 使用内核超时;iptables 兼容模式的自动解封依赖运行中的守护进程。IPv4/IPv6、INPUT/转发、两个来源 IP、真实失败/成功、手动/自动解封、去重、重启、白名单与规则故障分别验收;Docker Desktop 的专有网络空间测试不能替代原生 Linux 安装/重启或客户生产验收。独立安全专项入口在 `Microi.Panel/Tests/Security` 和 `Microi.Panel/AuthGuard/tests`。
|
|
75
90
|
|
|
76
91
|
### 依赖镜像统一镜像源
|
|
77
92
|
|
|
@@ -226,6 +241,8 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
226
241
|
|
|
227
242
|
## 一键发布产物边界与缓存
|
|
228
243
|
|
|
244
|
+
- 最终 API 冒烟只临时注入项目配置中的十个基础设施 `AppSettings` 字段,不复制 `DevLoginBypass` 或其它本地节点,不改写用户源配置。成功、失败和可捕获中断都先恢复公共 `appsettings.json` 原始字节,再清理自有 scratch;恢复失败保留恢复证据并停止发布。产物捕获/复用、每次 Docker 构建及 API 镜像上传前均校验公共模板字节与 SHA-256,拒绝环境配置、旧冒烟备份和本地选择文件残留;镜像通过不可变 imageId 静态读取配置,不运行测试容器。不可捕获的强杀/掉电不保证即时恢复,后续门禁仍必须拒绝污染产物。
|
|
245
|
+
|
|
229
246
|
- 一键脚本的本次构建、pack、冒烟日志和 NuGet 替换临时目录由 `Microi.Server/tools/release-scratch.mjs` 创建在发布结果目录的唯一 `release-scratch-*` 下,`EXIT` 自动收尾;归属清单与 `.cleanup.json` 回执在同级。成功仅留小回执,失败保留清单、原始错误和未清范围。它不删除 Full 报告、已发布制品、源码、共享 `.tmp` 或其它任务目录。执行器在 shell 启动前拒绝时,脚本内检查尚未运行;先定位当前宿主与拒绝阶段,不换工具绕过,也不默认添加 `-Force`、清除属性或修改 ACL。完整规则见工作区规范的“Windows 默认普通删除与策略拒绝排查”。
|
|
230
247
|
|
|
231
248
|
- 需要完整解决方案构建和 NuGet 打包时,先完成一次 Release build;publish 阶段复用已验证产物,禁止先 clean 再重复编译同一项目引用链。
|
|
@@ -264,6 +281,9 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
264
281
|
|
|
265
282
|
## 空数据库 SQL 导入回归
|
|
266
283
|
|
|
284
|
+
- 官方七种空库发布后逐一记录 ZIP SHA-256/大小并纳入原生公开副本。安装器通过固定 Database 枚举的只读选择器解析当前 NAS 地址,正文先 hub.microi.net、失败再 CDN;NAS 及仍带当前证明的 CDN 必须校验 SHA/大小,不将过期缓存导入为最新版。自定义 ZIP 不改下载来源。
|
|
285
|
+
- 空库初始登录密码只用宿主 CSPRNG 派生的六位随机数字,登录页提示和加密存储使用同一值;AuthSecret 独立保持高熵。不得缩短数据库/Redis/MinIO 凭据或改变恢复库密码。制作任务成功、CDN/NAS 回读和各数据库实际导入分别记录。
|
|
286
|
+
|
|
267
287
|
- PostgreSQL 导出中的 V8、默认值和注释使用显式 `E'…'` 字符串,同时转义反斜杠、引号、
|
|
268
288
|
物理换行及控制字符。分别在 `standard_conforming_strings=on/off` 中完整导入,回读代码
|
|
269
289
|
哈希、长度、空字符串与 NULL;不能把关闭标准字符串模式当作通用修复,也不能删改 V8 代码。
|
|
@@ -284,3 +304,5 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
284
304
|
- 不在没有备份和恢复演练时执行数据库升级或不可逆迁移。
|
|
285
305
|
- 不修改 `microi.doc/docs/doc/about/update-log.md`,除非用户明确要求发版。
|
|
286
306
|
- 撤回或重写版本日志前,必须遵循 `../workspace-conventions/SKILL.md` 的“多对话共享工作区变更归属保护”;当天提交、最新 `HEAD`、相同作者或相关提交信息都不能单独证明改动属于当前对话。
|
|
307
|
+
|
|
308
|
+
- 空库应用清理必须以平台基础表为保护边界:历史业务包误声明 diy_lang、组件、角色等核心字典表时,V8 与原生清理均不得将其作为应用表删除。脱敏发生失败并清理临时库后,新的生成请求须从 Prepare 开始;不得把原 Sanitize 检查点当成已有临时库继续。
|
|
@@ -192,3 +192,15 @@ uni.request({ url: apiBase + '/apiengine/' + key, header: { Token: token } });
|
|
|
192
192
|
- 根因:SDK 将 `Id` 从业务行模型 `_RowModel` 中移出后只写到请求外层;外层 Id 可用于接口寻址,但不会稳定进入表单事件的 `V8.Form`。
|
|
193
193
|
- 通用规则:新增请求遇到 `Id` 时必须同时保留 `request.Id` 与 `request._RowModel.Id`;服务端涉及父子表聚合或删除的事件还必须对父 Id 做非空熔断,禁止使用空值或 `Like` 查询子表。
|
|
194
194
|
- 自动化检查:FormEngine 写入契约测试必须断言预生成 Id 在请求外层和 `_RowModel` 中完全一致,并覆盖后端事件在空 Id 时拒绝执行、有效 Id 时只查询对应子记录。
|
|
195
|
+
|
|
196
|
+
## 公有媒体异步入口与同步兼容
|
|
197
|
+
|
|
198
|
+
- `assetUrl` 是同步兼容 API,不能用它声称 NAS 路由已经生效。公有媒体先等待 `resolvePublicResource(value,{private:false})`,或者将明确的上传元数据 `{Path,Limit:false}` 交给 `resolveFileUrl`;首个 `src` / Three.js loader 调用必须等结果后才设置,避免先 OSS 再 NAS 双下载。
|
|
199
|
+
- 同一个 SDK 实例应配置当前 `apiBase/osClient/fileServer/fileServerBak`;租户或 API 切换时调用 `configure`。带明确私有标记、`Limit` 非 `false`、签名 URL 和未知类型保留旧访问链路;匿名 HTTPS 字符串只可作为原本公开媒体消费者的候选发现,不构成公开授权。
|
|
200
|
+
- 复用单一 `public-resource-router.mjs` 生成的 SDK 内嵌实现,不另写别名白名单或拼接 NAS 地址。变更路由器后用 `node microi.skills/scripts/sync-public-resource-router.mjs --write` 更新三份已存在的内嵌区块,再以不带 `--write` 的命令验证;该工具不重置各 SDK 的其它差异。`AliasCandidates` 仅发现;实际选择必须通过同源 `PublicSourceUrlRoutes/1`,由后端核对当前来源、公有 ACL、版本、完整依赖组、Ready 与健康,并绑定精确原 URL、最长 60 秒。
|
|
201
|
+
- NAS 加载失败时调用 `reportPublicResourceFailure`,当前元素最多回退一次到原地址;源值/租户改变与卸载后丢弃迟到结果。GLTF/GLB 不得仅凭入口文件 Ready 改写整组依赖。
|
|
202
|
+
- PageEngine 图片、视频、HDR/GLTF 组件可复用实例级媒体控制器。旧 HTML、`srcset`、CSS URL、任意脚本和平台 bootstrap 不属于全局替换范围,不挂全局 fetch/DOM 拦截器。独立应用必须更新实际内嵌 SDK 并重新发布,不能把模板更新等同存量应用已升级。
|
|
203
|
+
- 验收分别记录纯路由/SDK/SFC 测试、实际客户端发布、运行时请求与完整日账单。原生能力和真实浏览器链路未执行时必须保留未验收状态。
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
- HTML 媒体只在拥有的 PageEngine/RichText 容器内、插入 DOM 前用惰性 template 投影,复用 resolver 和 sanitizer,私有/签名及 srcset/CSS/脚本不改。hydration 用编辑器原生 disable 锁并禁用源码/附件入口,旧响应不得回填或释放新锁;源码 Edit→等待 View→Edit 同步取消旧轮。保存 canonicalize 回原 URL,错误只在当前容器最多一次回退,真实浏览器首请求与编辑保存另验。
|
|
@@ -46,7 +46,7 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
|
|
|
46
46
|
- `sys_microiservice`:已发布运行时。
|
|
47
47
|
- `sys_microiservice_page`:页面路由。
|
|
48
48
|
- 编译后的 HTML/JS/CSS/图片放公有 HDFS,源码不公开。
|
|
49
|
-
-
|
|
49
|
+
- 当前公开应用的独立体验优先使用可信 ApiBase 的 `/micro-app/{OsClient}/{AppKey}/index.html`,由原生解析器核对当前发布清单、公开范围和 NAS Ready 回执,再决定 FileServerBak 或原存储。已有公有桶固定根及不可变版本对象仍是发布投影,不能据直链 200 宣称实际分流。官网公开目录、工作台和商城必须使用同源权威 AppKey/ApplicationType/IsPublic;已安装记录以目标租户为准,不借源商城公开性或同名应用推定权限。旧 ai_app_detail 未返回这些字段时,以当前 Token 的标准 FormEngine 按精确 Id 只读补齐;失败保留原路径。只转换同 FileServer、同租户、同 AppKey 的无版本公开入口;签名 URL、显式历史版本、私有/未知公开性和外部域保持原语义。菜单路由继续使用 `/micro-app/{OsClient}/{AppKey}/{RoutePath}`;私有源码、CDN 投影、API 入口及真实资源分流分别验收。
|
|
50
50
|
|
|
51
51
|
不能从 `sys_microiservice` 公有产物反推完整源码,也不把大 JS/CSS 长期塞数据库 JSON。
|
|
52
52
|
|