@winspan/claude-forge 1.13.4 → 1.13.9
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 +13 -13
- 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/index.d.ts.map +1 -1
- package/dist/daemon/index.js +1 -0
- package/dist/daemon/index.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/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 +203 -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-D1DAjjsI.js +62 -0
- package/dist/web-static/assets/index-aFK8_4Ey.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
|
-
- 🎯 **智能意图识别** -
|
|
12
|
+
- 🎯 **智能意图识别** - 自动分析任务复杂度,决定执行策略(支持规则库匹配和 AI 推理) [x] 2025-01-20
|
|
13
13
|
- 🔄 **Pipeline 编排** - 复杂任务自动拆分为多阶段流程(分析→设计→编码→测试→审查),支持质量门禁和阶段产物生成 [x] 2025-01-20
|
|
14
|
-
- 🛡️ **质量门禁** - 每个阶段自动 AI
|
|
14
|
+
- 🛡️ **质量门禁** - 每个阶段自动 AI 审查,支持需求规格、安全性、代码质量、测试覆盖、性能等多维度检查,问题追踪和解决状态管理 [x] 2025-01-20
|
|
15
15
|
- 📊 **Web 管理后台** - 实时监控会话、Pipeline、质量问题、知识图谱、自定义规范管理、CLAUDE.md 管理(支持模块化查看和蒸馏压缩) [x] 2025-01-20
|
|
16
|
-
- 🧠 **知识积累** -
|
|
17
|
-
- 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD
|
|
18
|
-
- 📈 **数据分析** - 成本统计、满意度趋势、ROI
|
|
19
|
-
- 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama
|
|
16
|
+
- 🧠 **知识积累** - 自动提炼决策日志、时间线、项目规范,支持树索引和语义检索 [x] 2025-01-20
|
|
17
|
+
- 🎨 **技能编排** - 根据意图自动匹配并注入最佳实践(TDD、重构、调试等),支持关键词映射和命中率统计 [x] 2025-01-20
|
|
18
|
+
- 📈 **数据分析** - 成本统计、满意度趋势、ROI 分析,支持延迟追踪和 SLA 告警 [x] 2025-01-20
|
|
19
|
+
- 🔌 **多 AI 提供商** - 支持 Claude、OpenAI、Ollama,统一网关层(速率限制、熔断、缓存、预算管理) [x] 2025-01-20
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -24,18 +24,18 @@ Claude Forge 是一个为 Claude Code 设计的智能编排引擎,通过透明
|
|
|
24
24
|
|
|
25
25
|
| 功能 | 说明 |
|
|
26
26
|
|------|------|
|
|
27
|
-
| 意图识别 | 自动分析任务复杂度(simple/moderate/complex
|
|
27
|
+
| 意图识别 | 自动分析任务复杂度(simple/moderate/complex),决定执行策略,支持规则库和 AI 推理 [x] 2025-01-20 |
|
|
28
28
|
| Pipeline 编排 | 复杂任务自动拆分为多阶段流程,支持 AI 智能规划、质量门禁、阶段产物生成 [x] 2025-01-20 |
|
|
29
29
|
| 质量门禁 | 每个阶段自动 AI 审查(需求规格、安全性、代码质量、测试、性能),不合格则阻止推进 [x] 2025-01-20 |
|
|
30
|
-
| 技能编排 |
|
|
31
|
-
| 知识蒸馏 |
|
|
30
|
+
| 技能编排 | 根据意图自动匹配并注入最佳实践,支持关键词映射和命中率统计 [x] 2025-01-20 |
|
|
31
|
+
| 知识蒸馏 | 自动提炼决策日志、时间线、项目规范,支持树索引和语义检索 [x] 2025-01-20 |
|
|
32
32
|
| 会话续接 | 中断后自动恢复上次工作状态 [x] 2025-01-20 |
|
|
33
|
-
| 用户画像 | 根据行为自适应调整干预深度 |
|
|
34
|
-
| 多 AI 提供商 | 支持 Claude、OpenAI、Ollama |
|
|
33
|
+
| 用户画像 | 根据行为自适应调整干预深度 [x] 2025-01-20 |
|
|
34
|
+
| 多 AI 提供商 | 支持 Claude、OpenAI、Ollama,统一网关层 [x] 2025-01-20 |
|
|
35
35
|
| Web 管理后台 | 实时监控、项目管理、Pipeline 控制、质量追踪、自定义规范管理、CLAUDE.md 管理 [x] 2025-01-20 |
|
|
36
36
|
| 阶段产物 | 每个阶段自动生成结构化文档 [x] 2025-01-20 |
|
|
37
|
-
| 模式学习 |
|
|
38
|
-
| 项目规范 |
|
|
37
|
+
| 模式学习 | 从历史失败中提炼预防建议,支持 Thompson Sampling 策略选择 [x] 2025-01-20 |
|
|
38
|
+
| 项目规范 | 根据技术栈自动蒸馏项目级规范,支持自动初始化和 AI 自进化 [x] 2025-01-20 |
|
|
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":"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;AAGhE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAmB;IACzB,cAAc,CAAwB;IACtC,aAAa,GAAmC,IAAI,CAAC;IAE7D,YAAY,MAAyB,EAAE,cAA+B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,aAAa;YACb,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC,cAAc,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QACpD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,qDAAqD;IACrD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,yEAAyE;IAEzE;;;;;OAKG;IACH,IAAI,CAAC,WAAmB,EAAE,YAAoB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,eAAe,YAAY,gCAAgC,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,YAAY,SAAS,WAAW,KAAK,CAAC,CAAC;YAC9D,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,eAAe,YAAY,MAAM,WAAW,EAAE,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,WAAmB,EAAE,YAAqB;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,eAAe,YAAY,SAAS,WAAW,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YAChF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,oBAAoB,CAAC,WAAmB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/D,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,aAAa,YAAY,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0BAA0B;IAC1B,2BAA2B,CAAC,WAAmB;QAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,WAAmB,EAAE,UAAsB;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEhD,8BAA8B;QAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAA6B;YAC9C,aAAa,EAAE,UAAU,CAAC,EAAE;YAC5B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,YAAY,EAAE,WAAW;SAC1B,CAAC;QAEF,iBAAiB;QACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;QACpH,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,oBAAoB,UAAU,CAAC,EAAE,MAAM,WAAW,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAmB;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,UAAsB;QAClE,MAAM,QAAQ,GAAG,+BAA+B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpE,MAAM,MAAM,GAAG,6BAA6B,UAAU,CAAC,EAAE,MAAM,CAAC;QAEhE,MAAM,KAAK,GAAG;YACZ,QAAQ;YACR,aAAa,UAAU,CAAC,IAAI,MAAM,UAAU,CAAC,OAAO,GAAG;YACvD,EAAE;YACF,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE;YAC5B,EAAE;YACF,MAAM;SACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,WAAW,CAAC,MAAM,CAAC,EAAE,CAC3D,CAAC;gBACF,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,EAAE,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAED,yEAAyE;IAEjE,eAAe,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;IAChE,CAAC;IAEO,YAAY,CAAC,WAAmB;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAA+B,CAAC;QAC1F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,WAAmB,EAAE,QAAoC;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,YAAoB;QACxE,MAAM,QAAQ,GAAG,+BAA+B,YAAY,MAAM,CAAC;QACnE,MAAM,MAAM,GAAG,6BAA6B,YAAY,MAAM,CAAC;QAE/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,OAAO,WAAW,CAAC,QAAQ,CAAC,aAAa,WAAW,CAAC,MAAM,CAAC,MAAM,CACnE,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,2BAA2B,YAAY,KAAK,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -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 {
|