@winspan/claude-forge 0.4.8 → 0.5.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 +7 -7
- package/dist/autopilot/intent-engine.d.ts +21 -2
- package/dist/autopilot/intent-engine.d.ts.map +1 -1
- package/dist/autopilot/intent-engine.js +66 -5
- package/dist/autopilot/intent-engine.js.map +1 -1
- package/dist/autopilot/rule-distiller.d.ts +38 -0
- package/dist/autopilot/rule-distiller.d.ts.map +1 -0
- package/dist/autopilot/rule-distiller.js +152 -0
- package/dist/autopilot/rule-distiller.js.map +1 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +85 -0
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/daemon/engine-registry/init-autopilot.js +1 -1
- package/dist/daemon/engine-registry/init-autopilot.js.map +1 -1
- package/dist/daemon/engine-registry.d.ts.map +1 -1
- package/dist/daemon/engine-registry.js +3 -0
- package/dist/daemon/engine-registry.js.map +1 -1
- package/dist/daemon/handler-context.d.ts +3 -1
- package/dist/daemon/handler-context.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.d.ts +6 -0
- package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
- package/dist/daemon/handlers/session-cleanup.js +49 -0
- package/dist/daemon/handlers/session-cleanup.js.map +1 -1
- package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/stop-handler.js +40 -10
- package/dist/daemon/handlers/stop-handler.js.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.d.ts +18 -0
- package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt-handler.js +175 -9
- package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
- package/dist/knowledge/graph.d.ts +53 -0
- package/dist/knowledge/graph.d.ts.map +1 -0
- package/dist/knowledge/graph.js +142 -0
- package/dist/knowledge/graph.js.map +1 -0
- package/dist/pattern-engine/index.d.ts +4 -0
- package/dist/pattern-engine/index.d.ts.map +1 -1
- package/dist/pattern-engine/index.js +4 -0
- package/dist/pattern-engine/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +8 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +41 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/template-registry.d.ts +40 -0
- package/dist/pipeline/template-registry.d.ts.map +1 -0
- package/dist/pipeline/template-registry.js +222 -0
- package/dist/pipeline/template-registry.js.map +1 -0
- package/dist/pipeline/template-router.d.ts +32 -0
- package/dist/pipeline/template-router.d.ts.map +1 -0
- package/dist/pipeline/template-router.js +117 -0
- package/dist/pipeline/template-router.js.map +1 -0
- package/dist/pipeline/types.d.ts +55 -0
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js.map +1 -1
- package/dist/retrospective/index.d.ts +2 -7
- package/dist/retrospective/index.d.ts.map +1 -1
- package/dist/retrospective/index.js +15 -22
- package/dist/retrospective/index.js.map +1 -1
- package/dist/retrospective/satisfaction-inferrer.d.ts +37 -0
- package/dist/retrospective/satisfaction-inferrer.d.ts.map +1 -0
- package/dist/retrospective/satisfaction-inferrer.js +137 -0
- package/dist/retrospective/satisfaction-inferrer.js.map +1 -0
- package/dist/storage/index.d.ts +74 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/sqlite.d.ts +84 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +232 -2
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/utils/latency-tracer.d.ts +25 -0
- package/dist/utils/latency-tracer.d.ts.map +1 -0
- package/dist/utils/latency-tracer.js +53 -0
- package/dist/utils/latency-tracer.js.map +1 -0
- package/dist/utils/plan-reader.d.ts +22 -4
- package/dist/utils/plan-reader.d.ts.map +1 -1
- package/dist/utils/plan-reader.js +62 -16
- package/dist/utils/plan-reader.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,26 +1,73 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* 扫描 docs/YYYY-MM-DD/架构设计/ 目录下的计划文档(最新日期优先)。
|
|
5
|
+
* 同时兼容旧格式 docs/plan-*.md(向后兼容,排在新格式之后)。
|
|
5
6
|
*/
|
|
6
7
|
function findPlanFiles(projectPath) {
|
|
7
8
|
const docsDir = path.join(projectPath, 'docs');
|
|
9
|
+
if (!fs.existsSync(docsDir))
|
|
10
|
+
return [];
|
|
11
|
+
const results = [];
|
|
12
|
+
try {
|
|
13
|
+
// 新格式:docs/YYYY-MM-DD/架构设计/*.md(按日期倒序)
|
|
14
|
+
const dateDirs = fs.readdirSync(docsDir)
|
|
15
|
+
.filter(f => /^\d{4}-\d{2}-\d{2}$/.test(f))
|
|
16
|
+
.sort()
|
|
17
|
+
.reverse();
|
|
18
|
+
for (const dateDir of dateDirs) {
|
|
19
|
+
const designDir = path.join(docsDir, dateDir, '架构设计');
|
|
20
|
+
if (!fs.existsSync(designDir))
|
|
21
|
+
continue;
|
|
22
|
+
const files = fs.readdirSync(designDir)
|
|
23
|
+
.filter(f => f.endsWith('.md'))
|
|
24
|
+
.sort()
|
|
25
|
+
.reverse()
|
|
26
|
+
.map(f => path.join(designDir, f));
|
|
27
|
+
results.push(...files);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// 忽略读取错误
|
|
32
|
+
}
|
|
8
33
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return fs.readdirSync(docsDir)
|
|
34
|
+
// 旧格式(兼容):docs/plan-*.md
|
|
35
|
+
const legacyFiles = fs.readdirSync(docsDir)
|
|
12
36
|
.filter(f => /^plan-.+\.md$/.test(f))
|
|
13
37
|
.sort()
|
|
14
38
|
.reverse()
|
|
15
39
|
.map(f => path.join(docsDir, f));
|
|
40
|
+
results.push(...legacyFiles);
|
|
16
41
|
}
|
|
17
42
|
catch {
|
|
18
|
-
|
|
43
|
+
// 忽略读取错误
|
|
19
44
|
}
|
|
45
|
+
return results;
|
|
20
46
|
}
|
|
21
47
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
48
|
+
* 读取活跃计划的结构化摘要(供意图引擎使用)。
|
|
49
|
+
* 返回 null 表示无活跃计划。
|
|
50
|
+
*/
|
|
51
|
+
export function readActivePlanSummary(projectPath) {
|
|
52
|
+
const planFile = readPlanFile(projectPath);
|
|
53
|
+
if (!planFile)
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
const rawContent = fs.readFileSync(planFile.filePath, 'utf-8');
|
|
57
|
+
const relPath = path.relative(projectPath, planFile.filePath);
|
|
58
|
+
const titleMatch = rawContent.match(/^#\s+(.+)$/m);
|
|
59
|
+
const title = titleMatch ? titleMatch[1].trim() : '实现计划';
|
|
60
|
+
const inProgress = planFile.tasks.filter(t => t.status === 'in-progress').map(t => t.title);
|
|
61
|
+
const pending = planFile.tasks.filter(t => t.status === 'pending').map(t => t.title);
|
|
62
|
+
const doneCount = planFile.tasks.filter(t => t.status === 'done').length;
|
|
63
|
+
return { relPath, title, inProgress, pending, doneCount, rawContent };
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 读取最新含未完成任务的计划文件(新格式优先,兼容旧格式)。
|
|
24
71
|
*/
|
|
25
72
|
export function readPlanFile(projectPath) {
|
|
26
73
|
const files = findPlanFiles(projectPath);
|
|
@@ -43,15 +90,13 @@ export function readPlanFile(projectPath) {
|
|
|
43
90
|
return null;
|
|
44
91
|
}
|
|
45
92
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
93
|
+
* 返回今日计划文档写入路径(供提示信息使用)。
|
|
94
|
+
* 格式:docs/YYYY-MM-DD/架构设计/实现计划.md
|
|
48
95
|
*/
|
|
49
96
|
export function getPlanFilePath(projectPath) {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// 建议新建:docs/plan-v1.md
|
|
54
|
-
return path.join(projectPath, 'docs', 'plan-v1.md');
|
|
97
|
+
const now = new Date();
|
|
98
|
+
const dateDir = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
|
|
99
|
+
return path.join(projectPath, 'docs', dateDir, '架构设计', '实现计划.md');
|
|
55
100
|
}
|
|
56
101
|
/**
|
|
57
102
|
* 构建会话开始时注入的计划上下文。
|
|
@@ -63,12 +108,13 @@ export function buildSessionStartPlanContext(projectPath) {
|
|
|
63
108
|
if (!planFile)
|
|
64
109
|
return null;
|
|
65
110
|
const { filePath, tasks } = planFile;
|
|
66
|
-
|
|
111
|
+
// 相对于 projectPath 展示路径
|
|
112
|
+
const relPath = path.relative(projectPath, filePath);
|
|
67
113
|
const pending = tasks.filter(t => t.status === 'pending');
|
|
68
114
|
const inProgress = tasks.filter(t => t.status === 'in-progress');
|
|
69
115
|
const done = tasks.filter(t => t.status === 'done');
|
|
70
116
|
const parts = [];
|
|
71
|
-
parts.push(`[Forge 计划]
|
|
117
|
+
parts.push(`[Forge 计划] 当前计划文件:${relPath}`);
|
|
72
118
|
if (inProgress.length > 0) {
|
|
73
119
|
parts.push('进行中:');
|
|
74
120
|
for (const t of inProgress)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-reader.js","sourceRoot":"","sources":["../../src/utils/plan-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-reader.js","sourceRoot":"","sources":["../../src/utils/plan-reader.ts"],"names":[],"mappings":"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"}
|