@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.
Files changed (93) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +171 -42
  3. package/dist/cli.js +75 -10
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/completion.d.ts +9 -0
  6. package/dist/commands/completion.d.ts.map +1 -0
  7. package/dist/commands/completion.js +83 -0
  8. package/dist/commands/completion.js.map +1 -0
  9. package/dist/commands/monitor.js +1 -1
  10. package/dist/commands/monitor.js.map +1 -1
  11. package/dist/commands/ps.d.ts +1 -3
  12. package/dist/commands/ps.d.ts.map +1 -1
  13. package/dist/commands/ps.js +36 -115
  14. package/dist/commands/ps.js.map +1 -1
  15. package/dist/commands/router/config.d.ts +1 -0
  16. package/dist/commands/router/config.d.ts.map +1 -1
  17. package/dist/commands/router/config.js +7 -2
  18. package/dist/commands/router/config.js.map +1 -1
  19. package/dist/commands/router/logs.d.ts +12 -0
  20. package/dist/commands/router/logs.d.ts.map +1 -0
  21. package/dist/commands/router/logs.js +238 -0
  22. package/dist/commands/router/logs.js.map +1 -0
  23. package/dist/commands/tui.d.ts +2 -0
  24. package/dist/commands/tui.d.ts.map +1 -0
  25. package/dist/commands/tui.js +27 -0
  26. package/dist/commands/tui.js.map +1 -0
  27. package/dist/lib/completion.d.ts +5 -0
  28. package/dist/lib/completion.d.ts.map +1 -0
  29. package/dist/lib/completion.js +195 -0
  30. package/dist/lib/completion.js.map +1 -0
  31. package/dist/lib/model-downloader.d.ts +5 -1
  32. package/dist/lib/model-downloader.d.ts.map +1 -1
  33. package/dist/lib/model-downloader.js +53 -20
  34. package/dist/lib/model-downloader.js.map +1 -1
  35. package/dist/lib/router-logger.d.ts +61 -0
  36. package/dist/lib/router-logger.d.ts.map +1 -0
  37. package/dist/lib/router-logger.js +200 -0
  38. package/dist/lib/router-logger.js.map +1 -0
  39. package/dist/lib/router-manager.d.ts.map +1 -1
  40. package/dist/lib/router-manager.js +1 -0
  41. package/dist/lib/router-manager.js.map +1 -1
  42. package/dist/lib/router-server.d.ts +9 -0
  43. package/dist/lib/router-server.d.ts.map +1 -1
  44. package/dist/lib/router-server.js +169 -57
  45. package/dist/lib/router-server.js.map +1 -1
  46. package/dist/tui/ConfigApp.d.ts +7 -0
  47. package/dist/tui/ConfigApp.d.ts.map +1 -0
  48. package/dist/tui/ConfigApp.js +1002 -0
  49. package/dist/tui/ConfigApp.js.map +1 -0
  50. package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
  51. package/dist/tui/HistoricalMonitorApp.js +85 -49
  52. package/dist/tui/HistoricalMonitorApp.js.map +1 -1
  53. package/dist/tui/ModelsApp.d.ts +7 -0
  54. package/dist/tui/ModelsApp.d.ts.map +1 -0
  55. package/dist/tui/ModelsApp.js +362 -0
  56. package/dist/tui/ModelsApp.js.map +1 -0
  57. package/dist/tui/MultiServerMonitorApp.d.ts +6 -1
  58. package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
  59. package/dist/tui/MultiServerMonitorApp.js +1038 -122
  60. package/dist/tui/MultiServerMonitorApp.js.map +1 -1
  61. package/dist/tui/RootNavigator.d.ts +7 -0
  62. package/dist/tui/RootNavigator.d.ts.map +1 -0
  63. package/dist/tui/RootNavigator.js +55 -0
  64. package/dist/tui/RootNavigator.js.map +1 -0
  65. package/dist/tui/SearchApp.d.ts +6 -0
  66. package/dist/tui/SearchApp.d.ts.map +1 -0
  67. package/dist/tui/SearchApp.js +451 -0
  68. package/dist/tui/SearchApp.js.map +1 -0
  69. package/dist/tui/SplashScreen.d.ts +16 -0
  70. package/dist/tui/SplashScreen.d.ts.map +1 -0
  71. package/dist/tui/SplashScreen.js +129 -0
  72. package/dist/tui/SplashScreen.js.map +1 -0
  73. package/dist/types/router-config.d.ts +1 -0
  74. package/dist/types/router-config.d.ts.map +1 -1
  75. package/package.json +1 -1
  76. package/src/cli.ts +41 -10
  77. package/src/commands/monitor.ts +1 -1
  78. package/src/commands/ps.ts +44 -133
  79. package/src/commands/router/config.ts +9 -2
  80. package/src/commands/router/logs.ts +256 -0
  81. package/src/commands/tui.ts +25 -0
  82. package/src/lib/model-downloader.ts +57 -20
  83. package/src/lib/router-logger.ts +201 -0
  84. package/src/lib/router-manager.ts +1 -0
  85. package/src/lib/router-server.ts +193 -62
  86. package/src/tui/ConfigApp.ts +1085 -0
  87. package/src/tui/HistoricalMonitorApp.ts +88 -49
  88. package/src/tui/ModelsApp.ts +368 -0
  89. package/src/tui/MultiServerMonitorApp.ts +1163 -122
  90. package/src/tui/RootNavigator.ts +74 -0
  91. package/src/tui/SearchApp.ts +511 -0
  92. package/src/tui/SplashScreen.ts +149 -0
  93. package/src/types/router-config.ts +1 -0
