@calltelemetry/cli 0.3.7 → 0.3.8

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 (78) hide show
  1. package/dist/commands/offline.d.ts.map +1 -1
  2. package/dist/commands/offline.js +78 -105
  3. package/dist/commands/offline.js.map +1 -1
  4. package/dist/commands/self-update.d.ts +2 -3
  5. package/dist/commands/self-update.d.ts.map +1 -1
  6. package/dist/commands/self-update.js +4 -49
  7. package/dist/commands/self-update.js.map +1 -1
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +25 -87
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/lib/auto-update.d.ts +15 -5
  13. package/dist/lib/auto-update.d.ts.map +1 -1
  14. package/dist/lib/auto-update.js +61 -25
  15. package/dist/lib/auto-update.js.map +1 -1
  16. package/dist/lib/bundle.d.ts.map +1 -1
  17. package/dist/lib/bundle.js +2 -9
  18. package/dist/lib/bundle.js.map +1 -1
  19. package/dist/lib/offline-steps.d.ts +33 -0
  20. package/dist/lib/offline-steps.d.ts.map +1 -0
  21. package/dist/lib/offline-steps.js +350 -0
  22. package/dist/lib/offline-steps.js.map +1 -0
  23. package/dist/lib/update-steps.d.ts +17 -0
  24. package/dist/lib/update-steps.d.ts.map +1 -0
  25. package/dist/lib/update-steps.js +169 -0
  26. package/dist/lib/update-steps.js.map +1 -0
  27. package/dist/ui/views/CertsStatusView.d.ts.map +1 -1
  28. package/dist/ui/views/CertsStatusView.js +19 -10
  29. package/dist/ui/views/CertsStatusView.js.map +1 -1
  30. package/dist/ui/views/DbBackupView.d.ts.map +1 -1
  31. package/dist/ui/views/DbBackupView.js +4 -2
  32. package/dist/ui/views/DbBackupView.js.map +1 -1
  33. package/dist/ui/views/DbStatusView.d.ts.map +1 -1
  34. package/dist/ui/views/DbStatusView.js +3 -2
  35. package/dist/ui/views/DbStatusView.js.map +1 -1
  36. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
  37. package/dist/ui/views/DiagDatabaseView.js +12 -10
  38. package/dist/ui/views/DiagDatabaseView.js.map +1 -1
  39. package/dist/ui/views/DiagNetworkView.d.ts.map +1 -1
  40. package/dist/ui/views/DiagNetworkView.js +23 -14
  41. package/dist/ui/views/DiagNetworkView.js.map +1 -1
  42. package/dist/ui/views/DiagServiceView.d.ts.map +1 -1
  43. package/dist/ui/views/DiagServiceView.js +6 -5
  44. package/dist/ui/views/DiagServiceView.js.map +1 -1
  45. package/dist/ui/views/DockerStatusView.d.ts.map +1 -1
  46. package/dist/ui/views/DockerStatusView.js +5 -4
  47. package/dist/ui/views/DockerStatusView.js.map +1 -1
  48. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  49. package/dist/ui/views/MainMenu.js +42 -3
  50. package/dist/ui/views/MainMenu.js.map +1 -1
  51. package/dist/ui/views/MigrateRunView.js +1 -1
  52. package/dist/ui/views/MigrateRunView.js.map +1 -1
  53. package/dist/ui/views/MigrateWatchView.d.ts.map +1 -1
  54. package/dist/ui/views/MigrateWatchView.js +2 -2
  55. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  56. package/dist/ui/views/OfflineApplyView.d.ts +6 -0
  57. package/dist/ui/views/OfflineApplyView.d.ts.map +1 -0
  58. package/dist/ui/views/OfflineApplyView.js +109 -0
  59. package/dist/ui/views/OfflineApplyView.js.map +1 -0
  60. package/dist/ui/views/OfflineDownloadView.d.ts +6 -0
  61. package/dist/ui/views/OfflineDownloadView.d.ts.map +1 -0
  62. package/dist/ui/views/OfflineDownloadView.js +67 -0
  63. package/dist/ui/views/OfflineDownloadView.js.map +1 -0
  64. package/dist/ui/views/OfflineFetchView.d.ts +6 -0
  65. package/dist/ui/views/OfflineFetchView.d.ts.map +1 -0
  66. package/dist/ui/views/OfflineFetchView.js +64 -0
  67. package/dist/ui/views/OfflineFetchView.js.map +1 -0
  68. package/dist/ui/views/OfflineInspectView.d.ts +6 -0
  69. package/dist/ui/views/OfflineInspectView.d.ts.map +1 -0
  70. package/dist/ui/views/OfflineInspectView.js +65 -0
  71. package/dist/ui/views/OfflineInspectView.js.map +1 -0
  72. package/dist/ui/views/OfflineListView.d.ts.map +1 -1
  73. package/dist/ui/views/OfflineListView.js +2 -6
  74. package/dist/ui/views/OfflineListView.js.map +1 -1
  75. package/dist/ui/views/UpdateView.d.ts.map +1 -1
  76. package/dist/ui/views/UpdateView.js +20 -145
  77. package/dist/ui/views/UpdateView.js.map +1 -1
  78. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAoLtD"}
