@winspan/claude-forge 1.8.4 → 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 +294 -79
- package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/pre-tool-use-handler.js +7 -0
- package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
- package/dist/daemon/pending-prompts.d.ts +31 -0
- package/dist/daemon/pending-prompts.d.ts.map +1 -0
- package/dist/daemon/pending-prompts.js +57 -0
- package/dist/daemon/pending-prompts.js.map +1 -0
- package/dist/doc-sync/index.d.ts.map +1 -1
- package/dist/doc-sync/index.js +34 -3
- package/dist/doc-sync/index.js.map +1 -1
- package/dist/pipeline/store.d.ts +8 -1
- package/dist/pipeline/store.d.ts.map +1 -1
- package/dist/pipeline/store.js +31 -8
- package/dist/pipeline/store.js.map +1 -1
- package/dist/web/routes/pipelines.d.ts.map +1 -1
- package/dist/web/routes/pipelines.js +64 -0
- package/dist/web/routes/pipelines.js.map +1 -1
- package/dist/web/routes/projects.d.ts +4 -0
- package/dist/web/routes/projects.d.ts.map +1 -0
- package/dist/web/routes/projects.js +127 -0
- package/dist/web/routes/projects.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -8
- package/dist/web/server.js.map +1 -1
- package/dist/web-static/assets/index-CJ2_xxI9.css +2 -0
- package/dist/web-static/assets/index-uZv0nhI2.js +62 -0
- package/dist/web-static/index.html +2 -2
- package/package.json +1 -1
- package/dist/web-static/assets/index-BLQCGZ4G.js +0 -62
- package/dist/web-static/assets/index-Djj1UAku.css +0 -2
package/README.md
CHANGED
|
@@ -1,102 +1,99 @@
|
|
|
1
1
|
# Claude Forge
|
|
2
2
|
|
|
3
|
-
SDLC 智能编排引擎 —
|
|
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
|
+
[](https://www.npmjs.com/package/@winspan/claude-forge)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
26
9
|
|
|
27
|
-
##
|
|
10
|
+
## ✨ 核心特性
|
|
28
11
|
|
|
29
|
-
|
|
12
|
+
- 🎯 **智能意图识别** - 自动分析任务复杂度,决定执行策略
|
|
13
|
+
- 🔄 **Pipeline 编排** - 复杂任务自动拆分为多阶段流程(分析→设计→编码→测试→审查)
|
|
14
|
+
- 🛡️ **质量门禁** - 每个阶段自动质量审查,不合格则阻止推进
|
|
15
|
+
- 📊 **Web 管理后台** - 实时监控会话、Pipeline、质量问题、知识图谱
|
|
16
|
+
- 🧠 **知识积累** - 自动提炼决策日志、时间线、项目规范
|
|
17
|
+
- 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD、重构、调试等)
|
|
18
|
+
- 📈 **数据分析** - 成本统计、满意度趋势、ROI 分析
|
|
19
|
+
- 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama
|
|
30
20
|
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
48
|
+
npm install -g @winspan/claude-forge
|
|
66
49
|
|
|
67
50
|
# 或从源码构建
|
|
68
|
-
git clone
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
96
|
+
在 Claude Code 中发送一条消息,观察回复前是否出现执行路径卡片:
|
|
100
97
|
|
|
101
98
|
```
|
|
102
99
|
┏━━━ Forge 执行路径 ━━━
|
|
@@ -109,35 +106,120 @@ cf daemon start
|
|
|
109
106
|
|
|
110
107
|
---
|
|
111
108
|
|
|
112
|
-
##
|
|
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`
|
|
166
|
+
3. 配置文件 `~/.claude-forge/config.yaml`
|
|
119
167
|
|
|
120
|
-
|
|
168
|
+
**推荐方式**:
|
|
121
169
|
|
|
122
170
|
```bash
|
|
123
171
|
# 设置 API Key
|
|
124
172
|
cf config api --key "sk-ant-..."
|
|
125
173
|
|
|
126
|
-
#
|
|
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
|
-
|
|
183
|
+
### 配置文件
|
|
136
184
|
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
656
|
+
### Q: 守护进程没有启动,Claude Code 还能正常用吗?
|
|
494
657
|
|
|
495
|
-
可以。Hook 脚本在守护进程不可用时会静默失败,不影响 Claude Code 正常使用。
|
|
658
|
+
**A**: 可以。Hook 脚本在守护进程不可用时会静默失败,不影响 Claude Code 正常使用。
|
|
496
659
|
|
|
497
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pre-tool-use-handler.js","sourceRoot":"","sources":["../../../src/daemon/handlers/pre-tool-use-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACnC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IACvD,0BAA0B;IAClB,aAAa,GAAG,CAAC,CAAC;IAE1B,YAAY,GAAmB;QAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAEzG,IAAI,QAAQ,GAAwB,IAAI,CAAC;QAEzC,4BAA4B;QAC5B,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnF,QAAQ,GAAG,IAAI,CAAC,aAAa,CAC3B,QAAQ,EACR,cAAc,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAC1E,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,IAAI,aAAa,EAAE,CAAC;YAClB,QAAQ,GAAG,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,SAAS,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/E,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,YAAY,GAAG,cAAc,EAAE,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;QAC5F,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC;QACpF,IAAI,QAAQ,EAAE,CAAC;YACb,yCAAyC;YACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;YAClH,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC,CAAC;YAC9D,QAAQ,GAAG,IAAI,CAAC,aAAa,CAC3B,QAAQ,EACR,cAAc,CAAC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAC3D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAClD,CAAC;QAED,qBAAqB;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC7E,OAAO,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,aAAa,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrE,QAAQ,GAAG,IAAI,CAAC,aAAa,CAC3B,QAAQ,EACR,cAAc,CAAC,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,CAAC,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAChD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,CACvE,KAAK,CAAC,SAAS,IAAI,EAAE,EACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAChC,KAAK,CAAC,YAAY,CACnB,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACtC,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,aAAa,EAAE,CACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACtC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAC3B,QAAQ,EACR,cAAc,CAAC,wBAAwB,CAAC,WAAW,EAAE,eAAe,OAAO,EAAE,CAAC,CAC/E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC;YAC/D,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;gBACxF,MAAM,QAAQ,GAAG,sBAAsB,WAAW,CAAC,cAAc,EAAE,aAAa,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC5G,MAAM,CAAC,IAAI,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;gBAClC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAC3B,QAAQ,EACR,cAAc,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG;YAC7C,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC/C,IACE,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,CAAC;YAC7C,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;YAClC,CAAC,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC;YACtD,CAAC,SAAS,EACV,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yCAAyC,QAAQ,OAAO,CAAC,CAAC;YACvE,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,0FAA0F;aACnG,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,QAAQ,IAAI,SAAS,CAAC;IAC/B,CAAC;IAEO,mBAAmB,CACzB,WAAmB,EACnB,YAAqB,EACrB,YAA4C;QAE5C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAClE,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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;
|
|
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"}
|