@@ -0,0 +1,362 @@
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.createModelsUI = createModelsUI;
40
+ const blessed_1 = __importDefault(require("blessed"));
41
+ const model_scanner_js_1 = require("../lib/model-scanner.js");
42
+ const state_manager_js_1 = require("../lib/state-manager.js");
43
+ const launchctl_manager_js_1 = require("../lib/launchctl-manager.js");
44
+ const format_utils_js_1 = require("../utils/format-utils.js");
45
+ const fs = __importStar(require("fs/promises"));
46
+ const SearchApp_js_1 = require("./SearchApp.js");
47
+ /**
48
+ * Models management TUI
49
+ * Display installed models and allow deletion
50
+ */
51
+ async function createModelsUI(screen, onBack, onSearch) {
52
+ let models = [];
53
+ let selectedIndex = 0;
54
+ let isLoading = false;
55
+ // Create content box
56
+ const contentBox = blessed_1.default.box({
57
+ top: 0,
58
+ left: 0,
59
+ width: '100%',
60
+ height: '100%',
61
+ tags: true,
62
+ scrollable: true,
63
+ alwaysScroll: true,
64
+ keys: true,
65
+ vi: true,
66
+ mouse: true,
67
+ scrollbar: {
68
+ ch: '█',
69
+ style: {
70
+ fg: 'blue',
71
+ },
72
+ },
73
+ });
74
+ screen.append(contentBox);
75
+ // Render models view
76
+ async function render() {
77
+ const termWidth = screen.width || 80;
78
+ const divider = '─'.repeat(termWidth - 2);
79
+ let content = '';
80
+ // Header
81
+ content += '{bold}{blue-fg}═══ Models Management{/blue-fg}{/bold}\n\n';
82
+ if (isLoading) {
83
+ content += '{cyan-fg}⏳ Loading models...{/cyan-fg}\n';
84
+ contentBox.setContent(content);
85
+ screen.render();
86
+ return;
87
+ }
88
+ if (models.length === 0) {
89
+ content += '{yellow-fg}No models found{/yellow-fg}\n\n';
90
+ content += '{dim}Models directory: ' + await state_manager_js_1.stateManager.getModelsDirectory() + '{/dim}\n';
91
+ content += '{dim}Download models: Press [S] to search HuggingFace{/dim}\n';
92
+ content += '\n' + divider + '\n';
93
+ content += `{gray-fg}[S]earch [ESC] Back [Q]uit{/gray-fg}`;
94
+ contentBox.setContent(content);
95
+ screen.render();
96
+ return;
97
+ }
98
+ // System info
99
+ const totalSize = models.reduce((sum, m) => sum + m.size, 0);
100
+ content += `{bold}Total: ${models.length} models{/bold} - ${(0, format_utils_js_1.formatBytes)(totalSize)}\n`;
101
+ content += divider + '\n';
102
+ // Get all servers to check dependencies
103
+ const allServers = await state_manager_js_1.stateManager.getAllServers();
104
+ // Table header
105
+ content += '{bold} │ Model File │ Size │ Modified │ Servers{/bold}\n';
106
+ content += divider + '\n';
107
+ // Model rows
108
+ for (let i = 0; i < models.length; i++) {
109
+ const model = models[i];
110
+ const isSelected = i === selectedIndex;
111
+ // Count servers using this model
112
+ const serversUsingModel = allServers.filter(s => s.modelPath === model.path);
113
+ const serverCount = serversUsingModel.length;
114
+ // Selection indicator
115
+ const indicator = isSelected ? '►' : ' ';
116
+ // Model filename (truncate if too long)
117
+ const maxFilenameLen = 46;
118
+ let filename = model.filename;
119
+ if (filename.length > maxFilenameLen) {
120
+ filename = filename.substring(0, maxFilenameLen - 3) + '...';
121
+ }
122
+ filename = filename.padEnd(maxFilenameLen);
123
+ // Size
124
+ const size = model.sizeFormatted.padStart(11);
125
+ // Modified date
126
+ const modified = (0, format_utils_js_1.formatDateShort)(model.modified).padStart(11);
127
+ // Servers count with color coding
128
+ let serversText = '';
129
+ let serversTextPlain = '';
130
+ if (serverCount === 0) {
131
+ serversText = '{green-fg}0 servers{/green-fg}';
132
+ serversTextPlain = '0 servers';
133
+ }
134
+ else {
135
+ const runningCount = serversUsingModel.filter(s => s.status === 'running').length;
136
+ if (runningCount > 0) {
137
+ serversText = `{yellow-fg}${serverCount} (${runningCount} running){/yellow-fg}`;
138
+ serversTextPlain = `${serverCount} (${runningCount} running)`;
139
+ }
140
+ else {
141
+ serversText = `{gray-fg}${serverCount} stopped{/gray-fg}`;
142
+ serversTextPlain = `${serverCount} stopped`;
143
+ }
144
+ }
145
+ // Build row content
146
+ let rowContent = '';
147
+ if (isSelected) {
148
+ // Selected row: cyan background with bright white text
149
+ rowContent = `{cyan-bg}{15-fg}${indicator} │ ${filename} │ ${size} │ ${modified} │ ${serversTextPlain}{/15-fg}{/cyan-bg}`;
150
+ }
151
+ else {
152
+ // Normal row: with colored server text
153
+ rowContent = `${indicator} │ ${filename} │ ${size} │ ${modified} │ ${serversText}`;
154
+ }
155
+ content += rowContent + '\n';
156
+ }
157
+ // Footer
158
+ content += '\n' + divider + '\n';
159
+ content += '{gray-fg}[↑/↓] Navigate [D]elete [S]earch [R]efresh [ESC] Back [Q]uit{/gray-fg}';
160
+ contentBox.setContent(content);
161
+ screen.render();
162
+ }
163
+ // Load models
164
+ async function loadModels() {
165
+ isLoading = true;
166
+ await render();
167
+ models = await model_scanner_js_1.modelScanner.scanModels();
168
+ selectedIndex = Math.min(selectedIndex, Math.max(0, models.length - 1));
169
+ isLoading = false;
170
+ await render();
171
+ }
172
+ // Delete selected model
173
+ async function deleteModel() {
174
+ if (models.length === 0)
175
+ return;
176
+ const model = models[selectedIndex];
177
+ const allServers = await state_manager_js_1.stateManager.getAllServers();
178
+ const serversUsingModel = allServers.filter(s => s.modelPath === model.path);
179
+ // Show confirmation dialog
180
+ const confirmBox = blessed_1.default.message({
181
+ parent: screen,
182
+ top: 'center',
183
+ left: 'center',
184
+ width: '60%',
185
+ height: 'shrink',
186
+ border: { type: 'line' },
187
+ style: {
188
+ border: { fg: 'red' },
189
+ fg: 'white',
190
+ },
191
+ tags: true,
192
+ });
193
+ let confirmText = `{bold}Delete model: ${model.filename}?{/bold}\n\n`;
194
+ confirmText += `Size: ${model.sizeFormatted}\n\n`;
195
+ if (serversUsingModel.length > 0) {
196
+ confirmText += `{yellow-fg}⚠️ This model has ${serversUsingModel.length} server(s) configured:{/yellow-fg}\n`;
197
+ for (const server of serversUsingModel) {
198
+ const statusColor = server.status === 'running' ? 'green-fg' : 'gray-fg';
199
+ confirmText += ` - ${server.id} ({${statusColor}}${server.status}{/${statusColor}})\n`;
200
+ }
201
+ confirmText += `\n{yellow-fg}These servers will be deleted before removing the model.{/yellow-fg}\n\n`;
202
+ }
203
+ confirmText += `Type 'yes' to confirm:\n\n\n\n`; // Extra lines for input box space
204
+ // Create input box for confirmation
205
+ const inputBox = blessed_1.default.textbox({
206
+ parent: confirmBox,
207
+ bottom: 1,
208
+ left: 2,
209
+ right: 2,
210
+ height: 3,
211
+ inputOnFocus: true,
212
+ border: { type: 'line' },
213
+ style: {
214
+ border: { fg: 'cyan' },
215
+ focus: { border: { fg: 'green' } },
216
+ },
217
+ });
218
+ confirmBox.setContent(confirmText);
219
+ screen.append(confirmBox);
220
+ confirmBox.focus();
221
+ inputBox.focus();
222
+ screen.render();
223
+ inputBox.on('submit', async (value) => {
224
+ screen.remove(confirmBox);
225
+ if (value.toLowerCase() !== 'yes') {
226
+ await render();
227
+ return;
228
+ }
229
+ // Show deleting message
230
+ isLoading = true;
231
+ contentBox.setContent('{cyan-fg}⏳ Deleting model...{/cyan-fg}');
232
+ screen.render();
233
+ try {
234
+ // Delete all servers using this model
235
+ for (const server of serversUsingModel) {
236
+ // Unload service (stops and removes from launchd)
237
+ try {
238
+ await launchctl_manager_js_1.launchctlManager.unloadService(server.plistPath);
239
+ if (server.status === 'running') {
240
+ await launchctl_manager_js_1.launchctlManager.waitForServiceStop(server.label, 5000);
241
+ }
242
+ }
243
+ catch (error) {
244
+ // Continue even if unload fails
245
+ }
246
+ // Delete plist
247
+ await launchctl_manager_js_1.launchctlManager.deletePlist(server.plistPath);
248
+ // Delete server config
249
+ await state_manager_js_1.stateManager.deleteServerConfig(server.id);
250
+ }
251
+ // Delete model file
252
+ await fs.unlink(model.path);
253
+ // Reload models
254
+ await loadModels();
255
+ }
256
+ catch (error) {
257
+ // Show error
258
+ const errorBox = blessed_1.default.message({
259
+ parent: screen,
260
+ top: 'center',
261
+ left: 'center',
262
+ width: '60%',
263
+ height: 'shrink',
264
+ border: { type: 'line' },
265
+ style: {
266
+ border: { fg: 'red' },
267
+ fg: 'red',
268
+ },
269
+ tags: true,
270
+ });
271
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
272
+ errorBox.display(`{bold}Delete failed{/bold}\n\n${errorMsg}\n\nPress any key to continue`, () => {
273
+ screen.remove(errorBox);
274
+ isLoading = false;
275
+ render();
276
+ });
277
+ }
278
+ });
279
+ inputBox.on('cancel', () => {
280
+ screen.remove(confirmBox);
281
+ render();
282
+ });
283
+ inputBox.key(['escape'], () => {
284
+ screen.remove(confirmBox);
285
+ render();
286
+ });
287
+ }
288
+ // Store key handler references for cleanup
289
+ const keyHandlers = {
290
+ up: () => {
291
+ if (models.length === 0)
292
+ return;
293
+ selectedIndex = Math.max(0, selectedIndex - 1);
294
+ render();
295
+ },
296
+ down: () => {
297
+ if (models.length === 0)
298
+ return;
299
+ selectedIndex = Math.min(models.length - 1, selectedIndex + 1);
300
+ render();
301
+ },
302
+ delete: () => {
303
+ deleteModel();
304
+ },
305
+ search: async () => {
306
+ // Cleanup current handlers before switching views
307
+ cleanup();
308
+ // Open search view
309
+ await (0, SearchApp_js_1.createSearchUI)(screen, async () => {
310
+ // onBack callback - return to models view
311
+ // Re-register handlers
312
+ registerHandlers();
313
+ screen.append(contentBox);
314
+ await loadModels();
315
+ });
316
+ },
317
+ refresh: () => {
318
+ loadModels();
319
+ },
320
+ escape: async () => {
321
+ cleanup();
322
+ await onBack();
323
+ },
324
+ quit: () => {
325
+ screen.destroy();
326
+ process.exit(0);
327
+ },
328
+ };
329
+ // Cleanup function to unregister all handlers
330
+ function cleanup() {
331
+ screen.unkey('up', keyHandlers.up);
332
+ screen.unkey('k', keyHandlers.up);
333
+ screen.unkey('down', keyHandlers.down);
334
+ screen.unkey('j', keyHandlers.down);
335
+ screen.unkey('d', keyHandlers.delete);
336
+ screen.unkey('D', keyHandlers.delete);
337
+ screen.unkey('s', keyHandlers.search);
338
+ screen.unkey('S', keyHandlers.search);
339
+ screen.unkey('r', keyHandlers.refresh);
340
+ screen.unkey('R', keyHandlers.refresh);
341
+ screen.unkey('escape', keyHandlers.escape);
342
+ screen.unkey('q', keyHandlers.quit);
343
+ screen.unkey('Q', keyHandlers.quit);
344
+ screen.unkey('C-c', keyHandlers.quit);
345
+ screen.remove(contentBox);
346
+ }
347
+ // Register key handlers
348
+ function registerHandlers() {
349
+ screen.key(['up', 'k'], keyHandlers.up);
350
+ screen.key(['down', 'j'], keyHandlers.down);
351
+ screen.key(['d', 'D'], keyHandlers.delete);
352
+ screen.key(['s', 'S'], keyHandlers.search);
353
+ screen.key(['r', 'R'], keyHandlers.refresh);
354
+ screen.key(['escape'], keyHandlers.escape);
355
+ screen.key(['q', 'Q', 'C-c'], keyHandlers.quit);
356
+ }
357
+ // Register initial handlers
358
+ registerHandlers();
359
+ // Initial load
360
+ await loadModels();
361
+ }
362
+ //# sourceMappingURL=ModelsApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelsApp.js","sourceRoot":"","sources":["../../src/tui/ModelsApp.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import blessed from 'blessed';
2
2
  import { ServerConfig } from '../types/server-config.js';
