@appkit/llamacpp-cli 1.9.0 → 1.10.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/CHANGELOG.md +16 -0
- package/README.md +171 -42
- package/dist/cli.js +75 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.d.ts +9 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +83 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/monitor.js +1 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/ps.d.ts +1 -3
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +36 -115
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/router/config.d.ts +1 -0
- package/dist/commands/router/config.d.ts.map +1 -1
- package/dist/commands/router/config.js +7 -2
- package/dist/commands/router/config.js.map +1 -1
- package/dist/commands/router/logs.d.ts +12 -0
- package/dist/commands/router/logs.d.ts.map +1 -0
- package/dist/commands/router/logs.js +238 -0
- package/dist/commands/router/logs.js.map +1 -0
- package/dist/commands/tui.d.ts +2 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +27 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/lib/completion.d.ts +5 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +195 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +5 -1
- package/dist/lib/model-downloader.d.ts.map +1 -1
- package/dist/lib/model-downloader.js +53 -20
- package/dist/lib/model-downloader.js.map +1 -1
- package/dist/lib/router-logger.d.ts +61 -0
- package/dist/lib/router-logger.d.ts.map +1 -0
- package/dist/lib/router-logger.js +200 -0
- package/dist/lib/router-logger.js.map +1 -0
- package/dist/lib/router-manager.d.ts.map +1 -1
- package/dist/lib/router-manager.js +1 -0
- package/dist/lib/router-manager.js.map +1 -1
- package/dist/lib/router-server.d.ts +9 -0
- package/dist/lib/router-server.d.ts.map +1 -1
- package/dist/lib/router-server.js +169 -57
- package/dist/lib/router-server.js.map +1 -1
- package/dist/tui/ConfigApp.d.ts +7 -0
- package/dist/tui/ConfigApp.d.ts.map +1 -0
- package/dist/tui/ConfigApp.js +1002 -0
- package/dist/tui/ConfigApp.js.map +1 -0
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
- package/dist/tui/HistoricalMonitorApp.js +85 -49
- package/dist/tui/HistoricalMonitorApp.js.map +1 -1
- package/dist/tui/ModelsApp.d.ts +7 -0
- package/dist/tui/ModelsApp.d.ts.map +1 -0
- package/dist/tui/ModelsApp.js +362 -0
- package/dist/tui/ModelsApp.js.map +1 -0
- package/dist/tui/MultiServerMonitorApp.d.ts +6 -1
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +1038 -122
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/tui/RootNavigator.d.ts +7 -0
- package/dist/tui/RootNavigator.d.ts.map +1 -0
- package/dist/tui/RootNavigator.js +55 -0
- package/dist/tui/RootNavigator.js.map +1 -0
- package/dist/tui/SearchApp.d.ts +6 -0
- package/dist/tui/SearchApp.d.ts.map +1 -0
- package/dist/tui/SearchApp.js +451 -0
- package/dist/tui/SearchApp.js.map +1 -0
- package/dist/tui/SplashScreen.d.ts +16 -0
- package/dist/tui/SplashScreen.d.ts.map +1 -0
- package/dist/tui/SplashScreen.js +129 -0
- package/dist/tui/SplashScreen.js.map +1 -0
- package/dist/types/router-config.d.ts +1 -0
- package/dist/types/router-config.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +41 -10
- package/src/commands/monitor.ts +1 -1
- package/src/commands/ps.ts +44 -133
- package/src/commands/router/config.ts +9 -2
- package/src/commands/router/logs.ts +256 -0
- package/src/commands/tui.ts +25 -0
- package/src/lib/model-downloader.ts +57 -20
- package/src/lib/router-logger.ts +201 -0
- package/src/lib/router-manager.ts +1 -0
- package/src/lib/router-server.ts +193 -62
- package/src/tui/ConfigApp.ts +1085 -0
- package/src/tui/HistoricalMonitorApp.ts +88 -49
- package/src/tui/ModelsApp.ts +368 -0
- package/src/tui/MultiServerMonitorApp.ts +1163 -122
- package/src/tui/RootNavigator.ts +74 -0
- package/src/tui/SearchApp.ts +511 -0
- package/src/tui/SplashScreen.ts +149 -0
- package/src/types/router-config.ts +1 -0
package/dist/commands/ps.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AA4BA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAuD/C"}
|
package/dist/commands/ps.js
CHANGED
|
@@ -6,65 +6,52 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.psCommand = psCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
const state_manager_js_1 = require("../lib/state-manager.js");
|
|
10
|
+
const status_checker_js_1 = require("../lib/status-checker.js");
|
|
11
|
+
const format_utils_js_1 = require("../utils/format-utils.js");
|
|
12
|
+
const process_utils_js_1 = require("../utils/process-utils.js");
|
|
13
|
+
const STATUS_CONFIG = {
|
|
14
|
+
running: { text: '✅ RUNNING', color: chalk_1.default.green },
|
|
15
|
+
crashed: { text: '❌ CRASHED', color: chalk_1.default.red },
|
|
16
|
+
stopped: { text: '⚠️ STOPPED', color: chalk_1.default.yellow },
|
|
17
|
+
};
|
|
18
|
+
async function getServerMemory(server) {
|
|
19
|
+
if (server.status !== 'running' || !server.pid) {
|
|
20
|
+
return '-';
|
|
21
|
+
}
|
|
22
|
+
const cpuMemoryBytes = await (0, process_utils_js_1.getProcessMemory)(server.pid);
|
|
23
|
+
if (cpuMemoryBytes === null) {
|
|
24
|
+
return '-';
|
|
25
|
+
}
|
|
26
|
+
const metalMemoryBytes = server.metalMemoryMB ? server.metalMemoryMB * 1024 * 1024 : 0;
|
|
27
|
+
return (0, format_utils_js_1.formatBytes)(cpuMemoryBytes + metalMemoryBytes);
|
|
28
|
+
}
|
|
29
|
+
async function psCommand() {
|
|
30
|
+
const servers = await state_manager_js_1.stateManager.getAllServers();
|
|
17
31
|
if (servers.length === 0) {
|
|
18
32
|
console.log(chalk_1.default.yellow('No servers configured.'));
|
|
19
33
|
console.log(chalk_1.default.dim('\nCreate a server: llamacpp server create <model-filename>'));
|
|
20
34
|
return;
|
|
21
35
|
}
|
|
22
|
-
// Update all server statuses
|
|
23
36
|
console.log(chalk_1.default.dim('Checking server statuses...\n'));
|
|
24
|
-
const
|
|
37
|
+
const serversWithStatus = await status_checker_js_1.statusChecker.updateAllServerStatuses();
|
|
25
38
|
const table = new cli_table3_1.default({
|
|
26
39
|
head: ['SERVER ID', 'MODEL', 'PORT', 'STATUS', 'PID', 'MEMORY', 'UPTIME'],
|
|
27
40
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
let statusColor;
|
|
34
|
-
switch (server.status) {
|
|
35
|
-
case 'running':
|
|
36
|
-
statusText = '✅ RUNNING';
|
|
37
|
-
statusColor = chalk_1.default.green;
|
|
38
|
-
runningCount++;
|
|
39
|
-
break;
|
|
40
|
-
case 'crashed':
|
|
41
|
-
statusText = '❌ CRASHED';
|
|
42
|
-
statusColor = chalk_1.default.red;
|
|
43
|
-
crashedCount++;
|
|
44
|
-
break;
|
|
45
|
-
default:
|
|
46
|
-
statusText = '⚠️ STOPPED';
|
|
47
|
-
statusColor = chalk_1.default.yellow;
|
|
48
|
-
stoppedCount++;
|
|
49
|
-
}
|
|
41
|
+
const counts = { running: 0, stopped: 0, crashed: 0 };
|
|
42
|
+
for (const server of serversWithStatus) {
|
|
43
|
+
const status = server.status || 'stopped';
|
|
44
|
+
const config = STATUS_CONFIG[status] || STATUS_CONFIG.stopped;
|
|
45
|
+
counts[status]++;
|
|
50
46
|
const uptime = server.status === 'running' && server.lastStarted
|
|
51
|
-
? (0,
|
|
47
|
+
? (0, format_utils_js_1.formatUptime)(server.lastStarted)
|
|
52
48
|
: '-';
|
|
53
|
-
|
|
54
|
-
let memoryText = '-';
|
|
55
|
-
if (server.status === 'running' && server.pid) {
|
|
56
|
-
const cpuMemoryBytes = await (0, process_utils_1.getProcessMemory)(server.pid);
|
|
57
|
-
if (cpuMemoryBytes !== null) {
|
|
58
|
-
const metalMemoryBytes = server.metalMemoryMB ? server.metalMemoryMB * 1024 * 1024 : 0;
|
|
59
|
-
const totalMemoryBytes = cpuMemoryBytes + metalMemoryBytes;
|
|
60
|
-
memoryText = (0, format_utils_1.formatBytes)(totalMemoryBytes);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
49
|
+
const memoryText = await getServerMemory(server);
|
|
63
50
|
table.push([
|
|
64
51
|
server.id,
|
|
65
52
|
server.modelName,
|
|
66
53
|
server.port.toString(),
|
|
67
|
-
|
|
54
|
+
config.color(config.text),
|
|
68
55
|
server.pid?.toString() || '-',
|
|
69
56
|
memoryText,
|
|
70
57
|
uptime,
|
|
@@ -72,81 +59,15 @@ async function showStaticTable() {
|
|
|
72
59
|
}
|
|
73
60
|
console.log(table.toString());
|
|
74
61
|
const summary = [
|
|
75
|
-
chalk_1.default.green(`${
|
|
76
|
-
chalk_1.default.yellow(`${
|
|
62
|
+
chalk_1.default.green(`${counts.running} running`),
|
|
63
|
+
chalk_1.default.yellow(`${counts.stopped} stopped`),
|
|
77
64
|
];
|
|
78
|
-
if (
|
|
79
|
-
summary.push(chalk_1.default.red(`${
|
|
65
|
+
if (counts.crashed > 0) {
|
|
66
|
+
summary.push(chalk_1.default.red(`${counts.crashed} crashed`));
|
|
80
67
|
}
|
|
81
68
|
console.log(chalk_1.default.dim(`\nTotal: ${servers.length} servers (${summary.join(', ')})`));
|
|
82
|
-
if (
|
|
69
|
+
if (counts.crashed > 0) {
|
|
83
70
|
console.log(chalk_1.default.red('\n⚠️ Some servers have crashed. Check logs with: llamacpp server logs <id> --errors'));
|
|
84
71
|
}
|
|
85
72
|
}
|
|
86
|
-
async function psCommand(identifier, options) {
|
|
87
|
-
// If --table flag is set, show static table (backward compatibility)
|
|
88
|
-
if (options?.table) {
|
|
89
|
-
await showStaticTable();
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// Get all servers and update their statuses
|
|
93
|
-
const servers = await state_manager_1.stateManager.getAllServers();
|
|
94
|
-
if (servers.length === 0) {
|
|
95
|
-
console.log(chalk_1.default.yellow('No servers configured.'));
|
|
96
|
-
console.log(chalk_1.default.dim('\nCreate a server: llamacpp server create <model-filename>'));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
// Update all server statuses
|
|
100
|
-
const updated = await status_checker_1.statusChecker.updateAllServerStatuses();
|
|
101
|
-
// If identifier is provided, find the server and jump to detail view
|
|
102
|
-
if (identifier) {
|
|
103
|
-
const server = await findServer(identifier, updated);
|
|
104
|
-
if (!server) {
|
|
105
|
-
console.log(chalk_1.default.red(`❌ Server not found: ${identifier}`));
|
|
106
|
-
console.log(chalk_1.default.dim('\nAvailable servers:'));
|
|
107
|
-
updated.forEach((s) => {
|
|
108
|
-
console.log(chalk_1.default.dim(` - ${s.id} (port ${s.port})`));
|
|
109
|
-
});
|
|
110
|
-
process.exit(1);
|
|
111
|
-
}
|
|
112
|
-
// Find the server index for direct jump
|
|
113
|
-
const serverIndex = updated.findIndex(s => s.id === server.id);
|
|
114
|
-
// Launch multi-server TUI with direct jump to detail view
|
|
115
|
-
const screen = blessed_1.default.screen({
|
|
116
|
-
smartCSR: true,
|
|
117
|
-
title: 'llama.cpp Multi-Server Monitor',
|
|
118
|
-
fullUnicode: true,
|
|
119
|
-
});
|
|
120
|
-
await (0, MultiServerMonitorApp_js_1.createMultiServerMonitorUI)(screen, updated, true, serverIndex); // fromPs = true, directJumpIndex
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
// No identifier - launch multi-server TUI
|
|
124
|
-
const runningServers = updated.filter((s) => s.status === 'running');
|
|
125
|
-
// Launch multi-server TUI (shows all servers, not just running ones)
|
|
126
|
-
const screen = blessed_1.default.screen({
|
|
127
|
-
smartCSR: true,
|
|
128
|
-
title: 'llama.cpp Multi-Server Monitor',
|
|
129
|
-
fullUnicode: true,
|
|
130
|
-
});
|
|
131
|
-
await (0, MultiServerMonitorApp_js_1.createMultiServerMonitorUI)(screen, updated, true); // fromPs = true
|
|
132
|
-
}
|
|
133
|
-
// Helper function to find server by identifier
|
|
134
|
-
async function findServer(identifier, servers) {
|
|
135
|
-
// Try by port
|
|
136
|
-
const port = parseInt(identifier);
|
|
137
|
-
if (!isNaN(port)) {
|
|
138
|
-
const server = servers.find(s => s.port === port);
|
|
139
|
-
if (server)
|
|
140
|
-
return server;
|
|
141
|
-
}
|
|
142
|
-
// Try by exact ID
|
|
143
|
-
const byId = servers.find(s => s.id === identifier);
|
|
144
|
-
if (byId)
|
|
145
|
-
return byId;
|
|
146
|
-
// Try by partial model name
|
|
147
|
-
const byModel = servers.find(s => s.modelName.toLowerCase().includes(identifier.toLowerCase()));
|
|
148
|
-
if (byModel)
|
|
149
|
-
return byModel;
|
|
150
|
-
return null;
|
|
151
|
-
}
|
|
152
73
|
//# sourceMappingURL=ps.js.map
|
package/dist/commands/ps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/router/config.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/router/config.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG/E"}
|
|
@@ -14,9 +14,9 @@ async function routerConfigCommand(options) {
|
|
|
14
14
|
throw new Error('Router configuration not found. Use "llamacpp router start" to create it.');
|
|
15
15
|
}
|
|
16
16
|
// Check if any options were provided
|
|
17
|
-
const hasOptions = options.port || options.host || options.timeout || options.healthInterval;
|
|
17
|
+
const hasOptions = options.port || options.host || options.timeout || options.healthInterval || options.verbose !== undefined;
|
|
18
18
|
if (!hasOptions) {
|
|
19
|
-
throw new Error('No configuration options provided. Use --port, --host, --timeout,
|
|
19
|
+
throw new Error('No configuration options provided. Use --port, --host, --timeout, --health-interval, or --verbose');
|
|
20
20
|
}
|
|
21
21
|
const isRunning = config.status === 'running';
|
|
22
22
|
// Warn if running and no restart flag
|
|
@@ -43,6 +43,11 @@ async function routerConfigCommand(options) {
|
|
|
43
43
|
changes.push(`Health Check Interval: ${config.healthCheckInterval}ms → ${options.healthInterval}ms`);
|
|
44
44
|
updates.healthCheckInterval = options.healthInterval;
|
|
45
45
|
}
|
|
46
|
+
if (options.verbose !== undefined) {
|
|
47
|
+
const verboseStr = (val) => val ? 'enabled' : 'disabled';
|
|
48
|
+
changes.push(`Verbose Logging: ${verboseStr(config.verbose)} → ${verboseStr(options.verbose)}`);
|
|
49
|
+
updates.verbose = options.verbose;
|
|
50
|
+
}
|
|
46
51
|
// Display changes
|
|
47
52
|
console.log(chalk_1.default.blue('📝 Configuration changes:'));
|
|
48
53
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/router/config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/router/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface RouterLogsOptions {
|
|
2
|
+
follow?: boolean;
|
|
3
|
+
lines?: number;
|
|
4
|
+
stderr?: boolean;
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
clear?: boolean;
|
|
7
|
+
rotate?: boolean;
|
|
8
|
+
clearAll?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function routerLogsCommand(options: RouterLogsOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/router/logs.ts"],"names":[],"mappings":"AAaA,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwOjF"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.routerLogsCommand = routerLogsCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const router_manager_1 = require("../../lib/router-manager");
|
|
45
|
+
const file_utils_1 = require("../../utils/file-utils");
|
|
46
|
+
const log_utils_1 = require("../../utils/log-utils");
|
|
47
|
+
async function routerLogsCommand(options) {
|
|
48
|
+
// Load router config
|
|
49
|
+
const config = await router_manager_1.routerManager.loadConfig();
|
|
50
|
+
if (!config) {
|
|
51
|
+
throw new Error('Router configuration not found. Use "llamacpp router start" to create it.');
|
|
52
|
+
}
|
|
53
|
+
// Determine log file (default to stdout for activity logs, stderr for system logs)
|
|
54
|
+
const logPath = options.stderr ? config.stderrPath : config.stdoutPath;
|
|
55
|
+
const logType = options.stderr ? 'system' : 'activity';
|
|
56
|
+
// Also check for verbose JSON log file if --verbose flag is used
|
|
57
|
+
const verboseLogPath = '/Users/dweaver/.llamacpp/logs/router.log';
|
|
58
|
+
const useVerboseLog = options.verbose && (await (0, file_utils_1.fileExists)(verboseLogPath));
|
|
59
|
+
// Handle --clear-all option (clears both stderr and stdout)
|
|
60
|
+
if (options.clearAll) {
|
|
61
|
+
let totalFreed = 0;
|
|
62
|
+
// Clear stderr
|
|
63
|
+
if (await (0, file_utils_1.fileExists)(config.stderrPath)) {
|
|
64
|
+
totalFreed += await (0, log_utils_1.getFileSize)(config.stderrPath);
|
|
65
|
+
await (0, log_utils_1.clearLogFile)(config.stderrPath);
|
|
66
|
+
}
|
|
67
|
+
// Clear stdout
|
|
68
|
+
if (await (0, file_utils_1.fileExists)(config.stdoutPath)) {
|
|
69
|
+
totalFreed += await (0, log_utils_1.getFileSize)(config.stdoutPath);
|
|
70
|
+
await (0, log_utils_1.clearLogFile)(config.stdoutPath);
|
|
71
|
+
}
|
|
72
|
+
// Clear verbose log file
|
|
73
|
+
if (await (0, file_utils_1.fileExists)(verboseLogPath)) {
|
|
74
|
+
totalFreed += await (0, log_utils_1.getFileSize)(verboseLogPath);
|
|
75
|
+
await (0, log_utils_1.clearLogFile)(verboseLogPath);
|
|
76
|
+
}
|
|
77
|
+
console.log(chalk_1.default.green('✅ Cleared all router logs'));
|
|
78
|
+
console.log(chalk_1.default.dim(` Total freed: ${(0, log_utils_1.formatFileSize)(totalFreed)}`));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Handle --clear option
|
|
82
|
+
if (options.clear) {
|
|
83
|
+
const targetPath = useVerboseLog ? verboseLogPath : logPath;
|
|
84
|
+
if (!(await (0, file_utils_1.fileExists)(targetPath))) {
|
|
85
|
+
console.log(chalk_1.default.yellow(`⚠️ No ${useVerboseLog ? 'verbose log' : logType} found for router`));
|
|
86
|
+
console.log(chalk_1.default.dim(` Log file does not exist: ${targetPath}`));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const sizeBefore = await (0, log_utils_1.getFileSize)(targetPath);
|
|
90
|
+
await (0, log_utils_1.clearLogFile)(targetPath);
|
|
91
|
+
console.log(chalk_1.default.green(`✅ Cleared router ${useVerboseLog ? 'verbose log' : logType}`));
|
|
92
|
+
console.log(chalk_1.default.dim(` Freed: ${(0, log_utils_1.formatFileSize)(sizeBefore)}`));
|
|
93
|
+
console.log(chalk_1.default.dim(` ${targetPath}`));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Handle --rotate option
|
|
97
|
+
if (options.rotate) {
|
|
98
|
+
const targetPath = useVerboseLog ? verboseLogPath : logPath;
|
|
99
|
+
if (!(await (0, file_utils_1.fileExists)(targetPath))) {
|
|
100
|
+
console.log(chalk_1.default.yellow(`⚠️ No ${useVerboseLog ? 'verbose log' : logType} found for router`));
|
|
101
|
+
console.log(chalk_1.default.dim(` Log file does not exist: ${targetPath}`));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const archivedPath = await (0, log_utils_1.rotateLogFile)(targetPath);
|
|
106
|
+
const size = await (0, log_utils_1.getFileSize)(archivedPath);
|
|
107
|
+
console.log(chalk_1.default.green(`✅ Rotated router ${useVerboseLog ? 'verbose log' : logType}`));
|
|
108
|
+
console.log(chalk_1.default.dim(` Archived: ${(0, log_utils_1.formatFileSize)(size)}`));
|
|
109
|
+
console.log(chalk_1.default.dim(` → ${archivedPath}`));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
throw new Error(`Failed to rotate log: ${error.message}`);
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Determine which log to display
|
|
117
|
+
const displayPath = useVerboseLog ? verboseLogPath : logPath;
|
|
118
|
+
const displayType = useVerboseLog ? 'verbose JSON log' : logType;
|
|
119
|
+
// Check if log file exists
|
|
120
|
+
if (!(await (0, file_utils_1.fileExists)(displayPath))) {
|
|
121
|
+
console.log(chalk_1.default.yellow(`⚠️ No ${displayType} found for router`));
|
|
122
|
+
console.log(chalk_1.default.dim(` Log file does not exist: ${displayPath}`));
|
|
123
|
+
if (useVerboseLog) {
|
|
124
|
+
console.log();
|
|
125
|
+
console.log(chalk_1.default.dim(' Verbose logging is disabled. Enable with:'));
|
|
126
|
+
console.log(chalk_1.default.dim(' llamacpp router config --verbose true --restart'));
|
|
127
|
+
}
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk_1.default.blue(`📋 Router logs (${displayType})`));
|
|
131
|
+
console.log(chalk_1.default.dim(` ${displayPath}`));
|
|
132
|
+
// Show log size information
|
|
133
|
+
const currentSize = await (0, log_utils_1.getFileSize)(displayPath);
|
|
134
|
+
console.log(chalk_1.default.dim(` Size: ${(0, log_utils_1.formatFileSize)(currentSize)}`));
|
|
135
|
+
if (!useVerboseLog && config.verbose) {
|
|
136
|
+
console.log(chalk_1.default.dim(` Verbose logging is enabled (use --verbose to view JSON log)`));
|
|
137
|
+
}
|
|
138
|
+
else if (!useVerboseLog && !config.verbose) {
|
|
139
|
+
console.log(chalk_1.default.dim(` Verbose logging is disabled`));
|
|
140
|
+
}
|
|
141
|
+
console.log();
|
|
142
|
+
if (options.follow) {
|
|
143
|
+
// Follow logs in real-time
|
|
144
|
+
if (useVerboseLog) {
|
|
145
|
+
// Pretty-print JSON logs
|
|
146
|
+
const tailProcess = (0, child_process_1.spawn)('tail', ['-f', displayPath]);
|
|
147
|
+
const rl = readline.createInterface({
|
|
148
|
+
input: tailProcess.stdout,
|
|
149
|
+
crlfDelay: Infinity,
|
|
150
|
+
});
|
|
151
|
+
rl.on('line', (line) => {
|
|
152
|
+
try {
|
|
153
|
+
const entry = JSON.parse(line);
|
|
154
|
+
// Format timestamp
|
|
155
|
+
const timestamp = new Date(entry.timestamp).toLocaleTimeString();
|
|
156
|
+
// Color code status
|
|
157
|
+
const statusColor = entry.status === 'success' ? chalk_1.default.green : chalk_1.default.red;
|
|
158
|
+
console.log(chalk_1.default.dim(`[${timestamp}]`), statusColor(entry.statusCode), entry.method, entry.endpoint, '→', chalk_1.default.cyan(entry.model), chalk_1.default.dim(`(${entry.backend || 'N/A'})`), chalk_1.default.yellow(`${entry.durationMs}ms`));
|
|
159
|
+
if (entry.prompt) {
|
|
160
|
+
console.log(chalk_1.default.dim(` Prompt: "${entry.prompt}"`));
|
|
161
|
+
}
|
|
162
|
+
if (entry.error) {
|
|
163
|
+
console.log(chalk_1.default.red(` Error: ${entry.error}`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Not JSON, just print raw line
|
|
168
|
+
console.log(line);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
tailProcess.on('close', () => {
|
|
172
|
+
process.exit(0);
|
|
173
|
+
});
|
|
174
|
+
// Handle Ctrl+C gracefully
|
|
175
|
+
process.on('SIGINT', () => {
|
|
176
|
+
tailProcess.kill();
|
|
177
|
+
process.exit(0);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Standard tail for stderr/stdout
|
|
182
|
+
const tailProcess = (0, child_process_1.spawn)('tail', ['-f', displayPath]);
|
|
183
|
+
tailProcess.stdout.pipe(process.stdout);
|
|
184
|
+
tailProcess.stderr.pipe(process.stderr);
|
|
185
|
+
tailProcess.on('close', () => {
|
|
186
|
+
process.exit(0);
|
|
187
|
+
});
|
|
188
|
+
// Handle Ctrl+C gracefully
|
|
189
|
+
process.on('SIGINT', () => {
|
|
190
|
+
tailProcess.kill();
|
|
191
|
+
process.exit(0);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Show last N lines (default 50)
|
|
197
|
+
const linesToShow = options.lines || 50;
|
|
198
|
+
if (useVerboseLog) {
|
|
199
|
+
// Pretty-print JSON logs
|
|
200
|
+
const lines = fs.readFileSync(displayPath, 'utf-8')
|
|
201
|
+
.split('\n')
|
|
202
|
+
.filter(line => line.trim())
|
|
203
|
+
.slice(-linesToShow);
|
|
204
|
+
for (const line of lines) {
|
|
205
|
+
try {
|
|
206
|
+
const entry = JSON.parse(line);
|
|
207
|
+
// Format timestamp
|
|
208
|
+
const timestamp = new Date(entry.timestamp).toLocaleTimeString();
|
|
209
|
+
// Color code status
|
|
210
|
+
const statusColor = entry.status === 'success' ? chalk_1.default.green : chalk_1.default.red;
|
|
211
|
+
console.log(chalk_1.default.dim(`[${timestamp}]`), statusColor(entry.statusCode), entry.method, entry.endpoint, '→', chalk_1.default.cyan(entry.model), chalk_1.default.dim(`(${entry.backend || 'N/A'})`), chalk_1.default.yellow(`${entry.durationMs}ms`));
|
|
212
|
+
if (entry.prompt) {
|
|
213
|
+
console.log(chalk_1.default.dim(` Prompt: "${entry.prompt}"`));
|
|
214
|
+
}
|
|
215
|
+
if (entry.error) {
|
|
216
|
+
console.log(chalk_1.default.red(` Error: ${entry.error}`));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Not JSON, just print raw line
|
|
221
|
+
console.log(line);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// Standard tail for stderr/stdout
|
|
227
|
+
const { execSync } = require('child_process');
|
|
228
|
+
try {
|
|
229
|
+
const output = execSync(`tail -n ${linesToShow} "${displayPath}"`, { encoding: 'utf-8' });
|
|
230
|
+
process.stdout.write(output);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
throw new Error(`Failed to read log file: ${error.message}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/router/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAMA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBhD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.tuiCommand = tuiCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const blessed_1 = __importDefault(require("blessed"));
|
|
9
|
+
const state_manager_js_1 = require("../lib/state-manager.js");
|
|
10
|
+
const status_checker_js_1 = require("../lib/status-checker.js");
|
|
11
|
+
const RootNavigator_js_1 = require("../tui/RootNavigator.js");
|
|
12
|
+
async function tuiCommand() {
|
|
13
|
+
const servers = await state_manager_js_1.stateManager.getAllServers();
|
|
14
|
+
if (servers.length === 0) {
|
|
15
|
+
console.log(chalk_1.default.yellow('No servers configured.'));
|
|
16
|
+
console.log(chalk_1.default.dim('\nCreate a server: llamacpp server create <model-filename>'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const serversWithStatus = await status_checker_js_1.statusChecker.updateAllServerStatuses();
|
|
20
|
+
const screen = blessed_1.default.screen({
|
|
21
|
+
smartCSR: true,
|
|
22
|
+
title: 'llama.cpp Server Monitor',
|
|
23
|
+
fullUnicode: true,
|
|
24
|
+
});
|
|
25
|
+
await (0, RootNavigator_js_1.createRootNavigator)(screen, serversWithStatus);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":";;;;;AAMA,gCAkBC;AAxBD,kDAA0B;AAC1B,sDAA8B;AAC9B,8DAAuD;AACvD,gEAAyD;AACzD,8DAA8D;AAEvD,KAAK,UAAU,UAAU;IAC9B,MAAM,OAAO,GAAG,MAAM,+BAAY,CAAC,aAAa,EAAE,CAAC;IAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,iCAAa,CAAC,uBAAuB,EAAE,CAAC;IAExE,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,CAAC;QAC5B,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,IAAA,sCAAmB,EAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"AAyDA;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CActC"}
|