@appkit/llamacpp-cli 1.0.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/.versionrc.json +16 -0
- package/CHANGELOG.md +10 -0
- package/README.md +474 -0
- package/bin/llamacpp +26 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +196 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +104 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +37 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +8 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +57 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/ps.d.ts +2 -0
- package/dist/commands/ps.d.ts.map +1 -0
- package/dist/commands/ps.js +72 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/pull.d.ts +6 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +36 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/rm.d.ts +2 -0
- package/dist/commands/rm.d.ts.map +1 -0
- package/dist/commands/rm.js +134 -0
- package/dist/commands/rm.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +198 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/search.d.ts +7 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +93 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/show.d.ts +6 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +196 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +150 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +39 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/lib/config-generator.d.ts +30 -0
- package/dist/lib/config-generator.d.ts.map +1 -0
- package/dist/lib/config-generator.js +125 -0
- package/dist/lib/config-generator.js.map +1 -0
- package/dist/lib/launchctl-manager.d.ts +55 -0
- package/dist/lib/launchctl-manager.d.ts.map +1 -0
- package/dist/lib/launchctl-manager.js +227 -0
- package/dist/lib/launchctl-manager.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +44 -0
- package/dist/lib/model-downloader.d.ts.map +1 -0
- package/dist/lib/model-downloader.js +248 -0
- package/dist/lib/model-downloader.js.map +1 -0
- package/dist/lib/model-scanner.d.ts +31 -0
- package/dist/lib/model-scanner.d.ts.map +1 -0
- package/dist/lib/model-scanner.js +145 -0
- package/dist/lib/model-scanner.js.map +1 -0
- package/dist/lib/model-search.d.ts +29 -0
- package/dist/lib/model-search.d.ts.map +1 -0
- package/dist/lib/model-search.js +131 -0
- package/dist/lib/model-search.js.map +1 -0
- package/dist/lib/port-manager.d.ts +26 -0
- package/dist/lib/port-manager.d.ts.map +1 -0
- package/dist/lib/port-manager.js +75 -0
- package/dist/lib/port-manager.js.map +1 -0
- package/dist/lib/state-manager.d.ts +59 -0
- package/dist/lib/state-manager.d.ts.map +1 -0
- package/dist/lib/state-manager.js +178 -0
- package/dist/lib/state-manager.js.map +1 -0
- package/dist/lib/status-checker.d.ts +28 -0
- package/dist/lib/status-checker.d.ts.map +1 -0
- package/dist/lib/status-checker.js +99 -0
- package/dist/lib/status-checker.js.map +1 -0
- package/dist/types/global-config.d.ts +16 -0
- package/dist/types/global-config.d.ts.map +1 -0
- package/dist/types/global-config.js +18 -0
- package/dist/types/global-config.js.map +1 -0
- package/dist/types/model-info.d.ts +9 -0
- package/dist/types/model-info.d.ts.map +1 -0
- package/dist/types/model-info.js +3 -0
- package/dist/types/model-info.js.map +1 -0
- package/dist/types/server-config.d.ts +27 -0
- package/dist/types/server-config.d.ts.map +1 -0
- package/dist/types/server-config.js +15 -0
- package/dist/types/server-config.js.map +1 -0
- package/dist/utils/file-utils.d.ts +49 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +144 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/format-utils.d.ts +29 -0
- package/dist/utils/format-utils.d.ts.map +1 -0
- package/dist/utils/format-utils.js +82 -0
- package/dist/utils/format-utils.js.map +1 -0
- package/dist/utils/process-utils.d.ts +27 -0
- package/dist/utils/process-utils.d.ts.map +1 -0
- package/dist/utils/process-utils.js +66 -0
- package/dist/utils/process-utils.js.map +1 -0
- package/package.json +56 -0
- package/src/cli.ts +195 -0
- package/src/commands/delete.ts +74 -0
- package/src/commands/list.ts +37 -0
- package/src/commands/logs.ts +61 -0
- package/src/commands/ps.ts +79 -0
- package/src/commands/pull.ts +40 -0
- package/src/commands/rm.ts +114 -0
- package/src/commands/run.ts +209 -0
- package/src/commands/search.ts +107 -0
- package/src/commands/show.ts +207 -0
- package/src/commands/start.ts +140 -0
- package/src/commands/stop.ts +39 -0
- package/src/lib/config-generator.ts +119 -0
- package/src/lib/launchctl-manager.ts +209 -0
- package/src/lib/model-downloader.ts +259 -0
- package/src/lib/model-scanner.ts +125 -0
- package/src/lib/model-search.ts +114 -0
- package/src/lib/port-manager.ts +80 -0
- package/src/lib/state-manager.ts +177 -0
- package/src/lib/status-checker.ts +113 -0
- package/src/types/global-config.ts +26 -0
- package/src/types/model-info.ts +8 -0
- package/src/types/server-config.ts +42 -0
- package/src/utils/file-utils.ts +106 -0
- package/src/utils/format-utils.ts +80 -0
- package/src/utils/process-utils.ts +60 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/lib/state-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ServerConfig, ServerStatus } from '../types/server-config';
|
|
2
|
+
import { ServiceStatus } from './launchctl-manager';
|
|
3
|
+
export declare class StatusChecker {
|
|
4
|
+
/**
|
|
5
|
+
* Check the real-time status of a server
|
|
6
|
+
*/
|
|
7
|
+
checkServer(config: ServerConfig): Promise<ServiceStatus & {
|
|
8
|
+
portListening: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* Determine server status based on checks
|
|
12
|
+
*/
|
|
13
|
+
determineStatus(serviceStatus: ServiceStatus, portListening: boolean): ServerStatus;
|
|
14
|
+
/**
|
|
15
|
+
* Update a server's status in its config
|
|
16
|
+
*/
|
|
17
|
+
updateServerStatus(config: ServerConfig): Promise<ServerConfig>;
|
|
18
|
+
/**
|
|
19
|
+
* Update status for all servers
|
|
20
|
+
*/
|
|
21
|
+
updateAllServerStatuses(): Promise<ServerConfig[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Find crashed servers
|
|
24
|
+
*/
|
|
25
|
+
findCrashedServers(): Promise<ServerConfig[]>;
|
|
26
|
+
}
|
|
27
|
+
export declare const statusChecker: StatusChecker;
|
|
28
|
+
//# sourceMappingURL=status-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-checker.d.ts","sourceRoot":"","sources":["../../src/lib/status-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAoB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAItE,qBAAa,aAAa;IACxB;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IA0B5F;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,GAAG,YAAY;IAYnF;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBrE;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAYxD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;CAepD;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statusChecker = exports.StatusChecker = void 0;
|
|
4
|
+
const launchctl_manager_1 = require("./launchctl-manager");
|
|
5
|
+
const process_utils_1 = require("../utils/process-utils");
|
|
6
|
+
const state_manager_1 = require("./state-manager");
|
|
7
|
+
class StatusChecker {
|
|
8
|
+
/**
|
|
9
|
+
* Check the real-time status of a server
|
|
10
|
+
*/
|
|
11
|
+
async checkServer(config) {
|
|
12
|
+
// Get launchctl status
|
|
13
|
+
const launchStatus = await launchctl_manager_1.launchctlManager.getServiceStatus(config.label);
|
|
14
|
+
// Cross-check port
|
|
15
|
+
const portListening = await (0, process_utils_1.isPortInUse)(config.port);
|
|
16
|
+
// Verify PID if reported
|
|
17
|
+
if (launchStatus.pid) {
|
|
18
|
+
const pidRunning = await (0, process_utils_1.isProcessRunning)(launchStatus.pid);
|
|
19
|
+
if (!pidRunning) {
|
|
20
|
+
// PID reported but process not running
|
|
21
|
+
return {
|
|
22
|
+
...launchStatus,
|
|
23
|
+
isRunning: false,
|
|
24
|
+
portListening,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
...launchStatus,
|
|
30
|
+
portListening,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Determine server status based on checks
|
|
35
|
+
*/
|
|
36
|
+
determineStatus(serviceStatus, portListening) {
|
|
37
|
+
if (serviceStatus.isRunning && portListening) {
|
|
38
|
+
return 'running';
|
|
39
|
+
}
|
|
40
|
+
if (!serviceStatus.isRunning && serviceStatus.exitCode && serviceStatus.exitCode !== 0) {
|
|
41
|
+
return 'crashed';
|
|
42
|
+
}
|
|
43
|
+
return 'stopped';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Update a server's status in its config
|
|
47
|
+
*/
|
|
48
|
+
async updateServerStatus(config) {
|
|
49
|
+
const status = await this.checkServer(config);
|
|
50
|
+
const newStatus = this.determineStatus(status, status.portListening);
|
|
51
|
+
const updatedConfig = {
|
|
52
|
+
...config,
|
|
53
|
+
status: newStatus,
|
|
54
|
+
pid: status.pid || undefined,
|
|
55
|
+
};
|
|
56
|
+
// Update timestamps
|
|
57
|
+
if (newStatus === 'running' && config.status !== 'running') {
|
|
58
|
+
updatedConfig.lastStarted = new Date().toISOString();
|
|
59
|
+
}
|
|
60
|
+
else if (newStatus === 'stopped' && config.status === 'running') {
|
|
61
|
+
updatedConfig.lastStopped = new Date().toISOString();
|
|
62
|
+
}
|
|
63
|
+
// Save updated config
|
|
64
|
+
await state_manager_1.stateManager.saveServerConfig(updatedConfig);
|
|
65
|
+
return updatedConfig;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Update status for all servers
|
|
69
|
+
*/
|
|
70
|
+
async updateAllServerStatuses() {
|
|
71
|
+
const servers = await state_manager_1.stateManager.getAllServers();
|
|
72
|
+
const updated = [];
|
|
73
|
+
for (const server of servers) {
|
|
74
|
+
const updatedServer = await this.updateServerStatus(server);
|
|
75
|
+
updated.push(updatedServer);
|
|
76
|
+
}
|
|
77
|
+
return updated;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Find crashed servers
|
|
81
|
+
*/
|
|
82
|
+
async findCrashedServers() {
|
|
83
|
+
const servers = await state_manager_1.stateManager.getAllServers();
|
|
84
|
+
const crashed = [];
|
|
85
|
+
for (const server of servers) {
|
|
86
|
+
if (server.status === 'running') {
|
|
87
|
+
const status = await this.checkServer(server);
|
|
88
|
+
if (!status.isRunning && status.exitCode !== 0 && status.exitCode !== null) {
|
|
89
|
+
crashed.push(server);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return crashed;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.StatusChecker = StatusChecker;
|
|
97
|
+
// Export singleton instance
|
|
98
|
+
exports.statusChecker = new StatusChecker();
|
|
99
|
+
//# sourceMappingURL=status-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-checker.js","sourceRoot":"","sources":["../../src/lib/status-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface GlobalConfig {
|
|
2
|
+
version: string;
|
|
3
|
+
defaultPort: number;
|
|
4
|
+
modelsDirectory: string;
|
|
5
|
+
llamaServerBinary: string;
|
|
6
|
+
defaults: {
|
|
7
|
+
threads: number;
|
|
8
|
+
ctxSize: number;
|
|
9
|
+
gpuLayers: number;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Default global configuration
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_GLOBAL_CONFIG: GlobalConfig;
|
|
16
|
+
//# sourceMappingURL=global-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/types/global-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAUnC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_GLOBAL_CONFIG = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default global configuration
|
|
6
|
+
*/
|
|
7
|
+
exports.DEFAULT_GLOBAL_CONFIG = {
|
|
8
|
+
version: '1.0.0',
|
|
9
|
+
defaultPort: 9000,
|
|
10
|
+
modelsDirectory: '', // Set at runtime
|
|
11
|
+
llamaServerBinary: '/opt/homebrew/bin/llama-server',
|
|
12
|
+
defaults: {
|
|
13
|
+
threads: 8,
|
|
14
|
+
ctxSize: 8192,
|
|
15
|
+
gpuLayers: 60,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=global-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/types/global-config.ts"],"names":[],"mappings":";;;AAYA;;GAEG;AACU,QAAA,qBAAqB,GAAiB;IACjD,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,EAAE,EAAG,iBAAiB;IACvC,iBAAiB,EAAE,gCAAgC;IACnD,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,EAAE;KACd;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-info.d.ts","sourceRoot":"","sources":["../../src/types/model-info.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-info.js","sourceRoot":"","sources":["../../src/types/model-info.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type ServerStatus = 'running' | 'stopped' | 'crashed';
|
|
2
|
+
export interface ServerConfig {
|
|
3
|
+
id: string;
|
|
4
|
+
modelPath: string;
|
|
5
|
+
modelName: string;
|
|
6
|
+
port: number;
|
|
7
|
+
threads: number;
|
|
8
|
+
ctxSize: number;
|
|
9
|
+
gpuLayers: number;
|
|
10
|
+
embeddings: boolean;
|
|
11
|
+
jinja: boolean;
|
|
12
|
+
status: ServerStatus;
|
|
13
|
+
pid?: number;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
lastStarted?: string;
|
|
16
|
+
lastStopped?: string;
|
|
17
|
+
plistPath: string;
|
|
18
|
+
label: string;
|
|
19
|
+
stdoutPath: string;
|
|
20
|
+
stderrPath: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Sanitize a model filename to create a valid server ID
|
|
24
|
+
* Example: "llama-3.2-3b-instruct-q4_k_m.gguf" → "llama-3-2-3b-instruct-q4-k-m"
|
|
25
|
+
*/
|
|
26
|
+
export declare function sanitizeModelName(modelName: string): string;
|
|
27
|
+
//# sourceMappingURL=server-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IAGb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IAGf,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeModelName = sanitizeModelName;
|
|
4
|
+
/**
|
|
5
|
+
* Sanitize a model filename to create a valid server ID
|
|
6
|
+
* Example: "llama-3.2-3b-instruct-q4_k_m.gguf" → "llama-3-2-3b-instruct-q4-k-m"
|
|
7
|
+
*/
|
|
8
|
+
function sanitizeModelName(modelName) {
|
|
9
|
+
return modelName
|
|
10
|
+
.replace(/\.gguf$/i, '') // Remove .gguf extension
|
|
11
|
+
.replace(/[^a-zA-Z0-9]+/g, '-') // Replace non-alphanumeric with hyphens
|
|
12
|
+
.toLowerCase() // Lowercase
|
|
13
|
+
.replace(/^-+|-+$/g, ''); // Trim hyphens from ends
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=server-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":";;AAmCA,8CAMC;AAVD;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAW,yBAAyB;SAC3D,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAI,wCAAwC;SAC1E,WAAW,EAAE,CAAsB,YAAY;SAC/C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAU,yBAAyB;AAChE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure a directory exists, creating it if necessary
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureDir(dirPath: string): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Write a file atomically (write to temp, then rename)
|
|
7
|
+
*/
|
|
8
|
+
export declare function writeFileAtomic(filePath: string, content: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Write JSON to a file atomically
|
|
11
|
+
*/
|
|
12
|
+
export declare function writeJsonAtomic(filePath: string, data: any): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Read and parse JSON file
|
|
15
|
+
*/
|
|
16
|
+
export declare function readJson<T>(filePath: string): Promise<T>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a file exists
|
|
19
|
+
*/
|
|
20
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Get the llamacpp config directory (~/.llamacpp)
|
|
23
|
+
*/
|
|
24
|
+
export declare function getConfigDir(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Get the servers directory (~/.llamacpp/servers)
|
|
27
|
+
*/
|
|
28
|
+
export declare function getServersDir(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the logs directory (~/.llamacpp/logs)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getLogsDir(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the global config file path
|
|
35
|
+
*/
|
|
36
|
+
export declare function getGlobalConfigPath(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get the models directory (~/models)
|
|
39
|
+
*/
|
|
40
|
+
export declare function getModelsDir(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Get the LaunchAgents directory
|
|
43
|
+
*/
|
|
44
|
+
export declare function getLaunchAgentsDir(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Expand tilde (~) in path to home directory
|
|
47
|
+
*/
|
|
48
|
+
export declare function expandHome(filePath: string): string;
|
|
49
|
+
//# sourceMappingURL=file-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAG9D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKnD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
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.ensureDir = ensureDir;
|
|
37
|
+
exports.writeFileAtomic = writeFileAtomic;
|
|
38
|
+
exports.writeJsonAtomic = writeJsonAtomic;
|
|
39
|
+
exports.readJson = readJson;
|
|
40
|
+
exports.fileExists = fileExists;
|
|
41
|
+
exports.getConfigDir = getConfigDir;
|
|
42
|
+
exports.getServersDir = getServersDir;
|
|
43
|
+
exports.getLogsDir = getLogsDir;
|
|
44
|
+
exports.getGlobalConfigPath = getGlobalConfigPath;
|
|
45
|
+
exports.getModelsDir = getModelsDir;
|
|
46
|
+
exports.getLaunchAgentsDir = getLaunchAgentsDir;
|
|
47
|
+
exports.expandHome = expandHome;
|
|
48
|
+
const fs = __importStar(require("fs/promises"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const os = __importStar(require("os"));
|
|
51
|
+
/**
|
|
52
|
+
* Ensure a directory exists, creating it if necessary
|
|
53
|
+
*/
|
|
54
|
+
async function ensureDir(dirPath) {
|
|
55
|
+
try {
|
|
56
|
+
await fs.mkdir(dirPath, { recursive: true, mode: 0o755 });
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Ignore error if directory already exists
|
|
60
|
+
if (error.code !== 'EEXIST') {
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Write a file atomically (write to temp, then rename)
|
|
67
|
+
*/
|
|
68
|
+
async function writeFileAtomic(filePath, content) {
|
|
69
|
+
const tempPath = `${filePath}.tmp`;
|
|
70
|
+
await fs.writeFile(tempPath, content, 'utf-8');
|
|
71
|
+
await fs.rename(tempPath, filePath);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Write JSON to a file atomically
|
|
75
|
+
*/
|
|
76
|
+
async function writeJsonAtomic(filePath, data) {
|
|
77
|
+
const content = JSON.stringify(data, null, 2);
|
|
78
|
+
await writeFileAtomic(filePath, content);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Read and parse JSON file
|
|
82
|
+
*/
|
|
83
|
+
async function readJson(filePath) {
|
|
84
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
85
|
+
return JSON.parse(content);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if a file exists
|
|
89
|
+
*/
|
|
90
|
+
async function fileExists(filePath) {
|
|
91
|
+
try {
|
|
92
|
+
await fs.access(filePath);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the llamacpp config directory (~/.llamacpp)
|
|
101
|
+
*/
|
|
102
|
+
function getConfigDir() {
|
|
103
|
+
return path.join(os.homedir(), '.llamacpp');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the servers directory (~/.llamacpp/servers)
|
|
107
|
+
*/
|
|
108
|
+
function getServersDir() {
|
|
109
|
+
return path.join(getConfigDir(), 'servers');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the logs directory (~/.llamacpp/logs)
|
|
113
|
+
*/
|
|
114
|
+
function getLogsDir() {
|
|
115
|
+
return path.join(getConfigDir(), 'logs');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the global config file path
|
|
119
|
+
*/
|
|
120
|
+
function getGlobalConfigPath() {
|
|
121
|
+
return path.join(getConfigDir(), 'config.json');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the models directory (~/models)
|
|
125
|
+
*/
|
|
126
|
+
function getModelsDir() {
|
|
127
|
+
return path.join(os.homedir(), 'models');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get the LaunchAgents directory
|
|
131
|
+
*/
|
|
132
|
+
function getLaunchAgentsDir() {
|
|
133
|
+
return path.join(os.homedir(), 'Library', 'LaunchAgents');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Expand tilde (~) in path to home directory
|
|
137
|
+
*/
|
|
138
|
+
function expandHome(filePath) {
|
|
139
|
+
if (filePath.startsWith('~/')) {
|
|
140
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
141
|
+
}
|
|
142
|
+
return filePath;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=file-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format bytes to human-readable size
|
|
3
|
+
* Example: 1900000000 → "1.9 GB"
|
|
4
|
+
*/
|
|
5
|
+
export declare function formatBytes(bytes: number): string;
|
|
6
|
+
/**
|
|
7
|
+
* Format a date to a human-readable string
|
|
8
|
+
* Example: "Nov 20, 2025 10:30 AM"
|
|
9
|
+
*/
|
|
10
|
+
export declare function formatDate(date: Date | string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Format a date to a short string (no time)
|
|
13
|
+
* Example: "Nov 20"
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatDateShort(date: Date | string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Calculate uptime from start time
|
|
18
|
+
* Example: "2d 4h" or "45m" or "30s"
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatUptime(startTime: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Truncate a string to a maximum length
|
|
23
|
+
*/
|
|
24
|
+
export declare function truncate(str: string, maxLength: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* Pad a string to a specific length
|
|
27
|
+
*/
|
|
28
|
+
export declare function pad(str: string, length: number, char?: string): string;
|
|
29
|
+
//# sourceMappingURL=format-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAStD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAM3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgBtD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatBytes = formatBytes;
|
|
4
|
+
exports.formatDate = formatDate;
|
|
5
|
+
exports.formatDateShort = formatDateShort;
|
|
6
|
+
exports.formatUptime = formatUptime;
|
|
7
|
+
exports.truncate = truncate;
|
|
8
|
+
exports.pad = pad;
|
|
9
|
+
/**
|
|
10
|
+
* Format bytes to human-readable size
|
|
11
|
+
* Example: 1900000000 → "1.9 GB"
|
|
12
|
+
*/
|
|
13
|
+
function formatBytes(bytes) {
|
|
14
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
15
|
+
let size = bytes;
|
|
16
|
+
let unitIndex = 0;
|
|
17
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
18
|
+
size /= 1024;
|
|
19
|
+
unitIndex++;
|
|
20
|
+
}
|
|
21
|
+
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format a date to a human-readable string
|
|
25
|
+
* Example: "Nov 20, 2025 10:30 AM"
|
|
26
|
+
*/
|
|
27
|
+
function formatDate(date) {
|
|
28
|
+
const d = typeof date === 'string' ? new Date(date) : date;
|
|
29
|
+
return d.toLocaleString('en-US', {
|
|
30
|
+
month: 'short',
|
|
31
|
+
day: 'numeric',
|
|
32
|
+
year: 'numeric',
|
|
33
|
+
hour: 'numeric',
|
|
34
|
+
minute: '2-digit',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Format a date to a short string (no time)
|
|
39
|
+
* Example: "Nov 20"
|
|
40
|
+
*/
|
|
41
|
+
function formatDateShort(date) {
|
|
42
|
+
const d = typeof date === 'string' ? new Date(date) : date;
|
|
43
|
+
return d.toLocaleString('en-US', {
|
|
44
|
+
month: 'short',
|
|
45
|
+
day: 'numeric',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculate uptime from start time
|
|
50
|
+
* Example: "2d 4h" or "45m" or "30s"
|
|
51
|
+
*/
|
|
52
|
+
function formatUptime(startTime) {
|
|
53
|
+
const start = new Date(startTime).getTime();
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
const seconds = Math.floor((now - start) / 1000);
|
|
56
|
+
if (seconds < 60)
|
|
57
|
+
return `${seconds}s`;
|
|
58
|
+
const minutes = Math.floor(seconds / 60);
|
|
59
|
+
if (minutes < 60)
|
|
60
|
+
return `${minutes}m`;
|
|
61
|
+
const hours = Math.floor(minutes / 60);
|
|
62
|
+
if (hours < 24)
|
|
63
|
+
return `${hours}h`;
|
|
64
|
+
const days = Math.floor(hours / 24);
|
|
65
|
+
const remainingHours = hours % 24;
|
|
66
|
+
return remainingHours > 0 ? `${days}d ${remainingHours}h` : `${days}d`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Truncate a string to a maximum length
|
|
70
|
+
*/
|
|
71
|
+
function truncate(str, maxLength) {
|
|
72
|
+
if (str.length <= maxLength)
|
|
73
|
+
return str;
|
|
74
|
+
return str.slice(0, maxLength - 3) + '...';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Pad a string to a specific length
|
|
78
|
+
*/
|
|
79
|
+
function pad(str, length, char = ' ') {
|
|
80
|
+
return str.padEnd(length, char);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=format-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
export declare const execAsync: typeof exec.__promisify__;
|
|
3
|
+
/**
|
|
4
|
+
* Execute a command and return stdout
|
|
5
|
+
* Throws on non-zero exit code
|
|
6
|
+
*/
|
|
7
|
+
export declare function execCommand(command: string): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Execute a command and return both stdout and stderr
|
|
10
|
+
*/
|
|
11
|
+
export declare function execCommandFull(command: string): Promise<{
|
|
12
|
+
stdout: string;
|
|
13
|
+
stderr: string;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Check if a command exists in PATH
|
|
17
|
+
*/
|
|
18
|
+
export declare function commandExists(command: string): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a process is running by PID
|
|
21
|
+
*/
|
|
22
|
+
export declare function isProcessRunning(pid: number): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a port is in use
|
|
25
|
+
*/
|
|
26
|
+
export declare function isPortInUse(port: number): Promise<boolean>;
|
|
27
|
+
//# sourceMappingURL=process-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/utils/process-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,eAAO,MAAM,SAAS,2BAAkB,CAAC;AAEzC;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAMlG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE"}
|