@appkit/llamacpp-cli 1.11.0 → 1.12.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 (105) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +356 -3
  3. package/dist/cli.js +99 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/admin/config.d.ts +10 -0
  6. package/dist/commands/admin/config.d.ts.map +1 -0
  7. package/dist/commands/admin/config.js +100 -0
  8. package/dist/commands/admin/config.js.map +1 -0
  9. package/dist/commands/admin/logs.d.ts +10 -0
  10. package/dist/commands/admin/logs.d.ts.map +1 -0
  11. package/dist/commands/admin/logs.js +114 -0
  12. package/dist/commands/admin/logs.js.map +1 -0
  13. package/dist/commands/admin/restart.d.ts +2 -0
  14. package/dist/commands/admin/restart.d.ts.map +1 -0
  15. package/dist/commands/admin/restart.js +29 -0
  16. package/dist/commands/admin/restart.js.map +1 -0
  17. package/dist/commands/admin/start.d.ts +2 -0
  18. package/dist/commands/admin/start.d.ts.map +1 -0
  19. package/dist/commands/admin/start.js +30 -0
  20. package/dist/commands/admin/start.js.map +1 -0
  21. package/dist/commands/admin/status.d.ts +2 -0
  22. package/dist/commands/admin/status.d.ts.map +1 -0
  23. package/dist/commands/admin/status.js +82 -0
  24. package/dist/commands/admin/status.js.map +1 -0
  25. package/dist/commands/admin/stop.d.ts +2 -0
  26. package/dist/commands/admin/stop.d.ts.map +1 -0
  27. package/dist/commands/admin/stop.js +21 -0
  28. package/dist/commands/admin/stop.js.map +1 -0
  29. package/dist/commands/logs.d.ts +1 -0
  30. package/dist/commands/logs.d.ts.map +1 -1
  31. package/dist/commands/logs.js +22 -0
  32. package/dist/commands/logs.js.map +1 -1
  33. package/dist/lib/admin-manager.d.ts +111 -0
  34. package/dist/lib/admin-manager.d.ts.map +1 -0
  35. package/dist/lib/admin-manager.js +413 -0
  36. package/dist/lib/admin-manager.js.map +1 -0
  37. package/dist/lib/admin-server.d.ts +148 -0
  38. package/dist/lib/admin-server.d.ts.map +1 -0
  39. package/dist/lib/admin-server.js +1161 -0
  40. package/dist/lib/admin-server.js.map +1 -0
  41. package/dist/lib/download-job-manager.d.ts +64 -0
  42. package/dist/lib/download-job-manager.d.ts.map +1 -0
  43. package/dist/lib/download-job-manager.js +164 -0
  44. package/dist/lib/download-job-manager.js.map +1 -0
  45. package/dist/tui/MultiServerMonitorApp.js +1 -1
  46. package/dist/types/admin-config.d.ts +19 -0
  47. package/dist/types/admin-config.d.ts.map +1 -0
  48. package/dist/types/admin-config.js +3 -0
  49. package/dist/types/admin-config.js.map +1 -0
  50. package/dist/utils/log-parser.d.ts +9 -0
  51. package/dist/utils/log-parser.d.ts.map +1 -1
  52. package/dist/utils/log-parser.js +11 -0
  53. package/dist/utils/log-parser.js.map +1 -1
  54. package/docs/images/web-ui-servers.png +0 -0
  55. package/package.json +1 -1
  56. package/src/cli.ts +100 -0
  57. package/src/commands/admin/config.ts +121 -0
  58. package/src/commands/admin/logs.ts +91 -0
  59. package/src/commands/admin/restart.ts +26 -0
  60. package/src/commands/admin/start.ts +27 -0
  61. package/src/commands/admin/status.ts +84 -0
  62. package/src/commands/admin/stop.ts +16 -0
  63. package/src/commands/logs.ts +24 -0
  64. package/src/lib/admin-manager.ts +435 -0
  65. package/src/lib/admin-server.ts +1243 -0
  66. package/src/lib/download-job-manager.ts +213 -0
  67. package/src/tui/MultiServerMonitorApp.ts +1 -1
  68. package/src/types/admin-config.ts +25 -0
  69. package/src/utils/log-parser.ts +13 -0
  70. package/web/README.md +429 -0
  71. package/web/eslint.config.js +23 -0
  72. package/web/index.html +13 -0
  73. package/web/llamacpp-web-dist.tar.gz +0 -0
  74. package/web/package-lock.json +4017 -0
  75. package/web/package.json +38 -0
  76. package/web/postcss.config.js +6 -0
  77. package/web/public/vite.svg +1 -0
  78. package/web/src/App.css +42 -0
  79. package/web/src/App.tsx +86 -0
  80. package/web/src/assets/react.svg +1 -0
  81. package/web/src/components/ApiKeyPrompt.tsx +71 -0
  82. package/web/src/components/CreateServerModal.tsx +372 -0
  83. package/web/src/components/DownloadProgress.tsx +123 -0
  84. package/web/src/components/Nav.tsx +89 -0
  85. package/web/src/components/RouterConfigModal.tsx +240 -0
  86. package/web/src/components/SearchModal.tsx +306 -0
  87. package/web/src/components/ServerConfigModal.tsx +291 -0
  88. package/web/src/hooks/useApi.ts +259 -0
  89. package/web/src/index.css +42 -0
  90. package/web/src/lib/api.ts +226 -0
  91. package/web/src/main.tsx +10 -0
  92. package/web/src/pages/Dashboard.tsx +103 -0
  93. package/web/src/pages/Models.tsx +258 -0
  94. package/web/src/pages/Router.tsx +270 -0
  95. package/web/src/pages/RouterLogs.tsx +201 -0
  96. package/web/src/pages/ServerLogs.tsx +553 -0
  97. package/web/src/pages/Servers.tsx +358 -0
  98. package/web/src/types/api.ts +140 -0
  99. package/web/tailwind.config.js +31 -0
  100. package/web/tsconfig.app.json +28 -0
  101. package/web/tsconfig.json +7 -0
  102. package/web/tsconfig.node.json +26 -0
  103. package/web/vite.config.ts +25 -0
  104. package/MONITORING-ACCURACY-FIX.md +0 -199
  105. package/PER-PROCESS-METRICS.md +0 -190
