Skip to content

Commit 0511072

Browse files
committed
Merge branch '3.6.x'
2 parents a6e4305 + a25a9bc commit 0511072

16 files changed

+656
-145
lines changed

.opencode/COMMAND_STYLE_GUIDE.md

Lines changed: 405 additions & 0 deletions
Large diffs are not rendered by default.

.opencode/commands/analyze-issue.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,41 @@ subtask: false
99
执行以下步骤:
1010

1111
1. 获取 Issue 信息:
12-
- 使用 gh issue view $1 --json number,title,body,labels 获取 Issue 详情
13-
- 如果 Issue 不存在,提示用户检查 Issue 编号
12+
!`gh issue view $1 --json number,title,body,labels`
13+
14+
如果 Issue 不存在,提示用户检查 Issue 编号
1415

15-
2. 创建任务目录:
16-
- 创建 .ai-workspace/active/TASK-!`date +%Y%m%d-%H%M%S`/ 目录
17-
- 使用 .ai-agents/templates/task.md 模板创建 task.md 文件
16+
2. 生成任务ID:
17+
!`date +%Y%m%d-%H%M%S`
18+
19+
3. 创建任务目录:
20+
!`mkdir -p .ai-workspace/active/TASK-$(date +%Y%m%d-%H%M%S)/`
21+
22+
使用 Write 工具基于 .ai-agents/templates/task.md 模板创建 task.md 文件:
1823
- 填写任务元数据: issue_number, title, created_at, workflow 等
24+
- created_at 和 updated_at 使用步骤2获取的时间戳
1925

20-
3. 执行需求分析:
26+
4. 执行需求分析:
2127
- 阅读并理解 Issue 描述
2228
- 搜索相关代码文件(使用 glob/grep)
2329
- 分析代码结构和影响范围
2430
- 识别潜在的技术风险和依赖
2531
- 评估工作量和复杂度
2632

27-
4. 输出分析文档到 analysis.md,包含:
33+
5. 输出分析文档到 analysis.md,包含:
2834
- 需求理解(重新描述需求)
2935
- 相关文件列表(带文件路径和行号)
3036
- 影响范围评估(直接影响和间接影响)
3137
- 技术风险
3238
- 依赖关系
3339
- 工作量和复杂度评估
3440

35-
5. 更新任务状态:
41+
6. 更新任务状态:
3642
- current_step: requirement-analysis
3743
- updated_at: 当前时间
3844
- 标记 analysis.md 为已完成
3945

40-
6. 告知用户:
46+
7. 告知用户:
4147
- 输出任务ID、标题、工作流
4248
- 显示输出文件路径
4349
- 提示下一步使用 /plan $TASK_ID 设计技术方案

.opencode/commands/analyze-security.md

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,29 @@ subtask: false
88

99
执行以下步骤:
1010

11-
1. 获取安全告警信息:
12-
!`gh api repos/<owner>/<repo>/dependabot/alerts/$1`
11+
1. 获取仓库信息和安全告警:
12+
!`gh repo view --json owner,name -q '.owner.login + "/" + .name'`
13+
14+
使用获取的仓库信息查询安全告警:
15+
!`gh api "repos/{owner}/{repo}/dependabot/alerts/$1"`
1316

1417
提取关键信息:
1518
- number, state, severity
1619
- security_advisory: ghsa_id, cve_id, summary, description
1720
- dependency: package.name, package.ecosystem, manifest_path
1821
- security_vulnerability: first_patched_version, vulnerable_version_range
1922

