@winspan/claude-forge 1.8.1 → 1.11.0

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/README.md CHANGED
@@ -1,102 +1,99 @@
1
1
  # Claude Forge
2
2
 
3
- SDLC 智能编排引擎 — 透明旁听 Claude Code 对话,让 Claude 越用越聪明。
3
+ > SDLC 智能编排引擎 — Claude Code 越用越聪明
4
4
 
5
- ---
6
-
7
- ## 核心功能
8
-
9
- - **意图识别**:自动分析每条指令的复杂度,决定走直接执行还是多阶段编排;支持离线规则库(每 20 次 Stop 自动提炼)和负向重启回溯修正;UserContext 有状态分析(work_style/experience_level/skip_rate/override_rate/avg_satisfaction/preferred_complexity)(✅ 2026-04-17)
10
- - **Pattern 工作流**:AI 语义匹配用户意图,按预定义多阶段 Pattern 注入结构化执行指令;支持项目级 Pattern 持久化和 Thompson Sampling 多臂老虎机策略选择(✅ 2026-04-16);统一编排模板系统(TemplateRegistry + TemplateRouter)替代 PatternEngine,内置 builtin-feature/bugfix/refactor 三个模板,PatternEngine 标记废弃(✅ 2026-04-17);UserPromptHandler 重构为 19 个 Stage 流水线(OrchestrationPipeline),handle() 精简为调度循环,各 Stage 独立可测试(✅ 2026-04-17);Storage 层重构为 Repository 模式(12 个子 Repository,向后兼容)(✅ 2026-04-17);AI Gateway 统一入口(全局限流 maxConcurrent=3/minInterval=200ms + 内存缓存 TTL=5min + 分层模型策略 Haiku/Sonnet/Opus label 驱动)(✅ 2026-04-17);UserPromptHandler 单元测试补全(null 组合/冷却/pipeline 回复,8/8 通过)(✅ 2026-04-17);日志系统升级(按日期轮转 events-YYYY-MM-DD.jsonl,自动清理 7 天前旧日志,cf logs 支持实时跟踪和多维度过滤)(✅ 2026-04-17);ContextBuilder 工具类提取(buildConversationHistory/buildProfileContext/buildPlanStartContext/readDecisionsContext 等 15 个方法,UserPromptHandler 精简至 200 行)(✅ 2026-04-17)
11
- - **技能编排**:根据意图自动匹配并注入高质量技能(TDD、调试、重构、代码审查等)
12
- - **多 AI 提供商**:支持 Claude、OpenAI、Ollama 等多种 AI 提供商,可灵活切换;BaseProvider 抽象基类统一熔断/重试/统计逻辑,OllamaProvider/OpenAIProvider 完整实现;API 调用增加超时控制(30s)、指数退避重试(最多 2 次)、熔断器保护(连续失败 5 次后熔断 60s)(✅ 2026-04-18)
13
- - **Pipeline 编排**:复杂任务 AI 智能评估复杂度(simple/moderate/complex)和任务类型(bugfix/feature/refactor/performance),动态规划阶段列表(3-6 阶段),每阶段完成时自动生成结构化产物文档;AI 失败时 Forge 管理项目保守判定为需要 Pipeline;支持 profile 阶段(性能分析)、复杂度自适应推进阈值、Pipeline 强制执行;SQLite Schema v7 新增 complexity/planned_phases/phase_artifacts/reasoning 字段;ArtifactManager 统一产物目录管理(docs/YYYY-MM-DD/);Write/Edit 无 Pipeline 时硬阻断(✅ 2026-04-16);simple 路径 Forge 管理项目有代码改动时提升为 moderate + requiresPipeline(✅ 2026-04-16);阶段推进使用 plannedPhases 动态顺序,活动阈值按复杂度调整,profile 阶段完整支持(✅ 2026-04-17);AI 智能编排完整实现(analyzer/store/phase-manager/artifact-generator 全部适配 v7 schema)(✅ 2026-04-17);Daemon 事件缓冲区提升至 512KB(✅ 2026-04-17);Thompson Sampling bug 修复(✅ 2026-04-17);OpenAI/Ollama Token 追踪补全(✅ 2026-04-17);cf query stats 增强(成本汇总/满意度趋势)(✅ 2026-04-17);计划文档同步(Plan Mode 产物自动同步到 docs/YYYY-MM-DD/架构设计/)(✅ 2026-04-17);阶段产物生成支持中文文件名和阶段子目录(✅ 2026-04-17);BaseProvider 接口改造(doComplete 返回 usage 对象,支持 token 追踪和成本计算)(✅ 2026-04-17);Storage 方法扩展(getTotalCost/getCostByModel/getRecentSessions)(✅ 2026-04-17);SQLite Schema v9 新增 daemon_state 持久化表(✅ 2026-04-17);Storage 层重构为 Repository 模式(EventRepository/SessionRepository/TaskRepository 等 12 个子 Repository,向后兼容)(✅ 2026-04-17);AI Gateway 统一入口(全局限流 maxConcurrent=3/minInterval=200ms + 内存缓存 TTL=5min + 分层模型策略 Haiku/Sonnet/Opus)(✅ 2026-04-17);端到端延迟追踪(latency_traces 表,cf logs latency 查看 P50/P95/max)(✅ 2026-04-17);SessionCleanupService 提取(refineClaudeMd/syncDocs/evolveSkills 等 11 个异步清理任务,StopHandler 精简至 150 行)(✅ 2026-04-17)
14
- - **阶段产物生成**:Pipeline 每个阶段完成时,AI 自动生成对应文档(需求分析/PRD、架构设计/详细设计、性能分析报告、代码改动说明、测试报告、审查报告),存放在 `{project}/docs/YYYY-MM-DD/阶段名/`(统一使用项目 docs/ 目录);产物文件名自动加时间戳前缀避免冲突;支持按复杂度和任务类型动态调整产物清单;优先使用 AI 规划的 phaseArtifacts,降级到静态映射;中文文件名和阶段子目录(✅ 2026-04-17);幂等性保证(已存在则跳过)(✅ 2026-04-17);阶段产物生成失败时阻断阶段推进(✅ 2026-04-17);支持最多 2 次重试,超时延长至 90s(✅ 2026-04-17)
15
- - **质量门禁**:Pipeline 每阶段完成时强制触发 AI 审查,阶段质量不过则阻止推进;Stop 时有未解决 fail 项则阻断会话结束;支持 Convention must 规范注入;支持质量问题持久化和抑制规则(✅ 2026-04-16)
16
- - **任务复盘分析**:每次会话结束后自动分析执行质量,检测失败信号(用户不满意/迭代请求),生成 `retrospective.md` 报告,并将数据写入 SQLite 供后续模式学习;支持满意度评分和学习闭环(✅ 2026-04-16)
17
- - **模式学习**:每 10 次 Stop 触发 AI 提炼同类任务的失败模式,下次同类任务开始时自动注入预防建议;支持基于真实成功率的效果评分更新(✅ 2026-04-16)
18
- - **项目规范(Convention)**:根据项目技术栈 + 已安装规范自动蒸馏项目级自定义规范,注入 CLAUDE.md
19
- - **会话蒸馏**:将对话中的决策和时间线自动提炼为 `decisions.md` 和 `timeline.md`;decisions.md 自动构建树索引,支持 AI 推理检索
20
- - **上下文续接**:会话中断后,下次打开自动恢复上次工作状态
21
- - **结构化事件日志**:所有 Hook 事件按项目分类写入 `events.jsonl`,支持 `cf logs` 实时查看
22
- - **CLAUDE.md 优化**:根据积累的决策日志自动优化项目规范文件,支持多语言生态子模块扫描
23
- - **用户画像**:根据行为自适应调整干预深度(guided / balanced / autonomous)
5
+ Claude Forge 是一个为 Claude Code 设计的智能编排引擎,通过透明旁听对话、自动分析意图、注入最佳实践,让 AI 辅助开发更高效、更可靠。
24
6
 
