@appkit/llamacpp-cli 1.2.0 → 1.3.1

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 (39) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +52 -18
  3. package/bin/llamacpp +15 -5
  4. package/dist/cli.js +25 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/config.d.ts +11 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +157 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/create.d.ts +2 -0
  11. package/dist/commands/create.d.ts.map +1 -1
  12. package/dist/commands/create.js +18 -1
  13. package/dist/commands/create.js.map +1 -1
  14. package/dist/commands/server-show.d.ts.map +1 -1
  15. package/dist/commands/server-show.js +5 -1
  16. package/dist/commands/server-show.js.map +1 -1
  17. package/dist/lib/config-generator.d.ts +2 -0
  18. package/dist/lib/config-generator.d.ts.map +1 -1
  19. package/dist/lib/config-generator.js +7 -2
  20. package/dist/lib/config-generator.js.map +1 -1
  21. package/dist/lib/launchctl-manager.d.ts.map +1 -1
  22. package/dist/lib/launchctl-manager.js +5 -0
  23. package/dist/lib/launchctl-manager.js.map +1 -1
  24. package/dist/lib/state-manager.d.ts +4 -0
  25. package/dist/lib/state-manager.d.ts.map +1 -1
  26. package/dist/lib/state-manager.js +11 -0
  27. package/dist/lib/state-manager.js.map +1 -1
  28. package/dist/types/server-config.d.ts +2 -0
  29. package/dist/types/server-config.d.ts.map +1 -1
  30. package/dist/types/server-config.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/cli.ts +25 -0
  33. package/src/commands/config.ts +177 -0
  34. package/src/commands/create.ts +22 -1
  35. package/src/commands/server-show.ts +5 -1
  36. package/src/lib/config-generator.ts +9 -2
  37. package/src/lib/launchctl-manager.ts +6 -0
  38. package/src/lib/state-manager.ts +12 -0
  39. package/src/types/server-config.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../src/lib/config-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqB,MAAM,wBAAwB,CAAC;AAIzE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa;IAyB7D;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC;IA4CxB;;OAEG;IACG,uBAAuB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;CAYxF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../src/lib/config-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqB,MAAM,wBAAwB,CAAC;AAIzE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa;IAyB7D;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC;IAgDxB;;OAEG;IACG,uBAAuB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;CAaxF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -73,12 +73,14 @@ class ConfigGenerator {
73
73
  // Calculate smart defaults
74
74
  const smartDefaults = this.calculateSmartDefaults(modelSize);
75
75
  // Apply user overrides
76
+ const host = options?.host ?? '127.0.0.1'; // Default to localhost (secure)
76
77
  const threads = options?.threads ?? smartDefaults.threads;
77
78
  const ctxSize = options?.ctxSize ?? smartDefaults.ctxSize;
78
79
  const gpuLayers = options?.gpuLayers ?? smartDefaults.gpuLayers;
79
80
  const embeddings = options?.embeddings ?? true;
80
81
  const jinja = options?.jinja ?? true;
81
- const verbose = options?.verbose ?? false; // Default to false (simple logging)
82
+ const verbose = options?.verbose ?? true; // Default to true (HTTP request logging)
83
+ const customFlags = options?.customFlags; // Optional custom flags
82
84
  // Generate server ID
83
85
  const id = (0, server_config_1.sanitizeModelName)(modelName);
84
86
  // Generate paths
@@ -92,12 +94,14 @@ class ConfigGenerator {
92
94
  modelPath,
93
95
  modelName,
94
96
  port,
97
+ host,
95
98
  threads,
96
99
  ctxSize,
97
100
  gpuLayers,
98
101
  embeddings,
99
102
  jinja,
100
103
  verbose,
104
+ customFlags,
101
105
  status: 'stopped',
102
106
  createdAt: new Date().toISOString(),
103
107
  plistPath,
@@ -113,12 +117,13 @@ class ConfigGenerator {
113
117
  async mergeWithGlobalDefaults(options) {
114
118
  const globalConfig = await state_manager_1.stateManager.loadGlobalConfig();
115
119
  return {
120
+ host: options?.host ?? '127.0.0.1',
116
121
  threads: options?.threads ?? globalConfig.defaults.threads,
117
122
  ctxSize: options?.ctxSize ?? globalConfig.defaults.ctxSize,
118
123
  gpuLayers: options?.gpuLayers ?? globalConfig.defaults.gpuLayers,
119
124
  embeddings: options?.embeddings ?? true,
120
125
  jinja: options?.jinja ?? true,
121
- verbose: options?.verbose ?? false,
126
+ verbose: options?.verbose ?? true,
122
127
  };
123
128
  }
124
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../src/lib/config-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../src/lib/config-generator.ts"],"names":[],"mappings":"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"}
@@ -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;IA+D3C;;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"}
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;IAqE3C;;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"}
@@ -46,6 +46,7 @@ class LaunchctlManager {
46
46
  const args = [
47
47
  '/opt/homebrew/bin/llama-server',
48
48
  '--model', config.modelPath,
49
+ '--host', config.host,
49
50
  '--port', config.port.toString(),
50
51
  '--threads', config.threads.toString(),
51
52
  '--ctx-size', config.ctxSize.toString(),
@@ -60,6 +61,10 @@ class LaunchctlManager {
60
61
  if (config.verbose) {
61
62
  args.push('--log-verbose');
62
63
  }
64
+ // Add custom flags
65
+ if (config.customFlags && config.customFlags.length > 0) {
66
+ args.push(...config.customFlags);
67
+ }
63
68
  // Generate XML array elements
64
69
  const argsXml = args.map(arg => ` <string>${arg}</string>`).join('\n');
65
70
  return `<?xml version="1.0" encoding="UTF-8"?>
@@ -1 +1 @@
1
- {"version":3,"file":"launchctl-manager.js","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launchctl-manager.js","sourceRoot":"","sources":["../../src/lib/launchctl-manager.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,10 @@ export declare class StateManager {
26
26
  * Save a server configuration
27
27
  */
28
28
  saveServerConfig(config: ServerConfig): Promise<void>;
29
+ /**
30
+ * Update a server configuration with partial changes
31
+ */
32
+ updateServerConfig(id: string, updates: Partial<ServerConfig>): Promise<void>;
29
33
  /**
30
34
  * Delete a server configuration
31
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/lib/state-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAyB,MAAM,wBAAwB,CAAC;AAc7E,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;;IASjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAK/C;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQhE;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAmB9C;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAiBvE;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYlE;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAI3C;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/lib/state-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAyB,MAAM,wBAAwB,CAAC;AAc7E,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;;IASjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAK/C;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQhE;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASnF;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAmB9C;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAiBvE;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYlE;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAI3C;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -92,6 +92,17 @@ class StateManager {
92
92
  const configPath = path.join(this.serversDir, `${config.id}.json`);
93
93
  await (0, file_utils_1.writeJsonAtomic)(configPath, config);
94
94
  }
95
+ /**
96
+ * Update a server configuration with partial changes
97
+ */
98
+ async updateServerConfig(id, updates) {
99
+ const existingConfig = await this.loadServerConfig(id);
100
+ if (!existingConfig) {
101
+ throw new Error(`Server configuration not found: ${id}`);
102
+ }
103
+ const updatedConfig = { ...existingConfig, ...updates };
104
+ await this.saveServerConfig(updatedConfig);
105
+ }
95
106
  /**
96
107
  * Delete a server configuration
97
108
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/lib/state-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/lib/state-manager.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,14 @@ export interface ServerConfig {
4
4
  modelPath: string;
5
5
  modelName: string;
6
6
  port: number;
7
+ host: string;
7
8
  threads: number;
8
9
  ctxSize: number;
9
10
  gpuLayers: number;
10
11
  embeddings: boolean;
11
12
  jinja: boolean;
12
13
  verbose: boolean;
14
+ customFlags?: string[];
13
15
  status: ServerStatus;
14
16
  pid?: number;
15
17
  createdAt: string;
@@ -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;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;IAGjB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D"}
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;IAGrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":";;AAoCA,8CAMC;AAVD;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAW,yBAAyB;SAC3D,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAI,wCAAwC;SAC1E,WAAW,EAAE,CAAsB,YAAY;SAC/C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAU,yBAAyB;AAChE,CAAC"}
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/types/server-config.ts"],"names":[],"mappings":";;AAsCA,8CAMC;AAVD;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAW,yBAAyB;SAC3D,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAI,wCAAwC;SAC1E,WAAW,EAAE,CAAsB,YAAY;SAC/C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAU,yBAAyB;AAChE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appkit/llamacpp-cli",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "description": "CLI tool to manage local llama.cpp servers on macOS",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {
package/src/cli.ts CHANGED
@@ -15,6 +15,7 @@ import { logsCommand } from './commands/logs';
15
15
  import { searchCommand } from './commands/search';
16
16
  import { showCommand } from './commands/show';
17
17
  import { serverShowCommand } from './commands/server-show';
18
+ import { serverConfigCommand } from './commands/config';
18
19
 
19
20
  const program = new Command();
20
21
 
@@ -122,10 +123,12 @@ server
122
123
  .description('Create and start a new llama-server instance')
123
124
  .argument('<model>', 'Model filename or path')
124
125
  .option('-p, --port <number>', 'Port number (default: auto-assign)', parseInt)
126
+ .option('-h, --host <address>', 'Bind address (default: 127.0.0.1, use 0.0.0.0 for remote access)')
125
127
  .option('-t, --threads <number>', 'Thread count (default: auto)', parseInt)
126
128
  .option('-c, --ctx-size <number>', 'Context size (default: auto)', parseInt)
127
129
  .option('-g, --gpu-layers <number>', 'GPU layers (default: 60)', parseInt)
128
130
  .option('-v, --verbose', 'Enable verbose HTTP logging (detailed request/response info)')
131
+ .option('-f, --flags <flags>', 'Additional llama-server flags (comma-separated, e.g., "--pooling,mean")')
129
132
  .action(async (model: string, options) => {
130
133
  try {
131
134
  await createCommand(model, options);
@@ -149,6 +152,28 @@ server
149
152
  }
150
153
  });
151
154
 
155
+ // Update server configuration
156
+ server
157
+ .command('config')
158
+ .description('Update server configuration parameters')
159
+ .argument('<identifier>', 'Server identifier: port (9000), server ID (llama-3-2-3b), or partial model name')
160
+ .option('-h, --host <address>', 'Update bind address (127.0.0.1 for localhost, 0.0.0.0 for remote access)')
161
+ .option('-t, --threads <number>', 'Update thread count', parseInt)
162
+ .option('-c, --ctx-size <number>', 'Update context size', parseInt)
163
+ .option('-g, --gpu-layers <number>', 'Update GPU layers', parseInt)
164
+ .option('-v, --verbose', 'Enable verbose logging')
165
+ .option('--no-verbose', 'Disable verbose logging')
166
+ .option('-f, --flags <flags>', 'Update custom llama-server flags (comma-separated, empty string to clear)')
167
+ .option('-r, --restart', 'Automatically restart server if running')
168
+ .action(async (identifier: string, options) => {
169
+ try {
170
+ await serverConfigCommand(identifier, options);
171
+ } catch (error) {
172
+ console.error(chalk.red('❌ Error:'), (error as Error).message);
173
+ process.exit(1);
174
+ }
175
+ });
176
+
152
177
  // Start an existing server
153
178
  server
154
179
  .command('start')
@@ -0,0 +1,177 @@
1
+ import chalk from 'chalk';
2
+ import { stateManager } from '../lib/state-manager';
3
+ import { statusChecker } from '../lib/status-checker';
4
+ import { launchctlManager } from '../lib/launchctl-manager';
5
+ import { configGenerator } from '../lib/config-generator';
6
+
7
+ export interface ConfigUpdateOptions {
8
+ host?: string;
9
+ threads?: number;
10
+ ctxSize?: number;
11
+ gpuLayers?: number;
12
+ verbose?: boolean;
13
+ flags?: string;
14
+ restart?: boolean;
15
+ }
16
+
17
+ export async function serverConfigCommand(
18
+ identifier: string,
19
+ options: ConfigUpdateOptions
20
+ ): Promise<void> {
21
+ // Find the server
22
+ const server = await stateManager.findServer(identifier);
23
+
24
+ if (!server) {
25
+ console.error(chalk.red(`❌ Server not found: ${identifier}`));
26
+ console.log(chalk.dim('\nAvailable servers:'));
27
+ const allServers = await stateManager.getAllServers();
28
+ if (allServers.length === 0) {
29
+ console.log(chalk.dim(' (none)'));
30
+ console.log(chalk.dim('\nCreate a server: llamacpp server create <model-filename>'));
31
+ } else {
32
+ allServers.forEach(s => {
33
+ console.log(chalk.dim(` - ${s.id} (port ${s.port})`));
34
+ });
35
+ }
36
+ process.exit(1);
37
+ }
38
+
39
+ // Check if any config options were provided
40
+ const hasChanges = options.host !== undefined ||
41
+ options.threads !== undefined ||
42
+ options.ctxSize !== undefined ||
43
+ options.gpuLayers !== undefined ||
44
+ options.verbose !== undefined ||
45
+ options.flags !== undefined;
46
+
47
+ if (!hasChanges) {
48
+ console.error(chalk.red('❌ No configuration changes specified'));
49
+ console.log(chalk.dim('\nAvailable options:'));
50
+ console.log(chalk.dim(' --host <address> Bind address (127.0.0.1 or 0.0.0.0)'));
51
+ console.log(chalk.dim(' --threads <n> Number of threads'));
52
+ console.log(chalk.dim(' --ctx-size <n> Context size'));
53
+ console.log(chalk.dim(' --gpu-layers <n> GPU layers'));
54
+ console.log(chalk.dim(' --verbose Enable verbose logging'));
55
+ console.log(chalk.dim(' --no-verbose Disable verbose logging'));
56
+ console.log(chalk.dim(' --flags <flags> Custom llama-server flags (comma-separated)'));
57
+ console.log(chalk.dim(' --restart Auto-restart if running'));
58
+ console.log(chalk.dim('\nExample:'));
59
+ console.log(chalk.dim(` llamacpp server config ${server.id} --ctx-size 8192 --restart`));
60
+ console.log(chalk.dim(` llamacpp server config ${server.id} --flags="--pooling,mean" --restart`));
61
+ process.exit(1);
62
+ }
63
+
64
+ // Check current status
65
+ const updatedServer = await statusChecker.updateServerStatus(server);
66
+ const wasRunning = updatedServer.status === 'running';
67
+
68
+ if (wasRunning && !options.restart) {
69
+ console.warn(chalk.yellow('⚠️ Server is currently running'));
70
+ console.log(chalk.dim('Changes will require a restart to take effect.'));
71
+ console.log(chalk.dim('Use --restart flag to automatically restart the server.\n'));
72
+ }
73
+
74
+ // Show what will change
75
+ console.log(chalk.bold('Configuration Changes:'));
76
+ console.log('─'.repeat(70));
77
+
78
+ if (options.host !== undefined) {
79
+ console.log(`${chalk.bold('Host:')} ${chalk.dim(server.host)} → ${chalk.green(options.host)}`);
80
+
81
+ // Security warning for 0.0.0.0
82
+ if (options.host === '0.0.0.0') {
83
+ console.log(chalk.yellow('\n⚠️ WARNING: Binding to 0.0.0.0 allows remote access from any network interface.'));
84
+ console.log(chalk.yellow(' This exposes your server to your local network and potentially the internet.'));
85
+ console.log(chalk.yellow(' Use 127.0.0.1 for localhost-only access (recommended for local development).\n'));
86
+ }
87
+ }
88
+ if (options.threads !== undefined) {
89
+ console.log(`${chalk.bold('Threads:')} ${chalk.dim(server.threads.toString())} → ${chalk.green(options.threads.toString())}`);
90
+ }
91
+ if (options.ctxSize !== undefined) {
92
+ console.log(`${chalk.bold('Context Size:')} ${chalk.dim(server.ctxSize.toLocaleString())} → ${chalk.green(options.ctxSize.toLocaleString())}`);
93
+ }
94
+ if (options.gpuLayers !== undefined) {
95
+ console.log(`${chalk.bold('GPU Layers:')} ${chalk.dim(server.gpuLayers.toString())} → ${chalk.green(options.gpuLayers.toString())}`);
96
+ }
97
+ if (options.verbose !== undefined) {
98
+ const oldValue = server.verbose ? 'enabled' : 'disabled';
99
+ const newValue = options.verbose ? 'enabled' : 'disabled';
100
+ console.log(`${chalk.bold('Verbose Logs:')} ${chalk.dim(oldValue)} → ${chalk.green(newValue)}`);
101
+ }
102
+ if (options.flags !== undefined) {
103
+ const oldValue = server.customFlags?.join(' ') || 'none';
104
+ const newValue = options.flags || 'none';
105
+ console.log(`${chalk.bold('Custom Flags:')} ${chalk.dim(oldValue)} → ${chalk.green(newValue)}`);
106
+ }
107
+ console.log('');
108
+
109
+ // Unload service if running and restart flag is set (forces plist re-read)
110
+ if (wasRunning && options.restart) {
111
+ console.log(chalk.dim('Stopping server...'));
112
+ await launchctlManager.stopService(server.label);
113
+ await launchctlManager.unloadService(server.plistPath);
114
+
115
+ // Wait a moment for clean shutdown
116
+ await new Promise(resolve => setTimeout(resolve, 1000));
117
+ }
118
+
119
+ // Parse custom flags if provided
120
+ let customFlags: string[] | undefined;
121
+ if (options.flags !== undefined) {
122
+ if (options.flags === '') {
123
+ // Empty string means clear flags
124
+ customFlags = undefined;
125
+ } else {
126
+ customFlags = options.flags.split(',').map(f => f.trim()).filter(f => f.length > 0);
127
+ }
128
+ }
129
+
130
+ // Update configuration
131
+ const updatedConfig = {
132
+ ...server,
133
+ ...(options.host !== undefined && { host: options.host }),
134
+ ...(options.threads !== undefined && { threads: options.threads }),
135
+ ...(options.ctxSize !== undefined && { ctxSize: options.ctxSize }),
136
+ ...(options.gpuLayers !== undefined && { gpuLayers: options.gpuLayers }),
137
+ ...(options.verbose !== undefined && { verbose: options.verbose }),
138
+ ...(options.flags !== undefined && { customFlags }),
139
+ };
140
+
141
+ await stateManager.updateServerConfig(server.id, updatedConfig);
142
+
143
+ // Regenerate plist with new configuration
144
+ console.log(chalk.dim('Regenerating service configuration...'));
145
+ await launchctlManager.createPlist(updatedConfig);
146
+
147
+ // Restart server if it was running and restart flag is set
148
+ if (wasRunning && options.restart) {
149
+ console.log(chalk.dim('Starting server with new configuration...'));
150
+ await launchctlManager.loadService(updatedConfig.plistPath);
151
+ await launchctlManager.startService(updatedConfig.label);
152
+
153
+ // Wait and verify
154
+ await new Promise(resolve => setTimeout(resolve, 2000));
155
+ const finalStatus = await statusChecker.updateServerStatus(updatedConfig);
156
+
157
+ if (finalStatus.status === 'running') {
158
+ console.log(chalk.green(`✅ Server restarted successfully with new configuration`));
159
+ console.log(chalk.dim(` Port: http://localhost:${finalStatus.port}`));
160
+ if (finalStatus.pid) {
161
+ console.log(chalk.dim(` PID: ${finalStatus.pid}`));
162
+ }
163
+ } else {
164
+ console.error(chalk.red('❌ Server failed to start with new configuration'));
165
+ console.log(chalk.dim(' Check logs: ') + `llamacpp server logs ${server.id} --errors`);
166
+ process.exit(1);
167
+ }
168
+ } else {
169
+ console.log(chalk.green('✅ Configuration updated successfully'));
170
+ if (wasRunning && !options.restart) {
171
+ console.log(chalk.yellow('\n⚠️ Server is still running with old configuration'));
172
+ console.log(chalk.dim(' Restart to apply changes: ') + `llamacpp server stop ${server.id} && llamacpp server start ${server.id}`);
173
+ } else if (!wasRunning) {
174
+ console.log(chalk.dim('\n Start server: ') + `llamacpp server start ${server.id}`);
175
+ }
176
+ }
177
+ }
@@ -12,10 +12,12 @@ import { ensureDir } from '../utils/file-utils';
12
12
 
13
13
  interface CreateOptions {
14
14
  port?: number;
15
+ host?: string;
15
16
  threads?: number;
16
17
  ctxSize?: number;
17
18
  gpuLayers?: number;
18
19
  verbose?: boolean;
20
+ flags?: string;
19
21
  }
20
22
 
21
23
  export async function createCommand(model: string, options: CreateOptions): Promise<void> {
@@ -63,12 +65,20 @@ export async function createCommand(model: string, options: CreateOptions): Prom
63
65
  // 6. Generate server configuration
64
66
  console.log(chalk.blue(`🚀 Creating server for ${modelName}\n`));
65
67
 
68
+ // Parse custom flags if provided
69
+ let customFlags: string[] | undefined;
70
+ if (options.flags) {
71
+ customFlags = options.flags.split(',').map(f => f.trim()).filter(f => f.length > 0);
72
+ }
73
+
66
74
  const serverOptions: ServerOptions = {
67
75
  port: options.port,
76
+ host: options.host,
68
77
  threads: options.threads,
69
78
  ctxSize: options.ctxSize,
70
79
  gpuLayers: options.gpuLayers,
71
80
  verbose: options.verbose,
81
+ customFlags,
72
82
  };
73
83
 
74
84
  const config = await configGenerator.generateConfig(
@@ -79,14 +89,25 @@ export async function createCommand(model: string, options: CreateOptions): Prom
79
89
  serverOptions
80
90
  );
81
91
 
92
+ // Security warning for 0.0.0.0
93
+ if (config.host === '0.0.0.0') {
94
+ console.log(chalk.yellow('⚠️ WARNING: Binding to 0.0.0.0 allows remote access from any network interface.'));
95
+ console.log(chalk.yellow(' This exposes your server to your local network and potentially the internet.'));
96
+ console.log(chalk.yellow(' Use 127.0.0.1 for localhost-only access (recommended for local development).\n'));
97
+ }
98
+
82
99
  // Display configuration
83
100
  console.log(chalk.dim(`Model: ${modelPath}`));
84
101
  console.log(chalk.dim(`Size: ${formatBytes(modelSize)}`));
102
+ console.log(chalk.dim(`Host: ${config.host}`));
85
103
  console.log(chalk.dim(`Port: ${config.port}${options.port ? '' : ' (auto-assigned)'}`));
86
104
  console.log(chalk.dim(`Threads: ${config.threads}`));
87
105
  console.log(chalk.dim(`Context Size: ${config.ctxSize}`));
88
106
  console.log(chalk.dim(`GPU Layers: ${config.gpuLayers}`));
89
107
  console.log(chalk.dim(`Verbose Logging: ${config.verbose ? 'enabled' : 'disabled'}`));
108
+ if (config.customFlags && config.customFlags.length > 0) {
109
+ console.log(chalk.dim(`Custom Flags: ${config.customFlags.join(' ')}`));
110
+ }
90
111
  console.log();
91
112
 
92
113
  // 7. Ensure log directory exists
@@ -137,7 +158,7 @@ export async function createCommand(model: string, options: CreateOptions): Prom
137
158
  console.log();
138
159
  console.log(chalk.green('✅ Server created and started successfully!'));
139
160
  console.log();
140
- console.log(chalk.dim(`Connect: http://localhost:${config.port}`));
161
+ console.log(chalk.dim(`Connect: http://${config.host}:${config.port}`));
141
162
  console.log(chalk.dim(`View logs: llamacpp server logs ${config.id}`));
142
163
  console.log(chalk.dim(`Stop: llamacpp server stop ${config.id}`));
143
164
  }
@@ -35,7 +35,8 @@ export async function serverShowCommand(identifier: string): Promise<void> {
35
35
  console.log(`${chalk.bold('Server ID:')} ${updatedServer.id}`);
36
36
  console.log(`${chalk.bold('Model Name:')} ${updatedServer.modelName}`);
37
37
  console.log(`${chalk.bold('Model Path:')} ${chalk.dim(updatedServer.modelPath)}`);
38
- console.log(`${chalk.bold('Port:')} http://localhost:${updatedServer.port}`);
38
+ console.log(`${chalk.bold('Host:')} ${updatedServer.host}`);
39
+ console.log(`${chalk.bold('Port:')} http://${updatedServer.host}:${updatedServer.port}`);
39
40
 
40
41
  // Status with color
41
42
  let statusText: string;
@@ -84,6 +85,9 @@ export async function serverShowCommand(identifier: string): Promise<void> {
84
85
  console.log(`${chalk.bold('Embeddings:')} ${updatedServer.embeddings ? 'enabled' : 'disabled'}`);
85
86
  console.log(`${chalk.bold('Jinja:')} ${updatedServer.jinja ? 'enabled' : 'disabled'}`);
86
87
  console.log(`${chalk.bold('Verbose Logs:')} ${updatedServer.verbose ? chalk.green('enabled') : chalk.dim('disabled')}`);
88
+ if (updatedServer.customFlags && updatedServer.customFlags.length > 0) {
89
+ console.log(`${chalk.bold('Custom Flags:')} ${updatedServer.customFlags.join(' ')}`);
90
+ }
87
91
 
88
92
  // Timestamps section
89
93
  console.log('\n' + '─'.repeat(70));
@@ -6,12 +6,14 @@ import { stateManager } from './state-manager';
6
6
 
7
7
  export interface ServerOptions {
8
8
  port?: number;
9
+ host?: string;
9
10
  threads?: number;
10
11
  ctxSize?: number;
11
12
  gpuLayers?: number;
12
13
  embeddings?: boolean;
13
14
  jinja?: boolean;
14
15
  verbose?: boolean;
16
+ customFlags?: string[];
15
17
  }
16
18
 
17
19
  export interface SmartDefaults {
@@ -63,12 +65,14 @@ export class ConfigGenerator {
63
65
  const smartDefaults = this.calculateSmartDefaults(modelSize);
64
66
 
65
67
  // Apply user overrides
68
+ const host = options?.host ?? '127.0.0.1'; // Default to localhost (secure)
66
69
  const threads = options?.threads ?? smartDefaults.threads;
67
70
  const ctxSize = options?.ctxSize ?? smartDefaults.ctxSize;
68
71
  const gpuLayers = options?.gpuLayers ?? smartDefaults.gpuLayers;
69
72
  const embeddings = options?.embeddings ?? true;
70
73
  const jinja = options?.jinja ?? true;
71
- const verbose = options?.verbose ?? false; // Default to false (simple logging)
74
+ const verbose = options?.verbose ?? true; // Default to true (HTTP request logging)
75
+ const customFlags = options?.customFlags; // Optional custom flags
72
76
 
73
77
  // Generate server ID
74
78
  const id = sanitizeModelName(modelName);
@@ -85,12 +89,14 @@ export class ConfigGenerator {
85
89
  modelPath,
86
90
  modelName,
87
91
  port,
92
+ host,
88
93
  threads,
89
94
  ctxSize,
90
95
  gpuLayers,
91
96
  embeddings,
92
97
  jinja,
93
98
  verbose,
99
+ customFlags,
94
100
  status: 'stopped',
95
101
  createdAt: new Date().toISOString(),
96
102
  plistPath,
@@ -109,12 +115,13 @@ export class ConfigGenerator {
109
115
  const globalConfig = await stateManager.loadGlobalConfig();
110
116
 
111
117
  return {
118
+ host: options?.host ?? '127.0.0.1',
112
119
  threads: options?.threads ?? globalConfig.defaults.threads,
113
120
  ctxSize: options?.ctxSize ?? globalConfig.defaults.ctxSize,
114
121
  gpuLayers: options?.gpuLayers ?? globalConfig.defaults.gpuLayers,
115
122
  embeddings: options?.embeddings ?? true,
116
123
  jinja: options?.jinja ?? true,
117
- verbose: options?.verbose ?? false,
124
+ verbose: options?.verbose ?? true,
118
125
  };
119
126
  }
120
127
  }
@@ -20,6 +20,7 @@ export class LaunchctlManager {
20
20
  const args = [
21
21
  '/opt/homebrew/bin/llama-server',
22
22
  '--model', config.modelPath,
23
+ '--host', config.host,
23
24
  '--port', config.port.toString(),
24
25
  '--threads', config.threads.toString(),
25
26
  '--ctx-size', config.ctxSize.toString(),
@@ -35,6 +36,11 @@ export class LaunchctlManager {
35
36
  args.push('--log-verbose');
36
37
  }
37
38
 
39
+ // Add custom flags
40
+ if (config.customFlags && config.customFlags.length > 0) {
41
+ args.push(...config.customFlags);
42
+ }
43
+
38
44
  // Generate XML array elements
39
45
  const argsXml = args.map(arg => ` <string>${arg}</string>`).join('\n');
40
46
 
@@ -81,6 +81,18 @@ export class StateManager {
81
81
  await writeJsonAtomic(configPath, config);
82
82
  }
83
83
 
84
+ /**
85
+ * Update a server configuration with partial changes
86
+ */
87
+ async updateServerConfig(id: string, updates: Partial<ServerConfig>): Promise<void> {
88
+ const existingConfig = await this.loadServerConfig(id);
89
+ if (!existingConfig) {
90
+ throw new Error(`Server configuration not found: ${id}`);
91
+ }
92
+ const updatedConfig = { ...existingConfig, ...updates };
93
+ await this.saveServerConfig(updatedConfig);
94
+ }
95
+
84
96
  /**
85
97
  * Delete a server configuration
86
98
  */