20-
2. 创建任务文件:
21-
- 检查是否已存在该安全告警的任务
22-
- 如果没有,创建新任务目录: .ai-workspace/active/TASK-!`date +%Y%m%d-%H%M%S`/
23-
- 使用 .ai-agents/templates/task.md 模板创建 task.md
23+
2. 检查是否已存在相关任务:
24+
!`grep -r "security_alert_number: $1" .ai-workspace/active/ .ai-workspace/blocked/ 2>/dev/null || echo "无现有任务"`
25+
26+
3. 生成任务ID:
27+
!`date +%Y%m%d-%H%M%S`
28+
29+
4. 创建任务文件:
30+
如果不存在相关任务,创建新任务目录:
31+
!`mkdir -p .ai-workspace/active/TASK-$(date +%Y%m%d-%H%M%S)/`
32+
33+
使用 Write 工具基于 .ai-agents/templates/task.md 模板创建 task.md:
2434
- 填写任务元数据:
2535
```yaml
2636
security_alert_number: $1
@@ -29,23 +39,23 @@ subtask: false
2939
ghsa_id: <GHSA-ID>
3040
```
3141
32-
3. 分析受影响范围:
42+
5. 分析受影响范围:
3343
- 识别受影响的依赖包和版本
3444
- 搜索项目中使用该依赖的所有位置(使用 glob/grep)
3545
- 检查依赖文件(pom.xml, requirements.txt, package.json 等)
3646
- 分析是否直接使用了漏洞代码路径
3747
- 识别依赖关系(直接依赖 vs 传递依赖)
3848
- 定位受影响的代码模块和文件
3949
40-
4. 评估安全风险:
50+
6. 评估安全风险:
4151
- 评估漏洞的实际影响(是否可被利用)
4252
- 分析漏洞触发条件和场景
4353
- 评估对系统安全性的影响程度
4454
- 识别潜在的安全威胁
4555
- 确定修复的紧急程度
4656
- 查找是否有已知的攻击案例
4757
48-
5. 输出分析文档到 analysis.md,包含:
58+
7. 输出分析文档到 analysis.md,包含:
4959
- 告警基本信息(编号、严重程度、GHSA/CVE ID、描述)
5060
- 漏洞详情(受影响的依赖、版本范围、修复版本)
5161
- 依赖使用情况(依赖文件位置、依赖类型、使用模块列表)
@@ -54,12 +64,12 @@ subtask: false
5464
- 技术依赖和约束
5565
- 参考链接(CVE/GHSA链接、厂商公告、安全建议)
5666
57-
6. 更新任务状态:
67+
8. 更新任务状态:
5868
- current_step: security-analysis
5969
- updated_at: 当前时间
6070
- 标记 analysis.md 为已完成
6171
62-
7. 告知用户:
72+
9. 告知用户:
6373
- 输出任务ID、漏洞严重程度、受影响包
6474
- 显示输出文件路径
6575
- 提示下一步使用 /plan <task-id> 设计修复方案

.opencode/commands/block-task.md

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ subtask: false
2323
执行以下步骤:
2424

2525
1. 验证任务存在:
26-
!`ls -la .ai-workspace/active/$1/task.md`
26+
!`test -f .ai-workspace/active/$1/task.md && echo "✅ 任务存在" || echo "❌ ERROR: 任务不存在"`
2727

2828
2. 分析并记录阻塞原因:
2929
询问用户或根据 $2 参数确定:
@@ -33,25 +33,29 @@ subtask: false
3333
- 尝试的解决方案: 已经尝试了哪些方法?
3434
- 需要的帮助: 需要谁来帮助?需要什么资源?
3535

36-
3. 更新任务状态(CRITICAL):
37-
使用 Edit 工具更新 task.md:
38-
```yaml
39-
status: blocked
40-
current_step: <保持不变>
41-
updated_at: !`date '+%Y-%m-%d %H:%M:%S'`
42-
blocked_at: !`date '+%Y-%m-%d %H:%M:%S'`
43-
blocked_by: opencode
44-
blocked_reason: <简短描述阻塞原因>
45-
```
36+
3. 获取当前时间:
37+
!`date '+%Y-%m-%d %H:%M:%S'`
38+
39+
4. 更新任务状态(CRITICAL):
40+
使用 Edit 工具更新 task.md 的 YAML front matter:
41+
- status: blocked
42+
- current_step: <保持不变>
43+
- updated_at: <使用步骤3获取的时间>
44+
- blocked_at: <使用步骤3获取的时间>
45+
- blocked_by: opencode
46+
- blocked_reason: <简短描述阻塞原因>
4647

47-
4. 在 task.md 中添加"阻塞信息"章节:
48+
5. 在 task.md 中添加"阻塞信息"章节:
49+
50+
使用 Edit 工具在 task.md 末尾添加以下内容:
51+
4852
```markdown
4953
---
5054

5155
## ⚠️ 阻塞信息
5256

5357
### 阻塞概要
54-
- **阻塞时间**: !`date '+%Y-%m-%d %H:%M:%S'`
58+
- **阻塞时间**: <使用步骤3获取的时间>
5559
- **阻塞步骤**: <current_step>
5660
- **阻塞者**: opencode
5761
- **阻塞类型**: <技术问题/需求问题/资源问题/决策问题>
@@ -78,20 +82,18 @@ subtask: false
7882
- [ ] 条件 2
7983
```
8084

