@appkit/llamacpp-cli 2.0.0 → 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 +271 -277
- 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.map +1 -1
- package/dist/lib/router-server.js +22 -12
- 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,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.labelMigration = exports.LabelMigration = void 0;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const fs = __importStar(require("fs/promises"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const state_manager_1 = require("./state-manager");
|
|
44
|
+
const router_manager_1 = require("./router-manager");
|
|
45
|
+
const admin_manager_1 = require("./admin-manager");
|
|
46
|
+
const launchctl_manager_1 = require("./launchctl-manager");
|
|
47
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
48
|
+
const OLD_LABEL_PREFIX = 'com.llama.';
|
|
49
|
+
const NEW_LABEL_PREFIX = 'studio.appkit.llamacpp-cli.';
|
|
50
|
+
const MIGRATION_MARKER = '.label-migration-done';
|
|
51
|
+
const BACKUP_FILE = '.migration-backup.json';
|
|
52
|
+
class LabelMigration {
|
|
53
|
+
constructor() {
|
|
54
|
+
this.configDir = (0, file_utils_1.getConfigDir)();
|
|
55
|
+
this.launchAgentsDir = (0, file_utils_1.getLaunchAgentsDir)();
|
|
56
|
+
this.markerPath = path.join(this.configDir, MIGRATION_MARKER);
|
|
57
|
+
this.backupPath = path.join(this.configDir, BACKUP_FILE);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if migration is needed
|
|
61
|
+
*/
|
|
62
|
+
async needsMigration() {
|
|
63
|
+
// If marker exists, migration already done
|
|
64
|
+
if (await (0, file_utils_1.fileExists)(this.markerPath)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Check if any configs have old labels
|
|
68
|
+
const oldLabels = await this.detectOldLabels();
|
|
69
|
+
return oldLabels.length > 0;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Detect services with old labels
|
|
73
|
+
*/
|
|
74
|
+
async detectOldLabels() {
|
|
75
|
+
const oldLabels = [];
|
|
76
|
+
// Check server configs
|
|
77
|
+
const servers = await state_manager_1.stateManager.getAllServers();
|
|
78
|
+
for (const server of servers) {
|
|
79
|
+
if (server.label.startsWith(OLD_LABEL_PREFIX)) {
|
|
80
|
+
oldLabels.push(server.label);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Check router config
|
|
84
|
+
const routerStatus = await router_manager_1.routerManager.getStatus();
|
|
85
|
+
if (routerStatus?.config.label.startsWith(OLD_LABEL_PREFIX)) {
|
|
86
|
+
oldLabels.push(routerStatus.config.label);
|
|
87
|
+
}
|
|
88
|
+
// Check admin config
|
|
89
|
+
const adminStatus = await admin_manager_1.adminManager.getStatus();
|
|
90
|
+
if (adminStatus?.config.label.startsWith(OLD_LABEL_PREFIX)) {
|
|
91
|
+
oldLabels.push(adminStatus.config.label);
|
|
92
|
+
}
|
|
93
|
+
return oldLabels;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create backup of current state
|
|
97
|
+
*/
|
|
98
|
+
async createBackup() {
|
|
99
|
+
const servers = await state_manager_1.stateManager.getAllServers();
|
|
100
|
+
const routerStatus = await router_manager_1.routerManager.getStatus();
|
|
101
|
+
const adminStatus = await admin_manager_1.adminManager.getStatus();
|
|
102
|
+
// Detect running services
|
|
103
|
+
const runningServices = [];
|
|
104
|
+
for (const server of servers) {
|
|
105
|
+
const status = await launchctl_manager_1.launchctlManager.getServiceStatus(server.label);
|
|
106
|
+
if (status.isRunning) {
|
|
107
|
+
runningServices.push(server.label);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (routerStatus?.status.isRunning) {
|
|
111
|
+
runningServices.push(routerStatus.config.label);
|
|
112
|
+
}
|
|
113
|
+
if (adminStatus?.status.isRunning) {
|
|
114
|
+
runningServices.push(adminStatus.config.label);
|
|
115
|
+
}
|
|
116
|
+
const backup = {
|
|
117
|
+
timestamp: new Date().toISOString(),
|
|
118
|
+
servers,
|
|
119
|
+
router: routerStatus?.config || null,
|
|
120
|
+
admin: adminStatus?.config || null,
|
|
121
|
+
runningServices,
|
|
122
|
+
};
|
|
123
|
+
await (0, file_utils_1.writeJsonAtomic)(this.backupPath, backup);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Migrate a single server
|
|
127
|
+
*/
|
|
128
|
+
async migrateServer(server, wasRunning) {
|
|
129
|
+
// Stop if running
|
|
130
|
+
if (wasRunning) {
|
|
131
|
+
try {
|
|
132
|
+
await launchctl_manager_1.launchctlManager.unloadService(server.plistPath);
|
|
133
|
+
await launchctl_manager_1.launchctlManager.waitForServiceStop(server.label, 5000);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// Service might already be stopped
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Delete old plist
|
|
140
|
+
try {
|
|
141
|
+
await fs.unlink(server.plistPath);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
// File might not exist
|
|
145
|
+
}
|
|
146
|
+
// Update config with new label
|
|
147
|
+
const newLabel = server.label.replace(OLD_LABEL_PREFIX, NEW_LABEL_PREFIX);
|
|
148
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
149
|
+
const updatedConfig = {
|
|
150
|
+
...server,
|
|
151
|
+
label: newLabel,
|
|
152
|
+
plistPath: newPlistPath,
|
|
153
|
+
};
|
|
154
|
+
// Save updated config
|
|
155
|
+
await state_manager_1.stateManager.saveServerConfig(updatedConfig);
|
|
156
|
+
// Generate new plist
|
|
157
|
+
await launchctl_manager_1.launchctlManager.createPlist(updatedConfig);
|
|
158
|
+
// Restart if was running
|
|
159
|
+
if (wasRunning) {
|
|
160
|
+
await launchctl_manager_1.launchctlManager.loadService(newPlistPath);
|
|
161
|
+
await launchctl_manager_1.launchctlManager.startService(newLabel);
|
|
162
|
+
// Model servers need more time to load models into memory (15s vs 5s for router/admin)
|
|
163
|
+
const started = await launchctl_manager_1.launchctlManager.waitForServiceStart(newLabel, 15000);
|
|
164
|
+
if (!started) {
|
|
165
|
+
throw new Error(`Failed to start server ${server.id} after migration`);
|
|
166
|
+
}
|
|
167
|
+
// Update status in config
|
|
168
|
+
const status = await launchctl_manager_1.launchctlManager.getServiceStatus(newLabel);
|
|
169
|
+
await state_manager_1.stateManager.updateServerConfig(server.id, {
|
|
170
|
+
status: 'running',
|
|
171
|
+
pid: status.pid || undefined,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Migrate router service
|
|
177
|
+
*/
|
|
178
|
+
async migrateRouter(wasRunning) {
|
|
179
|
+
const routerStatus = await router_manager_1.routerManager.getStatus();
|
|
180
|
+
if (!routerStatus)
|
|
181
|
+
return;
|
|
182
|
+
const router = routerStatus.config;
|
|
183
|
+
// Stop if running
|
|
184
|
+
if (wasRunning) {
|
|
185
|
+
try {
|
|
186
|
+
await router_manager_1.routerManager.unloadService(router.plistPath);
|
|
187
|
+
await router_manager_1.routerManager.waitForServiceStop(router.label, 5000);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
// Service might already be stopped
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Delete old plist
|
|
194
|
+
try {
|
|
195
|
+
await fs.unlink(router.plistPath);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
// File might not exist
|
|
199
|
+
}
|
|
200
|
+
// Update config with new label
|
|
201
|
+
const newLabel = 'studio.appkit.llamacpp-cli.router';
|
|
202
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
203
|
+
const updatedConfig = {
|
|
204
|
+
...router,
|
|
205
|
+
label: newLabel,
|
|
206
|
+
plistPath: newPlistPath,
|
|
207
|
+
};
|
|
208
|
+
// Save updated config
|
|
209
|
+
await router_manager_1.routerManager.saveConfig(updatedConfig);
|
|
210
|
+
// Generate new plist
|
|
211
|
+
await router_manager_1.routerManager.createPlist(updatedConfig);
|
|
212
|
+
// Restart if was running
|
|
213
|
+
if (wasRunning) {
|
|
214
|
+
await router_manager_1.routerManager.loadService(newPlistPath);
|
|
215
|
+
await router_manager_1.routerManager.startService(newLabel);
|
|
216
|
+
const started = await router_manager_1.routerManager.waitForServiceStart(newLabel, 5000);
|
|
217
|
+
if (!started) {
|
|
218
|
+
throw new Error('Failed to start router after migration');
|
|
219
|
+
}
|
|
220
|
+
// Update status in config
|
|
221
|
+
const status = await router_manager_1.routerManager.getServiceStatus(newLabel);
|
|
222
|
+
await router_manager_1.routerManager.updateConfig({
|
|
223
|
+
status: 'running',
|
|
224
|
+
pid: status.pid || undefined,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Migrate admin service
|
|
230
|
+
*/
|
|
231
|
+
async migrateAdmin(wasRunning) {
|
|
232
|
+
const adminStatus = await admin_manager_1.adminManager.getStatus();
|
|
233
|
+
if (!adminStatus)
|
|
234
|
+
return;
|
|
235
|
+
const admin = adminStatus.config;
|
|
236
|
+
// Stop if running
|
|
237
|
+
if (wasRunning) {
|
|
238
|
+
try {
|
|
239
|
+
await admin_manager_1.adminManager.unloadService(admin.plistPath);
|
|
240
|
+
await admin_manager_1.adminManager.waitForServiceStop(admin.label, 5000);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
// Service might already be stopped
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Delete old plist
|
|
247
|
+
try {
|
|
248
|
+
await fs.unlink(admin.plistPath);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
// File might not exist
|
|
252
|
+
}
|
|
253
|
+
// Update config with new label
|
|
254
|
+
const newLabel = 'studio.appkit.llamacpp-cli.admin';
|
|
255
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
256
|
+
const updatedConfig = {
|
|
257
|
+
...admin,
|
|
258
|
+
label: newLabel,
|
|
259
|
+
plistPath: newPlistPath,
|
|
260
|
+
};
|
|
261
|
+
// Save updated config
|
|
262
|
+
await admin_manager_1.adminManager.saveConfig(updatedConfig);
|
|
263
|
+
// Generate new plist
|
|
264
|
+
await admin_manager_1.adminManager.createPlist(updatedConfig);
|
|
265
|
+
// Restart if was running
|
|
266
|
+
if (wasRunning) {
|
|
267
|
+
await admin_manager_1.adminManager.loadService(newPlistPath);
|
|
268
|
+
await admin_manager_1.adminManager.startService(newLabel);
|
|
269
|
+
const started = await admin_manager_1.adminManager.waitForServiceStart(newLabel, 5000);
|
|
270
|
+
if (!started) {
|
|
271
|
+
throw new Error('Failed to start admin service after migration');
|
|
272
|
+
}
|
|
273
|
+
// Update status in config
|
|
274
|
+
const status = await admin_manager_1.adminManager.getServiceStatus(newLabel);
|
|
275
|
+
await admin_manager_1.adminManager.updateConfig({
|
|
276
|
+
status: 'running',
|
|
277
|
+
pid: status.pid || undefined,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Migrate all services
|
|
283
|
+
*/
|
|
284
|
+
async migrateAll(onProgress) {
|
|
285
|
+
const failedServices = [];
|
|
286
|
+
try {
|
|
287
|
+
// Create backup
|
|
288
|
+
onProgress?.('Creating backup...', 0, 1);
|
|
289
|
+
await this.createBackup();
|
|
290
|
+
// Load backup to get running services
|
|
291
|
+
const backup = await (0, file_utils_1.readJson)(this.backupPath);
|
|
292
|
+
// Count total services to migrate
|
|
293
|
+
const totalServices = backup.servers.length +
|
|
294
|
+
(backup.router ? 1 : 0) +
|
|
295
|
+
(backup.admin ? 1 : 0);
|
|
296
|
+
let current = 0;
|
|
297
|
+
// Migrate servers
|
|
298
|
+
for (const server of backup.servers) {
|
|
299
|
+
try {
|
|
300
|
+
const wasRunning = backup.runningServices.includes(server.label);
|
|
301
|
+
onProgress?.(`Migrating server: ${server.id}`, ++current, totalServices);
|
|
302
|
+
await this.migrateServer(server, wasRunning);
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
failedServices.push(server.label);
|
|
306
|
+
console.error(chalk_1.default.red(`Failed to migrate server ${server.id}:`), error);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Migrate router
|
|
310
|
+
if (backup.router) {
|
|
311
|
+
try {
|
|
312
|
+
const wasRunning = backup.runningServices.includes(backup.router.label);
|
|
313
|
+
onProgress?.('Migrating router', ++current, totalServices);
|
|
314
|
+
await this.migrateRouter(wasRunning);
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
failedServices.push(backup.router.label);
|
|
318
|
+
console.error(chalk_1.default.red('Failed to migrate router:'), error);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Migrate admin
|
|
322
|
+
if (backup.admin) {
|
|
323
|
+
try {
|
|
324
|
+
const wasRunning = backup.runningServices.includes(backup.admin.label);
|
|
325
|
+
onProgress?.('Migrating admin', ++current, totalServices);
|
|
326
|
+
await this.migrateAdmin(wasRunning);
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
failedServices.push(backup.admin.label);
|
|
330
|
+
console.error(chalk_1.default.red('Failed to migrate admin:'), error);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// If any service failed, rollback
|
|
334
|
+
if (failedServices.length > 0) {
|
|
335
|
+
onProgress?.('Migration failed, rolling back...', 0, 1);
|
|
336
|
+
await this.rollback();
|
|
337
|
+
return {
|
|
338
|
+
success: false,
|
|
339
|
+
migratedCount: totalServices - failedServices.length,
|
|
340
|
+
failedServices,
|
|
341
|
+
error: `Failed to migrate ${failedServices.length} service(s)`,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
// Mark migration complete
|
|
345
|
+
await fs.writeFile(this.markerPath, new Date().toISOString());
|
|
346
|
+
return {
|
|
347
|
+
success: true,
|
|
348
|
+
migratedCount: totalServices,
|
|
349
|
+
failedServices: [],
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
return {
|
|
354
|
+
success: false,
|
|
355
|
+
migratedCount: 0,
|
|
356
|
+
failedServices,
|
|
357
|
+
error: error.message,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Rollback migration
|
|
363
|
+
*/
|
|
364
|
+
async rollback() {
|
|
365
|
+
if (!(await (0, file_utils_1.fileExists)(this.backupPath))) {
|
|
366
|
+
throw new Error('No backup found to rollback');
|
|
367
|
+
}
|
|
368
|
+
const backup = await (0, file_utils_1.readJson)(this.backupPath);
|
|
369
|
+
// Restore server configs
|
|
370
|
+
for (const server of backup.servers) {
|
|
371
|
+
const newLabel = server.label.replace(OLD_LABEL_PREFIX, NEW_LABEL_PREFIX);
|
|
372
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
373
|
+
// Stop new service
|
|
374
|
+
try {
|
|
375
|
+
await launchctl_manager_1.launchctlManager.unloadService(newPlistPath);
|
|
376
|
+
await fs.unlink(newPlistPath);
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
// Ignore errors
|
|
380
|
+
}
|
|
381
|
+
// Restore old config
|
|
382
|
+
await state_manager_1.stateManager.saveServerConfig(server);
|
|
383
|
+
// Recreate old plist
|
|
384
|
+
await launchctl_manager_1.launchctlManager.createPlist(server);
|
|
385
|
+
// Restart if was running
|
|
386
|
+
if (backup.runningServices.includes(server.label)) {
|
|
387
|
+
await launchctl_manager_1.launchctlManager.loadService(server.plistPath);
|
|
388
|
+
await launchctl_manager_1.launchctlManager.startService(server.label);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// Restore router
|
|
392
|
+
if (backup.router) {
|
|
393
|
+
const newLabel = 'studio.appkit.llamacpp-cli.router';
|
|
394
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
395
|
+
// Stop new service
|
|
396
|
+
try {
|
|
397
|
+
await router_manager_1.routerManager.unloadService(newPlistPath);
|
|
398
|
+
await fs.unlink(newPlistPath);
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
// Ignore errors
|
|
402
|
+
}
|
|
403
|
+
// Restore old config
|
|
404
|
+
await router_manager_1.routerManager.saveConfig(backup.router);
|
|
405
|
+
// Recreate old plist
|
|
406
|
+
await router_manager_1.routerManager.createPlist(backup.router);
|
|
407
|
+
// Restart if was running
|
|
408
|
+
if (backup.runningServices.includes(backup.router.label)) {
|
|
409
|
+
await router_manager_1.routerManager.loadService(backup.router.plistPath);
|
|
410
|
+
await router_manager_1.routerManager.startService(backup.router.label);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
// Restore admin
|
|
414
|
+
if (backup.admin) {
|
|
415
|
+
const newLabel = 'studio.appkit.llamacpp-cli.admin';
|
|
416
|
+
const newPlistPath = path.join(this.launchAgentsDir, `${newLabel}.plist`);
|
|
417
|
+
// Stop new service
|
|
418
|
+
try {
|
|
419
|
+
await admin_manager_1.adminManager.unloadService(newPlistPath);
|
|
420
|
+
await fs.unlink(newPlistPath);
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
// Ignore errors
|
|
424
|
+
}
|
|
425
|
+
// Restore old config
|
|
426
|
+
await admin_manager_1.adminManager.saveConfig(backup.admin);
|
|
427
|
+
// Recreate old plist
|
|
428
|
+
await admin_manager_1.adminManager.createPlist(backup.admin);
|
|
429
|
+
// Restart if was running
|
|
430
|
+
if (backup.runningServices.includes(backup.admin.label)) {
|
|
431
|
+
await admin_manager_1.adminManager.loadService(backup.admin.plistPath);
|
|
432
|
+
await admin_manager_1.adminManager.startService(backup.admin.label);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
console.log(chalk_1.default.green('✓ Rollback complete'));
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Get backup info if exists
|
|
439
|
+
*/
|
|
440
|
+
async getBackupInfo() {
|
|
441
|
+
if (!(await (0, file_utils_1.fileExists)(this.backupPath))) {
|
|
442
|
+
return null;
|
|
443
|
+
}
|
|
444
|
+
return await (0, file_utils_1.readJson)(this.backupPath);
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Delete backup file
|
|
448
|
+
*/
|
|
449
|
+
async deleteBackup() {
|
|
450
|
+
if (await (0, file_utils_1.fileExists)(this.backupPath)) {
|
|
451
|
+
await fs.unlink(this.backupPath);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
exports.LabelMigration = LabelMigration;
|
|
456
|
+
// Export singleton instance
|
|
457
|
+
exports.labelMigration = new LabelMigration();
|
|
458
|
+
//# sourceMappingURL=label-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-migration.js","sourceRoot":"","sources":["../../src/lib/label-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,15 @@ export interface ServiceStatus {
|
|
|
6
6
|
lastExitReason?: string;
|
|
7
7
|
}
|
|
8
8
|
export declare class LaunchctlManager {
|
|
9
|
+
/**
|
|
10
|
+
* Check if plist needs updating (old format without wrapper)
|
|
11
|
+
*/
|
|
12
|
+
needsPlistUpdate(plistPath: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Get the path to the wrapper script
|
|
15
|
+
* Handles both development (src/) and production (dist/) scenarios
|
|
16
|
+
*/
|
|
17
|
+
private getWrapperPath;
|
|
9
18
|
/**
|
|
10
19
|
* Generate plist XML content for a server
|
|
11
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchctl-manager.d.ts","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,WAAW,aAAa;IAC5B,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,gBAAgB;IAC3B;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"launchctl-manager.d.ts","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,WAAW,aAAa;IAC5B,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,gBAAgB;IAC3B;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB3D;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IA2F3C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD;;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,aAAa,CAAC;IA4C7D;;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;CAW5E;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -34,39 +34,82 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.launchctlManager = exports.LaunchctlManager = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
37
38
|
const fs = __importStar(require("fs/promises"));
|
|
38
39
|
const process_utils_1 = require("../utils/process-utils");
|
|
39
40
|
const file_utils_1 = require("../utils/file-utils");
|
|
40
41
|
class LaunchctlManager {
|
|
42
|
+
/**
|
|
43
|
+
* Check if plist needs updating (old format without wrapper)
|
|
44
|
+
*/
|
|
45
|
+
async needsPlistUpdate(plistPath) {
|
|
46
|
+
try {
|
|
47
|
+
const plistContent = await fs.readFile(plistPath, 'utf-8');
|
|
48
|
+
// Check if it uses the wrapper (new format) or node directly (old format)
|
|
49
|
+
const hasWrapper = plistContent.includes('/launchers/llamacpp-server');
|
|
50
|
+
const hasProcessType = plistContent.includes('<key>ProcessType</key>');
|
|
51
|
+
// Needs update if missing wrapper or ProcessType
|
|
52
|
+
return !hasWrapper || !hasProcessType;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// If plist doesn't exist or can't be read, it needs to be created
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the path to the wrapper script
|
|
61
|
+
* Handles both development (src/) and production (dist/) scenarios
|
|
62
|
+
*/
|
|
63
|
+
getWrapperPath() {
|
|
64
|
+
// Try relative to current module location (works for both dev and prod)
|
|
65
|
+
let wrapperPath = path.join(__dirname, '..', 'launchers', 'llamacpp-server');
|
|
66
|
+
if (require('fs').existsSync(wrapperPath)) {
|
|
67
|
+
return wrapperPath;
|
|
68
|
+
}
|
|
69
|
+
// Try from the CLI binary location (global install)
|
|
70
|
+
const binPath = process.argv[1];
|
|
71
|
+
wrapperPath = path.join(path.dirname(binPath), '..', 'launchers', 'llamacpp-server');
|
|
72
|
+
if (require('fs').existsSync(wrapperPath)) {
|
|
73
|
+
return wrapperPath;
|
|
74
|
+
}
|
|
75
|
+
throw new Error('Could not locate llamacpp-server wrapper script');
|
|
76
|
+
}
|
|
41
77
|
/**
|
|
42
78
|
* Generate plist XML content for a server
|
|
43
79
|
*/
|
|
44
80
|
generatePlist(config) {
|
|
45
|
-
//
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
81
|
+
// Get path to wrapper script
|
|
82
|
+
const wrapperPath = this.getWrapperPath();
|
|
83
|
+
// Get node executable path (for wrapper to use)
|
|
84
|
+
const nodePath = process.execPath;
|
|
85
|
+
// Build arguments for llamacpp internal server-wrapper command
|
|
86
|
+
// First arg to wrapper is node path, then comes our CLI arguments
|
|
87
|
+
const wrapperArgs = [
|
|
88
|
+
wrapperPath,
|
|
89
|
+
nodePath, // Wrapper needs this to find node
|
|
90
|
+
'internal',
|
|
91
|
+
'server-wrapper',
|
|
92
|
+
'--http-log-path', config.httpLogPath,
|
|
54
93
|
];
|
|
94
|
+
// Add verbose flag if enabled
|
|
95
|
+
if (config.verbose) {
|
|
96
|
+
wrapperArgs.push('--verbose');
|
|
97
|
+
}
|
|
98
|
+
// Add llama-server arguments
|
|
99
|
+
wrapperArgs.push('--', '--model', config.modelPath, '--host', config.host, '--port', config.port.toString(), '--threads', config.threads.toString(), '--ctx-size', config.ctxSize.toString(), '--gpu-layers', config.gpuLayers === -1 ? 'all' : config.gpuLayers.toString());
|
|
55
100
|
// Add flags
|
|
56
101
|
if (config.embeddings)
|
|
57
|
-
|
|
102
|
+
wrapperArgs.push('--embeddings');
|
|
58
103
|
if (config.jinja)
|
|
59
|
-
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
args.push('--log-verbose');
|
|
63
|
-
}
|
|
104
|
+
wrapperArgs.push('--jinja');
|
|
105
|
+
// Always enable verbose logging (so HTTP logs are generated)
|
|
106
|
+
wrapperArgs.push('--log-verbose');
|
|
64
107
|
// Add custom flags
|
|
65
108
|
if (config.customFlags && config.customFlags.length > 0) {
|
|
66
|
-
|
|
109
|
+
wrapperArgs.push(...config.customFlags);
|
|
67
110
|
}
|
|
68
|
-
//
|
|
69
|
-
const
|
|
111
|
+
// Build ProgramArguments array for plist (wrapper handles node execution)
|
|
112
|
+
const programArguments = wrapperArgs.map(arg => ` <string>${arg}</string>`).join('\n');
|
|
70
113
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
71
114
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
72
115
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
@@ -77,7 +120,7 @@ class LaunchctlManager {
|
|
|
77
120
|
|
|
78
121
|
<key>ProgramArguments</key>
|
|
79
122
|
<array>
|
|
80
|
-
${
|
|
123
|
+
${programArguments}
|
|
81
124
|
</array>
|
|
82
125
|
|
|
83
126
|
<key>RunAtLoad</key>
|
|
@@ -100,6 +143,9 @@ ${argsXml}
|
|
|
100
143
|
<key>WorkingDirectory</key>
|
|
101
144
|
<string>/tmp</string>
|
|
102
145
|
|
|
146
|
+
<key>ProcessType</key>
|
|
147
|
+
<string>Background</string>
|
|
148
|
+
|
|
103
149
|
<key>ThrottleInterval</key>
|
|
104
150
|
<integer>10</integer>
|
|
105
151
|
</dict>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchctl-manager.js","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"launchctl-manager.js","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":"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"}
|