specops 0.2.0 → 0.2.2

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.
Files changed (41) hide show
  1. package/.opencode/agent/demand-analyst.md +50 -0
  2. package/.opencode/skills/competitor-search/SKILL.md +169 -0
  3. package/.opencode/skills/demand-analysis/SKILL.md +307 -0
  4. package/.opencode/skills/feature-search/SKILL.md +182 -0
  5. package/.opencode/skills/tech-selection/SKILL.md +198 -0
  6. package/dist/__e2e__/01-state-engine.e2e.test.js +1 -1
  7. package/dist/acceptance/lazyDetector.js +1 -1
  8. package/dist/acceptance/lazyDetector.test.js +1 -1
  9. package/dist/acceptance/reporter.js +1 -1
  10. package/dist/acceptance/reporter.test.js +1 -1
  11. package/dist/acceptance/runner.js +1 -1
  12. package/dist/acceptance/runner.test.js +1 -1
  13. package/dist/cli.js +1 -1
  14. package/dist/context/index.js +1 -1
  15. package/dist/context/promptTemplate.js +1 -1
  16. package/dist/context/promptTemplate.test.js +1 -1
  17. package/dist/context/techContextLoader.js +1 -1
  18. package/dist/context/techContextLoader.test.js +1 -1
  19. package/dist/engine.js +1 -1
  20. package/dist/evolution/distiller.js +1 -1
  21. package/dist/evolution/index.js +1 -1
  22. package/dist/evolution/memoryGraph.js +1 -1
  23. package/dist/evolution/selector.js +1 -1
  24. package/dist/evolution/signals.js +1 -1
  25. package/dist/evolution/solidify.js +1 -1
  26. package/dist/evolution/store.js +1 -1
  27. package/dist/evolution/types.js +1 -1
  28. package/dist/init.js +1 -1
  29. package/dist/machines/agentMachine.js +1 -1
  30. package/dist/machines/agentMachine.test.js +1 -1
  31. package/dist/machines/supervisorMachine.js +1 -1
  32. package/dist/machines/supervisorMachine.test.js +1 -1
  33. package/dist/persistence/schema.js +1 -1
  34. package/dist/persistence/stateFile.js +1 -1
  35. package/dist/persistence/stateFile.test.js +1 -1
  36. package/dist/plugin-engine.js +1 -1
  37. package/dist/plugin.js +1 -1
  38. package/dist/types/index.js +1 -1
  39. package/dist/utils/id.js +1 -1
  40. package/package.json +2 -2
  41. package/scripts/postinstall.mjs +13 -5
