@winspan/claude-forge 1.6.3 → 1.8.4
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 +10 -5
- package/dist/daemon/handlers/stages/18-complex-task.d.ts.map +1 -1
- package/dist/daemon/handlers/stages/18-complex-task.js +5 -0
- 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 +4 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/doc-sync/index.d.ts.map +1 -1
- package/dist/doc-sync/index.js +37 -6
- package/dist/doc-sync/index.js.map +1 -1
- package/dist/hooks/notification.sh +3 -1
- package/dist/hooks/post-tool-use.sh +3 -1
- package/dist/hooks/pre-tool-use.sh +3 -1
- package/dist/hooks/stop.sh +3 -1
- package/dist/hooks/user-prompt-submit.sh +3 -1
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +13 -3
- package/dist/pipeline/index.js.map +1 -1
- package/dist/web/routes/daemon.d.ts +4 -0
- package/dist/web/routes/daemon.d.ts.map +1 -0
- package/dist/web/routes/daemon.js +66 -0
- package/dist/web/routes/daemon.js.map +1 -0
- package/dist/web/routes/logs.d.ts +4 -0
- package/dist/web/routes/logs.d.ts.map +1 -0
- package/dist/web/routes/logs.js +63 -0
- package/dist/web/routes/logs.js.map +1 -0
- package/dist/web/routes/pipelines.d.ts.map +1 -1
- package/dist/web/routes/pipelines.js +142 -18
- package/dist/web/routes/pipelines.js.map +1 -1
- package/dist/web/routes/quality.d.ts.map +1 -1
- package/dist/web/routes/quality.js +40 -18
- package/dist/web/routes/quality.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +12 -0
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +24 -4
- package/dist/web/server.js.map +1 -1
- package/dist/web-static/assets/index-BLQCGZ4G.js +62 -0
- package/dist/web-static/assets/index-Djj1UAku.css +2 -0
- package/dist/web-static/index.html +2 -2
- package/package.json +1 -1
- package/dist/web-static/assets/index-3Sw33EKn.js +0 -62
- package/dist/web-static/assets/index-wxH-x453.css +0 -2
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { readPid, getSocketPath } from '../../daemon/lifecycle.js';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
export function registerDaemonRoutes(app, storage) {
|
|
5
|
+
// daemon 详细状态
|
|
6
|
+
app.get('/api/daemon/status', (req, res) => {
|
|
7
|
+
try {
|
|
8
|
+
const pid = readPid();
|
|
9
|
+
const socketPath = getSocketPath();
|
|
10
|
+
const socketExists = fs.existsSync(socketPath);
|
|
11
|
+
// 内存使用
|
|
12
|
+
const memUsage = process.memoryUsage();
|
|
13
|
+
// 运行时间
|
|
14
|
+
const uptimeSeconds = process.uptime();
|
|
15
|
+
res.json({
|
|
16
|
+
running: !!pid,
|
|
17
|
+
pid: pid || null,
|
|
18
|
+
socketPath,
|
|
19
|
+
socketExists,
|
|
20
|
+
uptime: {
|
|
21
|
+
seconds: Math.floor(uptimeSeconds),
|
|
22
|
+
formatted: formatUptime(uptimeSeconds),
|
|
23
|
+
},
|
|
24
|
+
memory: {
|
|
25
|
+
rss: Math.round(memUsage.rss / 1024 / 1024),
|
|
26
|
+
heapUsed: Math.round(memUsage.heapUsed / 1024 / 1024),
|
|
27
|
+
heapTotal: Math.round(memUsage.heapTotal / 1024 / 1024),
|
|
28
|
+
},
|
|
29
|
+
system: {
|
|
30
|
+
platform: os.platform(),
|
|
31
|
+
nodeVersion: process.version,
|
|
32
|
+
cpus: os.cpus().length,
|
|
33
|
+
freeMemory: Math.round(os.freemem() / 1024 / 1024),
|
|
34
|
+
totalMemory: Math.round(os.totalmem() / 1024 / 1024),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
res.status(500).json({ error: String(err) });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// 重启 daemon
|
|
43
|
+
app.post('/api/daemon/restart', (req, res) => {
|
|
44
|
+
try {
|
|
45
|
+
res.json({ success: true, message: '重启信号已发送,daemon 将在 2 秒后重启' });
|
|
46
|
+
// 延迟退出,让响应先发送
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
process.exit(0); // launchd/systemd 会自动重启
|
|
49
|
+
}, 2000);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
res.status(500).json({ error: String(err) });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function formatUptime(seconds) {
|
|
57
|
+
const days = Math.floor(seconds / 86400);
|
|
58
|
+
const hours = Math.floor((seconds % 86400) / 3600);
|
|
59
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
60
|
+
if (days > 0)
|
|
61
|
+
return `${days}天${hours}小时${minutes}分钟`;
|
|
62
|
+
if (hours > 0)
|
|
63
|
+
return `${hours}小时${minutes}分钟`;
|
|
64
|
+
return `${minutes}分钟`;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/web/routes/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/web/routes/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAK7D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8D7E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
export function registerLogsRoutes(app, storage) {
|
|
5
|
+
// SSE 实时日志流
|
|
6
|
+
app.get('/api/logs/stream', (req, res) => {
|
|
7
|
+
res.writeHead(200, {
|
|
8
|
+
'Content-Type': 'text/event-stream',
|
|
9
|
+
'Cache-Control': 'no-cache',
|
|
10
|
+
'Connection': 'keep-alive',
|
|
11
|
+
'Access-Control-Allow-Origin': '*',
|
|
12
|
+
});
|
|
13
|
+
const todayStr = new Date().toISOString().split('T')[0];
|
|
14
|
+
const logPath = path.join(os.homedir(), '.claude-forge', `events-${todayStr}.jsonl`);
|
|
15
|
+
let lastSize = 0;
|
|
16
|
+
if (fs.existsSync(logPath)) {
|
|
17
|
+
lastSize = fs.statSync(logPath).size;
|
|
18
|
+
}
|
|
19
|
+
const sendRecentLogs = () => {
|
|
20
|
+
try {
|
|
21
|
+
if (!fs.existsSync(logPath))
|
|
22
|
+
return;
|
|
23
|
+
const currentSize = fs.statSync(logPath).size;
|
|
24
|
+
if (currentSize <= lastSize)
|
|
25
|
+
return;
|
|
26
|
+
const fd = fs.openSync(logPath, 'r');
|
|
27
|
+
const buffer = Buffer.alloc(currentSize - lastSize);
|
|
28
|
+
fs.readSync(fd, buffer, 0, currentSize - lastSize, lastSize);
|
|
29
|
+
fs.closeSync(fd);
|
|
30
|
+
lastSize = currentSize;
|
|
31
|
+
const lines = buffer.toString('utf8').split('\n').filter(Boolean);
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
try {
|
|
34
|
+
const event = JSON.parse(line);
|
|
35
|
+
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// 忽略解析失败的行
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// 忽略文件读取错误
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
// 初始发送最近 20 条
|
|
47
|
+
try {
|
|
48
|
+
const events = storage.queryEvents({ limit: 20 });
|
|
49
|
+
for (const event of events.reverse()) {
|
|
50
|
+
res.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// 忽略初始加载错误
|
|
55
|
+
}
|
|
56
|
+
const interval = setInterval(sendRecentLogs, 1000);
|
|
57
|
+
req.on('close', () => {
|
|
58
|
+
clearInterval(interval);
|
|
59
|
+
res.end();
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/web/routes/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../src/web/routes/pipelines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../../src/web/routes/pipelines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQ7D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8KjF"}
|
|
@@ -1,19 +1,46 @@
|
|
|
1
|
+
import { PipelineStore } from '../../pipeline/store.js';
|
|
2
|
+
import { PHASE_LABELS } from '../../pipeline/types.js';
|
|
3
|
+
const getPhaseLabel = (phase) => PHASE_LABELS[phase] || phase;
|
|
1
4
|
export function registerPipelineRoutes(app, storage) {
|
|
2
|
-
|
|
5
|
+
const store = new PipelineStore(storage);
|
|
6
|
+
// 获取所有活跃 Pipeline
|
|
7
|
+
app.get('/api/pipelines/active', (req, res) => {
|
|
8
|
+
try {
|
|
9
|
+
const active = store.listActive();
|
|
10
|
+
res.json({
|
|
11
|
+
total: active.length,
|
|
12
|
+
items: active.map(p => ({
|
|
13
|
+
...p,
|
|
14
|
+
phaseLabel: getPhaseLabel(p.phase) || p.phase,
|
|
15
|
+
})),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
res.status(500).json({ error: String(err) });
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
// 获取 Pipeline 列表(含已完成)
|
|
3
23
|
app.get('/api/pipelines', (req, res) => {
|
|
4
24
|
try {
|
|
5
|
-
const {
|
|
6
|
-
// 从
|
|
7
|
-
const
|
|
25
|
+
const { limit = 50 } = req.query;
|
|
26
|
+
// 从 pipelines 表直接查询
|
|
27
|
+
const db = storage.getDatabase();
|
|
28
|
+
const rows = db.prepare('SELECT id, requirement, project_path, session_id, phase, task_type, complexity, created_at, updated_at FROM pipelines ORDER BY updated_at DESC LIMIT ?').all(Number(limit));
|
|
8
29
|
res.json({
|
|
9
|
-
total:
|
|
10
|
-
items:
|
|
11
|
-
id:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
30
|
+
total: rows.length,
|
|
31
|
+
items: rows.map(r => ({
|
|
32
|
+
id: r.id,
|
|
33
|
+
requirement: r.requirement?.slice(0, 100),
|
|
34
|
+
project: r.project_path?.split('/').pop(),
|
|
35
|
+
projectPath: r.project_path,
|
|
36
|
+
sessionId: r.session_id,
|
|
37
|
+
phase: r.phase,
|
|
38
|
+
phaseLabel: getPhaseLabel(r.phase) || r.phase,
|
|
39
|
+
taskType: r.task_type,
|
|
40
|
+
complexity: r.complexity,
|
|
41
|
+
status: r.phase === 'done' ? 'completed' : 'active',
|
|
42
|
+
createdAt: r.created_at,
|
|
43
|
+
updatedAt: r.updated_at,
|
|
17
44
|
})),
|
|
18
45
|
});
|
|
19
46
|
}
|
|
@@ -21,16 +48,113 @@ export function registerPipelineRoutes(app, storage) {
|
|
|
21
48
|
res.status(500).json({ error: String(err) });
|
|
22
49
|
}
|
|
23
50
|
});
|
|
24
|
-
//
|
|
51
|
+
// 获取 Pipeline 详情(含任务列表 + 关联事件 + 产物 + 质量)
|
|
25
52
|
app.get('/api/pipelines/:id', (req, res) => {
|
|
26
53
|
try {
|
|
27
54
|
const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
55
|
+
const tasks = store.getTasks(id);
|
|
56
|
+
const db = storage.getDatabase();
|
|
57
|
+
const row = db.prepare('SELECT * FROM pipelines WHERE id = ?').get(id);
|
|
58
|
+
if (!row) {
|
|
59
|
+
return res.status(404).json({ error: 'Pipeline 不存在' });
|
|
32
60
|
}
|
|
33
|
-
|
|
61
|
+
const sessionId = row.session_id;
|
|
62
|
+
// 关联事件(通过 session_id 桥接)
|
|
63
|
+
const events = storage.queryEvents({ session_id: sessionId, limit: 500 });
|
|
64
|
+
// 提取产物(Write/Edit 的文件路径)
|
|
65
|
+
const artifacts = events
|
|
66
|
+
.filter(e => e.tool_name === 'Write' || e.tool_name === 'Edit' || e.tool_name === 'NotebookEdit')
|
|
67
|
+
.map(e => {
|
|
68
|
+
const input = e.tool_input;
|
|
69
|
+
return {
|
|
70
|
+
filePath: String(input?.file_path || input?.notebook_path || ''),
|
|
71
|
+
tool: e.tool_name || '',
|
|
72
|
+
time: e.timestamp,
|
|
73
|
+
};
|
|
74
|
+
})
|
|
75
|
+
.filter(a => a.filePath);
|
|
76
|
+
// 去重产物
|
|
77
|
+
const uniqueArtifacts = Array.from(new Map(artifacts.map(a => [a.filePath, a])).values());
|
|
78
|
+
// 关联质量问题
|
|
79
|
+
const qualityIssues = storage.getQualityHistory()
|
|
80
|
+
.filter(q => q.session_id === sessionId);
|
|
81
|
+
// 按 phase 聚合事件时间线
|
|
82
|
+
const phaseTimings = {};
|
|
83
|
+
for (const task of tasks) {
|
|
84
|
+
if (!phaseTimings[task.phase]) {
|
|
85
|
+
phaseTimings[task.phase] = { events: 0, writes: 0 };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// 事件摘要(前 200 条,带上下文)
|
|
89
|
+
const eventSummary = events.slice(0, 200).map(e => {
|
|
90
|
+
const input = e.tool_input;
|
|
91
|
+
return {
|
|
92
|
+
time: e.timestamp,
|
|
93
|
+
hookType: e.hook_type,
|
|
94
|
+
toolName: e.tool_name || null,
|
|
95
|
+
detail: input?.file_path
|
|
96
|
+
? String(input.file_path).split('/').slice(-2).join('/')
|
|
97
|
+
: input?.command
|
|
98
|
+
? String(input.command).slice(0, 80)
|
|
99
|
+
: input?.pattern
|
|
100
|
+
? String(input.pattern)
|
|
101
|
+
: null,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
res.json({
|
|
105
|
+
id: row.id,
|
|
106
|
+
requirement: row.requirement,
|
|
107
|
+
projectPath: row.project_path,
|
|
108
|
+
sessionId,
|
|
109
|
+
phase: row.phase,
|
|
110
|
+
phaseLabel: getPhaseLabel(row.phase),
|
|
111
|
+
taskType: row.task_type,
|
|
112
|
+
complexity: row.complexity,
|
|
113
|
+
createdAt: row.created_at,
|
|
114
|
+
updatedAt: row.updated_at,
|
|
115
|
+
tasks: tasks.map(t => ({
|
|
116
|
+
...t,
|
|
117
|
+
phaseLabel: getPhaseLabel(t.phase),
|
|
118
|
+
})),
|
|
119
|
+
events: eventSummary,
|
|
120
|
+
artifacts: uniqueArtifacts,
|
|
121
|
+
qualityIssues: qualityIssues.map(q => ({
|
|
122
|
+
level: q.level,
|
|
123
|
+
category: q.category,
|
|
124
|
+
message: q.message,
|
|
125
|
+
resolved: q.resolved,
|
|
126
|
+
createdAt: q.created_at,
|
|
127
|
+
})),
|
|
128
|
+
stats: {
|
|
129
|
+
totalEvents: events.length,
|
|
130
|
+
totalTasks: tasks.length,
|
|
131
|
+
completedTasks: tasks.filter(t => t.status === 'completed').length,
|
|
132
|
+
totalArtifacts: uniqueArtifacts.length,
|
|
133
|
+
totalQualityIssues: qualityIssues.length,
|
|
134
|
+
unresolvedQuality: qualityIssues.filter(q => !q.resolved).length,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
res.status(500).json({ error: String(err) });
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
// 关闭 Pipeline
|
|
143
|
+
app.post('/api/pipelines/:id/close', (req, res) => {
|
|
144
|
+
try {
|
|
145
|
+
const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
|
|
146
|
+
store.closeById(id);
|
|
147
|
+
res.json({ success: true, message: 'Pipeline 已关闭' });
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
res.status(500).json({ error: String(err) });
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// 关闭所有过期 Pipeline
|
|
154
|
+
app.post('/api/pipelines/close-expired', (req, res) => {
|
|
155
|
+
try {
|
|
156
|
+
const closed = store.closeExpired();
|
|
157
|
+
res.json({ success: true, closed, message: `已关闭 ${closed} 个过期 Pipeline` });
|
|
34
158
|
}
|
|
35
159
|
catch (err) {
|
|
36
160
|
res.status(500).json({ error: String(err) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../../src/web/routes/pipelines.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../../src/web/routes/pipelines.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAkGhF"}
|
|
@@ -3,7 +3,6 @@ export function registerQualityRoutes(app, storage) {
|
|
|
3
3
|
app.get('/api/quality/history', (req, res) => {
|
|
4
4
|
try {
|
|
5
5
|
const { session_id, project_path, limit = 100 } = req.query;
|
|
6
|
-
// 使用 storage 封装的方法
|
|
7
6
|
const allIssues = storage.getQualityHistory();
|
|
8
7
|
let filtered = allIssues;
|
|
9
8
|
if (session_id && typeof session_id === 'string') {
|
|
@@ -12,12 +11,8 @@ export function registerQualityRoutes(app, storage) {
|
|
|
12
11
|
if (project_path && typeof project_path === 'string') {
|
|
13
12
|
filtered = filtered.filter(i => i.project_path === project_path);
|
|
14
13
|
}
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
res.json({
|
|
18
|
-
total: items.length,
|
|
19
|
-
items,
|
|
20
|
-
});
|
|
14
|
+
const items = filtered.slice(0, Number(limit));
|
|
15
|
+
res.json({ total: items.length, items });
|
|
21
16
|
}
|
|
22
17
|
catch (err) {
|
|
23
18
|
res.status(500).json({ error: String(err) });
|
|
@@ -28,10 +23,7 @@ export function registerQualityRoutes(app, storage) {
|
|
|
28
23
|
try {
|
|
29
24
|
const { project_path } = req.query;
|
|
30
25
|
const issues = storage.getUnresolvedIssues(project_path);
|
|
31
|
-
res.json({
|
|
32
|
-
total: issues.length,
|
|
33
|
-
items: issues,
|
|
34
|
-
});
|
|
26
|
+
res.json({ total: issues.length, items: issues });
|
|
35
27
|
}
|
|
36
28
|
catch (err) {
|
|
37
29
|
res.status(500).json({ error: String(err) });
|
|
@@ -44,23 +36,18 @@ export function registerQualityRoutes(app, storage) {
|
|
|
44
36
|
if (!project_path || typeof project_path !== 'string') {
|
|
45
37
|
return res.status(400).json({ error: 'project_path 参数必填' });
|
|
46
38
|
}
|
|
47
|
-
// 使用 storage 封装的方法
|
|
48
39
|
const history = storage.getQualityHistory().filter(h => h.project_path === project_path);
|
|
49
|
-
// 在内存中聚合统计
|
|
50
40
|
const statsMap = new Map();
|
|
51
41
|
for (const item of history) {
|
|
52
|
-
if (!statsMap.has(item.level))
|
|
42
|
+
if (!statsMap.has(item.level))
|
|
53
43
|
statsMap.set(item.level, { count: 0, resolved: 0 });
|
|
54
|
-
}
|
|
55
44
|
const stat = statsMap.get(item.level);
|
|
56
45
|
stat.count++;
|
|
57
46
|
if (item.resolved)
|
|
58
47
|
stat.resolved++;
|
|
59
48
|
}
|
|
60
49
|
const stats = Array.from(statsMap.entries()).map(([level, { count, resolved }]) => ({
|
|
61
|
-
level,
|
|
62
|
-
count,
|
|
63
|
-
resolve_rate: count > 0 ? resolved / count : 0,
|
|
50
|
+
level, count, resolve_rate: count > 0 ? resolved / count : 0,
|
|
64
51
|
}));
|
|
65
52
|
res.json({ stats });
|
|
66
53
|
}
|
|
@@ -68,5 +55,40 @@ export function registerQualityRoutes(app, storage) {
|
|
|
68
55
|
res.status(500).json({ error: String(err) });
|
|
69
56
|
}
|
|
70
57
|
});
|
|
58
|
+
// 标记质量问题已修复
|
|
59
|
+
app.post('/api/quality/:id/resolve', (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
|
|
62
|
+
const db = storage.getDatabase();
|
|
63
|
+
db.prepare('UPDATE quality_gate_history SET resolved = 1, resolved_at = datetime(\'now\') WHERE id = ?').run(id);
|
|
64
|
+
res.json({ success: true, message: '已标记为已修复' });
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
res.status(500).json({ error: String(err) });
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// 忽略质量问题
|
|
71
|
+
app.post('/api/quality/:id/dismiss', (req, res) => {
|
|
72
|
+
try {
|
|
73
|
+
const id = Array.isArray(req.params.id) ? req.params.id[0] : req.params.id;
|
|
74
|
+
const db = storage.getDatabase();
|
|
75
|
+
db.prepare('UPDATE quality_gate_history SET resolved = 1, resolved_at = datetime(\'now\') WHERE id = ?').run(id);
|
|
76
|
+
res.json({ success: true, message: '已忽略' });
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
res.status(500).json({ error: String(err) });
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// 批量标记已修复
|
|
83
|
+
app.post('/api/quality/resolve-all', (req, res) => {
|
|
84
|
+
try {
|
|
85
|
+
const db = storage.getDatabase();
|
|
86
|
+
const result = db.prepare('UPDATE quality_gate_history SET resolved = 1, resolved_at = datetime(\'now\') WHERE resolved = 0').run();
|
|
87
|
+
res.json({ success: true, resolved: result.changes, message: `已标记 ${result.changes} 个问题为已修复` });
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
res.status(500).json({ error: String(err) });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
71
93
|
}
|
|
72
94
|
//# sourceMappingURL=quality.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CAAC,GAAY,EAAE,OAAsB;IACxE,WAAW;IACX,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;YAE5D,
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/web/routes/quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6I7D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6I7D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAmIhF"}
|
|
@@ -134,12 +134,24 @@ export function registerSessionRoutes(app, storage) {
|
|
|
134
134
|
}
|
|
135
135
|
return acc;
|
|
136
136
|
}, []);
|
|
137
|
+
// 关联的 Pipeline(如果有)
|
|
138
|
+
const db = storage.getDatabase();
|
|
139
|
+
const pipeline = db.prepare('SELECT id, requirement, phase, task_type, complexity, created_at, updated_at FROM pipelines WHERE session_id = ? ORDER BY updated_at DESC LIMIT 1').get(id);
|
|
137
140
|
res.json({
|
|
138
141
|
session,
|
|
139
142
|
events: events.slice(0, 200), // 前端展示用
|
|
140
143
|
phases,
|
|
141
144
|
dataFlow,
|
|
142
145
|
timeline,
|
|
146
|
+
pipeline: pipeline ? {
|
|
147
|
+
id: pipeline.id,
|
|
148
|
+
requirement: pipeline.requirement,
|
|
149
|
+
phase: pipeline.phase,
|
|
150
|
+
taskType: pipeline.task_type,
|
|
151
|
+
complexity: pipeline.complexity,
|
|
152
|
+
createdAt: pipeline.created_at,
|
|
153
|
+
updatedAt: pipeline.updated_at,
|
|
154
|
+
} : null,
|
|
143
155
|
stats: {
|
|
144
156
|
totalEvents: events.length,
|
|
145
157
|
toolUsage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/web/routes/sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAe1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAQrC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,gBAAgB;IAkCxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAYtB"}
|
package/dist/web/server.js
CHANGED
|
@@ -11,6 +11,8 @@ import { registerEventRoutes } from './routes/events.js';
|
|
|
11
11
|
import { registerSessionRoutes } from './routes/sessions.js';
|
|
12
12
|
import { registerStatsRoutes } from './routes/stats.js';
|
|
13
13
|
import { registerKnowledgeRoutes } from './routes/knowledge.js';
|
|
14
|
+
import { registerDaemonRoutes } from './routes/daemon.js';
|
|
15
|
+
import { registerLogsRoutes } from './routes/logs.js';
|
|
14
16
|
import { authMiddleware } from './middleware/auth.js';
|
|
15
17
|
const __filename = fileURLToPath(import.meta.url);
|
|
16
18
|
const __dirname = path.dirname(__filename);
|
|
@@ -43,6 +45,8 @@ export class WebServer {
|
|
|
43
45
|
registerSessionRoutes(this.app, storage);
|
|
44
46
|
registerStatsRoutes(this.app, storage);
|
|
45
47
|
registerKnowledgeRoutes(this.app, storage);
|
|
48
|
+
registerDaemonRoutes(this.app, storage);
|
|
49
|
+
registerLogsRoutes(this.app, storage);
|
|
46
50
|
// 健康检查
|
|
47
51
|
this.app.get('/api/health', (req, res) => {
|
|
48
52
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
@@ -50,18 +54,34 @@ export class WebServer {
|
|
|
50
54
|
}
|
|
51
55
|
setupStaticFiles() {
|
|
52
56
|
// 静态文件(Vite 打包后的前端)
|
|
53
|
-
const webDir = path.
|
|
57
|
+
const webDir = path.resolve(__dirname, '../../dist/web-static');
|
|
54
58
|
this.app.use(express.static(webDir));
|
|
55
|
-
// SPA fallback -
|
|
59
|
+
// SPA fallback - 非 API 路由返回 index.html
|
|
56
60
|
this.app.use((req, res) => {
|
|
57
|
-
|
|
61
|
+
// API 路由不走 fallback
|
|
62
|
+
if (req.path.startsWith('/api/')) {
|
|
63
|
+
res.status(404).json({ error: 'API 端点不存在' });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const indexPath = path.resolve(webDir, 'index.html');
|
|
58
67
|
if (fs.existsSync(indexPath)) {
|
|
59
|
-
res.sendFile(indexPath)
|
|
68
|
+
res.sendFile(indexPath, (err) => {
|
|
69
|
+
if (err && !res.headersSent) {
|
|
70
|
+
res.status(200).send('<html><body><h1>Claude Forge</h1><p>页面加载失败,请刷新重试。</p></body></html>');
|
|
71
|
+
}
|
|
72
|
+
});
|
|
60
73
|
}
|
|
61
74
|
else {
|
|
62
75
|
res.status(200).json({ message: 'Claude Forge Web API 运行中,前端未构建。运行 npx vite build 构建前端。' });
|
|
63
76
|
}
|
|
64
77
|
});
|
|
78
|
+
// 全局错误处理(必须在所有路由之后注册)
|
|
79
|
+
this.app.use((err, req, res, _next) => {
|
|
80
|
+
logger.warn(`[Web] 请求处理失败:${err.message} | ${req.method} ${req.path}`);
|
|
81
|
+
if (!res.headersSent) {
|
|
82
|
+
res.status(500).json({ error: '服务器内部错误' });
|
|
83
|
+
}
|
|
84
|
+
});
|
|
65
85
|
}
|
|
66
86
|
start() {
|
|
67
87
|
return new Promise((resolve, reject) => {
|