@appkit/llamacpp-cli 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +84 -0
  3. package/dist/cli.js +80 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/config.d.ts +1 -0
  6. package/dist/commands/config.d.ts.map +1 -1
  7. package/dist/commands/config.js +167 -12
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/router/config.d.ts +10 -0
  10. package/dist/commands/router/config.d.ts.map +1 -0
  11. package/dist/commands/router/config.js +95 -0
  12. package/dist/commands/router/config.js.map +1 -0
  13. package/dist/commands/router/restart.d.ts +2 -0
  14. package/dist/commands/router/restart.d.ts.map +1 -0
  15. package/dist/commands/router/restart.js +39 -0
  16. package/dist/commands/router/restart.js.map +1 -0
  17. package/dist/commands/router/start.d.ts +2 -0
  18. package/dist/commands/router/start.d.ts.map +1 -0
  19. package/dist/commands/router/start.js +60 -0
  20. package/dist/commands/router/start.js.map +1 -0
  21. package/dist/commands/router/status.d.ts +2 -0
  22. package/dist/commands/router/status.d.ts.map +1 -0
  23. package/dist/commands/router/status.js +116 -0
  24. package/dist/commands/router/status.js.map +1 -0
  25. package/dist/commands/router/stop.d.ts +2 -0
  26. package/dist/commands/router/stop.d.ts.map +1 -0
  27. package/dist/commands/router/stop.js +36 -0
  28. package/dist/commands/router/stop.js.map +1 -0
  29. package/dist/lib/router-manager.d.ts +103 -0
  30. package/dist/lib/router-manager.d.ts.map +1 -0
  31. package/dist/lib/router-manager.js +393 -0
  32. package/dist/lib/router-manager.js.map +1 -0
  33. package/dist/lib/router-server.d.ts +52 -0
  34. package/dist/lib/router-server.d.ts.map +1 -0
  35. package/dist/lib/router-server.js +373 -0
  36. package/dist/lib/router-server.js.map +1 -0
  37. package/dist/types/router-config.d.ts +18 -0
  38. package/dist/types/router-config.d.ts.map +1 -0
  39. package/dist/types/router-config.js +3 -0
  40. package/dist/types/router-config.js.map +1 -0
  41. package/package.json +1 -1
  42. package/src/cli.ts +81 -0
  43. package/src/commands/config.ts +146 -14
  44. package/src/commands/router/config.ts +109 -0
  45. package/src/commands/router/restart.ts +36 -0
  46. package/src/commands/router/start.ts +60 -0
  47. package/src/commands/router/status.ts +119 -0
  48. package/src/commands/router/stop.ts +33 -0
  49. package/src/lib/router-manager.ts +413 -0
  50. package/src/lib/router-server.ts +407 -0
  51. package/src/types/router-config.ts +24 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.routerConfigCommand = routerConfigCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const router_manager_1 = require("../../lib/router-manager");
