@ai-support-agent/cli 0.0.35-beta.0 → 0.0.35-beta.2

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 (38) hide show
  1. package/dist/agent-config-sync.d.ts.map +1 -1
  2. package/dist/agent-config-sync.js +6 -1
  3. package/dist/agent-config-sync.js.map +1 -1
  4. package/dist/agent-runner.d.ts.map +1 -1
  5. package/dist/agent-runner.js +12 -2
  6. package/dist/agent-runner.js.map +1 -1
  7. package/dist/agent-transport.d.ts.map +1 -1
  8. package/dist/agent-transport.js +6 -5
  9. package/dist/agent-transport.js.map +1 -1
  10. package/dist/api-client.js +1 -1
  11. package/dist/api-client.js.map +1 -1
  12. package/dist/cli/service/darwin-service.d.ts +33 -1
  13. package/dist/cli/service/darwin-service.d.ts.map +1 -1
  14. package/dist/cli/service/darwin-service.js +421 -45
  15. package/dist/cli/service/darwin-service.js.map +1 -1
  16. package/dist/cli/service/types.d.ts +1 -1
  17. package/dist/cli/service/types.d.ts.map +1 -1
  18. package/dist/cli/service-command.d.ts +1 -1
  19. package/dist/cli/service-command.d.ts.map +1 -1
  20. package/dist/cli/service-command.js +6 -6
  21. package/dist/cli/service-command.js.map +1 -1
  22. package/dist/commands/docker-commands.d.ts.map +1 -1
  23. package/dist/commands/docker-commands.js +12 -0
  24. package/dist/commands/docker-commands.js.map +1 -1
  25. package/dist/docker/docker-runner.d.ts +1 -1
  26. package/dist/docker/docker-runner.d.ts.map +1 -1
  27. package/dist/docker/docker-runner.js +58 -7
  28. package/dist/docker/docker-runner.js.map +1 -1
  29. package/dist/locales/en.json +5 -0
  30. package/dist/locales/ja.json +5 -0
  31. package/dist/locales/locales/en.json +5 -0
  32. package/dist/locales/locales/ja.json +5 -0
  33. package/dist/project-agent.d.ts.map +1 -1
  34. package/dist/project-agent.js +50 -7
  35. package/dist/project-agent.js.map +1 -1
  36. package/dist/types/project.d.ts +1 -0
  37. package/dist/types/project.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -34,11 +34,18 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.DarwinServiceStrategy = exports.getNodePath = exports.getCliEntryPoint = void 0;
37
+ exports.getProjectLabel = getProjectLabel;
38
+ exports.getProjectPlistPath = getProjectPlistPath;
39
+ exports.getAllProjectPlists = getAllProjectPlists;
37
40
  exports.generatePlist = generatePlist;
41
+ exports.generateProjectPlist = generateProjectPlist;
42
+ exports.generateWrapperScript = generateWrapperScript;
43
+ exports.generateUpdateScript = generateUpdateScript;
38
44
  const child_process_1 = require("child_process");
39
45
  const fs = __importStar(require("fs"));
40
46
  const os = __importStar(require("os"));
41
47
  const path = __importStar(require("path"));
48
+ const config_manager_1 = require("../../config-manager");
42
49
  const i18n_1 = require("../../i18n");
43
50
  const logger_1 = require("../../logger");
44
51
  const escape_xml_1 = require("./escape-xml");
