@appkit/llamacpp-cli 1.14.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/README.md +276 -280
  2. package/dist/cli.js +133 -23
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/admin/config.d.ts +1 -1
  5. package/dist/commands/admin/config.js +5 -5
  6. package/dist/commands/admin/config.js.map +1 -1
  7. package/dist/commands/admin/log-config.d.ts +11 -0
  8. package/dist/commands/admin/log-config.d.ts.map +1 -0
  9. package/dist/commands/admin/log-config.js +159 -0
  10. package/dist/commands/admin/log-config.js.map +1 -0
  11. package/dist/commands/admin/logs.d.ts +2 -3
  12. package/dist/commands/admin/logs.d.ts.map +1 -1
  13. package/dist/commands/admin/logs.js +6 -48
  14. package/dist/commands/admin/logs.js.map +1 -1
  15. package/dist/commands/admin/status.d.ts.map +1 -1
  16. package/dist/commands/admin/status.js +1 -0
  17. package/dist/commands/admin/status.js.map +1 -1
  18. package/dist/commands/config.d.ts +1 -0
  19. package/dist/commands/config.d.ts.map +1 -1
  20. package/dist/commands/config.js +63 -196
  21. package/dist/commands/config.js.map +1 -1
  22. package/dist/commands/create.d.ts +3 -2
  23. package/dist/commands/create.d.ts.map +1 -1
  24. package/dist/commands/create.js +24 -97
  25. package/dist/commands/create.js.map +1 -1
  26. package/dist/commands/delete.d.ts.map +1 -1
  27. package/dist/commands/delete.js +7 -24
  28. package/dist/commands/delete.js.map +1 -1
  29. package/dist/commands/internal/server-wrapper.d.ts +15 -0
  30. package/dist/commands/internal/server-wrapper.d.ts.map +1 -0
  31. package/dist/commands/internal/server-wrapper.js +126 -0
  32. package/dist/commands/internal/server-wrapper.js.map +1 -0
  33. package/dist/commands/logs-all.d.ts +0 -2
  34. package/dist/commands/logs-all.d.ts.map +1 -1
  35. package/dist/commands/logs-all.js +1 -61
  36. package/dist/commands/logs-all.js.map +1 -1
  37. package/dist/commands/logs.d.ts +2 -5
  38. package/dist/commands/logs.d.ts.map +1 -1
  39. package/dist/commands/logs.js +104 -120
  40. package/dist/commands/logs.js.map +1 -1
  41. package/dist/commands/migrate-labels.d.ts +12 -0
  42. package/dist/commands/migrate-labels.d.ts.map +1 -0
  43. package/dist/commands/migrate-labels.js +160 -0
  44. package/dist/commands/migrate-labels.js.map +1 -0
  45. package/dist/commands/ps.d.ts.map +1 -1
  46. package/dist/commands/ps.js +2 -1
  47. package/dist/commands/ps.js.map +1 -1
  48. package/dist/commands/rm.d.ts.map +1 -1
  49. package/dist/commands/rm.js +22 -48
  50. package/dist/commands/rm.js.map +1 -1
  51. package/dist/commands/router/config.d.ts +1 -1
  52. package/dist/commands/router/config.js +6 -6
  53. package/dist/commands/router/config.js.map +1 -1
  54. package/dist/commands/router/logs.d.ts +2 -4
  55. package/dist/commands/router/logs.d.ts.map +1 -1
  56. package/dist/commands/router/logs.js +34 -189
  57. package/dist/commands/router/logs.js.map +1 -1
  58. package/dist/commands/router/status.d.ts.map +1 -1
  59. package/dist/commands/router/status.js +1 -0
  60. package/dist/commands/router/status.js.map +1 -1
  61. package/dist/commands/server-show.d.ts.map +1 -1
  62. package/dist/commands/server-show.js +3 -0
  63. package/dist/commands/server-show.js.map +1 -1
  64. package/dist/commands/start.d.ts.map +1 -1
  65. package/dist/commands/start.js +21 -72
  66. package/dist/commands/start.js.map +1 -1
  67. package/dist/commands/stop.d.ts.map +1 -1
  68. package/dist/commands/stop.js +10 -26
  69. package/dist/commands/stop.js.map +1 -1
  70. package/dist/launchers/llamacpp-admin +8 -0
  71. package/dist/launchers/llamacpp-router +8 -0
  72. package/dist/launchers/llamacpp-server +8 -0
  73. package/dist/lib/admin-manager.d.ts +4 -0
  74. package/dist/lib/admin-manager.d.ts.map +1 -1
  75. package/dist/lib/admin-manager.js +42 -18
  76. package/dist/lib/admin-manager.js.map +1 -1
  77. package/dist/lib/admin-server.d.ts +48 -1
  78. package/dist/lib/admin-server.d.ts.map +1 -1
  79. package/dist/lib/admin-server.js +632 -238
  80. package/dist/lib/admin-server.js.map +1 -1
  81. package/dist/lib/config-generator.d.ts +1 -0
  82. package/dist/lib/config-generator.d.ts.map +1 -1
  83. package/dist/lib/config-generator.js +12 -5
  84. package/dist/lib/config-generator.js.map +1 -1
  85. package/dist/lib/keyboard-manager.d.ts +162 -0
  86. package/dist/lib/keyboard-manager.d.ts.map +1 -0
  87. package/dist/lib/keyboard-manager.js +247 -0
  88. package/dist/lib/keyboard-manager.js.map +1 -0
  89. package/dist/lib/label-migration.d.ts +65 -0
  90. package/dist/lib/label-migration.d.ts.map +1 -0
  91. package/dist/lib/label-migration.js +458 -0
  92. package/dist/lib/label-migration.js.map +1 -0
  93. package/dist/lib/launchctl-manager.d.ts +9 -0
  94. package/dist/lib/launchctl-manager.d.ts.map +1 -1
  95. package/dist/lib/launchctl-manager.js +65 -19
  96. package/dist/lib/launchctl-manager.js.map +1 -1
  97. package/dist/lib/log-management-service.d.ts +51 -0
  98. package/dist/lib/log-management-service.d.ts.map +1 -0
  99. package/dist/lib/log-management-service.js +124 -0
  100. package/dist/lib/log-management-service.js.map +1 -0
  101. package/dist/lib/log-workers.d.ts +70 -0
  102. package/dist/lib/log-workers.d.ts.map +1 -0
  103. package/dist/lib/log-workers.js +217 -0
  104. package/dist/lib/log-workers.js.map +1 -0
  105. package/dist/lib/model-downloader.d.ts +9 -1
  106. package/dist/lib/model-downloader.d.ts.map +1 -1
  107. package/dist/lib/model-downloader.js +98 -1
  108. package/dist/lib/model-downloader.js.map +1 -1
  109. package/dist/lib/model-management-service.d.ts +60 -0
  110. package/dist/lib/model-management-service.d.ts.map +1 -0
  111. package/dist/lib/model-management-service.js +246 -0
  112. package/dist/lib/model-management-service.js.map +1 -0
  113. package/dist/lib/model-management-service.test.d.ts +2 -0
  114. package/dist/lib/model-management-service.test.d.ts.map +1 -0
  115. package/dist/lib/model-management-service.test.js.map +1 -0
  116. package/dist/lib/model-scanner.d.ts +15 -3
  117. package/dist/lib/model-scanner.d.ts.map +1 -1
  118. package/dist/lib/model-scanner.js +174 -17
  119. package/dist/lib/model-scanner.js.map +1 -1
  120. package/dist/lib/openapi-spec.d.ts +1335 -0
  121. package/dist/lib/openapi-spec.d.ts.map +1 -0
  122. package/dist/lib/openapi-spec.js +1017 -0
  123. package/dist/lib/openapi-spec.js.map +1 -0
  124. package/dist/lib/router-logger.d.ts +1 -1
  125. package/dist/lib/router-logger.d.ts.map +1 -1
  126. package/dist/lib/router-logger.js +13 -11
  127. package/dist/lib/router-logger.js.map +1 -1
  128. package/dist/lib/router-manager.d.ts +4 -0
  129. package/dist/lib/router-manager.d.ts.map +1 -1
  130. package/dist/lib/router-manager.js +30 -18
  131. package/dist/lib/router-manager.js.map +1 -1
  132. package/dist/lib/router-server.d.ts +4 -7
  133. package/dist/lib/router-server.d.ts.map +1 -1
  134. package/dist/lib/router-server.js +71 -182
  135. package/dist/lib/router-server.js.map +1 -1
  136. package/dist/lib/server-config-service.d.ts +51 -0
  137. package/dist/lib/server-config-service.d.ts.map +1 -0
  138. package/dist/lib/server-config-service.js +310 -0
  139. package/dist/lib/server-config-service.js.map +1 -0
  140. package/dist/lib/server-config-service.test.d.ts +2 -0
  141. package/dist/lib/server-config-service.test.d.ts.map +1 -0
  142. package/dist/lib/server-config-service.test.js.map +1 -0
  143. package/dist/lib/server-lifecycle-service.d.ts +172 -0
  144. package/dist/lib/server-lifecycle-service.d.ts.map +1 -0
  145. package/dist/lib/server-lifecycle-service.js +619 -0
  146. package/dist/lib/server-lifecycle-service.js.map +1 -0
  147. package/dist/lib/state-manager.d.ts +18 -1
  148. package/dist/lib/state-manager.d.ts.map +1 -1
  149. package/dist/lib/state-manager.js +51 -2
  150. package/dist/lib/state-manager.js.map +1 -1
  151. package/dist/lib/status-checker.d.ts +11 -4
  152. package/dist/lib/status-checker.d.ts.map +1 -1
  153. package/dist/lib/status-checker.js +34 -1
  154. package/dist/lib/status-checker.js.map +1 -1
  155. package/dist/lib/validation-service.d.ts +43 -0
  156. package/dist/lib/validation-service.d.ts.map +1 -0
  157. package/dist/lib/validation-service.js +112 -0
  158. package/dist/lib/validation-service.js.map +1 -0
  159. package/dist/lib/validation-service.test.d.ts +2 -0
  160. package/dist/lib/validation-service.test.d.ts.map +1 -0
  161. package/dist/lib/validation-service.test.js.map +1 -0
  162. package/dist/scripts/http-log-filter.sh +8 -0
  163. package/dist/tui/ConfigApp.d.ts.map +1 -1
  164. package/dist/tui/ConfigApp.js +222 -184
  165. package/dist/tui/ConfigApp.js.map +1 -1
  166. package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
  167. package/dist/tui/HistoricalMonitorApp.js +12 -0
  168. package/dist/tui/HistoricalMonitorApp.js.map +1 -1
  169. package/dist/tui/ModelsApp.d.ts.map +1 -1
  170. package/dist/tui/ModelsApp.js +93 -17
  171. package/dist/tui/ModelsApp.js.map +1 -1
  172. package/dist/tui/MonitorApp.d.ts.map +1 -1
  173. package/dist/tui/MonitorApp.js +1 -3
  174. package/dist/tui/MonitorApp.js.map +1 -1
  175. package/dist/tui/MultiServerMonitorApp.d.ts +3 -3
  176. package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
  177. package/dist/tui/MultiServerMonitorApp.js +724 -508
  178. package/dist/tui/MultiServerMonitorApp.js.map +1 -1
  179. package/dist/tui/RootNavigator.d.ts.map +1 -1
  180. package/dist/tui/RootNavigator.js +17 -1
  181. package/dist/tui/RootNavigator.js.map +1 -1
  182. package/dist/tui/RouterApp.d.ts +6 -0
  183. package/dist/tui/RouterApp.d.ts.map +1 -0
  184. package/dist/tui/RouterApp.js +928 -0
  185. package/dist/tui/RouterApp.js.map +1 -0
  186. package/dist/tui/SearchApp.d.ts.map +1 -1
  187. package/dist/tui/SearchApp.js +27 -6
  188. package/dist/tui/SearchApp.js.map +1 -1
  189. package/dist/tui/shared/modal-controller.d.ts +65 -0
  190. package/dist/tui/shared/modal-controller.d.ts.map +1 -0
  191. package/dist/tui/shared/modal-controller.js +625 -0
  192. package/dist/tui/shared/modal-controller.js.map +1 -0
  193. package/dist/tui/shared/overlay-utils.d.ts +7 -0
  194. package/dist/tui/shared/overlay-utils.d.ts.map +1 -0
  195. package/dist/tui/shared/overlay-utils.js +54 -0
  196. package/dist/tui/shared/overlay-utils.js.map +1 -0
  197. package/dist/types/admin-config.d.ts +15 -2
  198. package/dist/types/admin-config.d.ts.map +1 -1
  199. package/dist/types/model-info.d.ts +5 -0
  200. package/dist/types/model-info.d.ts.map +1 -1
  201. package/dist/types/router-config.d.ts +2 -2
  202. package/dist/types/router-config.d.ts.map +1 -1
  203. package/dist/types/server-config.d.ts +8 -0
  204. package/dist/types/server-config.d.ts.map +1 -1
  205. package/dist/types/server-config.js +25 -0
  206. package/dist/types/server-config.js.map +1 -1
  207. package/dist/utils/http-log-filter.d.ts +10 -0
  208. package/dist/utils/http-log-filter.d.ts.map +1 -0
  209. package/dist/utils/http-log-filter.js +84 -0
  210. package/dist/utils/http-log-filter.js.map +1 -0
  211. package/dist/utils/log-parser.d.ts.map +1 -1
  212. package/dist/utils/log-parser.js +7 -4
  213. package/dist/utils/log-parser.js.map +1 -1
  214. package/dist/utils/log-utils.d.ts +59 -4
  215. package/dist/utils/log-utils.d.ts.map +1 -1
  216. package/dist/utils/log-utils.js +150 -11
  217. package/dist/utils/log-utils.js.map +1 -1
  218. package/dist/utils/shard-utils.d.ts +72 -0
  219. package/dist/utils/shard-utils.d.ts.map +1 -0
  220. package/dist/utils/shard-utils.js +168 -0
  221. package/dist/utils/shard-utils.js.map +1 -0
  222. package/package.json +18 -4
  223. package/src/launchers/llamacpp-admin +8 -0
  224. package/src/launchers/llamacpp-router +8 -0
  225. package/src/launchers/llamacpp-server +8 -0
  226. package/web/dist/assets/index-Byhoy86V.css +1 -0
  227. package/web/dist/assets/index-HSrgvray.js +50 -0
  228. package/web/dist/index.html +2 -2
  229. package/web/dist/assets/index-Bin89Lwr.css +0 -1
  230. package/web/dist/assets/index-CVmonw3T.js +0 -17