9
+ async function routerConfigCommand(options) {
10
+ try {
11
+ // Check if router exists
12
+ const config = await router_manager_1.routerManager.loadConfig();
13
+ if (!config) {
14
+ throw new Error('Router configuration not found. Use "llamacpp router start" to create it.');
15
+ }
16
+ // Check if any options were provided
17
+ const hasOptions = options.port || options.host || options.timeout || options.healthInterval;
18
+ if (!hasOptions) {
19
+ throw new Error('No configuration options provided. Use --port, --host, --timeout, or --health-interval');
20
+ }
21
+ const isRunning = config.status === 'running';
22
+ // Warn if running and no restart flag
23
+ if (isRunning && !options.restart) {
24
+ console.log(chalk_1.default.yellow('⚠️ Router is running. Changes will take effect after restart.'));
25
+ console.log(chalk_1.default.dim(' Use --restart flag to apply changes immediately.\n'));
26
+ }
27
+ // Prepare updates
28
+ const updates = {};
29
+ const changes = [];
30
+ if (options.port !== undefined) {
31
+ changes.push(`Port: ${config.port} → ${options.port}`);
32
+ updates.port = options.port;
33
+ }
34
+ if (options.host !== undefined) {
35
+ changes.push(`Host: ${config.host} → ${options.host}`);
36
+ updates.host = options.host;
37
+ }
38
+ if (options.timeout !== undefined) {
39
+ changes.push(`Request Timeout: ${config.requestTimeout}ms → ${options.timeout}ms`);
40
+ updates.requestTimeout = options.timeout;
41
+ }
42
+ if (options.healthInterval !== undefined) {
43
+ changes.push(`Health Check Interval: ${config.healthCheckInterval}ms → ${options.healthInterval}ms`);
44
+ updates.healthCheckInterval = options.healthInterval;
45
+ }
46
+ // Display changes
47
+ console.log(chalk_1.default.blue('📝 Configuration changes:'));
48
+ console.log();
49
+ changes.forEach(change => {
50
+ console.log(chalk_1.default.dim(` ${change}`));
51
+ });
52
+ console.log();
53
+ // Apply changes
54
+ if (isRunning && options.restart) {
55
+ console.log(chalk_1.default.blue('⏹️ Stopping router...'));
56
+ await router_manager_1.routerManager.stop();
57
+ }
58
+ // Update config
59
+ await router_manager_1.routerManager.updateConfig(updates);
60
+ // Regenerate plist if port or host changed
61
+ if (options.port !== undefined || options.host !== undefined) {
62
+ const updatedConfig = await router_manager_1.routerManager.loadConfig();
63
+ if (updatedConfig) {
64
+ await router_manager_1.routerManager.createPlist(updatedConfig);
65
+ }
66
+ }
67
+ // Restart if requested
68
+ if (isRunning && options.restart) {
69
+ console.log(chalk_1.default.blue('▶️ Starting router...'));
70
+ await router_manager_1.routerManager.start();
71
+ const finalConfig = await router_manager_1.routerManager.loadConfig();
72
+ console.log();
73
+ console.log(chalk_1.default.green('✅ Router restarted with new configuration'));
74
+ console.log();
75
+ console.log(chalk_1.default.dim(`Endpoint: http://${finalConfig?.host}:${finalConfig?.port}`));
76
+ }
77
+ else {
78
+ console.log(chalk_1.default.green('✅ Configuration updated'));
79
+ if (isRunning) {
80
+ console.log();
81
+ console.log(chalk_1.default.yellow('⚠️ Restart required to apply changes:'));
82
+ console.log(chalk_1.default.dim(' llamacpp router restart'));
83
+ }
84
+ else {
85
+ console.log();
86
+ console.log(chalk_1.default.dim('Start router to use new configuration:'));
87
+ console.log(chalk_1.default.dim(' llamacpp router start'));
88
+ }
89
+ }
90
+ }
91
+ catch (error) {
92
+ throw new Error(`Failed to update router configuration: ${error.message}`);
93
+ }
94
+ }
95
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/router/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function routerRestartCommand(): Promise<void>;
2
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../src/commands/router/restart.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC1D"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.routerRestartCommand = routerRestartCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const router_manager_1 = require("../../lib/router-manager");
9
+ async function routerRestartCommand() {
10
+ console.log(chalk_1.default.blue('🔄 Restarting router...'));
11
+ try {
12
+ // Check if router exists
13
+ const config = await router_manager_1.routerManager.loadConfig();
14
+ if (!config) {
15
+ throw new Error('Router configuration not found. Use "llamacpp router start" to create it.');
16
+ }
17
+ // Restart router
18
+ await router_manager_1.routerManager.restart();
19
+ // Get updated config
20
+ const updatedConfig = await router_manager_1.routerManager.loadConfig();
21
+ if (!updatedConfig) {
22
+ throw new Error('Failed to load router configuration after restart');
23
+ }
24
+ // Display success
25
+ console.log();
26
+ console.log(chalk_1.default.green('✅ Router restarted successfully!'));
27
+ console.log();
28
+ console.log(chalk_1.default.dim(`Endpoint: http://${updatedConfig.host}:${updatedConfig.port}`));
29
+ console.log();
30
+ console.log(chalk_1.default.dim('Quick commands:'));
31
+ console.log(chalk_1.default.dim(' Status: llamacpp router status'));
32
+ console.log(chalk_1.default.dim(' Stop: llamacpp router stop'));
33
+ console.log(chalk_1.default.dim(` Logs: tail -f ${updatedConfig.stderrPath}`));
34
+ }
35
+ catch (error) {
36
+ throw new Error(`Failed to restart router: ${error.message}`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../src/commands/router/restart.ts"],"names":[],"mappings":";;;;;AAGA,oDAgCC;AAnCD,kDAA0B;AAC1B,6DAAyD;AAElD,KAAK,UAAU,oBAAoB;IACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,8BAAa,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,iBAAiB;QACjB,MAAM,8BAAa,CAAC,OAAO,EAAE,CAAC;QAE9B,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,8BAAa,CAAC,UAAU,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function routerStartCommand(): Promise<void>;
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/router/start.ts"],"names":[],"mappings":"AAIA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDxD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.routerStartCommand = routerStartCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const router_manager_1 = require("../../lib/router-manager");
9
+ const state_manager_1 = require("../../lib/state-manager");
10
+ async function routerStartCommand() {
11
+ console.log(chalk_1.default.blue('▶️ Starting router...'));
12
+ try {
13
+ // Initialize
14
+ await router_manager_1.routerManager.initialize();
15
+ await state_manager_1.stateManager.initialize();
16
+ // Check if router already exists
17
+ const existingConfig = await router_manager_1.routerManager.loadConfig();
18
+ if (existingConfig && existingConfig.status === 'running') {
19
+ console.log(chalk_1.default.yellow(`⚠️ Router is already running on port ${existingConfig.port}`));
20
+ return;
21
+ }
22
+ // Start router
23
+ await router_manager_1.routerManager.start();
24
+ // Get updated config
25
+ const config = await router_manager_1.routerManager.loadConfig();
26
+ if (!config) {
27
+ throw new Error('Failed to load router configuration after start');
28
+ }
29
+ // Get running servers to show available models
30
+ const servers = await state_manager_1.stateManager.getAllServers();
31
+ const runningServers = servers.filter(s => s.status === 'running');
32
+ // Display success
33
+ console.log();
34
+ console.log(chalk_1.default.green('✅ Router started successfully!'));
35
+ console.log();
36
+ console.log(chalk_1.default.dim(`Endpoint: http://${config.host}:${config.port}`));
37
+ console.log(chalk_1.default.dim(`Available models: ${runningServers.length}`));
38
+ if (runningServers.length > 0) {
39
+ console.log();
40
+ console.log(chalk_1.default.dim('Models:'));
41
+ runningServers.forEach(server => {
42
+ console.log(chalk_1.default.dim(` • ${server.modelName} (port ${server.port})`));
43
+ });
44
+ }
45
+ else {
46
+ console.log();
47
+ console.log(chalk_1.default.yellow('⚠️ No running servers found. Start a server first:'));
48
+ console.log(chalk_1.default.dim(' llamacpp server create <model>'));
49
+ }
50
+ console.log();
51
+ console.log(chalk_1.default.dim('Quick commands:'));
52
+ console.log(chalk_1.default.dim(` Status: llamacpp router status`));
53
+ console.log(chalk_1.default.dim(` Stop: llamacpp router stop`));
54
+ console.log(chalk_1.default.dim(` Logs: tail -f ${config.stderrPath}`));
55
+ }
56
+ catch (error) {
57
+ throw new Error(`Failed to start router: ${error.message}`);
58
+ }
59
+ }
60
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/router/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function routerStatusCommand(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/router/status.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkHzD"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.routerStatusCommand = routerStatusCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const router_manager_1 = require("../../lib/router-manager");
9
+ const state_manager_1 = require("../../lib/state-manager");
10
+ async function routerStatusCommand() {
11
+ try {
12
+ // Get router status
13
+ const result = await router_manager_1.routerManager.getStatus();
14
+ if (!result) {
15
+ console.log(chalk_1.default.yellow('Router not configured'));
16
+ console.log();
17
+ console.log(chalk_1.default.dim('Create and start router:'));
18
+ console.log(chalk_1.default.dim(' llamacpp router start'));
19
+ return;
20
+ }
21
+ const { config, status } = result;
22
+ // Calculate uptime if running
23
+ let uptime = 'N/A';
24
+ if (status.isRunning && config.lastStarted) {
25
+ const startTime = new Date(config.lastStarted).getTime();
26
+ const now = Date.now();
27
+ const uptimeSeconds = Math.floor((now - startTime) / 1000);
28
+ const hours = Math.floor(uptimeSeconds / 3600);
29
+ const minutes = Math.floor((uptimeSeconds % 3600) / 60);
30
+ const seconds = uptimeSeconds % 60;
31
+ if (hours > 0) {
32
+ uptime = `${hours}h ${minutes}m`;
33
+ }
34
+ else if (minutes > 0) {
35
+ uptime = `${minutes}m ${seconds}s`;
36
+ }
37
+ else {
38
+ uptime = `${seconds}s`;
39
+ }
40
+ }
41
+ // Get running servers
42
+ const servers = await state_manager_1.stateManager.getAllServers();
43
+ const runningServers = servers.filter(s => s.status === 'running');
44
+ // Display status
45
+ console.log();
46
+ console.log(chalk_1.default.bold('Router Status'));
47
+ console.log(chalk_1.default.dim('─'.repeat(50)));
48
+ console.log();
49
+ // Status badge
50
+ const statusColor = status.isRunning ? chalk_1.default.green : chalk_1.default.gray;
51
+ const statusBadge = status.isRunning ? '● RUN' : '○ OFF';
52
+ console.log(`Status: ${statusColor(statusBadge)}`);
53
+ if (status.isRunning) {
54
+ console.log(`PID: ${status.pid || 'N/A'}`);
55
+ console.log(`Uptime: ${uptime}`);
56
+ }
57
+ console.log(`Port: ${config.port}`);
58
+ console.log(`Host: ${config.host}`);
59
+ console.log(`Endpoint: http://${config.host}:${config.port}`);
60
+ console.log();
61
+ // Available models
62
+ console.log(chalk_1.default.bold('Available Models'));
63
+ console.log(chalk_1.default.dim('─'.repeat(50)));
64
+ console.log();
65
+ if (runningServers.length === 0) {
66
+ console.log(chalk_1.default.dim('No running servers found'));
67
+ console.log();
68
+ console.log(chalk_1.default.yellow('⚠️ Start a server first:'));
69
+ console.log(chalk_1.default.dim(' llamacpp server create <model>'));
70
+ }
71
+ else {
72
+ runningServers.forEach(server => {
73
+ console.log(` ${chalk_1.default.green('●')} ${server.modelName}`);
74
+ console.log(chalk_1.default.dim(` Port: ${server.port}`));
75
+ console.log(chalk_1.default.dim(` Backend: http://${server.host}:${server.port}`));
76
+ console.log();
77
+ });
78
+ }
79
+ // Configuration
80
+ console.log(chalk_1.default.bold('Configuration'));
81
+ console.log(chalk_1.default.dim('─'.repeat(50)));
82
+ console.log();
83
+ console.log(`Health Check Interval: ${config.healthCheckInterval}ms`);
84
+ console.log(`Request Timeout: ${config.requestTimeout}ms`);
85
+ console.log();
86
+ // System paths
87
+ console.log(chalk_1.default.bold('System Paths'));
88
+ console.log(chalk_1.default.dim('─'.repeat(50)));
89
+ console.log();
90
+ console.log(chalk_1.default.dim(`Config: ${config.plistPath.replace(config.label + '.plist', 'router.json').replace('LaunchAgents', '.llamacpp')}`));
91
+ console.log(chalk_1.default.dim(`Plist: ${config.plistPath}`));
92
+ console.log(chalk_1.default.dim(`Stdout: ${config.stdoutPath}`));
93
+ console.log(chalk_1.default.dim(`Stderr: ${config.stderrPath}`));
94
+ console.log();
95
+ // Quick commands
96
+ console.log(chalk_1.default.bold('Quick Commands'));
97
+ console.log(chalk_1.default.dim('─'.repeat(50)));
98
+ console.log();
99
+ if (status.isRunning) {
100
+ console.log(chalk_1.default.dim(' Stop: llamacpp router stop'));
101
+ console.log(chalk_1.default.dim(' Restart: llamacpp router restart'));
102
+ console.log(chalk_1.default.dim(` Logs: tail -f ${config.stderrPath}`));
103
+ console.log(chalk_1.default.dim(' Config: llamacpp router config --port <port> --restart'));
104
+ }
105
+ else {
106
+ console.log(chalk_1.default.dim(' Start: llamacpp router start'));
107
+ console.log(chalk_1.default.dim(' Config: llamacpp router config --port <port>'));
108
+ console.log(chalk_1.default.dim(` Logs: cat ${config.stderrPath}`));
109
+ }
110
+ console.log();
111
+ }
112
+ catch (error) {
113
+ throw new Error(`Failed to get router status: ${error.message}`);
114
+ }
115
+ }
116
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/router/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function routerStopCommand(): Promise<void>;
2
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/router/stop.ts"],"names":[],"mappings":"AAGA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BvD"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.routerStopCommand = routerStopCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const router_manager_1 = require("../../lib/router-manager");
9
+ async function routerStopCommand() {
10
+ console.log(chalk_1.default.blue('⏹️ Stopping router...'));
11
+ try {
12
+ // Check if router exists
13
+ const config = await router_manager_1.routerManager.loadConfig();
14
+ if (!config) {
15
+ throw new Error('Router configuration not found. Use "llamacpp router start" to create it.');
16
+ }
17
+ // Check if already stopped
18
+ if (config.status !== 'running') {
19
+ console.log(chalk_1.default.yellow('⚠️ Router is not running'));
20
+ return;
21
+ }
22
+ // Stop router
23
+ await router_manager_1.routerManager.stop();
24
+ // Display success
25
+ console.log();
26
+ console.log(chalk_1.default.green('✅ Router stopped successfully'));
27
+ console.log();
28
+ console.log(chalk_1.default.dim('Quick commands:'));
29
+ console.log(chalk_1.default.dim(' Start: llamacpp router start'));
30
+ console.log(chalk_1.default.dim(' Status: llamacpp router status'));
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Failed to stop router: ${error.message}`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/router/stop.ts"],"names":[],"mappings":";;;;;AAGA,8CA6BC;AAhCD,kDAA0B;AAC1B,6DAAyD;AAElD,KAAK,UAAU,iBAAiB;IACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,8BAAa,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,cAAc;QACd,MAAM,8BAAa,CAAC,IAAI,EAAE,CAAC;QAE3B,kBAAkB;QAClB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { RouterConfig } from '../types/router-config';
2
+ export interface RouterServiceStatus {
3
+ isRunning: boolean;
4
+ pid: number | null;
5
+ exitCode: number | null;
6
+ lastExitReason?: string;
7
+ }
8
+ export declare class RouterManager {
9
+ private configDir;
10
+ private logsDir;
11
+ private configPath;
12
+ private launchAgentsDir;
13
+ constructor();
14
+ /**
15
+ * Initialize router directories
16
+ */
17
+ initialize(): Promise<void>;
18
+ /**
19
+ * Get default router configuration
20
+ */
21
+ getDefaultConfig(): RouterConfig;
22
+ /**
23
+ * Load router configuration
24
+ */
25
+ loadConfig(): Promise<RouterConfig | null>;
26
+ /**
27
+ * Save router configuration
28
+ */
29
+ saveConfig(config: RouterConfig): Promise<void>;
30
+ /**
31
+ * Update router configuration with partial changes
32
+ */
33
+ updateConfig(updates: Partial<RouterConfig>): Promise<void>;
34
+ /**
35
+ * Delete router configuration
36
+ */
37
+ deleteConfig(): Promise<void>;
38
+ /**
39
+ * Generate plist XML content for the router
40
+ */
41
+ generatePlist(config: RouterConfig): string;
42
+ /**
43
+ * Create and write plist file
44
+ */
45
+ createPlist(config: RouterConfig): Promise<void>;
46
+ /**
47
+ * Delete plist file
48
+ */
49
+ deletePlist(config: RouterConfig): Promise<void>;
50
+ /**
51
+ * Load service (register with launchctl)
52
+ */
53
+ loadService(plistPath: string): Promise<void>;
54
+ /**
55
+ * Unload service (unregister from launchctl)
56
+ */
57
+ unloadService(plistPath: string): Promise<void>;
58
+ /**
59
+ * Start service
60
+ */
61
+ startService(label: string): Promise<void>;
62
+ /**
63
+ * Stop service
64
+ */
65
+ stopService(label: string): Promise<void>;
66
+ /**
67
+ * Get service status from launchctl
68
+ */
69
+ getServiceStatus(label: string): Promise<RouterServiceStatus>;
70
+ /**
71
+ * Interpret exit code to human-readable reason
72
+ */
73
+ private interpretExitCode;
74
+ /**
75
+ * Wait for service to start (with timeout)
76
+ */
77
+ waitForServiceStart(label: string, timeoutMs?: number): Promise<boolean>;
78
+ /**
79
+ * Wait for service to stop (with timeout)
80
+ */
81
+ waitForServiceStop(label: string, timeoutMs?: number): Promise<boolean>;
82
+ /**
83
+ * Start router service
84
+ */
85
+ start(): Promise<void>;
86
+ /**
87
+ * Stop router service
88
+ */
89
+ stop(): Promise<void>;
90
+ /**
91
+ * Restart router service
92
+ */
93
+ restart(): Promise<void>;
94
+ /**
95
+ * Get router status
96
+ */
97
+ getStatus(): Promise<{
98
+ config: RouterConfig;
99
+ status: RouterServiceStatus;
100
+ } | null>;
101
+ }
102
+ export declare const routerManager: RouterManager;
103
+ //# sourceMappingURL=router-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-manager.d.ts","sourceRoot":"","sources":["../../src/lib/router-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAatD,MAAM,WAAW,mBAAmB;IAClC,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,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;;IAShC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,gBAAgB,IAAI,YAAY;IAgBhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAOhD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASjE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAkE3C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;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,mBAAmB,CAAC;IAyCnE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5E;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAE,GAAG,IAAI,CAAC;CASzF;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}