1
+ {"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAiJtD"}
@@ -1,11 +1,8 @@
1
1
  import { render } from 'ink';
2
2
  import React from 'react';
3
- import { execa } from 'execa';
4
- import { existsSync, readFileSync } from 'node:fs';
5
- import { copyFile, mkdir, rm } from 'node:fs/promises';
6
- import { join } from 'node:path';
7
- import { composeUp } from '../lib/compose.js';
8
- import { getPaths } from '../lib/paths.js';
3
+ import { existsSync } from 'node:fs';
4
+ import { runStepsCli } from '../lib/update-steps.js';
5
+ import { fetchSteps, downloadSteps, applySteps, inspectBundle, validateBundle, } from '../lib/offline-steps.js';
9
6
  import * as out from '../utils/output.js';
10
7
  import { OfflineListView } from '../ui/views/OfflineListView.js';
11
8
  export function registerOfflineCommand(program) {
@@ -15,97 +12,43 @@ export function registerOfflineCommand(program) {
15
12
  offline.command('fetch <version>')
16
13
  .description('Download pre-built config bundle from cloud (fast, no Docker images)')
17
14
  .action(async (version) => {
18
- const { gcsBundleBaseUrl } = getPaths();
19
- const bundleFile = `calltelemetry-bundle-${version}.tar.gz`;
20
- const bundleUrl = `${gcsBundleBaseUrl}/${version}/${bundleFile}`;
21
15
  out.header('Fetching Pre-built Bundle');
22
16
  console.log(`Version: ${version}`);
23
17
  console.log();
24
18
  try {
25
- await execa('curl', ['-fL', '--progress-bar', bundleUrl, '-o', bundleFile], {
26
- stdout: 'inherit',
27
- stderr: 'inherit',
28
- });
19
+ await runStepsCli(fetchSteps(version));
29
20
  }
30
21
  catch {
31
- out.errorBox('Failed to download bundle', [
22
+ out.errorBox('Fetch failed', [
32
23
  `Version ${version} may not exist.`,
33
24
  'Check: https://github.com/calltelemetry/calltelemetry/releases',
34
25
  ]);
35
- return;
36
- }
37
- // Verify checksum if available
38
- const checksumUrl = `${bundleUrl}.sha256`;
39
- try {
40
- await execa('curl', ['-sfL', checksumUrl, '-o', `${bundleFile}.sha256`]);
41
- await execa('sha256sum', ['-c', `${bundleFile}.sha256`]);
42
- out.ok('Checksum verified');
43
- await rm(`${bundleFile}.sha256`, { force: true });
44
- }
45
- catch {
46
- out.info('Checksum verification skipped');
26
+ process.exit(1);
47
27
  }
28
+ console.log();
48
29
  out.successBox('Bundle Downloaded');
49
- console.log(`File: ${bundleFile}`);
30
+ console.log(`File: calltelemetry-bundle-${version}.tar.gz`);
50
31
  console.log();
51
- console.log(`To apply: ct offline apply ${bundleFile}`);
32
+ console.log(`To apply: ct offline apply calltelemetry-bundle-${version}.tar.gz`);
52
33
  });
53
34
  offline.command('download <version>')
54
35
  .description('Build full offline bundle with Docker images (slow)')
55
36
  .action(async (version) => {
56
- const { gcsBundleBaseUrl } = getPaths();
57
- const configBundle = `calltelemetry-bundle-${version}.tar.gz`;
58
- const bundleDir = `calltelemetry-offline-${version}`;
59
- const bundleName = `calltelemetry-offline-${version}.tar.gz`;
60
37
  out.header('Creating Offline Bundle (with Docker Images)');
61
38
  console.log(`Version: ${version}`);
62
39
  console.log();
63
- // Download config bundle
64
- console.log('Step 1: Downloading config bundle...');
65
- const bundleUrl = `${gcsBundleBaseUrl}/${version}/${configBundle}`;
66
40
  try {
67
- await execa('curl', ['-fL', '--progress-bar', bundleUrl, '-o', configBundle], {
68
- stdout: 'inherit', stderr: 'inherit',
69
- });
41
+ await runStepsCli(downloadSteps(version));
70
42
  }
71
43
  catch {
72
- out.fail(`Failed to download config bundle for version ${version}`);
73
- return;
74
- }
75
- // Extract
76
- console.log('Step 2: Extracting config bundle...');
77
- await rm(bundleDir, { recursive: true, force: true });
78
- await mkdir(bundleDir, { recursive: true });
79
- await execa('tar', ['-xzf', configBundle, '-C', bundleDir, '--strip-components=1']);
80
- await rm(configBundle, { force: true });
81
- // Pull images
82
- console.log('Step 3: Pulling Docker images...');
83
- const composePath = join(bundleDir, 'docker-compose.yml');
84
- if (!existsSync(composePath)) {
85
- out.fail('docker-compose.yml not found in bundle');
86
- await rm(bundleDir, { recursive: true, force: true });
87
- return;
88
- }
89
- const content = readFileSync(composePath, 'utf-8');
90
- const images = [];
91
- for (const line of content.split('\n')) {
92
- const match = line.match(/image:\s*["']?([^"'\s]+)/);
93
- if (match)
94
- images.push(match[1]);
95
- }
96
- for (const img of images) {
97
- console.log(` Pulling: ${img}`);
98
- await execa('docker', ['pull', img]).catch(() => out.warn(`Failed to pull ${img}`));
44
+ out.errorBox('Download failed', [
45
+ `Failed to build offline bundle for version ${version}.`,
46
+ 'Check network connectivity and Docker status.',
47
+ ]);
48
+ process.exit(1);
99
49
  }
100
- // Save images
101
- console.log('Step 4: Saving Docker images...');
102
- await execa('docker', ['save', ...images, '-o', join(bundleDir, 'images.tar')], {
103
- stdout: 'inherit',
104
- });
105
- // Create final bundle
106
- console.log('Step 5: Creating final bundle archive...');
107
- await execa('tar', ['-czf', bundleName, bundleDir]);
108
- await rm(bundleDir, { recursive: true, force: true });
50
+ const bundleName = `calltelemetry-offline-${version}.tar.gz`;
51
+ console.log();
109
52
  out.successBox('Offline Bundle Created');
110
53
  console.log(`File: ${bundleName}`);
111
54
  console.log();
@@ -117,49 +60,79 @@ export function registerOfflineCommand(program) {
117
60
  .action(async (bundle) => {
118
61
  if (!existsSync(bundle)) {
119
62
  out.fail(`Bundle file not found: ${bundle}`);
120
- return;
63
+ process.exit(1);
121
64
  }
122
- const { installDir, backupDir } = getPaths();
123
65
  out.header('Applying Offline Bundle');
124
66
  console.log(`Bundle: ${bundle}`);
125
- console.log();
126
- const extractDir = `offline-extract-${process.pid}`;
127
- await mkdir(extractDir, { recursive: true });
128
- console.log('Extracting bundle...');
129
- await execa('tar', ['-xzf', bundle, '-C', extractDir, '--strip-components=1']);
130
- // Load Docker images
131
- const imagesFile = join(extractDir, 'images.tar');
132
- if (existsSync(imagesFile)) {
133
- console.log('Loading Docker images...');
134
- await execa('docker', ['load', '-i', imagesFile], { stdout: 'inherit' });
135
- }
136
- // Install configs
137
- console.log('Installing configuration files...');
138
- await mkdir(backupDir, { recursive: true });
139
- const configFiles = ['docker-compose.yml', 'Caddyfile', 'cli.sh', 'nats.conf'];
140
- for (const file of configFiles) {
141
- const src = join(extractDir, file);
142
- if (existsSync(src)) {
143
- const dest = join(installDir, file);
144
- if (existsSync(dest)) {
145
- await copyFile(dest, join(backupDir, `${file}.backup`));
146
- }
147
- await copyFile(src, dest);
148
- console.log(` - ${file}`);
149
- }
67
+ // Pre-apply validation & summary
68
+ const validation = await validateBundle(bundle);
69
+ if (!validation.valid) {
70
+ out.fail(validation.error);
71
+ process.exit(1);
150
72
  }
151
- await rm(extractDir, { recursive: true, force: true });
73
+ const info = await inspectBundle(bundle);
74
+ console.log(`Size: ${info.sizeLabel}`);
75
+ if (info.version)
76
+ console.log(`Version: ${info.version}`);
77
+ console.log(`Configs: ${info.configFiles.join(', ') || 'none'}`);
78
+ console.log(`Images: ${info.hasImages ? `${info.imageNames.length} bundled` : 'none (config-only)'}`);
152
79
  console.log();
153
- console.log('Restarting services...');
154
80
  try {
155
- await execa('systemctl', ['restart', 'docker-compose-app.service']);
81
+ await runStepsCli(applySteps(bundle));
156
82
  }
157
83
  catch {
158
- await composeUp(['-d']);
84
+ out.errorBox('Apply failed', [
85
+ 'Your previous version is still running.',
86
+ 'Check logs with: docker compose logs --tail 50',
87
+ ]);
88
+ process.exit(1);
159
89
  }
90
+ console.log();
160
91
  out.successBox('Offline Bundle Applied');
161
92
  console.log('Check status with: ct status');
162
93
  });
94
+ offline.command('inspect <bundle>')
95
+ .description('Inspect contents of an offline bundle without applying')
96
+ .action(async (bundle) => {
97
+ if (!existsSync(bundle)) {
98
+ out.fail(`Bundle file not found: ${bundle}`);
99
+ process.exit(1);
100
+ }
101
+ const validation = await validateBundle(bundle);
102
+ if (!validation.valid) {
103
+ out.fail(validation.error);
104
+ process.exit(1);
105
+ }
106
+ const info = await inspectBundle(bundle);
107
+ out.header('Bundle Contents');
108
+ console.log(`File: ${bundle}`);
109
+ console.log(`Size: ${info.sizeLabel}`);
110
+ if (info.version)
111
+ console.log(`Version: ${info.version}`);
112
+ console.log();
113
+ console.log('Configuration files:');
114
+ if (info.configFiles.length > 0) {
115
+ for (const f of info.configFiles) {
116
+ console.log(` - ${f}`);
117
+ }
118
+ }
119
+ else {
120
+ console.log(' (none found)');
121
+ }
122
+ console.log();
123
+ console.log('Docker images:');
124
+ if (info.hasImages && info.imageNames.length > 0) {
125
+ for (const img of info.imageNames) {
126
+ console.log(` - ${img}`);
127
+ }
128
+ }
129
+ else if (info.hasImages) {
130
+ console.log(' images.tar present (could not parse image names)');
131
+ }
132
+ else {
133
+ console.log(' (none — config-only bundle)');
134
+ }
135
+ });
163
136
  offline.command('list')
164
137
  .description('List images in current docker-compose.yml')
165
138
  .action(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/commands/offline.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  /**
3
- * Update the CLI itself via npm.
4
- * Can be called standalone or as a pre-step during `ct update`.
3
+ * Registered as `ct self-update`. Delegates to the shared updateCli()
4
+ * with interactive (non-silent) output.
5
5
  */
6
- export declare function selfUpdate(): Promise<void>;
7
6
  export declare function registerSelfUpdateCommand(program: Command): void;
8
7
  //# sourceMappingURL=self-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA4ChD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,QAOzD"}
1
+ {"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,QAOzD"}
@@ -1,59 +1,14 @@
1
- import { execa } from 'execa';
2
- import * as out from '../utils/output.js';
1
+ import { updateCli } from '../lib/auto-update.js';
3
2
  /**
4
- * Update the CLI itself via npm.
5
- * Can be called standalone or as a pre-step during `ct update`.
3
+ * Registered as `ct self-update`. Delegates to the shared updateCli()
4
+ * with interactive (non-silent) output.
6
5
  */
7
- export async function selfUpdate() {
8
- console.log('Checking for CLI updates...');
9
- try {
10
- const { stdout: installed } = await execa('npm', ['ls', '-g', '@calltelemetry/cli', '--json']);
11
- const local = JSON.parse(installed)?.dependencies?.['@calltelemetry/cli']?.version;
12
- const { stdout: registryJson } = await execa('npm', ['view', '@calltelemetry/cli', 'version', '--json']);
13
- const latest = JSON.parse(registryJson);
14
- if (local && local === latest) {
15
- out.ok(`CLI is up to date (v${local})`);
16
- return;
17
- }
18
- console.log(`Updating CLI: ${local ?? 'unknown'} → ${latest}...`);
19
- }
20
- catch {
21
- // Can't determine versions — just run the install
22
- console.log('Installing latest CLI...');
23
- }
24
- // Try user-level install first, fallback to sudo
25
- try {
26
- await execa('npm', ['install', '-g', '@calltelemetry/cli'], {
27
- stdout: 'inherit',
28
- stderr: 'inherit',
29
- });
30
- out.ok('CLI updated successfully');
31
- }
32
- catch (err) {
33
- const isPermission = err.stderr?.toString().includes('EACCES') || err.exitCode === 243;
34
- if (!isPermission) {
35
- out.warn('CLI self-update failed. You can update manually: npm install -g @calltelemetry/cli');
36
- return;
37
- }
38
- // Permission denied — retry with sudo
39
- try {
40
- await execa('sudo', ['npm', 'install', '-g', '@calltelemetry/cli'], {
41
- stdout: 'inherit',
42
- stderr: 'inherit',
43
- });
44
- out.ok('CLI updated successfully');
45
- }
46
- catch {
47
- out.warn('CLI self-update failed. You can update manually: sudo npm install -g @calltelemetry/cli');
48
- }
49
- }
50
- }
51
6
  export function registerSelfUpdateCommand(program) {
52
7
  program
53
8
  .command('self-update')
54
9
  .description('Update the ct CLI tool to the latest version')
55
10
  .action(async () => {
56
- await selfUpdate();
11
+ await updateCli(program.version() ?? '0.0.0');
57
12
  });
58
13
  }
59
14
  //# sourceMappingURL=self-update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAEnF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,GAAG,CAAC,EAAE,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,IAAI,SAAS,MAAM,MAAM,KAAK,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;QAClD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE;YAC1D,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC;QACvF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;YAC/F,OAAO;QACT,CAAC;QACD,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE;gBAClE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAwNrD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAkJrD"}
@@ -1,15 +1,13 @@
1
1
  import { execa } from 'execa';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { compose, composeUp } from '../lib/compose.js';
4
+ import { composeUp } from '../lib/compose.js';
5
5
  import { getPaths } from '../lib/paths.js';
6
- import { fetchLatestVersion, downloadBundle, checkImageAvailability, extractImages } from '../lib/bundle.js';
7
- import { checkRam, checkDiskSpace, getDockerVersion } from '../lib/system.js';
8
- import { generateSelfSignedCerts } from '../lib/certs.js';
9
- import { isVersionGte } from '../utils/version.js';
6
+ import { fetchLatestVersion } from '../lib/bundle.js';
7
+ import { getDockerVersion } from '../lib/system.js';
8
+ import { getCurrentVersion } from '../lib/update.js';
10
9
  import { confirm } from '../utils/prompt.js';
11
- import { selfUpdate } from './self-update.js';
12
- import { getCurrentVersion, backupCompose, applyAndRestart, postgresVersionGuard, dockerCleanup, applyIpv6IfEnabled } from '../lib/update.js';
10
+ import { preflightSteps, executeSteps, runStepsCli } from '../lib/update-steps.js';
13
11
  import * as out from '../utils/output.js';
14
12
  export function registerUpdateCommand(program) {
15
13
  program
@@ -21,11 +19,6 @@ export function registerUpdateCommand(program) {
21
19
  .option('--no-cleanup', 'Skip Docker cleanup after update')
22
20
  .option('--ipv6', 'Enable IPv6 support')
23
21
  .action(async (versionArg, opts) => {
24
- const { installDir, composeFile } = getPaths();
25
- // Self-update CLI first
26
- await selfUpdate();
27
- console.log();
28
- await generateSelfSignedCerts();
29
22
  // Resolve version
30
23
  let version = versionArg;
31
24
  if (!version && opts.latest) {
@@ -42,35 +35,18 @@ export function registerUpdateCommand(program) {
42
35
  console.log(`Current version: ${currentVersion}`);
43
36
  console.log(`Target version: ${version}`);
44
37
  console.log();
45
- // RAM check for >= 0.8.4
46
- if (isVersionGte(version, '0.8.4') && !opts.forceUpgrade) {
47
- console.log(`Checking RAM requirements for version ${version}...`);
48
- const ram = await checkRam();
49
- if (!ram.ok) {
50
- out.errorBox('Insufficient RAM', [
51
- `Version 0.8.4+ requires 8GB RAM (detected: ${ram.totalMb}MB)`,
52
- `Use --force-upgrade to proceed anyway.`,
53
- ]);
54
- process.exit(1);
55
- }
56
- out.ok('RAM requirement met');
57
- console.log();
58
- }
59
- // Disk check
38
+ // Preflight checks (shared with TUI)
60
39
  if (!opts.forceUpgrade) {
61
- console.log('Checking disk space...');
62
- const disk = await checkDiskSpace();
63
- if (!disk.ok) {
64
- out.errorBox('Insufficient disk space', [
65
- `Available: ${disk.freePercent}% free (need 10% minimum)`,
66
- `Use --force-upgrade to proceed anyway.`,
67
- ]);
40
+ try {
41
+ await runStepsCli(preflightSteps(version));
42
+ console.log();
43
+ }
44
+ catch {
45
+ out.fail('Pre-flight checks failed. Use --force-upgrade to proceed anyway.');
68
46
  process.exit(1);
69
47
  }
70
- out.ok('Sufficient disk space available');
71
- console.log();
72
48
  }
73
- // Docker version check
49
+ // Docker version upgrade (CLI-only: auto-upgrades via dnf)
74
50
  console.log('Checking Docker version...');
75
51
  const dockerVer = await getDockerVersion();
76
52
  if (dockerVer === null) {
@@ -90,7 +66,7 @@ export function registerUpdateCommand(program) {
90
66
  else {
91
67
  out.ok(`Docker version ${dockerVer} is supported`);
92
68
  }
93
- // Ensure Node.js 20.x is installed
69
+ // Ensure Node.js 20.x (CLI-only: auto-installs via dnf)
94
70
  console.log();
95
71
  console.log('Ensuring Node.js 20.x is installed...');
96
72
  try {
@@ -113,40 +89,10 @@ export function registerUpdateCommand(program) {
113
89
  await execa('sudo', ['dnf', 'install', '-y', 'nodejs'], { stdout: 'inherit', stderr: 'inherit' });
114
90
  out.ok('Node.js 20.x installed');
115
91
  }
116
- catch (installErr) {
92
+ catch {
117
93
  out.warn('Could not install Node.js automatically. Please install Node.js 20+ manually.');
118
94
  }
119
95
  }
120
- // Backup current compose
121
- const backupName = await backupCompose();
122
- if (backupName !== 'no existing file') {
123
- console.log('Existing docker-compose.yml backed up.');
124
- }
125
- // Download bundle
126
- console.log();
127
- await downloadBundle(version);
128
- console.log();
129
- // Check image availability
130
- const tempFile = join(installDir, 'temp-docker-compose.yml');
131
- if (!opts.forceUpgrade) {
132
- if (!await checkImageAvailability(tempFile)) {
133
- out.errorBox('Cannot proceed with upgrade', [
134
- 'Some images are not available.',
135
- 'Use --force-upgrade to proceed anyway.',
136
- ]);
137
- process.exit(1);
138
- }
139
- }
140
- // Pull images
141
- console.log('Pulling Docker images...');
142
- await compose(['-f', tempFile, 'pull']);
143
- out.ok('All images pulled successfully');
144
- // Show versions
145
- console.log();
146
- console.log('Image versions to be deployed:');
147
- const images = await extractImages(tempFile);
148
- for (const img of images)
149
- console.log(` - ${img}`);
150
96
  console.log();
151
97
  console.log(`Upgrading from ${currentVersion} to ${version}`);
152
98
  // Interactive abort
@@ -156,26 +102,18 @@ export function registerUpdateCommand(program) {
156
102
  return;
157
103
  }
158
104
  }
159
- // PostgreSQL version guard
160
- const pinnedPg = await postgresVersionGuard();
161
- if (pinnedPg) {
162
- console.log();
163
- out.warn(`PostgreSQL version guard: Your database is on PostgreSQL ${pinnedPg}`);
164
- console.log(' Auto-pinning for safety. To upgrade later: ct postgres upgrade 17');
165
- }
166
- // Apply and restart
167
- await applyAndRestart();
168
- console.log('New docker-compose.yml applied. Services restarting.');
169
- // Re-apply IPv6 if preference is enabled
170
- const appliedIpv6 = await applyIpv6IfEnabled();
171
- if (appliedIpv6) {
172
- console.log('IPv6 dual-stack re-applied per preferences.');
105
+ // Run shared execute pipeline (certs, backup, download, pull, PG guard, apply, IPv6, cleanup)
106
+ let steps = executeSteps(version);
107
+ // Apply CLI-specific flags
108
+ if (opts.forceUpgrade) {
109
+ steps = steps.filter(s => s.label !== 'Check image availability');
173
110
  }
174
- // Cleanup
175
- if (opts.cleanup !== false) {
176
- console.log('Cleaning up unused Docker resources...');
177
- await dockerCleanup();
111
+ if (opts.cleanup === false) {
112
+ steps = steps.filter(s => s.label !== 'Cleanup unused resources');
178
113
  }
114
+ console.log();
115
+ await runStepsCli(steps);
116
+ console.log();
179
117
  out.successBox('Update complete!');
180
118
  });
181
119
  program
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC9I,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,qFAAqF,CAAC;SAClG,MAAM,CAAC,UAAU,EAAE,yCAAyC,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,qCAAqC,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;SAC1E,MAAM,CAAC,cAAc,EAAE,kCAAkC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,IAAI,EAAE,EAAE;QACrD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE/C,wBAAwB;QACxB,MAAM,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,uBAAuB,EAAE,CAAC;QAEhC,kBAAkB;QAClB,IAAI,OAAO,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACnE,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,yBAAyB;QACzB,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,KAAK,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE;oBAC/B,8CAA8C,GAAG,CAAC,OAAO,KAAK;oBAC9D,wCAAwC;iBACzC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,GAAG,CAAC,QAAQ,CAAC,yBAAyB,EAAE;oBACtC,cAAc,IAAI,CAAC,WAAW,2BAA2B;oBACzD,wCAAwC;iBACzC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC3C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,kBAAkB,SAAS,oCAAoC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACtK,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,EAAE,CAAC,kBAAkB,SAAS,eAAe,CAAC,CAAC;QACrD,CAAC;QAED,mCAAmC;QACnC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,WAAW,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;gBACnE,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,gEAAgE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxI,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClG,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,gEAAgE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxI,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClG,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,QAAQ,CAAC,6BAA6B,EAAE;oBAC1C,gCAAgC;oBAChC,wCAAwC;iBACzC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC;QAEzC,gBAAgB;QAChB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAEpD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,cAAc,OAAO,OAAO,EAAE,CAAC,CAAC;QAE9D,oBAAoB;QACpB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,MAAM,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,4DAA4D,QAAQ,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACrF,CAAC;QAED,oBAAoB;QACpB,MAAM,eAAe,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QAEpE,yCAAyC;QACzC,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC/C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;QAED,UAAU;QACV,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QAED,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const VERSION = '0.3.7';
2
+ const VERSION = '0.3.8';
3
3
  import { Command } from 'commander';
4
4
  import { registerStatusCommand } from './commands/status.js';
5
5
  import { registerUpdateCommand } from './commands/update.js';
@@ -1,10 +1,20 @@
1
+ export interface UpdateCliOptions {
2
+ /** When true, runs silently using debug() logging only. Default: false. */
3
+ silent?: boolean;
4
+ }
1
5
  /**
2
- * Background auto-update check. Compares the running version against
3
- * the npm registry and installs the latest if newer.
6
+ * Update the CLI via npm. Used for both interactive `ct self-update` and
7
+ * background auto-update. The `silent` option controls output:
4
8
  *
5
- * - Tries `npm install -g` without sudo first (works for nvm / user-owned prefix)
6
- * - Falls back to `sudo npm install -g` if permission denied
7
- * - All errors caught silently — auto-update must never crash the app
9
+ * - silent=false (default): console.log output for interactive use
10
+ * - silent=true: debug() logging only, all errors swallowed
11
+ *
12
+ * Both modes: tries user-level install first, falls back to sudo on EACCES.
13
+ */
14
+ export declare function updateCli(currentVersion: string, opts?: UpdateCliOptions): Promise<void>;
15
+ /**
16
+ * Background auto-update (silent). Kept as a convenience alias
17
+ * so existing callers don't need to change.
8
18
  */
9
19
  export declare function checkAndAutoUpdate(currentVersion: string): Promise<void>;
10
20
  //# sourceMappingURL=auto-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C9E"}
1
+ {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ElG;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E"}