@winspan/claude-forge 1.13.4 → 1.14.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 +20 -20
- package/dist/claudemd/writer.d.ts +11 -3
- package/dist/claudemd/writer.d.ts.map +1 -1
- package/dist/claudemd/writer.js +53 -33
- package/dist/claudemd/writer.js.map +1 -1
- package/dist/convention/convention-manager.d.ts +6 -4
- package/dist/convention/convention-manager.d.ts.map +1 -1
- package/dist/convention/convention-manager.js +46 -53
- package/dist/convention/convention-manager.js.map +1 -1
- package/dist/daemon/engine-registry/init-pipeline.d.ts +2 -1
- package/dist/daemon/engine-registry/init-pipeline.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-pipeline.js +2 -2
- package/dist/daemon/engine-registry/init-pipeline.js.map +1 -1
- package/dist/daemon/engine-registry/init-resume.d.ts.map +1 -1
- package/dist/daemon/engine-registry/init-resume.js +3 -1
- package/dist/daemon/engine-registry/init-resume.js.map +1 -1
- package/dist/daemon/engine-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.js +3 -2
- package/dist/daemon/engine-registry.js.map +1 -1
- package/dist/daemon/handlers/session-cleanup.js +1 -1
- package/dist/daemon/handlers/session-cleanup.js.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.js +7 -1
- package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +1 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/server.d.ts +7 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +34 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/pipeline/index.d.ts +4 -1
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +36 -25
- package/dist/pipeline/index.js.map +1 -1
- package/dist/resume/index.d.ts +4 -3
- package/dist/resume/index.d.ts.map +1 -1
- package/dist/resume/index.js +27 -37
- package/dist/resume/index.js.map +1 -1
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/repositories/task-repository.d.ts +3 -0
- package/dist/storage/repositories/task-repository.d.ts.map +1 -1
- package/dist/storage/repositories/task-repository.js +1 -1
- package/dist/storage/repositories/task-repository.js.map +1 -1
- package/dist/storage/sqlite.d.ts +3 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/utils/formatter.d.ts +2 -0
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +18 -3
- package/dist/utils/formatter.js.map +1 -1
- package/dist/web/routes/claudemd.d.ts.map +1 -1
- package/dist/web/routes/claudemd.js +16 -17
- package/dist/web/routes/claudemd.js.map +1 -1
- package/dist/web/routes/projects.d.ts.map +1 -1
- package/dist/web/routes/projects.js +10 -2
- package/dist/web/routes/projects.js.map +1 -1
- package/dist/web/routes/quality.d.ts +2 -1
- package/dist/web/routes/quality.d.ts.map +1 -1
- package/dist/web/routes/quality.js +225 -1
- package/dist/web/routes/quality.js.map +1 -1
- package/dist/web/server.d.ts +2 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +2 -2
- package/dist/web/server.js.map +1 -1
- package/dist/web-static/assets/index-BF5PtNrL.js +63 -0
- package/dist/web-static/assets/index-Cc7f7I9b.css +2 -0
- package/dist/web-static/index.html +2 -2
- package/package.json +1 -1
- package/dist/web-static/assets/index-B8q0ISqs.css +0 -2
- package/dist/web-static/assets/index-CHuRiJ8r.js +0 -62
package/README.md
CHANGED
|
@@ -9,14 +9,14 @@ Claude Forge 是一个为 Claude Code 设计的智能编排引擎,通过透明
|
|
|
9
9
|
|
|
10
10
|
## ✨ 核心特性
|
|
11
11
|
|
|
12
|
-
- 🎯 **智能意图识别** -
|
|
13
|
-
- 🔄 **Pipeline 编排** - 复杂任务自动拆分为多阶段流程(分析→设计→编码→测试→审查),支持质量门禁和阶段产物生成 [x] 2025-01-
|
|
14
|
-
- 🛡️ **质量门禁** - 每个阶段自动 AI
|
|
15
|
-
- 📊 **Web 管理后台** - 实时监控会话、Pipeline、质量问题、知识图谱、自定义规范管理、CLAUDE.md 管理(支持模块化查看和蒸馏压缩) [x] 2025-01-
|
|
16
|
-
- 🧠 **知识积累** -
|
|
17
|
-
- 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD
|
|
18
|
-
- 📈 **数据分析** - 成本统计、满意度趋势、ROI
|
|
19
|
-
- 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama
|
|
12
|
+
- 🎯 **智能意图识别** - 自动分析任务复杂度,决定执行策略(支持规则库匹配和 AI 推理) [x] 2025-01-18
|
|
13
|
+
- 🔄 **Pipeline 编排** - 复杂任务自动拆分为多阶段流程(分析→设计→编码→测试→审查),支持质量门禁和阶段产物生成 [x] 2025-01-18
|
|
14
|
+
- 🛡️ **质量门禁** - 每个阶段自动 AI 审查,支持需求规格、安全性、代码质量、测试覆盖、性能等多维度检查,问题追踪和解决状态管理 [x] 2025-01-18
|
|
15
|
+
- 📊 **Web 管理后台** - 实时监控会话、Pipeline、质量问题、知识图谱、自定义规范管理、CLAUDE.md 管理(支持模块化查看和蒸馏压缩) [x] 2025-01-18
|
|
16
|
+
- 🧠 **知识积累** - 自动提炼决策日志、时间线、项目规范,支持树索引和语义检索 [x] 2025-01-18
|
|
17
|
+
- 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD、重构、调试等),支持关键词映射和命中率统计 [x] 2025-01-18
|
|
18
|
+
- 📈 **数据分析** - 成本统计、满意度趋势、ROI 分析,支持延迟追踪和 SLA 告警 [x] 2025-01-18
|
|
19
|
+
- 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama,统一网关层(速率限制、熔断、缓存、预算管理) [x] 2025-01-18
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -24,18 +24,18 @@ Claude Forge 是一个为 Claude Code 设计的智能编排引擎,通过透明
|
|
|
24
24
|
|
|
25
25
|
| 功能 | 说明 |
|
|
26
26
|
|------|------|
|
|
27
|
-
| 意图识别 | 自动分析任务复杂度(simple/moderate/complex
|
|
28
|
-
| Pipeline 编排 | 复杂任务自动拆分为多阶段流程,支持 AI 智能规划、质量门禁、阶段产物生成 [x] 2025-01-
|
|
29
|
-
| 质量门禁 | 每个阶段自动 AI 审查(需求规格、安全性、代码质量、测试、性能),不合格则阻止推进 [x] 2025-01-
|
|
30
|
-
| 技能编排 |
|
|
31
|
-
| 知识蒸馏 |
|
|
32
|
-
| 会话续接 | 中断后自动恢复上次工作状态 [x] 2025-01-
|
|
33
|
-
| 用户画像 | 根据行为自适应调整干预深度 |
|
|
34
|
-
| 多 AI 提供商 | 支持 Claude、OpenAI、Ollama |
|
|
35
|
-
| Web 管理后台 | 实时监控、项目管理、Pipeline 控制、质量追踪、自定义规范管理、CLAUDE.md 管理 [x] 2025-01-
|
|
36
|
-
| 阶段产物 | 每个阶段自动生成结构化文档 [x] 2025-01-
|
|
37
|
-
| 模式学习 |
|
|
38
|
-
| 项目规范 |
|
|
27
|
+
| 意图识别 | 自动分析任务复杂度(simple/moderate/complex),决定执行策略,支持规则库和 AI 推理 [x] 2025-01-18 |
|
|
28
|
+
| Pipeline 编排 | 复杂任务自动拆分为多阶段流程,支持 AI 智能规划、质量门禁、阶段产物生成 [x] 2025-01-18 |
|
|
29
|
+
| 质量门禁 | 每个阶段自动 AI 审查(需求规格、安全性、代码质量、测试、性能),不合格则阻止推进 [x] 2025-01-18 |
|
|
30
|
+
| 技能编排 | 根据意图自动匹配并注入最佳实践,支持关键词映射和命中率统计 [x] 2025-01-18 |
|
|
31
|
+
| 知识蒸馏 | 自动提炼决策日志、时间线、项目规范,支持树索引和语义检索 [x] 2025-01-18 |
|
|
32
|
+
| 会话续接 | 中断后自动恢复上次工作状态 [x] 2025-01-18 |
|
|
33
|
+
| 用户画像 | 根据行为自适应调整干预深度 [x] 2025-01-18 |
|
|
34
|
+
| 多 AI 提供商 | 支持 Claude、OpenAI、Ollama,统一网关层 [x] 2025-01-18 |
|
|
35
|
+
| Web 管理后台 | 实时监控、项目管理、Pipeline 控制、质量追踪、自定义规范管理、CLAUDE.md 管理 [x] 2025-01-18 |
|
|
36
|
+
| 阶段产物 | 每个阶段自动生成结构化文档 [x] 2025-01-18 |
|
|
37
|
+
| 模式学习 | 从历史失败中提炼预防建议,支持 Thompson Sampling 策略选择 [x] 2025-01-18 |
|
|
38
|
+
| 项目规范 | 根据技术栈自动蒸馏项目级规范,支持自动初始化和 AI 自进化 [x] 2025-01-18 |
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function validateClaudeMdContent(content: string): string | null;
|
|
6
6
|
export declare class ClaudeMdWriter {
|
|
7
|
+
/** 全局写锁:防止多个模块并发写入 CLAUDE.md 导致文件损坏 */
|
|
8
|
+
private readonly writeLock;
|
|
7
9
|
private getClaudeMdPath;
|
|
8
10
|
readClaudeMd(projectPath: string): string | null;
|
|
9
11
|
/**
|
|
@@ -25,15 +27,21 @@ export declare class ClaudeMdWriter {
|
|
|
25
27
|
/**
|
|
26
28
|
* 写入自动生成内容,保留用户手写部分
|
|
27
29
|
*/
|
|
28
|
-
writeClaudeMd(projectPath: string, autoContent: string): void
|
|
30
|
+
writeClaudeMd(projectPath: string, autoContent: string): Promise<void>;
|
|
29
31
|
/**
|
|
30
32
|
* 更新自动生成部分,保留用户内容不变
|
|
31
33
|
*/
|
|
32
|
-
updateAutoSection(projectPath: string, newAutoContent: string): void
|
|
34
|
+
updateAutoSection(projectPath: string, newAutoContent: string): Promise<void>;
|
|
33
35
|
/**
|
|
34
36
|
* 在根目录 CLAUDE.md 的自动区块末尾维护子模块 @import 列表。
|
|
35
37
|
* 每次调用以传入的 modulePaths 为准(全量覆盖),相对路径基于 projectPath。
|
|
36
38
|
*/
|
|
37
|
-
updateModuleImports(projectPath: string, modulePaths: string[]): void
|
|
39
|
+
updateModuleImports(projectPath: string, modulePaths: string[]): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* 原子性写入操作:供其他模块调用,确保写入操作受锁保护
|
|
42
|
+
* @param projectPath 项目路径
|
|
43
|
+
* @param writeOperation 写入操作函数,接收当前文件内容,返回新内容
|
|
44
|
+
*/
|
|
45
|
+
atomicWrite(projectPath: string, writeOperation: (currentContent: string) => string): Promise<void>;
|
|
38
46
|
}
|
|
39
47
|
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmCtE;AAED,qBAAa,cAAc;IACzB,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAE7D,OAAO,CAAC,eAAe;IAIvB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMhD;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAM5C;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAmB3C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF;;;OAGG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpF;;;;OAIG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,GACjD,OAAO,CAAC,IAAI,CAAC;CAQjB"}
|
package/dist/claudemd/writer.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { FILE_MARKER, CONTENT_LIMIT } from '../constants.js';
|
|
4
|
+
import { MutexLock } from '../utils/mutex-lock.js';
|
|
4
5
|
const AUTO_START = FILE_MARKER.CLAUDEMD_AUTO_START;
|
|
5
6
|
const AUTO_END = FILE_MARKER.CLAUDEMD_AUTO_END;
|
|
6
7
|
/** 续接块标记(由 daemon 写入,writer 负责清理) */
|
|
@@ -48,6 +49,8 @@ export function validateClaudeMdContent(content) {
|
|
|
48
49
|
return null;
|
|
49
50
|
}
|
|
50
51
|
export class ClaudeMdWriter {
|
|
52
|
+
/** 全局写锁:防止多个模块并发写入 CLAUDE.md 导致文件损坏 */
|
|
53
|
+
writeLock = new MutexLock('ClaudeMdWriter');
|
|
51
54
|
getClaudeMdPath(projectPath) {
|
|
52
55
|
return path.join(projectPath, 'CLAUDE.md');
|
|
53
56
|
}
|
|
@@ -123,48 +126,65 @@ export class ClaudeMdWriter {
|
|
|
123
126
|
/**
|
|
124
127
|
* 写入自动生成内容,保留用户手写部分
|
|
125
128
|
*/
|
|
126
|
-
writeClaudeMd(projectPath, autoContent) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
129
|
+
async writeClaudeMd(projectPath, autoContent) {
|
|
130
|
+
await this.writeLock.runExclusive(projectPath, async () => {
|
|
131
|
+
const filePath = this.getClaudeMdPath(projectPath);
|
|
132
|
+
const userContent = this.getUserContent(projectPath);
|
|
133
|
+
const autoBlock = `${AUTO_START}\n${autoContent.trim()}\n${AUTO_END}`;
|
|
134
|
+
let finalContent;
|
|
135
|
+
if (userContent) {
|
|
136
|
+
finalContent = `${autoBlock}\n\n${userContent}\n`;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
finalContent = `${autoBlock}\n`;
|
|
140
|
+
}
|
|
141
|
+
fs.writeFileSync(filePath, finalContent, 'utf-8');
|
|
142
|
+
});
|
|
138
143
|
}
|
|
139
144
|
/**
|
|
140
145
|
* 更新自动生成部分,保留用户内容不变
|
|
141
146
|
*/
|
|
142
|
-
updateAutoSection(projectPath, newAutoContent) {
|
|
143
|
-
this.writeClaudeMd(projectPath, newAutoContent);
|
|
147
|
+
async updateAutoSection(projectPath, newAutoContent) {
|
|
148
|
+
await this.writeClaudeMd(projectPath, newAutoContent);
|
|
144
149
|
}
|
|
145
150
|
/**
|
|
146
151
|
* 在根目录 CLAUDE.md 的自动区块末尾维护子模块 @import 列表。
|
|
147
152
|
* 每次调用以传入的 modulePaths 为准(全量覆盖),相对路径基于 projectPath。
|
|
148
153
|
*/
|
|
149
|
-
updateModuleImports(projectPath, modulePaths) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
154
|
+
async updateModuleImports(projectPath, modulePaths) {
|
|
155
|
+
await this.writeLock.runExclusive(projectPath, async () => {
|
|
156
|
+
const imports = modulePaths
|
|
157
|
+
.map(p => `@${path.relative(projectPath, p)}/CLAUDE.md`)
|
|
158
|
+
.join('\n');
|
|
159
|
+
const section = `## 子模块规范\n\n${imports}`;
|
|
160
|
+
const current = this.readClaudeMd(projectPath) ?? '';
|
|
161
|
+
const MODULE_START = '<!-- forge:modules -->';
|
|
162
|
+
const MODULE_END = '<!-- forge:end-modules -->';
|
|
163
|
+
const block = `${MODULE_START}\n${section}\n${MODULE_END}`;
|
|
164
|
+
let updated;
|
|
165
|
+
if (current.includes(MODULE_START)) {
|
|
166
|
+
// 替换已有区块
|
|
167
|
+
updated = current.replace(new RegExp(`${MODULE_START}[\\s\\S]*?${MODULE_END}`), block);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// 追加到文件末尾(自动区块外,作为独立区块)
|
|
171
|
+
updated = current.trimEnd() + `\n\n${block}\n`;
|
|
172
|
+
}
|
|
173
|
+
fs.writeFileSync(this.getClaudeMdPath(projectPath), updated, 'utf-8');
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 原子性写入操作:供其他模块调用,确保写入操作受锁保护
|
|
178
|
+
* @param projectPath 项目路径
|
|
179
|
+
* @param writeOperation 写入操作函数,接收当前文件内容,返回新内容
|
|
180
|
+
*/
|
|
181
|
+
async atomicWrite(projectPath, writeOperation) {
|
|
182
|
+
await this.writeLock.runExclusive(projectPath, async () => {
|
|
183
|
+
const filePath = this.getClaudeMdPath(projectPath);
|
|
184
|
+
const current = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf-8') : '';
|
|
185
|
+
const updated = writeOperation(current);
|
|
186
|
+
fs.writeFileSync(filePath, updated, 'utf-8');
|
|
187
|
+
});
|
|
168
188
|
}
|
|
169
189
|
}
|
|
170
190
|
//# sourceMappingURL=writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/claudemd/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { ConventionLoader } from './convention-loader.js';
|
|
2
2
|
import type { Convention } from './types.js';
|
|
3
|
+
import type { ClaudeMdWriter } from '../claudemd/writer.js';
|
|
3
4
|
export declare class ConventionManager {
|
|
4
5
|
private loader;
|
|
5
|
-
|
|
6
|
-
private
|
|
7
|
-
constructor(loader?: ConventionLoader);
|
|
6
|
+
private claudeMdWriter;
|
|
7
|
+
private writerPromise;
|
|
8
|
+
constructor(loader?: ConventionLoader, claudeMdWriter?: ClaudeMdWriter);
|
|
9
|
+
private getWriter;
|
|
8
10
|
/** 获取 ConventionLoader 实例(供 ConventionEvolver 使用) */
|
|
9
11
|
getLoader(): ConventionLoader;
|
|
10
12
|
/**
|
|
@@ -41,7 +43,7 @@ export declare class ConventionManager {
|
|
|
41
43
|
* 使用 <!-- forge:convention-start:{id} --> 标记,与 claudemd-auto 区块并列。
|
|
42
44
|
* 若 CLAUDE.md 不存在则创建。
|
|
43
45
|
*/
|
|
44
|
-
injectIntoClaudeMd(projectPath: string, convention: Convention): void
|
|
46
|
+
injectIntoClaudeMd(projectPath: string, convention: Convention): Promise<void>;
|
|
45
47
|
private getBindingsPath;
|
|
46
48
|
private readBindings;
|
|
47
49
|
private writeBindings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention-manager.d.ts","sourceRoot":"","sources":["../../src/convention/convention-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"convention-manager.d.ts","sourceRoot":"","sources":["../../src/convention/convention-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,YAAY,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAwC;gBAEjD,MAAM,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAE,cAAc;YAcxD,SAAS;IAMvB,qDAAqD;IACrD,SAAS,IAAI,gBAAgB;IAM7B;;;;;OAKG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU;IAwB3D;;;;;OAKG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAcxD,2DAA2D;IAC3D,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE;IAmBvD,0BAA0B;IAC1B,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAMnE;;;;OAIG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAyBvE;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYnD;;;;OAIG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpF,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;YAOP,kBAAkB;CAcjC"}
|
|
@@ -9,10 +9,28 @@ function escapeRegex(str) {
|
|
|
9
9
|
}
|
|
10
10
|
export class ConventionManager {
|
|
11
11
|
loader;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
constructor(loader) {
|
|
12
|
+
claudeMdWriter;
|
|
13
|
+
writerPromise = null;
|
|
14
|
+
constructor(loader, claudeMdWriter) {
|
|
15
15
|
this.loader = loader ?? new ConventionLoader();
|
|
16
|
+
if (claudeMdWriter) {
|
|
17
|
+
this.claudeMdWriter = claudeMdWriter;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.claudeMdWriter = null;
|
|
21
|
+
// 延迟导入避免循环依赖
|
|
22
|
+
this.writerPromise = import('../claudemd/writer.js').then(m => {
|
|
23
|
+
this.claudeMdWriter = new m.ClaudeMdWriter();
|
|
24
|
+
return this.claudeMdWriter;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async getWriter() {
|
|
29
|
+
if (this.claudeMdWriter)
|
|
30
|
+
return this.claudeMdWriter;
|
|
31
|
+
if (this.writerPromise)
|
|
32
|
+
return this.writerPromise;
|
|
33
|
+
throw new Error('ClaudeMdWriter 未初始化');
|
|
16
34
|
}
|
|
17
35
|
/** 获取 ConventionLoader 实例(供 ConventionEvolver 使用) */
|
|
18
36
|
getLoader() {
|
|
@@ -135,42 +153,28 @@ export class ConventionManager {
|
|
|
135
153
|
* 使用 <!-- forge:convention-start:{id} --> 标记,与 claudemd-auto 区块并列。
|
|
136
154
|
* 若 CLAUDE.md 不存在则创建。
|
|
137
155
|
*/
|
|
138
|
-
injectIntoClaudeMd(projectPath, convention) {
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
`## 项目规范约束:${convention.name} (v${convention.version})`,
|
|
152
|
-
'',
|
|
153
|
-
convention.principles.trim(),
|
|
154
|
-
'',
|
|
155
|
-
endTag,
|
|
156
|
-
].join('\n');
|
|
157
|
-
let current = fs.existsSync(claudeMdPath)
|
|
158
|
-
? fs.readFileSync(claudeMdPath, 'utf-8')
|
|
159
|
-
: '';
|
|
156
|
+
async injectIntoClaudeMd(projectPath, convention) {
|
|
157
|
+
const startTag = `<!-- forge:convention-start:${convention.id} -->`;
|
|
158
|
+
const endTag = `<!-- forge:convention-end:${convention.id} -->`;
|
|
159
|
+
const block = [
|
|
160
|
+
startTag,
|
|
161
|
+
`## 项目规范约束:${convention.name} (v${convention.version})`,
|
|
162
|
+
'',
|
|
163
|
+
convention.principles.trim(),
|
|
164
|
+
'',
|
|
165
|
+
endTag,
|
|
166
|
+
].join('\n');
|
|
167
|
+
const writer = await this.getWriter();
|
|
168
|
+
await writer.atomicWrite(projectPath, (current) => {
|
|
160
169
|
if (current.includes(startTag)) {
|
|
161
|
-
// 替换已有区块(版本升级时更新)
|
|
162
170
|
const regex = new RegExp(`${escapeRegex(startTag)}[\\s\\S]*?${escapeRegex(endTag)}`);
|
|
163
|
-
|
|
171
|
+
return current.replace(regex, block);
|
|
164
172
|
}
|
|
165
173
|
else {
|
|
166
|
-
|
|
174
|
+
return current.trimEnd() + (current ? '\n\n' : '') + block + '\n';
|
|
167
175
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
finally {
|
|
172
|
-
this.claudeMdWriting.delete(claudeMdPath);
|
|
173
|
-
}
|
|
176
|
+
});
|
|
177
|
+
logger.info(`[规范管理器] 已将 ${convention.id} principles 注入 CLAUDE.md`);
|
|
174
178
|
}
|
|
175
179
|
// ── 私有方法 ──────────────────────────────────────────────────────────────
|
|
176
180
|
getBindingsPath(projectPath) {
|
|
@@ -194,27 +198,16 @@ export class ConventionManager {
|
|
|
194
198
|
fs.mkdirSync(dir, { recursive: true });
|
|
195
199
|
fs.writeFileSync(bindingsPath, JSON.stringify(bindings, null, 2), 'utf-8');
|
|
196
200
|
}
|
|
197
|
-
removeFromClaudeMd(projectPath, conventionId) {
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
logger.warn(`[规范管理器] CLAUDE.md 正在写入中,跳过移除:${conventionId}`);
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
this.claudeMdWriting.add(claudeMdPath);
|
|
206
|
-
try {
|
|
207
|
-
const startTag = `<!-- forge:convention-start:${conventionId} -->`;
|
|
208
|
-
const endTag = `<!-- forge:convention-end:${conventionId} -->`;
|
|
209
|
-
let content = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
201
|
+
async removeFromClaudeMd(projectPath, conventionId) {
|
|
202
|
+
const startTag = `<!-- forge:convention-start:${conventionId} -->`;
|
|
203
|
+
const endTag = `<!-- forge:convention-end:${conventionId} -->`;
|
|
204
|
+
const writer = await this.getWriter();
|
|
205
|
+
await writer.atomicWrite(projectPath, (content) => {
|
|
210
206
|
const regex = new RegExp(`\\n?${escapeRegex(startTag)}[\\s\\S]*?${escapeRegex(endTag)}\\n?`);
|
|
211
|
-
|
|
212
|
-
fs.writeFileSync(claudeMdPath, content, 'utf-8');
|
|
207
|
+
const updated = content.replace(regex, '\n').trimEnd() + '\n';
|
|
213
208
|
logger.info(`[规范管理器] 已从 CLAUDE.md 移除 ${conventionId} 区块`);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
this.claudeMdWriting.delete(claudeMdPath);
|
|
217
|
-
}
|
|
209
|
+
return updated;
|
|
210
|
+
});
|
|
218
211
|
}
|
|
219
212
|
}
|
|
220
213
|
//# sourceMappingURL=convention-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention-manager.js","sourceRoot":"","sources":["../../src/convention/convention-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"convention-manager.js","sourceRoot":"","sources":["../../src/convention/convention-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,6 @@ import { PipelineEngine } from '../../pipeline/index.js';
|
|
|
2
2
|
import type { AIProvider } from '../../ai-provider/types.js';
|
|
3
3
|
import type { SQLiteStorage } from '../../storage/sqlite.js';
|
|
4
4
|
import type { ConventionManager } from '../../convention/convention-manager.js';
|
|
5
|
-
|
|
5
|
+
import type { ClaudeMdWriter } from '../../claudemd/writer.js';
|
|
6
|
+
export declare function initPipelineEngine(storage: SQLiteStorage, sharedApi: AIProvider | null, conventionManager?: ConventionManager, claudeMdWriter?: ClaudeMdWriter): PipelineEngine | null;
|
|
6
7
|
//# sourceMappingURL=init-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-pipeline.d.ts","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"init-pipeline.d.ts","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,UAAU,GAAG,IAAI,EAC5B,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,cAAc,CAAC,EAAE,cAAc,GAC9B,cAAc,GAAG,IAAI,CAUvB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PipelineEngine } from '../../pipeline/index.js';
|
|
2
2
|
import { logger } from '../../utils/logger.js';
|
|
3
|
-
export function initPipelineEngine(storage, sharedApi, conventionManager) {
|
|
3
|
+
export function initPipelineEngine(storage, sharedApi, conventionManager, claudeMdWriter) {
|
|
4
4
|
if (!sharedApi) {
|
|
5
5
|
logger.info('[Pipeline] 引擎未初始化(API 不可用)');
|
|
6
6
|
return null;
|
|
7
7
|
}
|
|
8
|
-
const engine = new PipelineEngine(storage, sharedApi, conventionManager);
|
|
8
|
+
const engine = new PipelineEngine(storage, sharedApi, conventionManager, claudeMdWriter);
|
|
9
9
|
// daemon 启动时自动清理超过 2 小时未更新的过期 Pipeline,防止僵尸 Pipeline 持续注入
|
|
10
10
|
engine.cleanupExpired();
|
|
11
11
|
logger.info('Pipeline 引擎已初始化');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-pipeline.js","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-pipeline.js","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM/C,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,SAA4B,EAC5B,iBAAqC,EACrC,cAA+B;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC;IACzF,0DAA0D;IAC1D,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-resume.d.ts","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"init-resume.d.ts","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,UAAU,GAAG,IAAI,GAC3B,YAAY,GAAG,IAAI,CAkBrB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ResumeEngine } from '../../resume/index.js';
|
|
2
|
+
import { ClaudeMdWriter } from '../../claudemd/writer.js';
|
|
2
3
|
import { logger } from '../../utils/logger.js';
|
|
3
4
|
export function initResumeEngine(config, storage, sharedApi) {
|
|
4
5
|
if (!config.resume.enabled || !sharedApi) {
|
|
@@ -6,7 +7,8 @@ export function initResumeEngine(config, storage, sharedApi) {
|
|
|
6
7
|
return null;
|
|
7
8
|
}
|
|
8
9
|
try {
|
|
9
|
-
const
|
|
10
|
+
const claudeMdWriter = new ClaudeMdWriter();
|
|
11
|
+
const engine = new ResumeEngine(storage, sharedApi, claudeMdWriter, config.resume.timeout_minutes, config.resume.max_age_days);
|
|
10
12
|
logger.info('续接引擎已初始化');
|
|
11
13
|
return engine;
|
|
12
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-resume.js","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,OAAsB,EACtB,SAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,YAAY,CAC7B,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"init-resume.js","sourceRoot":"","sources":["../../../src/daemon/engine-registry/init-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,OAAsB,EACtB,SAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,YAAY,CAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAClC,MAAM,CAAC,MAAM,CAAC,eAAe,EAC7B,MAAM,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-registry.d.ts","sourceRoot":"","sources":["../../src/daemon/engine-registry.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,cAAc,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,UAAU,GAAG,IAAI,GAC3B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"engine-registry.d.ts","sourceRoot":"","sources":["../../src/daemon/engine-registry.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,cAAc,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,UAAU,GAAG,IAAI,GAC3B,OAAO,CAAC,eAAe,CAAC,CAgF1B"}
|
|
@@ -18,8 +18,9 @@ export async function buildEngineContext(config, storage, sharedApi) {
|
|
|
18
18
|
const resumeEngine = initResumeEngine(config, storage, sharedApi);
|
|
19
19
|
const orchestration = initOrchestrationEngine(config, storage);
|
|
20
20
|
const { skillRegistry, evolveInitTimer, evolveDailyTimer } = initSkillRegistry(sharedApi);
|
|
21
|
-
const
|
|
22
|
-
const
|
|
21
|
+
const claudeMdWriter = resumeEngine?.['claudeMdWriter'];
|
|
22
|
+
const conventionManager = new ConventionManager(undefined, claudeMdWriter);
|
|
23
|
+
const pipelineEngine = initPipelineEngine(storage, sharedApi, conventionManager, claudeMdWriter);
|
|
23
24
|
const { intentEngine, qualityGate } = initAutopilotEngines(config, sharedApi, storage);
|
|
24
25
|
const profileManager = await initProfileManager();
|
|
25
26
|
const retrospectiveEngine = new RetrospectiveEngine(storage, sharedApi ?? undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-registry.js","sourceRoot":"","sources":["../../src/daemon/engine-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAc5C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,OAAsB,EACtB,SAA4B;IAE5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC1F,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-registry.js","sourceRoot":"","sources":["../../src/daemon/engine-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -408,7 +408,7 @@ export class SessionCleanupService {
|
|
|
408
408
|
if (result) {
|
|
409
409
|
logger.info(`[Forge:规范进化] 蒸馏完成:生成自定义规范 ${result.customConventionId}`);
|
|
410
410
|
// 自动绑定到项目
|
|
411
|
-
this.ctx.conventionManager.bind(event.project_path, result.customConventionId);
|
|
411
|
+
await this.ctx.conventionManager.bind(event.project_path, result.customConventionId);
|
|
412
412
|
logger.info(`[Forge:规范进化] 已自动绑定自定义规范到项目`);
|
|
413
413
|
}
|
|
414
414
|
else {
|