ai-project-manage-cli 8.1.7 → 8.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/README.md +1 -1
- package/dist/index.js +209 -222
- package/dist/worker-script.js +134 -246
- package/package.json +1 -1
- package/template/AGENTS.webide.md +0 -28
- package/template/rules/webide_git_commit.md +0 -16
- package/template/rules/webide_merge.md +0 -24
- package/template/rules/webide_package.md +0 -70
- package/template/rules/webide_reply.md +0 -18
- package/template/rules/webide_sql_change.md +0 -28
- package/template/rules/webide_sql_execute.md +0 -29
- package/template/rules/webide_terminal.md +0 -45
- package/template/rules/webide_testcase.md +0 -47
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
## WebIDE 合并规范
|
|
2
|
-
|
|
3
|
-
适用场景:WebIDE 验收通过(`accept` / `request-accept`)后,先落库验收清单,再合并本任务 PR。
|
|
4
|
-
|
|
5
|
-
### 目标
|
|
6
|
-
|
|
7
|
-
1. 留下一份可事后查阅的「验收清单」(描述本任务实际改了什么)。
|
|
8
|
-
2. 将各仓库特性分支上的变更合并进基线分支(通常为 `main`)。
|
|
9
|
-
|
|
10
|
-
### 步骤
|
|
11
|
-
|
|
12
|
-
1. **先写验收清单**:调用一次 `UpsertWebIdeChecklist`,提交完整 Markdown 全文(不要只提交 diff)。若需对照已有清单,可先 `GetWebIdeChecklist`(传当前 `taskId`)。建议结构:
|
|
13
|
-
- 改动摘要
|
|
14
|
-
- 按仓库的改动范围
|
|
15
|
-
- 关键改动点(模块 / 文件 / 接口 / 页面)
|
|
16
|
-
- 如何验收 / 回归点
|
|
17
|
-
- 备注(已知限制、未做事项、SQL/配置;无则写「无」)
|
|
18
|
-
2. 调用一次 `MergeWebIdePullRequests`(`confirmedConflictFree=true`),由平台合并本任务全部 OPEN PR。
|
|
19
|
-
3. 用 `AppendMessage` 汇总:清单已落库 + 合并结果(PR 编号、仓库)。
|
|
20
|
-
|
|
21
|
-
### 禁止
|
|
22
|
-
|
|
23
|
-
- **禁止**跳过 `UpsertWebIdeChecklist` 直接合并
|
|
24
|
-
- 在合并之外自行执行同步基线、代码审核、部署等额外流程
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
## WebIDE 项目打包(webide-package)
|
|
2
|
-
|
|
3
|
-
适用:独立打包 Agent(不 resume 任务对话)。只打 payload 指定的 **一个** target(`frontend` / `backend`)。
|
|
4
|
-
|
|
5
|
-
产物最终由 CLI 上传 MinIO;本地**只**使用临时目录,不要写 `/data/artifacts/` 持久路径。
|
|
6
|
-
|
|
7
|
-
### 开始前
|
|
8
|
-
|
|
9
|
-
1. Read 本规则全文。
|
|
10
|
-
2. Read `.apm/project/<项目ID>/` 下 path/文件名含 `deploy` 的文档(先 manifest,再全文)。命令与仓路径**只**来自文档,禁止猜测。
|
|
11
|
-
3. Read `.apm/workspace-repos.json`,按多仓清单定位本轮要打的前端/后端仓库路径。
|
|
12
|
-
|
|
13
|
-
### 通用硬性约束
|
|
14
|
-
|
|
15
|
-
- **禁止**修改业务代码、提交 Git、创建 PR。
|
|
16
|
-
- **禁止**为修依赖或修编译错误而改代码 / 装依赖 / 改 lockfile;构建失败 → 以错误结束。
|
|
17
|
-
- **禁止**在仓库工作区内留下交付用 zip。
|
|
18
|
-
- 临时目录统一用:`/data/package-tmp/<packageId>/`(不要用 `/tmp`,不要用 `/data/artifacts/`)。
|
|
19
|
-
- 后端交付 jar 的路径与文件名**只**来自 deploy 文档;禁止在本规则中写死具体项目的 jar 清单。
|
|
20
|
-
|
|
21
|
-
### target=frontend(Vue)
|
|
22
|
-
|
|
23
|
-
1. 按 deploy 文档进入前端目录。
|
|
24
|
-
2. **不要**执行 `npm i` / `pnpm i` 等;分支切换后依赖已就绪。
|
|
25
|
-
3. 执行文档中的打包命令(通常 `npm run build`)。
|
|
26
|
-
4. 确认产出 `dist/`(或文档写明的目录)。
|
|
27
|
-
5. 在临时目录压缩(勿在工作区生成 `dist.zip`),落到:
|
|
28
|
-
|
|
29
|
-
`/data/package-tmp/<packageId>/dist.zip`
|
|
30
|
-
|
|
31
|
-
**压缩结构(必须)**:zip 内顶层就是名为 `dist` 的目录,解压后得到 `dist/…`,**禁止**出现 `dist/dist/…`。
|
|
32
|
-
|
|
33
|
-
- 正确:在**含有 `dist` 的父目录**执行,例如
|
|
34
|
-
`mkdir -p /data/package-tmp/<packageId> && zip -r /data/package-tmp/<packageId>/dist.zip dist`
|
|
35
|
-
(把目录名 `dist` 打进包,不要先 `cd dist` 再压当前目录)。
|
|
36
|
-
- 错误:`cd dist && zip -r … .`(解压后没有顶层 `dist`);或把整个前端仓/多套一层 `dist` 再压(解压成 `dist/dist`)。
|
|
37
|
-
|
|
38
|
-
6. 缺产物或构建失败 → 调用 **SetPackageFailed**(传入失败原因)后结束。
|
|
39
|
-
|
|
40
|
-
### target=backend(SpringBoot)
|
|
41
|
-
|
|
42
|
-
1. 按 deploy 文档进入后端目录,执行文档写明的构建命令(通常 `mvn clean package`)。
|
|
43
|
-
2. **只**收集 deploy 文档标明的交付 jar(路径/文件名/glob 以文档为准)。**禁止**全量收集 `target/lib`、**禁止**把 SQL 打进 jars.zip、**禁止**在规则或命令里写死具体 jar 名。
|
|
44
|
-
3. 确认文档列出的每个 jar 均已生成;缺任一文件 → SetPackageFailed。
|
|
45
|
-
4. 在临时目录将上述 jar **打成一个 zip**(勿在工作区生成交付 zip),落到:
|
|
46
|
-
|
|
47
|
-
`/data/package-tmp/<packageId>/jars.zip`
|
|
48
|
-
|
|
49
|
-
**压缩结构(必须)**:zip 内顶层直接是各个 `.jar` 文件(解压后同级列出 jar),**禁止**多套一层无意义目录,也禁止把整个 `lib` 目录原样打进包。
|
|
50
|
-
|
|
51
|
-
示例(路径与文件列表须来自 deploy,勿照抄本例文件名):
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
mkdir -p /data/package-tmp/<packageId>/jars
|
|
55
|
-
# 按 deploy 文档把待交付 jar 拷到临时目录后:
|
|
56
|
-
cd /data/package-tmp/<packageId>/jars
|
|
57
|
-
zip /data/package-tmp/<packageId>/jars.zip ./*.jar
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
5. **SQL 镜像上传**(deploy 打包章节写有「SQL脚本目录」时必须做;无则跳过):
|
|
61
|
-
- 从「进入 `xxx` 目录」取 `repo`(如 `mmis-java`)
|
|
62
|
-
- 从「SQL脚本目录」取相对路径(去掉末尾 `/**/*.sql`),拼成工作区内 **绝对路径** `localDir`
|
|
63
|
-
- 调用 **UploadPackageSql**(`repo` + `localDir`);工具会同步该目录下全部 `**/*.sql` 到 MinIO `packages/{projectId}/{repo}/...`
|
|
64
|
-
- **禁止**猜测路径;**禁止**把 SQL 打进 jars.zip
|
|
65
|
-
6. 构建或落盘失败 → 调用 **SetPackageFailed**(传入失败原因)后结束。
|
|
66
|
-
|
|
67
|
-
### 结束
|
|
68
|
-
|
|
69
|
-
- 成功:确认 zip 已落到 `/data/package-tmp/<packageId>/` 约定文件名后正常结束(不要调用 SetPackageFailed)。CLI 会上传 MinIO 并清理该临时目录。
|
|
70
|
-
- 失败:先调用 SetPackageFailed 写入原因,再结束。
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
## WebIDE 输出通道
|
|
2
|
-
|
|
3
|
-
适用:WebIDE 任务(`webide-message` / 本轮 prompt 含 `taskId` + `action`)。
|
|
4
|
-
|
|
5
|
-
### 分工
|
|
6
|
-
|
|
7
|
-
1. **用户可见内容 → 只走 `AppendMessage`**
|
|
8
|
-
进展、评估结论、改动说明、错误原因、下一步等,一律用 `AppendMessage` 写入(可多次追加)。
|
|
9
|
-
|
|
10
|
-
2. **最终自然语言回复(非工具调用的收尾文本)→ 极简**
|
|
11
|
-
最多 1 句状态确认,例如「本轮已完成」或「本轮已阻塞:…」。
|
|
12
|
-
**禁止**复述、扩写或总结 `AppendMessage` 已写内容;**禁止**再列改动清单、步骤回放或长篇收尾。
|
|
13
|
-
|
|
14
|
-
3. 本轮若已调用过 `AppendMessage`,最终回复不要重复其要点。
|
|
15
|
-
|
|
16
|
-
### 为何
|
|
17
|
-
|
|
18
|
-
对话面板只展示 `AppendMessage`;最终 assistant 文本会进执行日志并触发同步,重复总结既无助于用户,又增加耗时。
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
## WebIDE 数据表 / SQL 变更提示
|
|
2
|
-
|
|
3
|
-
适用场景:WebIDE 开发(`skip-plan` / `start-develop`)与修码(`fix-and-retest` / `report-defect`)。
|
|
4
|
-
|
|
5
|
-
### 何时必须提示
|
|
6
|
-
|
|
7
|
-
本轮若涉及任一情况,结束前的 **AppendMessage 必须单独醒目提示**:
|
|
8
|
-
|
|
9
|
-
- 数据表结构变更(建表、改字段、删字段、索引、约束等)
|
|
10
|
-
- 需在目标库执行的 SQL(DDL / DML、数据修复脚本)
|
|
11
|
-
- 后端新增或修改了 migration、Mapper/XML、手写 SQL 脚本等可落地的 SQL 产物
|
|
12
|
-
|
|
13
|
-
### AppendMessage 怎么写
|
|
14
|
-
|
|
15
|
-
在回复中增加小节(标题可用「数据表 / SQL 变更」),至少包含:
|
|
16
|
-
|
|
17
|
-
1. **涉及表**:表名列表与变更类型(如新增列、建表)
|
|
18
|
-
2. **SQL 产物路径**:仓库内相关文件路径(**必填**;完整、可 Read;多仓写明仓库)
|
|
19
|
-
3. **待执行 SQL**:完整、可复制的语句预览,放在 ` ```sql ` 代码块中,按执行顺序列出;禁止用 `...` 省略表名/字段名(预览仅供人看,执行时以产物文件为准)
|
|
20
|
-
4. **执行提醒**:请在目标环境数据库执行;可点 SQL 块上的「执行」由助手连库执行
|
|
21
|
-
|
|
22
|
-
**禁止**写 Flyway、「若启动已自动迁移可跳过」或同类表述。
|
|
23
|
-
|
|
24
|
-
多仓时注明 SQL 属于哪个仓库(如后端仓)。
|
|
25
|
-
|
|
26
|
-
### 无变更时
|
|
27
|
-
|
|
28
|
-
未触及数据表与 SQL 时,**不要**硬凑该小节。
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
## WebIDE 执行 SQL(execute-sql 轮次)
|
|
2
|
-
|
|
3
|
-
适用场景:用户在手工测试阶段点击消息里 SQL 块的「执行」。
|
|
4
|
-
|
|
5
|
-
### 本轮目标
|
|
6
|
-
|
|
7
|
-
1. 根据你**此前开发轮次**在 AppendMessage 里写明的 **SQL 产物路径**,定位工作区内的文件(可用 Read / Glob 确认)。
|
|
8
|
-
2. 从 deploy 文档、`application.yml` / `.env` 等推断 MySQL 连接信息(**禁止瞎猜密码**)。
|
|
9
|
-
3. 调用 **MysqlExecute**,传入连接参数,以及产物文件的 **绝对路径**(`path`)。**不要**把 SQL 全文作为工具参数。
|
|
10
|
-
4. 用 **AppendMessage** 汇总执行结果(成功/失败、影响行、必要时的校验说明)。
|
|
11
|
-
|
|
12
|
-
### MysqlExecute 参数
|
|
13
|
-
|
|
14
|
-
- `host` / `port` / `user` / `password` / `database`
|
|
15
|
-
- `path`:SQL 产物在磁盘上的 **绝对路径**(须在当前工作区内)。CLI 自行读文件并执行多语句脚本。
|
|
16
|
-
|
|
17
|
-
### 硬性约束
|
|
18
|
-
|
|
19
|
-
- **禁止**把 SQL 正文塞进工具参数;由 CLI 读 `path` 指向的文件。
|
|
20
|
-
- **禁止**使用对话里 SQL 预览正文代替文件内容。
|
|
21
|
-
- **禁止**改代码、Git 提交、启动 dev 服务。
|
|
22
|
-
- 密码不得写入 AppendMessage。
|
|
23
|
-
- 找不到产物文件或路径在工作区外 → AppendMessage 说明原因并以错误结束。
|
|
24
|
-
|
|
25
|
-
### 连接信息来源
|
|
26
|
-
|
|
27
|
-
1. Read `.apm/project/<项目ID>/` 下文件名或路径包含 `deploy` 的文档。
|
|
28
|
-
2. 若无,Glob 工作区内 `application*.yml` / `.env*` 等配置文件。
|
|
29
|
-
3. 仍无法确定 → 不要猜测,AppendMessage 说明缺少连接配置。
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# WebIDE 长驻终端
|
|
2
|
-
|
|
3
|
-
长驻进程(如前后端 `dev`)必须用 MCP `pty-session` 管理,**禁止**用 Shell 启动会长期占用的 dev server。
|
|
4
|
-
|
|
5
|
-
会话与 WebIDE「终端」面板共用同一套 `pty-session-mcp serve`。工具名:`create` / `write` / `read` / `resize` / `kill` / `list`。
|
|
6
|
-
|
|
7
|
-
本地服务由用户在顶栏「启动项目」触发,或在进入手工测试时由启动指令触发(独立 Agent)。**开发/修码任务不要自行起或重启长驻进程**。
|
|
8
|
-
|
|
9
|
-
## 工具
|
|
10
|
-
|
|
11
|
-
- `list`:列出当前仍存活的 PTY。用返回的 `name` 识别服务(如 `frontend` / `backend` / `mobile`)。
|
|
12
|
-
- `create`:`{ cwd, name, command?, args? }`
|
|
13
|
-
- `name` 用稳定 key(`frontend` / `backend` / `mobile`)
|
|
14
|
-
- 需要跑 shell 命令时:先 `create({ cwd, name })` 打开默认 shell,再 `write({ id, data: "<命令>" })`(`submit` 默认 true,会补换行)
|
|
15
|
-
- `command` 只能是可执行文件,不能是整句 shell(如不要把 `pnpm dev` 塞进 `command`)
|
|
16
|
-
- `write`:往会话写命令或输入
|
|
17
|
-
- `read`:`{ id, waitMs }` 轮询输出,直到出现就绪日志 / 端口
|
|
18
|
-
- `kill`:`{ id }` 结束该会话。只杀目标 `name`,不要误杀其它端
|
|
19
|
-
|
|
20
|
-
## 启动命令来源
|
|
21
|
-
|
|
22
|
-
必须在 `.apm/project/<项目ID>/` 下找到 **文件名或路径包含 deploy** 的文档(不必恰好叫 `deploy.md`,例如 `deploy前端.md`、`deploy/医务系统.md`)。完整目录以本轮 prompt 给出的项目 ID 为准,勿省略。
|
|
23
|
-
|
|
24
|
-
1. 先 Read 该目录的 `manifest.json`,从 `documents[].path` 里挑包含 deploy 的条目,再 Read 该文件。
|
|
25
|
-
2. 没有 manifest 时 Glob `**/*deploy*`。
|
|
26
|
-
3. 按文档中的 cwd / command / 服务划分创建会话。
|
|
27
|
-
4. 文档不存在或未写明启动方式 → 结束任务,**禁止猜测命令**。
|
|
28
|
-
|
|
29
|
-
## 时机(顶栏启动 / 重启 / 进入手工测试)
|
|
30
|
-
|
|
31
|
-
固定顺序:
|
|
32
|
-
|
|
33
|
-
1. **`list`**
|
|
34
|
-
2. 顶栏启动:无对应 `name` 的活会话 → 按部署文档 `create` + `write`;已有同名活会话则结束,不重起
|
|
35
|
-
3. 顶栏重启:先 `kill` 目标 `name`,再按部署文档 `create` + `write`(不要杀掉其它端)
|
|
36
|
-
4. 进入手工测试:文档写明的每一端,无对应 `name` 则启动;**已有同名活会话则重启**(只 kill 该 name,再 `create` + `write`)
|
|
37
|
-
5. `read` 等待就绪日志 / 端口即可
|
|
38
|
-
|
|
39
|
-
用户在「终端」面板看日志,在「浏览器」面板看远程主机外网地址。
|
|
40
|
-
|
|
41
|
-
## 规范
|
|
42
|
-
|
|
43
|
-
1. 禁止用 Shell / 后台进程方式起 `dev` / `serve` 等长驻命令。
|
|
44
|
-
2. 观察日志请用户看 WebIDE「终端」面板;页面请用户看「浏览器」面板(远程主机外网地址)。
|
|
45
|
-
3. 不再需要时可 kill;不要留下孤儿进程。
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
## WebIDE 测试用例编写规范
|
|
2
|
-
|
|
3
|
-
适用场景:WebIDE `generate-cases` 阶段,根据任务需求与本地代码改动生成自动化测试用例。
|
|
4
|
-
|
|
5
|
-
### 产出方式
|
|
6
|
-
|
|
7
|
-
1. 仅在当前工作区 cwd 内阅读/搜索代码,不要访问工作区外路径。
|
|
8
|
-
2. 用中文经 `AppendMessage` 简要说明用例覆盖范围。
|
|
9
|
-
3. **必须**调用 `UpsertWebIdeTestCases`,一次提交完整用例列表;工具会写入平台并进入待测阶段。
|
|
10
|
-
4. 不要只在对话里列出用例而不调用工具。
|
|
11
|
-
|
|
12
|
-
### 用例字段
|
|
13
|
-
|
|
14
|
-
每条用例包含:
|
|
15
|
-
|
|
16
|
-
| 字段 | 要求 |
|
|
17
|
-
| ------------- | ---------------------------------------------------------------- |
|
|
18
|
-
| `name` | 简短稳定的用例标识,可用中文或英文短句,避免空泛(如「测试 1」) |
|
|
19
|
-
| `description` | 说明本用例验证什么(中文),一两句即可 |
|
|
20
|
-
| `steps` | 有序、可执行的步骤数组;每步一句,写清操作与预期结果 |
|
|
21
|
-
| `sortOrder` | 可选,展示顺序(从 0 起) |
|
|
22
|
-
|
|
23
|
-
### 编写原则
|
|
24
|
-
|
|
25
|
-
1. **对齐需求与改动**:覆盖本任务实现的核心路径;对照本地 diff / 关键代码,不要凭空编造未实现的功能。
|
|
26
|
-
2. **主路径优先**:至少覆盖成功主流程;再按风险补边界、校验失败、权限拒绝等必要负面场景。
|
|
27
|
-
3. **步骤可执行**:步骤应能被人或自动化按字面执行(打开哪页、点哪个按钮、输入什么、看到什么),禁止「验证功能正常」这类空话。
|
|
28
|
-
4. **一条一焦点**:每条用例聚焦一个可验收点,不要把无关场景塞进同一步骤列表。
|
|
29
|
-
5. **适量即可**:宁缺毋滥;通常数条到十余条足够,避免大量重复或琐碎用例。
|
|
30
|
-
|
|
31
|
-
### 调用示例
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
UpsertWebIdeTestCases({
|
|
35
|
-
cases: [
|
|
36
|
-
{
|
|
37
|
-
name: "登录成功进入首页",
|
|
38
|
-
description: "使用合法账号密码登录后应进入系统首页",
|
|
39
|
-
steps: [
|
|
40
|
-
"打开登录页",
|
|
41
|
-
"输入正确的用户名与密码,点击登录",
|
|
42
|
-
"应跳转到首页,并显示当前用户名"
|
|
43
|
-
]
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
})
|
|
47
|
-
```
|