@winspan/claude-forge 7.4.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":"
|
|
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(
|
|
17
|
+
console.log(`\x1b[36m║ Claude Forge v${version.padEnd(24)}║\x1b[0m`);
|
|
15
18
|
console.log('\x1b[36m╚════════════════════════════════════════╝\x1b[0m\n');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
76
|
+
async function showSessionMenu() {
|
|
71
77
|
console.clear();
|
|
72
|
-
console.log('\x1b[36m═══
|
|
73
|
-
console.log(' \x1b[33m[1]\x1b[0m
|
|
74
|
-
console.log(' \x1b[33m[2]\x1b[0m
|
|
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('
|
|
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', ['
|
|
88
|
+
await runCommand('logs', ['-n', '20']);
|
|
89
|
+
await waitForKey();
|
|
82
90
|
break;
|
|
83
91
|
case '2':
|
|
84
|
-
await runCommand('logs', ['-n', '
|
|
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
|
|
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":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"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"}
|