@@ -52,6 +59,58 @@ function getPlistPath() {
52
59
  function getLogDir() {
53
60
  return path.join(os.homedir(), 'Library', 'Logs', 'ai-support-agent');
54
61
  }
62
+ // ---------------------------------------------------------------------------
63
+ // Per-project plist helpers
64
+ // ---------------------------------------------------------------------------
65
+ /** Returns the LaunchAgent label for a given project */
66
+ function getProjectLabel(tenantCode, projectCode) {
67
+ const safeTenant = tenantCode.toLowerCase().replace(/[^a-z0-9-]/g, '-');
68
+ const safeProject = projectCode.toLowerCase().replace(/[^a-z0-9-]/g, '-');
69
+ return `${SERVICE_LABEL}.${safeTenant}.${safeProject}`;
70
+ }
71
+ /** Returns the plist file path for a given project */
72
+ function getProjectPlistPath(tenantCode, projectCode) {
73
+ const label = getProjectLabel(tenantCode, projectCode);
74
+ return path.join(os.homedir(), 'Library', 'LaunchAgents', `${label}.plist`);
75
+ }
76
+ /** Lists all per-project plist files under ~/Library/LaunchAgents */
77
+ function getAllProjectPlists() {
78
+ const launchAgentsDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
79
+ const prefix = `${SERVICE_LABEL}.`;
80
+ const results = [];
81
+ try {
82
+ const files = fs.readdirSync(launchAgentsDir);
83
+ for (const file of files) {
84
+ if (file.startsWith(prefix) &&
85
+ file.endsWith('.plist') &&
86
+ file !== `${SERVICE_LABEL}.plist`) {
87
+ const label = file.slice(0, -'.plist'.length);
88
+ results.push({ label, plistPath: path.join(launchAgentsDir, file) });
89
+ }
90
+ }
91
+ }
92
+ catch {
93
+ // LaunchAgents dir doesn't exist yet — return empty list
94
+ }
95
+ return results;
96
+ }
97
+ /** Returns the host-side per-project config dir (mirrors what docker-runner uses) */
98
+ function getProjectConfigHostDir(tenantCode, projectCode) {
99
+ const configDir = process.env.AI_SUPPORT_AGENT_CONFIG_DIR
100
+ ? path.resolve(process.env.AI_SUPPORT_AGENT_CONFIG_DIR)
101
+ : path.join(os.homedir(), '.ai-support-agent');
102
+ return path.join(configDir, 'projects', tenantCode, projectCode, '.ai-support-agent');
103
+ }
104
+ /** Returns the services dir where wrapper scripts are stored */
105
+ function getServicesDir() {
106
+ const configDir = process.env.AI_SUPPORT_AGENT_CONFIG_DIR
107
+ ? path.resolve(process.env.AI_SUPPORT_AGENT_CONFIG_DIR)
108
+ : path.join(os.homedir(), '.ai-support-agent');
109
+ return path.join(configDir, 'services');
110
+ }
111
+ // ---------------------------------------------------------------------------
112
+ // plist generation
113
+ // ---------------------------------------------------------------------------
55
114
  const PASSTHROUGH_ENV_VARS = [
56
115
  'CLAUDE_CODE_OAUTH_TOKEN',
57
116
  'ANTHROPIC_API_KEY',
@@ -115,8 +174,222 @@ ${programArgs}
115
174
  </dict>
116
175
  </plist>`;
117
176
  }
177
+ /** Generate a per-project plist that runs a wrapper shell script */
178
+ function generateProjectPlist(opts) {
179
+ return `<?xml version="1.0" encoding="UTF-8"?>
180
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
181
+ "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
182
+ <plist version="1.0">
183
+ <dict>
184
+ <key>Label</key>
185
+ <string>${(0, escape_xml_1.escapeXml)(opts.label)}</string>
186
+
187
+ <key>ProgramArguments</key>
188
+ <array>
189
+ <string>/bin/bash</string>
190
+ <string>${(0, escape_xml_1.escapeXml)(opts.wrapperScriptPath)}</string>
191
+ </array>
192
+
193
+ <key>RunAtLoad</key>
194
+ <true/>
195
+
196
+ <key>KeepAlive</key>
197
+ <dict>
198
+ <key>SuccessfulExit</key>
199
+ <false/>
200
+ </dict>
201
+
202
+ <key>StandardOutPath</key>
203
+ <string>${(0, escape_xml_1.escapeXml)(path.join(opts.logDir, 'agent.out.log'))}</string>
204
+
205
+ <key>StandardErrorPath</key>
206
+ <string>${(0, escape_xml_1.escapeXml)(path.join(opts.logDir, 'agent.err.log'))}</string>
207
+
208
+ <key>EnvironmentVariables</key>
209
+ <dict>
210
+ <key>PATH</key>
211
+ <string>/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin</string>
212
+ <key>HOME</key>
213
+ <string>${(0, escape_xml_1.escapeXml)(os.homedir())}</string>
214
+ </dict>
215
+ </dict>
216
+ </plist>`;
217
+ }
218
+ /** Convert localhost/127.0.0.1 to host.docker.internal for container use */
219
+ function toContainerApiUrl(apiUrl) {
220
+ return apiUrl.replace(/^(https?:\/\/)(localhost|127\.0\.0\.1)(:\d+)?/, (_, scheme, _host, port) => `${scheme}host.docker.internal${port ?? ''}`);
221
+ }
222
+ /** Generate a bash wrapper script that runs docker for one project */
223
+ function generateWrapperScript(opts) {
224
+ const containerHome = '/home/node';
225
+ const containerConfigDir = `${containerHome}/.ai-support-agent`;
226
+ const homeDir = os.homedir();
227
+ const containerApiUrl = toContainerApiUrl(opts.apiUrl);
228
+ const mountLines = [
229
+ ` -v "${homeDir}/.claude:${containerHome}/.claude:rw" \\`,
230
+ ` -v "${opts.projectConfigHostDir}:${containerConfigDir}:rw" \\`,
231
+ ];
232
+ // Mount .claude.json only if it's a regular file (not a directory)
233
+ mountLines.push(` -v "${homeDir}/.claude.json:${containerHome}/.claude.json:rw" \\`);
234
+ if (opts.projectDir) {
235
+ const containerProjectDir = `/workspace/projects/${opts.projectCode}`;
236
+ mountLines.push(` -v "${opts.projectDir}:${containerProjectDir}:rw" \\`);
237
+ }
238
+ const envLines = [
239
+ ` -e AI_SUPPORT_AGENT_IN_DOCKER=1 \\`,
240
+ ` -e HOME=${containerHome} \\`,
241
+ ` -e AI_SUPPORT_AGENT_CONFIG_DIR=${containerConfigDir} \\`,
242
+ ` -e AI_SUPPORT_AGENT_TOKEN=${opts.token} \\`,
243
+ ` -e AI_SUPPORT_AGENT_API_URL=${containerApiUrl} \\`,
244
+ ];
245
+ if (opts.anthropicApiKey) {
246
+ envLines.push(` -e ANTHROPIC_API_KEY=${opts.anthropicApiKey} \\`);
247
+ }
248
+ if (opts.claudeCodeOauthToken) {
249
+ envLines.push(` -e CLAUDE_CODE_OAUTH_TOKEN=${opts.claudeCodeOauthToken} \\`);
250
+ }
251
+ const containerArgs = [
252
+ 'ai-support-agent', 'start', '--no-docker',
253
+ `--project ${opts.tenantCode}/${opts.projectCode}`,
254
+ ];
255
+ if (opts.verbose)
256
+ containerArgs.push('--verbose');
257
+ return `#!/bin/bash
258
+ set -uo pipefail
259
+
260
+ REBUILD_MARKER="${opts.projectConfigHostDir}/docker-rebuild-needed"
261
+ if [ -f "$REBUILD_MARKER" ]; then
262
+ rm -f "$REBUILD_MARKER"
263
+ ai-support-agent docker-build 2>/dev/null || true
264
+ fi
265
+
266
+ docker run --rm -i \\
267
+ ${mountLines.join('\n')}
268
+ ${envLines.join('\n')}
269
+ ${opts.imageTag} \\
270
+ ${containerArgs.join(' ')}
271
+
272
+ EXIT_CODE=$?
273
+
274
+ if [ "$EXIT_CODE" -eq 42 ]; then
275
+ exec "${opts.updateScriptPath}"
276
+ fi
277
+
278
+ exit "$EXIT_CODE"
279
+ `;
280
+ }
281
+ /** Generate the update-and-restart.sh script */
282
+ function generateUpdateScript() {
283
+ const launchAgentsDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
284
+ const configDir = process.env.AI_SUPPORT_AGENT_CONFIG_DIR
285
+ ? path.resolve(process.env.AI_SUPPORT_AGENT_CONFIG_DIR)
286
+ : path.join(os.homedir(), '.ai-support-agent');
287
+ return `#!/bin/bash
288
+ set -uo pipefail
289
+
290
+ # 1. Unload all per-project LaunchAgent services
291
+ for plist in "${launchAgentsDir}"/com.ai-support-agent.cli.*.plist; do
292
+ [ -f "$plist" ] || continue
293
+ launchctl unload "$plist" 2>/dev/null || true
294
+ done
295
+
296
+ # 2. Install new version if update-version.json exists
297
+ VERSION_FILE="${configDir}/update-version.json"
298
+ if [ -f "$VERSION_FILE" ]; then
299
+ NEW_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('$VERSION_FILE','utf-8')).version||'')}catch(e){console.log('')}" 2>/dev/null || echo "")
300
+ rm -f "$VERSION_FILE"
301
+ if [ -n "$NEW_VERSION" ]; then
302
+ npm install -g "@ai-support-agent/cli@$NEW_VERSION" --quiet 2>/dev/null || true
303
+ ai-support-agent service install 2>/dev/null || true
304
+ fi
305
+ fi
306
+
307
+ # 3. Reload all per-project LaunchAgent services
308
+ for plist in "${launchAgentsDir}"/com.ai-support-agent.cli.*.plist; do
309
+ [ -f "$plist" ] || continue
310
+ launchctl load "$plist" 2>/dev/null || true
311
+ done
312
+
313
+ exit 0
314
+ `;
315
+ }
316
+ // ---------------------------------------------------------------------------
317
+ // DarwinServiceStrategy
318
+ // ---------------------------------------------------------------------------
118
319
  class DarwinServiceStrategy {
119
- install(options) {
320
+ async install(options) {
321
+ // Load project list from config
322
+ const config = (0, config_manager_1.loadConfig)();
323
+ const projects = config ? (0, config_manager_1.getProjectList)(config) : [];
324
+ if (projects.length === 0) {
325
+ // Fallback: legacy single-plist mode (no registered projects with tenantCode)
326
+ this.installLegacy(options);
327
+ return;
328
+ }
329
+ // Per-project mode: generate one plist + wrapper script per project
330
+ const { ensureImage } = await Promise.resolve().then(() => __importStar(require('../../docker/docker-runner')));
331
+ const imageTag = `ai-support-agent:${ensureImage()}`;
332
+ const logDir = getLogDir();
333
+ if (!fs.existsSync(logDir)) {
334
+ fs.mkdirSync(logDir, { recursive: true });
335
+ }
336
+ const launchAgentsDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
337
+ if (!fs.existsSync(launchAgentsDir)) {
338
+ fs.mkdirSync(launchAgentsDir, { recursive: true });
339
+ }
340
+ // Warn about legacy plist if it still exists
341
+ const legacyPlistPath = getPlistPath();
342
+ if (fs.existsSync(legacyPlistPath)) {
343
+ logger_1.logger.warn((0, i18n_1.t)('service.legacyPlistFound', { path: legacyPlistPath }));
344
+ }
345
+ const servicesDir = getServicesDir();
346
+ const updateScriptPath = path.join(process.env.AI_SUPPORT_AGENT_CONFIG_DIR
347
+ ? path.resolve(process.env.AI_SUPPORT_AGENT_CONFIG_DIR)
348
+ : path.join(os.homedir(), '.ai-support-agent'), 'update-and-restart.sh');
349
+ // Generate update-and-restart.sh
350
+ const updateScript = generateUpdateScript();
351
+ fs.writeFileSync(updateScriptPath, updateScript, { mode: 0o700 });
352
+ for (const project of projects) {
353
+ const { tenantCode, projectCode } = project;
354
+ const projectKey = `${tenantCode}-${projectCode.toLowerCase()}`;
355
+ const projectServiceDir = path.join(servicesDir, projectKey);
356
+ if (!fs.existsSync(projectServiceDir)) {
357
+ fs.mkdirSync(projectServiceDir, { recursive: true, mode: 0o700 });
358
+ }
359
+ const projectConfigHostDir = getProjectConfigHostDir(tenantCode, projectCode);
360
+ if (!fs.existsSync(projectConfigHostDir)) {
361
+ fs.mkdirSync(projectConfigHostDir, { recursive: true, mode: 0o700 });
362
+ }
363
+ const wrapperScriptPath = path.join(projectServiceDir, 'run.sh');
364
+ const wrapperScript = generateWrapperScript({
365
+ imageTag,
366
+ tenantCode,
367
+ projectCode,
368
+ projectConfigHostDir,
369
+ projectDir: project.projectDir,
370
+ token: project.token,
371
+ apiUrl: project.apiUrl,
372
+ anthropicApiKey: process.env.ANTHROPIC_API_KEY,
373
+ claudeCodeOauthToken: process.env.CLAUDE_CODE_OAUTH_TOKEN,
374
+ verbose: options.verbose,
375
+ updateScriptPath,
376
+ });
377
+ fs.writeFileSync(wrapperScriptPath, wrapperScript, { mode: 0o700 });
378
+ const label = getProjectLabel(tenantCode, projectCode);
379
+ const plistPath = getProjectPlistPath(tenantCode, projectCode);
380
+ const projectLogDir = path.join(logDir, projectKey);
381
+ if (!fs.existsSync(projectLogDir)) {
382
+ fs.mkdirSync(projectLogDir, { recursive: true });
383
+ }
384
+ const plist = generateProjectPlist({ label, wrapperScriptPath, logDir: projectLogDir });
385
+ fs.writeFileSync(plistPath, plist, 'utf-8');
386
+ logger_1.logger.success((0, i18n_1.t)('service.projectInstalled', { projectCode, path: plistPath }));
387
+ }
388
+ logger_1.logger.info((0, i18n_1.t)('service.loadHintMulti'));
389
+ logger_1.logger.info((0, i18n_1.t)('service.logDir', { path: logDir }));
390
+ logger_1.logger.info((0, i18n_1.t)('service.noLogRotation'));
391
+ }
392
+ installLegacy(options) {
120
393
  const plistPath = getPlistPath();
121
394
  const logDir = getLogDir();
122
395
  const nodePath = (0, node_paths_1.getNodePath)();
@@ -149,81 +422,184 @@ class DarwinServiceStrategy {
149
422
  logger_1.logger.info((0, i18n_1.t)('service.noLogRotation'));
150
423
  }
151
424
  uninstall() {
152
- const plistPath = getPlistPath();
153
- if (!fs.existsSync(plistPath)) {
425
+ let removed = false;
426
+ // Remove all per-project plists
427
+ const projectPlists = getAllProjectPlists();
428
+ for (const { plistPath } of projectPlists) {
429
+ if (fs.existsSync(plistPath)) {
430
+ fs.unlinkSync(plistPath);
431
+ removed = true;
432
+ }
433
+ }
434
+ // Remove legacy plist if present
435
+ const legacyPlistPath = getPlistPath();
436
+ if (fs.existsSync(legacyPlistPath)) {
437
+ logger_1.logger.info((0, i18n_1.t)('service.unloadHint', { label: SERVICE_LABEL }));
438
+ fs.unlinkSync(legacyPlistPath);
439
+ removed = true;
440
+ }
441
+ if (!removed) {
154
442
  logger_1.logger.warn((0, i18n_1.t)('service.notInstalled'));
155
443
  return;
156
444
  }
157
- logger_1.logger.info((0, i18n_1.t)('service.unloadHint', { label: SERVICE_LABEL }));
158
- fs.unlinkSync(plistPath);
159
445
  logger_1.logger.success((0, i18n_1.t)('service.uninstalled'));
160
446
  }
161
447
  start() {
162
- const plistPath = getPlistPath();
163
- if (!fs.existsSync(plistPath)) {
164
- logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
448
+ const projectPlists = getAllProjectPlists();
449
+ if (projectPlists.length === 0) {
450
+ // Fallback to legacy
451
+ const plistPath = getPlistPath();
452
+ if (!fs.existsSync(plistPath)) {
453
+ logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
454
+ return;
455
+ }
456
+ try {
457
+ (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
458
+ logger_1.logger.success((0, i18n_1.t)('service.started'));
459
+ }
460
+ catch (error) {
461
+ const message = error instanceof Error ? error.message : String(error);
462
+ logger_1.logger.error((0, i18n_1.t)('service.startFailed', { message }));
463
+ }
165
464
  return;
166
465
  }
167
- try {
168
- (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
169
- logger_1.logger.success((0, i18n_1.t)('service.started'));
466
+ let failed = false;
467
+ for (const { plistPath } of projectPlists) {
468
+ try {
469
+ (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
470
+ }
471
+ catch (error) {
472
+ const message = error instanceof Error ? error.message : String(error);
473
+ logger_1.logger.error((0, i18n_1.t)('service.startFailed', { message }));
474
+ failed = true;
475
+ }
170
476
  }
171
- catch (error) {
172
- const message = error instanceof Error ? error.message : String(error);
173
- logger_1.logger.error((0, i18n_1.t)('service.startFailed', { message }));
477
+ if (!failed) {
478
+ logger_1.logger.success((0, i18n_1.t)('service.started'));
174
479
  }
175
480
  }
176
481
  stop() {
177
- const plistPath = getPlistPath();
178
- if (!fs.existsSync(plistPath)) {
179
- logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
482
+ const projectPlists = getAllProjectPlists();
483
+ if (projectPlists.length === 0) {
484
+ // Fallback to legacy
485
+ const plistPath = getPlistPath();
486
+ if (!fs.existsSync(plistPath)) {
487
+ logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
488
+ return;
489
+ }
490
+ try {
491
+ (0, child_process_1.execSync)(`launchctl remove ${SERVICE_LABEL}`, { stdio: 'pipe' });
492
+ logger_1.logger.success((0, i18n_1.t)('service.stopped'));
493
+ }
494
+ catch (error) {
495
+ const message = error instanceof Error ? error.message : String(error);
496
+ logger_1.logger.error((0, i18n_1.t)('service.stopFailed', { message }));
497
+ }
180
498
  return;
181
499
  }
182
- try {
183
- (0, child_process_1.execSync)(`launchctl remove ${SERVICE_LABEL}`, { stdio: 'pipe' });
184
- logger_1.logger.success((0, i18n_1.t)('service.stopped'));
500
+ let failed = false;
501
+ for (const { label } of projectPlists) {
502
+ try {
503
+ (0, child_process_1.execSync)(`launchctl remove ${label}`, { stdio: 'pipe' });
504
+ }
505
+ catch (error) {
506
+ const message = error instanceof Error ? error.message : String(error);
507
+ logger_1.logger.error((0, i18n_1.t)('service.stopFailed', { message }));
508
+ failed = true;
509
+ }
185
510
  }
186
- catch (error) {
187
- const message = error instanceof Error ? error.message : String(error);
188
- logger_1.logger.error((0, i18n_1.t)('service.stopFailed', { message }));
511
+ if (!failed) {
512
+ logger_1.logger.success((0, i18n_1.t)('service.stopped'));
189
513
  }
190
514
  }
191
515
  restart() {
192
- const plistPath = getPlistPath();
193
- if (!fs.existsSync(plistPath)) {
194
- logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
516
+ const projectPlists = getAllProjectPlists();
517
+ if (projectPlists.length === 0) {
518
+ // Fallback to legacy
519
+ const plistPath = getPlistPath();
520
+ if (!fs.existsSync(plistPath)) {
521
+ logger_1.logger.error((0, i18n_1.t)('service.notInstalled'));
522
+ return;
523
+ }
524
+ try {
525
+ try {
526
+ (0, child_process_1.execSync)(`launchctl remove ${SERVICE_LABEL}`, { stdio: 'pipe' });
527
+ }
528
+ catch {
529
+ // Service may not be loaded — ignore
530
+ }
531
+ (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
532
+ logger_1.logger.success((0, i18n_1.t)('service.restarted'));
533
+ }
534
+ catch (error) {
535
+ const message = error instanceof Error ? error.message : String(error);
536
+ logger_1.logger.error((0, i18n_1.t)('service.restartFailed', { message }));
537
+ }
195
538
  return;
196
539
  }
197
- try {
540
+ let failed = false;
541
+ for (const { label, plistPath } of projectPlists) {
198
542
  try {
199
- (0, child_process_1.execSync)(`launchctl remove ${SERVICE_LABEL}`, { stdio: 'pipe' });
543
+ try {
544
+ (0, child_process_1.execSync)(`launchctl remove ${label}`, { stdio: 'pipe' });
545
+ }
546
+ catch {
547
+ // Service may not be loaded — ignore
548
+ }
549
+ (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
200
550
  }
201
- catch {
202
- // Service may not be loaded ignore
551
+ catch (error) {
552
+ const message = error instanceof Error ? error.message : String(error);
553
+ logger_1.logger.error((0, i18n_1.t)('service.restartFailed', { message }));
554
+ failed = true;
203
555
  }
204
- (0, child_process_1.execSync)(`launchctl load ${plistPath}`, { stdio: 'pipe' });
205
- logger_1.logger.success((0, i18n_1.t)('service.restarted'));
206
556
  }
207
- catch (error) {
208
- const message = error instanceof Error ? error.message : String(error);
209
- logger_1.logger.error((0, i18n_1.t)('service.restartFailed', { message }));
557
+ if (!failed) {
558
+ logger_1.logger.success((0, i18n_1.t)('service.restarted'));
210
559
  }
211
560
  }
212
561
  status() {
213
- const plistPath = getPlistPath();
562
+ const projectPlists = getAllProjectPlists();
214
563
  const logDir = getLogDir();
215
- if (!fs.existsSync(plistPath)) {
216
- return { installed: false, running: false };
564
+ if (projectPlists.length === 0) {
565
+ // Fallback to legacy
566
+ const plistPath = getPlistPath();
567
+ if (!fs.existsSync(plistPath)) {
568
+ return { installed: false, running: false };
569
+ }
570
+ try {
571
+ const output = (0, child_process_1.execSync)(`launchctl list ${SERVICE_LABEL}`, { stdio: 'pipe' }).toString();
572
+ const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
573
+ const pid = pidMatch ? parseInt(pidMatch[1], 10) : undefined;
574
+ return { installed: true, running: pid !== undefined, pid, logDir };
575
+ }
576
+ catch {
577
+ return { installed: true, running: false, logDir };
578
+ }
217
579
  }
218
- try {
219
- const output = (0, child_process_1.execSync)(`launchctl list ${SERVICE_LABEL}`, { stdio: 'pipe' }).toString();
220
- const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
221
- const pid = pidMatch ? parseInt(pidMatch[1], 10) : undefined;
222
- return { installed: true, running: pid !== undefined, pid, logDir };
580
+ // Multi-project mode: report overall status
581
+ let anyRunning = false;
582
+ let anyInstalled = false;
583
+ let firstPid;
584
+ for (const { label } of projectPlists) {
585
+ anyInstalled = true;
586
+ try {
587
+ const output = (0, child_process_1.execSync)(`launchctl list ${label}`, { stdio: 'pipe' }).toString();
588
+ const pidMatch = output.match(/"PID"\s*=\s*(\d+)/);
589
+ if (pidMatch) {
590
+ anyRunning = true;
591
+ if (!firstPid)
592
+ firstPid = parseInt(pidMatch[1], 10);
593
+ }
594
+ }
595
+ catch {
596
+ // Not loaded
597
+ }
223
598
  }
224
- catch {
225
- return { installed: true, running: false, logDir };
599
+ if (!anyInstalled) {
600
+ return { installed: false, running: false };
226
601
  }
602
+ return { installed: true, running: anyRunning, pid: firstPid, logDir };
227
603
  }
228
604
  }
229
605
  exports.DarwinServiceStrategy = DarwinServiceStrategy;
@@ -1 +1 @@
1
- {"version":3,"file":"darwin-service.js","sourceRoot":"","sources":["../../../src/cli/service/darwin-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"darwin-service.js","sourceRoot":"","sources":["../../../src/cli/service/darwin-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,0CAIC;AAGD,kDAGC;AAGD,kDAoBC;AA0CD,sCAgDC;AAGD,oDA2CC;AAWD,sDAyEC;AAGD,oDAkCC;AA/TD,iDAAwC;AACxC,uCAAwB;AACxB,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAiE;AACjE,qCAA8B;AAC9B,yCAAqC;AACrC,6CAAwC;AACxC,6CAA4D;AAGnD,iGAHA,6BAAgB,OAGA;AAAE,4FAHA,wBAAW,OAGA;AAEtC,MAAM,aAAa,GAAG,0BAA0B,CAAA;AAEhD,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,aAAa,QAAQ,CAAC,CAAA;AACrF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAA;AACvE,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,wDAAwD;AACxD,SAAgB,eAAe,CAAC,UAAkB,EAAE,WAAmB;IACrE,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IACvE,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IACzE,OAAO,GAAG,aAAa,IAAI,UAAU,IAAI,WAAW,EAAE,CAAA;AACxD,CAAC;AAED,sDAAsD;AACtD,SAAgB,mBAAmB,CAAC,UAAkB,EAAE,WAAmB;IACzE,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;AAC7E,CAAC;AAED,qEAAqE;AACrE,SAAgB,mBAAmB;IACjC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,GAAG,aAAa,GAAG,CAAA;IAClC,MAAM,OAAO,GAAgD,EAAE,CAAA;IAC/D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IACE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvB,IAAI,KAAK,GAAG,aAAa,QAAQ,EACjC,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,qFAAqF;AACrF,SAAS,uBAAuB,CAAC,UAAkB,EAAE,WAAmB;IACtE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACvD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAA;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAA;AACvF,CAAC;AAED,gEAAgE;AAChE,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACvD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAA;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;AACzC,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG;IAC3B,yBAAyB;IACzB,mBAAmB;IACnB,wBAAwB;IACxB,0BAA0B;CAC3B,CAAA;AAED,SAAS,qBAAqB;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CACV,kBAAkB,IAAA,sBAAS,EAAC,GAAG,CAAC,2BAA2B,IAAA,sBAAS,EAAC,KAAK,CAAC,WAAW,CACvF,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzB,CAAC;AAED,SAAgB,aAAa,CAAC,OAAsB;IAClD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IACjE,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,IAAA,sBAAS,EAAC,CAAC,CAAC,WAAW,CAAC;SACtD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;;;;cAMK,aAAa;;;;EAIzB,WAAW;;;;;;;;;;cAUC,IAAA,sBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;;;cAG7C,IAAA,sBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;;;;;;;kBAOzC,IAAA,sBAAS,EAAC,EAAE,CAAC,OAAO,EAAE,CAAC,YAAY,qBAAqB,EAAE;;;SAGnE,CAAA;AACT,CAAC;AAED,oEAAoE;AACpE,SAAgB,oBAAoB,CAAC,IAIpC;IACC,OAAO;;;;;;cAMK,IAAA,sBAAS,EAAC,IAAI,CAAC,KAAK,CAAC;;;;;kBAKjB,IAAA,sBAAS,EAAC,IAAI,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;cAarC,IAAA,sBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;;;cAGlD,IAAA,sBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;;;;;;;kBAO9C,IAAA,sBAAS,EAAC,EAAE,CAAC,OAAO,EAAE,CAAC;;;SAGhC,CAAA;AACT,CAAC;AAED,4EAA4E;AAC5E,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,OAAO,CACnB,+CAA+C,EAC/C,CAAC,CAAC,EAAE,MAAc,EAAE,KAAa,EAAE,IAAa,EAAE,EAAE,CAAC,GAAG,MAAM,uBAAuB,IAAI,IAAI,EAAE,EAAE,CAClG,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,SAAgB,qBAAqB,CAAC,IAYrC;IACC,MAAM,aAAa,GAAG,YAAY,CAAA;IAClC,MAAM,kBAAkB,GAAG,GAAG,aAAa,oBAAoB,CAAA;IAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5B,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAEtD,MAAM,UAAU,GAAa;QAC3B,SAAS,OAAO,YAAY,aAAa,iBAAiB;QAC1D,SAAS,IAAI,CAAC,oBAAoB,IAAI,kBAAkB,SAAS;KAClE,CAAA;IACD,mEAAmE;IACnE,UAAU,CAAC,IAAI,CAAC,SAAS,OAAO,iBAAiB,aAAa,sBAAsB,CAAC,CAAA;IAErF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,mBAAmB,GAAG,uBAAuB,IAAI,CAAC,WAAW,EAAE,CAAA;QACrE,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,mBAAmB,SAAS,CAAC,CAAA;IAC3E,CAAC;IAED,MAAM,QAAQ,GAAa;QACzB,sCAAsC;QACtC,aAAa,aAAa,KAAK;QAC/B,oCAAoC,kBAAkB,KAAK;QAC3D,+BAA+B,IAAI,CAAC,KAAK,KAAK;QAC9C,iCAAiC,eAAe,KAAK;KACtD,CAAA;IACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,eAAe,KAAK,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,oBAAoB,KAAK,CAAC,CAAA;IAC/E,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,kBAAkB,EAAE,OAAO,EAAE,aAAa;QAC1C,aAAa,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;KACnD,CAAA;IACD,IAAI,IAAI,CAAC,OAAO;QAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAEjD,OAAO;;;kBAGS,IAAI,CAAC,oBAAoB;;;;;;;EAOzC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;EACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB,IAAI,CAAC,QAAQ;IACb,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;UAKjB,IAAI,CAAC,gBAAgB;;;;CAI9B,CAAA;AACD,CAAC;AAED,gDAAgD;AAChD,SAAgB,oBAAoB;IAClC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACvD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAA;IAEhD,OAAO;;;;gBAIO,eAAe;;;;;;gBAMf,SAAS;;;;;;;;;;;gBAWT,eAAe;;;;;;CAM9B,CAAA;AACD,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAa,qBAAqB;IAChC,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAA;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,+BAAc,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAErD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,8EAA8E;YAC9E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YAC3B,OAAM;QACR,CAAC;QAED,oEAAoE;QACpE,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAA;QAClE,MAAM,QAAQ,GAAG,oBAAoB,WAAW,EAAE,EAAE,CAAA;QAEpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,6CAA6C;QAC7C,MAAM,eAAe,GAAG,YAAY,EAAE,CAAA;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;QACvE,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,EAChD,uBAAuB,CACxB,CAAA;QAED,iCAAiC;QACjC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAA;QAC3C,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;YAC3C,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,CAAA;YAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;YAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACtC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACnE,CAAC;YAED,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YAC7E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACzC,EAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACtE,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;YAChE,MAAM,aAAa,GAAG,qBAAqB,CAAC;gBAC1C,QAAQ;gBACR,UAAU;gBACV,WAAW;gBACX,oBAAoB;gBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC9C,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;gBACzD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,gBAAgB;aACjB,CAAC,CAAA;YACF,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAEnE,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YACtD,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAClD,CAAC;YAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;YACvF,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;YAE3C,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,0BAA0B,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACjF,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAA;QACvC,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAClD,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAA;IACzC,CAAC;IAEO,aAAa,CAAC,OAAuB;QAC3C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;QAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,QAAQ,GAAG,IAAA,wBAAW,GAAE,CAAA;QAC9B,MAAM,UAAU,GAAG,IAAA,6BAAgB,GAAE,CAAA;QAErC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC;YAC1B,QAAQ;YACR,UAAU;YACV,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;QACF,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAE3C,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAC3D,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACvD,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAClD,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,SAAS;QACP,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,gCAAgC;QAChC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;QAC3C,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;gBACxB,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,eAAe,GAAG,YAAY,EAAE,CAAA;QACtC,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;YAC9D,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;YAC9B,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,qBAAqB,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK;QACH,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;QAE3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;YAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,kBAAkB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1D,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,iBAAiB,CAAC,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YACrD,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,kBAAkB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBACnD,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,iBAAiB,CAAC,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,IAAI;QACF,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;QAE3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;YAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,oBAAoB,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAChE,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,iBAAiB,CAAC,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YACpD,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,oBAAoB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBAClD,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,iBAAiB,CAAC,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;QAE3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;YAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,oBAAoB,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAClE,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,IAAA,wBAAQ,EAAC,kBAAkB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1D,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,mBAAmB,CAAC,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YACvD,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,KAAK,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,oBAAoB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,IAAA,wBAAQ,EAAC,kBAAkB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,eAAM,CAAC,KAAK,CAAC,IAAA,QAAC,EAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;gBACrD,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,OAAO,CAAC,IAAA,QAAC,EAAC,mBAAmB,CAAC,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;QAC3C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAE1B,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,qBAAqB;YACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;YAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;YAC7C,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,kBAAkB,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;gBACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;gBAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC5D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;YACpD,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,UAAU,GAAG,KAAK,CAAA;QACtB,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,QAA4B,CAAA;QAEhC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;YACtC,YAAY,GAAG,IAAI,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,kBAAkB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;gBAClD,IAAI,QAAQ,EAAE,CAAC;oBACb,UAAU,GAAG,IAAI,CAAA;oBACjB,IAAI,CAAC,QAAQ;wBAAE,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa;YACf,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC7C,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;IACxE,CAAC;CACF;AA7TD,sDA6TC"}
@@ -9,7 +9,7 @@ export interface ServiceStatus {
9
9
  logDir?: string;
10
10
  }
11
11
  export interface ServiceStrategy {
12
- install(options: ServiceOptions): void;
12
+ install(options: ServiceOptions): void | Promise<void>;
13
13
  uninstall(): void;
14
14
  start(): void;
15
15
  stop(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/service/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IACtC,SAAS,IAAI,IAAI,CAAA;IACjB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,aAAa,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/service/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,SAAS,IAAI,IAAI,CAAA;IACjB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,aAAa,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
@@ -3,7 +3,7 @@ import { generatePlist } from './service/darwin-service';
3
3
  export declare function installService(options: {
4
4
  verbose?: boolean;
5
5
  docker?: boolean;
6
- }): void;
6
+ }): Promise<void>;
7
7
  export declare function uninstallService(): void;
8
8
  export declare function startService(): void;
9
9
  export declare function stopService(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"service-command.d.ts","sourceRoot":"","sources":["../../src/cli/service-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,EAAyB,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAkB/E,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAOrF;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAOlC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA6BlE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE9D;AAGD,OAAO,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"service-command.d.ts","sourceRoot":"","sources":["../../src/cli/service-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,EAAyB,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAkB/E,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpG;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAOlC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA6BlE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE9D;AAGD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -26,13 +26,13 @@ function getStrategy() {
26
26
  return null;
27
27
  }
28
28
  }
29
- function installService(options) {
29
+ async function installService(options) {
30
30
  const strategy = getStrategy();
31
31
  if (!strategy) {
32
32
  logger_1.logger.error((0, i18n_1.t)('service.unsupportedPlatform', { platform: process.platform }));
33
33
  return;
34
34
  }
35
- strategy.install(options);
35
+ await strategy.install(options);
36
36
  }
37
37
  function uninstallService() {
38
38
  const strategy = getStrategy();
@@ -102,8 +102,8 @@ function registerServiceCommands(program) {
102
102
  .description((0, i18n_1.t)('cmd.service.install'))
103
103
  .option('--verbose', (0, i18n_1.t)('cmd.service.install.verbose'))
104
104
  .option('--no-docker', (0, i18n_1.t)('cmd.service.install.noDocker'))
105
- .action((opts) => {
106
- installService(opts);
105
+ .action(async (opts) => {
106
+ await installService(opts);
107
107
  });
108
108
  service
109
109
  .command('uninstall')
@@ -142,8 +142,8 @@ function registerServiceCommands(program) {
142
142
  .description((0, i18n_1.t)('cmd.service.install'))
143
143
  .option('--verbose', (0, i18n_1.t)('cmd.service.install.verbose'))
144
144
  .option('--no-docker', (0, i18n_1.t)('cmd.service.install.noDocker'))
145
- .action((opts) => {
146
- installService(opts);
145
+ .action(async (opts) => {
146
+ await installService(opts);
147
147
  });
148
148
  program
149
149
  .command('uninstall-service')