@calltelemetry/cli 0.12.10 → 0.12.12

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 (159) hide show
  1. package/dist/commands/config.d.ts +25 -0
  2. package/dist/commands/config.d.ts.map +1 -1
  3. package/dist/commands/config.js +42 -3
  4. package/dist/commands/config.js.map +1 -1
  5. package/dist/commands/db.d.ts +24 -0
  6. package/dist/commands/db.d.ts.map +1 -1
  7. package/dist/commands/db.js +43 -4
  8. package/dist/commands/db.js.map +1 -1
  9. package/dist/commands/go-parity.d.ts +32 -0
  10. package/dist/commands/go-parity.d.ts.map +1 -0
  11. package/dist/commands/go-parity.js +359 -0
  12. package/dist/commands/go-parity.js.map +1 -0
  13. package/dist/commands/jtapi.d.ts.map +1 -1
  14. package/dist/commands/jtapi.js +2 -0
  15. package/dist/commands/jtapi.js.map +1 -1
  16. package/dist/commands/migrate.d.ts.map +1 -1
  17. package/dist/commands/migrate.js +2 -0
  18. package/dist/commands/migrate.js.map +1 -1
  19. package/dist/commands/network.d.ts.map +1 -1
  20. package/dist/commands/network.js +63 -50
  21. package/dist/commands/network.js.map +1 -1
  22. package/dist/commands/offline.d.ts.map +1 -1
  23. package/dist/commands/offline.js +2 -0
  24. package/dist/commands/offline.js.map +1 -1
  25. package/dist/commands/seed.d.ts.map +1 -1
  26. package/dist/commands/seed.js +2 -0
  27. package/dist/commands/seed.js.map +1 -1
  28. package/dist/commands/ship-certs.d.ts +7 -0
  29. package/dist/commands/ship-certs.d.ts.map +1 -0
  30. package/dist/commands/ship-certs.js +105 -0
  31. package/dist/commands/ship-certs.js.map +1 -0
  32. package/dist/commands/ship-db.d.ts +8 -0
  33. package/dist/commands/ship-db.d.ts.map +1 -0
  34. package/dist/commands/ship-db.js +358 -0
  35. package/dist/commands/ship-db.js.map +1 -0
  36. package/dist/commands/ship-diag.d.ts +10 -0
  37. package/dist/commands/ship-diag.d.ts.map +1 -0
  38. package/dist/commands/ship-diag.js +73 -0
  39. package/dist/commands/ship-diag.js.map +1 -0
  40. package/dist/commands/ship-ipv6.d.ts +6 -0
  41. package/dist/commands/ship-ipv6.d.ts.map +1 -0
  42. package/dist/commands/ship-ipv6.js +59 -0
  43. package/dist/commands/ship-ipv6.js.map +1 -0
  44. package/dist/commands/ship-logging.d.ts +7 -0
  45. package/dist/commands/ship-logging.d.ts.map +1 -0
  46. package/dist/commands/ship-logging.js +71 -0
  47. package/dist/commands/ship-logging.js.map +1 -0
  48. package/dist/commands/ship-migrate.d.ts +6 -0
  49. package/dist/commands/ship-migrate.d.ts.map +1 -0
  50. package/dist/commands/ship-migrate.js +152 -0
  51. package/dist/commands/ship-migrate.js.map +1 -0
  52. package/dist/commands/ship-os-updates.d.ts +6 -0
  53. package/dist/commands/ship-os-updates.d.ts.map +1 -0
  54. package/dist/commands/ship-os-updates.js +116 -0
  55. package/dist/commands/ship-os-updates.js.map +1 -0
  56. package/dist/commands/ship-postgres.d.ts +6 -0
  57. package/dist/commands/ship-postgres.d.ts.map +1 -0
  58. package/dist/commands/ship-postgres.js +84 -0
  59. package/dist/commands/ship-postgres.js.map +1 -0
  60. package/dist/commands/ship-services.d.ts +7 -0
  61. package/dist/commands/ship-services.d.ts.map +1 -0
  62. package/dist/commands/ship-services.js +127 -0
  63. package/dist/commands/ship-services.js.map +1 -0
  64. package/dist/commands/ship-sql-monitor.d.ts +6 -0
  65. package/dist/commands/ship-sql-monitor.d.ts.map +1 -0
  66. package/dist/commands/ship-sql-monitor.js +89 -0
  67. package/dist/commands/ship-sql-monitor.js.map +1 -0
  68. package/dist/commands/ship-status.d.ts +6 -0
  69. package/dist/commands/ship-status.d.ts.map +1 -0
  70. package/dist/commands/ship-status.js +21 -0
  71. package/dist/commands/ship-status.js.map +1 -0
  72. package/dist/commands/ship-update.d.ts +31 -0
  73. package/dist/commands/ship-update.d.ts.map +1 -0
  74. package/dist/commands/ship-update.js +234 -0
  75. package/dist/commands/ship-update.js.map +1 -0
  76. package/dist/commands/ship-users.d.ts +7 -0
  77. package/dist/commands/ship-users.d.ts.map +1 -0
  78. package/dist/commands/ship-users.js +118 -0
  79. package/dist/commands/ship-users.js.map +1 -0
  80. package/dist/commands/syslog.d.ts.map +1 -1
  81. package/dist/commands/syslog.js +18 -2
  82. package/dist/commands/syslog.js.map +1 -1
  83. package/dist/commands/update.d.ts +45 -0
  84. package/dist/commands/update.d.ts.map +1 -1
  85. package/dist/commands/update.js +74 -3
  86. package/dist/commands/update.js.map +1 -1
  87. package/dist/commands/users.d.ts.map +1 -1
  88. package/dist/commands/users.js +51 -0
  89. package/dist/commands/users.js.map +1 -1
  90. package/dist/index.js +3 -72
  91. package/dist/index.js.map +1 -1
  92. package/dist/lib/network-apply.d.ts +102 -0
  93. package/dist/lib/network-apply.d.ts.map +1 -0
  94. package/dist/lib/network-apply.js +472 -0
  95. package/dist/lib/network-apply.js.map +1 -0
  96. package/dist/lib/ops-port.d.ts +205 -0
  97. package/dist/lib/ops-port.d.ts.map +1 -0
  98. package/dist/lib/ops-port.js +906 -0
  99. package/dist/lib/ops-port.js.map +1 -0
  100. package/dist/lib/public-doc.d.ts +37 -0
  101. package/dist/lib/public-doc.d.ts.map +1 -0
  102. package/dist/lib/public-doc.js +27 -0
  103. package/dist/lib/public-doc.js.map +1 -0
  104. package/dist/lib/ship-identity.d.ts +9 -0
  105. package/dist/lib/ship-identity.d.ts.map +1 -0
  106. package/dist/lib/ship-identity.js +12 -0
  107. package/dist/lib/ship-identity.js.map +1 -0
  108. package/dist/lib/ship-logo.d.ts +11 -0
  109. package/dist/lib/ship-logo.d.ts.map +1 -0
  110. package/dist/lib/ship-logo.js +17 -0
  111. package/dist/lib/ship-logo.js.map +1 -0
  112. package/dist/lib/ship-status.d.ts +21 -0
  113. package/dist/lib/ship-status.d.ts.map +1 -0
  114. package/dist/lib/ship-status.js +82 -0
  115. package/dist/lib/ship-status.js.map +1 -0
  116. package/dist/lib/syslog.d.ts +4 -0
  117. package/dist/lib/syslog.d.ts.map +1 -1
  118. package/dist/lib/syslog.js +28 -0
  119. package/dist/lib/syslog.js.map +1 -1
  120. package/dist/lib/version.d.ts +1 -1
  121. package/dist/lib/version.js +1 -1
  122. package/dist/program.d.ts +22 -0
  123. package/dist/program.d.ts.map +1 -0
  124. package/dist/program.js +124 -0
  125. package/dist/program.js.map +1 -0
  126. package/dist/shell/commands/diag.d.ts.map +1 -1
  127. package/dist/shell/commands/diag.js +47 -19
  128. package/dist/shell/commands/diag.js.map +1 -1
  129. package/dist/shell/commands/ops-mutates.d.ts +16 -0
  130. package/dist/shell/commands/ops-mutates.d.ts.map +1 -0
  131. package/dist/shell/commands/ops-mutates.js +62 -0
  132. package/dist/shell/commands/ops-mutates.js.map +1 -0
  133. package/dist/shell/commands/registry.d.ts.map +1 -1
  134. package/dist/shell/commands/registry.js +43 -0
  135. package/dist/shell/commands/registry.js.map +1 -1
  136. package/dist/shell/commands/show.d.ts +12 -0
  137. package/dist/shell/commands/show.d.ts.map +1 -1
  138. package/dist/shell/commands/show.js +190 -10
  139. package/dist/shell/commands/show.js.map +1 -1
  140. package/dist/shell/commands/telemetry.d.ts +11 -0
  141. package/dist/shell/commands/telemetry.d.ts.map +1 -0
  142. package/dist/shell/commands/telemetry.js +49 -0
  143. package/dist/shell/commands/telemetry.js.map +1 -0
  144. package/dist/shell/network-onboarding.d.ts +7 -4
  145. package/dist/shell/network-onboarding.d.ts.map +1 -1
  146. package/dist/shell/network-onboarding.js +22 -38
  147. package/dist/shell/network-onboarding.js.map +1 -1
  148. package/dist/ship-entry.d.ts +3 -0
  149. package/dist/ship-entry.d.ts.map +1 -0
  150. package/dist/ship-entry.js +121 -0
  151. package/dist/ship-entry.js.map +1 -0
  152. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  153. package/dist/ui/views/MainMenu.js +3 -0
  154. package/dist/ui/views/MainMenu.js.map +1 -1
  155. package/dist/ui/views/SyslogView.d.ts +7 -0
  156. package/dist/ui/views/SyslogView.d.ts.map +1 -0
  157. package/dist/ui/views/SyslogView.js +53 -0
  158. package/dist/ui/views/SyslogView.js.map +1 -0
  159. package/package.json +9 -2
