gsd-trae 1.0.2 → 1.1.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/CHANGELOG.md +26 -0
- package/README.md +21 -45
- package/bin/cli.js +22 -6
- package/install.sh +48 -33
- package/package.json +8 -3
- package/uninstall.sh +83 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.1.1] - 2026-03-16
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- 安装完成后的提示信息改为"在 Trae 中与 SOLO Coder 聊天时输入"
|
|
14
|
+
|
|
15
|
+
## [1.1.0] - 2026-03-16
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- 新增 `uninstall.sh` 卸载脚本,支持完整清理 GSD 安装
|
|
19
|
+
- CLI 支持 `uninstall` / `--uninstall` / `-u` 命令
|
|
20
|
+
- 安装时自动创建 `~/.gsdc` 符号链接,统一命令访问路径,减少 token 消耗
|
|
21
|
+
- 安装时自动备份已存在的 `project_rules.md`(带时间戳)
|
|
22
|
+
- 添加端到端测试(vitest),覆盖安装/卸载完整流程
|
|
23
|
+
- 新增 `gsd-agents.md` 和 `gsd-references.md` 文档
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- `project_rules.md` 改为渐进式披露结构,核心指令优先展示
|
|
27
|
+
- 改进 `install.sh` 目录处理,使用子 shell 避免副作用
|
|
28
|
+
- 修复 CLI 工作目录问题,确保在正确目录执行脚本
|
|
29
|
+
- `uninstall.sh` 包含在 npm 包中
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- 修复 `cli.js` 未正确传递 `cwd` 导致安装到错误目录的问题
|
|
33
|
+
|
|
8
34
|
## [1.0.2] - 2026-02-26
|
|
9
35
|
|
|
10
36
|
### Changed
|
package/README.md
CHANGED
|
@@ -34,34 +34,19 @@ GSD 通过流程约束解决了**上下文衰减(Context Rot)**问题——
|
|
|
34
34
|
在项目根目录运行:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
npx gsd-trae
|
|
37
|
+
npx -y gsd-trae@latest
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
###
|
|
41
|
-
|
|
42
|
-
在项目根目录运行:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
bash <(curl -s https://raw.githubusercontent.com/Lionad-Morotar/get-shit-done-trae/main/install.sh)
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 方式三:手动安装
|
|
49
|
-
|
|
50
|
-
1. 克隆本仓库到固定位置:
|
|
40
|
+
### 卸载
|
|
51
41
|
|
|
52
42
|
```bash
|
|
53
|
-
|
|
43
|
+
npx -y gsd-trae@latest uninstall
|
|
54
44
|
```
|
|
55
45
|
|
|
56
|
-
2. 运行安装脚本:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
bash ~/.config/gsd-trae/install.sh
|
|
60
|
-
```
|
|
61
46
|
|
|
62
47
|
### 开始工作
|
|
63
48
|
|
|
64
|
-
安装完成后,在 Trae 的 AI
|
|
49
|
+
安装完成后,在 Trae 的 AI 对话中输入 GSD 指令即可开始。以下是一个示例:
|
|
65
50
|
|
|
66
51
|
```
|
|
67
52
|
/gsd:new-project
|
|
@@ -69,19 +54,15 @@ bash ~/.config/gsd-trae/install.sh
|
|
|
69
54
|
|
|
70
55
|

|
|
71
56
|
|
|
72
|
-
##
|
|
57
|
+
## 工作流程
|
|
73
58
|
|
|
74
|
-
|
|
75
|
-
| ---------------------- | ----------------------------------------- |
|
|
76
|
-
| `/gsd:new-project` | 初始化新项目:提问 → 研究 → 需求 → 路线图 |
|
|
77
|
-
| `/gsd:discuss-phase N` | 收集第 N 阶段的上下文 |
|
|
78
|
-
| `/gsd:plan-phase N` | 为第 N 阶段创建详细计划 |
|
|
79
|
-
| `/gsd:execute-phase N` | 执行第 N 阶段的所有计划 |
|
|
80
|
-
| `/gsd:verify-work` | 验证交付物是否符合要求 |
|
|
81
|
-
| `/gsd:progress` | 检查项目进度 |
|
|
82
|
-
| `/gsd:map-codebase` | 分析现有代码库 |
|
|
59
|
+
### 从已有代码开始(Brownfield)
|
|
83
60
|
|
|
84
|
-
|
|
61
|
+
```
|
|
62
|
+
/gsd:map-codebase # 先分析现有代码
|
|
63
|
+
↓
|
|
64
|
+
/gsd:new-project # 基于现有上下文规划新功能
|
|
65
|
+
```
|
|
85
66
|
|
|
86
67
|
### 新项目(Greenfield)
|
|
87
68
|
|
|
@@ -97,27 +78,22 @@ bash ~/.config/gsd-trae/install.sh
|
|
|
97
78
|
进入 Phase 2...
|
|
98
79
|
```
|
|
99
80
|
|
|
100
|
-
### 已有代码(Brownfield)
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
/gsd:map-codebase # 先分析现有代码
|
|
104
|
-
↓
|
|
105
|
-
/gsd:new-project # 基于现有上下文规划新功能
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## 参考
|
|
109
|
-
|
|
110
|
-
- [GSD 原项目](https://github.com/glittercowboy/get-shit-done) - 官方仓库
|
|
111
|
-
|
|
112
81
|
## 工作原理
|
|
113
82
|
|
|
114
83
|
安装脚本 `install.sh` 会执行以下操作:
|
|
115
84
|
|
|
116
85
|
1. 将 GSD 源文件克隆到 `~/.gsd-source`
|
|
117
|
-
2.
|
|
118
|
-
3.
|
|
86
|
+
2. 创建符号链接 `~/.gsdc` → `~/.gsd-source/commands/gsd`
|
|
87
|
+
3. 在当前项目创建 `.trae/rules/project_rules.md`
|
|
119
88
|
|
|
120
|
-
|
|
89
|
+
这样:
|
|
90
|
+
- 多个项目共享同一份 GSD 源文件
|
|
91
|
+
- 通过 `~/.gsdc/{command}.md` 统一访问命令文档
|
|
92
|
+
- 每个项目有自己的 Trae 规则配置
|
|
93
|
+
|
|
94
|
+
## Reference
|
|
95
|
+
|
|
96
|
+
- [GSD 原项目](https://github.com/glittercowboy/get-shit-done) - 官方仓库
|
|
121
97
|
|
|
122
98
|
## 许可证
|
|
123
99
|
|
package/bin/cli.js
CHANGED
|
@@ -3,11 +3,27 @@
|
|
|
3
3
|
const { execSync } = require('child_process');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const command = args[0];
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const scriptDir = path.join(__dirname, '..');
|
|
10
|
+
|
|
11
|
+
const userCwd = process.cwd();
|
|
12
|
+
|
|
13
|
+
if (command === 'uninstall' || command === '--uninstall' || command === '-u') {
|
|
14
|
+
const uninstallScript = path.join(scriptDir, 'uninstall.sh');
|
|
15
|
+
try {
|
|
16
|
+
execSync(`bash "${uninstallScript}"`, { stdio: 'inherit', cwd: userCwd });
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error('卸载失败:', error.message);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
const installScript = path.join(scriptDir, 'install.sh');
|
|
23
|
+
try {
|
|
24
|
+
execSync(`bash "${installScript}"`, { stdio: 'inherit', cwd: userCwd });
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.error('安装失败:', error.message);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
13
29
|
}
|
package/install.sh
CHANGED
|
@@ -18,52 +18,63 @@ if [ ! -d "$GSD_SOURCE/.git" ]; then
|
|
|
18
18
|
git clone --depth 1 "$GSD_REPO" "$GSD_SOURCE" >/dev/null 2>&1
|
|
19
19
|
else
|
|
20
20
|
echo "📥 更新 GSD 源文件..."
|
|
21
|
-
cd "$GSD_SOURCE" && git pull >/dev/null 2>&1
|
|
21
|
+
(cd "$GSD_SOURCE" && git pull >/dev/null 2>&1)
|
|
22
22
|
fi
|
|
23
23
|
|
|
24
|
-
# 2.
|
|
24
|
+
# 2. 创建 ~/.gsdc 符号链接(指向 ~/.gsd-source/commands/gsd)
|
|
25
|
+
GSDC_PATH="$HOME/.gsdc"
|
|
26
|
+
if [ -L "$GSDC_PATH" ]; then
|
|
27
|
+
rm "$GSDC_PATH"
|
|
28
|
+
elif [ -e "$GSDC_PATH" ]; then
|
|
29
|
+
rm -rf "$GSDC_PATH"
|
|
30
|
+
fi
|
|
31
|
+
ln -s "$GSD_SOURCE/commands/gsd" "$GSDC_PATH"
|
|
32
|
+
echo "🔗 创建符号链接: ~/.gsdc → $GSD_SOURCE/commands/gsd"
|
|
33
|
+
|
|
34
|
+
# 3. 检查是否已存在 project_rules.md
|
|
25
35
|
if [ -f ".trae/rules/project_rules.md" ]; then
|
|
26
|
-
|
|
27
|
-
echo ""
|
|
28
|
-
echo "
|
|
29
|
-
|
|
30
|
-
echo ""
|
|
31
|
-
echo "或手动备份后重命名:"
|
|
32
|
-
echo " mv .trae/rules/project_rules.md .trae/rules/project_rules.md.backup"
|
|
33
|
-
exit 1
|
|
36
|
+
BACKUP_FILE=".trae/rules/project_rules.md.backup.$(date +%Y%m%d%H%M%S)"
|
|
37
|
+
echo "⚠️ 检测到已存在 .trae/rules/project_rules.md"
|
|
38
|
+
echo "📝 自动备份到: $BACKUP_FILE"
|
|
39
|
+
cp ".trae/rules/project_rules.md" "$BACKUP_FILE"
|
|
34
40
|
fi
|
|
35
41
|
|
|
36
|
-
#
|
|
42
|
+
# 4. 创建 .trae/rules 目录
|
|
37
43
|
if [ ! -d ".trae/rules" ]; then
|
|
38
44
|
echo "📁 创建 .trae/rules 目录..."
|
|
39
45
|
mkdir -p ".trae/rules"
|
|
40
46
|
fi
|
|
41
47
|
|
|
42
|
-
#
|
|
43
|
-
|
|
48
|
+
# 5. 复制项目规则文档
|
|
49
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
50
|
+
RULES_SOURCE_DIR=""
|
|
44
51
|
|
|
45
52
|
# 优先从脚本所在目录查找
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
PROJECT_RULES_SOURCE="$SCRIPT_DIR/project_rules.md"
|
|
53
|
+
if [ -d "$SCRIPT_DIR/.trae/rules" ]; then
|
|
54
|
+
RULES_SOURCE_DIR="$SCRIPT_DIR/.trae/rules"
|
|
55
|
+
elif [ -d "$SCRIPT_DIR/.trae" ]; then
|
|
56
|
+
RULES_SOURCE_DIR="$SCRIPT_DIR/.trae"
|
|
51
57
|
fi
|
|
52
58
|
|
|
53
|
-
#
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
# 定义需要复制的文件
|
|
60
|
+
RULES_FILES=("project_rules.md" "gsd-agents.md" "gsd-references.md")
|
|
61
|
+
|
|
62
|
+
if [ -n "$RULES_SOURCE_DIR" ]; then
|
|
63
|
+
# 从本地目录复制
|
|
64
|
+
for file in "${RULES_FILES[@]}"; do
|
|
65
|
+
if [ -f "$RULES_SOURCE_DIR/$file" ]; then
|
|
66
|
+
echo "📝 复制 $file..."
|
|
67
|
+
cp "$RULES_SOURCE_DIR/$file" ".trae/rules/$file"
|
|
68
|
+
fi
|
|
69
|
+
done
|
|
64
70
|
else
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
# 从远程仓库下载
|
|
72
|
+
echo "📥 从远程仓库下载文档..."
|
|
73
|
+
for file in "${RULES_FILES[@]}"; do
|
|
74
|
+
curl -fsSL "$REPO_URL/raw/main/.trae/rules/$file" -o ".trae/rules/$file" 2>/dev/null && \
|
|
75
|
+
echo " ✅ $file 下载成功" || \
|
|
76
|
+
echo " ⚠️ $file 下载失败"
|
|
77
|
+
done
|
|
67
78
|
fi
|
|
68
79
|
|
|
69
80
|
echo ""
|
|
@@ -71,7 +82,11 @@ echo "✅ 安装完成!"
|
|
|
71
82
|
echo ""
|
|
72
83
|
echo "📍 文件位置:"
|
|
73
84
|
echo " GSD 源文件: $GSD_SOURCE"
|
|
74
|
-
echo "
|
|
85
|
+
echo " 命令目录: ~/.gsdc (符号链接)"
|
|
86
|
+
echo " 项目规则: $(pwd)/.trae/rules/"
|
|
87
|
+
echo " - project_rules.md"
|
|
88
|
+
echo " - gsd-agents.md"
|
|
89
|
+
echo " - gsd-references.md"
|
|
75
90
|
echo ""
|
|
76
91
|
echo "🚀 开始使用:"
|
|
77
|
-
echo " 在 Trae
|
|
92
|
+
echo " 在 Trae 中与 SOLO Coder 聊天时输入 /gsd:new-project"
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-trae",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "GSD (Get Shit Done) framework adapter for Trae IDE",
|
|
5
5
|
"main": "bin/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"gsd-trae": "bin/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"lint": "npx prettier --write README.md"
|
|
10
|
+
"lint": "npx prettier --write README.md",
|
|
11
|
+
"test": "vitest run tests/e2e/"
|
|
11
12
|
},
|
|
12
13
|
"keywords": [
|
|
13
14
|
"gsd",
|
|
@@ -32,7 +33,11 @@
|
|
|
32
33
|
"bin/",
|
|
33
34
|
"assets/",
|
|
34
35
|
"install.sh",
|
|
36
|
+
"uninstall.sh",
|
|
35
37
|
"README.md",
|
|
36
38
|
"CHANGELOG.md"
|
|
37
|
-
]
|
|
39
|
+
],
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"vitest": "^4.1.0"
|
|
42
|
+
}
|
|
38
43
|
}
|
package/uninstall.sh
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# GSD for Trae - 卸载脚本
|
|
4
|
+
# 用法: bash uninstall.sh
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
GSD_SOURCE="$HOME/.gsd-source"
|
|
9
|
+
GSDC_PATH="$HOME/.gsdc"
|
|
10
|
+
|
|
11
|
+
echo "🗑️ 卸载 GSD for Trae..."
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# 1. 删除 GSD 源文件
|
|
15
|
+
if [ -d "$GSD_SOURCE" ]; then
|
|
16
|
+
echo "📁 删除 GSD 源文件: $GSD_SOURCE"
|
|
17
|
+
rm -rf "$GSD_SOURCE"
|
|
18
|
+
echo " ✅ 已删除"
|
|
19
|
+
else
|
|
20
|
+
echo " ℹ️ GSD 源文件不存在,跳过"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# 2. 删除符号链接
|
|
24
|
+
if [ -L "$GSDC_PATH" ]; then
|
|
25
|
+
echo "🔗 删除符号链接: ~/.gsdc"
|
|
26
|
+
rm "$GSDC_PATH"
|
|
27
|
+
echo " ✅ 已删除"
|
|
28
|
+
else
|
|
29
|
+
echo " ℹ️ 符号链接不存在,跳过"
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# 3. 删除当前项目的 GSD 规则文档
|
|
33
|
+
RULES_FILES=("project_rules.md" "gsd-agents.md" "gsd-references.md")
|
|
34
|
+
RULES_DELETED=0
|
|
35
|
+
|
|
36
|
+
for file in "${RULES_FILES[@]}"; do
|
|
37
|
+
if [ -f ".trae/rules/$file" ]; then
|
|
38
|
+
echo "📝 删除项目规则: .trae/rules/$file"
|
|
39
|
+
rm ".trae/rules/$file"
|
|
40
|
+
echo " ✅ 已删除"
|
|
41
|
+
RULES_DELETED=$((RULES_DELETED + 1))
|
|
42
|
+
fi
|
|
43
|
+
done
|
|
44
|
+
|
|
45
|
+
if [ $RULES_DELETED -eq 0 ]; then
|
|
46
|
+
echo " ℹ️ 项目规则文件不存在,跳过"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# 如果目录为空,询问是否删除
|
|
50
|
+
if [ -d ".trae/rules" ] && [ -z "$(ls -A .trae/rules 2>/dev/null)" ]; then
|
|
51
|
+
echo ""
|
|
52
|
+
read -p "🤔 .trae/rules 目录为空,是否删除?(y/N) " -n 1 -r
|
|
53
|
+
echo ""
|
|
54
|
+
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
55
|
+
rmdir ".trae/rules"
|
|
56
|
+
echo " ✅ 已删除 .trae/rules"
|
|
57
|
+
|
|
58
|
+
# 检查 .trae 是否为空
|
|
59
|
+
if [ -d ".trae" ] && [ -z "$(ls -A .trae 2>/dev/null)" ]; then
|
|
60
|
+
read -p "🤔 .trae 目录为空,是否删除?(y/N) " -n 1 -r
|
|
61
|
+
echo ""
|
|
62
|
+
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
63
|
+
rmdir ".trae"
|
|
64
|
+
echo " ✅ 已删除 .trae"
|
|
65
|
+
fi
|
|
66
|
+
fi
|
|
67
|
+
fi
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# 4. 检查是否有 .planning 目录
|
|
71
|
+
if [ -d ".planning" ]; then
|
|
72
|
+
echo ""
|
|
73
|
+
echo "⚠️ 检测到项目规划目录: .planning/"
|
|
74
|
+
echo " 包含项目计划和历史记录,建议保留或手动备份后删除"
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
echo ""
|
|
78
|
+
echo "✅ 卸载完成!"
|
|
79
|
+
echo ""
|
|
80
|
+
echo "如需重新安装,请运行:"
|
|
81
|
+
echo " npx gsd-trae"
|
|
82
|
+
echo ""
|
|
83
|
+
echo "感谢使用 GSD for Trae 👋"
|