@konstantdotcloud/boombox 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -0
- package/dist/boombox.js +49665 -0
- package/dist/index.d.ts +423 -0
- package/dist/index.js +45031 -0
- package/package.json +53 -0
- package/ui/README.md +142 -0
- package/ui/dist/assets/index-BhlAEUz4.css +1 -0
- package/ui/dist/assets/index-Ci77tcND.js +68 -0
- package/ui/dist/assets/index-Ci77tcND.js.map +1 -0
- package/ui/dist/index.html +14 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Hono } from 'hono';
|
|
3
|
+
import prompts from 'prompts';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
|
|
6
|
+
declare const BOOMBOX_VERSION: string;
|
|
7
|
+
|
|
8
|
+
declare const KonstantSectionSchema: z.ZodObject<{
|
|
9
|
+
tenant_id: z.ZodString;
|
|
10
|
+
api_key: z.ZodString;
|
|
11
|
+
gateway_url: z.ZodString;
|
|
12
|
+
api_key_id: z.ZodOptional<z.ZodString>;
|
|
13
|
+
api_key_expires_at: z.ZodOptional<z.ZodString>;
|
|
14
|
+
user_id: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
tenant_id: string;
|
|
17
|
+
api_key: string;
|
|
18
|
+
gateway_url: string;
|
|
19
|
+
api_key_id?: string | undefined;
|
|
20
|
+
api_key_expires_at?: string | undefined;
|
|
21
|
+
user_id?: string | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
tenant_id: string;
|
|
24
|
+
api_key: string;
|
|
25
|
+
gateway_url: string;
|
|
26
|
+
api_key_id?: string | undefined;
|
|
27
|
+
api_key_expires_at?: string | undefined;
|
|
28
|
+
user_id?: string | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
declare const BoomboxSectionSchema: z.ZodObject<{
|
|
31
|
+
http_port: z.ZodDefault<z.ZodNumber>;
|
|
32
|
+
mcp_enabled: z.ZodDefault<z.ZodBoolean>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
http_port: number;
|
|
35
|
+
mcp_enabled: boolean;
|
|
36
|
+
}, {
|
|
37
|
+
http_port?: number | undefined;
|
|
38
|
+
mcp_enabled?: boolean | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
declare const BoomboxConfigSchema: z.ZodObject<{
|
|
41
|
+
konstant: z.ZodObject<{
|
|
42
|
+
tenant_id: z.ZodString;
|
|
43
|
+
api_key: z.ZodString;
|
|
44
|
+
gateway_url: z.ZodString;
|
|
45
|
+
api_key_id: z.ZodOptional<z.ZodString>;
|
|
46
|
+
api_key_expires_at: z.ZodOptional<z.ZodString>;
|
|
47
|
+
user_id: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
tenant_id: string;
|
|
50
|
+
api_key: string;
|
|
51
|
+
gateway_url: string;
|
|
52
|
+
api_key_id?: string | undefined;
|
|
53
|
+
api_key_expires_at?: string | undefined;
|
|
54
|
+
user_id?: string | undefined;
|
|
55
|
+
}, {
|
|
56
|
+
tenant_id: string;
|
|
57
|
+
api_key: string;
|
|
58
|
+
gateway_url: string;
|
|
59
|
+
api_key_id?: string | undefined;
|
|
60
|
+
api_key_expires_at?: string | undefined;
|
|
61
|
+
user_id?: string | undefined;
|
|
62
|
+
}>;
|
|
63
|
+
boombox: z.ZodDefault<z.ZodObject<{
|
|
64
|
+
http_port: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
mcp_enabled: z.ZodDefault<z.ZodBoolean>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
http_port: number;
|
|
68
|
+
mcp_enabled: boolean;
|
|
69
|
+
}, {
|
|
70
|
+
http_port?: number | undefined;
|
|
71
|
+
mcp_enabled?: boolean | undefined;
|
|
72
|
+
}>>;
|
|
73
|
+
runtime: z.ZodDefault<z.ZodObject<{
|
|
74
|
+
default_kind: z.ZodDefault<z.ZodEnum<["cloud", "vm", "local"]>>;
|
|
75
|
+
/** Mode 2 target URL, usually returned by provision-vm (e.g. https://tenant.exe.xyz/v2). */
|
|
76
|
+
vm_url: z.ZodOptional<z.ZodString>;
|
|
77
|
+
tenant_vm_host: z.ZodOptional<z.ZodString>;
|
|
78
|
+
tenant_vm_token: z.ZodOptional<z.ZodString>;
|
|
79
|
+
local_sandbox: z.ZodDefault<z.ZodEnum<["just-bash", "docker"]>>;
|
|
80
|
+
docker_image: z.ZodOptional<z.ZodString>;
|
|
81
|
+
}, "strip", z.ZodTypeAny, {
|
|
82
|
+
default_kind: "cloud" | "vm" | "local";
|
|
83
|
+
local_sandbox: "just-bash" | "docker";
|
|
84
|
+
vm_url?: string | undefined;
|
|
85
|
+
tenant_vm_host?: string | undefined;
|
|
86
|
+
tenant_vm_token?: string | undefined;
|
|
87
|
+
docker_image?: string | undefined;
|
|
88
|
+
}, {
|
|
89
|
+
default_kind?: "cloud" | "vm" | "local" | undefined;
|
|
90
|
+
vm_url?: string | undefined;
|
|
91
|
+
tenant_vm_host?: string | undefined;
|
|
92
|
+
tenant_vm_token?: string | undefined;
|
|
93
|
+
local_sandbox?: "just-bash" | "docker" | undefined;
|
|
94
|
+
docker_image?: string | undefined;
|
|
95
|
+
}>>;
|
|
96
|
+
admin: z.ZodDefault<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
|
|
97
|
+
}, "strip", z.ZodTypeAny, {
|
|
98
|
+
konstant: {
|
|
99
|
+
tenant_id: string;
|
|
100
|
+
api_key: string;
|
|
101
|
+
gateway_url: string;
|
|
102
|
+
api_key_id?: string | undefined;
|
|
103
|
+
api_key_expires_at?: string | undefined;
|
|
104
|
+
user_id?: string | undefined;
|
|
105
|
+
};
|
|
106
|
+
boombox: {
|
|
107
|
+
http_port: number;
|
|
108
|
+
mcp_enabled: boolean;
|
|
109
|
+
};
|
|
110
|
+
runtime: {
|
|
111
|
+
default_kind: "cloud" | "vm" | "local";
|
|
112
|
+
local_sandbox: "just-bash" | "docker";
|
|
113
|
+
vm_url?: string | undefined;
|
|
114
|
+
tenant_vm_host?: string | undefined;
|
|
115
|
+
tenant_vm_token?: string | undefined;
|
|
116
|
+
docker_image?: string | undefined;
|
|
117
|
+
};
|
|
118
|
+
admin: {};
|
|
119
|
+
}, {
|
|
120
|
+
konstant: {
|
|
121
|
+
tenant_id: string;
|
|
122
|
+
api_key: string;
|
|
123
|
+
gateway_url: string;
|
|
124
|
+
api_key_id?: string | undefined;
|
|
125
|
+
api_key_expires_at?: string | undefined;
|
|
126
|
+
user_id?: string | undefined;
|
|
127
|
+
};
|
|
128
|
+
boombox?: {
|
|
129
|
+
http_port?: number | undefined;
|
|
130
|
+
mcp_enabled?: boolean | undefined;
|
|
131
|
+
} | undefined;
|
|
132
|
+
runtime?: {
|
|
133
|
+
default_kind?: "cloud" | "vm" | "local" | undefined;
|
|
134
|
+
vm_url?: string | undefined;
|
|
135
|
+
tenant_vm_host?: string | undefined;
|
|
136
|
+
tenant_vm_token?: string | undefined;
|
|
137
|
+
local_sandbox?: "just-bash" | "docker" | undefined;
|
|
138
|
+
docker_image?: string | undefined;
|
|
139
|
+
} | undefined;
|
|
140
|
+
admin?: {} | undefined;
|
|
141
|
+
}>;
|
|
142
|
+
type BoomboxConfig = z.infer<typeof BoomboxConfigSchema>;
|
|
143
|
+
type KonstantSection = z.infer<typeof KonstantSectionSchema>;
|
|
144
|
+
type BoomboxSection = z.infer<typeof BoomboxSectionSchema>;
|
|
145
|
+
|
|
146
|
+
declare class ConfigNotFoundError extends Error {
|
|
147
|
+
readonly path: string;
|
|
148
|
+
constructor(path: string);
|
|
149
|
+
}
|
|
150
|
+
declare class ConfigInvalidError extends Error {
|
|
151
|
+
readonly path: string;
|
|
152
|
+
readonly issues: string;
|
|
153
|
+
constructor(path: string, issues: string);
|
|
154
|
+
}
|
|
155
|
+
interface LoadConfigOptions {
|
|
156
|
+
path?: string;
|
|
157
|
+
}
|
|
158
|
+
declare function loadConfig(options?: LoadConfigOptions): BoomboxConfig;
|
|
159
|
+
declare function tryLoadConfig(options?: LoadConfigOptions): BoomboxConfig | null;
|
|
160
|
+
|
|
161
|
+
interface SaveConfigOptions {
|
|
162
|
+
path?: string;
|
|
163
|
+
}
|
|
164
|
+
declare function saveConfig(config: BoomboxConfig, options?: SaveConfigOptions): string;
|
|
165
|
+
declare function renderConfigToml(config: BoomboxConfig): string;
|
|
166
|
+
|
|
167
|
+
declare function getConfigDir(): string;
|
|
168
|
+
declare function getConfigPath(): string;
|
|
169
|
+
|
|
170
|
+
interface HttpServerHandle {
|
|
171
|
+
port: number;
|
|
172
|
+
close: () => Promise<void>;
|
|
173
|
+
url: string;
|
|
174
|
+
}
|
|
175
|
+
interface StartHttpOptions {
|
|
176
|
+
config?: BoomboxConfig;
|
|
177
|
+
getConfig?: () => BoomboxConfig;
|
|
178
|
+
onRevoked?: () => Promise<BoomboxConfig | null>;
|
|
179
|
+
port?: number;
|
|
180
|
+
host?: string;
|
|
181
|
+
fetchImpl?: typeof fetch;
|
|
182
|
+
uiDistPath?: string;
|
|
183
|
+
log?: (msg: string) => void;
|
|
184
|
+
}
|
|
185
|
+
interface BuildHttpOptions {
|
|
186
|
+
config?: BoomboxConfig;
|
|
187
|
+
getConfig?: () => BoomboxConfig;
|
|
188
|
+
onRevoked?: () => Promise<BoomboxConfig | null>;
|
|
189
|
+
fetchImpl?: typeof fetch;
|
|
190
|
+
uiDistPath?: string;
|
|
191
|
+
log?: (msg: string) => void;
|
|
192
|
+
}
|
|
193
|
+
declare function buildHttpApp(options: BuildHttpOptions): Hono;
|
|
194
|
+
declare function startHttp(options: StartHttpOptions): Promise<HttpServerHandle>;
|
|
195
|
+
|
|
196
|
+
interface BuildProxyOptions {
|
|
197
|
+
getConfig: () => BoomboxConfig;
|
|
198
|
+
fetchImpl?: typeof fetch;
|
|
199
|
+
onRevoked?: () => Promise<BoomboxConfig | null>;
|
|
200
|
+
log?: (msg: string) => void;
|
|
201
|
+
}
|
|
202
|
+
declare function buildProxy(options: BuildProxyOptions): Hono;
|
|
203
|
+
|
|
204
|
+
declare function startStdioMcp(config: BoomboxConfig): Promise<void>;
|
|
205
|
+
|
|
206
|
+
interface ServeOptions {
|
|
207
|
+
config?: BoomboxConfig;
|
|
208
|
+
getConfig?: () => BoomboxConfig;
|
|
209
|
+
onRevoked?: () => Promise<BoomboxConfig | null>;
|
|
210
|
+
mcp: boolean;
|
|
211
|
+
http: boolean;
|
|
212
|
+
port?: number;
|
|
213
|
+
host?: string;
|
|
214
|
+
log?: (msg: string) => void;
|
|
215
|
+
}
|
|
216
|
+
interface ServeHandle {
|
|
217
|
+
http?: HttpServerHandle;
|
|
218
|
+
mcp?: Promise<void>;
|
|
219
|
+
}
|
|
220
|
+
declare function serve(options: ServeOptions): Promise<ServeHandle>;
|
|
221
|
+
|
|
222
|
+
interface InitOptions {
|
|
223
|
+
configPath?: string;
|
|
224
|
+
prompter?: typeof prompts;
|
|
225
|
+
fetchImpl?: typeof fetch;
|
|
226
|
+
skipVerify?: boolean;
|
|
227
|
+
log?: (msg: string) => void;
|
|
228
|
+
tenantId?: string;
|
|
229
|
+
apiKey?: string;
|
|
230
|
+
tenantApiKey?: string;
|
|
231
|
+
gatewayUrl?: string;
|
|
232
|
+
vmUrl?: string;
|
|
233
|
+
portkeyVirtualKey?: string;
|
|
234
|
+
fromEnrollPath?: string;
|
|
235
|
+
}
|
|
236
|
+
interface InitResult {
|
|
237
|
+
configPath: string;
|
|
238
|
+
config: BoomboxConfig;
|
|
239
|
+
verified: boolean;
|
|
240
|
+
whoami?: unknown;
|
|
241
|
+
}
|
|
242
|
+
declare function runInit(options?: InitOptions): Promise<InitResult>;
|
|
243
|
+
|
|
244
|
+
interface ServeCliOptions {
|
|
245
|
+
mcp?: boolean;
|
|
246
|
+
http?: boolean;
|
|
247
|
+
port?: number;
|
|
248
|
+
profile?: 'default' | 'advanced' | 'operator';
|
|
249
|
+
configPath?: string;
|
|
250
|
+
log?: (msg: string) => void;
|
|
251
|
+
}
|
|
252
|
+
declare function runServe(options?: ServeCliOptions): Promise<void>;
|
|
253
|
+
|
|
254
|
+
interface DoctorOptions {
|
|
255
|
+
configPath?: string;
|
|
256
|
+
fetchImpl?: typeof fetch;
|
|
257
|
+
log?: (msg: string) => void;
|
|
258
|
+
}
|
|
259
|
+
interface DoctorReport {
|
|
260
|
+
ok: boolean;
|
|
261
|
+
checks: DoctorCheck[];
|
|
262
|
+
}
|
|
263
|
+
interface DoctorCheck {
|
|
264
|
+
name: string;
|
|
265
|
+
ok: boolean;
|
|
266
|
+
detail: string;
|
|
267
|
+
}
|
|
268
|
+
declare function runDoctor(options?: DoctorOptions): Promise<DoctorReport>;
|
|
269
|
+
|
|
270
|
+
interface AdminCliOptions {
|
|
271
|
+
configPath?: string;
|
|
272
|
+
cloudUrl?: string;
|
|
273
|
+
fetchImpl?: typeof fetch;
|
|
274
|
+
openBrowser?: (url: string) => Promise<unknown>;
|
|
275
|
+
log?: (msg: string) => void;
|
|
276
|
+
}
|
|
277
|
+
declare function runAdmin(options?: AdminCliOptions): Promise<string>;
|
|
278
|
+
|
|
279
|
+
interface LoginOptions {
|
|
280
|
+
configPath?: string;
|
|
281
|
+
tenantId?: string;
|
|
282
|
+
cloudUrl?: string;
|
|
283
|
+
prompter?: typeof prompts;
|
|
284
|
+
fetchImpl?: typeof fetch;
|
|
285
|
+
openBrowser?: (url: string) => Promise<void>;
|
|
286
|
+
sleep?: (ms: number) => Promise<void>;
|
|
287
|
+
timeoutMs?: number;
|
|
288
|
+
pollIntervalMs?: number;
|
|
289
|
+
log?: (msg: string) => void;
|
|
290
|
+
errLog?: (msg: string) => void;
|
|
291
|
+
sessionId?: string;
|
|
292
|
+
verifier?: string;
|
|
293
|
+
}
|
|
294
|
+
declare function runLogin(options?: LoginOptions): Promise<BoomboxConfig>;
|
|
295
|
+
|
|
296
|
+
interface UpgradeOptions {
|
|
297
|
+
/** Only report whether a newer version is available; do not install. */
|
|
298
|
+
check?: boolean;
|
|
299
|
+
/** Reinstall the latest even if already current. */
|
|
300
|
+
force?: boolean;
|
|
301
|
+
log?: (msg: string) => void;
|
|
302
|
+
errLog?: (msg: string) => void;
|
|
303
|
+
/** Test seam: resolve the latest published version (null if the registry is unreachable). */
|
|
304
|
+
fetchLatestVersion?: () => Promise<string | null>;
|
|
305
|
+
/** Test seam: install the latest globally; resolves to the process exit code. */
|
|
306
|
+
installLatest?: () => Promise<number>;
|
|
307
|
+
/** Test seam: override the running version. */
|
|
308
|
+
currentVersion?: string;
|
|
309
|
+
/** Test seam: override npx detection. */
|
|
310
|
+
isNpx?: boolean;
|
|
311
|
+
}
|
|
312
|
+
declare function runUpgrade(options?: UpgradeOptions): Promise<number>;
|
|
313
|
+
|
|
314
|
+
interface ReloadCliOptions {
|
|
315
|
+
pidfilePath?: string;
|
|
316
|
+
log?: (msg: string) => void;
|
|
317
|
+
signaller?: (pid: number, signal: NodeJS.Signals) => void;
|
|
318
|
+
isAlive?: (pid: number) => boolean;
|
|
319
|
+
}
|
|
320
|
+
interface ReloadResult {
|
|
321
|
+
ok: boolean;
|
|
322
|
+
pid: number | null;
|
|
323
|
+
reason?: string;
|
|
324
|
+
}
|
|
325
|
+
declare function runReload(options?: ReloadCliOptions): Promise<ReloadResult>;
|
|
326
|
+
|
|
327
|
+
interface StopCliOptions {
|
|
328
|
+
pidfilePath?: string;
|
|
329
|
+
timeoutMs?: number;
|
|
330
|
+
log?: (msg: string) => void;
|
|
331
|
+
signaller?: (pid: number, signal: NodeJS.Signals | 0) => void;
|
|
332
|
+
sleep?: (ms: number) => Promise<void>;
|
|
333
|
+
isAlive?: (pid: number) => boolean;
|
|
334
|
+
}
|
|
335
|
+
interface StopResult {
|
|
336
|
+
ok: boolean;
|
|
337
|
+
pid: number | null;
|
|
338
|
+
reason?: string;
|
|
339
|
+
forced?: boolean;
|
|
340
|
+
}
|
|
341
|
+
declare function runStop(options?: StopCliOptions): Promise<StopResult>;
|
|
342
|
+
|
|
343
|
+
interface RestartCliOptions extends StopCliOptions {
|
|
344
|
+
detach?: boolean;
|
|
345
|
+
serveArgs?: string[];
|
|
346
|
+
binPath?: string;
|
|
347
|
+
spawnImpl?: typeof spawn;
|
|
348
|
+
}
|
|
349
|
+
interface RestartResult {
|
|
350
|
+
stopped: boolean;
|
|
351
|
+
spawnedPid: number | null;
|
|
352
|
+
reason?: string;
|
|
353
|
+
}
|
|
354
|
+
declare function runRestart(options?: RestartCliOptions): Promise<RestartResult>;
|
|
355
|
+
|
|
356
|
+
type ConfigChangeListener = (next: BoomboxConfig, prev: BoomboxConfig) => void;
|
|
357
|
+
interface ConfigStoreOptions {
|
|
358
|
+
/** Optional override for the config path (defaults to getConfigPath()). */
|
|
359
|
+
path?: string;
|
|
360
|
+
/** Initial config. If omitted, the store loads from disk eagerly. */
|
|
361
|
+
initial?: BoomboxConfig;
|
|
362
|
+
/** Override the loader (used in tests). */
|
|
363
|
+
loader?: (opts: LoadConfigOptions) => BoomboxConfig;
|
|
364
|
+
/** Override the fs watcher (used in tests). */
|
|
365
|
+
watcher?: (path: string, onChange: () => void) => () => void;
|
|
366
|
+
/** Debounce window for fs change events. Default: 200ms. */
|
|
367
|
+
debounceMs?: number;
|
|
368
|
+
/** Per-event log sink. */
|
|
369
|
+
log?: (msg: string) => void;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* In-memory holder for the boombox runtime config.
|
|
373
|
+
*
|
|
374
|
+
* Supports:
|
|
375
|
+
* - Synchronous reads via {@link getCurrent}
|
|
376
|
+
* - Explicit reloads via {@link reload} (concurrent calls dedupe)
|
|
377
|
+
* - File-watch driven reloads via {@link watch} / {@link unwatch}
|
|
378
|
+
* - Listener notification on every successful reload
|
|
379
|
+
*/
|
|
380
|
+
declare class ConfigStore {
|
|
381
|
+
private readonly path;
|
|
382
|
+
private readonly loader;
|
|
383
|
+
private readonly watcherFactory;
|
|
384
|
+
private readonly debounceMs;
|
|
385
|
+
private readonly log;
|
|
386
|
+
private current;
|
|
387
|
+
private listeners;
|
|
388
|
+
private pendingReload;
|
|
389
|
+
private stopWatcher;
|
|
390
|
+
private debounceTimer;
|
|
391
|
+
constructor(options?: ConfigStoreOptions);
|
|
392
|
+
/** Synchronous accessor for the latest config. */
|
|
393
|
+
getCurrent(): BoomboxConfig;
|
|
394
|
+
getPath(): string;
|
|
395
|
+
/**
|
|
396
|
+
* Re-read the config from disk and atomically replace {@link current}.
|
|
397
|
+
* Concurrent callers share a single in-flight load (dedupe).
|
|
398
|
+
* On parse/validation failure, the existing config is kept and the error is
|
|
399
|
+
* re-thrown to the caller; listeners are NOT notified.
|
|
400
|
+
*/
|
|
401
|
+
reload(): Promise<BoomboxConfig>;
|
|
402
|
+
/**
|
|
403
|
+
* Begin watching the config file. fs change events are debounced and trigger
|
|
404
|
+
* {@link reload}. Calls beyond the first are no-ops until {@link unwatch}.
|
|
405
|
+
*/
|
|
406
|
+
watch(): void;
|
|
407
|
+
unwatch(): void;
|
|
408
|
+
onChange(listener: ConfigChangeListener): () => void;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
interface PidfileRecord {
|
|
412
|
+
pid: number;
|
|
413
|
+
port: number;
|
|
414
|
+
started_at: string;
|
|
415
|
+
config_path: string;
|
|
416
|
+
}
|
|
417
|
+
declare function getPidfilePath(): string;
|
|
418
|
+
declare function writePidfile(record: PidfileRecord, path?: string): string;
|
|
419
|
+
declare function readPidfile(path?: string): PidfileRecord | null;
|
|
420
|
+
declare function clearPidfile(path?: string): void;
|
|
421
|
+
declare function isProcessAlive(pid: number): boolean;
|
|
422
|
+
|
|
423
|
+
export { BOOMBOX_VERSION, type BoomboxConfig, BoomboxConfigSchema, type BoomboxSection, BoomboxSectionSchema, ConfigInvalidError, ConfigNotFoundError, ConfigStore, type KonstantSection, KonstantSectionSchema, type PidfileRecord, buildHttpApp, buildProxy, clearPidfile, getConfigDir, getConfigPath, getPidfilePath, isProcessAlive, loadConfig, readPidfile, renderConfigToml, runAdmin, runDoctor, runInit, runLogin, runReload, runRestart, runServe, runStop, runUpgrade, saveConfig, serve, startHttp, startStdioMcp, tryLoadConfig, writePidfile };
|