@@ -0,0 +1,111 @@
1
+ import { AdminConfig } from '../types/admin-config';
2
+ export interface AdminServiceStatus {
3
+ isRunning: boolean;
4
+ pid: number | null;
5
+ exitCode: number | null;
6
+ lastExitReason?: string;
7
+ }
8
+ export declare class AdminManager {
9
+ private configDir;
10
+ private logsDir;
11
+ private configPath;
12
+ private launchAgentsDir;
13
+ constructor();
14
+ /**
15
+ * Initialize admin directories
16
+ */
17
+ initialize(): Promise<void>;
18
+ /**
19
+ * Generate a secure random API key
20
+ */
21
+ generateApiKey(): string;
22
+ /**
23
+ * Get default admin configuration
24
+ */
25
+ getDefaultConfig(): AdminConfig;
26
+ /**
27
+ * Load admin configuration
28
+ */
29
+ loadConfig(): Promise<AdminConfig | null>;
30
+ /**
31
+ * Save admin configuration
32
+ */
33
+ saveConfig(config: AdminConfig): Promise<void>;
34
+ /**
35
+ * Update admin configuration with partial changes
36
+ */
37
+ updateConfig(updates: Partial<AdminConfig>): Promise<void>;
38
+ /**
39
+ * Delete admin configuration
40
+ */
41
+ deleteConfig(): Promise<void>;
42
+ /**
43
+ * Regenerate API key
44
+ */
45
+ regenerateApiKey(): Promise<string>;
46
+ /**
47
+ * Generate plist XML content for the admin service
48
+ */
49
+ generatePlist(config: AdminConfig): string;
50
+ /**
51
+ * Create and write plist file
52
+ */
53
+ createPlist(config: AdminConfig): Promise<void>;
54
+ /**
55
+ * Delete plist file
56
+ */
57
+ deletePlist(config: AdminConfig): Promise<void>;
58
+ /**
59
+ * Load service (register with launchctl)
60
+ */
61
+ loadService(plistPath: string): Promise<void>;
62
+ /**
63
+ * Unload service (unregister from launchctl)
64
+ */
65
+ unloadService(plistPath: string): Promise<void>;
66
+ /**
67
+ * Start service
68
+ */
69
+ startService(label: string): Promise<void>;
70
+ /**
71
+ * Stop service
72
+ */
73
+ stopService(label: string): Promise<void>;
74
+ /**
75
+ * Get service status from launchctl
76
+ */
77
+ getServiceStatus(label: string): Promise<AdminServiceStatus>;
78
+ /**
79
+ * Interpret exit code to human-readable reason
80
+ */
81
+ private interpretExitCode;
82
+ /**
83
+ * Wait for service to start (with timeout)
84
+ */
85
+ waitForServiceStart(label: string, timeoutMs?: number): Promise<boolean>;
86
+ /**
87
+ * Wait for service to stop (with timeout)
88
+ */
89
+ waitForServiceStop(label: string, timeoutMs?: number): Promise<boolean>;
90
+ /**
91
+ * Start admin service
92
+ */
93
+ start(): Promise<void>;
94
+ /**
95
+ * Stop admin service
96
+ */
97
+ stop(): Promise<void>;
98
+ /**
99
+ * Restart admin service
100
+ */
101
+ restart(): Promise<void>;
102
+ /**
103
+ * Get admin status
104
+ */
105
+ getStatus(): Promise<{
106
+ config: AdminConfig;
107
+ status: AdminServiceStatus;
108
+ } | null>;
109
+ }
110
+ export declare const adminManager: AdminManager;
111
+ //# sourceMappingURL=admin-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-manager.d.ts","sourceRoot":"","sources":["../../src/lib/admin-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAapD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;;IAShC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,gBAAgB,IAAI,WAAW;IAiB/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAShE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUzC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAkE1C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyClE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5E;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,GAAG,IAAI,CAAC;CASvF;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,413 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.adminManager = exports.AdminManager = void 0;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs/promises"));
39
+ const crypto = __importStar(require("crypto"));
40
+ const process_utils_1 = require("../utils/process-utils");
41
+ const file_utils_1 = require("../utils/file-utils");
42
+ class AdminManager {
43
+ constructor() {
44
+ this.configDir = (0, file_utils_1.getConfigDir)();
45
+ this.logsDir = (0, file_utils_1.getLogsDir)();
46
+ this.configPath = path.join(this.configDir, 'admin.json');
47
+ this.launchAgentsDir = (0, file_utils_1.getLaunchAgentsDir)();
48
+ }
49
+ /**
50
+ * Initialize admin directories
51
+ */
52
+ async initialize() {
53
+ await (0, file_utils_1.ensureDir)(this.configDir);
54
+ await (0, file_utils_1.ensureDir)(this.logsDir);
55
+ await (0, file_utils_1.ensureDir)(this.launchAgentsDir);
56
+ }
57
+ /**
58
+ * Generate a secure random API key
59
+ */
60
+ generateApiKey() {
61
+ return crypto.randomBytes(32).toString('hex');
62
+ }
63
+ /**
64
+ * Get default admin configuration
65
+ */
66
+ getDefaultConfig() {
67
+ return {
68
+ id: 'admin',
69
+ port: 9200,
70
+ host: '127.0.0.1',
71
+ apiKey: this.generateApiKey(),
72
+ label: 'com.llama.admin',
73
+ plistPath: path.join(this.launchAgentsDir, 'com.llama.admin.plist'),
74
+ stdoutPath: path.join(this.logsDir, 'admin.stdout'),
75
+ stderrPath: path.join(this.logsDir, 'admin.stderr'),
76
+ requestTimeout: 30000,
77
+ verbose: false,
78
+ status: 'stopped',
79
+ createdAt: new Date().toISOString(),
80
+ };
81
+ }
82
+ /**
83
+ * Load admin configuration
84
+ */
85
+ async loadConfig() {
86
+ if (!(await (0, file_utils_1.fileExists)(this.configPath))) {
87
+ return null;
88
+ }
89
+ return await (0, file_utils_1.readJson)(this.configPath);
90
+ }
91
+ /**
92
+ * Save admin configuration
93
+ */
94
+ async saveConfig(config) {
95
+ await (0, file_utils_1.writeJsonAtomic)(this.configPath, config);
96
+ }
97
+ /**
98
+ * Update admin configuration with partial changes
99
+ */
100
+ async updateConfig(updates) {
101
+ const existingConfig = await this.loadConfig();
102
+ if (!existingConfig) {
103
+ throw new Error('Admin configuration not found');
104
+ }
105
+ const updatedConfig = { ...existingConfig, ...updates };
106
+ await this.saveConfig(updatedConfig);
107
+ }
108
+ /**
109
+ * Delete admin configuration
110
+ */
111
+ async deleteConfig() {
112
+ if (await (0, file_utils_1.fileExists)(this.configPath)) {
113
+ await fs.unlink(this.configPath);
114
+ }
115
+ }
116
+ /**
117
+ * Regenerate API key
118
+ */
119
+ async regenerateApiKey() {
120
+ const config = await this.loadConfig();
121
+ if (!config) {
122
+ throw new Error('Admin configuration not found');
123
+ }
124
+ const newApiKey = this.generateApiKey();
125
+ await this.updateConfig({ apiKey: newApiKey });
126
+ return newApiKey;
127
+ }
128
+ /**
129
+ * Generate plist XML content for the admin service
130
+ */
131
+ generatePlist(config) {
132
+ // Find the compiled admin-server.js file
133
+ // In dev mode (tsx), __dirname is src/lib/
134
+ // In production, __dirname is dist/lib/
135
+ // Always use the compiled dist version for launchctl
136
+ let adminServerPath;
137
+ if (__dirname.includes('/src/')) {
138
+ // Dev mode - point to dist/lib/admin-server.js
139
+ const projectRoot = path.resolve(__dirname, '../..');
140
+ adminServerPath = path.join(projectRoot, 'dist/lib/admin-server.js');
141
+ }
142
+ else {
143
+ // Production mode - already in dist/lib/
144
+ adminServerPath = path.join(__dirname, 'admin-server.js');
145
+ }
146
+ // Use the current Node.js executable path (resolves symlinks)
147
+ const nodePath = process.execPath;
148
+ const args = [
149
+ nodePath,
150
+ adminServerPath,
151
+ '--config', this.configPath,
152
+ ];
153
+ const argsXml = args.map(arg => ` <string>${arg}</string>`).join('\n');
154
+ return `<?xml version="1.0" encoding="UTF-8"?>
155
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
156
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
157
+ <plist version="1.0">
158
+ <dict>
159
+ <key>Label</key>
160
+ <string>${config.label}</string>
161
+
162
+ <key>ProgramArguments</key>
163
+ <array>
164
+ ${argsXml}
165
+ </array>
166
+
167
+ <key>RunAtLoad</key>
168
+ <false/>
169
+
170
+ <key>KeepAlive</key>
171
+ <dict>
172
+ <key>Crashed</key>
173
+ <true/>
174
+ <key>SuccessfulExit</key>
175
+ <false/>
176
+ </dict>
177
+
178
+ <key>StandardOutPath</key>
179
+ <string>${config.stdoutPath}</string>
180
+
181
+ <key>StandardErrorPath</key>
182
+ <string>${config.stderrPath}</string>
183
+
184
+ <key>WorkingDirectory</key>
185
+ <string>/tmp</string>
186
+
187
+ <key>ThrottleInterval</key>
188
+ <integer>10</integer>
189
+ </dict>
190
+ </plist>
191
+ `;
192
+ }
193
+ /**
194
+ * Create and write plist file
195
+ */
196
+ async createPlist(config) {
197
+ const plistContent = this.generatePlist(config);
198
+ await (0, file_utils_1.writeFileAtomic)(config.plistPath, plistContent);
199
+ }
200
+ /**
201
+ * Delete plist file
202
+ */
203
+ async deletePlist(config) {
204
+ if (await (0, file_utils_1.fileExists)(config.plistPath)) {
205
+ await fs.unlink(config.plistPath);
206
+ }
207
+ }
208
+ /**
209
+ * Load service (register with launchctl)
210
+ */
211
+ async loadService(plistPath) {
212
+ await (0, process_utils_1.execCommand)(`launchctl load "${plistPath}"`);
213
+ }
214
+ /**
215
+ * Unload service (unregister from launchctl)
216
+ */
217
+ async unloadService(plistPath) {
218
+ try {
219
+ await (0, process_utils_1.execCommand)(`launchctl unload "${plistPath}"`);
220
+ }
221
+ catch (error) {
222
+ // Ignore errors if service is not loaded
223
+ }
224
+ }
225
+ /**
226
+ * Start service
227
+ */
228
+ async startService(label) {
229
+ await (0, process_utils_1.execCommand)(`launchctl start ${label}`);
230
+ }
231
+ /**
232
+ * Stop service
233
+ */
234
+ async stopService(label) {
235
+ await (0, process_utils_1.execCommand)(`launchctl stop ${label}`);
236
+ }
237
+ /**
238
+ * Get service status from launchctl
239
+ */
240
+ async getServiceStatus(label) {
241
+ try {
242
+ const { stdout } = await (0, process_utils_1.execAsync)(`launchctl list | grep ${label}`);
243
+ const lines = stdout.trim().split('\n');
244
+ for (const line of lines) {
245
+ const parts = line.split(/\s+/);
246
+ if (parts.length >= 3) {
247
+ const pidStr = parts[0].trim();
248
+ const exitCodeStr = parts[1].trim();
249
+ const serviceLabel = parts[2].trim();
250
+ if (serviceLabel === label) {
251
+ const pid = pidStr !== '-' ? parseInt(pidStr, 10) : null;
252
+ const exitCode = exitCodeStr !== '-' ? parseInt(exitCodeStr, 10) : null;
253
+ const isRunning = pid !== null;
254
+ return {
255
+ isRunning,
256
+ pid,
257
+ exitCode,
258
+ lastExitReason: this.interpretExitCode(exitCode),
259
+ };
260
+ }
261
+ }
262
+ }
263
+ return {
264
+ isRunning: false,
265
+ pid: null,
266
+ exitCode: null,
267
+ };
268
+ }
269
+ catch (error) {
270
+ return {
271
+ isRunning: false,
272
+ pid: null,
273
+ exitCode: null,
274
+ };
275
+ }
276
+ }
277
+ /**
278
+ * Interpret exit code to human-readable reason
279
+ */
280
+ interpretExitCode(code) {
281
+ if (code === null || code === 0)
282
+ return undefined;
283
+ if (code === -9)
284
+ return 'Force killed (SIGKILL)';
285
+ if (code === -15)
286
+ return 'Terminated (SIGTERM)';
287
+ return `Exit code: ${code}`;
288
+ }
289
+ /**
290
+ * Wait for service to start (with timeout)
291
+ */
292
+ async waitForServiceStart(label, timeoutMs = 5000) {
293
+ const startTime = Date.now();
294
+ while (Date.now() - startTime < timeoutMs) {
295
+ const status = await this.getServiceStatus(label);
296
+ if (status.isRunning) {
297
+ return true;
298
+ }
299
+ await new Promise((resolve) => setTimeout(resolve, 500));
300
+ }
301
+ return false;
302
+ }
303
+ /**
304
+ * Wait for service to stop (with timeout)
305
+ */
306
+ async waitForServiceStop(label, timeoutMs = 5000) {
307
+ const startTime = Date.now();
308
+ while (Date.now() - startTime < timeoutMs) {
309
+ const status = await this.getServiceStatus(label);
310
+ if (!status.isRunning) {
311
+ return true;
312
+ }
313
+ await new Promise((resolve) => setTimeout(resolve, 500));
314
+ }
315
+ return false;
316
+ }
317
+ /**
318
+ * Start admin service
319
+ */
320
+ async start() {
321
+ await this.initialize();
322
+ let config = await this.loadConfig();
323
+ if (!config) {
324
+ // Create default config
325
+ config = this.getDefaultConfig();
326
+ await this.saveConfig(config);
327
+ }
328
+ // Check if already running
329
+ if (config.status === 'running') {
330
+ throw new Error('Admin service is already running');
331
+ }
332
+ // Check for throttled state (exit code 78)
333
+ const currentStatus = await this.getServiceStatus(config.label);
334
+ if (currentStatus.exitCode === 78) {
335
+ // Service is throttled - clean up and start fresh
336
+ await this.unloadService(config.plistPath);
337
+ await this.deletePlist(config);
338
+ // Give launchd a moment to clean up
339
+ await new Promise((resolve) => setTimeout(resolve, 1000));
340
+ }
341
+ // Create plist
342
+ await this.createPlist(config);
343
+ // Load and start service
344
+ try {
345
+ await this.loadService(config.plistPath);
346
+ }
347
+ catch (error) {
348
+ // May already be loaded
349
+ }
350
+ await this.startService(config.label);
351
+ // Wait for startup
352
+ const started = await this.waitForServiceStart(config.label, 5000);
353
+ if (!started) {
354
+ throw new Error('Admin service failed to start');
355
+ }
356
+ // Update config
357
+ const status = await this.getServiceStatus(config.label);
358
+ await this.updateConfig({
359
+ status: 'running',
360
+ pid: status.pid || undefined,
361
+ lastStarted: new Date().toISOString(),
362
+ });
363
+ }
364
+ /**
365
+ * Stop admin service
366
+ */
367
+ async stop() {
368
+ const config = await this.loadConfig();
369
+ if (!config) {
370
+ throw new Error('Admin configuration not found');
371
+ }
372
+ if (config.status !== 'running') {
373
+ throw new Error('Admin service is not running');
374
+ }
375
+ // Unload service
376
+ await this.unloadService(config.plistPath);
377
+ // Wait for shutdown
378
+ await this.waitForServiceStop(config.label, 5000);
379
+ // Update config
380
+ await this.updateConfig({
381
+ status: 'stopped',
382
+ pid: undefined,
383
+ lastStopped: new Date().toISOString(),
384
+ });
385
+ }
386
+ /**
387
+ * Restart admin service
388
+ */
389
+ async restart() {
390
+ try {
391
+ await this.stop();
392
+ }
393
+ catch (error) {
394
+ // May not be running
395
+ }
396
+ await this.start();
397
+ }
398
+ /**
399
+ * Get admin status
400
+ */
401
+ async getStatus() {
402
+ const config = await this.loadConfig();
403
+ if (!config) {
404
+ return null;
405
+ }
406
+ const status = await this.getServiceStatus(config.label);
407
+ return { config, status };
408
+ }
409
+ }
410
+ exports.AdminManager = AdminManager;
411
+ // Export singleton instance
412
+ exports.adminManager = new AdminManager();
413
+ //# sourceMappingURL=admin-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-manager.js","sourceRoot":"","sources":["../../src/lib/admin-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Admin HTTP server - REST API for managing llama.cpp servers
4
+ */
5
+ declare class AdminServer {
6
+ private config;
7
+ private server;
8
+ initialize(): Promise<void>;
9
+ start(): Promise<void>;
10
+ /**
11
+ * Main request handler
12
+ */
13
+ private handleRequest;
14
+ /**
15
+ * Health check endpoint
16
+ */
17
+ private handleHealth;
18
+ /**
19
+ * List all servers
20
+ */
21
+ private handleListServers;
22
+ /**
23
+ * Get server details
24
+ */
25
+ private handleGetServer;
26
+ /**
27
+ * Create new server
28
+ */
29
+ private handleCreateServer;
30
+ /**
31
+ * Update server configuration
32
+ */
33
+ private handleUpdateServer;
34
+ /**
35
+ * Delete server
36
+ */
37
+ private handleDeleteServer;
38
+ /**
39
+ * Start server
40
+ */
41
+ private handleStartServer;
42
+ /**
43
+ * Stop server
44
+ */
45
+ private handleStopServer;
46
+ /**
47
+ * Restart server
48
+ */
49
+ private handleRestartServer;
50
+ /**
51
+ * Get server logs
52
+ */
53
+ private handleGetLogs;
54
+ /**
55
+ * List models
56
+ */
57
+ private handleListModels;
58
+ /**
59
+ * Get model details
60
+ */
61
+ private handleGetModel;
62
+ /**
63
+ * Search models on HuggingFace
64
+ */
65
+ private handleSearchModels;
66
+ /**
67
+ * Get GGUF files for a HuggingFace model
68
+ */
69
+ private handleGetModelFiles;
70
+ /**
71
+ * List all download jobs
72
+ */
73
+ private handleListJobs;
74
+ /**
75
+ * Get a specific download job
76
+ */
77
+ private handleGetJob;
78
+ /**
79
+ * Cancel a download job
80
+ */
81
+ private handleCancelJob;
82
+ /**
83
+ * Download model from HuggingFace
84
+ */
85
+ private handleDownloadModel;
86
+ /**
87
+ * Delete model
88
+ */
89
+ private handleDeleteModel;
90
+ /**
91
+ * Get system status
92
+ */
93
+ private handleSystemStatus;
94
+ /**
95
+ * Get router status
96
+ */
97
+ private handleGetRouter;
98
+ /**
99
+ * Start router service
100
+ */
101
+ private handleStartRouter;
102
+ /**
103
+ * Stop router service
104
+ */
105
+ private handleStopRouter;
106
+ /**
107
+ * Restart router service
108
+ */
109
+ private handleRestartRouter;
110
+ /**
111
+ * Get router logs
112
+ */
113
+ private handleGetRouterLogs;
114
+ /**
115
+ * Update router configuration
116
+ */
117
+ private handleUpdateRouter;
118
+ /**
119
+ * Authenticate request via API key
120
+ */
121
+ private authenticate;
122
+ /**
123
+ * Read request body as string
124
+ */
125
+ private readBody;
126
+ /**
127
+ * Send JSON response
128
+ */
129
+ private sendJson;
130
+ /**
131
+ * Send error response
132
+ */
133
+ private sendError;
134
+ /**
135
+ * Serve static files from web/dist directory
136
+ */
137
+ private handleStaticFile;
138
+ /**
139
+ * Log request
140
+ */
141
+ private logRequest;
142
+ /**
143
+ * Log response
144
+ */
145
+ private logResponse;
146
+ }
147
+ export { AdminServer };
148
+ //# sourceMappingURL=admin-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-server.d.ts","sourceRoot":"","sources":["../../src/lib/admin-server.ts"],"names":[],"mappings":";AA+BA;;GAEG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAEvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;YACW,aAAa;IAwH3B;;OAEG;YACW,YAAY;IAQ1B;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,kBAAkB;IA8GhC;;OAEG;YACW,kBAAkB;IAsFhC;;OAEG;YACW,kBAAkB;IAyBhC;;OAEG;YACW,iBAAiB;IA6C/B;;OAEG;YACW,gBAAgB;IA8B9B;;OAEG;YACW,mBAAmB;IA0CjC;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,cAAc;IAyB5B;;OAEG;YACW,kBAAkB;IAiBhC;;OAEG;YACW,mBAAmB;IASjC;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,YAAY;IAS1B;;OAEG;YACW,eAAe;IAsB7B;;OAEG;YACW,mBAAmB;IA+BjC;;OAEG;YACW,iBAAiB;IAqD/B;;OAEG;YACW,kBAAkB;IAqChC;;OAEG;YACW,eAAe;IAmD7B;;OAEG;YACW,iBAAiB;IAe/B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,mBAAmB;IAejC;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,QAAQ;IAStB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;OAEG;YACW,gBAAgB;IA0E9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB;AAkBD,OAAO,EAAE,WAAW,EAAE,CAAC"}