3
- export declare function createMultiServerMonitorUI(screen: blessed.Widgets.Screen, servers: ServerConfig[], _fromPs?: boolean, directJumpIndex?: number): Promise<void>;
3
+ export interface MonitorUIControls {
4
+ pause: () => void;
5
+ resume: () => void;
6
+ getServers: () => ServerConfig[];
7
+ }
8
+ export declare function createMultiServerMonitorUI(screen: blessed.Widgets.Screen, servers: ServerConfig[], skipConnectingMessage?: boolean, directJumpIndex?: number, onModels?: (controls: MonitorUIControls) => void, onFirstRender?: () => void): Promise<MonitorUIControls>;
4
9
  //# sourceMappingURL=MultiServerMonitorApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiServerMonitorApp.d.ts","sourceRoot":"","sources":["../../src/tui/MultiServerMonitorApp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAezD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAC9B,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,GAAE,OAAe,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAkwBf"}
1
+ {"version":3,"file":"MultiServerMonitorApp.d.ts","sourceRoot":"","sources":["../../src/tui/MultiServerMonitorApp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAqB,MAAM,2BAA2B,CAAC;AA0B5E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,YAAY,EAAE,CAAC;CAClC;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAC9B,OAAO,EAAE,YAAY,EAAE,EACvB,qBAAqB,GAAE,OAAe,EACtC,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,EAChD,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,iBAAiB,CAAC,CA8vD5B"}