issuekit 0.1.0__py3-none-any.whl
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.
- issuekit/__init__.py +3 -0
- issuekit/agent_commands.py +80 -0
- issuekit/agents/__init__.py +5 -0
- issuekit/agents/registry.py +68 -0
- issuekit/bundled_commands/issuekit.change.md +52 -0
- issuekit/bundled_commands/issuekit.coding.md +131 -0
- issuekit/bundled_commands/issuekit.design.md +116 -0
- issuekit/bundled_commands/issuekit.knowledge.md +117 -0
- issuekit/bundled_commands/issuekit.release.md +90 -0
- issuekit/bundled_commands/issuekit.require.md +127 -0
- issuekit/bundled_commands/issuekit.review.md +82 -0
- issuekit/bundled_commands/issuekit.test.md +75 -0
- issuekit/bundled_templates/code-review.md +105 -0
- issuekit/bundled_templates/release-note.md +90 -0
- issuekit/bundled_templates/requirement.md +107 -0
- issuekit/bundled_templates/technical-design.md +279 -0
- issuekit/bundled_templates/test-plan.md +250 -0
- issuekit/cli.py +97 -0
- issuekit/commands/__init__.py +0 -0
- issuekit/commands/init.py +185 -0
- issuekit/knowledge/__init__.py +32 -0
- issuekit/templates.py +17 -0
- issuekit-0.1.0.dist-info/METADATA +177 -0
- issuekit-0.1.0.dist-info/RECORD +27 -0
- issuekit-0.1.0.dist-info/WHEEL +4 -0
- issuekit-0.1.0.dist-info/entry_points.txt +2 -0
- issuekit-0.1.0.dist-info/licenses/LICENSE +21 -0
issuekit/__init__.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""将 issuekit 命令文件安装到目标 AI 助手的命令目录。"""
|
|
2
|
+
|
|
3
|
+
from importlib import resources
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from issuekit.agents.registry import AgentConfig
|
|
7
|
+
|
|
8
|
+
COMMAND_FILES = [
|
|
9
|
+
"issuekit.require.md",
|
|
10
|
+
"issuekit.design.md",
|
|
11
|
+
"issuekit.coding.md",
|
|
12
|
+
"issuekit.test.md",
|
|
13
|
+
"issuekit.release.md",
|
|
14
|
+
"issuekit.review.md",
|
|
15
|
+
"issuekit.change.md",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def install_agent_commands(commands_dir: Path, agent_config: AgentConfig) -> int:
|
|
20
|
+
"""安装所有 issuekit 命令文件,返回安装的文件数。"""
|
|
21
|
+
bundled = resources.files("issuekit") / "bundled_commands"
|
|
22
|
+
count = 0
|
|
23
|
+
|
|
24
|
+
for filename in COMMAND_FILES:
|
|
25
|
+
source = bundled / filename
|
|
26
|
+
if not source.is_file():
|
|
27
|
+
continue
|
|
28
|
+
|
|
29
|
+
content = source.read_text(encoding="utf-8")
|
|
30
|
+
|
|
31
|
+
if not agent_config.command_frontmatter:
|
|
32
|
+
content = _strip_frontmatter(content)
|
|
33
|
+
|
|
34
|
+
if not agent_config.supports_handoffs:
|
|
35
|
+
content = _strip_handoffs(content)
|
|
36
|
+
|
|
37
|
+
dest = commands_dir / f"{Path(filename).stem}{agent_config.command_ext}"
|
|
38
|
+
dest.write_text(content, encoding="utf-8")
|
|
39
|
+
count += 1
|
|
40
|
+
|
|
41
|
+
return count
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _strip_frontmatter(content: str) -> str:
|
|
45
|
+
"""移除 YAML frontmatter(--- ... ---)。"""
|
|
46
|
+
if content.startswith("---"):
|
|
47
|
+
end = content.find("---", 3)
|
|
48
|
+
if end != -1:
|
|
49
|
+
return content[end + 3:].lstrip("\n")
|
|
50
|
+
return content
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _strip_handoffs(content: str) -> str:
|
|
54
|
+
"""移除 YAML frontmatter 中的 handoffs 部分(用于不支持 handoffs 的 AI 助手)。"""
|
|
55
|
+
if not content.startswith("---"):
|
|
56
|
+
return content
|
|
57
|
+
|
|
58
|
+
end = content.find("---", 3)
|
|
59
|
+
if end == -1:
|
|
60
|
+
return content
|
|
61
|
+
|
|
62
|
+
frontmatter = content[3:end]
|
|
63
|
+
body = content[end + 3:]
|
|
64
|
+
|
|
65
|
+
lines = frontmatter.split("\n")
|
|
66
|
+
filtered = []
|
|
67
|
+
skip = False
|
|
68
|
+
for line in lines:
|
|
69
|
+
if line.strip().startswith("handoffs:"):
|
|
70
|
+
skip = True
|
|
71
|
+
continue
|
|
72
|
+
if skip and (line.startswith(" ") or line.startswith("\t")):
|
|
73
|
+
continue
|
|
74
|
+
skip = False
|
|
75
|
+
filtered.append(line)
|
|
76
|
+
|
|
77
|
+
new_frontmatter = "\n".join(filtered).strip()
|
|
78
|
+
if new_frontmatter:
|
|
79
|
+
return f"---\n{new_frontmatter}\n---{body}"
|
|
80
|
+
return body.lstrip("\n")
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""AI 助手配置注册表。
|
|
2
|
+
|
|
3
|
+
每个助手定义了命令文件的存放位置和格式要求。
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class AgentConfig:
|
|
12
|
+
"""AI 助手配置项。"""
|
|
13
|
+
name: str
|
|
14
|
+
commands_dir: str
|
|
15
|
+
rules_dir: Optional[str]
|
|
16
|
+
command_ext: str
|
|
17
|
+
command_frontmatter: bool
|
|
18
|
+
supports_handoffs: bool
|
|
19
|
+
|
|
20
|
+
def format_description(self) -> str:
|
|
21
|
+
return f"{self.name} ({self.commands_dir})"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
AGENT_REGISTRY: dict[str, AgentConfig] = {
|
|
25
|
+
"cursor": AgentConfig(
|
|
26
|
+
name="Cursor",
|
|
27
|
+
commands_dir=".cursor/commands",
|
|
28
|
+
rules_dir=".cursor/rules",
|
|
29
|
+
command_ext=".md",
|
|
30
|
+
command_frontmatter=True,
|
|
31
|
+
supports_handoffs=True,
|
|
32
|
+
),
|
|
33
|
+
"claude": AgentConfig(
|
|
34
|
+
name="Claude Code",
|
|
35
|
+
commands_dir=".claude/commands",
|
|
36
|
+
rules_dir=None,
|
|
37
|
+
command_ext=".md",
|
|
38
|
+
command_frontmatter=False,
|
|
39
|
+
supports_handoffs=False,
|
|
40
|
+
),
|
|
41
|
+
"codex": AgentConfig(
|
|
42
|
+
name="Codex",
|
|
43
|
+
commands_dir=".codex/commands",
|
|
44
|
+
rules_dir=None,
|
|
45
|
+
command_ext=".md",
|
|
46
|
+
command_frontmatter=False,
|
|
47
|
+
supports_handoffs=False,
|
|
48
|
+
),
|
|
49
|
+
"copilot": AgentConfig(
|
|
50
|
+
name="GitHub Copilot",
|
|
51
|
+
commands_dir=".github/agents",
|
|
52
|
+
rules_dir=None,
|
|
53
|
+
command_ext=".md",
|
|
54
|
+
command_frontmatter=False,
|
|
55
|
+
supports_handoffs=False,
|
|
56
|
+
),
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
AGENT_ALIASES: dict[str, str] = {
|
|
60
|
+
"cursor-agent": "cursor",
|
|
61
|
+
"claude-code": "claude",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_agent_config(name: str) -> Optional[AgentConfig]:
|
|
66
|
+
"""根据名称获取 AI 助手配置,支持别名解析。"""
|
|
67
|
+
resolved = AGENT_ALIASES.get(name, name)
|
|
68
|
+
return AGENT_REGISTRY.get(resolved)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 记录和管理 Issue 的需求或方案变更。追踪变更对所有文档的影响。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 用户输入
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
$ARGUMENTS
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 概述
|
|
12
|
+
|
|
13
|
+
本命令处理开发过程中的需求变更、技术方案调整等,确保所有受影响的文档一致更新,变更被正确追踪。
|
|
14
|
+
|
|
15
|
+
## 工作流程
|
|
16
|
+
|
|
17
|
+
### 第 1 步:定位 Issue 并解析变更
|
|
18
|
+
|
|
19
|
+
1. 读取 `.issuekit/config.yaml` 中的 `issues_dir` 配置项,获取 Issue 文档存放目录(默认为 `issues`)
|
|
20
|
+
2. 定位 issue 目录(从 `$ARGUMENTS` 或当前分支,issue 目录位于 `{issues_dir}/{issue-id}/`)
|
|
21
|
+
3. 从 `$ARGUMENTS` 解析变更内容(用户提供的文字/图片)
|
|
22
|
+
4. 分类变更类型:
|
|
23
|
+
- **需求变更**:产品需求发生变化
|
|
24
|
+
- **方案调整**:技术方案调整
|
|
25
|
+
- **配置变更**:配置项变化
|
|
26
|
+
- **范围变更**:需求范围扩大/缩小
|
|
27
|
+
|
|
28
|
+
### 第 2 步:影响分析
|
|
29
|
+
|
|
30
|
+
1. 阅读相关现有文档
|
|
31
|
+
2. 对比变更内容与当前内容,识别差异
|
|
32
|
+
3. 评估对下游文档的影响:
|
|
33
|
+
- 需求变更 → 可能影响:技术方案、测试方案、发布文档
|
|
34
|
+
- 方案调整 → 可能影响:测试方案、发布文档
|
|
35
|
+
- 范围变更 → 可能影响:所有文档
|
|
36
|
+
|
|
37
|
+
### 第 3 步:更新受影响文档
|
|
38
|
+
|
|
39
|
+
对每个受影响的文档:
|
|
40
|
+
|
|
41
|
+
1. **原地更新内容**(保持可读性,不使用删除线)
|
|
42
|
+
2. **追加变更记录条目**到文档的变更记录表:
|
|
43
|
+
```
|
|
44
|
+
| v{N} | {日期} | {变更人} | {变更描述} | {原因} |
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 第 4 步:向用户报告
|
|
48
|
+
|
|
49
|
+
1. 总结变更内容
|
|
50
|
+
2. 列出所有更新的文档及版本号
|
|
51
|
+
3. 如果下游文档需要手动更新(如技术方案需要重新设计),提醒用户并建议使用对应的命令
|
|
52
|
+
4. 如果变更显著影响范围,建议重新运行需求文档的质量验证
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 按技术方案进行编码实现。逐步执行开发步骤,完成后交叉校验代码与技术文档、需求文档的一致性,修复偏差。
|
|
3
|
+
handoffs:
|
|
4
|
+
- label: 制定测试方案
|
|
5
|
+
agent: issuekit.test
|
|
6
|
+
prompt: 为这个 issue 制定测试方案
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 用户输入
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
$ARGUMENTS
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
用户可以指定 issue ID,也可以从当前 git 分支自动推断。
|
|
16
|
+
|
|
17
|
+
## 概述
|
|
18
|
+
|
|
19
|
+
本命令按照技术方案文档进行编码实现,完成后通过交叉校验确保实现与技术文档、需求文档完全一致。
|
|
20
|
+
|
|
21
|
+
## 前置条件
|
|
22
|
+
|
|
23
|
+
- issue 目录中必须存在已确认的 `technical-design.md`
|
|
24
|
+
- issue 目录中必须存在 `requirement.md`
|
|
25
|
+
|
|
26
|
+
如果前置条件不满足,提示用户先完成前置步骤。
|
|
27
|
+
|
|
28
|
+
## 工作流程
|
|
29
|
+
|
|
30
|
+
### 第 1 步:定位 Issue 并阅读上下文
|
|
31
|
+
|
|
32
|
+
1. 读取 `.issuekit/config.yaml` 中的 `issues_dir` 配置项,获取 Issue 文档存放目录(默认为 `issues`)
|
|
33
|
+
2. 定位 issue 目录(从 `$ARGUMENTS` 或当前 git 分支,issue 目录位于 `{issues_dir}/{issue-id}/`)
|
|
34
|
+
3. 阅读 `technical-design.md`,重点关注:
|
|
35
|
+
- 技术调研(关注调研的结论)
|
|
36
|
+
- 开发步骤(按顺序执行的实操指南)
|
|
37
|
+
- 组件设计(职责、关键逻辑、注意事项)
|
|
38
|
+
- 接口设计(路径、请求/响应、错误处理)
|
|
39
|
+
- 数据模型(表结构、SQL 脚本)
|
|
40
|
+
- 配置变更(新增/修改的配置项)
|
|
41
|
+
- 项目结构(新增/修改的文件清单)
|
|
42
|
+
4. 阅读 `requirement.md`,提取:
|
|
43
|
+
- 用户故事和流程
|
|
44
|
+
- 边界场景和处理方式
|
|
45
|
+
- 验收标准
|
|
46
|
+
5. 阅读项目编码约定 `.issuekit/knowledge/conventions.md`(如有)
|
|
47
|
+
|
|
48
|
+
### 第 2 步:按开发步骤编码
|
|
49
|
+
|
|
50
|
+
严格按照 `technical-design.md` 中"开发步骤"章节的顺序逐步实现:
|
|
51
|
+
|
|
52
|
+
1. 执行数据库变更(SQL 脚本)
|
|
53
|
+
2. 新增枚举/常量/DTO
|
|
54
|
+
3. 添加配置项
|
|
55
|
+
4. 按依赖顺序开发核心代码:
|
|
56
|
+
- 遵循技术文档中的组件设计(职责划分、关键逻辑)
|
|
57
|
+
- 接口实现与技术文档中的接口设计保持一致(路径、参数、响应格式、错误处理)
|
|
58
|
+
- 数据模型与技术文档中的表结构一致
|
|
59
|
+
5. 编写单元测试
|
|
60
|
+
6. 执行本地验证
|
|
61
|
+
|
|
62
|
+
**编码原则**:
|
|
63
|
+
- 技术文档是编码的"施工图纸",实现不应偏离设计
|
|
64
|
+
- 遵循项目编码规范(分层架构、命名约定、日志规范等)
|
|
65
|
+
- 如果编码过程中发现技术方案有缺陷或遗漏,先完成可实现的部分,在校验阶段统一记录
|
|
66
|
+
|
|
67
|
+
### 第 3 步:交叉校验 — 技术文档一致性
|
|
68
|
+
|
|
69
|
+
编码完成后,逐项对照 `technical-design.md` 校验实现:
|
|
70
|
+
|
|
71
|
+
| 校验维度 | 校验内容 |
|
|
72
|
+
|---------|---------|
|
|
73
|
+
| 组件设计 | 每个组件的职责、关键逻辑是否按设计实现 |
|
|
74
|
+
| 接口设计 | 请求路径、方法、参数、响应格式、错误处理是否一致 |
|
|
75
|
+
| 数据模型 | 表结构、字段、索引、数据初始化是否一致 |
|
|
76
|
+
| 核心流程 | 调用链、处理顺序是否与时序图一致 |
|
|
77
|
+
| 配置变更 | 配置项是否已添加,key/value 是否正确 |
|
|
78
|
+
| 项目结构 | 新增/修改的文件是否与清单一致 |
|
|
79
|
+
|
|
80
|
+
**对每个校验项**:
|
|
81
|
+
- ✅ 一致 → 通过
|
|
82
|
+
- ❌ 不一致 → 记录偏差,修复代码使其与设计一致
|
|
83
|
+
- ⚠️ 设计有缺陷 → 记录问题,按合理方式实现,标记需要回头更新技术文档
|
|
84
|
+
|
|
85
|
+
### 第 4 步:交叉校验 — 需求文档一致性
|
|
86
|
+
|
|
87
|
+
对照 `requirement.md` 校验功能实现:
|
|
88
|
+
|
|
89
|
+
| 校验维度 | 校验内容 |
|
|
90
|
+
|---------|---------|
|
|
91
|
+
| 用户故事 | 每个 US 的流程是否已完整实现 |
|
|
92
|
+
| 边界场景 | 表格中列出的每个边界场景是否已处理 |
|
|
93
|
+
| 验收标准 | 每条 AC 是否可通过当前实现满足 |
|
|
94
|
+
|
|
95
|
+
**对每个校验项**:
|
|
96
|
+
- ✅ 已实现 → 通过
|
|
97
|
+
- ❌ 未实现 → 补充实现
|
|
98
|
+
- ⚠️ 需求描述模糊导致无法判断 → 按合理默认值实现,标记提醒
|
|
99
|
+
|
|
100
|
+
### 第 5 步:修复偏差
|
|
101
|
+
|
|
102
|
+
根据第 3、4 步发现的不一致项,逐一修复:
|
|
103
|
+
|
|
104
|
+
1. 代码与技术文档不一致 → 修改代码对齐设计
|
|
105
|
+
2. 功能未覆盖需求 → 补充实现
|
|
106
|
+
3. 技术文档本身有缺陷 → 修改代码为合理实现,在报告中标记需更新技术文档
|
|
107
|
+
|
|
108
|
+
修复后重新执行校验,直到所有项目通过。
|
|
109
|
+
|
|
110
|
+
### 第 6 步:报告完成
|
|
111
|
+
|
|
112
|
+
向用户报告:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
编码完成 ✓
|
|
116
|
+
━━━━━━━━━━━━━━━━━━━━
|
|
117
|
+
技术文档校验:{N}/{Total} 通过
|
|
118
|
+
需求文档校验:{N}/{Total} 通过
|
|
119
|
+
|
|
120
|
+
新增文件:
|
|
121
|
+
- {文件列表}
|
|
122
|
+
|
|
123
|
+
修改文件:
|
|
124
|
+
- {文件列表}
|
|
125
|
+
|
|
126
|
+
{如有技术文档缺陷标记}
|
|
127
|
+
⚠️ 以下设计需要回头更新技术文档:
|
|
128
|
+
- {问题描述}
|
|
129
|
+
|
|
130
|
+
建议下一步:运行 /issuekit.test 制定测试方案
|
|
131
|
+
```
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 为 Issue 设计技术方案。技术调研、架构设计、接口设计、组件设计、开发步骤,一份文档涵盖完整技术方案。
|
|
3
|
+
handoffs:
|
|
4
|
+
- label: 开始编码
|
|
5
|
+
agent: issuekit.coding
|
|
6
|
+
prompt: 按技术方案开始编码实现
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 用户输入
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
$ARGUMENTS
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
用户可以指定 issue ID,也可以从当前 git 分支自动推断。
|
|
16
|
+
|
|
17
|
+
## 概述
|
|
18
|
+
|
|
19
|
+
本命令为 issue 生成一份完整的技术方案文档(`technical-design.md`),涵盖从技术调研到开发指南的全流程。
|
|
20
|
+
|
|
21
|
+
## 前置条件
|
|
22
|
+
|
|
23
|
+
- issue 目录中必须存在 `requirement.md`
|
|
24
|
+
- 需求状态应为"已确认"(待确认问题已解决)
|
|
25
|
+
|
|
26
|
+
如果前置条件不满足,提示用户先运行 `/issuekit.require` 或解决待确认问题。
|
|
27
|
+
|
|
28
|
+
## 工作流程
|
|
29
|
+
|
|
30
|
+
### 第 1 步:定位 Issue
|
|
31
|
+
|
|
32
|
+
1. 如果 `$ARGUMENTS` 中包含 issue ID,直接使用
|
|
33
|
+
2. 否则从当前 git 分支名提取(例如 `feature/FEAT-20260305-xxx` → `FEAT-20260305-xxx`)
|
|
34
|
+
3. 读取 `.issuekit/config.yaml` 中的 `issues_dir` 配置项,获取 Issue 文档存放目录(默认为 `issues`)
|
|
35
|
+
4. 验证 `{issues_dir}/{issue-id}/requirement.md` 存在
|
|
36
|
+
|
|
37
|
+
### 第 2 步:阅读上下文
|
|
38
|
+
|
|
39
|
+
1. 阅读 `requirement.md` 获取已确认的需求、用户故事、验收标准
|
|
40
|
+
2. 阅读项目知识摘要 `.issuekit/knowledge/`(如有)
|
|
41
|
+
3. 阅读项目编码约定 `.issuekit/knowledge/conventions.md`(如有)
|
|
42
|
+
4. 深入分析相关代码的当前实现:
|
|
43
|
+
- 沿所有受影响的调用链阅读源码
|
|
44
|
+
- 理解现有数据模型和数据库结构
|
|
45
|
+
- 检查当前配置和功能开关
|
|
46
|
+
- 找到可复用的现有模式
|
|
47
|
+
|
|
48
|
+
### 第 3 步:技术调研
|
|
49
|
+
|
|
50
|
+
识别方案中的技术未知项和关键决策点,逐一调研并记录结论:
|
|
51
|
+
|
|
52
|
+
1. **提取未知项**:从需求和代码分析中识别需要调研的点
|
|
53
|
+
- 不熟悉的技术/SDK 用法
|
|
54
|
+
- 多种实现方式的技术选型
|
|
55
|
+
- 外部依赖的能力和限制
|
|
56
|
+
- 性能/规模方面的不确定性
|
|
57
|
+
|
|
58
|
+
2. **调研并决策**:针对每个未知项
|
|
59
|
+
- 搜索文档/源码/最佳实践
|
|
60
|
+
- 明确选择了什么方案
|
|
61
|
+
- 为什么选这个、考虑了哪些替代方案
|
|
62
|
+
|
|
63
|
+
3. 如果没有技术未知项(方案清晰明确),可跳过此步骤并在文档中注明。
|
|
64
|
+
|
|
65
|
+
### 第 4 步:方案设计
|
|
66
|
+
|
|
67
|
+
完成完整的技术方案设计:
|
|
68
|
+
|
|
69
|
+
1. **整体架构**:架构层面的实现决策,Mermaid 架构图
|
|
70
|
+
2. **核心流程**:关键处理路径的 Mermaid sequenceDiagram / flowchart
|
|
71
|
+
3. **组件设计**:每个新增/修改的核心组件
|
|
72
|
+
- 职责说明
|
|
73
|
+
- 关键逻辑(处理流程、校验规则、状态变更)
|
|
74
|
+
- 需要注意的特殊点
|
|
75
|
+
4. **接口设计**:每个新增/修改的接口
|
|
76
|
+
- 请求路径、方法、Headers
|
|
77
|
+
- 请求体/响应体的完整 JSON 示例
|
|
78
|
+
- 错误处理表(场景 → 处理方式 → 日志级别)
|
|
79
|
+
- 处理流程(文字或 Mermaid flowchart)
|
|
80
|
+
5. **数据模型**:新增/修改的表结构、字段、索引、SQL 脚本
|
|
81
|
+
6. **配置变更**:配置文件的新增/修改项
|
|
82
|
+
7. **项目结构**:列出所有新增/修改的文件,标注模块和变更类型
|
|
83
|
+
|
|
84
|
+
### 第 5 步:影响分析与风险评估
|
|
85
|
+
|
|
86
|
+
1. **功能影响**:哪些现有功能受影响,需要回归测试
|
|
87
|
+
2. **性能影响**:QPS 预估、查询复杂度、缓存策略
|
|
88
|
+
3. **兼容性**:接口/数据/客户端版本兼容性
|
|
89
|
+
4. **风险清单**:每个风险的概率、影响和应对措施
|
|
90
|
+
|
|
91
|
+
### 第 6 步:开发步骤
|
|
92
|
+
|
|
93
|
+
按执行顺序列出开发实施步骤,作为开发者的实操指南:
|
|
94
|
+
- 数据库变更(SQL 脚本)
|
|
95
|
+
- 枚举/常量新增
|
|
96
|
+
- 配置项添加
|
|
97
|
+
- 核心代码开发(按依赖顺序)
|
|
98
|
+
- 单元测试编写
|
|
99
|
+
- 本地验证方法
|
|
100
|
+
- 集成验证方法
|
|
101
|
+
|
|
102
|
+
### 第 7 步:生成技术方案文档
|
|
103
|
+
|
|
104
|
+
加载模板 `.issuekit/templates/technical-design.md` 并填充所有章节。
|
|
105
|
+
|
|
106
|
+
关键要求:
|
|
107
|
+
- 所有代码位置必须使用可点击链接:`[Class#method](path/File.java)`(相对项目根目录)
|
|
108
|
+
- 使用 Mermaid 图表展示架构、时序流程和类关系
|
|
109
|
+
- 接口设计要包含完整的请求/响应 JSON 示例和错误处理表
|
|
110
|
+
- 组件设计要具体到关键逻辑,不能只写职责概述
|
|
111
|
+
- 开发步骤要可直接按顺序执行
|
|
112
|
+
|
|
113
|
+
### 第 8 步:写入文件并报告
|
|
114
|
+
|
|
115
|
+
1. 将 `technical-design.md` 写入 issue 目录
|
|
116
|
+
2. 报告完成并建议下一步:`/issuekit.coding`
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 分析当前项目,生成结构化的上下文知识摘要到 .issuekit/knowledge/,供其他 issuekit 命令使用。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
本命令分析当前项目的代码、配置和结构,生成一系列知识摘要文件。这些摘要让 AI Agent 在执行需求分析、技术方案设计等任务时,能快速理解项目上下文,而无需每次从零扫描。
|
|
8
|
+
|
|
9
|
+
**输出目录**: `.issuekit/knowledge/`
|
|
10
|
+
|
|
11
|
+
## 工作流程
|
|
12
|
+
|
|
13
|
+
### 第 1 步:检测项目类型
|
|
14
|
+
|
|
15
|
+
自动识别项目的技术栈和构建系统:
|
|
16
|
+
|
|
17
|
+
1. 扫描项目根目录的构建/配置文件:
|
|
18
|
+
- `pom.xml` / `build.gradle` → Java/Kotlin
|
|
19
|
+
- `package.json` → JavaScript/TypeScript
|
|
20
|
+
- `go.mod` → Go
|
|
21
|
+
- `requirements.txt` / `pyproject.toml` / `setup.py` → Python
|
|
22
|
+
- `Cargo.toml` → Rust
|
|
23
|
+
- `*.csproj` / `*.sln` → C#/.NET
|
|
24
|
+
- 其他构建文件 → 按实际情况处理
|
|
25
|
+
2. 读取依赖配置,提取所有依赖及版本
|
|
26
|
+
3. 读取应用配置文件(如 application.yml, .env, config/ 等)识别中间件和外部服务
|
|
27
|
+
|
|
28
|
+
### 第 2 步:项目概览
|
|
29
|
+
|
|
30
|
+
生成 `.issuekit/knowledge/project-overview.md`:
|
|
31
|
+
|
|
32
|
+
- 项目名称和简要描述(从 README 或配置推断)
|
|
33
|
+
- 目录结构树(关键目录 + 一句话说明)
|
|
34
|
+
- 技术栈表格(类别 | 技术 | 版本 | 用途)
|
|
35
|
+
- 代码规模统计(按语言/模块的文件数和行数)
|
|
36
|
+
- Git 活跃度(近 6 个月的提交频率、主要贡献者)
|
|
37
|
+
|
|
38
|
+
### 第 3 步:架构分析
|
|
39
|
+
|
|
40
|
+
生成 `.issuekit/knowledge/architecture.md`:
|
|
41
|
+
|
|
42
|
+
- 分层架构(识别项目的层级划分,如 Controller/Service/DAO 或其他模式)
|
|
43
|
+
- 每层的职责描述
|
|
44
|
+
- 模块间依赖关系(Mermaid 图)
|
|
45
|
+
- 设计模式识别(策略、工厂、适配器等,标注使用位置)
|
|
46
|
+
- 横切关注点(缓存、事务、异常处理、配置管理、安全/认证)
|
|
47
|
+
|
|
48
|
+
### 第 4 步:API 接口摘要
|
|
49
|
+
|
|
50
|
+
生成 `.issuekit/knowledge/api-surface.md`:
|
|
51
|
+
|
|
52
|
+
- 扫描所有 API 端点(HTTP 路由、gRPC 服务、GraphQL schema 等)
|
|
53
|
+
- 按业务模块分组
|
|
54
|
+
- 每个端点:方法、路径、简要说明
|
|
55
|
+
- 请求/响应的通用约定(统一返回体、错误码规范、参数校验方式)
|
|
56
|
+
- API 数量统计(按模块分布饼图)
|
|
57
|
+
|
|
58
|
+
### 第 5 步:数据模型摘要
|
|
59
|
+
|
|
60
|
+
生成 `.issuekit/knowledge/data-model.md`:
|
|
61
|
+
|
|
62
|
+
- 扫描 ORM 实体/模型定义
|
|
63
|
+
- 如果有 MCP 数据库连接可用:
|
|
64
|
+
1. 先验证该数据库连接与当前项目相关(检查 MCP 的数据库连接字符串中的数据库名称、主机等信息,与项目配置文件中的数据库配置做比对)
|
|
65
|
+
2. 如果确认相关,查询实际表结构
|
|
66
|
+
3. 如果无法确认相关性或明确不相关,跳过数据库查询并在文档中注明"未使用 MCP 数据库查询:无法确认数据库连接与当前项目相关",避免不相关的数据库信息误导后续分析
|
|
67
|
+
- 按业务域分组列出表/实体
|
|
68
|
+
- 核心表的关系图(Mermaid erDiagram)
|
|
69
|
+
- 标注实体类在代码中的位置
|
|
70
|
+
|
|
71
|
+
### 第 6 步:外部集成摘要
|
|
72
|
+
|
|
73
|
+
生成 `.issuekit/knowledge/integrations.md`:
|
|
74
|
+
|
|
75
|
+
- 识别所有外部服务集成(SDK、REST API、gRPC、消息队列、缓存等)
|
|
76
|
+
- 每个集成:服务名、集成方式、适配类/客户端位置、配置项
|
|
77
|
+
- 外部依赖拓扑图(Mermaid flowchart)
|
|
78
|
+
|
|
79
|
+
### 第 7 步:编码约定摘要
|
|
80
|
+
|
|
81
|
+
生成 `.issuekit/knowledge/conventions.md`:
|
|
82
|
+
|
|
83
|
+
- 从现有代码推断编码风格和约定
|
|
84
|
+
- 命名约定(类名、方法名、变量名、数据库表/列)
|
|
85
|
+
- 日志使用方式
|
|
86
|
+
- 错误处理模式
|
|
87
|
+
- 如果项目已有规范文件(如 .cursor/rules/, .editorconfig, linter 配置),整合其内容
|
|
88
|
+
|
|
89
|
+
### 第 8 步:报告完成
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
知识库更新完成 ✓
|
|
93
|
+
━━━━━━━━━━━━━━━━━━━━
|
|
94
|
+
生成文件:
|
|
95
|
+
- .issuekit/knowledge/project-overview.md
|
|
96
|
+
- .issuekit/knowledge/architecture.md
|
|
97
|
+
- .issuekit/knowledge/api-surface.md
|
|
98
|
+
- .issuekit/knowledge/data-model.md
|
|
99
|
+
- .issuekit/knowledge/integrations.md
|
|
100
|
+
- .issuekit/knowledge/conventions.md
|
|
101
|
+
|
|
102
|
+
后续命令(如 /issuekit.require、/issuekit.design)将自动读取这些知识摘要。
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## AI 执行指南
|
|
106
|
+
|
|
107
|
+
### 通用化原则
|
|
108
|
+
|
|
109
|
+
- 不假设任何特定的语言或框架,根据实际项目自适应
|
|
110
|
+
- 如果某个步骤不适用(如项目无数据库),跳过并注明
|
|
111
|
+
- 优先使用 Mermaid 图表,文字作为补充
|
|
112
|
+
- 所有关键入口使用可点击的相对路径链接
|
|
113
|
+
|
|
114
|
+
### 增量更新
|
|
115
|
+
|
|
116
|
+
- 如果知识文件已存在,对比后仅更新有变化的部分
|
|
117
|
+
- 在每个文件末尾记录最后更新时间
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 准备发布文档并创建 Pull Request。分析代码变更,对比技术方案,生成部署指南。
|
|
3
|
+
handoffs:
|
|
4
|
+
- label: 代码审核
|
|
5
|
+
agent: issuekit.review
|
|
6
|
+
prompt: 审核这个 issue 的代码
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 用户输入
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
$ARGUMENTS
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 概述
|
|
16
|
+
|
|
17
|
+
本命令生成发布文档并创建 Pull Request。分析特性分支上的所有代码变更,对比技术方案,生成部署指南。
|
|
18
|
+
|
|
19
|
+
## 前置条件
|
|
20
|
+
|
|
21
|
+
- 开发和测试已完成
|
|
22
|
+
- 代码已提交到特性分支
|
|
23
|
+
- issue 目录中存在 `technical-design.md` 和 `test-plan.md`
|
|
24
|
+
|
|
25
|
+
## 工作流程
|
|
26
|
+
|
|
27
|
+
### 第 1 步:定位 Issue 并分析变更
|
|
28
|
+
|
|
29
|
+
1. 读取 `.issuekit/config.yaml` 中的 `issues_dir` 配置项,获取 Issue 文档存放目录(默认为 `issues`)
|
|
30
|
+
2. 定位 issue 目录(从 `$ARGUMENTS` 或当前分支)
|
|
31
|
+
3. 运行 `git diff master...HEAD` 收集所有代码变更
|
|
32
|
+
4. 运行 `git log master..HEAD --oneline` 列出所有提交
|
|
33
|
+
|
|
34
|
+
### 第 2 步:阅读上下文
|
|
35
|
+
|
|
36
|
+
1. 阅读 `technical-design.md` 获取设计方案
|
|
37
|
+
2. 阅读 `test-plan.md` 获取测试覆盖和结果
|
|
38
|
+
3. 阅读 `requirement.md` 获取原始需求
|
|
39
|
+
|
|
40
|
+
### 第 3 步:对比方案与实际实现
|
|
41
|
+
|
|
42
|
+
将技术方案与实际代码变更对比:
|
|
43
|
+
- 识别已实现的项目
|
|
44
|
+
- 标记偏离设计的地方
|
|
45
|
+
- 记录计划外的变更
|
|
46
|
+
|
|
47
|
+
### 第 4 步:生成发布文档
|
|
48
|
+
|
|
49
|
+
加载模板 `.issuekit/templates/release-note.md` 并填充所有章节:
|
|
50
|
+
|
|
51
|
+
- 变更概述
|
|
52
|
+
- 需求变更汇总
|
|
53
|
+
- 详细变更清单(功能、接口、数据库、配置)
|
|
54
|
+
- 影响范围
|
|
55
|
+
- 部署步骤(有序检查清单)
|
|
56
|
+
- 回滚方案
|
|
57
|
+
- 监控与告警
|
|
58
|
+
- 发布后验证
|
|
59
|
+
|
|
60
|
+
### 第 5 步:创建 Pull Request
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git push -u origin HEAD
|
|
64
|
+
gh pr create --title "{Issue ID}: {摘要}" --body "$(cat <<'EOF'
|
|
65
|
+
## 概述
|
|
66
|
+
{发布文档中的关键变更}
|
|
67
|
+
|
|
68
|
+
## 变更清单
|
|
69
|
+
{变更列表}
|
|
70
|
+
|
|
71
|
+
## 测试情况
|
|
72
|
+
{测试覆盖摘要}
|
|
73
|
+
|
|
74
|
+
## 部署说明
|
|
75
|
+
{部署步骤(如有)}
|
|
76
|
+
|
|
77
|
+
## 相关文档
|
|
78
|
+
- 需求文档:{issues_dir}/{issue-id}/requirement.md
|
|
79
|
+
- 技术方案:{issues_dir}/{issue-id}/technical-design.md
|
|
80
|
+
- 测试方案:{issues_dir}/{issue-id}/test-plan.md
|
|
81
|
+
- 发布文档:{issues_dir}/{issue-id}/release-note.md
|
|
82
|
+
|
|
83
|
+
EOF
|
|
84
|
+
)"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 第 6 步:写入文件并报告
|
|
88
|
+
|
|
89
|
+
1. 将 `release-note.md` 写入 issue 目录
|
|
90
|
+
2. 报告 PR 链接并建议下一步:`/issuekit.review`
|