@appkit/llamacpp-cli 1.14.1 → 2.1.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/README.md +276 -280
- package/dist/cli.js +133 -23
- package/dist/cli.js.map +1 -1
- package/dist/commands/admin/config.d.ts +1 -1
- package/dist/commands/admin/config.js +5 -5
- package/dist/commands/admin/config.js.map +1 -1
- package/dist/commands/admin/log-config.d.ts +11 -0
- package/dist/commands/admin/log-config.d.ts.map +1 -0
- package/dist/commands/admin/log-config.js +159 -0
- package/dist/commands/admin/log-config.js.map +1 -0
- package/dist/commands/admin/logs.d.ts +2 -3
- package/dist/commands/admin/logs.d.ts.map +1 -1
- package/dist/commands/admin/logs.js +6 -48
- package/dist/commands/admin/logs.js.map +1 -1
- package/dist/commands/admin/status.d.ts.map +1 -1
- package/dist/commands/admin/status.js +1 -0
- package/dist/commands/admin/status.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +63 -196
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create.d.ts +3 -2
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +24 -97
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +7 -24
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/internal/server-wrapper.d.ts +15 -0
- package/dist/commands/internal/server-wrapper.d.ts.map +1 -0
- package/dist/commands/internal/server-wrapper.js +126 -0
- package/dist/commands/internal/server-wrapper.js.map +1 -0
- package/dist/commands/logs-all.d.ts +0 -2
- package/dist/commands/logs-all.d.ts.map +1 -1
- package/dist/commands/logs-all.js +1 -61
- package/dist/commands/logs-all.js.map +1 -1
- package/dist/commands/logs.d.ts +2 -5
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +104 -120
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/migrate-labels.d.ts +12 -0
- package/dist/commands/migrate-labels.d.ts.map +1 -0
- package/dist/commands/migrate-labels.js +160 -0
- package/dist/commands/migrate-labels.js.map +1 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +2 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +22 -48
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/router/config.d.ts +1 -1
- package/dist/commands/router/config.js +6 -6
- package/dist/commands/router/config.js.map +1 -1
- package/dist/commands/router/logs.d.ts +2 -4
- package/dist/commands/router/logs.d.ts.map +1 -1
- package/dist/commands/router/logs.js +34 -189
- package/dist/commands/router/logs.js.map +1 -1
- package/dist/commands/router/status.d.ts.map +1 -1
- package/dist/commands/router/status.js +1 -0
- package/dist/commands/router/status.js.map +1 -1
- package/dist/commands/server-show.d.ts.map +1 -1
- package/dist/commands/server-show.js +3 -0
- package/dist/commands/server-show.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -72
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +10 -26
- package/dist/commands/stop.js.map +1 -1
- package/dist/launchers/llamacpp-admin +8 -0
- package/dist/launchers/llamacpp-router +8 -0
- package/dist/launchers/llamacpp-server +8 -0
- package/dist/lib/admin-manager.d.ts +4 -0
- package/dist/lib/admin-manager.d.ts.map +1 -1
- package/dist/lib/admin-manager.js +42 -18
- package/dist/lib/admin-manager.js.map +1 -1
- package/dist/lib/admin-server.d.ts +48 -1
- package/dist/lib/admin-server.d.ts.map +1 -1
- package/dist/lib/admin-server.js +632 -238
- package/dist/lib/admin-server.js.map +1 -1
- package/dist/lib/config-generator.d.ts +1 -0
- package/dist/lib/config-generator.d.ts.map +1 -1
- package/dist/lib/config-generator.js +12 -5
- package/dist/lib/config-generator.js.map +1 -1
- package/dist/lib/keyboard-manager.d.ts +162 -0
- package/dist/lib/keyboard-manager.d.ts.map +1 -0
- package/dist/lib/keyboard-manager.js +247 -0
- package/dist/lib/keyboard-manager.js.map +1 -0
- package/dist/lib/label-migration.d.ts +65 -0
- package/dist/lib/label-migration.d.ts.map +1 -0
- package/dist/lib/label-migration.js +458 -0
- package/dist/lib/label-migration.js.map +1 -0
- package/dist/lib/launchctl-manager.d.ts +9 -0
- package/dist/lib/launchctl-manager.d.ts.map +1 -1
- package/dist/lib/launchctl-manager.js +65 -19
- package/dist/lib/launchctl-manager.js.map +1 -1
- package/dist/lib/log-management-service.d.ts +51 -0
- package/dist/lib/log-management-service.d.ts.map +1 -0
- package/dist/lib/log-management-service.js +124 -0
- package/dist/lib/log-management-service.js.map +1 -0
- package/dist/lib/log-workers.d.ts +70 -0
- package/dist/lib/log-workers.d.ts.map +1 -0
- package/dist/lib/log-workers.js +217 -0
- package/dist/lib/log-workers.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +9 -1
- package/dist/lib/model-downloader.d.ts.map +1 -1
- package/dist/lib/model-downloader.js +98 -1
- package/dist/lib/model-downloader.js.map +1 -1
- package/dist/lib/model-management-service.d.ts +60 -0
- package/dist/lib/model-management-service.d.ts.map +1 -0
- package/dist/lib/model-management-service.js +246 -0
- package/dist/lib/model-management-service.js.map +1 -0
- package/dist/lib/model-management-service.test.d.ts +2 -0
- package/dist/lib/model-management-service.test.d.ts.map +1 -0
- package/dist/lib/model-management-service.test.js.map +1 -0
- package/dist/lib/model-scanner.d.ts +15 -3
- package/dist/lib/model-scanner.d.ts.map +1 -1
- package/dist/lib/model-scanner.js +174 -17
- package/dist/lib/model-scanner.js.map +1 -1
- package/dist/lib/openapi-spec.d.ts +1335 -0
- package/dist/lib/openapi-spec.d.ts.map +1 -0
- package/dist/lib/openapi-spec.js +1017 -0
- package/dist/lib/openapi-spec.js.map +1 -0
- package/dist/lib/router-logger.d.ts +1 -1
- package/dist/lib/router-logger.d.ts.map +1 -1
- package/dist/lib/router-logger.js +13 -11
- package/dist/lib/router-logger.js.map +1 -1
- package/dist/lib/router-manager.d.ts +4 -0
- package/dist/lib/router-manager.d.ts.map +1 -1
- package/dist/lib/router-manager.js +30 -18
- package/dist/lib/router-manager.js.map +1 -1
- package/dist/lib/router-server.d.ts +4 -7
- package/dist/lib/router-server.d.ts.map +1 -1
- package/dist/lib/router-server.js +71 -182
- package/dist/lib/router-server.js.map +1 -1
- package/dist/lib/server-config-service.d.ts +51 -0
- package/dist/lib/server-config-service.d.ts.map +1 -0
- package/dist/lib/server-config-service.js +310 -0
- package/dist/lib/server-config-service.js.map +1 -0
- package/dist/lib/server-config-service.test.d.ts +2 -0
- package/dist/lib/server-config-service.test.d.ts.map +1 -0
- package/dist/lib/server-config-service.test.js.map +1 -0
- package/dist/lib/server-lifecycle-service.d.ts +172 -0
- package/dist/lib/server-lifecycle-service.d.ts.map +1 -0
- package/dist/lib/server-lifecycle-service.js +619 -0
- package/dist/lib/server-lifecycle-service.js.map +1 -0
- package/dist/lib/state-manager.d.ts +18 -1
- package/dist/lib/state-manager.d.ts.map +1 -1
- package/dist/lib/state-manager.js +51 -2
- package/dist/lib/state-manager.js.map +1 -1
- package/dist/lib/status-checker.d.ts +11 -4
- package/dist/lib/status-checker.d.ts.map +1 -1
- package/dist/lib/status-checker.js +34 -1
- package/dist/lib/status-checker.js.map +1 -1
- package/dist/lib/validation-service.d.ts +43 -0
- package/dist/lib/validation-service.d.ts.map +1 -0
- package/dist/lib/validation-service.js +112 -0
- package/dist/lib/validation-service.js.map +1 -0
- package/dist/lib/validation-service.test.d.ts +2 -0
- package/dist/lib/validation-service.test.d.ts.map +1 -0
- package/dist/lib/validation-service.test.js.map +1 -0
- package/dist/scripts/http-log-filter.sh +8 -0
- package/dist/tui/ConfigApp.d.ts.map +1 -1
- package/dist/tui/ConfigApp.js +222 -184
- package/dist/tui/ConfigApp.js.map +1 -1
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
- package/dist/tui/HistoricalMonitorApp.js +12 -0
- package/dist/tui/HistoricalMonitorApp.js.map +1 -1
- package/dist/tui/ModelsApp.d.ts.map +1 -1
- package/dist/tui/ModelsApp.js +93 -17
- package/dist/tui/ModelsApp.js.map +1 -1
- package/dist/tui/MonitorApp.d.ts.map +1 -1
- package/dist/tui/MonitorApp.js +1 -3
- package/dist/tui/MonitorApp.js.map +1 -1
- package/dist/tui/MultiServerMonitorApp.d.ts +3 -3
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +724 -508
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/tui/RootNavigator.d.ts.map +1 -1
- package/dist/tui/RootNavigator.js +17 -1
- package/dist/tui/RootNavigator.js.map +1 -1
- package/dist/tui/RouterApp.d.ts +6 -0
- package/dist/tui/RouterApp.d.ts.map +1 -0
- package/dist/tui/RouterApp.js +928 -0
- package/dist/tui/RouterApp.js.map +1 -0
- package/dist/tui/SearchApp.d.ts.map +1 -1
- package/dist/tui/SearchApp.js +27 -6
- package/dist/tui/SearchApp.js.map +1 -1
- package/dist/tui/shared/modal-controller.d.ts +65 -0
- package/dist/tui/shared/modal-controller.d.ts.map +1 -0
- package/dist/tui/shared/modal-controller.js +625 -0
- package/dist/tui/shared/modal-controller.js.map +1 -0
- package/dist/tui/shared/overlay-utils.d.ts +7 -0
- package/dist/tui/shared/overlay-utils.d.ts.map +1 -0
- package/dist/tui/shared/overlay-utils.js +54 -0
- package/dist/tui/shared/overlay-utils.js.map +1 -0
- package/dist/types/admin-config.d.ts +15 -2
- package/dist/types/admin-config.d.ts.map +1 -1
- package/dist/types/model-info.d.ts +5 -0
- package/dist/types/model-info.d.ts.map +1 -1
- package/dist/types/router-config.d.ts +2 -2
- package/dist/types/router-config.d.ts.map +1 -1
- package/dist/types/server-config.d.ts +8 -0
- package/dist/types/server-config.d.ts.map +1 -1
- package/dist/types/server-config.js +25 -0
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/http-log-filter.d.ts +10 -0
- package/dist/utils/http-log-filter.d.ts.map +1 -0
- package/dist/utils/http-log-filter.js +84 -0
- package/dist/utils/http-log-filter.js.map +1 -0
- package/dist/utils/log-parser.d.ts.map +1 -1
- package/dist/utils/log-parser.js +7 -4
- package/dist/utils/log-parser.js.map +1 -1
- package/dist/utils/log-utils.d.ts +59 -4
- package/dist/utils/log-utils.d.ts.map +1 -1
- package/dist/utils/log-utils.js +150 -11
- package/dist/utils/log-utils.js.map +1 -1
- package/dist/utils/shard-utils.d.ts +72 -0
- package/dist/utils/shard-utils.d.ts.map +1 -0
- package/dist/utils/shard-utils.js +168 -0
- package/dist/utils/shard-utils.js.map +1 -0
- package/package.json +18 -4
- package/src/launchers/llamacpp-admin +8 -0
- package/src/launchers/llamacpp-router +8 -0
- package/src/launchers/llamacpp-server +8 -0
- package/web/dist/assets/index-Byhoy86V.css +1 -0
- package/web/dist/assets/index-HSrgvray.js +50 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-Bin89Lwr.css +0 -1
- package/web/dist/assets/index-CVmonw3T.js +0 -17
|
@@ -0,0 +1,54 @@
|
|
|
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.createOverlay = createOverlay;
|
|
37
|
+
const blessed = __importStar(require("blessed"));
|
|
38
|
+
/**
|
|
39
|
+
* Create transparent overlay to block interaction with screen behind modal
|
|
40
|
+
* Note: Caller must append to screen explicitly
|
|
41
|
+
*/
|
|
42
|
+
function createOverlay(screen) {
|
|
43
|
+
return blessed.box({
|
|
44
|
+
top: 0,
|
|
45
|
+
left: 0,
|
|
46
|
+
width: "100%",
|
|
47
|
+
height: "100%",
|
|
48
|
+
style: {
|
|
49
|
+
bg: "gray",
|
|
50
|
+
transparent: true,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=overlay-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-utils.js","sourceRoot":"","sources":["../../../src/tui/shared/overlay-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,sCAaC;AAnBD,iDAAmC;AAEnC;;;GAGG;AACH,SAAgB,aAAa,CAC3B,MAA8B;IAE9B,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE;YACL,EAAE,EAAE,MAAM;YACV,WAAW,EAAE,IAAI;SAClB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
export type AdminStatus = 'running' | 'stopped' | 'crashed';
|
|
2
|
+
export interface LogManagementConfig {
|
|
3
|
+
autoRotate: {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
intervalHours: number;
|
|
6
|
+
thresholdMB: number;
|
|
7
|
+
};
|
|
8
|
+
autoDelete: {
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
intervalHours: number;
|
|
11
|
+
afterDays: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
2
14
|
export interface AdminConfig {
|
|
3
15
|
id: 'admin';
|
|
4
16
|
port: number;
|
|
@@ -10,10 +22,11 @@ export interface AdminConfig {
|
|
|
10
22
|
lastStarted?: string;
|
|
11
23
|
lastStopped?: string;
|
|
12
24
|
plistPath: string;
|
|
13
|
-
label: '
|
|
25
|
+
label: 'studio.appkit.llamacpp-cli.admin';
|
|
14
26
|
stdoutPath: string;
|
|
15
27
|
stderrPath: string;
|
|
16
28
|
requestTimeout: number;
|
|
17
|
-
|
|
29
|
+
logging: boolean;
|
|
30
|
+
logManagement?: LogManagementConfig;
|
|
18
31
|
}
|
|
19
32
|
//# sourceMappingURL=admin-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../src/types/admin-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,WAAW,CAAC;IACpB,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,
|
|
1
|
+
{"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../src/types/admin-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,WAAW,CAAC;IACpB,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,kCAAkC,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IAGjB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC"}
|
|
@@ -1 +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;
|
|
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;IAGhB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -9,11 +9,11 @@ export interface RouterConfig {
|
|
|
9
9
|
lastStarted?: string;
|
|
10
10
|
lastStopped?: string;
|
|
11
11
|
plistPath: string;
|
|
12
|
-
label: '
|
|
12
|
+
label: 'studio.appkit.llamacpp-cli.router';
|
|
13
13
|
stdoutPath: string;
|
|
14
14
|
stderrPath: string;
|
|
15
15
|
healthCheckInterval: number;
|
|
16
16
|
requestTimeout: number;
|
|
17
|
-
|
|
17
|
+
logging: boolean;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=router-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-config.d.ts","sourceRoot":"","sources":["../../src/types/router-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,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,
|
|
1
|
+
{"version":3,"file":"router-config.d.ts","sourceRoot":"","sources":["../../src/types/router-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,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,mCAAmC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type ServerStatus = 'running' | 'stopped' | 'crashed';
|
|
2
2
|
export interface ServerConfig {
|
|
3
3
|
id: string;
|
|
4
|
+
alias?: string;
|
|
4
5
|
modelPath: string;
|
|
5
6
|
modelName: string;
|
|
6
7
|
port: number;
|
|
@@ -22,10 +23,17 @@ export interface ServerConfig {
|
|
|
22
23
|
label: string;
|
|
23
24
|
stdoutPath: string;
|
|
24
25
|
stderrPath: string;
|
|
26
|
+
httpLogPath: string;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Sanitize a model filename to create a valid server ID
|
|
28
30
|
* Example: "llama-3.2-3b-instruct-q4_k_m.gguf" → "llama-3-2-3b-instruct-q4-k-m"
|
|
29
31
|
*/
|
|
30
32
|
export declare function sanitizeModelName(modelName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Validate an alias name
|
|
35
|
+
* @param alias - The alias to validate
|
|
36
|
+
* @returns null if valid, error message if invalid
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateAlias(alias: string): string | null;
|
|
31
39
|
//# sourceMappingURL=server-config.d.ts.map
|
|
@@ -1 +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;IACb,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;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAGvB,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;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;
|
|
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,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,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;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAGvB,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;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB1D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sanitizeModelName = sanitizeModelName;
|
|
4
|
+
exports.validateAlias = validateAlias;
|
|
4
5
|
/**
|
|
5
6
|
* Sanitize a model filename to create a valid server ID
|
|
6
7
|
* Example: "llama-3.2-3b-instruct-q4_k_m.gguf" → "llama-3-2-3b-instruct-q4-k-m"
|
|
@@ -12,4 +13,28 @@ function sanitizeModelName(modelName) {
|
|
|
12
13
|
.toLowerCase() // Lowercase
|
|
13
14
|
.replace(/^-+|-+$/g, ''); // Trim hyphens from ends
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Reserved alias names that cannot be used
|
|
18
|
+
*/
|
|
19
|
+
const RESERVED_ALIASES = ['router', 'admin', 'server'];
|
|
20
|
+
/**
|
|
21
|
+
* Validate an alias name
|
|
22
|
+
* @param alias - The alias to validate
|
|
23
|
+
* @returns null if valid, error message if invalid
|
|
24
|
+
*/
|
|
25
|
+
function validateAlias(alias) {
|
|
26
|
+
// Check length
|
|
27
|
+
if (alias.length < 1 || alias.length > 64) {
|
|
28
|
+
return 'Alias must be between 1 and 64 characters';
|
|
29
|
+
}
|
|
30
|
+
// Check format (alphanumeric, hyphens, underscores only)
|
|
31
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(alias)) {
|
|
32
|
+
return 'Alias can only contain alphanumeric characters, hyphens, and underscores';
|
|
33
|
+
}
|
|
34
|
+
// Check reserved names (case-insensitive)
|
|
35
|
+
if (RESERVED_ALIASES.includes(alias.toLowerCase())) {
|
|
36
|
+
return `Alias "${alias}" is reserved and cannot be used`;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
15
40
|
//# sourceMappingURL=server-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":";;AAyCA,8CAMC;AAYD,sCAiBC;AAvCD;;;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;AAED;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEvD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,KAAa;IACzC,eAAe;IACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC1C,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,0EAA0E,CAAC;IACpF,CAAC;IAED,0CAA0C;IAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,UAAU,KAAK,kCAAkC,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real-time HTTP log parser for plist shell wrapper
|
|
3
|
+
* Reads llama-server verbose logs from stdin, parses them with LogParser,
|
|
4
|
+
* and outputs compact single-line format to file while passing through all input
|
|
5
|
+
*
|
|
6
|
+
* Usage: node http-log-filter.js <http-log-path>
|
|
7
|
+
* Called with: node http-log-filter.js /path/to/file.http
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=http-log-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-log-filter.d.ts","sourceRoot":"","sources":["../../src/utils/http-log-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Real-time HTTP log parser for plist shell wrapper
|
|
4
|
+
* Reads llama-server verbose logs from stdin, parses them with LogParser,
|
|
5
|
+
* and outputs compact single-line format to file while passing through all input
|
|
6
|
+
*
|
|
7
|
+
* Usage: node http-log-filter.js <http-log-path>
|
|
8
|
+
* Called with: node http-log-filter.js /path/to/file.http
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const readline = __importStar(require("readline"));
|
|
46
|
+
const log_parser_js_1 = require("./log-parser.js");
|
|
47
|
+
const logFilePath = process.argv[2];
|
|
48
|
+
if (!logFilePath) {
|
|
49
|
+
console.error('[http-log-filter] ERROR: Missing log file path argument');
|
|
50
|
+
console.error('[http-log-filter] Usage: node http-log-filter.js <http-log-path>');
|
|
51
|
+
console.error('[http-log-filter] Args received:', process.argv);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Log startup for debugging
|
|
55
|
+
console.error(`[http-log-filter] Starting with log file: ${logFilePath}`);
|
|
56
|
+
const parser = new log_parser_js_1.LogParser();
|
|
57
|
+
const logStream = fs.createWriteStream(logFilePath, { flags: 'a' });
|
|
58
|
+
logStream.on('error', (err) => {
|
|
59
|
+
console.error(`[http-log-filter] ERROR writing to file: ${err.message}`);
|
|
60
|
+
});
|
|
61
|
+
// Create readline interface for stdin
|
|
62
|
+
const rl = readline.createInterface({
|
|
63
|
+
input: process.stdin,
|
|
64
|
+
crlfDelay: Infinity,
|
|
65
|
+
});
|
|
66
|
+
// Process each line
|
|
67
|
+
rl.on('line', (line) => {
|
|
68
|
+
// Pass through all lines to stdout (for stderr filtering)
|
|
69
|
+
console.log(line);
|
|
70
|
+
// Parse and write HTTP logs to file
|
|
71
|
+
if (line.includes('log_server_r')) {
|
|
72
|
+
parser.processLine(line, (compactLine) => {
|
|
73
|
+
logStream.write(compactLine + '\n');
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// Flush any remaining buffered logs on exit
|
|
78
|
+
process.on('exit', () => {
|
|
79
|
+
parser.flush((compactLine) => {
|
|
80
|
+
logStream.write(compactLine + '\n');
|
|
81
|
+
});
|
|
82
|
+
logStream.end();
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=http-log-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-log-filter.js","sourceRoot":"","sources":["../../src/utils/http-log-filter.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,mDAAqC;AACrC,mDAA4C;AAE5C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAClF,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,4BAA4B;AAC5B,OAAO,CAAC,KAAK,CAAC,6CAA6C,WAAW,EAAE,CAAC,CAAC;AAE1E,MAAM,MAAM,GAAG,IAAI,yBAAS,EAAE,CAAC;AAC/B,MAAM,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAEpE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,4CAA4C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,sCAAsC;AACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,SAAS,EAAE,QAAQ;CACpB,CAAC,CAAC;AAEH,oBAAoB;AACpB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;IACrB,0DAA0D;IAC1D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,oCAAoC;IACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YACvC,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,4CAA4C;AAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE;QAC3B,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-parser.d.ts","sourceRoot":"","sources":["../../src/utils/log-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAmC;IAEjF;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAsCxE;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAcpD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"log-parser.d.ts","sourceRoot":"","sources":["../../src/utils/log-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAmC;IAEjF;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAsCxE;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAcpD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAgB1B;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
package/dist/utils/log-parser.js
CHANGED
|
@@ -131,9 +131,10 @@ class LogParser {
|
|
|
131
131
|
let responseTimeMs = 0;
|
|
132
132
|
if (responseLine) {
|
|
133
133
|
const responseJson = this.extractJson(responseLine);
|
|
134
|
-
if (responseJson) {
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
if (responseJson && responseJson.usage) {
|
|
135
|
+
// Support both OpenAI and Anthropic formats
|
|
136
|
+
tokensIn = responseJson.usage.prompt_tokens || responseJson.usage.input_tokens || 0;
|
|
137
|
+
tokensOut = responseJson.usage.completion_tokens || responseJson.usage.output_tokens || 0;
|
|
137
138
|
responseTimeMs = this.extractResponseTime(responseJson);
|
|
138
139
|
}
|
|
139
140
|
}
|
|
@@ -230,6 +231,8 @@ class LogParser {
|
|
|
230
231
|
* Format compact log line
|
|
231
232
|
*/
|
|
232
233
|
formatCompactLine(entry) {
|
|
234
|
+
// Use dash for timing when not available (0ms is unrealistic, means no timing data)
|
|
235
|
+
const timing = entry.responseTimeMs > 0 ? entry.responseTimeMs.toString() : '-';
|
|
233
236
|
return [
|
|
234
237
|
entry.timestamp,
|
|
235
238
|
entry.method,
|
|
@@ -239,7 +242,7 @@ class LogParser {
|
|
|
239
242
|
`"${entry.userMessage}"`,
|
|
240
243
|
entry.tokensIn,
|
|
241
244
|
entry.tokensOut,
|
|
242
|
-
|
|
245
|
+
timing,
|
|
243
246
|
].join(' ');
|
|
244
247
|
}
|
|
245
248
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-parser.js","sourceRoot":"","sources":["../../src/utils/log-parser.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAcH,MAAa,SAAS;IAAtB;QACU,WAAM,GAAa,EAAE,CAAC;QACtB,gBAAW,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"log-parser.js","sourceRoot":"","sources":["../../src/utils/log-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,6 @@ export declare function formatFileSize(bytes: number): string;
|
|
|
12
12
|
* Returns the new archived filename
|
|
13
13
|
*/
|
|
14
14
|
export declare function rotateLogFile(logPath: string): Promise<string>;
|
|
15
|
-
/**
|
|
16
|
-
* Clear (truncate) a log file to zero bytes
|
|
17
|
-
*/
|
|
18
|
-
export declare function clearLogFile(logPath: string): Promise<void>;
|
|
19
15
|
/**
|
|
20
16
|
* Auto-rotate log files if they exceed threshold
|
|
21
17
|
* Returns true if rotation occurred, false otherwise
|
|
@@ -40,4 +36,63 @@ export declare function deleteArchivedLogs(serverId: string): Promise<{
|
|
|
40
36
|
count: number;
|
|
41
37
|
totalSize: number;
|
|
42
38
|
}>;
|
|
39
|
+
export interface LogFileInfo {
|
|
40
|
+
path: string;
|
|
41
|
+
size: number;
|
|
42
|
+
}
|
|
43
|
+
export interface ServerLogInfo {
|
|
44
|
+
serverId: string;
|
|
45
|
+
stdout: LogFileInfo;
|
|
46
|
+
stderr: LogFileInfo;
|
|
47
|
+
httpLog: LogFileInfo;
|
|
48
|
+
currentTotal: number;
|
|
49
|
+
archived: {
|
|
50
|
+
count: number;
|
|
51
|
+
totalSize: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface ServiceLogInfo {
|
|
55
|
+
stdout: LogFileInfo;
|
|
56
|
+
stderr: LogFileInfo;
|
|
57
|
+
currentTotal: number;
|
|
58
|
+
archived: {
|
|
59
|
+
count: number;
|
|
60
|
+
totalSize: number;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface AllLogInfo {
|
|
64
|
+
servers: ServerLogInfo[];
|
|
65
|
+
router: ServiceLogInfo;
|
|
66
|
+
admin: ServiceLogInfo;
|
|
67
|
+
summary: {
|
|
68
|
+
totalCurrent: number;
|
|
69
|
+
totalArchived: number;
|
|
70
|
+
grandTotal: number;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get log information for a specific server
|
|
75
|
+
*/
|
|
76
|
+
export declare function getServerLogInfo(serverId: string): Promise<ServerLogInfo>;
|
|
77
|
+
/**
|
|
78
|
+
* Get log information for router service
|
|
79
|
+
*/
|
|
80
|
+
export declare function getRouterLogInfo(): Promise<ServiceLogInfo>;
|
|
81
|
+
/**
|
|
82
|
+
* Get log information for admin service
|
|
83
|
+
*/
|
|
84
|
+
export declare function getAdminLogInfo(): Promise<ServiceLogInfo>;
|
|
85
|
+
/**
|
|
86
|
+
* Get log information for all services (servers, router, admin)
|
|
87
|
+
*/
|
|
88
|
+
export declare function getAllLogInfo(): Promise<AllLogInfo>;
|
|
89
|
+
/**
|
|
90
|
+
* Delete archived log files older than specified days
|
|
91
|
+
* @param afterDays Delete logs older than this many days (0 = delete all archived logs)
|
|
92
|
+
* @returns Count and total size of deleted files
|
|
93
|
+
*/
|
|
94
|
+
export declare function deleteOldArchivedLogs(afterDays: number): Promise<{
|
|
95
|
+
count: number;
|
|
96
|
+
totalSize: number;
|
|
97
|
+
}>;
|
|
43
98
|
//# sourceMappingURL=log-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-utils.d.ts","sourceRoot":"","sources":["../../src/utils/log-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BpE;
|
|
1
|
+
{"version":3,"file":"log-utils.d.ts","sourceRoot":"","sources":["../../src/utils/log-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BpE;AAGD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAY,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0BhD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAwBD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAyBD;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqB/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC,CAiBhE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CAiB/D;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CA8CzD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CA4CD"}
|
package/dist/utils/log-utils.js
CHANGED
|
@@ -36,10 +36,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.getFileSize = getFileSize;
|
|
37
37
|
exports.formatFileSize = formatFileSize;
|
|
38
38
|
exports.rotateLogFile = rotateLogFile;
|
|
39
|
-
exports.clearLogFile = clearLogFile;
|
|
40
39
|
exports.autoRotateIfNeeded = autoRotateIfNeeded;
|
|
41
40
|
exports.getArchivedLogInfo = getArchivedLogInfo;
|
|
42
41
|
exports.deleteArchivedLogs = deleteArchivedLogs;
|
|
42
|
+
exports.getServerLogInfo = getServerLogInfo;
|
|
43
|
+
exports.getRouterLogInfo = getRouterLogInfo;
|
|
44
|
+
exports.getAdminLogInfo = getAdminLogInfo;
|
|
45
|
+
exports.getAllLogInfo = getAllLogInfo;
|
|
46
|
+
exports.deleteOldArchivedLogs = deleteOldArchivedLogs;
|
|
43
47
|
const fs = __importStar(require("fs/promises"));
|
|
44
48
|
const path = __importStar(require("path"));
|
|
45
49
|
const file_utils_1 = require("./file-utils");
|
|
@@ -96,16 +100,6 @@ async function rotateLogFile(logPath) {
|
|
|
96
100
|
await fs.rename(logPath, archivedPath);
|
|
97
101
|
return archivedPath;
|
|
98
102
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Clear (truncate) a log file to zero bytes
|
|
101
|
-
*/
|
|
102
|
-
async function clearLogFile(logPath) {
|
|
103
|
-
if (!(await (0, file_utils_1.fileExists)(logPath))) {
|
|
104
|
-
throw new Error(`Log file does not exist: ${logPath}`);
|
|
105
|
-
}
|
|
106
|
-
// Truncate file to 0 bytes
|
|
107
|
-
await fs.truncate(logPath, 0);
|
|
108
|
-
}
|
|
109
103
|
/**
|
|
110
104
|
* Auto-rotate log files if they exceed threshold
|
|
111
105
|
* Returns true if rotation occurred, false otherwise
|
|
@@ -187,4 +181,149 @@ async function deleteArchivedLogs(serverId) {
|
|
|
187
181
|
}
|
|
188
182
|
return { count, totalSize };
|
|
189
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Get log information for a specific server
|
|
186
|
+
*/
|
|
187
|
+
async function getServerLogInfo(serverId) {
|
|
188
|
+
const logsDir = (0, file_utils_1.getLogsDir)();
|
|
189
|
+
const stdoutPath = path.join(logsDir, `${serverId}.stdout`);
|
|
190
|
+
const stderrPath = path.join(logsDir, `${serverId}.stderr`);
|
|
191
|
+
const httpLogPath = path.join(logsDir, `${serverId}.http`);
|
|
192
|
+
const stdoutSize = (await (0, file_utils_1.fileExists)(stdoutPath)) ? await getFileSize(stdoutPath) : 0;
|
|
193
|
+
const stderrSize = (await (0, file_utils_1.fileExists)(stderrPath)) ? await getFileSize(stderrPath) : 0;
|
|
194
|
+
const httpLogSize = (await (0, file_utils_1.fileExists)(httpLogPath)) ? await getFileSize(httpLogPath) : 0;
|
|
195
|
+
const archived = await getArchivedLogInfo(serverId);
|
|
196
|
+
return {
|
|
197
|
+
serverId,
|
|
198
|
+
stdout: { path: stdoutPath, size: stdoutSize },
|
|
199
|
+
stderr: { path: stderrPath, size: stderrSize },
|
|
200
|
+
httpLog: { path: httpLogPath, size: httpLogSize },
|
|
201
|
+
currentTotal: stdoutSize + stderrSize + httpLogSize,
|
|
202
|
+
archived,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get log information for router service
|
|
207
|
+
*/
|
|
208
|
+
async function getRouterLogInfo() {
|
|
209
|
+
const logsDir = (0, file_utils_1.getLogsDir)();
|
|
210
|
+
const stdoutPath = path.join(logsDir, 'router.stdout');
|
|
211
|
+
const stderrPath = path.join(logsDir, 'router.stderr');
|
|
212
|
+
const stdoutSize = (await (0, file_utils_1.fileExists)(stdoutPath)) ? await getFileSize(stdoutPath) : 0;
|
|
213
|
+
const stderrSize = (await (0, file_utils_1.fileExists)(stderrPath)) ? await getFileSize(stderrPath) : 0;
|
|
214
|
+
const archived = await getArchivedLogInfo('router');
|
|
215
|
+
return {
|
|
216
|
+
stdout: { path: stdoutPath, size: stdoutSize },
|
|
217
|
+
stderr: { path: stderrPath, size: stderrSize },
|
|
218
|
+
currentTotal: stdoutSize + stderrSize,
|
|
219
|
+
archived,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get log information for admin service
|
|
224
|
+
*/
|
|
225
|
+
async function getAdminLogInfo() {
|
|
226
|
+
const logsDir = (0, file_utils_1.getLogsDir)();
|
|
227
|
+
const stdoutPath = path.join(logsDir, 'admin.stdout');
|
|
228
|
+
const stderrPath = path.join(logsDir, 'admin.stderr');
|
|
229
|
+
const stdoutSize = (await (0, file_utils_1.fileExists)(stdoutPath)) ? await getFileSize(stdoutPath) : 0;
|
|
230
|
+
const stderrSize = (await (0, file_utils_1.fileExists)(stderrPath)) ? await getFileSize(stderrPath) : 0;
|
|
231
|
+
const archived = await getArchivedLogInfo('admin');
|
|
232
|
+
return {
|
|
233
|
+
stdout: { path: stdoutPath, size: stdoutSize },
|
|
234
|
+
stderr: { path: stderrPath, size: stderrSize },
|
|
235
|
+
currentTotal: stdoutSize + stderrSize,
|
|
236
|
+
archived,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get log information for all services (servers, router, admin)
|
|
241
|
+
*/
|
|
242
|
+
async function getAllLogInfo() {
|
|
243
|
+
const serversDir = (0, file_utils_1.getServersDir)();
|
|
244
|
+
const servers = [];
|
|
245
|
+
// Scan all server configs
|
|
246
|
+
try {
|
|
247
|
+
const files = await fs.readdir(serversDir);
|
|
248
|
+
const serverFiles = files.filter((f) => f.endsWith('.json'));
|
|
249
|
+
for (const file of serverFiles) {
|
|
250
|
+
try {
|
|
251
|
+
const configPath = path.join(serversDir, file);
|
|
252
|
+
const configData = await fs.readFile(configPath, 'utf-8');
|
|
253
|
+
const config = JSON.parse(configData);
|
|
254
|
+
const serverInfo = await getServerLogInfo(config.id);
|
|
255
|
+
servers.push(serverInfo);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Skip invalid config files
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Servers directory doesn't exist or can't be read
|
|
265
|
+
}
|
|
266
|
+
// Get router and admin logs
|
|
267
|
+
const router = await getRouterLogInfo();
|
|
268
|
+
const admin = await getAdminLogInfo();
|
|
269
|
+
// Calculate summary
|
|
270
|
+
const serversCurrent = servers.reduce((sum, s) => sum + s.currentTotal, 0);
|
|
271
|
+
const serversArchived = servers.reduce((sum, s) => sum + s.archived.totalSize, 0);
|
|
272
|
+
const totalCurrent = serversCurrent + router.currentTotal + admin.currentTotal;
|
|
273
|
+
const totalArchived = serversArchived + router.archived.totalSize + admin.archived.totalSize;
|
|
274
|
+
return {
|
|
275
|
+
servers,
|
|
276
|
+
router,
|
|
277
|
+
admin,
|
|
278
|
+
summary: {
|
|
279
|
+
totalCurrent,
|
|
280
|
+
totalArchived,
|
|
281
|
+
grandTotal: totalCurrent + totalArchived,
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Delete archived log files older than specified days
|
|
287
|
+
* @param afterDays Delete logs older than this many days (0 = delete all archived logs)
|
|
288
|
+
* @returns Count and total size of deleted files
|
|
289
|
+
*/
|
|
290
|
+
async function deleteOldArchivedLogs(afterDays) {
|
|
291
|
+
const logsDir = (0, file_utils_1.getLogsDir)();
|
|
292
|
+
let count = 0;
|
|
293
|
+
let totalSize = 0;
|
|
294
|
+
try {
|
|
295
|
+
const files = await fs.readdir(logsDir);
|
|
296
|
+
// Pattern matches archived logs: *.YYYY-MM-DD-HH-MM-SS.*
|
|
297
|
+
const archivedPattern = /\.\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}\./;
|
|
298
|
+
const now = Date.now();
|
|
299
|
+
const thresholdMs = afterDays * 24 * 60 * 60 * 1000;
|
|
300
|
+
for (const file of files) {
|
|
301
|
+
// Only process archived log files (with timestamp in name)
|
|
302
|
+
if (!archivedPattern.test(file)) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const filePath = path.join(logsDir, file);
|
|
306
|
+
try {
|
|
307
|
+
const stats = await fs.stat(filePath);
|
|
308
|
+
const fileAge = now - stats.mtime.getTime();
|
|
309
|
+
// Delete if older than threshold
|
|
310
|
+
if (fileAge >= thresholdMs) {
|
|
311
|
+
const size = stats.size;
|
|
312
|
+
await fs.unlink(filePath);
|
|
313
|
+
count++;
|
|
314
|
+
totalSize += size;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// Skip files that can't be stat'd or deleted
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
// Directory doesn't exist or can't be read
|
|
325
|
+
return { count: 0, totalSize: 0 };
|
|
326
|
+
}
|
|
327
|
+
return { count, totalSize };
|
|
328
|
+
}
|
|
190
329
|
//# sourceMappingURL=log-utils.js.map
|