@@ -0,0 +1,1017 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openApiSpec = void 0;
4
+ /**
5
+ * OpenAPI 3.0 specification for llamacpp-cli Admin API
6
+ */
7
+ exports.openApiSpec = {
8
+ openapi: '3.0.0',
9
+ info: {
10
+ title: 'llamacpp-cli Admin API',
11
+ version: '2.0.0',
12
+ description: `
13
+ Remote management API for llamacpp-cli servers.
14
+
15
+ ## Authentication
16
+
17
+ All endpoints (except \`/health\`) require Bearer token authentication.
18
+
19
+ \`\`\`
20
+ Authorization: Bearer YOUR_API_KEY
21
+ \`\`\`
22
+
23
+ The API key is auto-generated on first start and stored in \`~/.llamacpp/admin.json\`.
24
+ `,
25
+ },
26
+ servers: [
27
+ {
28
+ url: 'http://localhost:9200',
29
+ description: 'Local Admin API (default)',
30
+ },
31
+ ],
32
+ tags: [
33
+ {
34
+ name: 'Servers',
35
+ description: 'Server lifecycle management (CRUD operations)',
36
+ },
37
+ {
38
+ name: 'Models',
39
+ description: 'Model management and HuggingFace downloads',
40
+ },
41
+ {
42
+ name: 'Router',
43
+ description: 'Unified routing service management',
44
+ },
45
+ {
46
+ name: 'System',
47
+ description: 'Health checks and system status',
48
+ },
49
+ {
50
+ name: 'Jobs',
51
+ description: 'Background download job management',
52
+ },
53
+ ],
54
+ paths: {
55
+ '/health': {
56
+ get: {
57
+ tags: ['System'],
58
+ summary: 'Health check',
59
+ description: 'Check API health status (no authentication required)',
60
+ responses: {
61
+ 200: {
62
+ description: 'Service is healthy',
63
+ content: {
64
+ 'application/json': {
65
+ schema: {
66
+ type: 'object',
67
+ properties: {
68
+ status: { type: 'string', example: 'healthy' },
69
+ uptime: { type: 'number', example: 3600.5 },
70
+ timestamp: { type: 'string', format: 'date-time' },
71
+ },
72
+ },
73
+ },
74
+ },
75
+ },
76
+ },
77
+ },
78
+ },
79
+ '/api/status': {
80
+ get: {
81
+ tags: ['System'],
82
+ summary: 'System status',
83
+ description: 'Get comprehensive system status including all services',
84
+ security: [{ BearerAuth: [] }],
85
+ responses: {
86
+ 200: {
87
+ description: 'System status retrieved',
88
+ content: {
89
+ 'application/json': {
90
+ schema: {
91
+ type: 'object',
92
+ properties: {
93
+ servers: {
94
+ type: 'object',
95
+ properties: {
96
+ total: { type: 'number' },
97
+ running: { type: 'number' },
98
+ stopped: { type: 'number' },
99
+ },
100
+ },
101
+ router: {
102
+ type: 'object',
103
+ properties: {
104
+ running: { type: 'boolean' },
105
+ port: { type: 'number' },
106
+ },
107
+ },
108
+ models: {
109
+ type: 'object',
110
+ properties: {
111
+ total: { type: 'number' },
112
+ },
113
+ },
114
+ },
115
+ },
116
+ },
117
+ },
118
+ },
119
+ },
120
+ },
121
+ },
122
+ '/api/servers': {
123
+ get: {
124
+ tags: ['Servers'],
125
+ summary: 'List all servers',
126
+ description: 'Get list of all configured servers with their current status',
127
+ security: [{ BearerAuth: [] }],
128
+ responses: {
129
+ 200: {
130
+ description: 'Servers list retrieved',
131
+ content: {
132
+ 'application/json': {
133
+ schema: {
134
+ type: 'object',
135
+ properties: {
136
+ servers: {
137
+ type: 'array',
138
+ items: { $ref: '#/components/schemas/Server' },
139
+ },
140
+ },
141
+ },
142
+ },
143
+ },
144
+ },
145
+ },
146
+ },
147
+ post: {
148
+ tags: ['Servers'],
149
+ summary: 'Create new server',
150
+ description: 'Create and start a new llama-server instance',
151
+ security: [{ BearerAuth: [] }],
152
+ requestBody: {
153
+ required: true,
154
+ content: {
155
+ 'application/json': {
156
+ schema: {
157
+ type: 'object',
158
+ required: ['model'],
159
+ properties: {
160
+ model: { type: 'string', example: 'llama-3.2-3b-instruct-q4_k_m.gguf' },
161
+ port: { type: 'number', example: 9001 },
162
+ host: { type: 'string', example: '127.0.0.1' },
163
+ threads: { type: 'number', example: 8 },
164
+ ctxSize: { type: 'number', example: 8192 },
165
+ gpuLayers: { type: 'number', example: 60 },
166
+ verbose: { type: 'boolean', example: false },
167
+ alias: { type: 'string', example: 'thinking' },
168
+ },
169
+ },
170
+ },
171
+ },
172
+ },
173
+ responses: {
174
+ 201: {
175
+ description: 'Server created successfully',
176
+ content: {
177
+ 'application/json': {
178
+ schema: { $ref: '#/components/schemas/Server' },
179
+ },
180
+ },
181
+ },
182
+ },
183
+ },
184
+ },
185
+ '/api/servers/{id}': {
186
+ get: {
187
+ tags: ['Servers'],
188
+ summary: 'Get server details',
189
+ description: 'Get detailed information about a specific server',
190
+ security: [{ BearerAuth: [] }],
191
+ parameters: [
192
+ {
193
+ name: 'id',
194
+ in: 'path',
195
+ required: true,
196
+ description: 'Server ID, alias, port, or model name',
197
+ schema: { type: 'string' },
198
+ example: 'llama-3-2-3b',
199
+ },
200
+ ],
201
+ responses: {
202
+ 200: {
203
+ description: 'Server details retrieved',
204
+ content: {
205
+ 'application/json': {
206
+ schema: {
207
+ type: 'object',
208
+ properties: {
209
+ server: { $ref: '#/components/schemas/Server' },
210
+ },
211
+ },
212
+ },
213
+ },
214
+ },
215
+ 404: { $ref: '#/components/responses/NotFound' },
216
+ },
217
+ },
218
+ patch: {
219
+ tags: ['Servers'],
220
+ summary: 'Update server configuration',
221
+ description: 'Update server settings (requires restart to apply changes)',
222
+ security: [{ BearerAuth: [] }],
223
+ parameters: [
224
+ {
225
+ name: 'id',
226
+ in: 'path',
227
+ required: true,
228
+ schema: { type: 'string' },
229
+ },
230
+ ],
231
+ requestBody: {
232
+ content: {
233
+ 'application/json': {
234
+ schema: {
235
+ type: 'object',
236
+ properties: {
237
+ model: { type: 'string' },
238
+ host: { type: 'string' },
239
+ threads: { type: 'number' },
240
+ ctxSize: { type: 'number' },
241
+ gpuLayers: { type: 'number' },
242
+ verbose: { type: 'boolean' },
243
+ alias: { type: 'string' },
244
+ },
245
+ },
246
+ },
247
+ },
248
+ },
249
+ responses: {
250
+ 200: {
251
+ description: 'Server updated successfully',
252
+ content: {
253
+ 'application/json': {
254
+ schema: { $ref: '#/components/schemas/Server' },
255
+ },
256
+ },
257
+ },
258
+ },
259
+ },
260
+ delete: {
261
+ tags: ['Servers'],
262
+ summary: 'Delete server',
263
+ description: 'Remove server configuration and stop service',
264
+ security: [{ BearerAuth: [] }],
265
+ parameters: [
266
+ {
267
+ name: 'id',
268
+ in: 'path',
269
+ required: true,
270
+ schema: { type: 'string' },
271
+ },
272
+ ],
273
+ responses: {
274
+ 200: {
275
+ description: 'Server deleted successfully',
276
+ content: {
277
+ 'application/json': {
278
+ schema: {
279
+ type: 'object',
280
+ properties: {
281
+ success: { type: 'boolean' },
282
+ message: { type: 'string' },
283
+ },
284
+ },
285
+ },
286
+ },
287
+ },
288
+ },
289
+ },
290
+ },
291
+ '/api/servers/{id}/start': {
292
+ post: {
293
+ tags: ['Servers'],
294
+ summary: 'Start server',
295
+ description: 'Start a stopped server',
296
+ security: [{ BearerAuth: [] }],
297
+ parameters: [
298
+ {
299
+ name: 'id',
300
+ in: 'path',
301
+ required: true,
302
+ schema: { type: 'string' },
303
+ },
304
+ ],
305
+ responses: {
306
+ 200: {
307
+ description: 'Server started successfully',
308
+ content: {
309
+ 'application/json': {
310
+ schema: {
311
+ type: 'object',
312
+ properties: {
313
+ success: { type: 'boolean' },
314
+ status: { type: 'string', example: 'running' },
315
+ pid: { type: 'number' },
316
+ },
317
+ },
318
+ },
319
+ },
320
+ },
321
+ },
322
+ },
323
+ },
324
+ '/api/servers/{id}/stop': {
325
+ post: {
326
+ tags: ['Servers'],
327
+ summary: 'Stop server',
328
+ description: 'Stop a running server',
329
+ security: [{ BearerAuth: [] }],
330
+ parameters: [
331
+ {
332
+ name: 'id',
333
+ in: 'path',
334
+ required: true,
335
+ schema: { type: 'string' },
336
+ },
337
+ ],
338
+ responses: {
339
+ 200: {
340
+ description: 'Server stopped successfully',
341
+ content: {
342
+ 'application/json': {
343
+ schema: {
344
+ type: 'object',
345
+ properties: {
346
+ success: { type: 'boolean' },
347
+ message: { type: 'string' },
348
+ },
349
+ },
350
+ },
351
+ },
352
+ },
353
+ },
354
+ },
355
+ },
356
+ '/api/servers/{id}/restart': {
357
+ post: {
358
+ tags: ['Servers'],
359
+ summary: 'Restart server',
360
+ description: 'Restart a server (stop then start)',
361
+ security: [{ BearerAuth: [] }],
362
+ parameters: [
363
+ {
364
+ name: 'id',
365
+ in: 'path',
366
+ required: true,
367
+ schema: { type: 'string' },
368
+ },
369
+ ],
370
+ responses: {
371
+ 200: {
372
+ description: 'Server restarted successfully',
373
+ content: {
374
+ 'application/json': {
375
+ schema: {
376
+ type: 'object',
377
+ properties: {
378
+ success: { type: 'boolean' },
379
+ message: { type: 'string' },
380
+ },
381
+ },
382
+ },
383
+ },
384
+ },
385
+ },
386
+ },
387
+ },
388
+ '/api/servers/{id}/logs': {
389
+ get: {
390
+ tags: ['Servers'],
391
+ summary: 'Get server logs',
392
+ description: `
393
+ Retrieve server logs with flexible filtering.
394
+
395
+ **Log Types:**
396
+ - \`activity\`: HTTP request/response logs (default)
397
+ - \`system\`: System diagnostic logs (stderr + stdout)
398
+ `,
399
+ security: [{ BearerAuth: [] }],
400
+ parameters: [
401
+ {
402
+ name: 'id',
403
+ in: 'path',
404
+ required: true,
405
+ schema: { type: 'string' },
406
+ },
407
+ {
408
+ name: 'type',
409
+ in: 'query',
410
+ description: 'Log type to retrieve',
411
+ schema: {
412
+ type: 'string',
413
+ enum: ['activity', 'system'],
414
+ default: 'activity',
415
+ },
416
+ },
417
+ {
418
+ name: 'lines',
419
+ in: 'query',
420
+ description: 'Number of lines to return',
421
+ schema: {
422
+ type: 'integer',
423
+ default: 100,
424
+ minimum: 1,
425
+ maximum: 10000,
426
+ },
427
+ },
428
+ ],
429
+ responses: {
430
+ 200: {
431
+ description: 'Logs retrieved successfully',
432
+ content: {
433
+ 'application/json': {
434
+ schema: {
435
+ type: 'object',
436
+ properties: {
437
+ http: { type: 'string', description: 'HTTP activity logs' },
438
+ stdout: { type: 'string', description: 'Standard output' },
439
+ stderr: { type: 'string', description: 'Standard error' },
440
+ },
441
+ },
442
+ },
443
+ },
444
+ },
445
+ },
446
+ },
447
+ },
448
+ '/api/models': {
449
+ get: {
450
+ tags: ['Models'],
451
+ summary: 'List models',
452
+ description: 'Get list of all available GGUF models',
453
+ security: [{ BearerAuth: [] }],
454
+ responses: {
455
+ 200: {
456
+ description: 'Models list retrieved',
457
+ content: {
458
+ 'application/json': {
459
+ schema: {
460
+ type: 'object',
461
+ properties: {
462
+ models: {
463
+ type: 'array',
464
+ items: { $ref: '#/components/schemas/Model' },
465
+ },
466
+ },
467
+ },
468
+ },
469
+ },
470
+ },
471
+ },
472
+ },
473
+ },
474
+ '/api/models/{name}': {
475
+ get: {
476
+ tags: ['Models'],
477
+ summary: 'Get model details',
478
+ description: 'Get detailed information about a specific model',
479
+ security: [{ BearerAuth: [] }],
480
+ parameters: [
481
+ {
482
+ name: 'name',
483
+ in: 'path',
484
+ required: true,
485
+ schema: { type: 'string' },
486
+ example: 'llama-3.2-3b-instruct-q4_k_m.gguf',
487
+ },
488
+ ],
489
+ responses: {
490
+ 200: {
491
+ description: 'Model details retrieved',
492
+ content: {
493
+ 'application/json': {
494
+ schema: {
495
+ type: 'object',
496
+ properties: {
497
+ model: { $ref: '#/components/schemas/Model' },
498
+ },
499
+ },
500
+ },
501
+ },
502
+ },
503
+ },
504
+ },
505
+ delete: {
506
+ tags: ['Models'],
507
+ summary: 'Delete model',
508
+ description: 'Delete a model file from disk (optionally cascade delete servers)',
509
+ security: [{ BearerAuth: [] }],
510
+ parameters: [
511
+ {
512
+ name: 'name',
513
+ in: 'path',
514
+ required: true,
515
+ schema: { type: 'string' },
516
+ },
517
+ {
518
+ name: 'cascade',
519
+ in: 'query',
520
+ description: 'Also delete servers using this model',
521
+ schema: { type: 'boolean', default: false },
522
+ },
523
+ ],
524
+ responses: {
525
+ 200: {
526
+ description: 'Model deleted successfully',
527
+ content: {
528
+ 'application/json': {
529
+ schema: {
530
+ type: 'object',
531
+ properties: {
532
+ success: { type: 'boolean' },
533
+ deletedServers: {
534
+ type: 'array',
535
+ items: { type: 'string' },
536
+ },
537
+ },
538
+ },
539
+ },
540
+ },
541
+ },
542
+ },
543
+ },
544
+ },
545
+ '/api/models/search': {
546
+ get: {
547
+ tags: ['Models'],
548
+ summary: 'Search HuggingFace',
549
+ description: 'Search for GGUF models on HuggingFace',
550
+ security: [{ BearerAuth: [] }],
551
+ parameters: [
552
+ {
553
+ name: 'q',
554
+ in: 'query',
555
+ required: true,
556
+ description: 'Search query',
557
+ schema: { type: 'string' },
558
+ example: 'llama 3b',
559
+ },
560
+ {
561
+ name: 'limit',
562
+ in: 'query',
563
+ description: 'Max results',
564
+ schema: { type: 'integer', default: 20, maximum: 100 },
565
+ },
566
+ ],
567
+ responses: {
568
+ 200: {
569
+ description: 'Search results retrieved',
570
+ content: {
571
+ 'application/json': {
572
+ schema: {
573
+ type: 'object',
574
+ properties: {
575
+ results: {
576
+ type: 'array',
577
+ items: {
578
+ type: 'object',
579
+ properties: {
580
+ id: { type: 'string' },
581
+ name: { type: 'string' },
582
+ downloads: { type: 'number' },
583
+ likes: { type: 'number' },
584
+ },
585
+ },
586
+ },
587
+ },
588
+ },
589
+ },
590
+ },
591
+ },
592
+ },
593
+ },
594
+ },
595
+ '/api/models/download': {
596
+ post: {
597
+ tags: ['Models'],
598
+ summary: 'Download model',
599
+ description: 'Start downloading a model from HuggingFace (returns job ID)',
600
+ security: [{ BearerAuth: [] }],
601
+ requestBody: {
602
+ required: true,
603
+ content: {
604
+ 'application/json': {
605
+ schema: {
606
+ type: 'object',
607
+ required: ['repo', 'filename'],
608
+ properties: {
609
+ repo: { type: 'string', example: 'bartowski/Llama-3.2-3B-Instruct-GGUF' },
610
+ filename: { type: 'string', example: 'Llama-3.2-3B-Instruct-Q4_K_M.gguf' },
611
+ },
612
+ },
613
+ },
614
+ },
615
+ },
616
+ responses: {
617
+ 200: {
618
+ description: 'Download started',
619
+ content: {
620
+ 'application/json': {
621
+ schema: {
622
+ type: 'object',
623
+ properties: {
624
+ jobId: { type: 'string' },
625
+ status: { type: 'string', example: 'downloading' },
626
+ },
627
+ },
628
+ },
629
+ },
630
+ },
631
+ },
632
+ },
633
+ },
634
+ '/api/jobs': {
635
+ get: {
636
+ tags: ['Jobs'],
637
+ summary: 'List download jobs',
638
+ description: 'Get all download jobs (active and completed)',
639
+ security: [{ BearerAuth: [] }],
640
+ responses: {
641
+ 200: {
642
+ description: 'Jobs list retrieved',
643
+ content: {
644
+ 'application/json': {
645
+ schema: {
646
+ type: 'object',
647
+ properties: {
648
+ jobs: {
649
+ type: 'array',
650
+ items: { $ref: '#/components/schemas/DownloadJob' },
651
+ },
652
+ },
653
+ },
654
+ },
655
+ },
656
+ },
657
+ },
658
+ },
659
+ },
660
+ '/api/jobs/{jobId}': {
661
+ get: {
662
+ tags: ['Jobs'],
663
+ summary: 'Get job status',
664
+ description: 'Get detailed status of a download job',
665
+ security: [{ BearerAuth: [] }],
666
+ parameters: [
667
+ {
668
+ name: 'jobId',
669
+ in: 'path',
670
+ required: true,
671
+ schema: { type: 'string' },
672
+ },
673
+ ],
674
+ responses: {
675
+ 200: {
676
+ description: 'Job status retrieved',
677
+ content: {
678
+ 'application/json': {
679
+ schema: {
680
+ type: 'object',
681
+ properties: {
682
+ job: { $ref: '#/components/schemas/DownloadJob' },
683
+ },
684
+ },
685
+ },
686
+ },
687
+ },
688
+ },
689
+ },
690
+ delete: {
691
+ tags: ['Jobs'],
692
+ summary: 'Cancel download',
693
+ description: 'Cancel an active download job',
694
+ security: [{ BearerAuth: [] }],
695
+ parameters: [
696
+ {
697
+ name: 'jobId',
698
+ in: 'path',
699
+ required: true,
700
+ schema: { type: 'string' },
701
+ },
702
+ ],
703
+ responses: {
704
+ 200: {
705
+ description: 'Job cancelled',
706
+ content: {
707
+ 'application/json': {
708
+ schema: {
709
+ type: 'object',
710
+ properties: {
711
+ success: { type: 'boolean' },
712
+ message: { type: 'string' },
713
+ },
714
+ },
715
+ },
716
+ },
717
+ },
718
+ },
719
+ },
720
+ },
721
+ '/api/router': {
722
+ get: {
723
+ tags: ['Router'],
724
+ summary: 'Get router status',
725
+ description: 'Get router service status and configuration',
726
+ security: [{ BearerAuth: [] }],
727
+ responses: {
728
+ 200: {
729
+ description: 'Router status retrieved',
730
+ content: {
731
+ 'application/json': {
732
+ schema: { $ref: '#/components/schemas/RouterInfo' },
733
+ },
734
+ },
735
+ },
736
+ },
737
+ },
738
+ patch: {
739
+ tags: ['Router'],
740
+ summary: 'Update router config',
741
+ description: 'Update router configuration (requires restart)',
742
+ security: [{ BearerAuth: [] }],
743
+ requestBody: {
744
+ content: {
745
+ 'application/json': {
746
+ schema: {
747
+ type: 'object',
748
+ properties: {
749
+ port: { type: 'number' },
750
+ host: { type: 'string' },
751
+ verbose: { type: 'boolean' },
752
+ requestTimeout: { type: 'number' },
753
+ healthCheckInterval: { type: 'number' },
754
+ },
755
+ },
756
+ },
757
+ },
758
+ },
759
+ responses: {
760
+ 200: {
761
+ description: 'Router config updated',
762
+ content: {
763
+ 'application/json': {
764
+ schema: { $ref: '#/components/schemas/RouterInfo' },
765
+ },
766
+ },
767
+ },
768
+ },
769
+ },
770
+ },
771
+ '/api/router/start': {
772
+ post: {
773
+ tags: ['Router'],
774
+ summary: 'Start router',
775
+ description: 'Start the router service',
776
+ security: [{ BearerAuth: [] }],
777
+ responses: {
778
+ 200: {
779
+ description: 'Router started',
780
+ content: {
781
+ 'application/json': {
782
+ schema: {
783
+ type: 'object',
784
+ properties: {
785
+ success: { type: 'boolean' },
786
+ status: { type: 'string' },
787
+ pid: { type: 'number' },
788
+ },
789
+ },
790
+ },
791
+ },
792
+ },
793
+ },
794
+ },
795
+ },
796
+ '/api/router/stop': {
797
+ post: {
798
+ tags: ['Router'],
799
+ summary: 'Stop router',
800
+ description: 'Stop the router service',
801
+ security: [{ BearerAuth: [] }],
802
+ responses: {
803
+ 200: {
804
+ description: 'Router stopped',
805
+ content: {
806
+ 'application/json': {
807
+ schema: {
808
+ type: 'object',
809
+ properties: {
810
+ success: { type: 'boolean' },
811
+ message: { type: 'string' },
812
+ },
813
+ },
814
+ },
815
+ },
816
+ },
817
+ },
818
+ },
819
+ },
820
+ '/api/router/restart': {
821
+ post: {
822
+ tags: ['Router'],
823
+ summary: 'Restart router',
824
+ description: 'Restart the router service',
825
+ security: [{ BearerAuth: [] }],
826
+ responses: {
827
+ 200: {
828
+ description: 'Router restarted',
829
+ content: {
830
+ 'application/json': {
831
+ schema: {
832
+ type: 'object',
833
+ properties: {
834
+ success: { type: 'boolean' },
835
+ message: { type: 'string' },
836
+ },
837
+ },
838
+ },
839
+ },
840
+ },
841
+ },
842
+ },
843
+ },
844
+ '/api/router/logs': {
845
+ get: {
846
+ tags: ['Router'],
847
+ summary: 'Get router logs',
848
+ description: `
849
+ Retrieve router logs with flexible filtering.
850
+
851
+ **Log Types:**
852
+ - \`activity\`: Router request logs (stdout)
853
+ - \`system\`: System diagnostic logs (stderr)
854
+ - \`both\`: Both activity and system logs
855
+ `,
856
+ security: [{ BearerAuth: [] }],
857
+ parameters: [
858
+ {
859
+ name: 'type',
860
+ in: 'query',
861
+ description: 'Log type to retrieve',
862
+ schema: {
863
+ type: 'string',
864
+ enum: ['activity', 'system', 'both'],
865
+ default: 'both',
866
+ },
867
+ },
868
+ {
869
+ name: 'lines',
870
+ in: 'query',
871
+ description: 'Number of lines to return',
872
+ schema: {
873
+ type: 'integer',
874
+ default: 100,
875
+ minimum: 1,
876
+ maximum: 10000,
877
+ },
878
+ },
879
+ ],
880
+ responses: {
881
+ 200: {
882
+ description: 'Logs retrieved successfully',
883
+ content: {
884
+ 'application/json': {
885
+ schema: {
886
+ type: 'object',
887
+ properties: {
888
+ stdout: { type: 'string', description: 'Activity logs' },
889
+ stderr: { type: 'string', description: 'System logs' },
890
+ },
891
+ },
892
+ },
893
+ },
894
+ },
895
+ },
896
+ },
897
+ },
898
+ },
899
+ components: {
900
+ securitySchemes: {
901
+ BearerAuth: {
902
+ type: 'http',
903
+ scheme: 'bearer',
904
+ description: 'API key from ~/.llamacpp/admin.json',
905
+ },
906
+ },
907
+ responses: {
908
+ NotFound: {
909
+ description: 'Resource not found',
910
+ content: {
911
+ 'application/json': {
912
+ schema: {
913
+ type: 'object',
914
+ properties: {
915
+ error: { type: 'string' },
916
+ message: { type: 'string' },
917
+ code: { type: 'string' },
918
+ },
919
+ },
920
+ },
921
+ },
922
+ },
923
+ Unauthorized: {
924
+ description: 'Unauthorized - invalid or missing API key',
925
+ content: {
926
+ 'application/json': {
927
+ schema: {
928
+ type: 'object',
929
+ properties: {
930
+ error: { type: 'string', example: 'Unauthorized' },
931
+ message: { type: 'string', example: 'Invalid or missing API key' },
932
+ code: { type: 'string', example: 'UNAUTHORIZED' },
933
+ },
934
+ },
935
+ },
936
+ },
937
+ },
938
+ },
939
+ schemas: {
940
+ Server: {
941
+ type: 'object',
942
+ properties: {
943
+ id: { type: 'string', example: 'llama-3-2-3b' },
944
+ modelName: { type: 'string', example: 'llama-3.2-3b-instruct-q4_k_m.gguf' },
945
+ modelPath: { type: 'string' },
946
+ port: { type: 'number', example: 9001 },
947
+ host: { type: 'string', example: '127.0.0.1' },
948
+ threads: { type: 'number', example: 8 },
949
+ ctxSize: { type: 'number', example: 8192 },
950
+ gpuLayers: { type: 'number', example: 60 },
951
+ verbose: { type: 'boolean', example: false },
952
+ alias: { type: 'string', example: 'thinking', nullable: true },
953
+ status: {
954
+ type: 'string',
955
+ enum: ['running', 'stopped', 'starting', 'error'],
956
+ example: 'running',
957
+ },
958
+ pid: { type: 'number', example: 12345, nullable: true },
959
+ healthy: { type: 'boolean', example: true, nullable: true },
960
+ httpLogPath: { type: 'string' },
961
+ stderrPath: { type: 'string' },
962
+ stdoutPath: { type: 'string' },
963
+ },
964
+ },
965
+ Model: {
966
+ type: 'object',
967
+ properties: {
968
+ filename: { type: 'string', example: 'llama-3.2-3b-instruct-q4_k_m.gguf' },
969
+ path: { type: 'string' },
970
+ size: { type: 'number', example: 2147483648 },
971
+ sizeFormatted: { type: 'string', example: '2.00 GB' },
972
+ modified: { type: 'string', format: 'date-time' },
973
+ isSharded: { type: 'boolean', example: false },
974
+ shardPaths: { type: 'array', items: { type: 'string' }, nullable: true },
975
+ serversUsing: { type: 'number', example: 2 },
976
+ serverIds: { type: 'array', items: { type: 'string' } },
977
+ },
978
+ },
979
+ RouterInfo: {
980
+ type: 'object',
981
+ properties: {
982
+ status: { type: 'string', enum: ['running', 'stopped'] },
983
+ pid: { type: 'number', nullable: true },
984
+ config: {
985
+ type: 'object',
986
+ properties: {
987
+ port: { type: 'number', example: 9100 },
988
+ host: { type: 'string', example: '127.0.0.1' },
989
+ verbose: { type: 'boolean' },
990
+ requestTimeout: { type: 'number' },
991
+ healthCheckInterval: { type: 'number' },
992
+ },
993
+ },
994
+ },
995
+ },
996
+ DownloadJob: {
997
+ type: 'object',
998
+ properties: {
999
+ id: { type: 'string' },
1000
+ repo: { type: 'string' },
1001
+ filename: { type: 'string' },
1002
+ status: {
1003
+ type: 'string',
1004
+ enum: ['downloading', 'completed', 'failed', 'cancelled'],
1005
+ },
1006
+ progress: { type: 'number', minimum: 0, maximum: 100 },
1007
+ downloadedBytes: { type: 'number' },
1008
+ totalBytes: { type: 'number' },
1009
+ startTime: { type: 'string', format: 'date-time' },
1010
+ endTime: { type: 'string', format: 'date-time', nullable: true },
1011
+ error: { type: 'string', nullable: true },
1012
+ },
1013
+ },
1014
+ },
1015
+ },
1016
+ };
1017
+ //# sourceMappingURL=openapi-spec.js.map