25
- ---
7
+ [![npm version](https://img.shields.io/npm/v/@winspan/claude-forge)](https://www.npmjs.com/package/@winspan/claude-forge)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
26
9
 
27
- ## 快速开始
10
+ ## ✨ 核心特性
28
11
 
29
- ### Web 管理后台
12
+ - 🎯 **智能意图识别** - 自动分析任务复杂度,决定执行策略
13
+ - 🔄 **Pipeline 编排** - 复杂任务自动拆分为多阶段流程(分析→设计→编码→测试→审查)
14
+ - 🛡️ **质量门禁** - 每个阶段自动质量审查,不合格则阻止推进
15
+ - 📊 **Web 管理后台** - 实时监控会话、Pipeline、质量问题、知识图谱
16
+ - 🧠 **知识积累** - 自动提炼决策日志、时间线、项目规范
17
+ - 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD、重构、调试等)
18
+ - 📈 **数据分析** - 成本统计、满意度趋势、ROI 分析
19
+ - 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama
30
20
 
31
- ```bash
32
- cf web # 启动 Web 管理后台(默认端口 3721)
33
- ```
21
+ ---
34
22
 
35
- 功能:
36
- - 实时仪表盘(会话统计/事件流/质量趋势/Pipeline 进度)
37
- - 会话管理(详情查看/阶段时间线/工具调用分析)
38
- - 事件日志(多维度过滤/实时刷新)
39
- - Pipeline 可视化(阶段流转/产物追踪)
40
- - 质量分析(问题分布/历史趋势)
41
- - 配置管理(在线编辑 config.yaml)
42
- - 控制台功能(Dashboard 操作/Pipeline 管理/质量门禁/Daemon 控制/实时日志/命令面板) [x] 2026-04-18
43
- - 数据分析(成本统计/满意度趋势/模型使用分布/ROI 统计) [x] 2026-04-18
44
- - Pipeline 管理(关闭 Pipeline/批量清理过期/阶段可视化/跳过阶段) [x] 2026-04-18
45
- - 质量门禁管理(标记已修复/忽略问题/批量解决/历史趋势) [x] 2026-04-18
46
- - Daemon 控制(重启/状态监控/PID/内存/运行时间/API 统计) [x] 2026-04-18
47
- - 实时日志流(SSE 推送) [x] 2026-04-18
48
- - 命令面板快捷导航(⌘K) [x] 2026-04-18
49
- - 知识库(知识节点搜索/类型分布/邻居关系图/配置在线编辑) [x] 2026-04-18
23
+ ## 核心功能
50
24
 
51
- 技术栈: React + TypeScript + TailwindCSS + Recharts + Framer Motion
25
+ | 功能 | 说明 |
26
+ |------|------|
27
+ | 意图识别 | 自动分析任务复杂度(simple/moderate/complex),决定执行策略 |
28
+ | Pipeline 编排 | 复杂任务自动拆分为多阶段流程,支持 AI 智能规划 |
29
+ | 质量门禁 | 每个阶段自动 AI 审查,不合格则阻止推进 |
30
+ | 技能编排 | 根据意图自动匹配并注入最佳实践 |
31
+ | 知识蒸馏 | 自动提炼决策日志、时间线、项目规范 |
32
+ | 会话续接 | 中断后自动恢复上次工作状态 |
33
+ | 用户画像 | 根据行为自适应调整干预深度 |
34
+ | 多 AI 提供商 | 支持 Claude、OpenAI、Ollama |
35
+ | Web 管理后台 | 实时监控、项目管理、Pipeline 控制、质量追踪 |
36
+ | 阶段产物 | 每个阶段自动生成结构化文档 |
37
+ | 模式学习 | 从历史失败中提炼预防建议 |
38
+ | 项目规范 | 根据技术栈自动蒸馏项目级规范 |
52
39
 
53
40
  ---
54
41
 
55
- ### 前置条件
42
+ ## 🚀 快速开始
56
43
 
57
- - Node.js 18+
58
- - Claude Code CLI 已安装
59
- - AI 提供商 API Key(Anthropic / OpenAI / Ollama)
60
-
61
- ### 安装
44
+ ### 1. 安装
62
45
 
63
46
  ```bash
64
47
  # 从 npm 安装(推荐)
65
- npm install -g @winspan/claude-forge # v1.6.0
48
+ npm install -g @winspan/claude-forge
66
49
 
67
50
  # 或从源码构建
68
- git clone <repo>
51
+ git clone https://github.com/your-org/claude-forge
69
52
  cd claude-forge
70
53
  npm install && npm run build && npm link
71
54
  ```
72
55
 
73
- ### 初始化
56
+ ### 2. 初始化
74
57
 
75
58
  ```bash
76
59
  cf init
77
60
  ```
78
61
 
79
- `init` 会完成:
80
- 1. 创建 `~/.claude-forge/` 数据目录
81
- 2. 生成默认配置 `~/.claude-forge/config.yaml`
82
- 3. 安装 Hook 脚本到 `~/.claude-forge/hooks/`
83
- 4. 注册 Hook `~/.claude/settings.json`
62
+ 初始化会完成:
63
+ - 创建数据目录 `~/.claude-forge/`
64
+ - 生成默认配置 `config.yaml`
65
+ - 安装 Hook 脚本
66
+ - 注册到 Claude Code
84
67
 
85
- > 初始化后需要重启 Claude Code 会话,Hook 才会生效。
68
+ > ⚠️ 初始化后需要重启 Claude Code 会话,Hook 才会生效。
86
69
 
87
- ### 启动守护进程
70
+ ### 3. 启动守护进程
88
71
 
89
72
  ```bash
90
- # 交互式 TUI 菜单(无子命令时自动启动)
73
+ # 交互式 TUI 菜单
91
74
  cf
92
75
 
93
- # 或直接启动守护进程
76
+ # 或直接启动
94
77
  cf daemon start
95
78
  ```
96
79
 
97
- ### 验证运行
80
+ ### 4. 打开 Web 管理后台
81
+
82
+ ```bash
83
+ cf web
84
+ ```
85
+
86
+ 访问 http://localhost:3721 查看:
87
+ - 📊 实时仪表盘
88
+ - 💬 会话管理
89
+ - 🔄 Pipeline 可视化
90
+ - 🛡️ 质量门禁
91
+ - 🧠 知识图谱
92
+ - 📈 数据分析
93
+
94
+ ### 5. 验证运行
98
95
 
99
- 启动守护进程后,正常使用 Claude Code 即可。发一条消息,观察 Claude 回复前是否出现执行路径卡片:
96
+ Claude Code 中发送一条消息,观察回复前是否出现执行路径卡片:
100
97
 
101
98
  ```
102
99
  ┏━━━ Forge 执行路径 ━━━
@@ -109,35 +106,120 @@ cf daemon start
109
106
 
110
107
  ---
111
108
 
112
- ## API Key 配置
109
+ ## 📖 核心概念
110
+
111
+ ### Pipeline 编排
112
+
113
+ 复杂任务自动拆分为多阶段流程:
114
+
115
+ ```
116
+ analyze(需求分析)
117
+
118
+ design(架构设计)
119
+
120
+ code(编码实现)
121
+
122
+ test(测试验证)
123
+
124
+ review(代码审查)
125
+ ```
126
+
127
+ 每个阶段完成时:
128
+ - 🤖 AI 自动生成阶段产物文档
129
+ - 🛡️ 质量门禁自动审查
130
+ - 📊 进度实时更新到 Web 后台
131
+
132
+ ### 质量门禁
133
+
134
+ 每个阶段完成时强制触发 AI 审查:
135
+ - ❌ 质量不过 → 阻止推进到下一阶段
136
+ - ✅ 质量通过 → 自动推进
137
+ - 📝 问题记录 → 持久化到数据库
138
+
139
+ ### 知识积累
140
+
141
+ 自动提炼并持久化:
142
+ - 📋 **决策日志** (`decisions.md`) - 关键决策和理由
143
+ - ⏱️ **时间线** (`timeline.md`) - 项目演进历史
144
+ - 📊 **复盘报告** (`retrospective.md`) - 任务执行分析
145
+ - 📐 **项目规范** (`custom-convention.yaml`) - 自定义规范
146
+
147
+ ### 技能编排
148
+
149
+ 根据意图自动匹配并注入最佳实践:
150
+ - 🧪 TDD(测试驱动开发)
151
+ - 🐛 调试工作流
152
+ - ♻️ 重构策略
153
+ - 👀 代码审查清单
154
+ - 🔒 安全加固
155
+
156
+ ---
157
+
158
+ ## ⚙️ 配置
159
+
160
+ ### API Key 设置
113
161
 
114
162
  Forge 自动从以下位置获取 API Key(优先级从高到低):
115
163
 
116
164
  1. 环境变量 `ANTHROPIC_AUTH_TOKEN`
117
165
  2. 环境变量 `ANTHROPIC_API_KEY`
118
- 3. 配置文件 `~/.claude-forge/config.yaml` 中的 `distill.api_key`
166
+ 3. 配置文件 `~/.claude-forge/config.yaml`
119
167
 
120
- **推荐做法**:使用 `cf config api` 命令配置:
168
+ **推荐方式**:
121
169
 
122
170
  ```bash
123
171
  # 设置 API Key
124
172
  cf config api --key "sk-ant-..."
125
173
 
126
- # 设置自定义 API 端点(如代理服务)
174
+ # 设置自定义端点(如代理)
127
175
  cf config api --url https://your-proxy.example.com
128
176
 
129
177
  # 切换 AI 提供商
130
178
  cf config api --provider openai # 使用 OpenAI
131
- cf config api --provider ollama # 使用 Ollama
179
+ cf config api --provider ollama # 使用 Ollama(本地)
132
180
  cf config api --provider claude # 使用 Claude(默认)
133
181
  ```
134
182
 
135
- 或通过 shell profile 设置环境变量:
183
+ ### 配置文件
136
184
 
137
- ```bash
138
- export ANTHROPIC_API_KEY="sk-ant-..."
185
+ 配置文件位于 `~/.claude-forge/config.yaml`:
186
+
187
+ ```yaml
188
+ # 存储
189
+ storage:
190
+ path: ~/.claude-forge/data.db
191
+ max_size_mb: 1024
192
+
193
+ # AI 提供商
194
+ distill:
195
+ model: claude-sonnet-4-6
196
+ api_key: "" # 留空自动从环境变量获取
197
+ base_url: "" # 自定义端点
198
+
199
+ # Autopilot
200
+ autopilot:
201
+ enabled: true
202
+ intent_analysis: true # 意图识别
203
+ knowledge_search: true # 知识检索
204
+ quality_gate: true # 质量门禁
205
+ auto_start_pipeline: true # 自动启动 Pipeline
206
+ pipeline_confirm_mode: prompt # prompt | auto | preview
207
+
208
+ # 会话续接
209
+ resume:
210
+ enabled: true
211
+ timeout_minutes: 10
212
+ max_age_days: 7
139
213
  ```
140
214
 
215
+ ### pipeline_confirm_mode 说明
216
+
217
+ | 值 | 行为 |
218
+ |----|------|
219
+ | `prompt` | 展示 A/B/C 选项,等待用户选择(默认) |
220
+ | `auto` | 自动启动完整编排,无需确认 |
221
+ | `preview` | 仅展示执行卡片,不启动 Pipeline |
222
+
141
223
  ---
142
224
 
143
225
  ## 工作原理
@@ -488,28 +570,113 @@ npm rebuild better-sqlite3
488
570
 
489
571
  ---
490
572
 
491
- ## 常见问题
573
+ ## 💡 最佳实践
574
+
575
+ ### 1. 合理使用 Pipeline
576
+
577
+ **适合使用 Pipeline 的场景**:
578
+ - ✅ 架构重构
579
+ - ✅ 新功能开发(涉及多个模块)
580
+ - ✅ 性能优化(需要分析 + 实施 + 验证)
581
+ - ✅ 复杂 Bug 修复(需要深入分析)
582
+
583
+ **不适合使用 Pipeline 的场景**:
584
+ - ❌ 简单的文本修改
585
+ - ❌ 配置文件调整
586
+ - ❌ 文档更新
587
+ - ❌ 单文件小改动
588
+
589
+ **提示**:可以通过 `pipeline_confirm_mode` 控制 Pipeline 启动方式。
590
+
591
+ ### 2. 充分利用知识积累
592
+
593
+ **定期查看项目文档**:
594
+ ```bash
595
+ # 查看决策日志
596
+ cat .claude-forge/decisions.md
597
+
598
+ # 查看时间线
599
+ cat .claude-forge/timeline.md
600
+
601
+ # 查看复盘报告
602
+ cat .claude-forge/retrospective.md
603
+ ```
604
+
605
+ **在 Web 后台查看知识图谱**:
606
+ - 访问 http://localhost:3721/knowledge
607
+ - 搜索相关知识节点
608
+ - 查看节点关系图
609
+
610
+ ### 3. 质量门禁配置
611
+
612
+ **调整审查频率**:
613
+ ```yaml
614
+ autopilot:
615
+ quality_review_interval: 3 # 每 3 次代码修改触发一次审查
616
+ ```
617
+
618
+ **临时关闭质量门禁**(不推荐):
619
+ ```yaml
620
+ autopilot:
621
+ quality_gate: false
622
+ ```
623
+
624
+ ### 4. 用户画像调整
625
+
626
+ **根据经验水平调整**:
627
+ ```bash
628
+ # 新手模式(更多指导)
629
+ cf profile set --style guided --level junior
630
+
631
+ # 专家模式(最小干预)
632
+ cf profile set --style autonomous --level senior
633
+ ```
634
+
635
+ ### 5. 监控和调试
636
+
637
+ **实时查看日志**:
638
+ ```bash
639
+ cf logs -f
640
+ ```
641
+
642
+ **查看 Pipeline 状态**:
643
+ ```bash
644
+ cf pipeline list
645
+ ```
646
+
647
+ **查看 Web 管理后台**:
648
+ ```bash
649
+ cf web
650
+ ```
651
+
652
+ ---
653
+
654
+ ## ❓ 常见问题
492
655
 
493
- **Q: 守护进程没有启动,Claude Code 还能正常用吗?**
656
+ ### Q: 守护进程没有启动,Claude Code 还能正常用吗?
494
657
 
495
- 可以。Hook 脚本在守护进程不可用时会静默失败,不影响 Claude Code 正常使用。
658
+ **A**: 可以。Hook 脚本在守护进程不可用时会静默失败,不影响 Claude Code 正常使用。
496
659
 
497
- **Q: 如何查看 Forge 是否在工作?**
660
+ ### Q: 如何查看 Forge 是否在工作?
498
661
 
662
+ **A**:
499
663
  ```bash
500
664
  cf daemon status
501
665
  cf logs -f
502
666
  ```
503
667
 
504
- **Q: 重装 Node.js 后守护进程启动失败?**
668
+ 或者在 Claude Code 中发送消息,观察是否出现执行路径卡片。
505
669
 
670
+ ### Q: 重装 Node.js 后守护进程启动失败?
671
+
672
+ **A**:
506
673
  ```bash
507
674
  npm rebuild better-sqlite3
508
675
  ```
509
676
 
510
- **Q: 如何关闭某个功能?**
677
+ ### Q: 如何关闭某个功能?
511
678
 
512
- 编辑 `~/.claude-forge/config.yaml`,例如关闭质量门禁:
679
+ **A**: 编辑 `~/.claude-forge/config.yaml`,例如关闭质量门禁:
513
680
 
514
681
  ```yaml
515
682
  autopilot:
@@ -518,23 +685,71 @@ autopilot:
518
685
 
519
686
  重启守护进程生效:`cf daemon restart`
520
687
 
521
- **Q: decisions.md 和 timeline.md 在哪里?**
688
+ ### Q: decisions.md 和 timeline.md 在哪里?
522
689
 
690
+ **A**:
523
691
  ```
524
692
  your-project/
525
693
  └── .claude-forge/
526
694
  ├── decisions.md
527
695
  ├── timeline.md
696
+ ├── retrospective.md
528
697
  └── custom-convention.yaml
529
698
  ```
530
699
 
531
- **Q: 如何完全卸载?**
700
+ ### Q: Pipeline 卡住了怎么办?
701
+
702
+ **A**:
703
+ 1. 打开 Web 管理后台:`cf web`
704
+ 2. 进入 Pipeline 详情页
705
+ 3. 点击"继续执行"按钮
706
+ 4. 或者手动标记任务为完成
532
707
 
708
+ ### Q: 如何查看成本统计?
709
+
710
+ **A**:
711
+ ```bash
712
+ cf query stats
713
+ ```
714
+
715
+ 或访问 Web 管理后台的"数据分析"页面。
716
+
717
+ ### Q: 如何完全卸载?
718
+
719
+ **A**:
533
720
  ```bash
534
721
  cf uninit # 移除 Hook(保留数据)
535
722
  rm -rf ~/.claude-forge # 彻底清除数据
536
723
  ```
537
724
 
725
+ ### Q: 支持哪些 AI 提供商?
726
+
727
+ **A**:
728
+ - **Claude**(默认)- Anthropic API
729
+ - **OpenAI** - GPT-4 等模型
730
+ - **Ollama** - 本地部署,无需 API Key
731
+
732
+ 切换方式:
733
+ ```bash
734
+ cf config api --provider openai --key "sk-..."
735
+ ```
736
+
737
+ ### Q: Web 管理后台无法访问?
738
+
739
+ **A**:
740
+ 1. 确认守护进程已启动:`cf daemon status`
741
+ 2. 检查端口是否被占用:`lsof -i :3721`
742
+ 3. 查看日志:`tail -f ~/.claude-forge/daemon.log`
743
+
744
+ ### Q: 如何备份数据?
745
+
746
+ **A**:
747
+ ```bash
748
+ cf backup
749
+ ```
750
+
751
+ 备份文件保存在 `~/.claude-forge/backups/`。
752
+
538
753
  ---
539
754
 
540
755
  ## License
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,0BAA0B;IAC1B,OAAO,CAAC,aAAa,CAAK;gBAEd,GAAG,EAAE,cAAc;IAIzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA0G7D,OAAO,CAAC,mBAAmB;CAsB5B"}
1
+ {"version":3,"file":"pre-tool-use-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQpD,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,0BAA0B;IAC1B,OAAO,CAAC,aAAa,CAAK;gBAEd,GAAG,EAAE,cAAc;IAIzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoH7D,OAAO,CAAC,mBAAmB;CAsB5B"}
@@ -4,6 +4,7 @@ import { withSafeHandler } from './safe-handler.js';
4
4
  import { logger } from '../../utils/logger.js';
5
5
  import { ForgeFormatter } from '../../utils/formatter.js';
6
6
  import { isForgeManaged } from '../lifecycle.js';
7
+ import { pendingPromptsManager } from '../pending-prompts.js';
7
8
  export class PreToolUseHandler extends BaseHookHandler {
8
9
  promptInjector = new PromptInjector();
9
10
  /** 工具调用计数,用于控制成本摘要注入频率 */
@@ -14,6 +15,12 @@ export class PreToolUseHandler extends BaseHookHandler {
14
15
  async handle(event) {
15
16
  const { orchestration, skillRegistry, pipelineEngine, resumeEngine, config, checkedProjects } = this.ctx;
16
17
  let decision = null;
18
+ // 0. 检查待注入提示(Pipeline 继续执行)
19
+ const pendingPrompt = pendingPromptsManager.pop(event.session_id);
20
+ if (pendingPrompt) {
21
+ logger.info(`[Forge:Pipeline] 注入待执行提示 | session=${event.session_id?.slice(0, 8)}`);
22
+ decision = this.appendContext(decision, ForgeFormatter.formatModuleNotification('pipeline-resume', pendingPrompt));
23
+ }
17
24
  // 1. 策略评估(可能拦截,内部已包含通知刷新)
18
25
  if (orchestration) {
19
26
  decision = orchestration.evaluatePreToolUse(event);
@@ -1 +1 @@
1
- {"version":3,"file":"pre-tool-use-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pre-tool-use-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 待注入提示队列
3
+ * 用于 Pipeline "继续执行" 功能:按钮触发后记录提示,下次 PreToolUse 时注入
4
+ */
5
+ declare class PendingPromptsManager {
6
+ private prompts;
7
+ /**
8
+ * 添加待注入提示
9
+ */
10
+ add(prompt: string, sessionId?: string): string;
11
+ /**
12
+ * 获取并移除下一个待注入提示(FIFO)
13
+ * @param sessionId 可选:只获取匹配该会话的提示
14
+ */
15
+ pop(sessionId?: string): string | null;
16
+ /**
17
+ * 查看下一个待注入提示(不移除)
18
+ */
19
+ peek(sessionId?: string): string | null;
20
+ /**
21
+ * 清空所有待注入提示
22
+ */
23
+ clear(): void;
24
+ /**
25
+ * 获取队列长度
26
+ */
27
+ size(): number;
28
+ }
29
+ export declare const pendingPromptsManager: PendingPromptsManager;
30
+ export {};
31
+ //# sourceMappingURL=pending-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-prompts.d.ts","sourceRoot":"","sources":["../../src/daemon/pending-prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,cAAM,qBAAqB;IACzB,OAAO,CAAC,OAAO,CAAuB;IAEtC;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAW/C;;;OAGG;IACH,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAatC;;OAEG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * 待注入提示队列
3
+ * 用于 Pipeline "继续执行" 功能:按钮触发后记录提示,下次 PreToolUse 时注入
4
+ */
5
+ class PendingPromptsManager {
6
+ prompts = [];
7
+ /**
8
+ * 添加待注入提示
9
+ */
10
+ add(prompt, sessionId) {
11
+ const id = `prompt_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
12
+ this.prompts.push({
13
+ id,
14
+ prompt,
15
+ createdAt: new Date().toISOString(),
16
+ sessionId,
17
+ });
18
+ return id;
19
+ }
20
+ /**
21
+ * 获取并移除下一个待注入提示(FIFO)
22
+ * @param sessionId 可选:只获取匹配该会话的提示
23
+ */
24
+ pop(sessionId) {
25
+ const index = sessionId
26
+ ? this.prompts.findIndex(p => !p.sessionId || p.sessionId === sessionId)
27
+ : 0;
28
+ if (index === -1 || this.prompts.length === 0) {
29
+ return null;
30
+ }
31
+ const prompt = this.prompts.splice(index, 1)[0];
32
+ return prompt.prompt;
33
+ }
34
+ /**
35
+ * 查看下一个待注入提示(不移除)
36
+ */
37
+ peek(sessionId) {
38
+ const prompt = sessionId
39
+ ? this.prompts.find(p => !p.sessionId || p.sessionId === sessionId)
40
+ : this.prompts[0];
41
+ return prompt?.prompt || null;
42
+ }
43
+ /**
44
+ * 清空所有待注入提示
45
+ */
46
+ clear() {
47
+ this.prompts = [];
48
+ }
49
+ /**
50
+ * 获取队列长度
51
+ */
52
+ size() {
53
+ return this.prompts.length;
54
+ }
55
+ }
56
+ export const pendingPromptsManager = new PendingPromptsManager();
57
+ //# sourceMappingURL=pending-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-prompts.js","sourceRoot":"","sources":["../../src/daemon/pending-prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,qBAAqB;IACjB,OAAO,GAAoB,EAAE,CAAC;IAEtC;;OAEG;IACH,GAAG,CAAC,MAAc,EAAE,SAAkB;QACpC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,EAAE;YACF,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;SACV,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,SAAkB;QACpB,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;YACxE,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,SAAkB;QACrB,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;YACnE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpB,OAAO,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doc-sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAc1D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAUlE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB5E;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,UAAU;IAE5C;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvF;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,qBAAqB;YA6ErB,YAAY;CA8C3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doc-sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAc1D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAUlE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB5E;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,UAAU;IAE5C;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvF;;OAEG;YACW,kBAAkB;IAiEhC;;OAEG;YACW,qBAAqB;YA6ErB,YAAY;CA8C3B"}