@calltelemetry/cli 0.12.12 → 0.12.14

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.
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Slim non-Ink diagnostics for the ship binary (showtech via step runner).
2
+ * Slim non-Ink diagnostics for the ship binary.
3
+ * showtech | network | service | database — text only.
3
4
  */
4
5
  import type { Command } from 'commander';
5
6
  export declare function runShipShowtech(opts: {
@@ -1 +1 @@
1
- {"version":3,"file":"ship-diag.d.ts","sourceRoot":"","sources":["../../src/commands/ship-diag.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC9D"}
1
+ {"version":3,"file":"ship-diag.d.ts","sourceRoot":"","sources":["../../src/commands/ship-diag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+J9D"}
@@ -1,7 +1,12 @@
1
1
  import { join } from 'node:path';
2
+ import { execa } from 'execa';
2
3
  import { getPaths } from '../lib/paths.js';
3
4
  import { showtechSteps } from '../lib/showtech-steps.js';
4
5
  import { runStepsCli } from '../lib/update-steps.js';
6
+ import { compose, composePs, composeExec } from '../lib/compose.js';
7
+ import { probeDatabaseReady, measureDatabaseSize, DbProbeError } from '../lib/db-probe.js';
8
+ import { DB_USER, DB_NAME, PG_ENV } from '../lib/db.js';
9
+ import { getNetworkInterfaceList, getDefaultGateway, pingTarget, } from '../lib/network.js';
5
10
  import * as out from '../utils/output.js';
6
11
  function timestamp() {
7
12
  return new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
@@ -59,6 +64,136 @@ export function registerShipDiagCommand(program) {
59
64
  .option('--policy-minutes <minutes>', 'Include policy history for last N minutes')
60
65
  .option('--skip-disk-benchmark', 'Skip fio disk benchmark in health report')
61
66
  .action(showtechAction);
67
+ diag
68
+ .command('network')
69
+ .description('Network diagnostics (interfaces, gateway, ping)')
70
+ .action(async () => {
71
+ try {
72
+ out.header('Network diagnostics');
73
+ const ifaces = getNetworkInterfaceList();
74
+ if (ifaces?.length) {
75
+ console.log('Interfaces:');
76
+ for (const i of ifaces) {
77
+ console.log(` ${i.name} ${i.family} ${i.address}/${i.netmask}${i.internal ? ' (internal)' : ''}`);
78
+ }
79
+ }
80
+ else {
81
+ try {
82
+ const { stdout } = await execa('ip', ['-brief', 'addr']);
83
+ console.log(stdout);
84
+ }
85
+ catch {
86
+ console.log(' (interface list unavailable)');
87
+ }
88
+ }
89
+ try {
90
+ const gw = await getDefaultGateway();
91
+ console.log(`Default gateway: ${gw ?? '(unknown)'}`);
92
+ }
93
+ catch {
94
+ console.log('Default gateway: (unknown)');
95
+ }
96
+ try {
97
+ const r = await pingTarget('8.8.8.8', 2);
98
+ console.log(`Ping 8.8.8.8: ${r.success ? 'ok' : 'fail'}${r.error ? ` (${r.error})` : ''}`);
99
+ }
100
+ catch (err) {
101
+ console.log(`Ping 8.8.8.8: fail (${err instanceof Error ? err.message : err})`);
102
+ }
103
+ }
104
+ catch (err) {
105
+ out.fail(err instanceof Error ? err.message : String(err));
106
+ process.exitCode = 1;
107
+ }
108
+ });
109
+ diag
110
+ .command('service')
111
+ .description('Systemd unit + compose service snapshot')
112
+ .action(async () => {
113
+ try {
114
+ out.header('Service diagnostics');
115
+ try {
116
+ const { stdout } = await execa('systemctl', [
117
+ 'status',
118
+ 'docker-compose-app.service',
119
+ '--no-pager',
120
+ '-l',
121
+ ], { reject: false });
122
+ console.log(stdout || '(no status output)');
123
+ }
124
+ catch (err) {
125
+ out.warn(`systemctl: ${err instanceof Error ? err.message : String(err)}`);
126
+ }
127
+ console.log();
128
+ console.log('Compose services:');
129
+ try {
130
+ await compose(['ps'], { pipe: false });
131
+ }
132
+ catch (err) {
133
+ out.fail(err instanceof Error ? err.message : String(err));
134
+ process.exitCode = 1;
135
+ }
136
+ }
137
+ catch (err) {
138
+ out.fail(err instanceof Error ? err.message : String(err));
139
+ process.exitCode = 1;
140
+ }
141
+ });
142
+ diag
143
+ .command('database')
144
+ .description('Database readiness, size, and recent activity probe')
145
+ .action(async () => {
146
+ try {
147
+ out.header('Database diagnostics');
148
+ const container = await composePs('db');
149
+ if (!container) {
150
+ out.fail('Database container not found or not running.');
151
+ process.exitCode = 1;
152
+ return;
153
+ }
154
+ out.ok('db container present');
155
+ try {
156
+ await probeDatabaseReady();
157
+ out.ok('pg_isready: accepting connections');
158
+ }
159
+ catch (err) {
160
+ if (err instanceof DbProbeError) {
161
+ out.fail(`pg_isready: ${err.message} (${err.reason})`);
162
+ }
163
+ else {
164
+ out.fail(err instanceof Error ? err.message : String(err));
165
+ }
166
+ process.exitCode = 1;
167
+ return;
168
+ }
169
+ try {
170
+ const size = await measureDatabaseSize();
171
+ console.log(`Size: ${size.pretty} (${size.bytes} bytes)`);
172
+ }
173
+ catch (err) {
174
+ out.warn(err instanceof Error ? err.message : String(err));
175
+ }
176
+ try {
177
+ const r = await composeExec('db', [
178
+ 'psql',
179
+ '-U',
180
+ DB_USER,
181
+ '-d',
182
+ DB_NAME,
183
+ '-tAc',
184
+ "SELECT count(*) FROM pg_stat_activity WHERE datname = current_database();",
185
+ ], { env: PG_ENV, pipe: true });
186
+ console.log(`Active sessions: ${(r.stdout ?? '').trim()}`);
187
+ }
188
+ catch {
189
+ // optional
190
+ }
191
+ }
192
+ catch (err) {
193
+ out.fail(err instanceof Error ? err.message : String(err));
194
+ process.exitCode = 1;
195
+ }
196
+ });
62
197
  // Alias: ct showtech
63
198
  program
64
199
  .command('showtech')
@@ -67,7 +202,7 @@ export function registerShipDiagCommand(program) {
67
202
  .option('--skip-disk-benchmark', 'Skip fio disk benchmark in health report')
68
203
  .action(showtechAction);
69
204
  diag.action(() => {
70
- console.log('Usage: ct diag showtech [--policy-minutes N] [--skip-disk-benchmark]');
205
+ console.log('Usage: ct diag showtech|network|service|database');
71
206
  });
72
207
  }
73
208
  //# sourceMappingURL=ship-diag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ship-diag.js","sourceRoot":"","sources":["../../src/commands/ship-diag.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship-diag.js","sourceRoot":"","sources":["../../src/commands/ship-diag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Ship (no-Ink) docker status | network | prune.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerShipDockerCommand(program: Command): void;
6
+ //# sourceMappingURL=ship-docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-docker.d.ts","sourceRoot":"","sources":["../../src/commands/ship-docker.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwFzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgEhE"}
@@ -0,0 +1,153 @@
1
+ import { execa } from 'execa';
2
+ import * as out from '../utils/output.js';
3
+ async function docker(args, opts) {
4
+ const result = await execa('docker', args, {
5
+ reject: false,
6
+ all: true,
7
+ ...(opts?.inherit ? { stdio: 'inherit' } : {}),
8
+ });
9
+ if (opts?.inherit)
10
+ return '';
11
+ if (result.exitCode !== 0) {
12
+ throw new Error((result.stderr || result.stdout || result.all || `docker ${args.join(' ')} failed`).trim());
13
+ }
14
+ return (result.stdout || result.all || '').trim();
15
+ }
16
+ async function printStatus() {
17
+ console.log('Docker status');
18
+ try {
19
+ const info = await docker(['info', '--format', '{{.ServerVersion}}|{{.NCPU}}|{{.MemTotal}}']);
20
+ const [ver, cpus, mem] = info.split('|');
21
+ console.log(` Engine : ${ver || 'unknown'}`);
22
+ console.log(` CPUs : ${cpus || '?'}`);
23
+ console.log(` Mem : ${mem ? `${Math.round(Number(mem) / (1024 ** 3))} GiB` : '?'}`);
24
+ }
25
+ catch (err) {
26
+ out.warn(`docker info: ${err instanceof Error ? err.message : String(err)}`);
27
+ }
28
+ console.log();
29
+ console.log('Containers (docker ps -a):');
30
+ try {
31
+ const ps = await docker([
32
+ 'ps',
33
+ '-a',
34
+ '--format',
35
+ 'table {{.Names}}\t{{.Status}}\t{{.Image}}',
36
+ ]);
37
+ console.log(ps || ' (none)');
38
+ }
39
+ catch (err) {
40
+ out.fail(err instanceof Error ? err.message : String(err));
41
+ process.exitCode = 1;
42
+ }
43
+ console.log();
44
+ console.log('Images (top 15 by size):');
45
+ try {
46
+ const images = await docker([
47
+ 'images',
48
+ '--format',
49
+ 'table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.Size}}',
50
+ ]);
51
+ const lines = images.split('\n');
52
+ console.log(lines.slice(0, 16).join('\n'));
53
+ }
54
+ catch {
55
+ // optional
56
+ }
57
+ }
58
+ async function printNetwork() {
59
+ console.log('Docker networks');
60
+ const nets = await docker([
61
+ 'network',
62
+ 'ls',
63
+ '--format',
64
+ 'table {{.Name}}\t{{.Driver}}\t{{.Scope}}',
65
+ ]);
66
+ console.log(nets);
67
+ // Inspect compose project network if present
68
+ for (const name of ['calltelemetry_ct', 'calltelemetry_default', 'ct_default']) {
69
+ try {
70
+ const detail = await docker([
71
+ 'network',
72
+ 'inspect',
73
+ name,
74
+ '--format',
75
+ '{{.Name}} driver={{.Driver}} subnet={{range .IPAM.Config}}{{.Subnet}}{{end}}',
76
+ ]);
77
+ console.log();
78
+ console.log(`Inspect ${name}:`);
79
+ console.log(` ${detail}`);
80
+ return;
81
+ }
82
+ catch {
83
+ // try next
84
+ }
85
+ }
86
+ }
87
+ export function registerShipDockerCommand(program) {
88
+ const dockerCmd = program.command('docker').description('Docker host management');
89
+ dockerCmd
90
+ .command('status')
91
+ .description('Show containers, images, and engine info (default)')
92
+ .action(async () => {
93
+ try {
94
+ await printStatus();
95
+ }
96
+ catch (err) {
97
+ out.fail(err instanceof Error ? err.message : String(err));
98
+ process.exitCode = 1;
99
+ }
100
+ });
101
+ dockerCmd
102
+ .command('network')
103
+ .description('List Docker networks (and inspect compose network when present)')
104
+ .action(async () => {
105
+ try {
106
+ await printNetwork();
107
+ }
108
+ catch (err) {
109
+ out.fail(err instanceof Error ? err.message : String(err));
110
+ process.exitCode = 1;
111
+ }
112
+ });
113
+ dockerCmd
114
+ .command('prune')
115
+ .description('Prune unused Docker data (containers/images/networks; not volumes by default)')
116
+ .option('-y, --yes', 'Confirm without prompt')
117
+ .option('--volumes', 'Also prune unused volumes (destructive)')
118
+ .action(async (opts) => {
119
+ try {
120
+ if (!opts.yes && process.stdin.isTTY) {
121
+ out.warn('This runs docker system prune -f' + (opts.volumes ? ' --volumes' : ''));
122
+ out.info('Re-run with --yes: ct docker prune --yes');
123
+ process.exitCode = 1;
124
+ return;
125
+ }
126
+ if (!opts.yes && !process.stdin.isTTY) {
127
+ out.fail('Non-interactive docker prune requires --yes');
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ const args = ['system', 'prune', '-f'];
132
+ if (opts.volumes)
133
+ args.push('--volumes');
134
+ console.log(`Running: docker ${args.join(' ')}`);
135
+ await execa('docker', args, { stdio: 'inherit' });
136
+ out.ok('Docker prune complete');
137
+ }
138
+ catch (err) {
139
+ out.fail(err instanceof Error ? err.message : String(err));
140
+ process.exitCode = 1;
141
+ }
142
+ });
143
+ dockerCmd.action(async () => {
144
+ try {
145
+ await printStatus();
146
+ }
147
+ catch (err) {
148
+ out.fail(err instanceof Error ? err.message : String(err));
149
+ process.exitCode = 1;
150
+ }
151
+ });
152
+ }
153
+ //# sourceMappingURL=ship-docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-docker.js","sourceRoot":"","sources":["../../src/commands/ship-docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Ship (no-Ink) offline/air-gap: fetch | apply | inspect | images | fetch-check.
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerShipOfflineCommand(program: Command): void;
6
+ //# sourceMappingURL=ship-offline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-offline.d.ts","sourceRoot":"","sources":["../../src/commands/ship-offline.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6GjE"}
@@ -0,0 +1,110 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { runStepsCli } from '../lib/update-steps.js';
3
+ import { fetchSteps, applySteps, inspectBundle, validateBundle, } from '../lib/offline-steps.js';
4
+ import { attachOfflineDepth } from './go-parity.js';
5
+ import * as out from '../utils/output.js';
6
+ export function registerShipOfflineCommand(program) {
7
+ const offline = program.command('offline').description('Offline / air-gap installation');
8
+ attachOfflineDepth(offline);
9
+ offline
10
+ .command('fetch <version>')
11
+ .description('Download pre-built config bundle (no Docker images)')
12
+ .action(async (version) => {
13
+ try {
14
+ out.header('Fetching Pre-built Bundle');
15
+ console.log(`Version: ${version}`);
16
+ await runStepsCli(fetchSteps(version));
17
+ out.ok(`Bundle downloaded: calltelemetry-bundle-${version}.tar.gz`);
18
+ console.log(`Apply with: ct offline apply calltelemetry-bundle-${version}.tar.gz`);
19
+ }
20
+ catch (err) {
21
+ out.fail(err instanceof Error ? err.message : String(err));
22
+ process.exitCode = 1;
23
+ }
24
+ });
25
+ offline
26
+ .command('apply <bundle>')
27
+ .description('Apply an offline bundle (fail-closed; previous version remains if apply fails)')
28
+ .option('-y, --yes', 'Confirm without prompt')
29
+ .action(async (bundle, opts) => {
30
+ try {
31
+ if (!existsSync(bundle)) {
32
+ out.fail(`Bundle file not found: ${bundle}`);
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ if (!opts.yes && process.stdin.isTTY) {
37
+ out.warn('Apply will replace compose config and may load images.');
38
+ out.info(`Re-run with --yes: ct offline apply ${bundle} --yes`);
39
+ process.exitCode = 1;
40
+ return;
41
+ }
42
+ if (!opts.yes && !process.stdin.isTTY) {
43
+ out.fail('Non-interactive offline apply requires --yes');
44
+ process.exitCode = 1;
45
+ return;
46
+ }
47
+ const validation = await validateBundle(bundle);
48
+ if (!validation.valid) {
49
+ out.fail(validation.error ?? 'Bundle validation failed');
50
+ process.exitCode = 1;
51
+ return;
52
+ }
53
+ const info = await inspectBundle(bundle);
54
+ out.header('Applying Offline Bundle');
55
+ console.log(`Bundle: ${bundle}`);
56
+ console.log(`Size: ${info.sizeLabel}`);
57
+ if (info.version)
58
+ console.log(`Version: ${info.version}`);
59
+ console.log(`Configs: ${info.configFiles.join(', ') || 'none'}`);
60
+ console.log(`Images: ${info.hasImages ? `${info.imageNames.length} bundled` : 'none (config-only)'}`);
61
+ console.log();
62
+ await runStepsCli(applySteps(bundle));
63
+ out.ok('Offline bundle applied');
64
+ console.log('Check status with: ct status');
65
+ }
66
+ catch (err) {
67
+ out.fail(err instanceof Error ? err.message : String(err));
68
+ out.info('Previous version should still be running. Check: docker compose logs --tail 50');
69
+ process.exitCode = 1;
70
+ }
71
+ });
72
+ offline
73
+ .command('inspect <bundle>')
74
+ .description('Inspect offline bundle without applying')
75
+ .action(async (bundle) => {
76
+ try {
77
+ if (!existsSync(bundle)) {
78
+ out.fail(`Bundle file not found: ${bundle}`);
79
+ process.exitCode = 1;
80
+ return;
81
+ }
82
+ const validation = await validateBundle(bundle);
83
+ if (!validation.valid) {
84
+ out.fail(validation.error ?? 'Bundle validation failed');
85
+ process.exitCode = 1;
86
+ return;
87
+ }
88
+ const info = await inspectBundle(bundle);
89
+ out.header('Bundle Contents');
90
+ console.log(`File: ${bundle}`);
91
+ console.log(`Size: ${info.sizeLabel}`);
92
+ if (info.version)
93
+ console.log(`Version: ${info.version}`);
94
+ console.log('Configs:', info.configFiles.join(', ') || '(none)');
95
+ console.log('Images: ', info.hasImages
96
+ ? info.imageNames.length
97
+ ? info.imageNames.join(', ')
98
+ : 'images.tar present'
99
+ : '(config-only)');
100
+ }
101
+ catch (err) {
102
+ out.fail(err instanceof Error ? err.message : String(err));
103
+ process.exitCode = 1;
104
+ }
105
+ });
106
+ offline.action(() => {
107
+ console.log('Usage: ct offline fetch|apply|inspect|images|fetch-check');
108
+ });
109
+ }
110
+ //# sourceMappingURL=ship-offline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-offline.js","sourceRoot":"","sources":["../../src/commands/ship-offline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Ship (no-Ink) rollback: restore newest docker-compose backup + restart.
3
+ * Also surfaces rollback-list via attachRollbackList when registered on program.
4
+ */
5
+ import type { Command } from 'commander';
6
+ export declare function registerShipRollbackCommand(program: Command): void;
7
+ //# sourceMappingURL=ship-rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-rollback.d.ts","sourceRoot":"","sources":["../../src/commands/ship-rollback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDlE"}
@@ -0,0 +1,63 @@
1
+ import { existsSync, readdirSync, statSync } from 'node:fs';
2
+ import { copyFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { execa } from 'execa';
5
+ import { composeUp } from '../lib/compose.js';
6
+ import { getPaths } from '../lib/paths.js';
7
+ import { attachRollbackList } from './go-parity.js';
8
+ import * as out from '../utils/output.js';
9
+ export function registerShipRollbackCommand(program) {
10
+ // Go dual form: rollback-list
11
+ attachRollbackList(program);
12
+ program
13
+ .command('rollback')
14
+ .description('Roll back to the newest docker-compose.yml backup and restart services')
15
+ .option('-y, --yes', 'Confirm without prompt')
16
+ .action(async (opts) => {
17
+ try {
18
+ const { backupDir, composeFile } = getPaths();
19
+ if (!existsSync(backupDir)) {
20
+ out.fail(`No backup directory found: ${backupDir}`);
21
+ process.exitCode = 1;
22
+ return;
23
+ }
24
+ const backups = readdirSync(backupDir)
25
+ .filter((f) => f.startsWith('docker-compose-') && f.endsWith('.yml'))
26
+ .map((f) => ({ name: f, time: statSync(join(backupDir, f)).mtimeMs }))
27
+ .sort((a, b) => b.time - a.time);
28
+ if (backups.length === 0) {
29
+ out.fail('No backup file found to rollback.');
30
+ process.exitCode = 1;
31
+ return;
32
+ }
33
+ const backupFile = join(backupDir, backups[0].name);
34
+ if (!opts.yes && process.stdin.isTTY) {
35
+ out.warn(`Will restore: ${backupFile}`);
36
+ out.info('Re-run with --yes: ct rollback --yes');
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ if (!opts.yes && !process.stdin.isTTY) {
41
+ out.fail('Non-interactive rollback requires --yes');
42
+ process.exitCode = 1;
43
+ return;
44
+ }
45
+ await copyFile(backupFile, composeFile);
46
+ console.log(`Rolled back compose to: ${backupFile}`);
47
+ try {
48
+ await execa('systemctl', ['restart', 'docker-compose-app.service']);
49
+ out.ok('docker-compose-app.service restarted');
50
+ }
51
+ catch {
52
+ await composeUp(['-d']);
53
+ out.ok('Stack recreated via docker compose up -d');
54
+ }
55
+ out.ok('Rollback complete');
56
+ }
57
+ catch (err) {
58
+ out.fail(err instanceof Error ? err.message : String(err));
59
+ process.exitCode = 1;
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=ship-rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-rollback.js","sourceRoot":"","sources":["../../src/commands/ship-rollback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Ship shell: IOS-style text REPL via node:readline (no Ink).
3
+ *
4
+ * Wave 2 spike evidence: `src/shell/` has zero ink/react imports; the full CLI
5
+ * already uses this path for `ct shell --cli`. The Bun ship binary can load the
6
+ * same registry + handlers for a single-artifact customer surface.
7
+ */
8
+ import type { Command } from 'commander';
9
+ export declare function registerShipShellCommand(program: Command): void;
10
+ //# sourceMappingURL=ship-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-shell.d.ts","sourceRoot":"","sources":["../../src/commands/ship-shell.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2C/D"}
@@ -0,0 +1,49 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { NETWORK_SENTINEL } from '../shell/network-onboarding.js';
3
+ import { loadPrefs } from '../lib/prefs.js';
4
+ import * as out from '../utils/output.js';
5
+ export function registerShipShellCommand(program) {
6
+ program
7
+ .command('setup')
8
+ .description('Run the setup wizard (network, hostname, timezone, NTP, preferences)')
9
+ .action(async () => {
10
+ try {
11
+ const { runNetworkOnboarding } = await import('../shell/network-onboarding.js');
12
+ await runNetworkOnboarding();
13
+ }
14
+ catch (err) {
15
+ out.fail(err instanceof Error ? err.message : String(err));
16
+ process.exitCode = 1;
17
+ }
18
+ });
19
+ program
20
+ .command('shell')
21
+ .description('Interactive IOS-style management console (text REPL; no TUI on ship)')
22
+ .option('--no-onboarding', 'Skip first-boot onboarding wizard')
23
+ .action(async (opts) => {
24
+ try {
25
+ if (opts.onboarding !== false) {
26
+ if (!existsSync(NETWORK_SENTINEL)) {
27
+ const { runNetworkOnboarding } = await import('../shell/network-onboarding.js');
28
+ await runNetworkOnboarding();
29
+ }
30
+ else if (!loadPrefs()) {
31
+ const { runPreferencesOnboarding } = await import('../shell/network-onboarding.js');
32
+ await runPreferencesOnboarding();
33
+ }
34
+ }
35
+ if (!process.stdin.isTTY) {
36
+ out.fail('ct shell requires a TTY. Use argv: ct <command> --help');
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ const { startShell } = await import('../shell/repl.js');
41
+ await startShell();
42
+ }
43
+ catch (err) {
44
+ out.fail(err instanceof Error ? err.message : String(err));
45
+ process.exitCode = 1;
46
+ }
47
+ });
48
+ }
49
+ //# sourceMappingURL=ship-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-shell.js","sourceRoot":"","sources":["../../src/commands/ship-shell.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YAChF,MAAM,oBAAoB,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAA8B,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAClC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;oBAChF,MAAM,oBAAoB,EAAE,CAAC;gBAC/B,CAAC;qBAAM,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBACxB,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;oBACpF,MAAM,wBAAwB,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;gBACnE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxD,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version. */
2
- export declare const VERSION = "0.12.12";
2
+ export declare const VERSION = "0.12.14";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version. */
2
- export const VERSION = '0.12.12';
2
+ export const VERSION = '0.12.14';
3
3
  //# sourceMappingURL=version.js.map
@@ -15,7 +15,7 @@ import { LOGO } from './lib/brand.js';
15
15
  import { shouldPrintShipLogo } from './lib/ship-logo.js';
16
16
  import { TS_CLI_PROBE, shipVersionLine } from './lib/ship-identity.js';
17
17
  import { registerNetworkCommand } from './commands/network.js';
18
- import { registerGoParityCommands, attachRollbackList, attachJtapiRtp, attachSeedMonitorCancel, attachOfflineDepth, } from './commands/go-parity.js';
18
+ import { registerGoParityCommands, attachJtapiRtp, attachSeedMonitorCancel, } from './commands/go-parity.js';
19
19
  import { registerShipUpdateCommand } from './commands/ship-update.js';
20
20
  import { registerShipDbCommand } from './commands/ship-db.js';
21
21
  import { registerShipCertsCommand } from './commands/ship-certs.js';
@@ -29,10 +29,18 @@ import { registerShipIpv6Command } from './commands/ship-ipv6.js';
29
29
  import { registerShipPostgresCommand } from './commands/ship-postgres.js';
30
30
  import { registerShipOsUpdatesCommand } from './commands/ship-os-updates.js';
31
31
  import { registerShipSqlMonitorCommand } from './commands/ship-sql-monitor.js';
32
+ import { registerShipDockerCommand } from './commands/ship-docker.js';
33
+ import { registerShipOfflineCommand } from './commands/ship-offline.js';
34
+ import { registerShipRollbackCommand } from './commands/ship-rollback.js';
35
+ import { registerShipShellCommand } from './commands/ship-shell.js';
32
36
  import { registerOtelCommand } from './commands/otel.js';
33
37
  import { registerStorageCommand } from './commands/storage.js';
34
38
  import { registerSyslogCommand } from './commands/syslog.js';
35
39
  import { registerProxyCommand } from './commands/proxy.js';
40
+ import { registerPinCommands } from './commands/update.js';
41
+ import { registerSelfUpdateCommand } from './commands/self-update.js';
42
+ import { registerTruespamCommand } from './commands/truespam.js';
43
+ import { registerCubeCommand } from './commands/cube.js';
36
44
  // Fail-closed early argv before Commander (matches Go install probe contract).
37
45
  const earlyArg = process.argv[2];
38
46
  if (earlyArg === '__native_probe') {
@@ -78,12 +86,22 @@ registerOtelCommand(program);
78
86
  registerStorageCommand(program);
79
87
  registerSyslogCommand(program);
80
88
  registerProxyCommand(program);
89
+ // Wave 3 remainder: docker, offline apply, rollback execute
90
+ registerShipDockerCommand(program);
91
+ registerShipOfflineCommand(program);
92
+ registerShipRollbackCommand(program); // rollback + rollback-list
93
+ // pin|unpin|selfupdate|truespam|cube (no Ink modules)
94
+ registerPinCommands(program);
95
+ registerSelfUpdateCommand(program);
96
+ registerTruespamCommand(program);
97
+ registerCubeCommand(program);
98
+ // Wave 2: readline IOS shell + setup wizard (no Ink — same registry as --cli)
99
+ registerShipShellCommand(program);
81
100
  // Network (text argv; shared with full CLI)
82
101
  registerNetworkCommand(program);
83
102
  // Go-parity ports (lib/ops-port — keep registrations; WS-A gates experimental)
84
103
  registerGoParityCommands(program);
85
- attachRollbackList(program);
86
- // Lightweight parents for remaining attach helpers (db/users/migrate/sql-monitor owned above)
104
+ // Lightweight parents for remaining attach helpers
87
105
  {
88
106
  const jtapi = program.command('jtapi').description('JTAPI');
89
107
  attachJtapiRtp(jtapi);
@@ -94,28 +112,11 @@ attachRollbackList(program);
94
112
  attachSeedMonitorCancel(seed);
95
113
  seed.action(() => console.log('Usage: ct seed monitor|cancel'));
96
114
  }
97
- {
98
- const offline = program.command('offline').description('Offline');
99
- attachOfflineDepth(offline);
100
- offline.action(() => console.log('Usage: ct offline images|fetch-check'));
101
- }
102
115
  program
103
116
  .command('version')
104
117
  .description('Print CLI version')
105
118
  .action(() => {
106
119
  console.log(shipVersionLine());
107
120
  });
108
- // Invoked by Go `ct cli shell`. Full Ink IOS shell needs Node + dist;
109
- // ship binary remains text-argv for network/update/db/certs/diag.
110
- program
111
- .command('shell')
112
- .description('IOS shell (Node full CLI); ship binary points to available commands')
113
- .action(() => {
114
- console.log('TypeScript ship binary: full interactive IOS shell requires Node ct-cli.');
115
- console.log('Available here: network, update, db, certs, diag, status, start|stop|restart, logging, users, migrate, ipv6, postgres, otel, storage, syslog, proxy, os-updates, sql-monitor, version, …');
116
- console.log('From Go bridge: ct cli run -- network status');
117
- console.log(' ct cli run -- update --help');
118
- process.exitCode = 2;
119
- });
120
121
  await program.parseAsync(process.argv);
121
122
  //# sourceMappingURL=ship-entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ship-entry.js","sourceRoot":"","sources":["../src/ship-entry.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,+EAA+E;AAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,0EAA0E,CAAC;KACvF,OAAO,CAAC,eAAe,EAAE,EAAE,eAAe,EAAE,mBAAmB,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE7C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACxD,IACE,mBAAmB,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QAC7B,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE;KAClC,CAAC,EACF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,iCAAiC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,6EAA6E;AAC7E,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC;AACvE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC;AACzE,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,kEAAkE;AAClE,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAEpC,0EAA0E;AAC1E,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACvC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,4CAA4C;AAC5C,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,+EAA+E;AAC/E,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,8FAA8F;AAC9F,CAAC;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5D,cAAc,CAAC,KAAK,CAAC,CAAC;IACtB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;AAC5E,CAAC;AACD,CAAC;IACC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,CAAC;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAClE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,sEAAsE;AACtE,kEAAkE;AAClE,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CACT,0LAA0L,CAC3L,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"ship-entry.js","sourceRoot":"","sources":["../src/ship-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calltelemetry/cli",
3
- "version": "0.12.12",
3
+ "version": "0.12.14",
4
4
  "description": "CallTelemetry appliance management CLI",
5
5
  "type": "module",
6
6
  "bin": {