81-
5. 移动到阻塞目录(CRITICAL):
82-
```bash
83-
mkdir -p .ai-workspace/blocked
84-
mv .ai-workspace/active/$1 .ai-workspace/blocked/
85-
```
85+
6. 移动到阻塞目录(CRITICAL):
86+
!`mkdir -p .ai-workspace/blocked`
87+
!`mv .ai-workspace/active/$1 .ai-workspace/blocked/`
8688

87-
6. 验证移动成功:
88-
!`test ! -d .ai-workspace/active/$1 && echo "已移除 active 目录" || echo "ERROR: active 目录仍存在"`
89-
!`test -d .ai-workspace/blocked/$1 && echo "已移动到 blocked" || echo "ERROR: 移动失败"`
89+
7. 验证移动成功:
90+
!`test ! -d .ai-workspace/active/$1 && echo "已移除 active 目录" || echo "ERROR: active 目录仍存在"`
91+
!`test -d .ai-workspace/blocked/$1 && echo "已移动到 blocked" || echo "ERROR: 移动失败"`
9092

91-
7. 可选: 同步到 Issue:
93+
8. 可选: 同步到 Issue:
9294
如果有关联 Issue,使用 /sync-issue <issue-number> 更新阻塞状态
9395

94-
8. 告知用户:
96+
9. 告知用户:
9597
```
9698
⚠️ 任务 $1 已标记为阻塞
9799
@@ -117,10 +119,13 @@ subtask: false
117119

118120
**解除阻塞**:
119121
当问题解决后,手动解除阻塞:
120-
```bash
121-
mv .ai-workspace/blocked/$1 .ai-workspace/active/
122-
# 然后使用 Edit 工具更新 task.md,将 status 改回 active,移除 blocked_* 字段
123-
```
122+
123+
!`mv .ai-workspace/blocked/$1 .ai-workspace/active/`
124+
125+
然后使用 Edit 工具更新 task.md:
126+
- 将 status 改回 active
127+
- 移除 blocked_at, blocked_by, blocked_reason 字段
128+
- 更新 updated_at 为当前时间
124129

125130
**注意事项**:
126131
- 及时标记,不要拖延

.opencode/commands/close-security.md

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ subtask: false
99
执行以下步骤:
1010

1111
1. 获取安全告警信息:
12-
!`gh api repos/<owner>/<repo>/dependabot/alerts/$1`
12+
!`gh api "repos/{owner}/{repo}/dependabot/alerts/$1"`
1313

1414
验证告警状态:
1515
- 如果已经是 dismissed 或 fixed 状态,提示用户并退出
@@ -61,13 +61,7 @@ subtask: false
6161
```
6262

6363
6. 执行关闭操作:
64-
```bash
65-
gh api --method PATCH \
66-
repos/<owner>/<repo>/dependabot/alerts/$1 \
67-
-f state=dismissed \
68-
-f dismissed_reason="<API参数>" \
69-
-f dismissed_comment="<用户的详细说明>"
70-
```
64+
!`gh api --method PATCH "repos/{owner}/{repo}/dependabot/alerts/$1" -f state=dismissed -f dismissed_reason="<API参数>" -f dismissed_comment="<用户的详细说明>" && echo "✅ 告警已关闭" || echo "❌ ERROR: 关闭失败"`
7165

7266
**选项到 API 参数的映射**:
7367
- 误报 → not_used 或 inaccurate
@@ -77,8 +71,9 @@ subtask: false
7771
- 测试或开发依赖 → not_used
7872

7973
7. 记录到任务(如果存在):
80-
- 搜索包含 security_alert_number: $1 的任务
81-
- 如果找到,添加关闭记录并归档任务
74+
!`grep -r "security_alert_number: $1" .ai-workspace/active/ .ai-workspace/blocked/ 2>/dev/null || echo "⚠️ 无关联任务"`
75+
76+
如果找到相关任务,添加关闭记录并归档任务
8277

