Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Once setup, you can start coding with Claude Code:

### AST-Driven Coding Workflow

[`.claude/hooks`](internal/utils/assets/.claude/hooks) provide a 4-layer analysis chain from repository to node details:
[`.claude/hooks`](internal/cmd/assets/.claude/hooks) provide a 4-layer analysis chain from repository to node details:

```
list_repos → get_repo_structure → get_package_structure → get_file_structure → get_ast_node
Expand All @@ -72,13 +72,13 @@ list_repos → get_repo_structure → get_package_structure → get_file_structu

### Claude Code Slash Commands

[`.claude/commands`](internal/utils/assets/.claude/commands) provide three custom slash commands to streamline development:
[`.claude/commands`](internal/cmd/assets/.claude/commands) provide three custom slash commands to streamline development:

| Command | Function | Description |
|---------|----------|-------------|
| [`/abcoder:schedule` <task_desc>](internal/utils/assets/.claude/commands/schedule.md) | Design implementation | Analyze codebase by using ABCoder, design technical solution |
| [`/abcoder:task <name>`](internal/utils/assets/.claude/commands/task.md) | Create coding task | Generate standardized CODE_TASK document |
| [`/abcoder:recheck <task>`](internal/utils/assets/.claude/commands/recheck.md) | Verify solution | Critically check CODE_TASK feasibility, useful when a CODE_TASK contains external dependencies |
| [`/abcoder:schedule` <task_desc>](internal/cmd/assets/.claude/commands/abcoder/schedule.md) | Design implementation | Analyze codebase by using ABCoder, design technical solution |
| [`/abcoder:task <name>`](internal/cmd/assets/.claude/commands/abcoder/task.md) | Create coding task | Generate standardized CODE_TASK document |
| [`/abcoder:recheck <task>`](internal/cmd/assets/.claude/commands/abcoder/recheck.md) | Verify solution | Critically check CODE_TASK feasibility, useful when a CODE_TASK contains external dependencies |

### Workflow

Expand All @@ -102,11 +102,11 @@ Start coding(sub-agent) ─────────→ Execute Implementation

| File | Purpose |
|------|---------|
| [`CLAUDE.md`](internal/utils/assets/.claude/CLAUDE.md) | Core AST-Driven Coder role definition |
| [`settings.json`](internal/utils/assets/.claude/settings.json) | Hooks and permissions configuration |
| [`hooks/`](internal/utils/assets/.claude/hooks/) | Automation scripts (parse/prompt/reminder) |
| [`commands/`](internal/utils/assets/.claude/commands/) | Slash command definitions (abcoder:task/abcoder:schedule/abcoder:recheck) |
| [`tmpls/ABCODER_CODE_TASK.md`](internal/utils/assets/.claude/tmpls/ABCODER_CODE_TASK.md) | Coding task template |
| [`CLAUDE.md`](internal/cmd/assets/.claude/CLAUDE.md) | Core AST-Driven Coder role definition |
| [`settings.json`](internal/cmd/assets/.claude/settings.json) | Hooks and permissions configuration |
| [`hooks/`](internal/cmd/assets/.claude/hooks/) | Automation scripts (parse/prompt/reminder) |
| [`commands/`](internal/cmd/assets/.claude/commands/) | Slash command definitions (abcoder:task/abcoder:schedule/abcoder:recheck) |
| [`tmpls/ABCODER_CODE_TASK.md`](internal/cmd/assets/.claude/tmpls/ABCODER_CODE_TASK.md) | Coding task template |

### Dependencies

Expand Down
4 changes: 2 additions & 2 deletions docs/claude-code-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,5 +123,5 @@ coding-executor ──────→ 执行实现

## 相关文档

- [hooks/README.md](../internal/utils/assets/.claude/hooks/README.md) - 钩子系统详解
- [commands/README.md](../internal/utils/assets/.claude/commands/README.md) - 斜杠命令详解
- [hooks/README.md](../internal/cmd/assets/.claude/hooks/README.md) - 钩子系统详解
- [commands/README.md](../internal/cmd/assets/.claude/commands/README.md) - 斜杠命令详解
32 changes: 32 additions & 0 deletions internal/cmd/assets/.claude/commands/abcoder/recheck.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: ABCoder: Recheck
description: Validate CODE_TASK technical feasibility with critical analysis using mcp__abcoder.
category: ABCoder
tags: [abcoder, recheck, validation]
---
从原始需求出发,使用 mcp__abcoder 进行批判性分析,以验证 CODE_TASK 的技术可行性。

<!-- ABCODER:START -->
**Guardrails**
- 批判性思考,保持诚实:确保方案可实现需求、无技术风险、最大化复用已有功能、最小化改动。
- 严格使用 `mcp__abcoder` 验证技术细节,禁止假设。
- 下钻到 `mcp__abcoder__get_ast_node` 粒度进行验证。

**Steps**
Track these steps as TODOs and complete them one by one.
1. 从 `mcp__abcoder__get_repo_structure` 开始,获取目标仓库结构。
2. 定位相关的 package 和 node。
3. 使用 `mcp__abcoder__get_ast_node` 深入分析相关代码节点,验证方案的可行性。
4. 检查方案是否可以实现 CODE_TASK 中的所有需求。
5. 识别并报告任何潜在的技术风险。
6. 验证是否最大化复用了已有功能,是否最小化了改动。
7. 如发现问题,提出具体的修改建议或后续问题。
8. 总结分析结果,明确指出方案是否可以执行。

**Reference**
- `mcp__abcoder__list_repos` - 列出所有可用仓库
- `mcp__abcoder__get_repo_structure` - 获取仓库结构(必须作为第一步)
- `mcp__abcoder__get_package_structure` - 获取 package 结构
- `mcp__abcoder__get_file_structure` - 获取文件结构
- `mcp__abcoder__get_ast_node` - 获取 AST 节点详情(下钻验证)
<!-- ABCODER:END -->
34 changes: 34 additions & 0 deletions internal/cmd/assets/.claude/commands/abcoder/schedule.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: ABCoder: Schedule
description: Design implementation plan using mcp__abcoder analysis and code exploration.
category: ABCoder
tags: [abcoder, schedule, planning]
---
使用mcp__abcoder分析相关仓库(下钻到mcp__abcoder__get_ast_node查看细节),帮助用户设计实现方案。

<!-- ABCODER:START -->
**Guardrails**
- 最大化复用项目已有功能,避免重复造轮子。
- 优先采用直接、最小改动的实现方式,只有在用户明确要求时才增加复杂度。
- 严格限制修改影响面在所请求的结果范围内。
- 找出任何模糊或含糊不清的细节,并在修改文件前提出必要的后续问题。
- 在 Schedule 阶段禁止编写代码,禁止使用 agent。

**Steps**
Track these steps as TODOs and complete them one by one.
1. 从 `mcp__abcoder__get_repo_structure` 开始,获取目标仓库结构。
2. 根据任务描述,定位相关的 package。
3. 使用 `mcp__abcoder__get_package_structure` 获取 package 内的文件和节点列表。
4. 使用 `mcp__abcoder__get_ast_node` 深入分析相关代码节点,理解现有实现模式。
5. 分析依赖关系、调用链、类型信息等。
6. 设计实现方案,确保最大化复用已有功能、最小化改动。
7. 找出任何模糊或缺失的技术细节,并向用户提出后续问题。
8. 输出清晰的技术方案,包括修改范围、涉及的文件、关键实现步骤。

**Reference**
- `mcp__abcoder__list_repos` - 列出所有可用仓库
- `mcp__abcoder__get_repo_structure` - 获取仓库结构(必须作为第一步)
- `mcp__abcoder__get_package_structure` - 获取 package 结构
- `mcp__abcoder__get_file_structure` - 获取文件结构
- `mcp__abcoder__get_ast_node` - 获取 AST 节点详情(下钻分析)
<!-- ABCODER:END -->
32 changes: 32 additions & 0 deletions internal/cmd/assets/.claude/commands/abcoder/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: ABCoder: Task
description: Create a SPEC-driven CODE_TASK document from task context.
category: ABCoder
tags: [abcoder, task, creation]
---
根据任务上下文创建一个由 SPEC 驱动的 CODE_TASK 文档。

<!-- ABCODER:START -->
**Guardrails**
- 必须提供任务名称,格式为 `/task <任务名称>`。若未提供,根据任务上下文推荐一个名词(确保清晰、简洁)。
- 文件路径使用 `./task/{{MMDD}}/{{NAME}}__CODE_TASK.md` 格式。
- 严格遵循 CODE_TASK 模板格式和要求。
- 清晰列出所有外部依赖包名称(如有)。
- 创建完成后停止操作,不进行额外工作。

**Steps**
Track these steps as TODOs and complete them one by one.
1. 验证用户提供了任务名称,如未提供则提示使用格式 `/task <任务名称>`。
2. 执行 `d=$(date +%m%d) && mkdir -p "./task/$d/"` 创建 `./task/{{MMDD}}/` 目录。
3. 读取模板文件 `/Users/bytedance/github/github.com/cloudwego/abcoder/.claude/tmpls/ABCODER_CODE_TASK.md`。
4. 根据任务上下文和名称,按照模板格式填充内容,生成新文件 `./task/{{MMDD}}/{{NAME}}__CODE_TASK.md`。
5. 检查并清晰列出 CODE_TASK 包含的外部依赖包(如有)。
6. 验证生成的文件格式正确,包含所有必要字段。
7. 告知用户文件已创建成功,包含文件路径和外部依赖信息(如有),停止操作。

**Reference**
- 模板文件:`/Users/bytedance/github/github.com/cloudwego/abcoder/.claude/tmpls/ABCODER_CODE_TASK.md`
- 示例:
- `/task Feature_Auth` → 创建 `./task/1013/Feature_Auth__CODE_TASK.md`
- `/task Bugfix-Api` → 创建 `./task/1013/Bugfix_Api__CODE_TASK.md`
<!-- ABCODER:END -->
20 changes: 6 additions & 14 deletions internal/utils/cmd_init_spec.go → internal/cmd/init_spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package utils
package cmd

import (
"embed"
Expand Down Expand Up @@ -113,6 +113,11 @@ func copyEmbeddedDir(srcPath string, destDir string, projectRootDir string) erro
return err
}

// Skip README.md files
if strings.HasSuffix(path, "README.md") {
return nil
}

// Skip the root directory itself
if relPath == "." {
return nil
Expand All @@ -131,19 +136,6 @@ func copyEmbeddedDir(srcPath string, destDir string, projectRootDir string) erro
return fmt.Errorf("failed to create parent directory %s: %w", parentDir, err)
}

// Rename command files with abcoder: prefix
if strings.HasPrefix(relPath, "commands/") {
baseName := filepath.Base(relPath)
switch baseName {
case "recheck.md":
destPath = filepath.Join(filepath.Dir(destPath), "abcoder:recheck.md")
case "schedule.md":
destPath = filepath.Join(filepath.Dir(destPath), "abcoder:schedule.md")
case "task.md":
destPath = filepath.Join(filepath.Dir(destPath), "abcoder:task.md")
}
}

// Copy file
data, err := claudeFS.ReadFile(path)
if err != nil {
Expand Down
10 changes: 0 additions & 10 deletions internal/utils/assets/.claude/commands/recheck.md

This file was deleted.

13 changes: 0 additions & 13 deletions internal/utils/assets/.claude/commands/schedule.md

This file was deleted.

19 changes: 0 additions & 19 deletions internal/utils/assets/.claude/commands/task.md

This file was deleted.

5 changes: 3 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import (
"path/filepath"
"strings"

interutils "github.com/cloudwego/abcoder/internal/utils"
internalCmd "github.com/cloudwego/abcoder/internal/cmd"
"github.com/cloudwego/abcoder/lang"
"github.com/cloudwego/abcoder/lang/log"
"github.com/cloudwego/abcoder/lang/uniast"
Expand All @@ -48,6 +48,7 @@ import (
"github.com/cloudwego/abcoder/llm/mcp"
"github.com/cloudwego/abcoder/llm/tool"
"github.com/cloudwego/abcoder/version"

"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -309,7 +310,7 @@ The command will:
uri = args[0]
}

if err := interutils.RunInitSpec(uri); err != nil {
if err := internalCmd.RunInitSpec(uri); err != nil {
log.Error("Failed to init-spec: %v\n", err)
return err
}
Expand Down
Loading