@microi.net/cli 6.1.6 → 6.1.7
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 +198 -164
- package/scripts/microi-skills.meta.json +232 -232
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +49 -49
- package/skills/ai-engine/SKILL.md +18 -5
- package/skills/app-store/SKILL.md +9 -1
- package/skills/business-blueprint/SKILL.md +1 -1
- package/skills/job-engine/SKILL.md +3 -0
- package/skills/microi-codex/SKILL.md +1 -4
- package/skills/microi-deployment/SKILL.md +42 -18
- package/skills/microi-deployment/references/deployment-matrix.md +7 -1
- package/skills/microi-docs-coverage/SKILL.md +11 -1
- package/skills/microi-microservice/SKILL.md +11 -0
- package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +2 -1
- package/skills/microi-system-delivery/SKILL.md +1 -0
- package/skills/microi-system-delivery/references/context-quality.md +56 -54
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +9 -5
- package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +65 -65
- package/skills/module-engine/SKILL.md +13 -0
- package/skills/module-engine/references/module-config.md +17 -0
- package/skills/ocr-engine/SKILL.md +1 -0
- package/skills/playwright-e2e/SKILL.md +2 -0
- package/skills/system-observability/SKILL.md +12 -5
- package/skills/translate-engine/SKILL.md +2 -0
- package/skills/v8-api-config/SKILL.md +1 -1
- package/skills/v8-file-upload/SKILL.md +3 -5
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +2 -2
- package/skills/v8-security/SKILL.md +5 -8
- package/skills/v8-sql-query/SKILL.md +2 -2
- package/skills/workspace-conventions/SKILL.md +154 -136
- 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 +8 -5
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +2 -2
- package/skills/workspace-conventions/references/progressive-04-/345/267/245/344/275/234/345/214/272/344/270/216/345/271/263/345/217/260/344/270/223/351/241/271/344/277/235/351/232/234.md +4 -4
|
@@ -17,6 +17,8 @@ description: Microi V8 与 MCP 文件上传下载指南。用于处理流式 AI
|
|
|
17
17
|
|
|
18
18
|
公开入口覆盖 `V8.uploadFile`、多文件 `V8.uploadFiles` 与 MCP `microi_upload_file_base64`。多文件上传必须限制并发、逐文件返回结果;Base64 工具只接受明确文件名、大小和租户内目标范围,写后回读路径、大小与哈希。
|
|
19
19
|
|
|
20
|
+
公开运行资源的备用地址只通过 `V8.Method.GetPublicResourceBackupUrl({FilePathName:'tenant/micro-app/app/index.html'})` 只读选择,返回 `{Code:1,Data:{UseBackup,Url}}`。只允许 `FilePathName`,不能传 URL、Ready、SHA、流量、凭据或用户身份;当前公开应用、完整版本清单、签名副本与 NAS 健康必须同时匹配。`UseBackup=false`、异常或旧后端缺少该能力时继续原公开地址,不把 `FileServerBak` 非空或目录存在当作可用副本;该方法不复制对象、不读取私有文件,也不授予管理权限。管理和迁移仍走已有受信任应用接口,并分别回读副本完整性与真实消费结果。
|
|
21
|
+
|
|
20
22
|
## MCP stdio 与完整包的传输边界
|
|
21
23
|
|
|
22
24
|
- 标准 MCP 服务的 stdio 使用固定 `128 MiB`(`134217728` 字节)未解析 JSON-RPC 缓冲,超过边界立即拒绝并关闭连接;不读取动态环境变量放大。SDK 调用端若仍使用
|
|
@@ -247,7 +249,7 @@ Unity `Data`、WASM、Windows 安装包、视频模型等发布资产不得进
|
|
|
247
249
|
- 生产 H5 不能只依赖 `uni.uploadFile`。页面从 `uni.chooseImage` 得到的 `tempFiles[0].file`、`tempFiles[0]`、`blob:` / `data:` 临时路径都要传给 `V8.uploadFile`,并设置 `preferFetch:true`;SDK 必须能用 `fetch + FormData` 兜底,否则线上可能报 `未找到 MicroiV8 上传适配器。`。
|
|
248
250
|
|
|
249
251
|
<!-- /microi-progressive:chunk -->
|
|
250
|
-
<!-- microi-progressive:chunk id=v8-file-upload-003 sha256=
|
|
252
|
+
<!-- microi-progressive:chunk id=v8-file-upload-003 sha256=9d8f1e54ec058d9624a051cc55270019fa1b4a88dadc20f03b2cfa1b856a5bc3 -->
|
|
251
253
|
## 跨平台文件同步登录会话
|
|
252
254
|
|
|
253
255
|
文件柜、文件同步等需要连接另一套 Microi API 的工具,必须把远程平台视为独立登录会话:
|
|
@@ -262,10 +264,6 @@ Unity `Data`、WASM、Windows 安装包、视频模型等发布资产不得进
|
|
|
262
264
|
|
|
263
265
|
### 热点公开资源的可信分流
|
|
264
266
|
|
|
265
|
-
- SaaS MinIO 绑定的凭据不能通过通用表工具写入。使用 `microi_manage_saas_minio` 的
|
|
266
|
-
Inspect → Save(Revision CAS)→ Probe;旧后端缺少入口先升级。它不改变 HDFS/OSS,
|
|
267
|
-
不复制对象或改变桶策略;签名桶探测成功与副本校验、实际分流是不同验收项。
|
|
268
|
-
|
|
269
267
|
- `PublicResourceOffload/2` 与旧目录/路由第一版分别验收。系统日志应用拥有 `mci-file-resource-runtime`(管理员控制面)与 `mci-file-resource-public-url`(匿名只读公开选择);目录的 Ready、流量和副本行不作为运行授权,不能通过普通 CRUD 制造成功。
|
|
270
268
|
- 从当前 SaaS 引擎读取 MinIO 凭据,第二版 FileServerBak 使用 HTTPS origin 加后端绑定的公有桶。主 HDFS 保留 Aliyun;不全桶迁移、不删源文件、不把私有桶改公开。只复制当前已发布公开运行清单,JS/CSS/模型依赖完整成组;复制、签名回读与匿名 SHA/MIME/Range/CORS 全部成功后才允许消费者采用 NAS。
|
|
271
269
|
- 完整北京时间自然日的 CDN 运营报表及已接入 SDK 的实际响应字节可证明超过阈值的正向下界;榜单缺行、计量缺失和空报表不是零。迁移验证单独排除;历史人工指定单独记录,不能伪造当前24小时阈值通过。阈值触发后的同版本副本持续保留,避免源流量下降反复切回。
|
|
@@ -182,7 +182,7 @@ var url = V8.Method.GetPrivateFileUrl({
|
|
|
182
182
|
- `Limit:false` 的公有文件允许通过 CDN/公有桶直接访问,不要求记录用户行为日志,也不要为了审计强制改走私有代理。
|
|
183
183
|
|
|
184
184
|
<!-- /microi-progressive:chunk -->
|
|
185
|
-
<!-- microi-progressive:chunk id=v8-file-upload-006 sha256=
|
|
185
|
+
<!-- microi-progressive:chunk id=v8-file-upload-006 sha256=405f2dc31677040e3b81ae5f2e84820680b13d4384477ec7c4bf9186e3b3abef -->
|
|
186
186
|
## 接口直接响应文件(下载/导出)
|
|
187
187
|
|
|
188
188
|
接口引擎需要在配置中开启【**响应文件**】选项,然后返回特殊结构:
|
|
@@ -230,7 +230,7 @@ return {
|
|
|
230
230
|
- `image/png` / `image/jpeg`
|
|
231
231
|
- `application/octet-stream`(通用二进制)
|
|
232
232
|
|
|
233
|
-
|
|
233
|
+
注意:如果远程系统返回的是错误页、登录页、业务容器格式(例如第三方 PLM 电子仓 `KD_C_PLM`、或其它文件头不是 `%PDF-` 的伪 PDF),不要在 V8 里伪装成 PDF。后端会返回 JSON 错误,包含 `ExpectedFirstAscii`、`ActualFirstAscii`、`ActualFirstHex`、`Length`,按这些信息排查上游下载接口。
|
|
234
234
|
|
|
235
235
|
<!-- /microi-progressive:chunk -->
|
|
236
236
|
<!-- microi-progressive:chunk id=v8-file-upload-007 sha256=710eb73f616aff2ebce65a82568abe8208b701c1211a7e95ce500b1ce20b363f -->
|
|
@@ -52,21 +52,18 @@ Preview 和确认均重验当前客户端、回调及 Scope;账号变化通过
|
|
|
52
52
|
|
|
53
53
|
同一 Managed 会话接口包含本人初始化与敏感管理动作时,精确 `ApiRole` 不能代替动作级鉴权。SaaS v8.4.26 / `platform-sys-user-session` v1.0.5 对已归一化的 `GetSysUserPassword`,先拒绝匿名和访问密钥,再以可信 `V8.CurrentUser`、`V8.Db` 主库的本人活动状态/等级及有效管理员角色核验后调用原可信原子;不读取密码字段做授权,不使用 `DbRead`、客户端身份字段或角色名判断。标准角色授权可用于只读账号的本人会话初始化,不能把整引擎授权解释成敏感动作许可。负例使用预先确认不存在的固定用户 Id:普通账号必须先被管理员门拒绝,管理员仅验证合法路径返回不存在,禁止为验收读取任何真实密码。
|
|
54
54
|
|
|
55
|
+
登录密码的 `Pwd` 与 `PwdEncode` 必须成组更新;不能在 PBKDF2 账号上只写 DES 密文,也不能在验证失败时自动降级为 DES。官网短信重置使用固定 `official_password_reset` 调用 `V8.Method.ResetPlatformSmsPassword({Phone,SmsCode,NewPassword,ConfirmPassword,_Lang})`,由可信后端完成一次性验证码消费、原始密码哈希和会话撤销。历史编码不一致只由 `platform-sys-user-admin` 的 `RepairPasswordEncoding` 动作调用 V8.Method.RepairPlatformPasswordEncoding 可信修复原子:默认 `DryRun=true`,最多 20 个用户,写入需显式 `DryRun=false` 与 `ConfirmExecution='REPAIR_PASSWORD_ENCODING'`;不进入租户 Hook,不返回密码材料。两原子最低后端 8.7.4,应用包最低 SaaS v8.6.13 / 系统账号 v8.4.13,先确认运行版本再安装或调用。
|
|
56
|
+
|
|
57
|
+
密码注册、重置与登录要保留相同原始输入,不能在单个环节独自 `trim`。登录及重置包装器把 `_Lang`(无值时沿用 `lang` Header,再默认 `cn`)传至认证内核;缓存未预热也应返回本地化错误而不是内部 Key。手机号作为登录别名时精确账号优先,手机号重复则拒绝;验证后的身份只按认证结果 Id 回读。账号必须 `State=1` 且未删除;历史 `State=2` 是禁用,不能为了排障绕过或自动启用。
|
|
58
|
+
|
|
55
59
|
<!-- microi-progressive:begin -->
|
|
56
|
-
<!-- microi-progressive:chunk id=v8-security-000 sha256=
|
|
60
|
+
<!-- microi-progressive:chunk id=v8-security-000 sha256=a6a4311b1a799ea4ed005b22c01cb8230509aaf09aeead5a17c8c46da74772c8 -->
|
|
57
61
|
## 0. 租户动态系统设置与密钥边界
|
|
58
62
|
|
|
59
63
|
**AI 默认处理路径:** 用户交付第三方 Secret 并授权配置时,优先调用 `microi_manage_server_private_secret`:List 只确认 Key/HasSecret;Save 使用 `confirmExecution=SAVE:<ConfigKey>`,固定 `IsSecret=true / IsPublic=false` 并自动脱敏回读。例如畅捷通使用 `Integration.Changjet.AppSecret`,后端从 `V8.SysConfig.ServerPrivateSettings` 使用。不要仅拒绝硬编码后停止,也不要因为 `OsClientModel` 不暴露密钥而误判服务端 V8 无法调用第三方。工具不提供原文揭示;更换已有 Key 前回读现状,超时只回读、不盲目重写。
|
|
60
64
|
|
|
61
65
|
第三方密钥(微信、支付宝、OpenAI、阿里云、ERP、SMTP)**禁止**硬编码在 V8 代码或前端。公开的租户配置必须建成当前租户 `sys_config` 的实体字段;敏感或仅供后端使用的租户业务配置保存到 `mci_system_setting`。数据库、Redis、MongoDB、MinIO、MQ 等部署控制面仍由主库 `sys_osclients` 托管,子租户不能修改。
|
|
62
66
|
|
|
63
|
-
MinIO 部署凭据使用专用 `microi_manage_saas_minio`,不能误存到普通第三方业务 Secret,
|
|
64
|
-
也不能为此放宽 `microi_admin_table_data` 的秘密字段限制。先 Inspect 当前主租户及运行分区,
|
|
65
|
-
再以其 Revision 和 `SAVE_MINIO:<tenant>:<revision>` 确认保存;省略凭据保留,候选先探测、
|
|
66
|
-
事务行锁 CAS、提交后缓存刷新及运行回读。只返回 HasAccessKey/HasSecretKey,拒绝子租户和
|
|
67
|
-
访问密钥会话,不修改 HDFS/OSS 或桶权限。超时和 Persisted=true 的失败先 Inspect/Probe,
|
|
68
|
-
不能盲重放;旧后端不支持时升级正式后端,禁止用 SQL、普通表单或临时 V8 绕过。
|
|
69
|
-
|
|
70
67
|
能力是否启用、入口是否显示、公开交互模式等 Bool/Enum 配置即使属于登录或第三方集成,也必须放在 `sys_config`;API Key、ClientSecret、RP ID、Origin、Issuer、Scope、供应商地址等后端参数才放在 `mci_system_setting`。禁止给同一个新配置双写两张表。迁移旧开关时采用“新 `sys_config` 显式值 → 旧私密 Key → 存量安全默认”的只读回退,并从私密设置的列表、保存和删除入口移除旧 Key。
|
|
71
68
|
|
|
72
69
|
```javascript
|
|
@@ -166,14 +166,14 @@ var list = V8.Dbs.OracleDB1.FromSql('SELECT * FROM Table WHERE Id = @p0')
|
|
|
166
166
|
// 不写入 microi_database:创建仅当前请求使用的临时会话
|
|
167
167
|
var tempDb = V8.Dbs.Open(
|
|
168
168
|
'SqlServer',
|
|
169
|
-
'Server=
|
|
169
|
+
'Server=db.example.com,1433;Database=app;User Id=user;Password=***;Encrypt=True;TrustServerCertificate=False;'
|
|
170
170
|
);
|
|
171
171
|
var tempList = tempDb.FromSql('SELECT Id, Name FROM Customer WHERE Status = @p0')
|
|
172
172
|
.AddInParameter('@p0', 1)
|
|
173
173
|
.ToArray();
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
`V8.Dbs.Open`
|
|
176
|
+
`V8.Dbs.Open` 与保存连接支持 Dos.ORM 当前提供驱动和方言的 `MySql`、`SqlServer`、`Oracle`、`PostgreSql`、`DaMeng`、`KingBase`;具体 CPU、操作系统、数据库版本组合仍需真实验收,不代表第三方适配认证。SQL Server 生产连接启用加密与服务器证书校验,域名必须匹配证书且 API 宿主信任签发 CA,不以跳过校验作为通用修复。动态连接串只能来自可信服务端密钥或管理员代码,禁止使用 `V8.Param.ConnectionString`,禁止记录或返回。外部 SQL 的表名、列名、排序字段必须来自已校验元数据白名单;动态值继续使用 `AddInParameter`。
|
|
177
177
|
|
|
178
178
|
MCP 结构发现使用 `microi_inspect_external_database`,安全抽样默认使用只读的 `microi_query_external_database`。当用户明确要求数据库管理级能力时,使用独立的 `microi_execute_external_database`:它只允许后端确认的 `Level >= 9999` 当前用户调用,显式确认后可执行目标数据库账号有权执行的任意 DML、DDL、存储过程、数据库原生命令或多语句。输出行数限制只保护 MCP 传输,不限制数据库副作用;审计只记录 SQL 哈希、长度、模式和结果,不得记录 SQL 正文、连接串或密码。
|
|
179
179
|
|
|
@@ -1,67 +1,83 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: workspace-conventions
|
|
3
|
-
description: 每次 Microi 任务开始前必读的基础规范。用于识别创始人源码工作区,检查平台功能的应用商城、官方文档、Skills 与 MCP 交付,并遵守共享工作区、进程、资源和发布边界。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Microi 工作区全局约定
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
##
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
1
|
+
---
|
|
2
|
+
name: workspace-conventions
|
|
3
|
+
description: 每次 Microi 任务开始前必读的基础规范。用于识别创始人源码工作区,检查平台功能的应用商城、官方文档、Skills 与 MCP 交付,并遵守共享工作区、进程、资源和发布边界。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Microi 工作区全局约定
|
|
7
|
+
|
|
8
|
+
## 浏览器不可用时继续交付(强制入口)
|
|
9
|
+
|
|
10
|
+
- 用户指定 Edge、Chrome 等浏览器时先使用该浏览器。遇到扩展未连接、控制能力缺失或读取超时,按工具文档做有界诊断;仍不可用时,使用宿主支持的内置浏览器打开用户给定的准确链接。Codex 使用其内置浏览器;用户已允许备用浏览器时直接执行,不重复询问许可,不因一个浏览器不可用而结束整个任务。
|
|
11
|
+
- 内置浏览器需要登录时,展示页面并请用户直接在页面完成登录、验证码或其它必须接管的步骤;不索要聊天中的密码、Token 或 Cookie。保留交接标签页,收到完成回复后读取当前页面,核对域名、账号及租户,再继续依赖登录的操作。打开页面或收到“已登录”本身不等于业务操作已完成。
|
|
12
|
+
- 等待人工操作期间,只暂停依赖该页面的步骤,继续已授权且不依赖浏览器的 MCP、只读盘点、源码、Skills、文档与本地验证;保存待办、已完成证据及恢复入口。不得把登录等待或单一工具故障描述为整项任务无法继续。
|
|
13
|
+
- 浏览器能力故障与安全拒绝分开处理。遇到明确策略拒绝、权限不足、证书警告或必须由用户接管的操作,遵循该工具的限制;不能借换浏览器、原生 HTTP、CDP、关闭证书校验等方式执行被禁止的同一动作。只继续不受该限制影响的已授权步骤,并准确说明受阻动作及原因。
|
|
14
|
+
- 指定浏览器与内置浏览器都无法完成必要步骤时,说明各自已核实的故障、仍待完成的具体操作,并向用户提出最小可执行的接管要求;同时交付独立工作成果。恢复后从最近证据继续,结果未知的写入先回读,不盲重做;用户仍需操作的标签页不作为临时垃圾关闭。
|
|
15
|
+
|
|
16
|
+
## 普通吾码发布固定入口(强制)
|
|
17
|
+
|
|
18
|
+
用户要求“发布吾码/完整正式发布/一键发布”时,读取 [普通吾码发布固定流程(30 分钟)](../microi-deployment/SKILL.md#普通吾码发布固定流程30-分钟),执行 `Microi一键编译发布.sh --platform-release`(默认完整选项)。默认版本 +1 一次,发布 NuGet、API/PC Docker 和官方网站文档/Docker;官网不是可选追加项。`PlatformRelease` 执行常规 Microi.Tests(平台单元/组件,不自动追加 Full 专项)、吾码前端通用 Node 测试、真实接口检查与最终加密产物启动/运行冒烟;扩展浏览器验收仅在显式传入 `--platform-frontend-tests` 时追加。真实付费 AI、鸿地/JUNCHI、XJY 等指定客户数据专项和 SQL Server 等独立提供商专项默认不纳入,不再逐次询问;只有用户另行明确要求专项时才执行,回执逐项列为“不适用/未执行”,不能冒充通过。以 1800 秒为耗时目标,超过时告警、记录瓶颈及累计耗时并继续完成;真实错误、取消及安全门禁仍有效。只有用户明确要求局部发布时才缩小渠道;独立商城应用、OpenClaw 等应用源码专项由各自入口执行,不作为平台发布前置;平台 SDK、商城协议、安装器、SaaS 与工作流通用回归继续保留。不混入 Microi Code/Agent 独立产品测试,不新建租户或安装聊天应用。
|
|
19
|
+
|
|
20
|
+
## 本地测试复用项目配置(强制入口)
|
|
21
|
+
|
|
22
|
+
本机源码启动、平台测试与冒烟默认读取 `Microi.Server/Microi.net.Api/.microi-local` 选择的 `appsettings.<Environment>.json`,复用该项目已配置的 MySQL、Redis、MongoDB 与 SaaS 实际生效的 MinIO/OSS。只读核对配置和连接归属,不输出秘密;配置存在不等于允许写入业务数据。不能因 MCP 指向其它租户、环境缺失、端口冲突、测试失败或追求隔离而另建本地数据库/缓存/存储 Docker,不能用 `docker run` 临时运行 API 或官网镜像代替本机程序冒烟。官网用现有服务或本机静态预览进程验证。正式发行需要的镜像构建、推送与静态字节校验仍按原脚本执行,不代表获准创建常驻测试容器。
|
|
23
|
+
|
|
24
|
+
## 每次修改微服务前重新拉取(强制入口)
|
|
25
|
+
|
|
26
|
+
与每次对话的 CLI 版本检查一样,所有 AI 模型和宿主在**每次开始修改已有 MicroService**(包括接续任务、只改一行、路由修复和紧急发布)前,必须读取 `../microi-microservice/SKILL.md` 的协作门禁,重新拉取当前租户完整私有源码到本地,逐文件核对路径、原始字节大小和 SHA-256,并与本地和上次同步基线三方比较。保留本地独有改动、合并远端变化;正文缺失、哈希不一致或冲突未解决时,不开始修改。完整工程下载在工具进程内完成,不把源码 Base64 全量塞入模型上下文。
|
|
27
|
+
|
|
28
|
+
完成比较后保存**修改前**的 `SourceManifestHash`,调用 `microi_sync_microservice_source` 时传 `expectedSourceManifestHash`。现有源码缺少基线或远端已变化时工具拒绝写入;不能只重新取一个新哈希来重试旧本地代码。发布前再次校验,保留其它页面、`LegacyComponentPaths/LegacyMenuUrls` 以及实际组件注册。此要求必须同时出现在 CLI/IDE 生成的各 AI 宿主入口中;文字规则不能冒充已执行拉取、校验或渠道分发。
|
|
29
|
+
|
|
30
|
+
## 用户指定租户保持不变(强制入口)
|
|
31
|
+
|
|
32
|
+
用户通过 MCP 连接语句指定的 `profile + ApiBase + OsClient + Type/Network` 是本次业务开发边界。连接、建模、源码、文件、发布和验收始终绑定该租户;多连接时逐次显式选择同一 profile。读取主控配置是后端内部职责,不代表 AI 应切换到主租户。只有用户另行明确要求主租户运维或跨租户操作时才扩大范围。
|
|
33
|
+
|
|
34
|
+
`microi_get_status` 的服务器在线不等于可发布。`ApplicationAssetStreamGateReady=false` 或 `sys_osclients 门禁行数量必须为1,Actual=0` 应按平台门禁取数故障处理:保持子租户连接,保留已完成源码和发布候选,向平台报告精确三参数、后端版本和原始错误。子租户业务库同名表为空不能证明主控库登记缺失;禁止据此索要主租户账号/SSH、切换 profile、运行 `EnsureOwnedTenantRuntimeRegistration` 或补登记接口、复制/恢复业务库的 `sys_osclients` 行,或降级绕过发布门禁。后台升级成功也不代表当前宿主已加载新 MCP,报告时分别核对全局 CLI 与 `profiles.toolchain.loadedVersion`。
|
|
35
|
+
|
|
36
|
+
## Git 原分支交付(强制)
|
|
37
|
+
|
|
38
|
+
禁止 AI 自动创建并推送额外远端分支。开工记录用户原本的分支及上游;优先在原分支完成工作,确有并发隔离或冻结测试输入需要时,才使用本地临时分支或 detached worktree。验收后必须安全合回原分支,只推送该原分支;不得将临时分支、发布候选、备份分支或标签推到远端代替合并。只有用户明确要求创建某个远端分支时才例外。清理前核对未合并提交、活动工作树及其它任务,保留有效成果后删除本任务临时分支和工作树。详细步骤见[共享工作区与 Git 保障](references/progressive-04-工作区与平台专项保障.md#功能验收后的源码提交与推送强制)。
|
|
39
|
+
|
|
40
|
+
## 截图与大体积资源必须走 CDN(默认强制)
|
|
41
|
+
|
|
42
|
+
- 截图、宣传配图、PDF、PPT/PPTX、视频、音频、模型、压缩包、安装包、导出报告及其它大体积资源不得提交或推送到 Gitee、GitHub 等源码仓库。截图和交付附件无论压缩后是否低于大小阈值都走 CDN;禁止通过 Base64、Git LFS、分卷、改后缀、强制暂存或中间提交绕过。一般“提交并推送”的授权不能解除此规则,也不再走“先上传大文件到 Git 再处理”的路径。
|
|
43
|
+
- 吾码官方公开资源必须通过已核验 `https://api.microi.net + OsClient=iTdos` 的 `microi_itdos` MCP 上传公有桶,并使用 `https://file.microi.net` 前缀访问。普通客户资源使用已授权租户 MCP 与实际 CDN/FileServer,敏感、私有资料保持私有权限,不能为了公开链接改为公有桶。大文件使用已有流式/分片上传能力,不绕过 MCP 直接使用存储密钥。
|
|
44
|
+
- 源码只保存必要代码、轻量可编辑模板、CDN URL、文件名、字节数、SHA-256、MIME 和必要生成说明;原图、压缩件、PDF、下载校验缓存放任务专属临时目录,交付后按清理规则回收。上传成功后必须独立下载核对字节数、哈希和真实 MIME;PDF 同时检查 Range 分段读取。未知上传结果先回读,不能盲重传。
|
|
45
|
+
- 提交前检查暂存区,推送前以刚核验的远端引用检查全部待推送提交的新增 Blob;既查资源类型,也查单个 10 MiB / 合计 50 MiB 的体积门槛。发现禁止入库资源就停止受影响的提交/推送,迁移 CDN 并从本次候选索引/提交中排除;中间提交加入后又删除也不合格。不得改写共享历史、删除用户本地原图或清空既有仓库。必要运行依赖另按真实用途审查,但不能借此提交截图和交付附件。
|
|
46
|
+
|
|
47
|
+
完整上传与回读流程见 [文件上传下载规范](../v8-file-upload/SKILL.md),Git 对象检查与历史边界见 [Git 大文件推送检查](references/progressive-03-cli-与-ide-插件错版共存约定.md#git-大文件推送检查强制)。
|
|
48
|
+
|
|
49
|
+
## 测试临时文件必须随任务清理(强制)
|
|
50
|
+
|
|
51
|
+
本节适用于开发、测试、诊断和发布产生的全部自有临时资产,包括工作区根 `.tmp/`、宿主临时目录(如 `$CODEX_HOME/tmp`)和隔离 Git worktree,并替代历史“任务完成后可以不清理”的约定。目录位置和 `.gitignore` 不改变收尾责任。
|
|
52
|
+
|
|
53
|
+
- 创建前使用独立的 `.tmp/<任务标识>/`,登记本任务创建的目录、文件、进程及用途;不得混用其它任务目录,既有文件或共享依赖不因本轮使用而取得删除权。每轮测试及任务成功、失败、取消或中断退出时都执行 `finally` / teardown,先核验并关闭本任务的写入者、浏览器和临时服务,再删除本轮已无用途的临时文件;不能等用户再次要求清理磁盘。
|
|
54
|
+
- 默认删除本任务的一次性脚本、下载/解压副本、编译输出、隔离依赖、测试夹具和冗余截图/trace/video/日志。交付必需的少量报告、关键截图、发布哈希/回执先脱敏并归档到对应项目的长期交付目录,回读归档完整后再删临时副本;不得把完整构建树、源码副本或依赖目录当作验收证据长期留存。
|
|
55
|
+
- 失败仍需排查或下一阶段确实依赖的文件,只保留可解释的最小集合,记录路径、体积、原因、归属和清理时机;排查/依赖结束后立即删除。崩溃来不及执行 teardown 时,下次接续先核对自有清单并补清;不能以“测试失败”“以后可能有用”为由无限保留。
|
|
56
|
+
- 隔离副本只为实际并发冲突或构建输入冻结创建,优先复用合适的工作树、稀疏检出和最小夹具;禁止每次重试复制整套源码、Git 历史、依赖、SDK 和运行目录。创建前盘点源盘与目标盘可用空间及已有同类副本,按本轮实际需求估算新增体积;测试结束先回收旧运行/编译目录,再创建下一轮。不要把临时目录移到另一块盘当作清理。
|
|
57
|
+
- 工作树不是永久保留项:任务结束逐仓检查未提交、未跟踪、忽略文件和未推送提交,已合入/已归档且无活动引用的副本按 Git/宿主支持的方式移除并回读注册表;必要差异先最小归档并校验可恢复性,不复制完整构建树。嵌套独立 Git 仓库逐个核对;禁止因存在 `.git` 就跳过整个任务目录,也禁止把主工作区存在当成差异已安全保存的证明。
|
|
58
|
+
- **规则必须落到执行入口**:新增或维护测试、构建、发布脚本时,将自有临时资产回收写入实际的 `finally`、测试框架 teardown/after hook 或宿主归档流程,并验证成功与失败退出均回收。`Microi.Tests/run-tests.ps1` 的 Full 隔离 `.net-artifacts` 由入口自动回收,保留结果报告与 `artifact-cleanup.json`;已有共享目录不取得删除权。仅修改 Skill、模型读过规则或工具显示最新版,都不能声称自动清理已生效;须检查已安装正文及实际执行结果。硬崩溃/强杀可能跳过收尾,恢复时按归属清单补清,不能承诺任意中断都即时删除。
|
|
59
|
+
- 删除前核验解析后的绝对路径位于已登记的本任务临时目录或独占副本内,不能仅依赖字符串前缀;检查目标及祖先的重解析点/符号链接、当前进程 CWD/文件锁、Git worktree 与未提交源码、发布锁以及虚拟机/容器引用。禁止跟随链接递归到共享或外部目录;无法确认真实边界时保留。保留用户文件、唯一源码/未提交改动、正式交付物、共享资源和其它任务资产;独占 Git 工作树先按 Git/宿主支持的移除方式完成检查,不能直接递归删除。
|
|
60
|
+
- 历史垃圾清理先做体积与引用盘点,只删已核验无引用、无跟踪源码且可再生成的产物;文件名含 `.tmp`、目录名为 `bin/obj` 或时间较旧都不能单独证明可删。禁止整体清空共享 `.tmp/`,禁止为了清理结束其它任务或重启 Docker/WSL。
|
|
61
|
+
- 清理后独立回读已删路径不存在、保护对象仍在;必要时比对源码、用户原图、正式交付物的哈希及其它工作树登记。收尾报告已删路径/文件数、逻辑字节数、磁盘可用空间变化、剩余保留项及清理时机;并行写入、硬链接等会使逻辑大小与实际净空间变化不同,不能混报。遇到文件锁、权限或策略拒绝时记录执行阶段、原始错误和未完成范围,禁止换工具绕过。测试通过与临时文件清理完成是两个验收项,不能互相代替。
|
|
62
|
+
|
|
63
|
+
### Windows 默认普通删除与策略拒绝排查(强制)
|
|
64
|
+
|
|
65
|
+
- 自动收尾默认使用原生 PowerShell 普通删除:已完成上述核验的普通文件使用 `Remove-Item -LiteralPath $verifiedTaskFile -ErrorAction Stop`,已核验的独占目录才使用 `Remove-Item -LiteralPath $verifiedTaskDirectory -Recurse -ErrorAction Stop`。变量必须来自本任务明确登记并重新解析的单个绝对路径,禁止空值、通配符、盘符根目录、用户目录根、源码根或共享 `.tmp` 根;不能把这两行当作跳过核验的通用清盘命令。
|
|
66
|
+
- **删除命令不默认添加 `-Force`,自动 teardown 也不得失败后升级为强制删除。** 不通过清除只读/隐藏/系统属性、修改 ACL、改审批配置、编码命令、换语言/API、换 shell 或间接脚本完成被拒绝的同一动作。只读盘点可使用 `Get-ChildItem -Force` 发现隐藏项;它不授予强制删除权。普通删除遇到受保护属性、占用或权限错误,保留相应项并报告,不能因其体积小或由 AI 创建就忽略限制。
|
|
67
|
+
- `CreateProcess ... rejected: blocked by policy` 表示执行器在启动 shell 前拒绝;命令里的路径/归档检查也没有运行,不能把它当作 Windows ACL 报错或清理成功。已核验的 Codex Windows `0.163.0-alpha.10.2` 将 `Remove-Item … -Force` 识别为危险删除,并在 `approval_policy=never` 下直接拒绝;`danger-full-access` 不取消命令策略,`never` 也不等于全部允许。其它版本/宿主必须依据当前有效配置、日志或对应版本实现定位,不能把所有同名错误都归因于 `-Force`。实现依据:[强制删除识别](https://github.com/openai/codex/blob/rust-v0.163.0-alpha.10.2/codex-rs/shell-command/src/command_safety/windows_dangerous_commands.rs#L489)、[禁止审批时的决策](https://github.com/openai/codex/blob/rust-v0.163.0-alpha.10.2/codex-rs/core/src/exec_policy.rs#L799)。
|
|
68
|
+
- 若已明确拒绝针对强制删除,只有在原有授权和归属/路径核验仍成立、且普通删除确实保留系统保护语义时,才可收窄为上述原生非强制操作;这不授权扩大删除范围。拒绝原因未知、存在明确禁止,或普通操作仍被拒绝时停止该项,保留并报告,不反复变换写法试探策略,也不修改规则放行。
|
|
69
|
+
- `git worktree remove` 的 `Result too large` 等是命令执行后的失败,与策略拒绝分开处理。失败后分别回读工作树登记与目录,不能假定“登记没了,文件也没了”;先验证差异/未推送提交已可恢复、残留源码与对应提交一致、无其它任务引用和外部链接,才将已注销的残留产物纳入普通清理清单。归属或恢复证据不足时保留,不强删独占副本或嵌套仓库。
|
|
70
|
+
|
|
71
|
+
## 质量优先与适用范围
|
|
72
|
+
|
|
73
|
+
**测试依赖默认复用项目配置(强制)**:本地联调、平台测试和发布冒烟以 `.microi-local` 选定的项目配置及其 SaaS 生效存储为默认来源,复用已有 MySQL、Redis、MongoDB、HDFS/OSS/MinIO;用户明确指定远端业务 MCP 时核验其目标,不能混用另一租户连接。只在既有已授权测试范围使用独立表/记录、Key/对象前缀隔离,不自动新建租户。固定名称、归属或端口冲突、本机无容器、旧夹具被清理都不是另建测试容器的理由,先修正入口的配置传递与归属校验。默认不创建或运行本地 Docker 测试环境;缺少安全测试前置时准确报告,不放宽断言或把业务配置当写入授权。详情见[依赖生命周期](references/progressive-02-microi-net-api-本地启动约定.md#本地测试程序与依赖生命周期强制)。
|
|
74
|
+
|
|
75
|
+
准确性、业务完整性、安全和真实验收优先于 token 与回复长度。先确定完整系统、局部修改或只读分析;新建系统意图按完整交付,不能因短提示词或预算缩小八项清单及菜单/报表增补。局部修改定位真实目标和依赖,信息不足、动态关系或影响不明时扩大读取,不凭摘要猜测或写入。
|
|
76
|
+
|
|
77
|
+
必须读取总控的 [质量与增量开发规范](../microi-system-delivery/references/context-quality.md),按任务映射实际读取与验收记录。同一会话只复用内容哈希未变且已完整读取的规范;首次、版本变化和读取记录不明时补读。权限、写入前检查和执行后回读不复用旧成功结论。
|
|
78
|
+
|
|
79
|
+
工作区保护始终有效:保留他人差异与共享进程,临时产物只放根 `.tmp/`,闭源源码只从独立内部仓提交。修改/提交前读取 [共享工作区与 Git 保障](references/progressive-04-工作区与平台专项保障.md#多对话共享工作区变更归属保护强制);启动构建、测试服务或浏览器前读取同文件资源/OOM规则并检查现有资源。后端/任务/权限变更读取分布式与安全章节;平台源码定位、文档和 Skills 修改读取对应章节。平台能力四项检查仍固定保留在本入口。
|
|
80
|
+
|
|
65
81
|
<!-- microi-progressive:begin -->
|
|
66
82
|
|
|
67
83
|
### 自动清理入口与退出回执
|
|
@@ -69,79 +85,81 @@ description: 每次 Microi 任务开始前必读的基础规范。用于识别
|
|
|
69
85
|
- 自动化入口共用 `Microi.Server/tools/Microi.ArtifactSafety.ps1` 的祖先/目录树预检。Full 的 `Microi.TestArtifactCleanup.ps1` 在移除输出链接前检查整个目标树、受保护属性和 Windows 文件占用;发布脚本的构建/打包/冒烟日志、NuGet 解包临时目录统一进入 `release-scratch.mjs` 新建的独占目录,以目录内标记和目录外归属记录校验身份,退出后保留小型 `.cleanup.json` 回执。没有清单、身份变化或预检失败都保留,不能扫描同名前缀代替所有权。
|
|
70
86
|
- 发布退出顺序为停止本次写入者、普通清理、释放本次发布锁;成功、失败及可捕获的 INT/TERM/HUP 都走同一收尾。清理失败令原成功退出变为非零,原有失败码仍保留;测试原异常不被清理/回执写入错误覆盖。硬杀、掉电和执行器在 shell 启动前拒绝无法保证运行 `finally/EXIT`,接续时先重新盘点已登记路径,不自动清理其它任务或全部历史目录。
|
|
71
87
|
|
|
72
|
-
<!-- microi-progressive:chunk id=workspace-conventions-000 sha256=
|
|
73
|
-
## 任务启动前 Skill 读取规则(强制)
|
|
74
|
-
|
|
75
|
-
AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端、后端、UniApp、文档、测试或交付任务前,必须先按任务类型读取相关 `microi.skills/**/SKILL.md`。不能等到写代码或出问题后才补读。
|
|
76
|
-
|
|
77
|
-
- 任何吾码任务先读取本文件和 `microi-system-delivery/SKILL.md`,再按总控路由读取相关专项 Skill;无需用户指定 Skill 名称。
|
|
78
|
-
- 涉及采集引擎、浏览器 Worker、验证码、站点规则、导出产物时,同时读取 `spider-engine`。
|
|
79
|
-
- 涉及 V8 CRUD、SQL、上传下载、导入导出、菜单按钮、表单事件、前端页面或自动化测试时,继续读取对应专项 Skill。
|
|
80
|
-
- 最终交付说明必须能逐条对应用户编号需求;不得遗漏、合并或把仍可执行的需求写成“下一步继续”。
|
|
81
|
-
|
|
82
|
-
### 吾码 AI 开发默认路由(强制)
|
|
83
|
-
|
|
84
|
-
- 在已通过吾码插件或 CLI 初始化的工作区中,用户直接描述业务需求即可。即使用户未写“吾码”、`Microi`、`microi-system-delivery` 或任何 Skill 名称,AI 仍须根据当前项目和已配置连接识别吾码任务,自动读取本基础入口及 `microi-system-delivery/SKILL.md`,不能等用户提醒。
|
|
85
|
-
- 完整系统开发必须完整读取总控中的[完整系统开发默认交付清单(原推荐提示词 1–8)](../microi-system-delivery/references/progressive-01-标准工作流.md#完整系统开发默认交付清单原推荐提示词-18),并按总控的相关 Skill 表继续读取表单、模块、数据源、V8、页面、报表及验收等实际涉及的专项规范。不得仅凭 Skill 名称、摘要或聊天记忆执行,也不把全部 Skills 全文拼进一个提示词。
|
|
86
|
-
- 按用户意图确定执行范围:完整系统开发逐项执行八项清单;局部修改只执行相关条目,保留已有业务资源和无关配置;只读分析只读取规范和事实,不创建资源、验收数据或执行发布。需求明确表示新建完整系统时,不因省略“完整”二字就降为方案或样例。
|
|
87
|
-
- 默认读取规则不额外授权生产数据写入、客户部署或全库重建。连接可由当前项目和唯一已登录 Profile 自动确定;多个目标无法唯一匹配时只澄清必要的连接信息,不要求用户选择或记住 Skill。明显属于其它平台或与吾码无关的任务按实际项目规范执行。
|
|
88
|
-
- 生成的 `AGENTS.md`、`CLAUDE.md`、Copilot/Cursor 指令及可移植吾码 Skill 只保留默认入口指针和读取顺序;详细八项清单仍由总控参考文件唯一维护。工作区未初始化或必要 Skill 缺失时先按现有安装/初始化规范恢复,并准确说明实际可读取状态,不能声称 AI 已自动加载不存在的规则。默认路由不代表任意模型 100% 遵循;开工说明须列出实际读取的基础入口、总控、完整清单参考及本次专项 Skills,并映射到交付计划,不能只凭路径存在、MCP 连通或文件摘要声称已读。原八项及报表、菜单先行增补的详细要求统一读取总控参考文件。
|
|
89
|
-
|
|
90
|
-
### 吾码创建人身份识别(强制)
|
|
91
|
-
|
|
92
|
-
- 每次新对话或接续 Microi 任务时,先检查工作区根的 `Microi.Server/Microi.net/`:目录必须存在,并且 `rg --files Microi.Server/Microi.net -g '*.cs'` 至少返回一个真实源码文件,空目录不成立。满足条件即按“吾码创始人(创建人)的官方完整源码工作区”处理;不要求本次代码恰好修改在该目录内。此标记决定开发交付规范,不代替真实 MCP 登录、官方发布权限或用户授权;目录缺失、为空或只有编译产物时按普通用户工作区处理。
|
|
93
|
-
- 对平台级新增、增强或修复,无论改动位于前端、后端、MCP、插件还是内置应用,都必须在计划和收尾中执行下列四项检查。规则留在本入口,不得移入仅按需读取的参考文件、单个专项 Skill、项目说明或聊天记忆。
|
|
94
|
-
|
|
95
|
-
### 平台功能四项同步检查(强制)
|
|
96
|
-
|
|
97
|
-
确认创始人源码工作区后,平台能力变更必须同时读取 `app-store` 与 `microi-docs-coverage`;客户业务、局部修改及只读任务先作四项适用性判断,涉及商城或文档时再读对应专项,不因身份标记加载无关发布正文;对每个功能逐项记录“需要/无需修改 + 依据 + 完成证据”,不能因只改 C# 或只修一个客户问题而跳过平台能力的检查。
|
|
98
|
-
|
|
99
|
-
| 检查项 | 何时必须完善 | 交付证据 |
|
|
100
|
-
|---|---|---|
|
|
101
|
-
| 官方应用商城 | 涉及系统设置、表/字段/Tab、菜单/权限、接口引擎/事件、数据源、页面、工作流、任务、内置应用或种子数据 | 通过已校验 `https://api.microi.net + OsClient=iTdos` 的 `microi_itdos` 更新官方母版并发布归属应用,回读版本、状态、包正文与哈希;基础空库包和存量增量应用都相关时同时更新 |
|
|
102
|
-
| 官方中文文档 | 新能力、配置入口、参数、兼容条件、权限、使用方式或可感知行为发生变化 | 原位补充 `microi.doc/docs/doc/` 对应页面,给出最小示例与升级要求,并完成相应文档检查;不手工维护英文副本 |
|
|
103
|
-
| 吾码 Skills | AI 需要知道新的使用决策、配置方法、工具签名、限制、排错方式或验收条件 | 更新责任 Skill 及必要参考、能力映射,并验证基础入口、插件/CLI 分发与后端内嵌知识链路;不能只记在当前对话或本地 memory |
|
|
104
|
-
| 吾码 MCP | AI 尚不能安全发现、配置、调用、发布或回读该能力,或现有工具的 Schema/说明缺失、过时 | 优先扩展现有通用工具及其 Schema、说明、测试;既有工具完整覆盖时无需新增工具,但必须列明可复用工具及验证依据 |
|
|
105
|
-
|
|
106
|
-
- “无需修改”必须逐项有具体理由,例如纯内部优化无元数据变化可不升应用版本,现有 MCP 已支持该配置可不新增工具;不得默认四项都做,也不得默认四项都省略。需要修改的项目应在本次授权范围内完成并验证,受权限、网络或发布渠道阻挡时明确未完成项,不能用本地修改代替线上发布。
|
|
107
|
-
- 任务若只要求分析、评审或制定规范,仍保持只读或仅修改指定规范;身份标记不授权无关线上写入。客户部署、容器更新和应用自动安装与官方发布是独立动作,服从用户指定的手动/自动边界;用户明确手动更新时不得擅自部署。
|
|
108
|
-
- 收尾必须区分“源码/文档已修改、测试通过、应用已发布回读、Skills/插件已打包或已分发、镜像已推送、客户已安装或已部署”。npm、NuGet、
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
- `Microi
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
88
|
+
<!-- microi-progressive:chunk id=workspace-conventions-000 sha256=31990746b27d29d6f3a471dc800c843f1ddcc08b09a8444efdbf5c04cbde5503 -->
|
|
89
|
+
## 任务启动前 Skill 读取规则(强制)
|
|
90
|
+
|
|
91
|
+
AI 处理任何 Microi 低代码、V8、MCP、OpenClaw、采集引擎、前端、后端、UniApp、文档、测试或交付任务前,必须先按任务类型读取相关 `microi.skills/**/SKILL.md`。不能等到写代码或出问题后才补读。
|
|
92
|
+
|
|
93
|
+
- 任何吾码任务先读取本文件和 `microi-system-delivery/SKILL.md`,再按总控路由读取相关专项 Skill;无需用户指定 Skill 名称。
|
|
94
|
+
- 涉及采集引擎、浏览器 Worker、验证码、站点规则、导出产物时,同时读取 `spider-engine`。
|
|
95
|
+
- 涉及 V8 CRUD、SQL、上传下载、导入导出、菜单按钮、表单事件、前端页面或自动化测试时,继续读取对应专项 Skill。
|
|
96
|
+
- 最终交付说明必须能逐条对应用户编号需求;不得遗漏、合并或把仍可执行的需求写成“下一步继续”。
|
|
97
|
+
|
|
98
|
+
### 吾码 AI 开发默认路由(强制)
|
|
99
|
+
|
|
100
|
+
- 在已通过吾码插件或 CLI 初始化的工作区中,用户直接描述业务需求即可。即使用户未写“吾码”、`Microi`、`microi-system-delivery` 或任何 Skill 名称,AI 仍须根据当前项目和已配置连接识别吾码任务,自动读取本基础入口及 `microi-system-delivery/SKILL.md`,不能等用户提醒。
|
|
101
|
+
- 完整系统开发必须完整读取总控中的[完整系统开发默认交付清单(原推荐提示词 1–8)](../microi-system-delivery/references/progressive-01-标准工作流.md#完整系统开发默认交付清单原推荐提示词-18),并按总控的相关 Skill 表继续读取表单、模块、数据源、V8、页面、报表及验收等实际涉及的专项规范。不得仅凭 Skill 名称、摘要或聊天记忆执行,也不把全部 Skills 全文拼进一个提示词。
|
|
102
|
+
- 按用户意图确定执行范围:完整系统开发逐项执行八项清单;局部修改只执行相关条目,保留已有业务资源和无关配置;只读分析只读取规范和事实,不创建资源、验收数据或执行发布。需求明确表示新建完整系统时,不因省略“完整”二字就降为方案或样例。
|
|
103
|
+
- 默认读取规则不额外授权生产数据写入、客户部署或全库重建。连接可由当前项目和唯一已登录 Profile 自动确定;多个目标无法唯一匹配时只澄清必要的连接信息,不要求用户选择或记住 Skill。明显属于其它平台或与吾码无关的任务按实际项目规范执行。
|
|
104
|
+
- 生成的 `AGENTS.md`、`CLAUDE.md`、Copilot/Cursor 指令及可移植吾码 Skill 只保留默认入口指针和读取顺序;详细八项清单仍由总控参考文件唯一维护。工作区未初始化或必要 Skill 缺失时先按现有安装/初始化规范恢复,并准确说明实际可读取状态,不能声称 AI 已自动加载不存在的规则。默认路由不代表任意模型 100% 遵循;开工说明须列出实际读取的基础入口、总控、完整清单参考及本次专项 Skills,并映射到交付计划,不能只凭路径存在、MCP 连通或文件摘要声称已读。原八项及报表、菜单先行增补的详细要求统一读取总控参考文件。
|
|
105
|
+
|
|
106
|
+
### 吾码创建人身份识别(强制)
|
|
107
|
+
|
|
108
|
+
- 每次新对话或接续 Microi 任务时,先检查工作区根的 `Microi.Server/Microi.net/`:目录必须存在,并且 `rg --files Microi.Server/Microi.net -g '*.cs'` 至少返回一个真实源码文件,空目录不成立。满足条件即按“吾码创始人(创建人)的官方完整源码工作区”处理;不要求本次代码恰好修改在该目录内。此标记决定开发交付规范,不代替真实 MCP 登录、官方发布权限或用户授权;目录缺失、为空或只有编译产物时按普通用户工作区处理。
|
|
109
|
+
- 对平台级新增、增强或修复,无论改动位于前端、后端、MCP、插件还是内置应用,都必须在计划和收尾中执行下列四项检查。规则留在本入口,不得移入仅按需读取的参考文件、单个专项 Skill、项目说明或聊天记忆。
|
|
110
|
+
|
|
111
|
+
### 平台功能四项同步检查(强制)
|
|
112
|
+
|
|
113
|
+
确认创始人源码工作区后,平台能力变更必须同时读取 `app-store` 与 `microi-docs-coverage`;客户业务、局部修改及只读任务先作四项适用性判断,涉及商城或文档时再读对应专项,不因身份标记加载无关发布正文;对每个功能逐项记录“需要/无需修改 + 依据 + 完成证据”,不能因只改 C# 或只修一个客户问题而跳过平台能力的检查。
|
|
114
|
+
|
|
115
|
+
| 检查项 | 何时必须完善 | 交付证据 |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| 官方应用商城 | 涉及系统设置、表/字段/Tab、菜单/权限、接口引擎/事件、数据源、页面、工作流、任务、内置应用或种子数据 | 通过已校验 `https://api.microi.net + OsClient=iTdos` 的 `microi_itdos` 更新官方母版并发布归属应用,回读版本、状态、包正文与哈希;基础空库包和存量增量应用都相关时同时更新 |
|
|
118
|
+
| 官方中文文档 | 新能力、配置入口、参数、兼容条件、权限、使用方式或可感知行为发生变化 | 原位补充 `microi.doc/docs/doc/` 对应页面,给出最小示例与升级要求,并完成相应文档检查;不手工维护英文副本 |
|
|
119
|
+
| 吾码 Skills | AI 需要知道新的使用决策、配置方法、工具签名、限制、排错方式或验收条件 | 更新责任 Skill 及必要参考、能力映射,并验证基础入口、插件/CLI 分发与后端内嵌知识链路;不能只记在当前对话或本地 memory |
|
|
120
|
+
| 吾码 MCP | AI 尚不能安全发现、配置、调用、发布或回读该能力,或现有工具的 Schema/说明缺失、过时 | 优先扩展现有通用工具及其 Schema、说明、测试;既有工具完整覆盖时无需新增工具,但必须列明可复用工具及验证依据 |
|
|
121
|
+
|
|
122
|
+
- “无需修改”必须逐项有具体理由,例如纯内部优化无元数据变化可不升应用版本,现有 MCP 已支持该配置可不新增工具;不得默认四项都做,也不得默认四项都省略。需要修改的项目应在本次授权范围内完成并验证,受权限、网络或发布渠道阻挡时明确未完成项,不能用本地修改代替线上发布。
|
|
123
|
+
- 任务若只要求分析、评审或制定规范,仍保持只读或仅修改指定规范;身份标记不授权无关线上写入。客户部署、容器更新和应用自动安装与官方发布是独立动作,服从用户指定的手动/自动边界;用户明确手动更新时不得擅自部署。
|
|
124
|
+
- 收尾必须区分“源码/文档已修改、测试通过、应用已发布回读、Skills/插件已打包或已分发、镜像已推送、客户已安装或已部署”。npm、NuGet、Visual Studio Marketplace、Open VSX 等制品渠道以发布命令明确成功作为发布完成依据,默认不等待索引或 CDN 传播;普通吾码 Docker 发布还须回读目标镜像不可变摘要;不得把本地构建或插件本地副本同步称为已发布。发布成功不等于目标服务已部署,运行与业务验收仍按任务要求执行。
|
|
125
|
+
|
|
126
|
+
- **用户明确不等待渠道回执时优先执行**:npm、NuGet、镜像仓库、扩展市场等正式分发渠道,以发布命令明确成功或用户确认其本人终端发布成功作为该渠道完成依据。不得因公开索引、包页面、下载地址或远端摘要暂未可见而降为未完成,也不得再要求用户提供结果行、回执或重复确认;不以“公开证据核验”为由自行恢复轮询。只在用户另行要求线上状态核验,或命令确实失败、结果未知且用户也未确认成功时诊断。发布前本地测试、版本/目标/制品一致性、加密与归档检查继续执行;目标部署和业务验收仍按原任务范围处理。
|
|
127
|
+
|
|
128
|
+
### 平台回归与独立应用测试归属(强制)
|
|
129
|
+
|
|
130
|
+
- 创始人源码工作区中的每个平台功能新增、缺陷修复和兼容性调整都必须同时交付可重复执行的回归测试;先证明旧行为失败,再验证修复成功,覆盖正常、边界、失败、安全与存量兼容路径。不得只改源码或用手工截图代替自动回归。
|
|
131
|
+
- 平台 C# 单元/组件/集成测试归入 `Microi.Server/Microi.Tests`。平台前端、平台内置应用包与平台 V8 的 Node 行为测试可留在责任源码旁,由 `Microi.Tests/run-tests.ps1` 自动发现执行;平台真实浏览器、数据库及第三方集成归入 Full 或平台专项验收,不得冒充离线单测。新增公共后端能力同时补相应 HTTP 闭环。
|
|
132
|
+
- 官方或社区独立业务应用、游戏及客户项目的测试归应用自身源码根的 `tests/` 或独立测试工程,由该应用自己的测试和发布入口执行;不得放入 `Microi.Tests`、创建转调包装或接入平台 Quick/Full。官方发布身份不改变测试归属。应用开发中涉及平台通用缺陷时,仅把通用最小回归夹具加入平台门禁,应用业务断言仍在应用项目维护。
|
|
133
|
+
- `Microi一键编译发布.sh` 的普通 PC/API 镜像路径(包括仅推送、热修复)使用 PlatformRelease:平台自动化、编译、闭源 DLL 加密、最终产物冒烟、Docker 推送和远端摘要回读,以 30 分钟为可度量发布预算,记录各阶段耗时及超时未达标事实。普通发布不运行 Microi Code/Agent 测试,不新建租户、不安装聊天应用;Full 保留为显式独立深度测试,不自动成为发布前置条件。选中范围内缺少环境、零用例、失败、取消、跳过、待办或无法解析测试结果一律停止。未纳入本次矩阵的提供商标为“不适用(未执行)”,不冒充通过,也不单独阻塞常规发布。禁止关闭断言、删测试、排除已选失败项目或修改门禁阈值来发布。
|
|
134
|
+
- 测试成功必须绑定本次候选源码和实际构建上下文哈希,构建后、每次推送前复核;旧产物无有效回执或候选漂移时必须重建复验。本地平台测试默认使用 `.microi-local` 选定配置的 MongoDB 实际版本与租户 SaaS 生效 HDFS;用户指定远端 MCP 业务验证时才按该连接只读发现。沿已授权范围隔离,不新建本地服务或替换当前提供商。只有明确的兼容、迁移或提供商缺陷任务才扩展真实矩阵;未执行项如实标为未覆盖,不以同一端点冒充多版本,也不因环境发现获得生产写入授权。
|
|
135
|
+
- 本次修复或显式 Full 需要真实依赖验证时,使用用户指定 MCP 对应的实际依赖:MySQL、MongoDB 实际版本、Redis,以及租户实际生效的 MinIO 或 OSS/HDFS 等存储;不默认同时验证所有数据库版本或所有存储提供商。先核实 Profile、ApiBase、OsClient 和依赖类型,在已授权隔离范围执行;普通发布复用现有环境,不为验收新建租户或安装聊天应用;默认复用已配置依赖,不因本地无容器另建服务;依赖发现不扩大生产业务写入、付费资源或用户明确禁止的操作范围。
|
|
136
|
+
- SQL Server 的真实连接、提供商兼容与专项验收默认不纳入常规发布矩阵;只有用户明确指定排查、修复或验收 SQL Server 问题时才执行。检测到 SQL Server 连接/驱动、旧 Full 清单或通用数据库代码变更都不能自行触发该专项,也不需要每次申请 SQL Server 免测。既有不连接 SQL Server 的离线单元断言照常保留,但不能据此声称 SQL Server 已实测。
|
|
137
|
+
- 交付记录逐项列明修复与测试映射、执行数量、未覆盖边界和镜像摘要。覆盖率与 Full 都不能证明所有租户业务、任意生产数据和第三方系统绝对无误;真实客户路径仍需只读验收。详细矩阵见 `microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md`。
|
|
138
|
+
|
|
139
|
+
### Microi吾码非阻塞自动更新(强制)
|
|
140
|
+
|
|
141
|
+
- 本规范与“Microi吾码工作进度播报规范”同属无条件基础规则,适用于任何 AI 模型与宿主,不限 Codex,也不要求用户提到安装、版本或更新。每次新建或接续 Microi 对话,AI 必须读取本节并检查版本;已有 CLI 时必须投递 `microi update --background --workspace "<工作区绝对路径>" --json`,由更新器去重、节流和重试,不得改写为“可选”“建议更新”或等用户提醒。后台任务与业务工作并行,不得等待更新完成才开始业务分析、MCP 调用、源码修改、构建或发布。
|
|
142
|
+
- `@microi.net/cli` 必须自动升级到 npm 官方 `latest`,并使用新版包重新同步吾码 Skills、AI 宿主规则、插件与 MCP。不能只执行 `npx @latest`、只查询版本或只更新全局 CLI 后就声称完整升级;旧 CLI 缺少 `update` 时按 `microi-codex-installer` 的官方安装恢复路径更新。完全未安装且本次未授权初始化时准确记录缺失,不擅自创建服务器连接。
|
|
143
|
+
- 首次工作过程说明必须包含一次版本播报,以“Microi吾码开发工具版本”开头,报告当前实际 CLI 版本、npm 官方最新版本(含查询时间)、自动更新是否启用及状态、Skills/MCP 是否已同步。读取 `microi version --json` 与后台状态文件,或 MCP `profiles.toolchain`;后者的 `loadedVersion` 只代表当前 MCP 提供者,`latestObservedVersion` 是带时间的历史查询结果,不能冒充全局 CLI 版本或刚刚在线查询的最新版。尚未确认的项必须写“检测中/未知/待回读”,后续回读补齐;禁止猜测、硬编码当前发布号或把 `expectedVersion` 当 npm 最新版。
|
|
144
|
+
- CLI 最新版只从 npm 官方 registry 查询:`npm view '@microi.net/cli' version --json --prefer-online --registry=https://registry.npmjs.org/`;VS Code 扩展只使用官方扩展宿主的自动更新/安装命令。不得使用第三方 registry 或不明镜像冒充官方更新。
|
|
145
|
+
- 后台更新完整闭环包含全局 CLI、已安装宿主的 `microi@microi-net` / DSH bundle,以及已配置连接工作区的 `microi ai init`、`microi doctor`、`microi codex status` / `microi dsh status`。回读全局版本、工作区 Skills bundle/file 版本及 MCP provider 版本,确认不低于本次官方查询版本;较新提供者保留。未安装的宿主安静跳过,未配置连接的目录不生成 AI/MCP 文件。完成后重新读取已更新的基础规范与本任务专项 Skill,并在收尾说明升级或延后结果。`codex install --yes` 的 `--yes` 只兼容旧脚本,不是用户继续工作的授权开关。
|
|
146
|
+
- 当前运行中的 VS Code Extension Host、CLI、Codex Router、MCP 和对话继续使用已加载版本。禁止为了更新终止进程、强制重载、要求立即新建任务或拒绝新工作;新版只在后续新进程或宿主自然重启时接管。
|
|
147
|
+
- npm 官方 registry 无法访问、权限不足、文件被运行中进程占用、安装失败或宿主不能热更新时,必须写入可诊断状态并延后重试。可以非模态提示“立即重试/查看日志”,但用户忽略、关闭或暂不处理时,当前、正在进行和新建的 Microi 工作仍必须继续。
|
|
148
|
+
- 用户明确关闭自动更新或宿主不允许终端执行时,尊重该限制,报告具体未完成项和恢复命令;不能静默宣称已是最新版。自动更新只覆盖开发工具、Skills 和本机 MCP 入口,不授权升级客户 API/数据库、部署容器或安装业务应用;已签名 Microi Agent 安装目录仍通过桌面官方更新渠道升级。
|
|
149
|
+
- 只有任务明确依赖旧版本不存在的具体能力时,才准确说明该能力边界与可用降级方案;不得用“最新版未通过”“尚未授权升级”作为整项任务的失败理由。
|
|
132
150
|
<!-- /microi-progressive:chunk -->
|
|
133
|
-
<!-- microi-progressive:chunk id=workspace-conventions-001 sha256=
|
|
134
|
-
## Microi吾码工作进度播报规范(强制)
|
|
135
|
-
|
|
136
|
-
AI 在任何新建或已有对话中处理 Microi吾码任务并向用户输出工作过程记录时,必须默认执行本规范,无需用户再次提醒:
|
|
137
|
-
|
|
138
|
-
- 每累计输出 3-5 次面向用户的工作过程记录,根据任务复杂度和实际阶段选择合适时机,追加一次进度播报;首次播报不得晚于第 5 次工作过程记录。工具调用结果、系统消息和最终答复不计入次数。
|
|
139
|
-
- 播报必须以“Microi吾码本次工作进度”开头,让用户明确知道这是【Microi吾码】规范;不得改成含义模糊的“当前进度”,也不得描述为 AI 自带功能。
|
|
140
|
-
- 每次播报必须同时包含四项快速估算:已完成进度百分比、预计还需要多长时间结束、目前大概已消耗多少 token、预计总共需要消耗多少 token。
|
|
141
|
-
- 预计剩余时间不足 60 分钟时使用分钟;达到 60 分钟后换算为“X小时Y分钟”;达到 24 小时后换算为“X天Y小时Z分钟”。为 0 的低位单位可以省略,禁止继续只显示累计分钟数。
|
|
142
|
-
- 进度、时间和 token 只需快速估算,不得为了提高估算精度中断主要工作,也不得声称这些数据来自平台精确计量。token 较多时可用 `k` 简写。
|
|
143
|
-
- 推荐使用紧凑格式:`Microi吾码本次工作进度:约 55%;预计还需 12 分钟;目前已消耗约 8k tokens;预计总计约 15k tokens。以上为快速估算。`
|
|
144
|
-
- 短任务若在不足 3 次工作过程记录时已经完成,不得为了凑次数拆分无意义消息;可直接在最终交付中简要汇总。
|
|
151
|
+
<!-- microi-progressive:chunk id=workspace-conventions-001 sha256=c3db79fb5f6f00a6ea619f7129f1e81259efe899256a5100f9c84a5b5dca58f4 -->
|
|
152
|
+
## Microi吾码工作进度播报规范(强制)
|
|
153
|
+
|
|
154
|
+
AI 在任何新建或已有对话中处理 Microi吾码任务并向用户输出工作过程记录时,必须默认执行本规范,无需用户再次提醒:
|
|
155
|
+
|
|
156
|
+
- 每累计输出 3-5 次面向用户的工作过程记录,根据任务复杂度和实际阶段选择合适时机,追加一次进度播报;首次播报不得晚于第 5 次工作过程记录。工具调用结果、系统消息和最终答复不计入次数。
|
|
157
|
+
- 播报必须以“Microi吾码本次工作进度”开头,让用户明确知道这是【Microi吾码】规范;不得改成含义模糊的“当前进度”,也不得描述为 AI 自带功能。
|
|
158
|
+
- 每次播报必须同时包含四项快速估算:已完成进度百分比、预计还需要多长时间结束、目前大概已消耗多少 token、预计总共需要消耗多少 token。
|
|
159
|
+
- 预计剩余时间不足 60 分钟时使用分钟;达到 60 分钟后换算为“X小时Y分钟”;达到 24 小时后换算为“X天Y小时Z分钟”。为 0 的低位单位可以省略,禁止继续只显示累计分钟数。
|
|
160
|
+
- 进度、时间和 token 只需快速估算,不得为了提高估算精度中断主要工作,也不得声称这些数据来自平台精确计量。token 较多时可用 `k` 简写。
|
|
161
|
+
- 推荐使用紧凑格式:`Microi吾码本次工作进度:约 55%;预计还需 12 分钟;目前已消耗约 8k tokens;预计总计约 15k tokens。以上为快速估算。`
|
|
162
|
+
- 短任务若在不足 3 次工作过程记录时已经完成,不得为了凑次数拆分无意义消息;可直接在最终交付中简要汇总。
|
|
145
163
|
<!-- /microi-progressive:chunk -->
|
|
146
164
|
|
|
147
165
|
## AI 编写代码的意图注释规范(强制)
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=workspace-conventions-039 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=workspace-conventions-039 sha256=4a24e3f7bd0244debb6efa82ea164265ab5841ccf97372af67ca16e0211bfe9c -->
|
|
6
6
|
## 本地测试程序与依赖生命周期(强制)
|
|
7
7
|
|
|
8
8
|
- 启动前盘点当前源码/Vite/API、数据库、Redis、MongoDB、MinIO、端口及其归属。健康且适用的开发/测试服务优先复用;已有服务不满足时,优先直接启动本地源码,或把本轮编译产物复制到任务隔离目录启动,避免锁住共享构建输出。登记实际源码、配置来源、PID、创建时间、工作目录和监听端口;不能启动另一份旧 DLL 冒充当前候选。
|
|
9
9
|
- 多节点 HTTP、并发和租户隔离测试优先使用多个本机吾码程序进程,连接同组已授权依赖;库、租户、Schema、Redis DB/Key 前缀和存储命名空间负责测试隔离。`fixture`、独立候选目录和 Full 不等于每个 AI 对话或节点都要创建一整套 Docker。复用仅限已授权开发/测试资源,不向生产业务库注入测试数据,也不对共享服务进行破坏性故障测试。
|
|
10
|
-
-
|
|
10
|
+
- 本地项目启动、平台测试和镜像发布冒烟默认读取 `Microi.Server/Microi.net.Api/.microi-local`,由其选择 `appsettings.<Environment>.json`,复用里面的 MySQL、Redis、MongoDB 以及该租户 SaaS 实际生效的 MinIO/OSS。用户明确指定远端 MCP 业务验证时才按该连接边界执行,不能自动借用其它 MCP 租户。先核实连接归属、版本、可用性和已授权测试范围;配置存在不构成写生产业务数据的授权。使用既有测试资源、独立记录/Key/对象前缀隔离,不新建租户或安装聊天应用,不清空共享 Redis、Bucket 或其它任务数据。
|
|
11
|
+
- 不创建或运行新的本地 MySQL、Redis、MongoDB、MinIO、API 或官网测试容器,也不构建一套仅用于测试的镜像替代项目配置。API 使用本机源码或最终加密 DLL 进程,官网使用现有服务或本机静态预览;正式发行镜像 build/push、静态制品校验仍按发布脚本执行。用户另行明确授权的专项例外须登记用途和清理器,普通测试/完整发布本身不授予例外。
|
|
11
12
|
- 固定夹具库名、Schema、Redis DB/Key、对象前缀或端口被其它任务占用时,先保持原资源不变,为本任务分配唯一名称并修正测试入口的配置传递。测试保护必须同时核验精确目标、任务归属标记及允许的操作范围;不能只删除固定名称断言、伪造归属或借用他人的标记来通过测试。共享服务上没有已授权的安全隔离范围时,记录具体缺口,不能向业务库写测试数据。
|
|
12
13
|
- 不要把“是否允许临时创建测试容器”作为常规确认步骤。固定名称/端口冲突、归属不一致、旧夹具已删除、脚本硬编码、本机无容器、Full 要求独立夹具或为了更方便清理,均不构成新建本地 MySQL、Redis、MongoDB、MinIO/HDFS 等容器的必要性。先修复可配置隔离、连接映射和清理能力,普通测试不另建 Docker/Compose 环境。
|
|
13
|
-
-
|
|
14
|
+
- 分阶段 Full 原生依赖桥由已冻结且通过私有 ACL/SHA 校验的凭据 profile 的 `nativeBridgePorts:{mysql,redis,mongo,scheduleRedis}` 声明四个独占 TCP 端口。省略时兼容历史端口;显式配置必须完整四项、有效整数且互不重复。同步修改已登记的测试连接映射、监听器和退出回执后重新冻结候选;继承的进程环境不得改写验收端口,该字段不进入生产 API 配置。
|
|
15
|
+
- 端口可配置不替代归属门禁:仍独立核对原协调器 PID、创建时间、父进程、CWD、可执行文件、命令行和精确四端口集合,Full 通过后仍验证双 API/Vite 已退出及原桥接进程继续存活。不得复用其它任务监听器或放宽检查来解决冲突。
|
|
16
|
+
- 现有配置无法满足特定协议/版本或服务级故障测试时,记录实际服务版本、不能复用的证据和已尝试方案,优先修复本机程序与配置。普通测试、完整发布及可逆操作的一般授权均不允许自行创建测试容器;只有用户另行明确授权的容器专项才可例外,并须限定资源、回环监听、精确归属与自动清理。用户明确禁止时不得用“迫不得已”绕过。
|
|
14
17
|
- 创建或借用前建立资源台账,区分既有、借用和本轮新建;容器登记完整 Id、任务标签、数据挂载及消费者,进程登记 PID、创建时间、命令入口、工作目录和后代。共享依赖有唯一协调者,消费者退出不删除其它任务仍在使用的服务,也不能把他人资源仅凭名称认领为本任务资源。既有共享开发服务必要重启后的替换进程继承共享身份,收尾时保持健康;任务专用实例仍须结束,不能改称“共享服务”来免除清理。
|
|
15
18
|
- 每轮验证成功、失败、超时、取消、异常或资源门限不足退出时,都立即执行收尾,不等整个功能交付完成。脚本用 `finally` 并处理可捕获的中断;启动到一半失败也回收已创建资源,外层监督程序退出时由已登记归属的清理器兜底。停止本轮自建 API/Vite/测试程序、watcher、浏览器及其子进程,以及获准新建的临时容器;不因“待续”长期保留运行资源。确需继续后台运行时,记录用户要求、负责人和有效期限。
|
|
16
19
|
- 清理前重验精确身份,正常停止后独立回读进程及后代已退出、监听/连接已消失、容器已停止或移除;只输出白名单状态,不回显口令、Env 或连接串。既有或借用的共享实例保持原状态,不按进程名全杀,不执行全局 Docker prune、WSL/Docker 重启或删全部编排。
|
|
@@ -36,7 +39,7 @@ Pop-Location
|
|
|
36
39
|
**本地后端自动重启要求(强制)**:本地联调需要启动或重启 `Microi.net.Api` 时,先执行 `node Microi.Server/tools/release-lock.mjs assert api <工作区根>`;API 锁存在时禁止启动或重启后端。PC、官网和 Agent 发布不阻塞 API 服务。无发布时先回读标准端口和 `/api/Diagnostics/liveness`,健康服务默认复用;只有本任务修改了需重载的后端代码、服务不健康或用户明确要求重启时,才可精确停止当前工作区的后端进程,然后在 `Microi.Server/Microi.net.Api` 目录执行 `dotnet run --launch-profile Microi.net.Api`。优先使用用户能在 VS Code 中看到和停止的终端(包含 VS Code 集成终端、VS Code 任务终端、用户明确允许的 VS Code 可追踪隐藏终端);如果当前工具没有 VS Code 终端能力,允许使用本机可见的 `cmd`/PowerShell 窗口启动,禁止使用脱离用户可见窗口的后台服务或守护进程。不要误杀数据库、Redis、Node 前端或其它业务进程。
|
|
37
40
|
|
|
38
41
|
<!-- /microi-progressive:chunk -->
|
|
39
|
-
<!-- microi-progressive:chunk id=workspace-conventions-025 sha256=
|
|
42
|
+
<!-- microi-progressive:chunk id=workspace-conventions-025 sha256=8a7a3437fbd43fa31d038d8f8c583e6145d4b68dce42faa290f142b5ff390a0b -->
|
|
40
43
|
## 多 AI 对话共享本地服务与发布互斥(强制)
|
|
41
44
|
|
|
42
45
|
同一工作区的 4、5 个 AI 对话共用同一份源码和固定端口时,`61500/61501` 是工作区级单例共享服务,不属于某个对话。端口相同意味着无法让每个对话拥有一套独立进程;正确模型是“复用健康服务 + 需要重载时串行重启 + 同范围发布时独占”,不能让每个对话都无条件先杀再启动。
|
|
@@ -45,7 +48,7 @@ Pop-Location
|
|
|
45
48
|
- 长期本地后端必须通过项目目录里的 `dotnet run --launch-profile Microi.net.Api` 使用开发输出。禁止把 `bin/Release/net10.0` 或 `bin/Release/publish` 的 `dotnet Microi.net.Api.dll` 当长期 E2E 服务;运行中的 Release DLL 会让后续 `dotnet build` 报 `MSB3021/MSB3027` 文件锁。
|
|
46
49
|
- 一键编译发布按所选产品创建 `.tmp/microi-process-state/api-release.lock`、`pc-release.lock`、`website-release.lock` 或 `agent-release.lock`。合并发布按固定顺序取得所需锁;任何一项占用时撤回本次已取得的锁。Windows 的 `PrepareRelease -ReleaseScope api|pc|all` 仅清理所选范围:API 处理本工作区后端与 Release DLL,PC 处理本工作区 Vite;官网不停止二者。身份不匹配时停止,不得按进程名全杀。
|
|
47
50
|
- Vite 子进程可能由相对 `node_modules/vite/bin/vite.js` 启动,父 npm/终端退出后命令行不再包含工作区绝对路径。Windows 进程管理器应先匹配命令行绝对路径;无法匹配时只读回读进程 CWD,只有 CWD 精确等于当前工作区 `Microi.Client` 且入口确为 Vite 才可结束。CWD 无法读取、属于其它目录或仅仅“父进程不存在”时必须失败关闭。
|
|
48
|
-
- API、PC、官网和 Agent 可以同时发布,同类发布互斥。旧 `platform-release.lock` 与 `release.lock` 仅在真实 PID 命令入口及共享状态目录证明属于 API 热修复或 Agent 时缩小阻塞范围;未知归属继续保守阻塞,禁止删除活跃旧锁。
|
|
51
|
+
- API、PC、官网和 Agent 可以同时发布,同类发布互斥。旧 `platform-release.lock` 与 `release.lock` 仅在真实 PID 命令入口及共享状态目录证明属于 API 热修复或 Agent 时缩小阻塞范围;未知归属继续保守阻塞,禁止删除活跃旧锁。PC/API 普通发布使用 PlatformRelease,Full 仅在明确选择深度测试时独立运行;.NET 输出放入本次结果目录的 `.net-artifacts`,并行任务使用独立结果目录及所需测试服务,普通发布不新建租户或安装聊天应用,也不运行 Microi Code/Agent 测试。共享版本号或跨产品源码必须先准备冻结,再启动并行发布,禁止测试期间改写候选。 macOS/Linux 的 Full apphost 仅允许当前工作区 `.tmp/microi-release-gate/日期-时间-PID/.net-artifacts/bin/Microi.net.Api/debug|release/Microi.net.Api` 的规范路径,且 CWD 必须精确等于 API 项目;任意外部输出、其它工作区或路径归一化差异继续失败关闭。
|
|
49
52
|
- 启动或重启 API 前检查 `assert api`,PC 前检查 `assert pc`;只有对应范围发布时等待或退出,官网/Agent 不阻塞共享服务。需要同时启动二者时分别检查两项;正常结束或中断由原进程和唯一令牌释放自身锁。
|
|
50
53
|
- Edge/Chrome 主浏览器、VS Code 持有的 Playwright Test Server、语言服务和 MCP Node 进程不属于发布文件锁清理范围。浏览器自动化必须关闭本用例创建的 context/browser;不得通过 `taskkill /IM chrome.exe|msedge.exe|node.exe|dotnet.exe` 清空整机进程。
|
|
51
54
|
- 人工盘点使用:`powershell -NoProfile -ExecutionPolicy Bypass -File Microi.Server/tools/Microi.LocalProcessManager.ps1 -Action Status`。需要单独停止当前工作区服务时使用 `-Action StopBackend` 或 `-Action StopFrontend`,不再让用户根据任务管理器猜进程。
|