@@ -0,0 +1,359 @@
1
+ import * as out from '../utils/output.js';
2
+ import { listPurgeGroups, purgeCtEvents, factoryReset, updateService, setJtapiRtpAdvertise, seedMonitor, seedCancel, bootstrapAdmin, getTelemetryStatus, setTelemetry, operationLeaseStatus, operationLeaseAcquire, operationLeaseRelease, operationLeaseRecover, prepClusterNode, buildAppliance, postgresConvertBitnami, risPhoneExport, sqlMonitorPassword, sqlMonitorRotatePassword, offlineListImages, offlineFetchVersion, migrateLegacyStatus, listRollbackSnapshots, } from '../lib/ops-port.js';
3
+ /** Fail-closed Commander reporting for ops-port results (sets process.exitCode). */
4
+ export function reportOpsResult(r, opts) {
5
+ if (!r.ok) {
6
+ out.fail(r.message);
7
+ process.exitCode = 1;
8
+ return;
9
+ }
10
+ opts?.onSuccess?.();
11
+ out.ok(r.message);
12
+ }
13
+ export function registerGoParityCommands(program) {
14
+ // ── factory-reset (hidden / experimental UAT) ─────────────────────────
15
+ program
16
+ .command('factory-reset', { hidden: true })
17
+ .description('[experimental/UAT] Destructive appliance reset (data + volumes). Requires --experimental --yes.')
18
+ .option('-y, --yes', 'Confirm destructive reset')
19
+ .option('--experimental', 'Enable experimental UAT factory-reset')
20
+ .option('--dry-run', 'Print steps without executing')
21
+ .action(async (opts) => {
22
+ const r = await factoryReset({
23
+ yes: opts.yes,
24
+ dryRun: opts.dryRun,
25
+ experimental: opts.experimental,
26
+ });
27
+ reportOpsResult(r, {
28
+ onSuccess: () => {
29
+ for (const s of r.steps ?? [])
30
+ console.log(` · ${s}`);
31
+ },
32
+ });
33
+ });
34
+ // ── update service ────────────────────────────────────────────────────
35
+ // Nested under a dedicated parent so it does not collide with update [version]
36
+ program
37
+ .command('update-service <service> <tag>')
38
+ .alias('update_service')
39
+ .description('Update ONE compose service image tag (atomic recreate)')
40
+ .option('-y, --yes', 'Confirm non-interactive apply')
41
+ .option('--dry-run', 'Show plan only')
42
+ .action(async (service, tag, opts) => {
43
+ const r = await updateService(service, tag, { yes: opts.yes, dryRun: opts.dryRun });
44
+ reportOpsResult(r);
45
+ });
46
+ // Also expose as: ct update service — by patching after update registers
47
+ // (see attachUpdateServiceSubcommand)
48
+ // ── bootstrap-admin (experimental until RPC verified) ─────────────────
49
+ program
50
+ .command('bootstrap-admin <email> <password>', { hidden: true })
51
+ .description('[experimental] Create or reset admin via RPC (gated until symbols verified). Requires --experimental.')
52
+ .option('--org <id>', 'Org id, or "new" for first-boot org+admin')
53
+ .option('--experimental', 'Enable experimental bootstrap-admin RPC')
54
+ .action(async (email, password, opts) => {
55
+ const r = await bootstrapAdmin(email, password, {
56
+ orgId: opts.org ?? 'auto',
57
+ experimental: opts.experimental,
58
+ });
59
+ reportOpsResult(r);
60
+ });
61
+ // ── telemetry ─────────────────────────────────────────────────────────
62
+ const telemetry = program.command('telemetry').description('CLI analytics consent');
63
+ telemetry
64
+ .command('status')
65
+ .description('Show telemetry consent')
66
+ .action(async () => {
67
+ const s = await getTelemetryStatus();
68
+ console.log(s.enabled ? 'Telemetry: enabled' : 'Telemetry: disabled');
69
+ console.log(`State file: ${s.path}`);
70
+ });
71
+ telemetry
72
+ .command('enable')
73
+ .description('Opt in to pseudonymous CLI analytics')
74
+ .action(async () => {
75
+ const r = await setTelemetry(true);
76
+ out.ok(r.message);
77
+ });
78
+ telemetry
79
+ .command('disable')
80
+ .description('Opt out of CLI analytics')
81
+ .action(async () => {
82
+ const r = await setTelemetry(false);
83
+ out.ok(r.message);
84
+ });
85
+ telemetry.action(async () => {
86
+ const s = await getTelemetryStatus();
87
+ console.log(s.enabled ? 'Telemetry: enabled' : 'Telemetry: disabled');
88
+ });
89
+ // ── operation-lease (local/UAT) ────────────────────────────────────────
90
+ const lease = program
91
+ .command('operation-lease')
92
+ .description('[UAT] Shared local operation lease file (~/.ct/operation-lease.json)');
93
+ lease
94
+ .command('status')
95
+ .action(async () => {
96
+ const r = await operationLeaseStatus();
97
+ console.log(r.message);
98
+ });
99
+ lease
100
+ .command('acquire <holder>')
101
+ .option('--ttl <minutes>', 'Lease TTL minutes', '60')
102
+ .action(async (holder, opts) => {
103
+ const r = await operationLeaseAcquire(holder, Number(opts.ttl) || 60);
104
+ if (!r.ok) {
105
+ out.fail(r.message);
106
+ process.exitCode = 1;
107
+ return;
108
+ }
109
+ out.ok(r.message);
110
+ });
111
+ lease
112
+ .command('release <holder>')
113
+ .action(async (holder) => {
114
+ const r = await operationLeaseRelease(holder);
115
+ if (!r.ok) {
116
+ out.fail(r.message);
117
+ process.exitCode = 1;
118
+ return;
119
+ }
120
+ out.ok(r.message);
121
+ });
122
+ lease
123
+ .command('recover')
124
+ .description('Force-clear stale lease file')
125
+ .action(async () => {
126
+ const r = await operationLeaseRecover();
127
+ out.ok(r.message);
128
+ });
129
+ lease
130
+ .command('renew <holder>')
131
+ .option('--ttl <minutes>', 'Lease TTL minutes', '60')
132
+ .action(async (holder, opts) => {
133
+ const r = await operationLeaseAcquire(holder, Number(opts.ttl) || 60);
134
+ if (!r.ok) {
135
+ out.fail(r.message);
136
+ process.exitCode = 1;
137
+ return;
138
+ }
139
+ out.ok(`Renewed: ${r.message}`);
140
+ });
141
+ lease.action(async () => {
142
+ const r = await operationLeaseStatus();
143
+ console.log(r.message);
144
+ });
145
+ // ── prep-cluster-node / build-appliance (lab / non-production) ────────
146
+ program
147
+ .command('prep-cluster-node')
148
+ .description('[lab/non-production] Verify cluster-node helper tooling (idempotent)')
149
+ .option('--dry-run', 'Print steps only')
150
+ .action(async (opts) => {
151
+ const r = await prepClusterNode({ dryRun: opts.dryRun });
152
+ reportOpsResult(r);
153
+ });
154
+ program
155
+ .command('build-appliance')
156
+ .description('[lab/non-production] Download/check appliance prep installer (does not build production OVA)')
157
+ .option('--dry-run', 'Print plan only')
158
+ .action(async (opts) => {
159
+ const r = await buildAppliance({ dryRun: opts.dryRun });
160
+ reportOpsResult(r);
161
+ });
162
+ // ── ris phone-export (experimental) ───────────────────────────────────
163
+ const ris = program.command('ris').description('RIS diagnostics (experimental tools)');
164
+ ris
165
+ .command('phone-export')
166
+ .description('[experimental] Capture RIS debug snapshot (non-production). Requires --experimental.')
167
+ .option('-o, --output <file>', 'Output path')
168
+ .option('--experimental', 'Enable experimental RIS export')
169
+ .action(async (opts) => {
170
+ const r = await risPhoneExport({ output: opts.output, experimental: opts.experimental });
171
+ reportOpsResult(r);
172
+ });
173
+ ris.action(() => {
174
+ console.log('Usage: ct ris phone-export --experimental [-o file]');
175
+ });
176
+ // ── sql-monitor password helpers (also under parent if exists) ───────
177
+ // Registered on program as flat helpers when sql-monitor parent already exists
178
+ }
179
+ /** Attach db purge-groups / purge-ct-events onto existing db command. */
180
+ export function attachDbPurgePorts(db) {
181
+ db.command('purge-groups')
182
+ .description('List optimized purge groups')
183
+ .action(() => {
184
+ console.log(listPurgeGroups());
185
+ });
186
+ // Wave 0 §10.1: Cdrcisco.Maintenance.purge_group is not a real onprem RPC
187
+ // symbol on current cisco-cdr (MaintenanceDdlRepo is a DB pool, not RPC API).
188
+ // Keep list (purge-groups) visible; gate execute until native purge is ported.
189
+ db.command('purge-ct-events [days]', { hidden: true })
190
+ .description('[experimental] Purge CUBE/XCC/CURRI telemetry group (default 7 days). Requires --experimental until RPC/native path is verified.')
191
+ .option('-y, --yes', 'Confirm purge')
192
+ .option('--dry-run', 'Show plan only')
193
+ .option('--experimental', 'Enable experimental purge-ct-events (RPC symbol unverified on tip)')
194
+ .action(async (daysStr, opts) => {
195
+ if (!opts.experimental && !opts.dryRun) {
196
+ reportOpsResult({
197
+ ok: false,
198
+ message: 'Error: purge-ct-events is experimental until the execute path is verified on the pinned release (Cdrcisco.Maintenance.purge_group is not a known onprem RPC). Pass --experimental --yes, or use --dry-run. Prefer native Go `ct db purge-ct-events` on appliances until Wave 1 native port lands.',
199
+ });
200
+ return;
201
+ }
202
+ const days = daysStr ? parseInt(daysStr, 10) : 7;
203
+ const r = await purgeCtEvents(days, { yes: opts.yes, dryRun: opts.dryRun });
204
+ reportOpsResult(r);
205
+ });
206
+ }
207
+ export function attachJtapiRtp(jtapi) {
208
+ jtapi
209
+ .command('set-rtp-advertise <ip>')
210
+ .description('Set CTI RTP advertise address')
211
+ .action(async (ip) => {
212
+ const r = await setJtapiRtpAdvertise(ip);
213
+ reportOpsResult(r);
214
+ });
215
+ }
216
+ export function attachSeedMonitorCancel(seed) {
217
+ // Wave 0: Cdrcisco.Seed.* is not a module on tip (Cdrcisco.Seeds is demos). Gate.
218
+ seed
219
+ .command('monitor', { hidden: true })
220
+ .description('[experimental] Seed status via RPC (gated until symbol verified). Requires --experimental.')
221
+ .option('--experimental', 'Enable experimental seed monitor RPC')
222
+ .action(async (opts) => {
223
+ if (!opts.experimental) {
224
+ reportOpsResult({
225
+ ok: false,
226
+ message: 'Error: seed monitor is experimental (Cdrcisco.Seed.status not verified on tip). Pass --experimental.',
227
+ });
228
+ return;
229
+ }
230
+ const r = await seedMonitor({ once: true });
231
+ reportOpsResult(r);
232
+ });
233
+ seed
234
+ .command('cancel', { hidden: true })
235
+ .description('[experimental] Cancel seed jobs via RPC (gated until symbol verified). Requires --experimental.')
236
+ .option('--experimental', 'Enable experimental seed cancel RPC')
237
+ .action(async (opts) => {
238
+ if (!opts.experimental) {
239
+ reportOpsResult({
240
+ ok: false,
241
+ message: 'Error: seed cancel is experimental (Cdrcisco.Seed.cancel_all not verified on tip). Pass --experimental.',
242
+ });
243
+ return;
244
+ }
245
+ const r = await seedCancel();
246
+ reportOpsResult(r);
247
+ });
248
+ }
249
+ export function attachUsersAddAdmin(users) {
250
+ users
251
+ .command('add-admin <orgId> <email> <password>', { hidden: true })
252
+ .description('[experimental] Create or reset full_admin in org (orgId may be "new"). Requires --experimental.')
253
+ .option('--experimental', 'Enable experimental add-admin RPC')
254
+ .action(async (orgId, email, password, opts) => {
255
+ const r = await bootstrapAdmin(email, password, {
256
+ orgId,
257
+ experimental: opts.experimental,
258
+ });
259
+ reportOpsResult(r);
260
+ });
261
+ // list|orgs|reset-password are registered by ship-users (ship) / users.ts (full CLI).
262
+ // Do not attach stubs here — they would shadow real handlers or leave false greens.
263
+ }
264
+ export function attachMigrateLegacy(migrate) {
265
+ migrate
266
+ .command('legacy')
267
+ .description('Legacy partition + rollup backfill status')
268
+ .option('--json', 'JSON output')
269
+ .action(async (opts) => {
270
+ const r = await migrateLegacyStatus({ json: opts.json });
271
+ console.log(r.message);
272
+ });
273
+ }
274
+ export function attachSqlMonitorPassword(sql) {
275
+ sql
276
+ .command('password')
277
+ .description('Show PgHero / sql-monitor URL and redacted credentials')
278
+ .action(async () => {
279
+ const r = await sqlMonitorPassword();
280
+ reportOpsResult(r);
281
+ });
282
+ sql
283
+ .command('rotate-password')
284
+ .description('Rotate PgHero credentials and recreate service')
285
+ .action(async () => {
286
+ const r = await sqlMonitorRotatePassword();
287
+ reportOpsResult(r);
288
+ });
289
+ }
290
+ export function attachPostgresConvert(postgresCmd) {
291
+ postgresCmd
292
+ .command('convert-bitnami', { hidden: true })
293
+ .description('[experimental] Detect PostgreSQL Bitnami layout only (no conf auto-repair). Prefer docs migration.')
294
+ .option('--dry-run', 'Plan only')
295
+ .option('--experimental', 'Acknowledge experimental detect-only mode')
296
+ .action(async (opts) => {
297
+ if (!opts.experimental && !opts.dryRun) {
298
+ out.fail('Error: postgres convert-bitnami is experimental detect-only. Pass --experimental (or --dry-run). No comment-only conf repair.');
299
+ process.exitCode = 1;
300
+ return;
301
+ }
302
+ const r = await postgresConvertBitnami({
303
+ dryRun: opts.dryRun,
304
+ experimental: opts.experimental,
305
+ });
306
+ reportOpsResult(r);
307
+ });
308
+ }
309
+ /** Standalone registration when postgres uses positional action style. */
310
+ export async function runPostgresConvertBitnami(opts = {}) {
311
+ if (!opts.experimental && !opts.dryRun) {
312
+ out.fail('Error: postgres convert-bitnami is experimental detect-only. Pass --experimental (or --dry-run). No comment-only conf repair.');
313
+ process.exitCode = 1;
314
+ return;
315
+ }
316
+ const r = await postgresConvertBitnami({
317
+ dryRun: opts.dryRun,
318
+ experimental: opts.experimental,
319
+ });
320
+ reportOpsResult(r);
321
+ }
322
+ export function attachOfflineDepth(offline) {
323
+ // list already exists; ensure fetch polish
324
+ offline
325
+ .command('fetch-check <version>')
326
+ .description('Check offline bundle manifest reachability for version')
327
+ .option('--dry-run', 'Plan only')
328
+ .action(async (version, opts) => {
329
+ const r = await offlineFetchVersion(version, { dryRun: opts.dryRun });
330
+ if (!r.ok) {
331
+ out.fail(r.message);
332
+ process.exitCode = 1;
333
+ return;
334
+ }
335
+ out.ok(r.message);
336
+ });
337
+ offline
338
+ .command('images')
339
+ .description('List compose image lines (offline inventory)')
340
+ .action(async () => {
341
+ const r = await offlineListImages();
342
+ if (!r.ok) {
343
+ out.fail(r.message);
344
+ process.exitCode = 1;
345
+ return;
346
+ }
347
+ console.log(r.message);
348
+ });
349
+ }
350
+ export function attachRollbackList(program) {
351
+ program
352
+ .command('rollback-list')
353
+ .description('List pre-upgrade rollback snapshots')
354
+ .action(async () => {
355
+ const r = await listRollbackSnapshots();
356
+ console.log(r.message);
357
+ });
358
+ }
359
+ //# sourceMappingURL=go-parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parity.js","sourceRoot":"","sources":["../../src/commands/go-parity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jtapi.d.ts","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAoCpD"}
1
+ {"version":3,"file":"jtapi.d.ts","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAsCpD"}
@@ -1,6 +1,7 @@
1
1
  import { render } from 'ink';