8378
8. 告知用户:
8479
```

.opencode/commands/commit.md

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@ subtask: false
1818
!`git diff --cached --name-only`
1919

2020
3. 对于每个修改的文件,检查是否包含版权头:
21-
- 使用 grep "Copyright" 查找版权头
22-
- 如果文件包含版权头且年份不是当前年份,使用 Edit 工具更新
23-
- 更新格式示例: "Copyright (C) 2024-2025" → "Copyright (C) 2024-!`date +%Y`"
24-
- **绝对不要**硬编码年份
21+
- 使用 Read 工具读取文件内容
22+
- 使用 grep 查找版权头: !`grep -l "Copyright" <file-path> 2>/dev/null || echo "无版权头"`
23+
- 如果文件包含版权头且年份过期,使用 Edit 工具更新
24+
- 更新格式示例(假设当前年份为 2026):
25+
* "Copyright (C) 2024-2025" → "Copyright (C) 2024-2026"
26+
* "Copyright (C) 2024" → "Copyright (C) 2024-2026"
27+
- **绝对不要**硬编码年份,始终使用步骤1获取的当前年份
2528
- **只更新修改的文件**,不批量更新所有文件
2629

2730
**步骤 2: 分析变更并生成提交信息**
@@ -31,23 +34,78 @@ subtask: false
3134
!`git diff`
3235
!`git log --oneline -5`
3336

34-
2. 分析变更:
35-
- 确定变更类型(新功能/增强/Bug修复/重构/测试/文档等)
36-
- 生成符合规范的提交消息(参考最近的 commit 格式)
37-
- 提交消息格式: `<type>(<scope>): <subject>`,subject 使用中文且约 20 字以内
38-
- scope 为模块名(如 fit、waterflow、fel),可省略
37+
2. 分析变更并生成**详细的**提交消息:
38+
39+
**提交消息结构(CRITICAL)**:
40+
```
41+
<type>(<scope>): <subject>
42+
43+
<body>
44+
45+
Co-Authored-By: <你的模型名称> <noreply@anthropic.com>
46+
```
47+
48+
**各部分要求**:
49+
- **标题行**: `<type>(<scope>): <subject>`
50+
* type: feat/fix/refactor/docs/build/test/chore 等
51+
* scope: 模块名(如 fit、waterflow、fel),可省略
52+
* subject: 中文,约 20 字以内,概括变更
53+
54+
- **正文(body)**: 详细说明变更内容
55+
* 用 2-4 个要点说明具体做了什么
56+
* 每个要点用 `-` 开头
57+
* 解释"为什么"这样改,而不仅仅是"改了什么"
58+
59+
- **签名**: 始终添加 Co-Authored-By,模型名称由你自己声明(如 Claude Sonnet 4.5、GPT-5.2、Gemini-3 等)
60+
61+
**示例**(仅供参考格式,不要直接复制内容):
62+
```
63+
docs(opencode): 规范命令编写标准并添加风格指南
64+
65+
优化所有自定义命令的执行方式:
66+
- 统一使用 `!` 标记可执行命令
67+
- 添加错误处理和状态检查
68+
- 改进时间戳获取方式(先获取再引用)
69+
- 新增 COMMAND_STYLE_GUIDE.md 编写规范文档
70+
71+
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
72+
```
73+
3974
- 不要提交敏感文件(.env, credentials.json等)
4075

4176
**步骤 3: 提交代码**
4277

4378
1. 添加文件到暂存区:
44-
!`git add <相关文件>`
79+
!`git add .`
80+
81+
或指定特定文件:
82+
!`git add <file1> <file2>`
4583

4684
2. 创建提交:
47-
!`git commit -m "<提交消息>"`
85+
86+
使用 HEREDOC 格式执行 git commit,支持多行提交消息。
87+
88+
**命令格式**(仅供参考,实际执行时替换占位符):
89+
```bash
90+
git commit -m "$(cat <<'EOF'
91+
<type>(<scope>): <subject>
92+
93+
<body 详细说明>
94+
95+
Co-Authored-By: <你的模型名称> <noreply@anthropic.com>
96+
EOF
97+
)"
98+
```
99+
100+
**执行要求**:
101+
- 根据步骤 2 分析的变更内容,生成实际的提交消息
102+
- 将上述格式中的占位符替换为实际内容
103+
- Co-Authored-By 中的模型名称由你自己声明(你是什么模型就写什么)
104+
- 使用 Bash 工具执行完整的 git commit 命令
48105
49106
3. 验证提交成功:
50107
!`git status`
108+
!`git log -1`
51109
52110
**步骤 4: 更新任务状态(如果是任务相关的提交)**
53111

0 commit comments

Comments
 (0)