sillyspec 2.4.0 → 2.4.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/package.json +8 -2
- package/templates/archive.md +5 -1
- package/templates/brainstorm.md +2 -4
- package/templates/explore.md +8 -7
- package/templates/init.md +3 -5
- package/templates/resume.md +3 -1
- package/templates/scan.md +21 -36
- package/templates/workspace.md +9 -3
- package/adapters/adapters.sh +0 -172
- package/commands/sillyspec/archive.md +0 -62
- package/commands/sillyspec/brainstorm.md +0 -462
- package/commands/sillyspec/continue.md +0 -41
- package/commands/sillyspec/execute.md +0 -254
- package/commands/sillyspec/explore.md +0 -85
- package/commands/sillyspec/export.md +0 -51
- package/commands/sillyspec/init.md +0 -163
- package/commands/sillyspec/plan.md +0 -237
- package/commands/sillyspec/propose.md +0 -233
- package/commands/sillyspec/quick.md +0 -59
- package/commands/sillyspec/resume.md +0 -99
- package/commands/sillyspec/scan.md +0 -671
- package/commands/sillyspec/status.md +0 -119
- package/commands/sillyspec/verify.md +0 -140
- package/commands/sillyspec/workspace.md +0 -120
- package/scripts/init.sh +0 -2
- package/scripts/install.ps1 +0 -316
- package/scripts/scan-preprocess.sh +0 -378
- package/scripts/validate-all.sh +0 -50
- package/scripts/validate-plan.sh +0 -44
- package/scripts/validate-proposal.sh +0 -87
- package/scripts/validate-scan.sh +0 -90
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sillyspec",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
"engines": {
|
|
10
10
|
"node": ">=18"
|
|
11
11
|
},
|
|
12
|
-
"keywords": [
|
|
12
|
+
"keywords": [
|
|
13
|
+
"sillyspec",
|
|
14
|
+
"ai",
|
|
15
|
+
"claude",
|
|
16
|
+
"cursor",
|
|
17
|
+
"spec-driven"
|
|
18
|
+
],
|
|
13
19
|
"license": "MIT"
|
|
14
20
|
}
|
package/templates/archive.md
CHANGED
package/templates/brainstorm.md
CHANGED
|
@@ -42,11 +42,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
42
42
|
|
|
43
43
|
**如果是工作区模式:**
|
|
44
44
|
1. 询问本次需求属于哪个子项目:
|
|
45
|
-
```
|
|
46
45
|
检测到工作区模式,请选择需求所属的子项目:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```
|
|
46
|
+
> 1. frontend — 前端 - Vue3 + TypeScript
|
|
47
|
+
> 2. backend — 后端 - Node.js + PostgreSQL
|
|
50
48
|
2. 加载该子项目的上下文 + 工作区共享规范:
|
|
51
49
|
|
|
52
50
|
```bash
|
package/templates/explore.md
CHANGED
|
@@ -61,18 +61,19 @@ cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
|
61
61
|
读取变更的 proposal、design、tasks,自然地引用它们。
|
|
62
62
|
|
|
63
63
|
当发现重要的决策时,**提议保存**(不自动保存):
|
|
64
|
-
> "这是一个设计决策,要写到 design.md 里吗?"
|
|
65
|
-
> "这是新需求,要加到 specs 里吗?"
|
|
66
64
|
|
|
67
|
-
|
|
65
|
+
请选择:
|
|
66
|
+
1. 写入 design.md
|
|
67
|
+
2. 加入 specs
|
|
68
|
+
3. 暂不保存
|
|
68
69
|
|
|
69
70
|
## 没有必需的结束
|
|
70
71
|
|
|
71
72
|
探索可以:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
1. 创建变更提案 — 流入 proposal
|
|
74
|
+
2. 产出文档更新
|
|
75
|
+
3. 继续探索
|
|
76
|
+
4. 结束探索
|
|
76
77
|
|
|
77
78
|
## 禁止事项
|
|
78
79
|
|
package/templates/init.md
CHANGED
|
@@ -17,12 +17,10 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
17
17
|
|
|
18
18
|
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
19
19
|
1. 列出所有子项目:
|
|
20
|
-
```
|
|
21
20
|
检测到工作区模式,请选择要初始化的子项目:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```
|
|
21
|
+
> 1. frontend — 前端 - Vue3 + TypeScript
|
|
22
|
+
> 2. backend — 后端 - Node.js + PostgreSQL
|
|
23
|
+
> 3. 新建子项目(先运行 /sillyspec:workspace add)
|
|
26
24
|
2. 用户选择后,**切换到该子项目目录**执行后续所有步骤
|
|
27
25
|
3. 后续步骤中的所有文件路径相对于子项目目录
|
|
28
26
|
|
package/templates/resume.md
CHANGED
package/templates/scan.md
CHANGED
|
@@ -42,12 +42,10 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
42
42
|
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
43
43
|
|
|
44
44
|
询问用户:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
3) 取消
|
|
50
|
-
```
|
|
45
|
+
> 检测到工作区模式,请选择扫描范围:
|
|
46
|
+
> 1. 全部子项目(逐个扫描后生成汇总)
|
|
47
|
+
> 2. 指定某个子项目
|
|
48
|
+
> 3. 取消
|
|
51
49
|
|
|
52
50
|
根据选择:
|
|
53
51
|
- 选 1 → 逐个扫描,最后生成 `.sillyspec/workspace/CODEBASE-OVERVIEW.md`
|
|
@@ -69,12 +67,10 @@ wc -l .sillyspec/codebase/*.md 2>/dev/null
|
|
|
69
67
|
→ 不提示,直接进入 Step 2 选择扫描模式。
|
|
70
68
|
|
|
71
69
|
**已有 3 份(STACK + STRUCTURE + PROJECT):**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
→ 输入 3 跳过,直接开始开发
|
|
77
|
-
```
|
|
70
|
+
> 检测到上次的快速扫描结果。
|
|
71
|
+
> 1. 升级为完整扫描(补充 4 份文档)
|
|
72
|
+
> 2. 重新快速扫描(覆盖现有文档)
|
|
73
|
+
> 3. 跳过,直接开始开发
|
|
78
74
|
|
|
79
75
|
**已有 7 份完整文档:**
|
|
80
76
|
先检查距上次扫描过了多久:
|
|
@@ -83,29 +79,23 @@ git log -1 --format="%ci" .sillyspec/codebase/ 2>/dev/null
|
|
|
83
79
|
git log --oneline --since="上次扫描时间" | wc -l
|
|
84
80
|
```
|
|
85
81
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
→ 输入 2 跳过,直接开始开发
|
|
90
|
-
```
|
|
82
|
+
> 上次扫描距今 X 天,期间有 Y 个新提交。
|
|
83
|
+
> 1. 刷新(重新扫描全部)
|
|
84
|
+
> 2. 跳过,直接开始开发
|
|
91
85
|
|
|
92
86
|
**用户选跳过** → 输出"可以开始开发了。建议下一步:`/sillyspec:brainstorm '你的需求'`"然后结束。
|
|
93
87
|
|
|
94
88
|
### Step 2: 选择扫描模式
|
|
95
89
|
|
|
96
|
-
```
|
|
97
90
|
请选择扫描模式:
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
3. 取消
|
|
108
|
-
```
|
|
92
|
+
> 1. 快速扫描 ⚡
|
|
93
|
+
> 读取配置文件和目录结构,约 30 秒
|
|
94
|
+
> 生成 3 份文档:技术栈 + 目录结构 + 项目概览
|
|
95
|
+
> 2. 深度扫描 🔍
|
|
96
|
+
> 读取全部源代码并分析,约 2-3 分钟
|
|
97
|
+
> 生成 7 份文档:技术栈 + 架构 + 目录结构 + 编码约定 + 集成 + 测试 + 技术债务
|
|
98
|
+
> 3. 取消
|
|
109
99
|
|
|
110
100
|
根据选择进入对应的扫描流程。
|
|
111
101
|
|
|
@@ -140,14 +130,9 @@ git log --oneline --since="上次扫描时间" | wc -l
|
|
|
140
130
|
|
|
141
131
|
把以上选择汇总,让用户最后确认:
|
|
142
132
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
范围:整个项目
|
|
147
|
-
排除:node_modules, dist, .git, vendor, build, __pycache__, .next, coverage, .nuxt, target
|
|
148
|
-
|
|
149
|
-
开始扫描?(输入 y 确认,或修改以上选项)
|
|
150
|
-
```
|
|
133
|
+
开始扫描?
|
|
134
|
+
> 1. 确认,开始扫描
|
|
135
|
+
> 2. 修改选项
|
|
151
136
|
|
|
152
137
|
用户确认 → 执行扫描。用户想改 → 回到对应步骤。
|
|
153
138
|
|
package/templates/workspace.md
CHANGED
|
@@ -13,7 +13,9 @@ $ARGUMENTS
|
|
|
13
13
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
如果不存在 →
|
|
16
|
+
如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
|
|
17
|
+
> 1. 初始化工作区
|
|
18
|
+
> 2. 跳过
|
|
17
19
|
|
|
18
20
|
### Step 2: 解析指令
|
|
19
21
|
|
|
@@ -35,7 +37,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
35
37
|
- 询问子项目路径(相对于工作区根目录,如 `./frontend`)
|
|
36
38
|
- 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
|
|
37
39
|
- 验证路径存在
|
|
38
|
-
|
|
40
|
+
添加完后询问:
|
|
41
|
+
> 1. 继续添加子项目
|
|
42
|
+
> 2. 完成,配置共享规范
|
|
39
43
|
3. 询问共享规范文件
|
|
40
44
|
4. 生成 `.sillyspec/config.yaml`
|
|
41
45
|
5. 创建 `.sillyspec/shared/` 目录
|
|
@@ -50,7 +54,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
50
54
|
#### 3c. 移除子项目(`remove`)
|
|
51
55
|
|
|
52
56
|
1. 显示当前所有子项目列表
|
|
53
|
-
2.
|
|
57
|
+
2. 询问要移除哪个:
|
|
58
|
+
> 1. (列出子项目名称)
|
|
59
|
+
> 2. 取消
|
|
54
60
|
3. 从 config.yaml 中删除对应条目
|
|
55
61
|
4. Git 提交
|
|
56
62
|
|
package/adapters/adapters.sh
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# SillySpec 适配器 — 每个工具一个函数,负责 frontmatter 格式和输出目录
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# ── 元数据映射(从现有 commands 的 frontmatter 提取) ──
|
|
6
|
-
|
|
7
|
-
get_description() {
|
|
8
|
-
local name=$1
|
|
9
|
-
case $name in
|
|
10
|
-
init) echo "绿地项目初始化 — 深度提问、调研、需求文档、路线图" ;;
|
|
11
|
-
scan) echo "代码库扫描 — 支持快速扫描和深度扫描两阶段" ;;
|
|
12
|
-
explore) echo "自由思考模式 — 讨论、画图、调研,不写代码" ;;
|
|
13
|
-
brainstorm) echo "需求探索 — 结构化头脑风暴,生成设计文档(创建性工作前必用)" ;;
|
|
14
|
-
propose) echo "生成结构化规范 — proposal + design + tasks" ;;
|
|
15
|
-
plan) echo "编写实现计划 — 2-5 分钟粒度,精确到文件路径和代码" ;;
|
|
16
|
-
execute) echo "波次执行 — 子代理并行 + 强制 TDD + 两阶段审查" ;;
|
|
17
|
-
verify) echo "验证实现 — 对照规范检查 + 测试套件" ;;
|
|
18
|
-
archive) echo "归档变更 — 规范沉淀,可追溯" ;;
|
|
19
|
-
status) echo "查看项目进度和状态" ;;
|
|
20
|
-
continue) echo "自动判断并执行下一步" ;;
|
|
21
|
-
state) echo "查看当前工作状态 — 显示 STATE.md 内容" ;;
|
|
22
|
-
resume) echo "恢复工作 — 从中断处继续" ;;
|
|
23
|
-
quick) echo "快速任务 — 跳过完整流程,直接做" ;;
|
|
24
|
-
workspace) echo "工作区管理 — 初始化、管理多项目工作区,查看子项目状态" ;;
|
|
25
|
-
export) echo "导出成功方案为可复用模板" ;;
|
|
26
|
-
*) echo "SillySpec $name" ;;
|
|
27
|
-
esac
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
get_argument_hint() {
|
|
31
|
-
local name=$1
|
|
32
|
-
case $name in
|
|
33
|
-
init) echo "[项目名]" ;;
|
|
34
|
-
scan) echo "[可选:指定区域,如 'api' 或 'auth'] [--deep 深度扫描]" ;;
|
|
35
|
-
explore) echo "[探索主题]" ;;
|
|
36
|
-
brainstorm) echo "[需求或想法描述]" ;;
|
|
37
|
-
propose) echo "[变更名]" ;;
|
|
38
|
-
plan) echo "[计划名]" ;;
|
|
39
|
-
execute) echo "[任务编号或 'all']" ;;
|
|
40
|
-
verify) echo "[可选:指定验证范围]" ;;
|
|
41
|
-
archive) echo "[变更名]" ;;
|
|
42
|
-
status) echo "" ;;
|
|
43
|
-
continue) echo "" ;;
|
|
44
|
-
state) echo "[可选备注]" ;;
|
|
45
|
-
resume) echo "" ;;
|
|
46
|
-
quick) echo "[任务描述]" ;;
|
|
47
|
-
workspace) echo "[可选:add/remove/status/info]" ;;
|
|
48
|
-
export) echo "<change-name> [--to <path>]" ;;
|
|
49
|
-
*) echo "" ;;
|
|
50
|
-
esac
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
# ── Claude Code commands 适配器 ──
|
|
54
|
-
|
|
55
|
-
generate_claude() {
|
|
56
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
57
|
-
local out_dir=".claude/commands/sillyspec"
|
|
58
|
-
mkdir -p "$out_dir"
|
|
59
|
-
local body
|
|
60
|
-
body=$(cat "$template")
|
|
61
|
-
cat > "$out_dir/${name}.md" <<EOF
|
|
62
|
-
---
|
|
63
|
-
description: $desc
|
|
64
|
-
argument-hint: "$arg_hint"
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
$body
|
|
68
|
-
EOF
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
# ── Claude Code skills 适配器 ──
|
|
72
|
-
|
|
73
|
-
generate_claude_skills() {
|
|
74
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
75
|
-
local out_dir=".claude/skills/sillyspec-${name}"
|
|
76
|
-
mkdir -p "$out_dir"
|
|
77
|
-
local body
|
|
78
|
-
body=$(cat "$template")
|
|
79
|
-
cat > "$out_dir/SKILL.md" <<EOF
|
|
80
|
-
---
|
|
81
|
-
name: sillyspec:${name}
|
|
82
|
-
description: $desc
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
$body
|
|
86
|
-
EOF
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
# ── Cursor 适配器 ──
|
|
90
|
-
|
|
91
|
-
generate_cursor() {
|
|
92
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
93
|
-
local out_dir=".cursor/commands"
|
|
94
|
-
mkdir -p "$out_dir"
|
|
95
|
-
local body
|
|
96
|
-
body=$(cat "$template")
|
|
97
|
-
cat > "$out_dir/sillyspec-${name}.md" <<EOF
|
|
98
|
-
---
|
|
99
|
-
name: /sillyspec-${name}
|
|
100
|
-
id: sillyspec-${name}
|
|
101
|
-
description: $desc
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
$body
|
|
105
|
-
EOF
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
# ── Codex 适配器 ──
|
|
109
|
-
|
|
110
|
-
generate_codex() {
|
|
111
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
112
|
-
local out_dir="$HOME/.agents/skills/sillyspec-${name}"
|
|
113
|
-
mkdir -p "$out_dir"
|
|
114
|
-
local body
|
|
115
|
-
body=$(cat "$template")
|
|
116
|
-
cat > "$out_dir/SKILL.md" <<EOF
|
|
117
|
-
---
|
|
118
|
-
name: sillyspec:${name}
|
|
119
|
-
description: $desc
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
$body
|
|
123
|
-
EOF
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
# ── OpenCode 适配器 ──
|
|
127
|
-
|
|
128
|
-
generate_opencode() {
|
|
129
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
130
|
-
local out_dir=".opencode/skills/sillyspec-${name}"
|
|
131
|
-
mkdir -p "$out_dir"
|
|
132
|
-
local body
|
|
133
|
-
body=$(cat "$template")
|
|
134
|
-
cat > "$out_dir/SKILL.md" <<EOF
|
|
135
|
-
---
|
|
136
|
-
name: sillyspec:${name}
|
|
137
|
-
description: $desc
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
$body
|
|
141
|
-
EOF
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
# ── OpenClaw 适配器 ──
|
|
145
|
-
|
|
146
|
-
generate_openclaw() {
|
|
147
|
-
local name=$1 desc=$2 template=$3 arg_hint=$4
|
|
148
|
-
local out_dir=".openclaw/skills/sillyspec-${name}"
|
|
149
|
-
mkdir -p "$out_dir"
|
|
150
|
-
local body
|
|
151
|
-
body=$(cat "$template")
|
|
152
|
-
cat > "$out_dir/SKILL.md" <<EOF
|
|
153
|
-
---
|
|
154
|
-
name: sillyspec:${name}
|
|
155
|
-
description: $desc
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
$body
|
|
159
|
-
EOF
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
# ── 工具列表 ──
|
|
163
|
-
|
|
164
|
-
VALID_TOOLS="claude claude_skills cursor codex opencode openclaw"
|
|
165
|
-
|
|
166
|
-
is_valid_tool() {
|
|
167
|
-
local tool=$1
|
|
168
|
-
for t in $VALID_TOOLS; do
|
|
169
|
-
[ "$t" = "$tool" ] && return 0
|
|
170
|
-
done
|
|
171
|
-
return 1
|
|
172
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 归档变更 — 规范沉淀,可追溯
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
你现在是 SillySpec 的归档器。
|
|
6
|
-
|
|
7
|
-
## 变更名称
|
|
8
|
-
$ARGUMENTS
|
|
9
|
-
|
|
10
|
-
## 流程
|
|
11
|
-
|
|
12
|
-
### 1. 确认验证通过
|
|
13
|
-
|
|
14
|
-
检查是否执行过验证。如果没有 → 提示先运行 `/sillyspec:verify`。
|
|
15
|
-
|
|
16
|
-
### 2. 归档
|
|
17
|
-
|
|
18
|
-
### 3. 确认归档
|
|
19
|
-
|
|
20
|
-
在移动文件之前,展示即将归档的内容:
|
|
21
|
-
- 变更目录名
|
|
22
|
-
- 包含的文件列表
|
|
23
|
-
- 生成总结
|
|
24
|
-
|
|
25
|
-
**等待用户确认后再执行归档操作。**
|
|
26
|
-
|
|
27
|
-
将 `.sillyspec/changes/<change-name>/` 移动到 `.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`。
|
|
28
|
-
|
|
29
|
-
### 3. 更新 tasks.md
|
|
30
|
-
|
|
31
|
-
确保所有 checkbox 都已勾选。如有遗漏 → 打勾。
|
|
32
|
-
|
|
33
|
-
### 4. 更新路线图(如存在)
|
|
34
|
-
|
|
35
|
-
如果 `.sillyspec/ROADMAP.md` 存在,标记对应 Phase 为已完成。
|
|
36
|
-
|
|
37
|
-
### 5. Git 提交
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
git add .sillyspec/
|
|
41
|
-
git commit -m "docs: archive sillyspec change <change-name>"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 最后说:
|
|
45
|
-
|
|
46
|
-
> ✅ 变更 `<change-name>` 已归档。
|
|
47
|
-
>
|
|
48
|
-
> 累积规范:
|
|
49
|
-
> - `.sillyspec/changes/archive/` — X 个已归档变更
|
|
50
|
-
> - `.sillyspec/specs/` — X 份设计文档
|
|
51
|
-
> - `.sillyspec/plans/` — X 份实现计划
|
|
52
|
-
>
|
|
53
|
-
> 继续下一个:`/sillyspec:brainstorm "新想法"`
|
|
54
|
-
|
|
55
|
-
### 更新 STATE.md
|
|
56
|
-
|
|
57
|
-
archive 完成后,**必须自动更新** `.sillyspec/STATE.md`:
|
|
58
|
-
|
|
59
|
-
- 清除当前变更信息(归档后不再活跃)
|
|
60
|
-
- 如果是主变更(有 MASTER.md),标记所有阶段为 ✅,然后清除
|
|
61
|
-
- 历史记录追加时间 + 归档完成
|
|
62
|
-
- 下一步改为 `/sillyspec:brainstorm "新想法"` 或留空
|