2
2
  import React from 'react';
3
3
  import { JtapiView } from '../ui/views/JtapiView.js';
4
+ import { attachJtapiRtp } from './go-parity.js';
4
5
  export function registerJtapiCommand(program) {
5
6
  const jtapi = program
6
7
  .command('jtapi')
@@ -9,6 +10,7 @@ export function registerJtapiCommand(program) {
9
10
  const { waitUntilExit } = render(React.createElement(JtapiView));
10
11
  await waitUntilExit();
11
12
  });
13
+ attachJtapiRtp(jtapi);
12
14
  jtapi.command('enable')
13
15
  .description('Enable the JTAPI sidecar')
14
16
  .action(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"jtapi.js","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;SACrB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;SAC1B,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"jtapi.js","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;SACrB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;SAC1B,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAyDtD"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA2DtD"}
@@ -6,10 +6,12 @@ import { MigrateRunView } from '../ui/views/MigrateRunView.js';
6
6
  import { MigrateRollbackView } from '../ui/views/MigrateRollbackView.js';
7
7
  import { MigrateWatchView } from '../ui/views/MigrateWatchView.js';
8
8
  import { MigrateDrainView } from '../ui/views/MigrateDrainView.js';
9
+ import { attachMigrateLegacy } from './go-parity.js';
9
10
  export function registerMigrateCommand(program) {
10
11
  const migrate = program
11
12
  .command('migrate')
12
13
  .description('Database migration commands');
14
+ attachMigrateLegacy(migrate);
13
15
  migrate.command('status')
14
16
  .description('Show migration status (default)')
15
17
  .action(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9C,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACnB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAChC,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,EAAE;QAClC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CACnF,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACvB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC1E,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,GAAG,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CACxF,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA0GtD"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAiItD"}
@@ -1,26 +1,16 @@
1
1
  import chalk from 'chalk';
2
2
  import { exec } from '../lib/exec.js';
3
3
  import { getNetworkInterfaceList, getDefaultGateway, getEthernetInterfaces } from '../lib/network.js';
4
+ import { applyStaticAddress, applyDhcp, fixNetworkProfiles, setExternalIp, detectPrimaryEthernet, activeConnectionOnIface, CT_NETWORK_CONN, } from '../lib/network-apply.js';
4
5
  import * as out from '../utils/output.js';
5
- const CONN_NAME = 'ct-network';
6
6
  async function getActiveConn(iface) {
7
- try {
8
- const result = await exec('nmcli', ['-t', '-f', 'NAME,DEVICE', 'connection', 'show', '--active']);
9
- const line = String(result.stdout ?? '').split('\n').find((l) => l.endsWith(`:${iface}`));
10
- if (line)
11
- return line.split(':')[0];
12
- }
13
- catch { /* fall through */ }
14
- return CONN_NAME;
7
+ const active = await activeConnectionOnIface(iface);
8
+ if (active)
9
+ return active;
10
+ return CT_NETWORK_CONN;
15
11
  }
16
12
  async function getPrimaryIface() {
17
- const result = await exec('nmcli', ['-t', '-f', 'DEVICE,TYPE', 'device']);
18
- const output = String(result.stdout ?? '');
19
- const line = output.split('\n').find((l) => l.includes(':ethernet'));
20
- const iface = line?.split(':')[0];
21
- if (!iface)
22
- throw new Error('No ethernet interface detected.');
23
- return iface;
13
+ return detectPrimaryEthernet();
24
14
  }
25
15
  /** If first arg is an ethernet interface name, extract it; otherwise auto-detect. */
26
16
  function extractIface(args) {
@@ -34,7 +24,6 @@ export function registerNetworkCommand(program) {
34
24
  const network = program
35
25
  .command('network')
36
26
  .description('Network configuration');
37
- // ct network — show all interfaces
38
27
  network.action(async () => {
39
28
  const ifaces = getNetworkInterfaceList().filter((i) => !i.internal && i.family === 'IPv4');
40
29
  const gateway = await getDefaultGateway().catch(() => null);
@@ -49,12 +38,16 @@ export function registerNetworkCommand(program) {
49
38
  const conn = await getActiveConn(primary);
50
39
  const dnsResult = await exec('nmcli', ['-g', 'ipv4.dns', 'connection', 'show', conn]);
51
40
  const domainResult = await exec('nmcli', ['-g', 'ipv4.dns-search', 'connection', 'show', conn]);
41
+ const prioResult = await exec('nmcli', ['-g', 'connection.autoconnect-priority', 'connection', 'show', conn]).catch(() => null);
52
42
  const dns = String(dnsResult.stdout ?? '').trim();
53
43
  const domain = String(domainResult.stdout ?? '').trim();
44
+ const prio = prioResult ? String(prioResult.stdout ?? '').trim() : '';
54
45
  if (dns)
55
46
  console.log(` DNS : ${dns.replace(/,/g, ', ')}`);
56
47
  if (domain)
57
48
  console.log(` Domain : ${domain}`);
49
+ if (prio)
50
+ console.log(` Priority : ${prio} (active: ${conn})`);
58
51
  }
59
52
  catch { /* nmcli not available */ }
60
53
  console.log();
@@ -63,34 +56,36 @@ export function registerNetworkCommand(program) {
63
56
  console.log(' ct network dns-servers [iface] <dns1> [dns2 ...]');
64
57
  console.log(' ct network domain [iface] <domain>');
65
58
  console.log(' ct network dhcp [iface]');
59
+ console.log(' ct network fix [iface]');
60
+ console.log(' ct network set-external-ip <ip|auto>');
66
61
  });
67
- // ct network address [iface] <ip/prefix> <gateway>
68
62
  network
69
63
  .command('address [args...]')
70
- .description('Set static IP e.g. ct network address eth0 192.168.10.50/24 192.168.10.1')
64
+ .description('Set static IP (reboot-safe: priority 200, demote, mask cloud-init)')
71
65
  .action(async (rawArgs) => {
72
- const { iface: ifaceArg, rest } = extractIface(rawArgs);
66
+ const { iface: ifaceArg, rest } = extractIface(rawArgs ?? []);
73
67
  const [ipPrefix, gateway] = rest;
74
68
  if (!ipPrefix || !gateway) {
75
69
  out.fail('Usage: ct network address [iface] <ip/prefix> <gateway>');
76
70
  out.fail('Example: ct network address eth0 192.168.10.50/24 192.168.10.1');
77
71
  return;
78
72
  }
79
- const iface = ifaceArg ?? await getPrimaryIface();
80
- await exec('nmcli', ['connection', 'delete', CONN_NAME]).catch(() => { });
81
- await exec('nmcli', [
82
- 'connection', 'add', 'type', 'ethernet',
83
- 'con-name', CONN_NAME, 'ifname', iface,
84
- 'ipv4.method', 'manual',
85
- 'ipv4.addresses', ipPrefix,
86
- 'ipv4.gateway', gateway,
87
- 'connection.autoconnect', 'yes',
88
- 'connection.autoconnect-priority', '100',
89
- ]);
90
- await exec('nmcli', ['connection', 'up', CONN_NAME]);
91
- out.ok(`Static IP ${ipPrefix} configured on ${iface} (gateway: ${gateway})`);
73
+ const result = await applyStaticAddress({
74
+ iface: ifaceArg,
75
+ address: ipPrefix,
76
+ gateway,
77
+ });
78
+ if (!result.ok) {
79
+ out.fail(result.message);
80
+ process.exitCode = 1;
81
+ return;
82
+ }
83
+ out.ok(result.message.split('\n')[0]);
84
+ for (const line of result.message.split('\n').slice(1)) {
85
+ if (line)
86
+ console.log(line);
87
+ }
92
88
  });
93
- // ct network dns-servers <dns...>
94
89
  network
95
90
  .command('dns-servers <dns...>')
96
91
  .description('Set DNS servers e.g. ct network dns-servers 8.8.8.8 4.4.4.4')
@@ -101,7 +96,6 @@ export function registerNetworkCommand(program) {
101
96
  await exec('nmcli', ['connection', 'up', conn]).catch(() => { });
102
97
  out.ok(`DNS servers set: ${dns.join(', ')}`);
103
98
  });
104
- // ct network domain <domain>
105
99
  network
106
100
  .command('domain <domain>')
107
101
  .description('Set DNS search domain e.g. ct network domain corp.local')
@@ -112,24 +106,43 @@ export function registerNetworkCommand(program) {
112
106
  await exec('nmcli', ['connection', 'up', conn]).catch(() => { });
113
107
  out.ok(`Search domain set: ${domain}`);
114
108
  });
115
- // ct network dhcp [iface]
116
109
  network
117
110
  .command('dhcp [args...]')
118
- .description('Switch to DHCP e.g. ct network dhcp eth0')
111
+ .description('Switch to DHCP with priority 200 product profile')
119
112
  .action(async (rawArgs) => {
120
- const { iface: ifaceArg } = extractIface(rawArgs);
121
- const iface = ifaceArg ?? await getPrimaryIface();
122
- await exec('nmcli', ['connection', 'delete', CONN_NAME]).catch(() => { });
123
- await exec('nmcli', [
124
- 'connection', 'add', 'type', 'ethernet',
125
- 'con-name', CONN_NAME, 'ifname', iface,
126
- 'ipv4.method', 'auto',
127
- 'connection.autoconnect', 'yes',
128
- 'connection.autoconnect-priority', '100',
129
- ]);
130
- await exec('nmcli', ['connection', 'up', CONN_NAME]);
131
- const acquired = getNetworkInterfaceList().find((i) => i.name === iface && i.family === 'IPv4');
132
- out.ok(`DHCP configured on ${iface}. IP: ${acquired?.address ?? '(acquiring...)'}`);
113
+ const { iface: ifaceArg } = extractIface(rawArgs ?? []);
114
+ const result = await applyDhcp({ iface: ifaceArg });
115
+ if (!result.ok) {
116
+ out.fail(result.message);
117
+ process.exitCode = 1;
118
+ return;
119
+ }
120
+ const acquired = getNetworkInterfaceList().find((i) => i.name === result.iface && i.family === 'IPv4');
121
+ out.ok(`DHCP configured on ${result.iface}. IP: ${acquired?.address ?? '(acquiring...)'}`);
122
+ });
123
+ network
124
+ .command('fix [iface]')
125
+ .description('Demote competing profiles and ensure ct-network wins on boot')
126
+ .action(async (iface) => {
127
+ const result = await fixNetworkProfiles(iface);
128
+ if (!result.ok) {
129
+ out.fail(result.message);
130
+ process.exitCode = 1;
131
+ return;
132
+ }
133
+ out.ok(result.message);
134
+ });
135
+ network
136
+ .command('set-external-ip <ip>')
137
+ .description('Persist appliance callback IPv4 (EXTERNAL_IP) or auto')
138
+ .action(async (ip) => {
139
+ const result = await setExternalIp(ip);
140
+ if (!result.ok) {
141
+ out.fail(result.message);
142
+ process.exitCode = 1;
143
+ return;
144
+ }
145
+ out.ok(result.message);
133
146
  });
134
147
  }
135
148
  //# sourceMappingURL=network.js.map