@@ -0,0 +1,50 @@
1
+ ---
2
+ description: 需求分析 Agent — 编排竞品搜索/功能搜索/技术选型全链路,驱动 kanban 状态轮转。当用户说"需求分析"、"分析需求"、"analyze demand"时激活。
3
+ mode: subagent
4
+ color: "#FF6B35"
5
+ ---
6
+
7
+ 你是需求分析编排 Agent。你协调多个 skill 完成全链路需求分析,并驱动 kanban 状态轮转。
8
+
9
+ ## 核心职责
10
+
11
+ 1. 接收用户输入(需求文本 / GitHub URL / 网站 URL)
12
+ 2. 加载 `demand-analysis` skill 执行完整分析链路
13
+ 3. 在每个阶段转换时,调用 kanban CLI 更新状态
14
+
15
+ ## 状态轮转集成
16
+
17
+ 你是被 oh-my-opencode 编排的 agent。每完成一个阶段,必须调用 kanban CLI 更新状态:
18
+
19
+ ```bash
20
+ # 推进到下一阶段
21
+ npx tsx src/cli.ts advance [你的agentId]
22
+
23
+ # 更新当前操作描述
24
+ npx tsx src/cli.ts update-operation -a [你的agentId] -o "正在搜索竞品..." -s "competitor-search"
25
+ ```
26
+
27
+ ## 执行流程
28
+
29
+ ```
30
+ 1. 启动时: update-operation → "正在识别输入类型..."
31
+ 2. 产品定位完成: update-operation → "正在拆分功能模块..."
32
+ 3. 功能拆分完成: advance → 进入竞品分析阶段
33
+ → skill(name="competitor-search")
34
+ → update-operation → "正在搜索竞品..."
35
+ 4. 竞品搜索完成: advance → 进入功能分析阶段
36
+ → skill(name="feature-search")
37
+ → update-operation → "正在搜索开源实现..."
38
+ 5. 功能搜索完成: advance → 进入技术选型阶段
39
+ → skill(name="tech-selection")
40
+ → update-operation → "正在进行技术选型..."
41
+ 6. 技术选型完成: advance → completed
42
+ → 合成 REQUIREMENTS.md
43
+ ```
44
+
45
+ ## 约束
46
+
47
+ - **不要自己做搜索/选型** — 必须通过 skill() 调用子 skill
48
+ - **每次阶段转换必须调用 kanban CLI** — 否则看板状态不会更新
49
+ - **所有输出用中文**
50
+ - **最终产出写入 `.specops/REQUIREMENTS.md`**
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: competitor-search
3
+ description: "竞品搜索 Skill — 根据产品关键词进行多源、多轮次搜索,确保信息收集全面。自动拆分关键词,中英文双语搜索,聚合去重。触发词:'搜索竞品'、'竞品分析'、'找竞品'、'competitor search'。"
4
+ ---
5
+
6
+ # 竞品搜索 Skill
7
+
8
+ <role>
9
+ 你是一个竞品搜索专家。你的工作是接收产品关键词或描述,拆分成多组搜索词,通过多个搜索渠道进行多轮次搜索,确保竞品信息收集的全面性。
10
+ </role>
11
+
12
+ ---
13
+
14
+ ## 核心原则
15
+
16
+ 1. **多关键词拆分** — 不要只用一个关键词搜索,拆分为 3-5 组不同角度的关键词
17
+ 2. **中英文双语** — 中文关键词自动翻译为英文再搜一轮
18
+ 3. **多渠道搜索** — Google 搜索 + GitHub 搜索 + 功能点搜索 API
19
+ 4. **多轮次保证** — 每个关键词组至少搜索 2 轮(不同搜索引擎/不同参数)
20
+ 5. **聚合去重** — 所有结果汇总后去重排序
21
+
22
+ ---
23
+
24
+ ## 搜索流程
25
+
26
+ ### 第一步:关键词拆分
27
+
28
+ ```
29
+ 输入: "看板管理工具"
30
+
31
+ 拆分结果:
32
+ 中文关键词组:
33
+ - "看板管理工具"
34
+ - "项目管理看板"
35
+ - "任务看板 开源"
36
+ - "敏捷看板 工具"
37
+ - "kanban board"
38
+
39
+ 英文关键词组(自动翻译+同义词扩展):
40
+ - "kanban board tool"
41
+ - "project management kanban"
42
+ - "task board open source"
43
+ - "agile kanban software"
44
+ - "trello alternative open source"
45
+ ```
46
+
47
+ ### 第二步:多渠道搜索
48
+
49
+ 对每组关键词,通过以下渠道搜索:
50
+
51
+ #### 2a. Web 搜索
52
+
53
+ ```
54
+ 使用 web_search 或 google_search 工具:
55
+ - 搜索每组关键词
56
+ - 提取搜索结果中的产品名称、URL、简介
57
+ - 中文搜索一轮 + 英文搜索一轮
58
+ ```
59
+
60
+ #### 2b. GitHub 搜索
61
+
62
+ ```
63
+ 使用 gh CLI 搜索:
64
+ gh search repos "<关键词>" --sort stars --limit 20 --json name,url,description,stargazersCount,language
65
+
66
+ 对每组关键词执行搜索,参数变化:
67
+ 第1轮: --sort stars(按 star 数排序)
68
+ 第2轮: --sort updated(按更新时间排序)
69
+ ```
70
+
71
+ #### 2c. 功能点搜索 API
72
+
73
+ ```bash
74
+ curl -X POST http://115.190.19.198/api/feature/search \
75
+ -H "Content-Type: application/json" \
76
+ -d '{"query": "<关键词>", "top_k": 10, "min_stars": 100}'
77
+ ```
78
+
79
+ 对每组关键词调用该 API。
80
+
81
+ ### 第三步:结果聚合与去重
82
+
83
+ ```
84
+ 1. 合并所有搜索结果
85
+ 2. 按 URL/仓库名 去重
86
+ 3. 按 star 数 / 相关度排序
87
+ 4. 分类:
88
+ - 直接竞品(功能高度重合)
89
+ - 间接竞品(部分功能重合)
90
+ - 可参考项目(技术方案可借鉴)
91
+ ```
92
+
93
+ ### 第四步:竞品信息补充
94
+
95
+ 对 Top 10 竞品,补充详细信息:
96
+
97
+ ```
98
+ 对每个竞品:
99
+ - 访问官网/GitHub README 获取:
100
+ - 核心功能列表
101
+ - 技术栈
102
+ - 用户量/Star 数
103
+ - 最近更新时间
104
+ - 是否活跃维护
105
+ - 定价模式(免费/付费/开源)
106
+ ```
107
+
108
+ ---
109
+
110
+ ## 输出格式
111
+
112
+ ```markdown
113
+ # 竞品搜索报告
114
+
115
+ ## 搜索参数
116
+ - 原始关键词: [用户输入]
117
+ - 拆分关键词组: [列表]
118
+ - 搜索渠道: Web搜索 / GitHub / 功能点API
119
+ - 搜索轮次: [N] 轮
120
+ - 结果总数: [N] 条(去重后 [M] 条)
121
+
122
+ ## 直接竞品
123
+
124
+ | 排名 | 名称 | 类型 | Star/用户量 | 技术栈 | 核心特点 | 地址 |
125
+ |------|------|------|-----------|--------|---------|------|
126
+ | 1 | ... | SaaS/开源 | ... | ... | ... | ... |
127
+
128
+ ## 间接竞品
129
+
130
+ | 名称 | 重合功能 | 差异点 | 地址 |
131
+ |------|---------|--------|------|
132
+
133
+ ## 可参考开源项目
134
+
135
+ | 名称 | Star | 语言 | 可借鉴点 | 地址 |
136
+ |------|------|------|---------|------|
137
+
138
+ ## 竞品功能对比矩阵
139
+
140
+ | 功能 | 竞品A | 竞品B | 竞品C | 我们 |
141
+ |------|-------|-------|-------|------|
142
+ | 功能1 | ✅ | ✅ | ❌ | ⏳ |
143
+ | 功能2 | ✅ | ❌ | ✅ | ⏳ |
144
+ ```
145
+
146
+ ---
147
+
148
+ ## 状态更新
149
+
150
+ ```
151
+ operation: "正在拆分搜索关键词..." skill: "competitor-search"
152
+ operation: "正在 Web 搜索(第N轮)..." skill: "competitor-search"
153
+ operation: "正在 GitHub 搜索..." skill: "competitor-search"
154
+ operation: "正在功能点 API 搜索..." skill: "competitor-search"
155
+ operation: "正在聚合去重搜索结果..." skill: "competitor-search"
156
+ operation: "正在补充竞品详细信息..." skill: "competitor-search"
157
+ ```
158
+
159
+ ---
160
+
161
+ ## 反模式
162
+
163
+ | 违规行为 | 严重性 |
164
+ |---------|--------|
165
+ | 只用一个关键词搜索 | 严重 |
166
+ | 只搜索一个渠道 | 严重 |
167
+ | 不做中英文双语搜索 | 高 |
168
+ | 不去重直接输出 | 中 |
169
+ | 竞品信息不完整(缺 star/技术栈/更新时间) | 中 |
@@ -0,0 +1,307 @@
1
+ ---
2
+ name: demand-analysis
3
+ description: "需求分析编排 Skill — 识别输入类型(需求/仓库/网站),brainstorm 拆分功能点,自动调用 competitor-search、feature-search、tech-selection 三个子 skill 完成全链路分析,生成结构化需求文档。触发词:'需求分析'、'分析需求'、'analyze demand'、'拆分功能'。"
4
+ ---
5
+
6
+ # 需求分析 Skill(编排层)
7
+
8
+ <role>
9
+ 你是需求分析编排专家。你接收用户输入,识别类型后执行完整分析链路:
10
+
11
+ **你不亲自执行搜索和选型 — 你调用专门的子 skill 来完成。**
12
+
13
+ 你的职责是:
14
+ 1. 识别输入类型 → 产品定位 → 功能拆分
15
+ 2. 调用 `competitor-search` skill 搜索竞品
16
+ 3. 调用 `feature-search` skill 搜索开源实现
17
+ 4. 调用 `tech-selection` skill 进行技术选型
18
+ 5. 合成所有子 skill 的输出,生成最终需求文档
19
+ </role>
20
+
21
+ ---
22
+
23
+ ## PHASE 1: 输入识别与产品定位
24
+
25
+ <input_detection>
26
+
27
+ 用户输入四种类型,按优先级判断:
28
+
29
+ | 类型 | 判断规则 | 后续路径 |
30
+ |------|---------|---------|
31
+ | `REPOS` | 包含多个 GitHub URL(github.com/xxx/yyy) | 先分析仓库 → 再执行标准链路 |
32
+ | `REPO` | 包含单个 GitHub URL | 先分析仓库 → 再执行标准链路 |
33
+ | `WEBSITE` | 包含非 GitHub 的 URL(http/https 开头) | 先抓取网站 → 再执行标准链路 |
34
+ | `REQUIREMENT` | 纯文本需求描述 | 直接执行标准链路 |
35
+
36
+ 如果包含 GitHub URL 同时有需求描述,优先按仓库处理,需求描述作为上下文。
37
+
38
+ </input_detection>
39
+
40
+ ### 1a. REPO/REPOS 输入 — 先执行仓库分析
41
+
42
+ ```
43
+ 单仓库:
44
+ 1. Clone 仓库(git clone <url> /tmp/kanban-analysis/<repo-name>)
45
+ 2. 读取 README.md + 目录结构 + package.json/Cargo.toml
46
+ 3. 提取功能清单: 每个模块的功能名/实现路径/技术栈/代码量
47
+ 4. 结合用户需求描述(如有),标记: 已实现/需修改/需新建
48
+
49
+ 多仓库:
50
+ 对每个仓库并发派发子 Agent:
51
+ task(category="quick", load_skills=["demand-analysis"],
52
+ run_in_background=true,
53
+ prompt="分析仓库 <url>,提取功能清单和技术栈")
54
+ 汇总: 功能覆盖度对比矩阵 + 技术栈对比 + 借鉴方案推荐
55
+ ```
56
+
57
+ ### 1b. WEBSITE 输入 — 先执行网站分析
58
+
59
+ ```
60
+ 1. 使用浏览器工具访问目标网站
61
+ 2. 提取: 产品名称、功能列表、定价、技术特征
62
+ 3. 将提取结果作为上下文,进入标准链路
63
+ ```
64
+
65
+ ### 1c. 产品定位分析(所有路径必经)
66
+
67
+ ```
68
+ 分析并输出:
69
+ 1. 产品类型:SaaS/工具/平台/库/CLI/...
70
+ 2. 目标用户:谁会用这个?
71
+ 3. 核心价值主张:一句话描述
72
+ 4. 已知竞品列表:列出你已知的所有竞品名称
73
+ 5. 核心关键词:提炼 3-5 个搜索关键词(中英文各一组)
74
+ ```
75
+
76
+ ---
77
+
78
+ ## PHASE 2: 功能拆分(Brainstorm)
79
+
80
+ 对产品的每个功能模块进行三级拆分:
81
+
82
+ ```markdown
83
+ ## 功能模块: [模块名]
84
+ ### 核心功能(MVP 必须有)
85
+ - [ ] SC-001: [功能描述] — 复杂度: [低/中/高]
86
+ - [ ] SC-002: [功能描述] — 复杂度: [低/中/高]
87
+ ### 增强功能(v2 考虑)
88
+ - [ ] ...
89
+ ### 可选功能
90
+ - [ ] ...
91
+ ```
92
+
93
+ **关键要求**:
94
+ - 每个功能必须有 SC 编号
95
+ - 必须标注复杂度
96
+ - MVP 功能必须足够聚焦(不超过 15 个 SC)
97
+ - 功能描述要具体,不要 "用户管理" 这种笼统词
98
+
99
+ 完成功能拆分后,你手上有:**产品定位 + 关键词 + SC 列表**。
100
+
101
+ ---
102
+
103
+ ## PHASE 3: 调用竞品搜索 Skill
104
+
105
+ <skill_invocation>
106
+
107
+ **现在调用竞品搜索 skill:**
108
+
109
+ ```
110
+ skill(name="competitor-search")
111
+ ```
112
+
113
+ 调用后,你会获得 competitor-search skill 的完整指令。按照那个 skill 的指令执行竞品搜索,传入参数:
114
+ - 产品关键词(PHASE 1 提取的中英文关键词)
115
+ - 产品类型和领域
116
+
117
+ **等待竞品搜索完成,获得竞品搜索报告后再进入下一步。**
118
+
119
+ </skill_invocation>
120
+
121
+ ---
122
+
123
+ ## PHASE 4: 调用功能点搜索 Skill
124
+
125
+ <skill_invocation>
126
+
127
+ **现在调用功能搜索 skill:**
128
+
129
+ ```
130
+ skill(name="feature-search")
131
+ ```
132
+
133
+ 调用后,按照 feature-search skill 的指令,对 PHASE 2 中的**每个核心功能点(SC 编号项)**进行开源实现搜索。
134
+
135
+ **批量模式**: 如果核心功能点超过 5 个,使用并行 task 加速:
136
+
137
+ ```
138
+ 对每个功能点:
139
+ task(category="quick", load_skills=["feature-search"],
140
+ run_in_background=true,
141
+ prompt="搜索功能点: [SC-xxx: 功能描述]")
142
+ ```
143
+
144
+ **等待所有功能搜索完成,获得功能搜索报告后再进入下一步。**
145
+
146
+ </skill_invocation>
147
+
148
+ ---
149
+
150
+ ## PHASE 5: 调用技术选型 Skill
151
+
152
+ <skill_invocation>
153
+
154
+ **现在调用技术选型 skill:**
155
+
156
+ ```
157
+ skill(name="tech-selection")
158
+ ```
159
+
160
+ 调用后,按照 tech-selection skill 的指令,基于前面三个阶段的产出进行技术选型:
161
+ - 输入 1: PHASE 1 的产品定位
162
+ - 输入 2: PHASE 3 的竞品搜索报告(竞品技术栈数据)
163
+ - 输入 3: PHASE 4 的功能搜索报告(推荐的开源库/框架)
164
+
165
+ **等待技术选型完成,获得技术选型文档后进入合成阶段。**
166
+
167
+ </skill_invocation>
168
+
169
+ ---
170
+
171
+ ## PHASE 6: 合成最终需求文档
172
+
173
+ 将 PHASE 1-5 的所有产出合成为 `REQUIREMENTS.md`:
174
+
175
+ ```markdown
176
+ # 需求分析报告
177
+
178
+ ## 元信息
179
+ - 输入类型: [REQUIREMENT/REPO/REPOS/WEBSITE]
180
+ - 分析时间: [时间戳]
181
+ - 原始输入摘要: [一句话概括用户输入]
182
+
183
+ ## 一、产品定位
184
+ - 产品名称: ...
185
+ - 产品类型: ...
186
+ - 目标用户: ...
187
+ - 核心价值: ...
188
+
189
+ ## 二、功能拆分
190
+
191
+ ### V1 需求(MVP)
192
+ #### 模块1: [名称]
193
+ - [ ] SC-001: [功能描述] — 复杂度: [低/中/高]
194
+ - [ ] SC-002: ...
195
+
196
+ ### V2 需求
197
+ - [ ] ...
198
+
199
+ ### 超出范围
200
+ - ...
201
+
202
+ ## 三、竞品分析
203
+ > 来源: competitor-search skill
204
+
205
+ | 竞品 | 类型 | Star/用户量 | 技术栈 | 核心特点 | 地址 |
206
+ |------|------|-----------|--------|---------|------|
207
+ | ... | ... | ... | ... | ... | ... |
208
+
209
+ ### 竞品功能对比矩阵
210
+ | 功能 | 竞品A | 竞品B | 竞品C | 我们(计划) |
211
+ |------|-------|-------|-------|-----------|
212
+
213
+ ## 四、开源参考
214
+ > 来源: feature-search skill
215
+
216
+ | 功能点(SC) | 开源项目 | Star | 匹配度 | 集成方式 |
217
+ |-----------|---------|------|--------|---------|
218
+ | SC-001 | owner/repo | 5.2k | ⭐⭐⭐⭐⭐ | npm install |
219
+ | SC-003 | ... | ... | ... | 参考实现 |
220
+
221
+ ### 未找到开源实现的功能点
222
+ - SC-xxx: 建议自行实现,参考[技术方案]
223
+
224
+ ## 五、技术选型
225
+ > 来源: tech-selection skill
226
+
227
+ | 维度 | 选型 | 版本 | 理由 |
228
+ |------|------|------|------|
229
+ | 语言 | TypeScript | ^5.5.0 | ... |
230
+ | ... | ... | ... | ... |
231
+
232
+ ### 锁定依赖
233
+ | 包名 | 版本 | 用途 |
234
+ |------|------|------|
235
+
236
+ ## 六、建议实施路线
237
+ ### Phase 1: MVP(预计 X 周)
238
+ - 实现 SC-001 ~ SC-xxx
239
+ - 核心技术: [列表]
240
+
241
+ ### Phase 2: 增强
242
+ - ...
243
+
244
+ ### Phase 3: 完善
245
+ - ...
246
+ ```
247
+
248
+ **合成规则**:
249
+ 1. 竞品分析和功能搜索的数据**直接引用**子 skill 报告,不要重新编造
250
+ 2. 实施路线要基于功能复杂度 + 开源可用性排序(有现成开源的优先)
251
+ 3. 每个 Phase 估算时间要参考竞品规模和技术复杂度
252
+ 4. 最终输出文件写入项目的 `.specops/REQUIREMENTS.md`
253
+
254
+ ---
255
+
256
+ ## 状态更新
257
+
258
+ 每执行一个 PHASE,更新 `.specops/state.json` 中的当前操作:
259
+
260
+ ```
261
+ PHASE 1: operation="正在识别输入类型和产品定位..." skill="demand-analysis"
262
+ PHASE 2: operation="正在拆分功能模块..." skill="demand-analysis"
263
+ PHASE 3: operation="正在搜索竞品..." skill="competitor-search"
264
+ PHASE 4: operation="正在搜索开源实现..." skill="feature-search"
265
+ PHASE 5: operation="正在进行技术选型..." skill="tech-selection"
266
+ PHASE 6: operation="正在合成需求文档..." skill="demand-analysis"
267
+ ```
268
+
269
+ ---
270
+
271
+ ## 执行流程图
272
+
273
+ ```
274
+ 用户输入
275
+
276
+ ├─ REPOS? ──→ 并行分析各仓库 ──┐
277
+ ├─ REPO? ──→ 分析单仓库 ──────┤
278
+ ├─ WEBSITE? → 抓取网站信息 ────┤
279
+ └─ TEXT ─────────────────────────┤
280
+
281
+ PHASE 1: 产品定位
282
+
283
+ PHASE 2: 功能拆分(Brainstorm)
284
+
285
+ PHASE 3: skill(name="competitor-search")
286
+
287
+ PHASE 4: skill(name="feature-search")
288
+
289
+ PHASE 5: skill(name="tech-selection")
290
+
291
+ PHASE 6: 合成 → REQUIREMENTS.md
292
+ ```
293
+
294
+ ---
295
+
296
+ ## 反模式
297
+
298
+ | 违规行为 | 严重性 |
299
+ |---------|--------|
300
+ | 不调用子 skill 自己做搜索/选型 | **严重** — 必须通过 skill() 调用 |
301
+ | 跳过 PHASE 3/4/5 中任何一个子 skill | **严重** |
302
+ | 没有识别输入类型就开始分析 | 高 |
303
+ | 跳过功能拆分直接出文档 | 高 |
304
+ | 子 skill 报告还没返回就开始写合成文档 | 高 — 必须等待子 skill 完成 |
305
+ | 功能描述太笼统没有具体 SC 编号 | 中 |
306
+ | 不更新 state.json 状态 | 中 |
307
+ | 输出不是中文 | 中 |
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: feature-search
3
+ description: "功能点搜索 Skill — 根据功能描述搜索开源实现,使用功能点搜索 API + GitHub 搜索。判断搜索结果是否符合场景。触发词:'搜索功能'、'功能搜索'、'找开源实现'、'feature search'。"
4
+ ---
5
+
6
+ # 功能点搜索 Skill
7
+
8
+ <role>
9
+ 你是一个功能点搜索专家。你的工作是接收一个功能点描述,通过功能点搜索 API 和 GitHub 搜索找到对应的开源实现,并判断每个结果是否真正符合使用场景。
10
+ </role>
11
+
12
+ ---
13
+
14
+ ## 核心 API
15
+
16
+ ### 功能点搜索接口
17
+
18
+ ```
19
+ POST http://115.190.19.198/api/feature/search
20
+ Content-Type: application/json
21
+
22
+ {
23
+ "query": "功能描述关键词",
24
+ "top_k": 10,
25
+ "min_stars": 100
26
+ }
27
+
28
+ 响应:
29
+ [
30
+ {
31
+ "repo": "owner/repo-name",
32
+ "url": "https://github.com/owner/repo-name",
33
+ "stars": 12345,
34
+ "description": "...",
35
+ "relevance_score": 0.85,
36
+ ...
37
+ }
38
+ ]
39
+ ```
40
+
41
+ ---
42
+
43
+ ## 搜索流程
44
+
45
+ ### 第一步:功能点关键词优化
46
+
47
+ ```
48
+ 输入: "实时协作编辑器"
49
+
50
+ 优化为多个搜索词:
51
+ - "real-time collaborative editor"
52
+ - "collaborative editing"
53
+ - "CRDT editor"
54
+ - "operational transform editor"
55
+ - "realtime text editing"
56
+ ```
57
+
58
+ 目的:覆盖同一功能点的不同表述和底层技术方案。
59
+
60
+ ### 第二步:功能点 API 搜索
61
+
62
+ 对每个优化后的关键词调用 API:
63
+
64
+ ```bash
65
+ # 宽松搜索(低门槛)
66
+ curl -X POST http://115.190.19.198/api/feature/search \
67
+ -H "Content-Type: application/json" \
68
+ -d '{"query": "collaborative editing", "top_k": 20, "min_stars": 50}'
69
+
70
+ # 严格搜索(高质量)
71
+ curl -X POST http://115.190.19.198/api/feature/search \
72
+ -H "Content-Type: application/json" \
73
+ -d '{"query": "CRDT editor", "top_k": 10, "min_stars": 500}'
74
+ ```
75
+
76
+ ### 第三步:GitHub 补充搜索
77
+
78
+ ```bash
79
+ # 按功能关键词搜索
80
+ gh search repos "collaborative editor" --sort stars --limit 20 \
81
+ --json name,url,description,stargazersCount,language,updatedAt
82
+
83
+ # 按技术方案搜索
84
+ gh search repos "CRDT implementation" --sort stars --limit 10 \
85
+ --json name,url,description,stargazersCount,language,updatedAt
86
+ ```
87
+
88
+ ### 第四步:场景匹配评估
89
+
90
+ 对每个搜索结果进行场景匹配判断:
91
+
92
+ ```
93
+ 对每个搜索结果:
94
+ 1. 读取仓库 README(gh api repos/{owner}/{repo} 或 web_fetch)
95
+ 2. 判断:
96
+ - 这个项目解决的是不是同一个问题?
97
+ - 技术栈是否兼容?
98
+ - 是否还在活跃维护?(最近 6 个月内有更新)
99
+ - 是否有良好的文档?
100
+ - 许可证是否允许使用?
101
+ 3. 评分: 1-5 分
102
+ 5 = 完全匹配,可直接使用
103
+ 4 = 高度匹配,需少量适配
104
+ 3 = 部分匹配,需要改造
105
+ 2 = 低匹配,仅参考思路
106
+ 1 = 不匹配
107
+ 4. 过滤掉 2 分以下的结果
108
+ ```
109
+
110
+ ---
111
+
112
+ ## 输出格式
113
+
114
+ ```markdown
115
+ # 功能点搜索报告
116
+
117
+ ## 搜索功能: [原始功能描述]
118
+ ## 搜索词: [优化后的关键词列表]
119
+
120
+ ## 匹配结果
121
+
122
+ | 排名 | 仓库 | Star | 语言 | 匹配度 | 最近更新 | 说明 |
123
+ |------|------|------|------|--------|---------|------|
124
+ | 1 | owner/repo | 5.2k | TypeScript | ⭐⭐⭐⭐⭐ | 2 天前 | 完全匹配,CRDT 实现 |
125
+ | 2 | ... | ... | ... | ⭐⭐⭐⭐ | ... | ... |
126
+
127
+ ## 推荐方案
128
+
129
+ ### 首选: [仓库名]
130
+ - 理由: ...
131
+ - 集成方式: npm install / 源码引入 / 参考实现
132
+ - 注意事项: ...
133
+
134
+ ### 备选: [仓库名]
135
+ - 理由: ...
136
+
137
+ ## 未找到开源实现的功能点
138
+ - [功能点1]: 建议自行实现,参考 [技术方案]
139
+ - [功能点2]: ...
140
+ ```
141
+
142
+ ---
143
+
144
+ ## 批量搜索模式
145
+
146
+ 当从 demand-analysis skill 调用时,会传入多个功能点:
147
+
148
+ ```
149
+ 对每个功能点:
150
+ task(category="quick", load_skills=["feature-search"],
151
+ run_in_background=true,
152
+ prompt="搜索功能点: <功能描述>")
153
+
154
+ 等待所有完成后汇总:
155
+ - 哪些功能有现成开源实现
156
+ - 哪些需要自行实现
157
+ - 推荐的技术方案组合
158
+ ```
159
+
160
+ ---
161
+
162
+ ## 状态更新
163
+
164
+ ```
165
+ operation: "正在优化搜索关键词..." skill: "feature-search"
166
+ operation: "正在调用功能点搜索 API..." skill: "feature-search"
167
+ operation: "正在 GitHub 补充搜索..." skill: "feature-search"
168
+ operation: "正在评估搜索结果匹配度..." skill: "feature-search"
169
+ operation: "正在生成功能搜索报告..." skill: "feature-search"
170
+ ```
171
+
172
+ ---
173
+
174
+ ## 反模式
175
+
176
+ | 违规行为 | 严重性 |
177
+ |---------|--------|
178
+ | 不调用功能点搜索 API 只用 GitHub | 高 |
179
+ | 不做场景匹配评估直接推荐 | 高 |
180
+ | 只搜索一个关键词 | 中 |
181
+ | 不检查仓库活跃度和许可证 | 中 |
182
+ | 推荐已经归档/不维护的项目 | 中 |