@comate/zulu 1.5.0 → 1.5.1
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/comate-engine/assets/skills/{automation-browser → browser-use}/SKILL.md +1 -1
- package/comate-engine/assets/skills/code-security/SKILL.md +1 -1
- package/comate-engine/assets/skills/code-security/references/vul_repair_sensitive.md +103 -16
- package/comate-engine/assets/skills/create-automation/SKILL.md +185 -222
- package/comate-engine/assets/skills/figma2code/SKILL.md +8 -4
- package/comate-engine/assets/skills/icode/references/feature/submit-cr.md +1 -1
- package/comate-engine/assets/skills/icode/scripts/build_git_commit_payload.py +19 -1
- package/comate-engine/package.json +1 -1
- package/comate-engine/server.js +40 -34
- package/dist/bundle/index.js +4 -4
- package/package.json +1 -1
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: create-automation
|
|
3
3
|
description: |
|
|
4
4
|
帮助用户创建、配置和管理 Comate Automation 自动化任务。当用户表达以下意图时触发:
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
- 配置 webhook
|
|
5
|
+
- 创建、设置、新建自动化任务、定时任务或 cron 任务
|
|
6
|
+
- 修改、删除、查看已有的 Automation 配置
|
|
7
|
+
- “每天/每周/每月自动帮我做……”
|
|
8
|
+
- 配置 webhook 或事件触发任务
|
|
9
9
|
不适用于普通的一次性任务请求,仅适用于需要周期性或事件驱动执行的自动化配置。
|
|
10
10
|
metadata:
|
|
11
11
|
enableWhen:
|
|
@@ -14,330 +14,293 @@ disable-model-invocation: true
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# create-automation Skill
|
|
17
|
-
你正在帮助用户创建或管理 Comate Automation 自动化任务。本 Skill 的核心目标是**根据用户的具体需求,量身定制 AUTOMATION.md 的 query**,而不是套用固定流程模板。
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
**当前版本仅支持 cron 定时触发。不支持 webhook、GitHub Events、Slack、POST 请求或任何外部事件触发。**
|
|
18
|
+
你正在帮助用户创建或管理 Comate Automation 自动化任务。核心目标是根据用户的具体需求,量身定制 `AUTOMATION.md` 的 query,而不是套用固定流程模板。
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
当前 MVP 版本只有一个硬性限制:**仅支持 cron 定时触发**。不支持 webhook、GitHub Events、Slack、POST 请求或任何外部事件触发。用户提出非定时触发方式时,先说明当前版本暂不支持,再建议用 cron 定时轮询替代,例如“每 5 分钟检查一次部署状态”。不要创建 webhook 或 event 类型配置,即使格式上能写,系统也不会执行。
|
|
23
21
|
|
|
24
|
-
1. **立即告知**:明确说明当前 MVP 版本不支持该触发方式
|
|
25
|
-
2. **引导替代方案**:建议用 cron 定时轮询作为替代(例如"每 5 分钟检查一次部署状态")
|
|
26
|
-
3. **不要直接创建 webhook/event 类型的配置**——即使你知道 AUTOMATION.md 格式上可以写 `type: webhook`,当前系统也不会执行它
|
|
27
|
-
|
|
28
|
-
> 这是硬性限制,不是建议。违反此规则创建的任务不会被系统执行,会浪费用户的时间。
|
|
29
22
|
---
|
|
30
23
|
|
|
31
24
|
## Available Models
|
|
32
25
|
|
|
33
|
-
自动化任务的执行 Agent 可通过 `execution.model`
|
|
26
|
+
自动化任务的执行 Agent 可通过 `execution.model` 字段指定模型。该字段可选,合法取值如下:
|
|
34
27
|
|
|
35
|
-
- 省略 `model`
|
|
36
|
-
-
|
|
28
|
+
- 省略 `model` 字段:使用系统默认模型,通常为系统临时路由模型。
|
|
29
|
+
- 使用下方列表中的精确模型名,包括带 `-Thinking` 后缀的变体。
|
|
37
30
|
|
|
38
31
|
${COMATE_AVAILABLE_MODELS}
|
|
39
32
|
|
|
40
|
-
带 `-Thinking`
|
|
33
|
+
带 `-Thinking` 后缀的模型支持扩展思考/推理模式。无法识别的模型名会回退到系统默认。写入 `execution.model` 时,必须逐字符匹配上方列表中的名称,包括大小写、空格和连字符;不要凭印象写“Claude 4”或“GPT-5”。
|
|
41
34
|
|
|
42
|
-
|
|
35
|
+
---
|
|
43
36
|
|
|
44
37
|
## AUTOMATION.md 格式
|
|
45
|
-
每个任务存放在 `~/.comate/automations/{taskName}/AUTOMATION.md`。
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
每个任务存放在 `~/.comate/automations/{taskName}/AUTOMATION.md`,采用 **YAML frontmatter + Markdown body** 格式:
|
|
48
40
|
|
|
49
|
-
|
|
50
|
-
|
|
41
|
+
- frontmatter:调度与执行配置。
|
|
42
|
+
- body:发给执行 Agent 的 query 指令,必须自包含。
|
|
51
43
|
|
|
44
|
+
### 基本格式
|
|
45
|
+
|
|
46
|
+
```md
|
|
52
47
|
---
|
|
53
|
-
name: "task-name"
|
|
54
|
-
description: "任务描述"
|
|
48
|
+
name: "task-name" # kebab-case,与目录名一致
|
|
49
|
+
description: "任务描述" # 可选,非空字符串
|
|
55
50
|
enabled: true
|
|
56
51
|
|
|
57
52
|
triggers:
|
|
58
53
|
- type: schedule
|
|
59
54
|
schedule:
|
|
60
|
-
cron: "
|
|
61
|
-
timezone: "Asia/Shanghai"
|
|
55
|
+
cron: "3 9 * * 1-5" # 5 字段:分 时 日 月 周
|
|
56
|
+
timezone: "Asia/Shanghai" # 可选,IANA 时区,默认系统时区
|
|
62
57
|
|
|
63
58
|
execution:
|
|
64
|
-
workspace: "/absolute/path/to/project" #
|
|
65
|
-
model: "Claude Sonnet 4.5"
|
|
66
|
-
timeoutSeconds: 3600
|
|
67
|
-
|
|
59
|
+
workspace: "/absolute/path/to/project" # 必填,绝对路径。默认且应当为当前提问项目的 workspace
|
|
60
|
+
model: "Claude Sonnet 4.5-Thinking" # 可选;复杂任务优先选最新 + Thinking
|
|
61
|
+
timeoutSeconds: 3600 # 可选,默认 3600,上限 7200
|
|
68
62
|
---
|
|
69
63
|
|
|
70
64
|
这里写任务指令(query)。必须自包含,包含所有必要上下文。
|
|
71
|
-
|
|
72
65
|
```
|
|
73
|
-
|
|
66
|
+
|
|
67
|
+
> MVP 版本仅支持一个 `schedule` trigger。Webhook、GitHub、Slack 等外部事件触发将在后续版本支持。
|
|
68
|
+
|
|
74
69
|
---
|
|
75
70
|
|
|
76
71
|
## 执行 Agent 的能力与约束
|
|
77
|
-
AUTOMATION.md 的 body(query)会被一个独立的 Comate Agent Session 执行。设计 query 时需了解该 Agent 的运行环境:
|
|
78
72
|
|
|
79
|
-
|
|
73
|
+
`AUTOMATION.md` 的 body 会被一个独立的 Comate Agent Session 执行。设计 query 时,按无人值守任务处理。
|
|
80
74
|
|
|
81
|
-
|
|
82
|
-
* 这意味着:用户在当前项目中配置的所有 Rules(如 `.comate/rules/` 下的规则)和 Skills 在 Automation Session 中同样生效
|
|
83
|
-
* 可以读写文件、执行终端命令、搜索代码、调用网络等
|
|
84
|
-
* 运行在 **YOLO 模式**(权限全开):所有工具调用和命令执行均自动批准,不弹确认
|
|
75
|
+
### Agent 具备的能力
|
|
85
76
|
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
- 与当前用户的 Comate 环境一致:拥有相同的 Skills、Rules、Tools。
|
|
78
|
+
- 可以读写文件、执行终端命令、搜索代码、调用网络等。
|
|
79
|
+
- 运行在 YOLO 模式:所有工具调用和命令执行自动批准,不弹确认。
|
|
80
|
+
- 通过 Unattended Prompt 知道自己是无人值守自动化 Session,也知道触发类型、时间、workspace、Git 状态等元信息。
|
|
88
81
|
|
|
89
|
-
|
|
82
|
+
### Agent 不具备的能力
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
- 没有本次对话历史;每次 run 都是全新 Session。
|
|
85
|
+
- 不会主动提问或等待用户输入;提问会导致 stall 直至超时。
|
|
86
|
+
- 没有跨 run 记忆;每次执行互相独立。
|
|
92
87
|
|
|
93
|
-
|
|
94
|
-
* 涉及 push 的任务,query 中应限定目标分支(如"只 push 到 automation/{task-name} 分支,禁止 push 到 main/master")
|
|
95
|
-
* 涉及 force push、reset --hard、rebase 等不可逆 Git 操作时,必须在展示配置阶段向用户明确提醒风险
|
|
88
|
+
因此,query 必须是**自包含的完整指令**:路径、分支、环境、步骤、边界条件、成功标准都要写清楚,不能依赖“Agent 应该知道”的隐含假设。
|
|
96
89
|
|
|
97
|
-
|
|
90
|
+
### 无人值守安全原则
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
* 除非任务目标就是删除文件,否则 query 中应写明"不要删除项目中已有的文件"
|
|
101
|
-
* 禁止在 query 中让 Agent 执行 `rm -rf`、`drop database`、修改系统配置等破坏性命令,除非这正是用户要求的操作
|
|
92
|
+
YOLO 模式 + 无人值守意味着 query 是唯一安全边界。设计 query 时遵循最小权限原则:只开放任务明确需要的操作,对其他操作设置显式禁止。
|
|
102
93
|
|
|
103
|
-
|
|
94
|
+
- **Git 操作**:除非用户明确要求 push,否则写明“不要 push 任何代码”。涉及 push 时,必须限定目标分支;涉及 force push、`reset --hard`、rebase 等不可逆操作时,创建前明确提醒风险。
|
|
95
|
+
- **文件/系统操作**:默认限定操作范围在 workspace 内。除非任务目标就是删除文件,否则写明“不要删除项目中已有的文件”。不要让 Agent 执行 `rm -rf`、`drop database`、修改系统配置等破坏性命令,除非这正是用户明确要求的操作。
|
|
96
|
+
- **网络/外部服务**:除非任务涉及部署、发布或 API 调用,否则写明“不要向外部服务发送数据、不要执行部署操作”。涉及 API 调用时,限定可调用的 endpoint 范围。
|
|
104
97
|
|
|
105
|
-
|
|
106
|
-
* 涉及 API 调用的任务,query 中应限定可调用的 endpoint 范围
|
|
98
|
+
安全护栏不要“禁止一切”,而是根据任务精确开放必要权限。例如“每天跑 `npm test`”不需要 push 权限;“自动修复并 push”需要 push,但必须限定分支。
|
|
107
99
|
|
|
108
|
-
|
|
100
|
+
### 引用 Skills 和 Rules
|
|
109
101
|
|
|
110
|
-
|
|
102
|
+
执行 Agent 加载的 Skills/Rules 与目标 workspace 一致。
|
|
111
103
|
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
- workspace 不变时,可直接在 query 中写 Skill 名称或 Rule 文件名,例如:
|
|
105
|
+
- `使用 code-security skill 扫描项目安全漏洞`
|
|
106
|
+
- `遵循 code-style.mdr 中的代码规范`
|
|
107
|
+
- workspace 指向不同项目时,执行 Agent 加载目标项目的配置。如需引用当前项目中的 Skill/Rule,应使用绝对路径。
|
|
108
|
+
- `.comate/rules/` 下的规则会自动加载,大多数情况下无需显式引用;需要强调时提及文件名即可。
|
|
114
109
|
|
|
115
|
-
|
|
110
|
+
---
|
|
116
111
|
|
|
117
|
-
|
|
118
|
-
* 不会主动提问或等待用户输入(提问会导致 stall 直至超时)
|
|
119
|
-
* 没有跨 run 的记忆(每次执行互相独立)
|
|
112
|
+
## 策略模板库
|
|
120
113
|
|
|
121
|
-
|
|
114
|
+
本 Skill 附带一组策略模板,存放在 `references/` 目录下。模板不是固定流程,只在任务需要时读取,用于为中等和复杂任务定制更高质量的 query。
|
|
122
115
|
|
|
123
|
-
###
|
|
124
|
-
执行 Agent 加载的 Skills/Rules 与当前用户环境一致。**如果 workspace 路径不变**,query 中直接写 Skill 名称或 Rule 文件名即可,Agent 会自动识别:
|
|
116
|
+
### 模板选择
|
|
125
117
|
|
|
126
|
-
|
|
127
|
-
* `遵循 code-style.mdr 中的代码规范`
|
|
118
|
+
横切策略可按需叠加:
|
|
128
119
|
|
|
129
|
-
|
|
120
|
+
| 模板文件 | 覆盖内容 | 何时读取 |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| `references/env_setup.md` | 运行时激活、环境变量、依赖安装、非交互式约束 | 任务依赖特定运行时或环境变量时 |
|
|
123
|
+
| `references/git_operations.md` | 拉代码、分支管理、提交、push | 任务涉及 Git 操作时 |
|
|
124
|
+
| `references/long_running_task.md` | 超时管理、分步执行、幂等性、错误处理、自主排障 | 任务步骤多或预期耗时长时 |
|
|
130
125
|
|
|
131
|
-
|
|
132
|
-
* Rule 路径在项目的 `.comate/rules/` 下查找
|
|
126
|
+
领域参考通常只选一个:
|
|
133
127
|
|
|
134
|
-
|
|
128
|
+
| 模板文件 | 覆盖内容 | 何时读取 |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| `references/testing_strategy.md` | 成功标准、测试类型选择、失败处理、证据收集 | 任务核心目标是验证代码正确性时 |
|
|
131
|
+
| `references/frontend_dev.md` | 前端构建验证、lint/类型检查、无 GUI 限制 | 任务涉及前端代码修改或质量检查时 |
|
|
132
|
+
| `references/backend_dev.md` | 服务依赖、数据库迁移、API 测试、进程管理 | 任务涉及后端代码修改或后端运维时 |
|
|
135
133
|
|
|
136
|
-
|
|
134
|
+
使用规则:
|
|
137
135
|
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
- 简单任务(单条命令即可完成)不读模板。
|
|
137
|
+
- 2-3 个步骤、逻辑清晰的任务,按需读取 1-2 个模板并提取要点。
|
|
138
|
+
- 多步骤端到端流程,组合读取相关模板,优先参考 `long_running_task.md`。
|
|
139
|
+
- 如果模板整体适用且无需适配,可在 query 中引用模板绝对路径;不要使用 `{skill_dir}` 变量,因为执行 Agent 无法解析。
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
**第一类:横切策略(按需叠加,任何类型任务都可能用到)**
|
|
141
|
+
---
|
|
143
142
|
|
|
144
|
-
|
|
145
|
-
|-|-|-|
|
|
146
|
-
|`references/env_setup.md`|运行时激活、环境变量、依赖安装、非交互式约束|任务依赖特定运行时或环境变量时|
|
|
147
|
-
|`references/git_operations.md`|拉代码、分支管理、提交、push|任务涉及 Git 操作时|
|
|
148
|
-
|`references/long_running_task.md`|超时管理、分步执行、幂等性、错误处理、自主排障|任务步骤多或预期耗时长时|
|
|
143
|
+
## 工作流程
|
|
149
144
|
|
|
150
|
-
|
|
145
|
+
> **默认新建原则**:用户要求创建 automation 时,默认直接新建一个独立任务,不要去读取、参考或对比 `~/.comate/automations/` 下已有的其他任务,也不要修改任何已有任务。只有当用户**明确**表达“修改/更新某个已有任务”时,才走下文“管理已有任务 → 修改”流程。新建时仅需检查是否存在同名任务以避免覆盖。
|
|
151
146
|
|
|
152
|
-
|
|
153
|
-
|-|-|-|
|
|
154
|
-
|`references/testing_strategy.md`|成功标准定义、测试类型选择、失败处理、证据收集|任务核心目标是验证代码正确性时(不是"跑 npm test"这种单命令,而是"修改代码后需要验证")|
|
|
155
|
-
|`references/frontend_dev.md`|前端构建验证、lint/类型检查、无 GUI 限制|任务涉及前端代码修改或前端质量检查时|
|
|
156
|
-
|`references/backend_dev.md`|服务依赖、数据库迁移、API 测试、进程管理|任务涉及后端代码修改或后端运维时|
|
|
147
|
+
### 1. 判断触发类型
|
|
157
148
|
|
|
158
|
-
|
|
149
|
+
先确认用户要的是周期性/定时自动化,还是普通一次性任务。
|
|
159
150
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
151
|
+
- 如果是一次性任务,不创建 Automation,直接按普通任务处理或说明不适用。
|
|
152
|
+
- 如果是 webhook、CI 成功、PR 合入、收到 POST 请求等事件触发,说明当前 MVP 不支持,并建议 cron 轮询替代。
|
|
153
|
+
- 如果是每天、每周、每月、每 N 分钟/小时等定时需求,继续收集配置。
|
|
163
154
|
|
|
164
|
-
###
|
|
165
|
-
1. **分析用户 query**:理解任务本质——是简单的脚本执行?代码修改?还是多步骤的端到端流程?
|
|
166
|
-
2. **按需读取相关模板**:只读取与用户任务相关的模板
|
|
167
|
-
3. **提取策略融入 query 或直接引用**:
|
|
155
|
+
### 2. 收集必要信息
|
|
168
156
|
|
|
169
|
-
|
|
170
|
-
* 如果模板整体适用且无需适配,可以在 query 中引用模板的**绝对路径**让执行 Agent 自行读取,例如:`关于 Git 操作细节,参考 /Users/xxx/.comate/skills/create-automation/references/git_operations.md`(注意:必须使用绝对路径,不能用 `{skill_dir}` 变量,因为执行 Agent 无法解析该变量)
|
|
157
|
+
必填信息缺失时主动询问;已明确的信息不要重复问。
|
|
171
158
|
|
|
172
|
-
|
|
159
|
+
- **做什么**:任务目标,即 `AUTOMATION.md` body 的核心内容。
|
|
160
|
+
- **项目路径(workspace)**:`execution.workspace` 是必填字段,每次生成的 `AUTOMATION.md` 都必须写入。默认且通常应为当前提问项目的 workspace 绝对路径,无需向用户确认即可直接使用。仅当用户在本次请求中**明确指定**了其他路径时,才使用指定路径,此时提醒执行 Agent 会加载目标项目的 Comate 配置,并按下文要求在总结中告知该 automation 不绑定到当前项目、在本项目 automation 列表中不可见。
|
|
161
|
+
- **触发时间**:调度完全由 cron 表达式决定。用户明确说明频率和时间点时按用户说的精确时间翻译,不要擅自偏移分钟;完全未提及时询问“多久跑一次、大概什么时间段”;只说“每天一次”这类模糊频率时,可用合理默认值如 `09:00`,并在摘要中说明假设。
|
|
162
|
+
- **push 目标分支**:仅当任务涉及 git push 时必问。Automation 在 YOLO 模式下运行,一旦满足条件会直接 push,不会再次确认。不能推断 `main` / `master` / 默认分支,必须让用户明确给出分支名。
|
|
173
163
|
|
|
174
|
-
|
|
175
|
-
### 创建任务
|
|
176
|
-
**1. 收集必填信息**
|
|
164
|
+
按需询问:
|
|
177
165
|
|
|
178
|
-
|
|
166
|
+
- Git:是否需要先拉最新代码、使用哪个 remote。
|
|
167
|
+
- 测试:是否需要运行测试、具体命令是什么。
|
|
168
|
+
- 执行环境:Python venv/conda、Node nvm、Java/Go 版本、需要 source 的文件、环境变量、配置文件路径等。
|
|
169
|
+
- 模型选择:简单任务可省略 `model`;复杂任务从 Available Models 中选择同系列最新版本 + `-Thinking` 变体;用户指定模型时,先在列表中确认精确名称。
|
|
170
|
+
- 超时时长:默认 `3600`,上限 `7200`。
|
|
179
171
|
|
|
180
|
-
|
|
181
|
-
* **项目路径**:默认使用当前 IDE 打开的项目路径。如果用户指定了不同的项目路径,主动提醒用户:执行 Agent 会加载**目标项目**的 Comate 配置(Skills/Rules),而非当前项目的。如果用户的 query 需要引用当前项目中的 Skill 或 Rule,应在项目的 `.comate/skills/` 或 `~/.comate/skills/` 下查找其绝对路径,并在 query 中使用绝对路径引用
|
|
182
|
-
* **触发时间(= cron 表达式)**:Automation 没有独立的"执行时间"配置项,调度完全由 cron 表达式决定,设置后立即按 cron 周期执行。若用户已明确说明频率和时间点(如"每天早上9点"),直接翻译为 cron;若用户完全未提及频率,询问"多久跑一次、大概什么时间段";若用户给了模糊描述(如"每天跑一次"但没说几点),可用合理默认值(如 09:03)并在摘要中说明,让用户有低成本纠正机会。
|
|
183
|
-
* **push 目标分支**(仅当任务涉及 git push 时):⚠️ **YOLO 模式下 push 无人拦截,必须在创建前确认目标分支**。不可推断(即使 `main` 是最常见的默认值),因为 push 错分支可能直接触发 CI/CD 部署到生产。向用户明确提示:"Automation 在 YOLO 模式下运行,一旦满足条件 Agent 会直接 push,不会再次确认,请确认目标分支。"
|
|
172
|
+
判断规则:
|
|
184
173
|
|
|
185
|
-
|
|
186
|
-
|
|
174
|
+
- 非关键、口语化参数可以合理推断,但必须在输出中说明假设。
|
|
175
|
+
- 用户明确表示不确定的关键参数(环境、分支、路径等)必须追问,不要用自动检测替代追问。定时任务无人值守,自动检测选错会造成静默失败。
|
|
187
176
|
|
|
188
|
-
|
|
189
|
-
* 测试:改完是否跑测试?用什么命令?
|
|
190
|
-
* **执行环境**(关键,环境不对则任务必然失败):
|
|
191
|
-
* 项目依赖什么运行时?Python venv / conda 环境名?Node nvm 版本?Java/Go 版本?
|
|
192
|
-
* 需要 source 哪个文件?(如 `source ~/.bashrc`、`conda activate myenv`、`nvm use 18`)
|
|
193
|
-
* 是否依赖环境变量?(如 API Key、数据库连接串)→ 引导用户给出 `.env` 文件路径或具体值
|
|
194
|
-
* 是否依赖配置文件?(如 `.npmrc`、`settings.xml`、`kubeconfig`)→ 引导用户给出绝对路径
|
|
195
|
-
* ⚠️ **当用户表达环境不确定时(如"不确定用哪个版本""不知道装在哪"),必须追问,不要用自动检测逻辑替代追问**。理由:定时任务是无人值守执行,自动检测选错的后果是静默失败 + 延迟发现;而创建前多问一句的成本几乎为零。建议先手动在终端跑一次任务核心命令,确认环境可用后再配置自动化
|
|
177
|
+
### 3. 设计 query
|
|
196
178
|
|
|
179
|
+
将用户意图转成无人值守 Agent 可端到端执行的自包含指令。
|
|
197
180
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
* 超时时长、错过策略(默认 catchup_once)
|
|
181
|
+
- 环境配置放在最前面,例如激活 venv、切换 Node 版本、加载环境变量。
|
|
182
|
+
- 写明执行步骤、成功标准和失败时应如何处理。
|
|
183
|
+
- 使用 Skill/Rule 引用减少冗余,但不要依赖对话历史。
|
|
184
|
+
- 根据任务加入安全护栏:不需要的 Git、删除、部署、外部网络操作要明确禁止。
|
|
185
|
+
- 简单任务保持最小充分,不额外扩展策略。例如只需写:`运行 npm test。注意:不要修改任何源代码文件,不要 commit 或 push。`
|
|
204
186
|
|
|
205
|
-
|
|
187
|
+
### 4. 写入并校验
|
|
206
188
|
|
|
207
|
-
|
|
189
|
+
创建或修改 `AUTOMATION.md` 后,必须立即运行校验脚本。编辑和校验是一个原子操作;缺少校验就不算完成。
|
|
208
190
|
|
|
209
|
-
|
|
191
|
+
```bash
|
|
192
|
+
mkdir -p ~/.comate/automations/{taskName}
|
|
193
|
+
python3 {skill_dir}/scripts/check_config.py ~/.comate/automations/{taskName}/AUTOMATION.md
|
|
194
|
+
```
|
|
210
195
|
|
|
211
|
-
|
|
196
|
+
校验脚本会检查 frontmatter YAML、必填字段、cron 语法等。若报错,根据提示修正后再次校验,直到通过。
|
|
212
197
|
|
|
213
|
-
|
|
214
|
-
* **2-3 个步骤,逻辑清晰**(依赖更新 + 测试验证)→ 按需读取 1-2 个模板,提取适用要点
|
|
215
|
-
* **多步骤端到端流程**(拉代码 → 修改 → 测试 → push)→ 读取多个模板组合设计,参考 `long_running_task.md` 设计分步方案
|
|
198
|
+
### 5. 总结给用户
|
|
216
199
|
|
|
217
|
-
|
|
200
|
+
校验通过后,给出简洁摘要。
|
|
218
201
|
|
|
219
|
-
|
|
220
|
-
* **利用 Skills/Rules 引用减少 query 冗余**:不需要在 query 中重复写 Rules 中已有的规范,Agent 会自动加载。但可以提示 Agent 注意某个 Rule 或使用某个 Skill(见上方"引用 Skills 和 Rules"语法)
|
|
221
|
-
* **显式写入安全护栏**:根据上方"无人值守安全原则",为任务不需要的危险操作设置禁止条款。例如一个只做测试的任务,query 末尾应加上"注意:不要修改任何源代码文件,不要 commit 或 push。"一个需要 push 的任务,应限定分支范围
|
|
222
|
-
* 所有必要信息写进 query(不能依赖对话历史或隐含假设)
|
|
202
|
+
必含项(每次都要写):
|
|
223
203
|
|
|
224
|
-
|
|
204
|
+
- 配置文件路径:`~/.comate/automations/{taskName}/AUTOMATION.md`
|
|
205
|
+
- 绑定项目:任务绑定的 `workspace` 路径,让用户清楚任务挂在哪个项目下
|
|
206
|
+
- 使用模型:`execution.model` 的值;省略该字段时说明使用系统默认模型
|
|
207
|
+
- cron:表达式 + 人类可读描述,例如 `0 9 * * 1-5` → 周一至周五 09:00(Asia/Shanghai)
|
|
208
|
+
- 核心执行逻辑:一句话说明任务会做什么
|
|
209
|
+
- 引导操作:建议在 Automations 配置列表中找到该任务,点击“立即运行”先跑一次,调整效果到满意程度,执行过的任务可在 Automations 执行记录列表中查看
|
|
225
210
|
|
|
226
|
-
|
|
227
|
-
mkdir -p ~/.comate/automations/{taskName}
|
|
228
|
-
# 写入 AUTOMATION.md
|
|
229
|
-
python3 {skill_dir}/scripts/check_config.py ~/.comate/automations/{taskName}/AUTOMATION.md
|
|
230
|
-
```
|
|
231
|
-
校验脚本验证 frontmatter 的 YAML 格式、必填字段、cron 语法等。校验通过后告知用户。若报错,根据提示修正后重新校验。
|
|
211
|
+
按需提示(命中条件才写):
|
|
232
212
|
|
|
233
|
-
|
|
213
|
+
- query 中约定了临时文件夹/临时文件时:提醒其路径、用途,以及任务结束后是否会清理
|
|
214
|
+
- `workspace` 不是当前提问项目(用户指定了其他路径)时:显著提示该 automation 绑定的是 `{workspace}`,不属于当前项目,在当前项目的 automation 列表中不可见
|
|
215
|
+
- 任务与当前项目完全无关(目标与操作对象都不涉及当前项目)时:友好提示用户确认 workspace 绑定是否符合预期
|
|
234
216
|
|
|
235
|
-
|
|
217
|
+
---
|
|
236
218
|
|
|
237
|
-
|
|
238
|
-
* **cron 的人类可读描述**(如"每天 09:03,Asia/Shanghai 时区")
|
|
239
|
-
* **核心执行逻辑**:一句话说明任务会做什么
|
|
219
|
+
## 管理已有任务
|
|
240
220
|
|
|
241
|
-
|
|
242
|
-
### 管理已有任务
|
|
243
|
-
#### 查看
|
|
244
|
-
读取 AUTOMATION.md 展示任务配置和 query 内容。
|
|
221
|
+
### 查看
|
|
245
222
|
|
|
246
|
-
|
|
247
|
-
修改任务的流程与创建任务的 Step 3 完全一致:**编辑文件和运行校验是不可分割的一个操作**,不存在"只编辑不校验"的合法状态。
|
|
223
|
+
读取任务的 `AUTOMATION.md`,展示 frontmatter 配置和 query 内容。展示 cron 时必须附带人类可读描述。
|
|
248
224
|
|
|
249
|
-
|
|
225
|
+
### 修改
|
|
250
226
|
|
|
251
|
-
|
|
252
|
-
2. **编辑完成后,立即运行校验**(这一步不是可选的后续动作,而是编辑操作的收尾部分——就像 `git commit` 之后必须检查是否成功一样):
|
|
227
|
+
修改流程与创建任务一致:编辑后立即运行校验脚本,校验通过后才算完成。
|
|
253
228
|
|
|
254
|
-
|
|
255
|
-
python3 {skill_dir}/scripts/check_config.py {taskDir}/AUTOMATION.md
|
|
256
|
-
```
|
|
257
|
-
3. 校验结果必须在回复中明确告知用户("校验通过" 或 "发现错误 + 已修复")。如果校验报错,修正后**再次运行校验**直到通过。
|
|
258
|
-
4. 如果修改了 cron 表达式,检查分钟字段是否避开 0、15、30、45(参见"Cron 分钟字段避开整点"规则)。用户说"下午 2 点"→ `3 14`,不是 `0 14`。
|
|
259
|
-
5. 如果修改了 cron 时间、workspace 或任务逻辑,同步更新 description,保持与实际配置一致。
|
|
260
|
-
6. 告知用户:校验通过后提醒 Scheduler 会自动 reload,并给出配置文件路径供用户检查。
|
|
229
|
+
修改时注意:
|
|
261
230
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
231
|
+
- 如果修改 cron,按用户说的精确时间设置,用户说“下午 2 点”就写 `0 14 * * *`。
|
|
232
|
+
- 如果修改 cron、workspace 或任务逻辑,同步更新 `description`,保持描述与实际配置一致。
|
|
233
|
+
- 回复中明确说明校验结果,并告知 Scheduler 会自动 reload。
|
|
265
234
|
|
|
266
|
-
|
|
235
|
+
### 删除
|
|
267
236
|
|
|
268
|
-
|
|
237
|
+
删除操作不可撤销,会删除 `~/.comate/automations/{taskName}/` 整个目录,包括历史 session 记录。即使用户已经说“删掉”,也必须二次确认。
|
|
269
238
|
|
|
270
|
-
|
|
239
|
+
删除前先展示:
|
|
240
|
+
|
|
241
|
+
```text
|
|
271
242
|
即将删除:
|
|
272
243
|
任务名称:{精确匹配到的任务名}
|
|
273
244
|
执行时间:{cron 的人类可读描述}
|
|
274
245
|
项目路径:{workspace}
|
|
275
246
|
配置文件:{AUTOMATION.md 完整路径}
|
|
276
247
|
|
|
277
|
-
|
|
248
|
+
此操作不可撤销,将删除整个目录(包括历史 session 记录)。
|
|
278
249
|
```
|
|
279
|
-
**第二步:明确询问用户是否确认**,例如:"请确认是否继续删除?(回复"确认"或"取消")"
|
|
280
|
-
|
|
281
|
-
**第三步:收到用户明确回复后才执行删除**。收到"确认"才删,收到"取消"或任何模糊回复则中止。
|
|
282
250
|
|
|
283
|
-
|
|
284
|
-
> * 用户说的任务名可能是模糊匹配,找到的任务可能不是他想删的那个(如"payment-security-scan"实际匹配到"payment-service-security-scan")
|
|
285
|
-
> * 展示详情让用户肉眼核对是最后一道安全关卡,成本极低,收益很高
|
|
286
|
-
>
|
|
287
|
-
#### 查看历史
|
|
288
|
-
告知用户在 IDE Automations Dashboard → Session History 中查看。
|
|
251
|
+
然后询问用户是否确认。只有收到明确“确认”才执行删除;收到“取消”或任何模糊回复都中止。
|
|
289
252
|
|
|
290
|
-
|
|
253
|
+
### 查看历史
|
|
291
254
|
|
|
292
|
-
|
|
293
|
-
* Automation 仅在 Comate 运行时触发,关闭 IDE 则不执行任何 cron
|
|
294
|
-
* `triggerAt` 建议设为创建后的下一个预期执行时间点,避免立即触发补跑
|
|
295
|
-
* 创建前检查是否已有同名任务(查看 ~/.comate/automations/ 下的目录)
|
|
296
|
-
* timeoutSeconds 默认 3600,上限 7200
|
|
255
|
+
告知用户在 IDE Automations Dashboard → Session History 中查看。排查执行问题时,引导使用 `automation-question-analyze` skill。
|
|
297
256
|
|
|
298
257
|
---
|
|
299
258
|
|
|
300
259
|
## Cron 表达式速查
|
|
301
|
-
### 理解语法
|
|
302
|
-
cron 的每个字段描述"这个时间维度上哪些值会触发",五个字段同时满足才触发:
|
|
303
260
|
|
|
304
|
-
|
|
261
|
+
### 基本语法
|
|
262
|
+
|
|
263
|
+
cron 为 5 字段,五个字段同时满足才触发:
|
|
264
|
+
|
|
265
|
+
```text
|
|
305
266
|
分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7, 0和7均为周日)
|
|
306
267
|
```
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
268
|
+
|
|
269
|
+
| 语法 | 含义 | 集合视角 |
|
|
270
|
+
|---|---|---|
|
|
271
|
+
| `*` | 该字段所有值 | 全集 |
|
|
272
|
+
| `1-5` | 1 到 5 | 区间子集 |
|
|
273
|
+
| `*/5` | 每隔 5 取一个(0,5,10,...) | 步长子集 |
|
|
274
|
+
| `2-10/3` | 区间内步长,{2,5,8} | 区间内步长子集 |
|
|
275
|
+
| `1,3,5` | 仅 1、3、5 | 显式枚举集合 |
|
|
276
|
+
|
|
277
|
+
### 常用表达式
|
|
278
|
+
|
|
279
|
+
| 用户说法 | cron 表达式 | 向用户展示时说 |
|
|
280
|
+
|---|---|---|
|
|
281
|
+
| 每天早上 9 点 | `0 9 * * *` | 每天 09:00 |
|
|
282
|
+
| 工作日早上 9 点 | `0 9 * * 1-5` | 周一至周五 09:00 |
|
|
283
|
+
| 每周一早上 10 点 | `0 10 * * 1` | 每周一 10:00 |
|
|
284
|
+
| 每 4 小时 | `0 */4 * * *` | 每 4 小时(00:00/04:00/08:00...) |
|
|
285
|
+
| 每 30 分钟 | `*/30 * * * *` | 每 30 分钟 |
|
|
286
|
+
| 每天午夜 | `0 0 * * *` | 每天 00:00 |
|
|
287
|
+
| 每月 1 号 9 点 | `0 9 1 * *` | 每月 1 日 09:00 |
|
|
288
|
+
| 每周一、三、五下午 5 点 | `0 17 * * 1,3,5` | 周一、三、五 17:00 |
|
|
289
|
+
|
|
290
|
+
### 按用户指定的时间设置
|
|
291
|
+
|
|
292
|
+
cron 的时间点完全尊重用户的说法,用户说几点就设几点,不要为了错开并发而擅自偏移分钟。
|
|
293
|
+
|
|
294
|
+
- 用户说“早上 9 点” → `0 9 * * *`,不要改成 `3 9 * * *`。
|
|
295
|
+
- 用户说“每小时” → `0 * * * *`。
|
|
296
|
+
- 用户说“下午 5 点半” → `30 17 * * *`。
|
|
297
|
+
- 用户只给模糊频率(如“每天一次”)且未指定时间点时,才可用合理默认值(如 `09:00`),并在摘要中说明假设。
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 其他注意事项
|
|
302
|
+
|
|
303
|
+
- Automation 仅在 Comate 运行时触发;关闭 IDE 后不会执行 cron。
|
|
304
|
+
- 创建前检查 `~/.comate/automations/` 下是否已有同名任务。
|
|
305
|
+
- `timeoutSeconds` 默认 `3600`,上限 `7200`。
|
|
306
|
+
- 配置写入并校验通过后,Scheduler 会自动 reload。
|
|
@@ -8,6 +8,7 @@ disable-model-invocation: true
|
|
|
8
8
|
【设计稿图片】: 上下文中的图片
|
|
9
9
|
【设计稿名称】:选中的设计稿信息中的name字段。
|
|
10
10
|
【图片目录】:选中的设计稿信息中的assetsPath字段
|
|
11
|
+
【预览用html路径】:选中的设计稿信息中的previewPath字段,仅供在浏览器打开,请勿读取文件内容
|
|
11
12
|
【设计稿图片可访问url】:选中的设计稿图片的可访问链接,非特殊要求请勿使用。
|
|
12
13
|
【designTokenPath】:选中的设计稿信息中的designToken.md的路径,非特殊要求请勿使用。
|
|
13
14
|
【image2designMode】:用户配置项,表明是否使用image2design模式。
|
|
@@ -19,23 +20,26 @@ disable-model-invocation: true
|
|
|
19
20
|
|
|
20
21
|
# 步骤
|
|
21
22
|
请务必严格遵循该步骤。
|
|
22
|
-
1.
|
|
23
|
+
1. 预览html
|
|
24
|
+
在任务开始前请提示用户预览页面。可以通过命令行工具打开【预览用html路径】,为用户提供预览,如果用户跳过,则继续后续流程。
|
|
25
|
+
|
|
26
|
+
2. 项目分析
|
|
23
27
|
- 项目使用的技术栈(仅在未检测到使用其他css框架或用户要求的情况下才使用原生CSS。)
|
|
24
28
|
- **组件注册方式**(如何导入/导出组件,组件如何被使用)
|
|
25
29
|
- **页面路由配置**(路由系统如何工作,新组件如何集成到路由中)
|
|
26
30
|
- 项目的构建和编译系统(webpack/vite/其他)
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
3. 设计稿分析
|
|
29
33
|
- 请基于【设计稿图片】分析页面结构和语义。如果用户开启了【image2designMode】则基于references/image2md.md 的流程进行分析。
|
|
30
34
|
- 组件识别与引入,请基于references/codeConnect.md 遵循Code Connect指南分析设计稿组件。
|
|
31
35
|
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
4. 图片资源管理
|
|
34
38
|
- 请使用终端命令一次性将需要的图像复制到项目中的合适目录中 (请避免一个一个复制图片,使用一个命令复制整个图片目录),并记住复制后的【图片目录】。注意无需执行终端命令检查目录中是否有图片。
|
|
35
39
|
- 请确保在项目中使用正确的方法引用【图片目录】中的图片资源。【图片目录】中的图片名称和html代码中的图片名称是一致的。
|
|
36
40
|
**请注意tailwind框架中不要使用bg-[url]来引入本地图片资源,比如bg-[url('/images.png')],而是使用style中的background-image属性。**
|
|
37
41
|
|
|
38
|
-
|
|
42
|
+
5. 代码生成
|
|
39
43
|
- 根据读取的userRule和上述分析,生成对应代码。
|
|
40
44
|
|
|
41
45
|
# 其他
|
|
@@ -326,7 +326,7 @@ UI 返回 JSON:
|
|
|
326
326
|
```bash
|
|
327
327
|
__silent: cd <workspace> && git add -A
|
|
328
328
|
cd <workspace> && git commit -m "<commitMessage>"
|
|
329
|
-
__silent: cd <workspace> && $ICODE_CLI git push_cr
|
|
329
|
+
__silent: cd <workspace> && $ICODE_CLI git push_cr --branch <branch>
|
|
330
330
|
```
|
|
331
331
|
|
|
332
332
|
---
|
|
@@ -43,6 +43,22 @@ def _get_current_branch(workspace):
|
|
|
43
43
|
return ""
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
def _get_upstream_branch(workspace):
|
|
47
|
+
"""获取当前分支的上游远端分支名(strip remote 前缀)"""
|
|
48
|
+
try:
|
|
49
|
+
result = subprocess.run(
|
|
50
|
+
["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{upstream}"],
|
|
51
|
+
capture_output=True, text=True, encoding="utf-8", errors="replace",
|
|
52
|
+
timeout=10, cwd=workspace
|
|
53
|
+
)
|
|
54
|
+
if result.returncode == 0 and result.stdout.strip():
|
|
55
|
+
upstream = result.stdout.strip()
|
|
56
|
+
return upstream.split("/", 1)[-1] if "/" in upstream else upstream
|
|
57
|
+
except (subprocess.TimeoutExpired, FileNotFoundError, OSError):
|
|
58
|
+
pass
|
|
59
|
+
return ""
|
|
60
|
+
|
|
61
|
+
|
|
46
62
|
def _get_remote_branches(workspace, current_branch):
|
|
47
63
|
try:
|
|
48
64
|
result = subprocess.run(
|
|
@@ -74,7 +90,9 @@ def _build_workspace_entry(workspace_path, diff_info):
|
|
|
74
90
|
repo_name = os.path.basename(workspace_path)
|
|
75
91
|
|
|
76
92
|
if has_changes:
|
|
77
|
-
|
|
93
|
+
local_branch = _get_current_branch(workspace_path)
|
|
94
|
+
upstream_branch = _get_upstream_branch(workspace_path)
|
|
95
|
+
current_branch = upstream_branch or local_branch
|
|
78
96
|
remote_branches = _get_remote_branches(workspace_path, current_branch)
|
|
79
97
|
diff_summary = {
|
|
80
98
|
"changed_files": diff_info.get("changed_files", []),
|