@winspan/claude-forge 7.3.0 → 7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO1D"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO1D"}
@@ -1,5 +1,8 @@
1
1
  import readline from 'readline';
2
2
  import { spawn } from 'child_process';
3
+ import { createRequire } from 'module';
4
+ const require = createRequire(import.meta.url);
5
+ const { version } = require('../../../package.json');
3
6
  export function registerMenuCommand(program) {
4
7
  program
5
8
  .command('menu')
@@ -11,95 +14,135 @@ export function registerMenuCommand(program) {
11
14
  async function showMainMenu() {
12
15
  console.clear();
13
16
  console.log('\x1b[36m╔════════════════════════════════════════╗\x1b[0m');
14
- console.log('\x1b[36m║ Claude Forge 控制台菜单 ║\x1b[0m');
17
+ console.log(`\x1b[36m║ Claude Forge v${version.padEnd(24)}║\x1b[0m`);
15
18
  console.log('\x1b[36m╚════════════════════════════════════════╝\x1b[0m\n');
16
- const groups = [
17
- {
18
- title: '🚀 运行与状态',
19
- items: [
20
- { key: '1', label: '启动 daemon', action: () => runCommand('daemon', ['start']) },
21
- { key: '2', label: '停止 daemon', action: () => runCommand('daemon', ['stop']) },
22
- { key: '3', label: '重启 daemon', action: () => runCommand('daemon', ['restart']) },
23
- { key: '4', label: '查看状态', action: () => runCommand('status', []) },
24
- { key: '5', label: '查看日志', action: () => showLogsMenu() },
25
- ],
26
- },
27
- {
28
- title: '📊 会话与任务',
29
- items: [
30
- { key: '6', label: '最近会话列表', action: () => runCommand('logs', ['-n', '20']) },
31
- { key: '7', label: '查看注入历史', action: () => runCommand('logs', ['--injections', '-n', '10']) },
32
- { key: '8', label: '打开 Web Dashboard', action: () => openDashboard() },
33
- ],
34
- },
35
- {
36
- title: '⚙️ 项目治理',
37
- items: [
38
- { key: '9', label: '管理 CLAUDE.md', action: () => runCommand('claudemd', ['--help']) },
39
- { key: 'a', label: '管理技能', action: () => runCommand('skills', ['list']) },
40
- { key: 'b', label: '查看配置', action: () => runCommand('config', ['show']) },
41
- ],
42
- },
43
- ];
44
- groups.forEach(group => {
45
- console.log(`\x1b[1m${group.title}\x1b[0m`);
46
- group.items.forEach(item => {
47
- console.log(` \x1b[33m[${item.key}]\x1b[0m ${item.label}`);
48
- });
49
- console.log('');
50
- });
51
- console.log(`\x1b[33m[0]\x1b[0m 退出\n`);
52
- const choice = await prompt('请选择操作');
53
- const allItems = groups.flatMap(g => g.items);
54
- const selected = allItems.find(item => item.key === choice);
55
- if (choice === '0') {
56
- console.log('再见!');
57
- process.exit(0);
58
- }
59
- else if (selected) {
60
- await selected.action();
61
- await waitForKey();
62
- await showMainMenu();
19
+ console.log(' \x1b[33m[1]\x1b[0m 🚀 运行与状态');
20
+ console.log(' \x1b[33m[2]\x1b[0m 📊 会话与日志');
21
+ console.log(' \x1b[33m[3]\x1b[0m ⚙️ 项目治理');
22
+ console.log('');
23
+ console.log(' \x1b[33m[0]\x1b[0m 退出\n');
24
+ const choice = await prompt('请选择');
25
+ switch (choice) {
26
+ case '1':
27
+ await showRuntimeMenu();
28
+ break;
29
+ case '2':
30
+ await showSessionMenu();
31
+ break;
32
+ case '3':
33
+ await showGovernanceMenu();
34
+ break;
35
+ case '0': process.exit(0);
36
+ default:
37
+ console.log('\x1b[31m无效选择\x1b[0m');
38
+ await waitForKey();
63
39
  }
64
- else {
65
- console.log('\x1b[31m无效选择,请重试\x1b[0m');
66
- await waitForKey();
67
- await showMainMenu();
40
+ await showMainMenu();
41
+ }
42
+ async function showRuntimeMenu() {
43
+ console.clear();
44
+ console.log('\x1b[36m═══ 🚀 运行与状态 ═══\x1b[0m\n');
45
+ console.log(' \x1b[33m[1]\x1b[0m 启动 daemon');
46
+ console.log(' \x1b[33m[2]\x1b[0m 停止 daemon');
47
+ console.log(' \x1b[33m[3]\x1b[0m 查看状态');
48
+ console.log(' \x1b[33m[4]\x1b[0m 打开 Web Dashboard');
49
+ console.log('');
50
+ console.log(' \x1b[33m[0]\x1b[0m 返回\n');
51
+ const choice = await prompt('请选择');
52
+ switch (choice) {
53
+ case '1':
54
+ await runCommand('daemon', ['start']);
55
+ await waitForKey();
56
+ break;
57
+ case '2':
58
+ await runCommand('daemon', ['stop']);
59
+ await waitForKey();
60
+ break;
61
+ case '3':
62
+ await runCommand('status', []);
63
+ await waitForKey();
64
+ break;
65
+ case '4':
66
+ openDashboard();
67
+ await waitForKey();
68
+ break;
69
+ case '0': return;
70
+ default:
71
+ console.log('\x1b[31m无效选择\x1b[0m');
72
+ await waitForKey();
68
73
  }
74
+ await showRuntimeMenu();
69
75
  }
70
- async function showLogsMenu() {
76
+ async function showSessionMenu() {
71
77
  console.clear();
72
- console.log('\x1b[36m═══ 日志查看选项 ═══\x1b[0m\n');
73
- console.log(' \x1b[33m[1]\x1b[0m 最近 50 条事件(平铺)');
74
- console.log(' \x1b[33m[2]\x1b[0m 最近 20 条事件(按会话分组)');
78
+ console.log('\x1b[36m═══ 📊 会话与日志 ═══\x1b[0m\n');
79
+ console.log(' \x1b[33m[1]\x1b[0m 最近会话(按会话分组)');
80
+ console.log(' \x1b[33m[2]\x1b[0m 最近事件(平铺)');
75
81
  console.log(' \x1b[33m[3]\x1b[0m 查看注入历史');
76
82
  console.log(' \x1b[33m[4]\x1b[0m 实时跟踪(follow)');
77
- console.log(' \x1b[33m[0]\x1b[0m 返回主菜单\n');
83
+ console.log('');
84
+ console.log(' \x1b[33m[0]\x1b[0m 返回\n');
78
85
  const choice = await prompt('请选择');
79
86
  switch (choice) {
80
87
  case '1':
81
- await runCommand('logs', ['--flat', '-n', '50']);
88
+ await runCommand('logs', ['-n', '20']);
89
+ await waitForKey();
82
90
  break;
83
91
  case '2':
84
- await runCommand('logs', ['-n', '20']);
92
+ await runCommand('logs', ['--flat', '-n', '50']);
93
+ await waitForKey();
85
94
  break;
86
95
  case '3':
87
96
  await runCommand('logs', ['--injections', '-n', '10']);
97
+ await waitForKey();
88
98
  break;
89
99
  case '4':
90
100
  await runCommand('logs', ['--follow']);
91
101
  break;
92
- case '0':
93
- return;
102
+ case '0': return;
94
103
  default:
95
104
  console.log('\x1b[31m无效选择\x1b[0m');
96
105
  await waitForKey();
97
- await showLogsMenu();
98
106
  }
107
+ await showSessionMenu();
108
+ }
109
+ async function showGovernanceMenu() {
110
+ console.clear();
111
+ console.log('\x1b[36m═══ ⚙️ 项目治理 ═══\x1b[0m\n');
112
+ console.log(' \x1b[33m[1]\x1b[0m 管理 CLAUDE.md');
113
+ console.log(' \x1b[33m[2]\x1b[0m 查看技能列表');
114
+ console.log(' \x1b[33m[3]\x1b[0m 查看配置');
115
+ console.log(' \x1b[33m[4]\x1b[0m 初始化项目');
116
+ console.log('');
117
+ console.log(' \x1b[33m[0]\x1b[0m 返回\n');
118
+ const choice = await prompt('请选择');
119
+ switch (choice) {
120
+ case '1':
121
+ await runCommand('claudemd', ['--help']);
122
+ await waitForKey();
123
+ break;
124
+ case '2':
125
+ await runCommand('skills', ['list']);
126
+ await waitForKey();
127
+ break;
128
+ case '3':
129
+ await runCommand('config', ['show']);
130
+ await waitForKey();
131
+ break;
132
+ case '4':
133
+ await runCommand('init', []);
134
+ await waitForKey();
135
+ break;
136
+ case '0': return;
137
+ default:
138
+ console.log('\x1b[31m无效选择\x1b[0m');
139
+ await waitForKey();
140
+ }
141
+ await showGovernanceMenu();
99
142
  }
100
143
  function runCommand(cmd, args) {
101
144
  return new Promise((resolve) => {
102
- console.log(`\x1b[90m执行: cf ${cmd} ${args.join(' ')}\x1b[0m\n`);
145
+ console.log(`\n\x1b[90m$ cf ${cmd} ${args.join(' ')}\x1b[0m\n`);
103
146
  const child = spawn('node', [process.argv[1], cmd, ...args], {
104
147
  stdio: 'inherit',
105
148
  cwd: process.cwd(),
@@ -114,10 +157,7 @@ function openDashboard() {
114
157
  spawn(open, ['http://localhost:3721'], { detached: true, stdio: 'ignore' }).unref();
115
158
  }
116
159
  function prompt(question) {
117
- const rl = readline.createInterface({
118
- input: process.stdin,
119
- output: process.stdout,
120
- });
160
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
121
161
  return new Promise((resolve) => {
122
162
  rl.question(`\x1b[32m${question}: \x1b[0m`, (answer) => {
123
163
  rl.close();
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,SAAS;IAIR,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAA0D;gBAEpD,OAAO,EAAE,gBAAgB;IAM7C,OAAO,CAAC,WAAW;IAuKb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,SAAS;IAIR,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAA0D;gBAEpD,OAAO,EAAE,gBAAgB;IAM7C,OAAO,CAAC,WAAW;IAkRb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}
@@ -137,6 +137,95 @@ export class WebServer {
137
137
  });
138
138
  res.json({ session, tasks: taskDetails });
139
139
  });
140
+ // Session timeline: detailed event timeline for a session
141
+ this.app.get('/api/sessions/:id/timeline', (req, res) => {
142
+ const sessionIdPrefix = req.params.id;
143
+ const sessions = storage.querySessions({ limit: 1000 });
144
+ const session = sessions.find(s => s.session_id.startsWith(sessionIdPrefix));
145
+ if (!session) {
146
+ res.status(404).json({ error: 'Session not found' });
147
+ return;
148
+ }
149
+ const fullSessionId = session.session_id;
150
+ const events = storage.queryEvents({ session_id: fullSessionId, limit: 2000 });
151
+ const injections = storage.queryInjections({ session_id: fullSessionId, limit: 200 });
152
+ const qualityIssues = storage.queryQualityIssues({ session_id: fullSessionId, resolved: false });
153
+ // Build timeline: merge events and injections, sort by timestamp
154
+ const timeline = [];
155
+ // User inputs
156
+ events
157
+ .filter(e => e.hook_type === 'UserPromptSubmit' && (e.user_prompt || e.tool_input?.user_prompt))
158
+ .forEach(e => {
159
+ timeline.push({
160
+ timestamp: e.timestamp,
161
+ type: 'user_input',
162
+ data: { content: e.user_prompt || e.tool_input?.user_prompt },
163
+ });
164
+ });
165
+ // Injections
166
+ injections.forEach(inj => {
167
+ timeline.push({
168
+ timestamp: inj.timestamp,
169
+ type: 'injection',
170
+ data: {
171
+ source: inj.source_handler,
172
+ injection_type: inj.injection_type,
173
+ content: inj.content,
174
+ length: inj.content.length,
175
+ },
176
+ });
177
+ });
178
+ // Tool calls
179
+ events
180
+ .filter(e => e.tool_name && e.hook_type === 'PreToolUse')
181
+ .forEach(e => {
182
+ const toolInput = e.tool_input;
183
+ const toolOutput = e.tool_output;
184
+ timeline.push({
185
+ timestamp: e.timestamp,
186
+ type: 'tool_call',
187
+ data: {
188
+ tool: e.tool_name,
189
+ input: toolInput,
190
+ output: toolOutput,
191
+ success: !toolOutput?.error,
192
+ },
193
+ });
194
+ });
195
+ // Quality checks (from PostToolUse events with quality gate results)
196
+ events
197
+ .filter(e => e.hook_type === 'PostToolUse' && e.tool_output?.quality_check)
198
+ .forEach(e => {
199
+ const qc = e.tool_output.quality_check;
200
+ timeline.push({
201
+ timestamp: e.timestamp,
202
+ type: 'quality_check',
203
+ data: qc,
204
+ });
205
+ });
206
+ // Sort by timestamp
207
+ timeline.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
208
+ // Summary
209
+ const commits = events
210
+ .filter(e => e.tool_name === 'Bash' && e.tool_input?.command?.includes('git commit'))
211
+ .map(e => {
212
+ const cmd = e.tool_input?.command || '';
213
+ const match = cmd.match(/git commit.*-m\s+["']([^"']+)["']/);
214
+ return { message: match ? match[1] : 'commit' };
215
+ });
216
+ const filesChanged = [...new Set(events
217
+ .filter(e => (e.tool_name === 'Edit' || e.tool_name === 'Write') && e.tool_input?.file_path)
218
+ .map(e => e.tool_input.file_path))];
219
+ res.json({
220
+ session,
221
+ timeline,
222
+ summary: {
223
+ commits,
224
+ filesChanged,
225
+ unresolvedIssues: qualityIssues,
226
+ },
227
+ });
228
+ });
140
229
  // Rules: loaded conventions
141
230
  this.app.get('/api/rules', (_req, res) => {
142
231
  const conventions = ruleEngine.getConventions();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@
11
11
  --border: #1e293b; --border-hover: #334155;
12
12
  --text: #e2e8f0; --text-dim: #64748b; --text-muted: #94a3b8;
13
13
  --accent: #818cf8; --accent-glow: rgba(129,140,248,0.15);
14
- --green: #34d399; --yellow: #fbbf24; --red: #f87171; --blue: #60a5fa;
14
+ --green: #34d399; --yellow: #fbbf24; --red: #f87171; --blue: #60a5fa; --purple: #a78bfa;
15
+ --bg-secondary: rgba(0,0,0,0.3);
15
16
  --radius: 12px; --radius-sm: 8px;
16
17
  }
17
18
  body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
@@ -87,8 +88,11 @@
87
88
 
88
89
  <!-- Session Detail -->
89
90
  <div id="page-session-detail" class="page">
90
- <h1>Session Detail</h1>
91
- <button class="refresh" onclick="showPage('dashboard')">← Back</button>
91
+ <div style="display:flex;align-items:center;gap:0.75rem;margin-bottom:1.5rem">
92
+ <button class="btn" onclick="showPage('dashboard')">← Back</button>
93
+ <h1 style="margin-bottom:0">Session Timeline</h1>
94
+ <button class="btn" id="timeline-view-btn" onclick="toggleTimelineView()">任务视图</button>
95
+ </div>
92
96
  <div id="session-detail"></div>
93
97
  </div>
94
98
 
@@ -301,7 +305,126 @@ function toggleInj(idx) {
301
305
  }
302
306
  }
303
307
 
308
+ let currentSessionId = null;
309
+ let currentView = 'timeline'; // 'timeline' or 'tasks'
310
+
304
311
  async function loadSessionDetail(sessionId) {
312
+ currentSessionId = sessionId;
313
+ if (currentView === 'timeline') {
314
+ await loadSessionTimeline(sessionId);
315
+ } else {
316
+ await loadSessionTasks(sessionId);
317
+ }
318
+ }
319
+
320
+ function toggleTimelineView() {
321
+ currentView = currentView === 'timeline' ? 'tasks' : 'timeline';
322
+ document.getElementById('timeline-view-btn').textContent = currentView === 'timeline' ? '任务视图' : '时间线视图';
323
+ if (currentSessionId) loadSessionDetail(currentSessionId);
324
+ }
325
+
326
+ async function loadSessionTimeline(sessionId) {
327
+ showPage('session-detail');
328
+ document.getElementById('session-detail').innerHTML = '<div class="empty">Loading...</div>';
329
+
330
+ try {
331
+ const res = await fetch(API + '/api/sessions/' + sessionId + '/timeline');
332
+ const data = await res.json();
333
+
334
+ const shortId = data.session.session_id.slice(0, 8);
335
+ const start = parseTime(data.session.start_time).toLocaleString();
336
+ const end = parseTime(data.session.end_time).toLocaleString();
337
+
338
+ let html = `
339
+ <div class="card fade-in" style="margin-bottom:1.5rem">
340
+ <h2 style="margin-bottom:0.5rem">会话 ${shortId}</h2>
341
+ <div style="color:var(--text-muted)">${data.session.first_prompt || '(无提示词)'}</div>
342
+ <div style="margin-top:0.5rem;font-size:0.8rem;color:var(--text-dim)">${start} ~ ${end} · ${data.timeline.length} events</div>
343
+ </div>
344
+ `;
345
+
346
+ // Timeline events
347
+ data.timeline.forEach((item, idx) => {
348
+ const time = parseTime(item.timestamp).toLocaleTimeString();
349
+
350
+ if (item.type === 'user_input') {
351
+ html += `<div class="card fade-in" style="margin-bottom:0.75rem;border-left:3px solid var(--accent)">
352
+ <div style="font-size:0.75rem;color:var(--text-dim);margin-bottom:0.5rem">${time} 👤 用户输入</div>
353
+ <div style="font-size:0.95rem">"${item.data.content}"</div>
354
+ </div>`;
355
+ }
356
+
357
+ else if (item.type === 'injection') {
358
+ const preview = item.data.content.slice(0, 100);
359
+ html += `<div class="card fade-in" style="margin-bottom:0.75rem;border-left:3px solid var(--purple)">
360
+ <div style="font-size:0.75rem;color:var(--text-dim);margin-bottom:0.5rem">${time} 💉 forge 注入 (${item.data.injection_type}, ${item.data.length} chars)</div>
361
+ <div style="font-size:0.85rem;color:var(--text-muted)">${preview}${item.data.length > 100 ? '...' : ''}</div>
362
+ <button class="btn" style="margin-top:0.5rem;padding:4px 12px;font-size:0.75rem" onclick="toggleContent(${idx})">展开</button>
363
+ <pre id="content-${idx}" style="display:none;margin-top:0.5rem;font-size:0.75rem;background:var(--bg-secondary);padding:0.75rem;border-radius:6px;overflow-x:auto">${item.data.content}</pre>
364
+ </div>`;
365
+ }
366
+
367
+ else if (item.type === 'tool_call') {
368
+ const tool = item.data.tool;
369
+ const input = item.data.input;
370
+ const success = item.data.success ? '✓' : '✗';
371
+ let summary = '';
372
+
373
+ if (tool === 'Bash') summary = `command: ${(input.command || '').slice(0, 60)}`;
374
+ else if (tool === 'Edit' || tool === 'Write') summary = `file: ${input.file_path || ''}`;
375
+ else if (tool === 'Read') summary = `file: ${input.file_path || ''}`;
376
+ else summary = JSON.stringify(input).slice(0, 60);
377
+
378
+ html += `<div class="card fade-in" style="margin-bottom:0.75rem;border-left:3px solid ${success === '✓' ? 'var(--green)' : 'var(--red)'}">
379
+ <div style="font-size:0.75rem;color:var(--text-dim);margin-bottom:0.5rem">${time} 🔧 ${tool} ${success}</div>
380
+ <div style="font-size:0.85rem;color:var(--text-muted)">${summary}</div>
381
+ <button class="btn" style="margin-top:0.5rem;padding:4px 12px;font-size:0.75rem" onclick="toggleContent(${idx})">展开</button>
382
+ <pre id="content-${idx}" style="display:none;margin-top:0.5rem;font-size:0.75rem;background:var(--bg-secondary);padding:0.75rem;border-radius:6px;overflow-x:auto">${JSON.stringify(item.data, null, 2)}</pre>
383
+ </div>`;
384
+ }
385
+
386
+ else if (item.type === 'quality_check') {
387
+ const qc = item.data;
388
+ html += `<div class="card fade-in" style="margin-bottom:0.75rem;border-left:3px solid var(--yellow)">
389
+ <div style="font-size:0.75rem;color:var(--text-dim);margin-bottom:0.5rem">${time} ⚠️ 质量检查</div>
390
+ <div style="font-size:0.85rem">${JSON.stringify(qc).slice(0, 100)}</div>
391
+ </div>`;
392
+ }
393
+ });
394
+
395
+ // Summary
396
+ html += `<div class="card fade-in" style="margin-top:1.5rem;border:2px solid var(--accent)">
397
+ <h3 style="margin-bottom:1rem">📊 任务总结</h3>
398
+ ${data.summary.commits.length > 0 ? `<div style="margin-bottom:0.75rem">
399
+ <div style="font-weight:600;margin-bottom:0.5rem">✅ 产出 (${data.summary.commits.length} commits)</div>
400
+ ${data.summary.commits.map(c => `<div style="margin-left:1rem;font-size:0.85rem;color:var(--green)">- ${c.message}</div>`).join('')}
401
+ </div>` : ''}
402
+ ${data.summary.filesChanged.length > 0 ? `<div style="margin-bottom:0.75rem">
403
+ <div style="font-weight:600;margin-bottom:0.5rem">✅ 修改文件 (${data.summary.filesChanged.length} 个)</div>
404
+ ${data.summary.filesChanged.map(f => `<div style="margin-left:1rem;font-size:0.85rem;color:var(--text-muted)">- ${f}</div>`).join('')}
405
+ </div>` : ''}
406
+ ${data.summary.unresolvedIssues.length > 0 ? `<div>
407
+ <div style="font-weight:600;margin-bottom:0.5rem">⚠️ 未解决质量问题 (${data.summary.unresolvedIssues.length} 个)</div>
408
+ ${data.summary.unresolvedIssues.map(q => `<div style="margin-left:1rem;font-size:0.85rem;color:var(--red)">- [${q.level}/${q.category}] ${q.message}</div>`).join('')}
409
+ </div>` : '<div style="color:var(--green)">✅ 无未解决问题</div>'}
410
+ </div>`;
411
+
412
+ document.getElementById('session-detail').innerHTML = html;
413
+ } catch (err) {
414
+ document.getElementById('session-detail').innerHTML = '<div class="empty">Failed to load: ' + err.message + '</div>';
415
+ }
416
+ }
417
+
418
+ function toggleContent(idx) {
419
+ const el = document.getElementById('content-' + idx);
420
+ if (el.style.display === 'none') {
421
+ el.style.display = 'block';
422
+ } else {
423
+ el.style.display = 'none';
424
+ }
425
+ }
426
+
427
+ async function loadSessionTasks(sessionId) {
305
428
  showPage('session-detail');
306
429
  document.getElementById('session-detail').innerHTML = '<div class="empty">Loading...</div>';
307
430
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "7.3.0",
3
+ "version": "7.5.0",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",