marifold 0.60.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 (110) hide show
  1. package/LICENSE +674 -0
  2. package/dist/auth/ChatGptAuth.d.ts +17 -0
  3. package/dist/auth/ChatGptAuth.d.ts.map +1 -0
  4. package/dist/auth/ChatGptAuth.js +215 -0
  5. package/dist/auth/ChatGptAuth.js.map +1 -0
  6. package/dist/auth/GitHubCopilotAuth.d.ts +10 -0
  7. package/dist/auth/GitHubCopilotAuth.d.ts.map +1 -0
  8. package/dist/auth/GitHubCopilotAuth.js +118 -0
  9. package/dist/auth/GitHubCopilotAuth.js.map +1 -0
  10. package/dist/auth/XaiAuth.d.ts +27 -0
  11. package/dist/auth/XaiAuth.d.ts.map +1 -0
  12. package/dist/auth/XaiAuth.js +280 -0
  13. package/dist/auth/XaiAuth.js.map +1 -0
  14. package/dist/commands/RuntimeFactory.d.ts +8 -0
  15. package/dist/commands/RuntimeFactory.d.ts.map +1 -0
  16. package/dist/commands/RuntimeFactory.js +13 -0
  17. package/dist/commands/RuntimeFactory.js.map +1 -0
  18. package/dist/commands/agent.d.ts +4 -0
  19. package/dist/commands/agent.d.ts.map +1 -0
  20. package/dist/commands/agent.js +130 -0
  21. package/dist/commands/agent.js.map +1 -0
  22. package/dist/commands/ask.d.ts +4 -0
  23. package/dist/commands/ask.d.ts.map +1 -0
  24. package/dist/commands/ask.js +57 -0
  25. package/dist/commands/ask.js.map +1 -0
  26. package/dist/commands/channel.d.ts +8 -0
  27. package/dist/commands/channel.d.ts.map +1 -0
  28. package/dist/commands/channel.js +114 -0
  29. package/dist/commands/channel.js.map +1 -0
  30. package/dist/commands/chat.d.ts +4 -0
  31. package/dist/commands/chat.d.ts.map +1 -0
  32. package/dist/commands/chat.js +352 -0
  33. package/dist/commands/chat.js.map +1 -0
  34. package/dist/commands/config.d.ts +18 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +228 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/doctor.d.ts +11 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +86 -0
  41. package/dist/commands/doctor.js.map +1 -0
  42. package/dist/commands/init.d.ts +4 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +135 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/model.d.ts +4 -0
  47. package/dist/commands/model.d.ts.map +1 -0
  48. package/dist/commands/model.js +384 -0
  49. package/dist/commands/model.js.map +1 -0
  50. package/dist/commands/profile.d.ts +4 -0
  51. package/dist/commands/profile.d.ts.map +1 -0
  52. package/dist/commands/profile.js +231 -0
  53. package/dist/commands/profile.js.map +1 -0
  54. package/dist/commands/provider.d.ts +4 -0
  55. package/dist/commands/provider.d.ts.map +1 -0
  56. package/dist/commands/provider.js +254 -0
  57. package/dist/commands/provider.js.map +1 -0
  58. package/dist/commands/schedule.d.ts +4 -0
  59. package/dist/commands/schedule.d.ts.map +1 -0
  60. package/dist/commands/schedule.js +141 -0
  61. package/dist/commands/schedule.js.map +1 -0
  62. package/dist/commands/service.d.ts +15 -0
  63. package/dist/commands/service.d.ts.map +1 -0
  64. package/dist/commands/service.js +421 -0
  65. package/dist/commands/service.js.map +1 -0
  66. package/dist/commands/session.d.ts +4 -0
  67. package/dist/commands/session.d.ts.map +1 -0
  68. package/dist/commands/session.js +171 -0
  69. package/dist/commands/session.js.map +1 -0
  70. package/dist/commands/status.d.ts +4 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +59 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +74 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/input/InteractivePrompt.d.ts +9 -0
  79. package/dist/input/InteractivePrompt.d.ts.map +1 -0
  80. package/dist/input/InteractivePrompt.js +101 -0
  81. package/dist/input/InteractivePrompt.js.map +1 -0
  82. package/dist/input/ModelPicker.d.ts +34 -0
  83. package/dist/input/ModelPicker.d.ts.map +1 -0
  84. package/dist/input/ModelPicker.js +327 -0
  85. package/dist/input/ModelPicker.js.map +1 -0
  86. package/dist/input/PromptAbort.d.ts +11 -0
  87. package/dist/input/PromptAbort.d.ts.map +1 -0
  88. package/dist/input/PromptAbort.js +28 -0
  89. package/dist/input/PromptAbort.js.map +1 -0
  90. package/dist/input/SecretPrompt.d.ts +3 -0
  91. package/dist/input/SecretPrompt.d.ts.map +1 -0
  92. package/dist/input/SecretPrompt.js +61 -0
  93. package/dist/input/SecretPrompt.js.map +1 -0
  94. package/dist/input/TerminalSelect.d.ts +17 -0
  95. package/dist/input/TerminalSelect.d.ts.map +1 -0
  96. package/dist/input/TerminalSelect.js +153 -0
  97. package/dist/input/TerminalSelect.js.map +1 -0
  98. package/dist/output/ConsolePrinter.d.ts +12 -0
  99. package/dist/output/ConsolePrinter.d.ts.map +1 -0
  100. package/dist/output/ConsolePrinter.js +69 -0
  101. package/dist/output/ConsolePrinter.js.map +1 -0
  102. package/dist/output/TerminalStyle.d.ts +11 -0
  103. package/dist/output/TerminalStyle.d.ts.map +1 -0
  104. package/dist/output/TerminalStyle.js +41 -0
  105. package/dist/output/TerminalStyle.js.map +1 -0
  106. package/dist/service/ServiceProcess.d.ts +45 -0
  107. package/dist/service/ServiceProcess.d.ts.map +1 -0
  108. package/dist/service/ServiceProcess.js +288 -0
  109. package/dist/service/ServiceProcess.js.map +1 -0
  110. package/package.json +34 -0
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerServiceCommand = registerServiceCommand;
37
+ exports.waitForShutdown = waitForShutdown;
38
+ const child_process_1 = require("child_process");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const core_1 = require("@marifold/core");
42
+ const service_1 = require("@marifold/service");
43
+ const ServiceProcess_1 = require("../service/ServiceProcess");
44
+ const RuntimeFactory_1 = require("./RuntimeFactory");
45
+ const SHUTDOWN_GRACE_MS = 5_000;
46
+ const DAEMON_START_TIMEOUT_MS = 10_000;
47
+ const DAEMON_CHILD_ENV = 'MARIFOLD_SERVICE_DAEMON_CHILD';
48
+ const DAEMON_TOKEN_ENV = 'MARIFOLD_SERVICE_DAEMON_TOKEN';
49
+ function registerServiceCommand(program, printer) {
50
+ const service = program
51
+ .command('service')
52
+ .description('Run and manage the local Marifold HTTP service.');
53
+ addServiceOptions(service)
54
+ .action(async (options) => {
55
+ await runService(program, printer, options);
56
+ });
57
+ addServiceOptions(service.command('start').description('Start the Marifold service.'), true)
58
+ .action(async (options) => {
59
+ if (options.daemon) {
60
+ await startDaemon(program, printer, options);
61
+ }
62
+ else {
63
+ await runService(program, printer, options);
64
+ }
65
+ });
66
+ service
67
+ .command('stop')
68
+ .description('Stop the managed Marifold service.')
69
+ .action(async () => {
70
+ try {
71
+ const stopped = await (0, ServiceProcess_1.stopActiveServiceProcess)();
72
+ if (stopped) {
73
+ process.stdout.write(`Marifold service stopped (PID ${stopped.pid}).\n`);
74
+ }
75
+ else {
76
+ process.stdout.write('Marifold service is not running.\n');
77
+ }
78
+ }
79
+ catch (error) {
80
+ printer.printError(error);
81
+ process.exitCode = 1;
82
+ }
83
+ });
84
+ service
85
+ .command('restart')
86
+ .description('Restart the managed service with its previous launch options.')
87
+ .option('--token <token>', 'Raw bearer token required again when the previous start used --token.')
88
+ .action(async (options) => {
89
+ await restartService(program, printer, options);
90
+ });
91
+ }
92
+ function addServiceOptions(command, allowDaemon = false) {
93
+ command
94
+ .option('--host <host>', 'Host to bind. Non-loopback binds accept private LAN and overlay-network clients only.', '127.0.0.1')
95
+ .option('--port <number>', 'Port to bind. Use 0 for a random open port.', '32140')
96
+ .option('--log', 'Enable HTTP request logging.')
97
+ .option('--token <token>', 'Require this bearer token on API requests (prefer --token-env).')
98
+ .option('--token-env <name>', 'Require the bearer token held in this environment variable.')
99
+ .option('--cors-origin <origin>', 'Allow this browser origin (repeatable), e.g. http://127.0.0.1:5173.', (value, previous) => [...previous, value], [])
100
+ .option('--web-dir <dir>', 'Host the built Web UI from this directory (overrides [service].web_dir).');
101
+ if (allowDaemon)
102
+ command.option('--daemon', 'Run the service in the background.');
103
+ return command;
104
+ }
105
+ async function runService(program, printer, options, configPath) {
106
+ let owner;
107
+ try {
108
+ if (options.cwd)
109
+ process.chdir(options.cwd);
110
+ const loadedConfig = loadServiceConfig(program, configPath);
111
+ const daemonChild = process.env[DAEMON_CHILD_ENV] === '1';
112
+ const rawToken = Boolean(options.token || (daemonChild && options.tokenEnv === DAEMON_TOKEN_ENV));
113
+ const token = resolveTokenFlags(options);
114
+ if (daemonChild) {
115
+ delete process.env[DAEMON_CHILD_ENV];
116
+ if (options.tokenEnv === DAEMON_TOKEN_ENV)
117
+ delete process.env[DAEMON_TOKEN_ENV];
118
+ }
119
+ const corsOrigins = options.corsOrigin && options.corsOrigin.length > 0 ? options.corsOrigin : undefined;
120
+ const webDir = options.webDir ? path.resolve(options.webDir) : undefined;
121
+ const security = (0, service_1.resolveSecurityOptions)(loadedConfig.config.service, { token, corsOrigins });
122
+ const mode = daemonChild ? 'daemon' : 'foreground';
123
+ owner = (0, ServiceProcess_1.claimServiceProcess)(mode, loadedConfig.configPath, (0, ServiceProcess_1.serviceProcessPaths)(), serviceLaunchOptions(options, rawToken));
124
+ const result = await (0, service_1.startMarifoldService)({
125
+ loadedConfig,
126
+ host: options.host,
127
+ port: parsePort(options.port),
128
+ logger: Boolean(options.log),
129
+ auth: { token },
130
+ cors: { origins: corsOrigins },
131
+ web: { dir: webDir },
132
+ });
133
+ (0, ServiceProcess_1.markServiceProcessRunning)(owner, result.address);
134
+ process.stdout.write(`Marifold service listening at ${result.address}\n`);
135
+ if (result.telegram) {
136
+ process.stdout.write(`Telegram bridge active (profile ${result.telegram.profile}).\n`);
137
+ }
138
+ const configuredWebDir = webDir ?? loadedConfig.config.service?.webDir;
139
+ if (configuredWebDir) {
140
+ process.stdout.write(`Web UI: serving ${configuredWebDir}\n`);
141
+ }
142
+ else if (result.webDir) {
143
+ process.stdout.write(`Web UI: ${result.address}\n`);
144
+ }
145
+ if (security.token)
146
+ process.stdout.write('Auth: bearer token required on /v1 (exempt: /health, static).\n');
147
+ if (options.host && !['127.0.0.1', 'localhost', '::1'].includes(options.host)) {
148
+ process.stdout.write('Access: private networks only (LAN, link-local, and Tailscale).\n');
149
+ }
150
+ if (security.corsOrigins.length > 0) {
151
+ process.stdout.write(`CORS: allowing ${security.corsOrigins.join(', ')}\n`);
152
+ }
153
+ if (mode === 'foreground')
154
+ process.stdout.write('Press Ctrl+C to stop.\n');
155
+ await waitForShutdown({
156
+ close: result.server.close.bind(result.server),
157
+ forceClose: () => {
158
+ result.server.server.closeIdleConnections?.();
159
+ result.server.server.closeAllConnections?.();
160
+ },
161
+ onFinish: () => {
162
+ if (owner)
163
+ (0, ServiceProcess_1.releaseServiceProcess)(owner);
164
+ },
165
+ });
166
+ }
167
+ catch (error) {
168
+ printer.printError(error);
169
+ process.exitCode = 1;
170
+ }
171
+ finally {
172
+ if (owner)
173
+ (0, ServiceProcess_1.releaseServiceProcess)(owner);
174
+ }
175
+ }
176
+ async function startDaemon(program, printer, options, configPath) {
177
+ try {
178
+ const loadedConfig = loadServiceConfig(program, configPath);
179
+ resolveTokenFlags(options);
180
+ parsePort(options.port);
181
+ const existing = (0, ServiceProcess_1.getActiveServiceProcess)();
182
+ if (existing)
183
+ throw new Error(`Marifold service is already running (PID ${existing.pid}, ${existing.mode}).`);
184
+ const paths = (0, ServiceProcess_1.serviceProcessPaths)();
185
+ (0, ServiceProcess_1.ensureServiceProcessDir)(paths);
186
+ const logFd = fs.openSync(paths.log, 'a', 0o600);
187
+ let daemon;
188
+ try {
189
+ daemon = (0, child_process_1.spawn)(process.execPath, buildDaemonArgs(loadedConfig.configPath, options), {
190
+ cwd: options.cwd ?? process.cwd(),
191
+ detached: true,
192
+ env: buildDaemonEnv(options),
193
+ stdio: ['ignore', logFd, logFd],
194
+ windowsHide: true,
195
+ });
196
+ }
197
+ finally {
198
+ fs.closeSync(logFd);
199
+ }
200
+ const state = await waitForDaemonStart(daemon, DAEMON_START_TIMEOUT_MS);
201
+ daemon.unref();
202
+ process.stdout.write(`Marifold service started in background (PID ${state.pid}).\n`);
203
+ process.stdout.write(`Log: ${paths.log}\n`);
204
+ }
205
+ catch (error) {
206
+ printer.printError(error);
207
+ process.exitCode = 1;
208
+ }
209
+ }
210
+ function buildDaemonArgs(configPath, options) {
211
+ const args = [path.resolve(__dirname, '../index.js')];
212
+ args.push('--config', configPath);
213
+ args.push('service', 'start');
214
+ args.push('--host', options.host ?? '127.0.0.1');
215
+ args.push('--port', options.port ?? '32140');
216
+ if (options.log)
217
+ args.push('--log');
218
+ if (options.token) {
219
+ args.push('--token-env', DAEMON_TOKEN_ENV);
220
+ }
221
+ else if (options.tokenEnv) {
222
+ args.push('--token-env', options.tokenEnv);
223
+ }
224
+ for (const origin of options.corsOrigin ?? [])
225
+ args.push('--cors-origin', origin);
226
+ if (options.webDir)
227
+ args.push('--web-dir', path.resolve(options.webDir));
228
+ return args;
229
+ }
230
+ async function restartService(program, printer, restartOptions) {
231
+ try {
232
+ const active = (0, ServiceProcess_1.getActiveServiceProcess)();
233
+ if (!active)
234
+ throw new Error('Marifold service is not running.');
235
+ if (!active.launch) {
236
+ throw new Error('The running service has no saved restart options. Stop it and start it once with this Marifold version.');
237
+ }
238
+ const options = serviceOptionsForRestart(active.launch, restartOptions.token);
239
+ if (!fs.existsSync(active.launch.cwd)) {
240
+ throw new Error(`Previous service working directory no longer exists: ${active.launch.cwd}`);
241
+ }
242
+ loadServiceConfig(program, active.configPath);
243
+ resolveTokenFlags(options);
244
+ parsePort(options.port);
245
+ const stopped = await (0, ServiceProcess_1.stopActiveServiceProcess)();
246
+ if (!stopped)
247
+ throw new Error('Marifold service stopped before restart could claim it.');
248
+ process.stdout.write(`Marifold service stopped (PID ${stopped.pid}). Restarting...\n`);
249
+ if (active.mode === 'daemon') {
250
+ await startDaemon(program, printer, options, active.configPath);
251
+ }
252
+ else {
253
+ await runService(program, printer, options, active.configPath);
254
+ }
255
+ }
256
+ catch (error) {
257
+ printer.printError(error);
258
+ process.exitCode = 1;
259
+ }
260
+ }
261
+ function serviceLaunchOptions(options, rawToken) {
262
+ const tokenSource = rawToken ? 'raw' : options.tokenEnv ? 'env' : 'config';
263
+ return {
264
+ host: options.host ?? '127.0.0.1',
265
+ port: options.port ?? '32140',
266
+ cwd: options.cwd ?? process.cwd(),
267
+ log: Boolean(options.log),
268
+ corsOrigins: [...(options.corsOrigin ?? [])],
269
+ ...(options.webDir ? { webDir: path.resolve(options.webDir) } : {}),
270
+ tokenSource,
271
+ ...(tokenSource === 'env' && options.tokenEnv ? { tokenEnv: options.tokenEnv } : {}),
272
+ };
273
+ }
274
+ function serviceOptionsForRestart(launch, token) {
275
+ if (launch.tokenSource === 'raw' && !token) {
276
+ throw core_1.MarifoldError.configInvalid('The service was started with --token. Restart it with marifold service restart --token <token>.');
277
+ }
278
+ return {
279
+ host: launch.host,
280
+ port: launch.port,
281
+ cwd: launch.cwd,
282
+ log: launch.log,
283
+ corsOrigin: [...launch.corsOrigins],
284
+ webDir: launch.webDir,
285
+ ...(token ? { token } : {}),
286
+ ...(!token && launch.tokenSource === 'env' && launch.tokenEnv ? { tokenEnv: launch.tokenEnv } : {}),
287
+ };
288
+ }
289
+ function loadServiceConfig(program, configPath) {
290
+ return configPath ? new core_1.ConfigLoader().load({ configPath }) : (0, RuntimeFactory_1.loadConfig)(program);
291
+ }
292
+ function buildDaemonEnv(options) {
293
+ return {
294
+ ...process.env,
295
+ [DAEMON_CHILD_ENV]: '1',
296
+ ...(options.token ? { [DAEMON_TOKEN_ENV]: options.token } : {}),
297
+ };
298
+ }
299
+ function waitForDaemonStart(child, timeoutMs) {
300
+ return new Promise((resolve, reject) => {
301
+ const deadline = Date.now() + timeoutMs;
302
+ let settled = false;
303
+ const finish = (error) => {
304
+ if (settled)
305
+ return;
306
+ settled = true;
307
+ clearInterval(timer);
308
+ child.off('error', onError);
309
+ child.off('exit', onExit);
310
+ if (error)
311
+ reject(error);
312
+ };
313
+ const check = () => {
314
+ if (settled)
315
+ return;
316
+ try {
317
+ const state = (0, ServiceProcess_1.getActiveServiceProcess)();
318
+ if (state && state.pid === child.pid && state.status === 'running') {
319
+ finish();
320
+ resolve(state);
321
+ }
322
+ else if (Date.now() >= deadline) {
323
+ child.kill('SIGTERM');
324
+ finish(new Error(`Timed out starting the Marifold daemon. See ${(0, ServiceProcess_1.serviceProcessPaths)().log}.`));
325
+ }
326
+ }
327
+ catch (error) {
328
+ child.kill('SIGTERM');
329
+ finish(error instanceof Error ? error : new Error(String(error)));
330
+ }
331
+ };
332
+ const onError = (error) => finish(error);
333
+ const onExit = (code, signal) => {
334
+ finish(new Error(`Marifold daemon exited during startup (code=${code}, signal=${signal}). See ${(0, ServiceProcess_1.serviceProcessPaths)().log}.`));
335
+ };
336
+ const timer = setInterval(check, 50);
337
+ child.once('error', onError);
338
+ child.once('exit', onExit);
339
+ check();
340
+ });
341
+ }
342
+ function resolveTokenFlags(options) {
343
+ if (options.token)
344
+ return options.token;
345
+ if (options.tokenEnv) {
346
+ const token = process.env[options.tokenEnv];
347
+ if (!token)
348
+ throw core_1.MarifoldError.configInvalid(`--token-env ${options.tokenEnv} is not set in the environment.`);
349
+ return token;
350
+ }
351
+ return undefined;
352
+ }
353
+ function parsePort(value) {
354
+ const port = Number.parseInt(value ?? '32140', 10);
355
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
356
+ throw core_1.MarifoldError.configInvalid('--port must be an integer from 0 to 65535.');
357
+ }
358
+ return port;
359
+ }
360
+ function waitForShutdown(options) {
361
+ return new Promise(resolve => {
362
+ let shuttingDown = false;
363
+ let finished = false;
364
+ let forceTimer;
365
+ const terminate = options.terminate ?? (code => process.exit(code));
366
+ const cleanup = () => {
367
+ process.off('SIGINT', onSigint);
368
+ process.off('SIGTERM', onSigterm);
369
+ if (forceTimer)
370
+ clearTimeout(forceTimer);
371
+ };
372
+ const finish = (code) => {
373
+ if (finished)
374
+ return;
375
+ finished = true;
376
+ cleanup();
377
+ try {
378
+ options.onFinish?.();
379
+ }
380
+ catch (error) {
381
+ process.stderr.write(`Service process-state cleanup failed: ${error instanceof Error ? error.message : String(error)}\n`);
382
+ }
383
+ resolve();
384
+ terminate(code);
385
+ };
386
+ const force = (message, code) => {
387
+ if (finished)
388
+ return;
389
+ process.stderr.write(`${message}\n`);
390
+ try {
391
+ options.forceClose?.();
392
+ }
393
+ finally {
394
+ finish(code);
395
+ }
396
+ };
397
+ const shutdown = async (signal) => {
398
+ if (shuttingDown) {
399
+ force('Second shutdown signal received; forcing service termination.', 130);
400
+ return;
401
+ }
402
+ shuttingDown = true;
403
+ process.stdout.write(`Stopping Marifold service (${signal})...\n`);
404
+ forceTimer = setTimeout(() => {
405
+ force(`Service did not stop within ${options.graceMs ?? SHUTDOWN_GRACE_MS}ms; forcing termination.`, 1);
406
+ }, options.graceMs ?? SHUTDOWN_GRACE_MS);
407
+ try {
408
+ await options.close();
409
+ finish(0);
410
+ }
411
+ catch (error) {
412
+ force(`Service cleanup failed: ${error instanceof Error ? error.message : String(error)}`, 1);
413
+ }
414
+ };
415
+ const onSigint = () => { void shutdown('SIGINT'); };
416
+ const onSigterm = () => { void shutdown('SIGTERM'); };
417
+ process.on('SIGINT', onSigint);
418
+ process.on('SIGTERM', onSigterm);
419
+ });
420
+ }
421
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { ConsolePrinter } from '../output/ConsolePrinter';
3
+ export declare function registerSessionCommand(program: Command, printer: ConsolePrinter): void;
4
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAe1D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAgJtF"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSessionCommand = registerSessionCommand;
4
+ const core_1 = require("@marifold/core");
5
+ const InteractivePrompt_1 = require("../input/InteractivePrompt");
6
+ const PromptAbort_1 = require("../input/PromptAbort");
7
+ const RuntimeFactory_1 = require("./RuntimeFactory");
8
+ function registerSessionCommand(program, printer) {
9
+ const session = program
10
+ .command('session')
11
+ .description('Inspect Marifold chat sessions.');
12
+ session
13
+ .command('list')
14
+ .description('List recent sessions.')
15
+ .option('--limit <number>', 'Maximum number of sessions to print.', '50')
16
+ .option('--profile <name>', 'Only list sessions for this profile.')
17
+ .action((options) => {
18
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
19
+ try {
20
+ const limit = Number.parseInt(options.limit ?? '50', 10);
21
+ printer.printSessions(runtime.listSessions(Number.isFinite(limit) ? limit : 50, options.profile));
22
+ }
23
+ catch (error) {
24
+ printer.printError(error);
25
+ process.exitCode = 1;
26
+ }
27
+ finally {
28
+ runtime.close();
29
+ }
30
+ });
31
+ session
32
+ .command('show')
33
+ .description('Show one session and its turns.')
34
+ .argument('<id>', 'Session id.')
35
+ .action((id) => {
36
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
37
+ try {
38
+ const detail = runtime.getSession(id);
39
+ if (!detail) {
40
+ process.stderr.write(`Session not found: ${id}\n`);
41
+ process.exitCode = 1;
42
+ return;
43
+ }
44
+ process.stdout.write(`Session: ${detail.id}\n`);
45
+ process.stdout.write(`Profile: ${detail.profileName}\n`);
46
+ process.stdout.write(`Created: ${detail.createdAt}\n`);
47
+ process.stdout.write(`Updated: ${detail.updatedAt}\n`);
48
+ process.stdout.write(`Turns: ${detail.turnCount}\n\n`);
49
+ for (const turn of detail.turns) {
50
+ process.stdout.write(`${turn.role} · ${turn.timestamp}\n`);
51
+ process.stdout.write(`${turn.content}\n\n`);
52
+ }
53
+ }
54
+ catch (error) {
55
+ printer.printError(error);
56
+ process.exitCode = 1;
57
+ }
58
+ finally {
59
+ runtime.close();
60
+ }
61
+ });
62
+ session
63
+ .command('delete')
64
+ .description('Delete a session and all of its turns.')
65
+ .argument('<id>', 'Session id.')
66
+ .action((id) => {
67
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
68
+ try {
69
+ if (!runtime.deleteSession(id)) {
70
+ process.stderr.write(`Session not found: ${id}\n`);
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+ process.stdout.write(`Deleted session ${id}\n`);
75
+ }
76
+ catch (error) {
77
+ printer.printError(error);
78
+ process.exitCode = 1;
79
+ }
80
+ finally {
81
+ runtime.close();
82
+ }
83
+ });
84
+ session
85
+ .command('clear')
86
+ .description('Clear sessions with optional filters.')
87
+ .option('--profile <name>', 'Only clear sessions for this profile.')
88
+ .option('--before <date>', 'Only clear sessions updated before this date or ISO timestamp.')
89
+ .option('--keep-last <number>', 'Keep this many newest matching sessions.', '0')
90
+ .option('--yes', 'Clear without interactive confirmation.')
91
+ .action(async (options) => {
92
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
93
+ const prompt = new InteractivePrompt_1.InteractivePrompt();
94
+ try {
95
+ const keepLast = parseKeepLast(options.keepLast);
96
+ const before = options.before ? parseBefore(options.before) : undefined;
97
+ if (!options.yes) {
98
+ const summary = [
99
+ options.profile ? `profile '${options.profile}'` : 'all profiles',
100
+ before ? `updated before ${before}` : undefined,
101
+ keepLast > 0 ? `keeping ${keepLast} newest matching session(s)` : undefined,
102
+ ].filter(Boolean).join(', ');
103
+ const answer = await prompt.readUserMessage(`Clear sessions for ${summary}? Type CLEAR to confirm: `);
104
+ if (answer === undefined)
105
+ throw new PromptAbort_1.PromptAbortError();
106
+ if (answer.trim() !== 'CLEAR') {
107
+ process.stdout.write('Aborted.\n');
108
+ process.exitCode = 1;
109
+ return;
110
+ }
111
+ }
112
+ const result = runtime.clearSessions({
113
+ profileName: options.profile,
114
+ before,
115
+ keepLast,
116
+ });
117
+ process.stdout.write(`Cleared ${result.count} session(s).\n`);
118
+ }
119
+ catch (error) {
120
+ if ((0, PromptAbort_1.isPromptAbortError)(error)) {
121
+ process.stderr.write('Aborted.\n');
122
+ process.exitCode = 130;
123
+ return;
124
+ }
125
+ printer.printError(error);
126
+ process.exitCode = 1;
127
+ }
128
+ finally {
129
+ prompt.close();
130
+ runtime.close();
131
+ }
132
+ });
133
+ session
134
+ .command('rename')
135
+ .description('Rename a session id.')
136
+ .argument('<from>', 'Current session id.')
137
+ .argument('<to>', 'New session id.')
138
+ .action((from, to) => {
139
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
140
+ try {
141
+ if (!runtime.renameSession(from, to)) {
142
+ process.stderr.write(`Session not found: ${from}\n`);
143
+ process.exitCode = 1;
144
+ return;
145
+ }
146
+ process.stdout.write(`Renamed session ${from} to ${to}\n`);
147
+ }
148
+ catch (error) {
149
+ printer.printError(error);
150
+ process.exitCode = 1;
151
+ }
152
+ finally {
153
+ runtime.close();
154
+ }
155
+ });
156
+ }
157
+ function parseKeepLast(value) {
158
+ const parsed = Number.parseInt(value ?? '0', 10);
159
+ if (!Number.isInteger(parsed) || parsed < 0) {
160
+ throw core_1.MarifoldError.configInvalid('--keep-last must be a non-negative integer.');
161
+ }
162
+ return parsed;
163
+ }
164
+ function parseBefore(value) {
165
+ const date = new Date(value);
166
+ if (Number.isNaN(date.getTime())) {
167
+ throw core_1.MarifoldError.configInvalid('--before must be a valid date or ISO timestamp.');
168
+ }
169
+ return date.toISOString();
170
+ }
171
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { ConsolePrinter } from '../output/ConsolePrinter';
3
+ export declare function registerStatusCommand(program: Command, printer: ConsolePrinter): void;
4
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAa1D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAoCrF"}