@celilo/cli 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +7 -4
- package/CELILO_CORE_MODULES.md +7 -6
- package/CELILO_SUBSYSTEMS.md +52 -6
- package/MODULE_PRIMITIVES.md +164 -0
- package/README.md +5 -5
- package/drizzle/0015_port_forwards.sql +12 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +14 -6
- package/schemas/system_config.json +1 -1
- package/src/ansible/inventory.test.ts +1 -1
- package/src/ansible/inventory.ts +3 -3
- package/src/api/protocol.test.ts +1 -1
- package/src/api/remote-client.test.ts +1 -1
- package/src/api/serve.ts +5 -5
- package/src/capabilities/public-web-publish.test.ts +209 -0
- package/src/capabilities/validation.test.ts +1 -1
- package/src/capabilities/well-known.test.ts +1 -1
- package/src/capabilities/well-known.ts +2 -2
- package/src/cli/command-tree-parser.ts +3 -1
- package/src/cli/commands/api.ts +1 -1
- package/src/cli/commands/apt-upgrade.test.ts +33 -0
- package/src/cli/commands/apt-upgrade.ts +63 -0
- package/src/cli/commands/backup-pull.ts +1 -1
- package/src/cli/commands/commands-json.ts +29 -0
- package/src/cli/commands/completion.ts +1 -1
- package/src/cli/commands/events.ts +1 -1
- package/src/cli/commands/module-changeset.ts +1 -1
- package/src/cli/commands/module-import.ts +1 -1
- package/src/cli/commands/module-list.ts +16 -2
- package/src/cli/commands/module-publish.ts +1 -1
- package/src/cli/commands/module-remove.ts +26 -1
- package/src/cli/commands/module-types.ts +1 -1
- package/src/cli/commands/module-upgrade.ts +1 -1
- package/src/cli/commands/module-version.ts +1 -1
- package/src/cli/commands/module-where.test.ts +26 -0
- package/src/cli/commands/module-where.ts +130 -0
- package/src/cli/commands/proxmox-node-list.ts +1 -1
- package/src/cli/commands/publish/alpha.test.ts +1 -1
- package/src/cli/commands/publish/alpha.ts +3 -3
- package/src/cli/commands/publish/changesets.ts +1 -1
- package/src/cli/commands/publish/global-install.ts +6 -2
- package/src/cli/commands/publish/helpers.ts +21 -14
- package/src/cli/commands/publish/index.ts +4 -4
- package/src/cli/commands/publish/plan.ts +3 -3
- package/src/cli/commands/publish/preflight.ts +2 -2
- package/src/cli/commands/publish/types.ts +2 -2
- package/src/cli/commands/publish/workspace.test.ts +1 -1
- package/src/cli/commands/publish/workspace.ts +2 -2
- package/src/cli/commands/registry-owner.test.ts +166 -0
- package/src/cli/commands/registry-owner.ts +124 -0
- package/src/cli/commands/registry-token.test.ts +109 -0
- package/src/cli/commands/registry-token.ts +194 -0
- package/src/cli/commands/restore.ts +1 -1
- package/src/cli/commands/service-add-proxmox.ts +1 -1
- package/src/cli/commands/service-list.ts +15 -2
- package/src/cli/commands/subscribers-list.ts +1 -1
- package/src/cli/commands/system-apply-config-equivalence.test.ts +1 -1
- package/src/cli/commands/system-apply-config.ts +1 -1
- package/src/cli/commands/system-init-deprecation.test.ts +1 -1
- package/src/cli/commands/system-init.ts +2 -2
- package/src/cli/commands/token.test.ts +26 -0
- package/src/cli/commands/token.ts +160 -0
- package/src/cli/completion.ts +21 -0
- package/src/cli/generate-zsh-completion.test.ts +22 -4
- package/src/cli/generate-zsh-completion.ts +7 -3
- package/src/cli/index.ts +170 -7
- package/src/cli/parser.ts +1 -1
- package/src/cli/restore-command.test.ts +1 -1
- package/src/db/client.ts +1 -1
- package/src/db/schema.ts +50 -7
- package/src/hooks/capability-loader-firewall.test.ts +4 -3
- package/src/hooks/capability-loader.ts +100 -10
- package/src/hooks/define-hook.test.ts +24 -0
- package/src/hooks/executor.test.ts +1 -1
- package/src/hooks/executor.ts +2 -2
- package/src/hooks/types.ts +1 -1
- package/src/manifest/contracts/v1.ts +2 -2
- package/src/manifest/schema.ts +13 -13
- package/src/manifest/template-validator.ts +1 -1
- package/src/module/packaging/build.ts +19 -0
- package/src/module/packaging/workspace-deps.test.ts +94 -0
- package/src/module/packaging/workspace-deps.ts +185 -0
- package/src/module/versioning/changeset-version.ts +1 -1
- package/src/policy/no-hand-built-ssh.test.ts +90 -0
- package/src/registry/client.test.ts +86 -0
- package/src/registry/client.ts +67 -1
- package/src/services/api-access.ts +1 -1
- package/src/services/aspect-approvals.ts +1 -1
- package/src/services/aspect-runner.ts +3 -3
- package/src/services/aspect-template-resolver.test.ts +1 -1
- package/src/services/aspect-template-resolver.ts +1 -1
- package/src/services/build-bus/delivery-events.ts +1 -1
- package/src/services/build-bus/fan-out.ts +1 -1
- package/src/services/build-bus/hook-dispatch.ts +1 -1
- package/src/services/build-bus/receiver-server.ts +1 -1
- package/src/services/build-bus/status.test.ts +1 -1
- package/src/services/build-bus/status.ts +1 -1
- package/src/services/build-bus/subscriber-store.ts +1 -1
- package/src/services/bus-interview.ts +1 -1
- package/src/services/celilo-events.ts +1 -1
- package/src/services/celilo-mgmt-hooks.test.ts +1 -1
- package/src/services/cross-module-read.ts +1 -1
- package/src/services/deploy-posture.ts +1 -1
- package/src/services/deployed-systems.test.ts +1 -1
- package/src/services/deployed-systems.ts +4 -4
- package/src/services/dns-provider-backfill.ts +2 -2
- package/src/services/events-daemon.ts +1 -1
- package/src/services/machine-pool.ts +3 -3
- package/src/services/module-deploy.ts +93 -8
- package/src/services/module-subscriptions.ts +1 -1
- package/src/services/module-types-generator.ts +1 -1
- package/src/services/module-validator/git-hygiene.ts +1 -1
- package/src/services/port-forwards.test.ts +92 -0
- package/src/services/port-forwards.ts +86 -0
- package/src/services/proxmox-reconcile.ts +2 -2
- package/src/services/public-web-republish.test.ts +189 -0
- package/src/services/public-web-republish.ts +84 -0
- package/src/services/restore-from-file.ts +1 -1
- package/src/services/restore-preflight.ts +1 -1
- package/src/services/system-identity.ts +1 -1
- package/src/services/system-init.test.ts +2 -2
- package/src/services/system-init.ts +2 -2
- package/src/services/web-route-cleanup.test.ts +250 -0
- package/src/services/web-route-cleanup.ts +144 -0
- package/src/templates/generator.ts +2 -2
- package/src/types/infrastructure.ts +1 -1
- package/src/variables/computed/computed-integration.test.ts +1 -1
- package/src/variables/computed/evaluate.ts +1 -1
- package/src/variables/computed/parse.ts +1 -1
- package/src/variables/context.test.ts +1 -1
- package/src/variables/context.ts +5 -5
- package/src/variables/lxc-nameserver.test.ts +1 -1
- package/src/variables/resolver.ts +2 -2
- package/src/variables/types.ts +1 -1
- package/src/api/protocol.ts +0 -159
- package/src/api/remote-client.ts +0 -218
- package/src/cli/command-registry.ts +0 -1488
|
@@ -1,1488 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Command Registry - Single Source of Truth
|
|
3
|
-
*
|
|
4
|
-
* Defines the complete CLI command tree with metadata used by:
|
|
5
|
-
* - Zsh completion generator (descriptions, args, flags)
|
|
6
|
-
* - Help text generation (future)
|
|
7
|
-
* - Completion coverage tests
|
|
8
|
-
*
|
|
9
|
-
* When adding a new command:
|
|
10
|
-
* 1. Add it to this registry
|
|
11
|
-
* 2. Add routing in index.ts
|
|
12
|
-
* 3. Run `bun run test:completion` to verify coverage
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Flag definition for a command
|
|
17
|
-
*/
|
|
18
|
-
export interface FlagDef {
|
|
19
|
-
name: string;
|
|
20
|
-
description: string;
|
|
21
|
-
takesValue: boolean;
|
|
22
|
-
/** Zsh completion hint: "_files", "_directories", or literal values like "dmz app secure" */
|
|
23
|
-
valueHint?: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Positional argument definition
|
|
28
|
-
*/
|
|
29
|
-
export interface ArgDef {
|
|
30
|
-
name: string;
|
|
31
|
-
description: string;
|
|
32
|
-
/** If true, this arg can be repeated (variadic). Uses * in zsh completions. */
|
|
33
|
-
variadic?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Dynamic completion source:
|
|
36
|
-
* - "module_ids": query modules table
|
|
37
|
-
* - "service_ids": query container_services table
|
|
38
|
-
* - "machine_hostnames": query machines table
|
|
39
|
-
* - "capability_names": query capabilities table
|
|
40
|
-
* - "config_keys": query manifest for module-specific keys
|
|
41
|
-
* - "system_config_keys": static list of system config keys
|
|
42
|
-
* - "system_secret_keys": static list of system secret keys
|
|
43
|
-
* - "files": zsh _files
|
|
44
|
-
* - "directories": zsh _directories
|
|
45
|
-
* - undefined: no completion
|
|
46
|
-
*/
|
|
47
|
-
completion?: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Command node in the tree
|
|
52
|
-
*/
|
|
53
|
-
export interface CommandDef {
|
|
54
|
-
name: string;
|
|
55
|
-
description: string;
|
|
56
|
-
subcommands?: CommandDef[];
|
|
57
|
-
args?: ArgDef[];
|
|
58
|
-
flags?: FlagDef[];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Complete CLI command tree
|
|
63
|
-
*/
|
|
64
|
-
export const COMMANDS: CommandDef[] = [
|
|
65
|
-
{
|
|
66
|
-
name: 'status',
|
|
67
|
-
description: 'Show system and module status',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
name: 'audit',
|
|
71
|
-
description: 'Top-level alias for `system audit`',
|
|
72
|
-
flags: [
|
|
73
|
-
{
|
|
74
|
-
name: 'json',
|
|
75
|
-
description: 'Output a stable JSON schema instead of the human-readable table',
|
|
76
|
-
takesValue: false,
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
name: 'tui',
|
|
80
|
-
description: 'Force the interactive TUI (default when stdout is a terminal)',
|
|
81
|
-
takesValue: false,
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
name: 'no-tui',
|
|
85
|
-
description: 'Force the static text report even when stdout is a terminal',
|
|
86
|
-
takesValue: false,
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
name: 'theme',
|
|
90
|
-
description: 'TUI color theme (dark|light); defaults to dark',
|
|
91
|
-
takesValue: true,
|
|
92
|
-
},
|
|
93
|
-
],
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: 'api',
|
|
97
|
-
description: 'Manage remote-API access (principals, grants, authorized_keys)',
|
|
98
|
-
subcommands: [
|
|
99
|
-
{
|
|
100
|
-
name: 'grant',
|
|
101
|
-
description: 'Grant or replace API access for a principal',
|
|
102
|
-
args: [{ name: 'principal', description: 'Principal name (kebab-case)' }],
|
|
103
|
-
flags: [
|
|
104
|
-
{
|
|
105
|
-
name: 'key',
|
|
106
|
-
description: 'SSH public key, or path to a .pub file',
|
|
107
|
-
takesValue: true,
|
|
108
|
-
valueHint: '_files',
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: 'can',
|
|
112
|
-
description: 'Comma-separated grants (e.g. module:deploy,service:*)',
|
|
113
|
-
takesValue: true,
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
{ name: 'list', description: 'List API principals and their grants' },
|
|
118
|
-
{
|
|
119
|
-
name: 'revoke',
|
|
120
|
-
description: 'Revoke API access for a principal',
|
|
121
|
-
args: [{ name: 'principal', description: 'Principal name' }],
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
name: 'authorized-keys',
|
|
125
|
-
description: "Print the API account's authorized_keys (forced-command lines)",
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: 'key',
|
|
129
|
-
description: 'Client-side key management',
|
|
130
|
-
subcommands: [
|
|
131
|
-
{
|
|
132
|
-
name: 'new',
|
|
133
|
-
description: 'Generate a new API keypair and print enrollment steps',
|
|
134
|
-
args: [{ name: 'name', description: 'Principal name for the key' }],
|
|
135
|
-
},
|
|
136
|
-
],
|
|
137
|
-
},
|
|
138
|
-
],
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: 'events',
|
|
142
|
-
description: 'SQLite event-bus operations (status, tail, run dispatcher, etc.)',
|
|
143
|
-
subcommands: [
|
|
144
|
-
{ name: 'status', description: 'Print bus health as JSON' },
|
|
145
|
-
{
|
|
146
|
-
name: 'tail',
|
|
147
|
-
description: 'Recent events as JSON',
|
|
148
|
-
flags: [
|
|
149
|
-
{ name: 'type', description: 'Filter by event type', takesValue: true },
|
|
150
|
-
{ name: 'limit', description: 'Max events to return', takesValue: true },
|
|
151
|
-
],
|
|
152
|
-
},
|
|
153
|
-
{ name: 'list-subscribers', description: 'List persistent bus subscribers' },
|
|
154
|
-
{
|
|
155
|
-
name: 'resync-subscriptions',
|
|
156
|
-
description:
|
|
157
|
-
"Rebuild subscribers from deployed modules' manifests (after a restore/migration)",
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: 'list-pending',
|
|
161
|
-
description: 'List pending deliveries',
|
|
162
|
-
flags: [
|
|
163
|
-
{
|
|
164
|
-
name: 'subscriber',
|
|
165
|
-
description: 'Restrict to a subscriber by name',
|
|
166
|
-
takesValue: true,
|
|
167
|
-
},
|
|
168
|
-
{ name: 'limit', description: 'Max rows to return', takesValue: true },
|
|
169
|
-
],
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
name: 'drain',
|
|
173
|
-
description: 'Process pending deliveries once and return',
|
|
174
|
-
flags: [{ name: 'concurrency', description: 'Max parallel handlers', takesValue: true }],
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
name: 'run',
|
|
178
|
-
description: 'Run the long-running dispatcher in the foreground',
|
|
179
|
-
flags: [
|
|
180
|
-
{ name: 'poll-ms', description: 'Polling interval in ms', takesValue: true },
|
|
181
|
-
{ name: 'concurrency', description: 'Max parallel handlers', takesValue: true },
|
|
182
|
-
{
|
|
183
|
-
name: 'halt-on-recovery',
|
|
184
|
-
description: 'Refuse to start if a prior crash is detected',
|
|
185
|
-
takesValue: false,
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: 'emit',
|
|
191
|
-
description: 'Emit an event (operator/test path; bypasses schema)',
|
|
192
|
-
args: [
|
|
193
|
-
{ name: 'type', description: 'Event type' },
|
|
194
|
-
{ name: 'payload', description: 'Payload as JSON (optional)' },
|
|
195
|
-
],
|
|
196
|
-
flags: [
|
|
197
|
-
{ name: 'dedup-key', description: 'Idempotency key', takesValue: true },
|
|
198
|
-
{ name: 'emitted-by', description: 'Audit tag', takesValue: true },
|
|
199
|
-
],
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
name: 'reply',
|
|
203
|
-
description: 'Answer one pending interview query by event id (config/secret/ensure)',
|
|
204
|
-
args: [
|
|
205
|
-
{ name: 'event_id', description: 'Query event id from `tail`' },
|
|
206
|
-
{ name: 'value', description: "Answer as JSON (e.g. '\"foo\"', '8080', '[\"a\"]')" },
|
|
207
|
-
],
|
|
208
|
-
flags: [
|
|
209
|
-
{
|
|
210
|
-
name: 'emitted-by',
|
|
211
|
-
description: 'Responder identity for the reply audit trail',
|
|
212
|
-
takesValue: true,
|
|
213
|
-
},
|
|
214
|
-
],
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
name: 'ack',
|
|
218
|
-
description: 'Mark a running delivery succeeded',
|
|
219
|
-
args: [{ name: 'event_id', description: 'Event id from `tail`' }],
|
|
220
|
-
flags: [
|
|
221
|
-
{
|
|
222
|
-
name: 'subscriber',
|
|
223
|
-
description: 'Subscriber id (auto-detected when running under the dispatcher)',
|
|
224
|
-
takesValue: true,
|
|
225
|
-
},
|
|
226
|
-
],
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
name: 'fail',
|
|
230
|
-
description: 'Mark a running delivery failed',
|
|
231
|
-
args: [{ name: 'event_id', description: 'Event id from `tail`' }],
|
|
232
|
-
flags: [
|
|
233
|
-
{ name: 'error', description: 'Failure message', takesValue: true },
|
|
234
|
-
{
|
|
235
|
-
name: 'no-retry',
|
|
236
|
-
description: 'Abandon immediately instead of retrying',
|
|
237
|
-
takesValue: false,
|
|
238
|
-
},
|
|
239
|
-
{ name: 'subscriber', description: 'Subscriber id', takesValue: true },
|
|
240
|
-
],
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
name: 'repair',
|
|
244
|
-
description: 'Run the crash-recovery sweep without starting the dispatcher',
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
name: 'resume',
|
|
248
|
-
description: 'Acknowledge halt-on-recovery (alias for repair)',
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
name: 'respond',
|
|
252
|
-
description: 'Answer config/secret/ensure prompts for a deploy running in another shell',
|
|
253
|
-
flags: [
|
|
254
|
-
{
|
|
255
|
-
name: 'values',
|
|
256
|
-
description:
|
|
257
|
-
'JSON file with config/secrets/ensures map; switches to non-interactive mode',
|
|
258
|
-
takesValue: true,
|
|
259
|
-
valueHint: '_files',
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
name: 'idle-timeout',
|
|
263
|
-
description: 'Exit when bus is quiet for this duration (e.g. 30s, 2m)',
|
|
264
|
-
takesValue: true,
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
name: 'max-duration',
|
|
268
|
-
description: 'Hard ceiling on responder runtime (e.g. 10m)',
|
|
269
|
-
takesValue: true,
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
name: 'emittedBy',
|
|
273
|
-
description: 'Identifier for the emittedBy audit field on replies',
|
|
274
|
-
takesValue: true,
|
|
275
|
-
},
|
|
276
|
-
],
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
name: 'install-daemon',
|
|
280
|
-
description: 'Write a systemd/launchd unit for the dispatcher',
|
|
281
|
-
flags: [
|
|
282
|
-
{
|
|
283
|
-
name: 'celilo-path',
|
|
284
|
-
description: 'Override the celilo binary path (default: Bun.which("celilo"))',
|
|
285
|
-
takesValue: true,
|
|
286
|
-
valueHint: '_files',
|
|
287
|
-
},
|
|
288
|
-
{ name: 'poll-ms', description: 'Polling interval in ms', takesValue: true },
|
|
289
|
-
{ name: 'concurrency', description: 'Max parallel handlers', takesValue: true },
|
|
290
|
-
{
|
|
291
|
-
name: 'system',
|
|
292
|
-
description:
|
|
293
|
-
'System scope: /etc/systemd/system unit or /Library/LaunchDaemons plist, run as the celilo state-dir owner (management-plane shape)',
|
|
294
|
-
takesValue: false,
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
name: 'print',
|
|
298
|
-
description:
|
|
299
|
-
'Render the unit to stdout without writing it (used by the celilo-mgmt role)',
|
|
300
|
-
takesValue: false,
|
|
301
|
-
},
|
|
302
|
-
],
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
name: 'uninstall-daemon',
|
|
306
|
-
description: 'Remove the installed supervisor unit',
|
|
307
|
-
flags: [{ name: 'system', description: 'Target the system-scope unit', takesValue: false }],
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
name: 'show-daemon',
|
|
311
|
-
description: 'Print the currently installed unit file',
|
|
312
|
-
flags: [{ name: 'system', description: 'Target the system-scope unit', takesValue: false }],
|
|
313
|
-
},
|
|
314
|
-
],
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
name: 'dns',
|
|
318
|
-
description: 'View DNS bookkeeping (registrations ledger)',
|
|
319
|
-
subcommands: [
|
|
320
|
-
{
|
|
321
|
-
name: 'registrations',
|
|
322
|
-
description: 'List the DNS registration ledger',
|
|
323
|
-
flags: [
|
|
324
|
-
{
|
|
325
|
-
name: 'provider',
|
|
326
|
-
description: 'Only show registrations owned by one provider module',
|
|
327
|
-
takesValue: true,
|
|
328
|
-
valueHint: 'module_ids',
|
|
329
|
-
},
|
|
330
|
-
],
|
|
331
|
-
},
|
|
332
|
-
],
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
name: 'capability',
|
|
336
|
-
description: 'View registered module capabilities',
|
|
337
|
-
subcommands: [
|
|
338
|
-
{
|
|
339
|
-
name: 'list',
|
|
340
|
-
description: 'List all registered capabilities',
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
name: 'info',
|
|
344
|
-
description: 'Show detailed capability information',
|
|
345
|
-
args: [{ name: 'name', description: 'Capability name', completion: 'capability_names' }],
|
|
346
|
-
},
|
|
347
|
-
],
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
name: 'publish',
|
|
351
|
-
description:
|
|
352
|
-
'Publish workspace packages to npm, bump consumer pins, refresh global install, and ship modules to celilo.computer',
|
|
353
|
-
flags: [
|
|
354
|
-
{
|
|
355
|
-
name: 'dry-run',
|
|
356
|
-
description: 'Preflight report only — no publishing, no file changes',
|
|
357
|
-
takesValue: false,
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
name: 'release-touch',
|
|
361
|
-
description: 'Auto-touch drifted module manifests with a fresh release marker, then exit',
|
|
362
|
-
takesValue: false,
|
|
363
|
-
},
|
|
364
|
-
{
|
|
365
|
-
name: 'allow-stale',
|
|
366
|
-
description: 'Bypass workspace and module stale-version safeguards',
|
|
367
|
-
takesValue: false,
|
|
368
|
-
},
|
|
369
|
-
{
|
|
370
|
-
name: 'yes',
|
|
371
|
-
description: 'Auto-confirm every prompt (also -y). Does NOT bypass safety gates.',
|
|
372
|
-
takesValue: false,
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
name: 'alpha',
|
|
376
|
-
description: 'Publish X.Y.Z-alpha.N to npm @alpha dist-tag (consumer-first iteration mode)',
|
|
377
|
-
takesValue: false,
|
|
378
|
-
},
|
|
379
|
-
{
|
|
380
|
-
name: 'track-alpha',
|
|
381
|
-
description:
|
|
382
|
-
'Force-pin just-published alphas into the bun global install (requires --alpha)',
|
|
383
|
-
takesValue: false,
|
|
384
|
-
},
|
|
385
|
-
{
|
|
386
|
-
name: 'alpha-modules',
|
|
387
|
-
description:
|
|
388
|
-
'Also publish module +N revisions in alpha mode (requires --alpha; default skips Phase 4)',
|
|
389
|
-
takesValue: false,
|
|
390
|
-
},
|
|
391
|
-
{
|
|
392
|
-
name: 'promote',
|
|
393
|
-
description:
|
|
394
|
-
'Graduate a named alpha to its base X.Y.Z (e.g. --promote @celilo/e2e@0.7.14-alpha.3)',
|
|
395
|
-
takesValue: true,
|
|
396
|
-
},
|
|
397
|
-
{
|
|
398
|
-
name: 'skip-changesets',
|
|
399
|
-
description:
|
|
400
|
-
'Skip the pending-changesets prompt; publish current package.json versions as-is',
|
|
401
|
-
takesValue: false,
|
|
402
|
-
},
|
|
403
|
-
],
|
|
404
|
-
},
|
|
405
|
-
{
|
|
406
|
-
name: 'module',
|
|
407
|
-
description: 'Manage modules (import, generate, configure)',
|
|
408
|
-
subcommands: [
|
|
409
|
-
{
|
|
410
|
-
name: 'import',
|
|
411
|
-
description:
|
|
412
|
-
'Import a module from the registry (bare name) or from a local path (./, /, ~, or *.netapp)',
|
|
413
|
-
args: [
|
|
414
|
-
{
|
|
415
|
-
name: 'name-or-path',
|
|
416
|
-
description: 'Module name (registry) or filesystem path',
|
|
417
|
-
completion: 'directories',
|
|
418
|
-
},
|
|
419
|
-
],
|
|
420
|
-
flags: [
|
|
421
|
-
{
|
|
422
|
-
name: 'registry',
|
|
423
|
-
description: 'Registry URL (overrides default celilo.computer)',
|
|
424
|
-
takesValue: true,
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
name: 'target',
|
|
428
|
-
description: 'Target directory',
|
|
429
|
-
takesValue: true,
|
|
430
|
-
valueHint: '_directories',
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
name: 'auto-generate-secrets',
|
|
434
|
-
description: 'Auto-generate capability secrets',
|
|
435
|
-
takesValue: false,
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
name: 'skip-verify',
|
|
439
|
-
description: 'Skip package signature verification',
|
|
440
|
-
takesValue: false,
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
name: 'accept-aspects',
|
|
444
|
-
description:
|
|
445
|
-
'Auto-approve any base-module aspect declared by the imported module (non-interactive contexts; CI; e2e)',
|
|
446
|
-
takesValue: false,
|
|
447
|
-
},
|
|
448
|
-
],
|
|
449
|
-
},
|
|
450
|
-
{ name: 'list', description: 'List all installed modules' },
|
|
451
|
-
{
|
|
452
|
-
name: 'remove',
|
|
453
|
-
description: 'Remove a module and its data',
|
|
454
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
455
|
-
flags: [
|
|
456
|
-
{
|
|
457
|
-
name: 'force',
|
|
458
|
-
description: 'Skip confirmation for infrastructure destruction',
|
|
459
|
-
takesValue: false,
|
|
460
|
-
},
|
|
461
|
-
],
|
|
462
|
-
},
|
|
463
|
-
{
|
|
464
|
-
name: 'update',
|
|
465
|
-
description:
|
|
466
|
-
'Update modules. No args = sweep registry (auto-apply non-breaking, prompt for breaking). With args = update from local path(s).',
|
|
467
|
-
args: [
|
|
468
|
-
{
|
|
469
|
-
name: 'path',
|
|
470
|
-
description: 'Path to updated module source (omit to sweep registry)',
|
|
471
|
-
completion: 'directories',
|
|
472
|
-
variadic: true,
|
|
473
|
-
},
|
|
474
|
-
],
|
|
475
|
-
flags: [
|
|
476
|
-
{
|
|
477
|
-
name: 'skip-verify',
|
|
478
|
-
description: 'Skip package signature verification',
|
|
479
|
-
takesValue: false,
|
|
480
|
-
},
|
|
481
|
-
],
|
|
482
|
-
},
|
|
483
|
-
{
|
|
484
|
-
name: 'upgrade',
|
|
485
|
-
description:
|
|
486
|
-
'Upgrade a module to its latest registry version: update → backup (posture-gated) → deploy → verify. No id = the CD poll: upgrade every auto_upgrade module with a newer version.',
|
|
487
|
-
args: [
|
|
488
|
-
{
|
|
489
|
-
name: 'id',
|
|
490
|
-
description: 'Module ID (omit to poll all auto_upgrade modules)',
|
|
491
|
-
completion: 'module_ids',
|
|
492
|
-
},
|
|
493
|
-
],
|
|
494
|
-
flags: [
|
|
495
|
-
{
|
|
496
|
-
name: 'registry',
|
|
497
|
-
description: 'Registry URL (defaults to configured registry)',
|
|
498
|
-
takesValue: true,
|
|
499
|
-
},
|
|
500
|
-
],
|
|
501
|
-
},
|
|
502
|
-
{
|
|
503
|
-
name: 'verify',
|
|
504
|
-
description: 'Verify module integrity (signature + checksums)',
|
|
505
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
506
|
-
},
|
|
507
|
-
{
|
|
508
|
-
// Deprecation alias for `module verify`. Removed after one
|
|
509
|
-
// release cycle. See CELILO_UPDATE D11.
|
|
510
|
-
name: 'audit',
|
|
511
|
-
description: 'DEPRECATED — use `module verify` instead',
|
|
512
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
513
|
-
},
|
|
514
|
-
{
|
|
515
|
-
name: 'config',
|
|
516
|
-
description: 'Get or set module configuration',
|
|
517
|
-
subcommands: [
|
|
518
|
-
{
|
|
519
|
-
name: 'set',
|
|
520
|
-
description: 'Set configuration value',
|
|
521
|
-
args: [
|
|
522
|
-
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
523
|
-
{ name: 'key', description: 'Config key', completion: 'config_keys' },
|
|
524
|
-
{ name: 'value', description: 'Config value' },
|
|
525
|
-
],
|
|
526
|
-
},
|
|
527
|
-
{
|
|
528
|
-
name: 'get',
|
|
529
|
-
description: 'Get configuration value',
|
|
530
|
-
args: [
|
|
531
|
-
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
532
|
-
{ name: 'key', description: 'Config key', completion: 'config_keys' },
|
|
533
|
-
],
|
|
534
|
-
},
|
|
535
|
-
],
|
|
536
|
-
},
|
|
537
|
-
{
|
|
538
|
-
name: 'secret',
|
|
539
|
-
description: 'Manage module secrets',
|
|
540
|
-
subcommands: [
|
|
541
|
-
{
|
|
542
|
-
name: 'set',
|
|
543
|
-
description: 'Set encrypted secret',
|
|
544
|
-
args: [
|
|
545
|
-
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
546
|
-
{ name: 'key', description: 'Secret name' },
|
|
547
|
-
{ name: 'value', description: 'Secret value' },
|
|
548
|
-
],
|
|
549
|
-
},
|
|
550
|
-
{
|
|
551
|
-
name: 'list',
|
|
552
|
-
description: 'List module secrets',
|
|
553
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
554
|
-
},
|
|
555
|
-
],
|
|
556
|
-
},
|
|
557
|
-
{
|
|
558
|
-
name: 'show-config',
|
|
559
|
-
description: 'Show all configuration including derived values',
|
|
560
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
561
|
-
},
|
|
562
|
-
{
|
|
563
|
-
name: 'show-zone',
|
|
564
|
-
description: 'Show module network zone and config',
|
|
565
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
566
|
-
},
|
|
567
|
-
{
|
|
568
|
-
name: 'build',
|
|
569
|
-
description: 'Execute module build scripts',
|
|
570
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
571
|
-
},
|
|
572
|
-
{
|
|
573
|
-
name: 'generate',
|
|
574
|
-
description: 'Generate infrastructure code',
|
|
575
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
576
|
-
flags: [
|
|
577
|
-
{
|
|
578
|
-
name: 'output',
|
|
579
|
-
description: 'Output directory',
|
|
580
|
-
takesValue: true,
|
|
581
|
-
valueHint: '_directories',
|
|
582
|
-
},
|
|
583
|
-
],
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
name: 'deploy',
|
|
587
|
-
description: 'Deploy module to infrastructure',
|
|
588
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
589
|
-
flags: [
|
|
590
|
-
{ name: 'debug', description: 'Enable debug mode', takesValue: false },
|
|
591
|
-
{
|
|
592
|
-
name: 'preflight',
|
|
593
|
-
description: 'Run pre-flight validation only (no deployment)',
|
|
594
|
-
takesValue: false,
|
|
595
|
-
},
|
|
596
|
-
{
|
|
597
|
-
name: 'verbose',
|
|
598
|
-
description:
|
|
599
|
-
'Keep all sub-events visible (no collapse-on-success); useful for debugging slow steps',
|
|
600
|
-
takesValue: false,
|
|
601
|
-
},
|
|
602
|
-
{
|
|
603
|
-
name: 'stop-after-interview',
|
|
604
|
-
description:
|
|
605
|
-
'Exit cleanly after the initial config + secrets interview (no terraform/ansible/hooks). Manual validation of the bus-mediated interview path.',
|
|
606
|
-
takesValue: false,
|
|
607
|
-
},
|
|
608
|
-
],
|
|
609
|
-
},
|
|
610
|
-
{
|
|
611
|
-
name: 'validate',
|
|
612
|
-
description: 'Pre-flight check: validate module is ready for deployment',
|
|
613
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
614
|
-
},
|
|
615
|
-
{
|
|
616
|
-
name: 'status',
|
|
617
|
-
description: 'Show detailed module status',
|
|
618
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
619
|
-
},
|
|
620
|
-
{
|
|
621
|
-
name: 'logs',
|
|
622
|
-
description: 'Show deploy logs for a module',
|
|
623
|
-
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
624
|
-
flags: [
|
|
625
|
-
{ name: 'tail', description: 'Show last N lines', takesValue: true },
|
|
626
|
-
{ name: 'last', description: 'Show only the most recent deploy run', takesValue: false },
|
|
627
|
-
],
|
|
628
|
-
},
|
|
629
|
-
{
|
|
630
|
-
name: 'health',
|
|
631
|
-
description: 'Run health checks on deployed modules',
|
|
632
|
-
args: [{ name: 'id', description: 'Module ID (optional)', completion: 'module_ids' }],
|
|
633
|
-
flags: [
|
|
634
|
-
{ name: 'json', description: 'Machine-readable JSON output', takesValue: false },
|
|
635
|
-
{ name: 'debug', description: 'Show detailed check output', takesValue: false },
|
|
636
|
-
],
|
|
637
|
-
},
|
|
638
|
-
{
|
|
639
|
-
name: 'run-hook',
|
|
640
|
-
description: 'Run a module hook (e.g., retry on_install after fixing an issue)',
|
|
641
|
-
args: [
|
|
642
|
-
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
643
|
-
{ name: 'hook-name', description: 'Hook name (e.g., on_install, health_check)' },
|
|
644
|
-
],
|
|
645
|
-
flags: [
|
|
646
|
-
{
|
|
647
|
-
name: 'debug',
|
|
648
|
-
description: 'Run with visible browser (Playwright hooks)',
|
|
649
|
-
takesValue: false,
|
|
650
|
-
},
|
|
651
|
-
],
|
|
652
|
-
},
|
|
653
|
-
{
|
|
654
|
-
name: 'search',
|
|
655
|
-
description: 'Search the module registry',
|
|
656
|
-
args: [{ name: 'query', description: 'Search query (optional)' }],
|
|
657
|
-
flags: [
|
|
658
|
-
{ name: 'registry', description: 'Registry URL', takesValue: true },
|
|
659
|
-
{ name: 'limit', description: 'Max results', takesValue: true },
|
|
660
|
-
],
|
|
661
|
-
},
|
|
662
|
-
{
|
|
663
|
-
name: 'publish',
|
|
664
|
-
description: 'Build and publish one or more modules to the registry',
|
|
665
|
-
args: [
|
|
666
|
-
{
|
|
667
|
-
name: 'module-dir...',
|
|
668
|
-
description: 'One or more module directories (shell-glob ./modules/* works)',
|
|
669
|
-
completion: 'directories',
|
|
670
|
-
},
|
|
671
|
-
],
|
|
672
|
-
flags: [
|
|
673
|
-
{ name: 'token', description: 'Publish token', takesValue: true },
|
|
674
|
-
{ name: 'registry', description: 'Registry URL', takesValue: true },
|
|
675
|
-
{ name: 'revision', description: 'Package revision number', takesValue: true },
|
|
676
|
-
{
|
|
677
|
-
name: 'message',
|
|
678
|
-
description: 'One-line release note stamped into release.json',
|
|
679
|
-
takesValue: true,
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
name: 'allow-dirty',
|
|
683
|
-
description: 'Bypass the clean-working-tree check (emergency publish)',
|
|
684
|
-
takesValue: false,
|
|
685
|
-
},
|
|
686
|
-
{
|
|
687
|
-
name: 'allow-stale',
|
|
688
|
-
description: 'Skip the manifest-vs-src stale-check (use sparingly)',
|
|
689
|
-
takesValue: false,
|
|
690
|
-
},
|
|
691
|
-
],
|
|
692
|
-
},
|
|
693
|
-
{
|
|
694
|
-
name: 'backup',
|
|
695
|
-
description: "Create a backup of a module's data (invokes its on_backup hook)",
|
|
696
|
-
args: [
|
|
697
|
-
{
|
|
698
|
-
name: 'module-id',
|
|
699
|
-
description: 'Module ID (optional, backs up all if omitted)',
|
|
700
|
-
completion: 'module_ids',
|
|
701
|
-
},
|
|
702
|
-
],
|
|
703
|
-
flags: [
|
|
704
|
-
{ name: 'force', description: 'Ignore schedule, back up now', takesValue: false },
|
|
705
|
-
{
|
|
706
|
-
name: 'now',
|
|
707
|
-
description: 'Ignore schedule, back up now (alias for --force)',
|
|
708
|
-
takesValue: false,
|
|
709
|
-
},
|
|
710
|
-
{ name: 'storage', description: 'Storage destination ID', takesValue: true },
|
|
711
|
-
{
|
|
712
|
-
name: 'no-interactive',
|
|
713
|
-
description: 'Non-interactive mode (for cron)',
|
|
714
|
-
takesValue: false,
|
|
715
|
-
},
|
|
716
|
-
],
|
|
717
|
-
},
|
|
718
|
-
],
|
|
719
|
-
},
|
|
720
|
-
{
|
|
721
|
-
name: 'service',
|
|
722
|
-
description: 'Manage container services (Proxmox, DigitalOcean)',
|
|
723
|
-
subcommands: [
|
|
724
|
-
{
|
|
725
|
-
name: 'add',
|
|
726
|
-
description: 'Add a new container service',
|
|
727
|
-
subcommands: [
|
|
728
|
-
{
|
|
729
|
-
name: 'proxmox',
|
|
730
|
-
description: 'Add Proxmox container service',
|
|
731
|
-
flags: [
|
|
732
|
-
{ name: 'api-url', description: 'Proxmox API URL', takesValue: true },
|
|
733
|
-
{
|
|
734
|
-
name: 'api-token-id',
|
|
735
|
-
description: 'API token ID (or $PROXMOX_API_TOKEN_ID)',
|
|
736
|
-
takesValue: true,
|
|
737
|
-
},
|
|
738
|
-
{
|
|
739
|
-
name: 'api-token-secret',
|
|
740
|
-
description: 'API token secret (or $PROXMOX_API_TOKEN_SECRET)',
|
|
741
|
-
takesValue: true,
|
|
742
|
-
},
|
|
743
|
-
{ name: 'node', description: 'Target node', takesValue: true },
|
|
744
|
-
{
|
|
745
|
-
name: 'zone',
|
|
746
|
-
description: 'Network zone',
|
|
747
|
-
takesValue: true,
|
|
748
|
-
valueHint: 'dmz app secure internal',
|
|
749
|
-
},
|
|
750
|
-
{ name: 'name', description: 'Service name', takesValue: true },
|
|
751
|
-
],
|
|
752
|
-
},
|
|
753
|
-
{
|
|
754
|
-
name: 'digitalocean',
|
|
755
|
-
description: 'Add DigitalOcean container service',
|
|
756
|
-
flags: [
|
|
757
|
-
{
|
|
758
|
-
name: 'api-token',
|
|
759
|
-
description: 'DigitalOcean API token (or $DIGITALOCEAN_API_TOKEN)',
|
|
760
|
-
takesValue: true,
|
|
761
|
-
},
|
|
762
|
-
{ name: 'region', description: 'Region', takesValue: true },
|
|
763
|
-
{
|
|
764
|
-
name: 'zone',
|
|
765
|
-
description: 'Network zone',
|
|
766
|
-
takesValue: true,
|
|
767
|
-
valueHint: 'dmz app secure external',
|
|
768
|
-
},
|
|
769
|
-
{ name: 'name', description: 'Service name', takesValue: true },
|
|
770
|
-
],
|
|
771
|
-
},
|
|
772
|
-
],
|
|
773
|
-
},
|
|
774
|
-
{
|
|
775
|
-
name: 'list',
|
|
776
|
-
description: 'List all container services',
|
|
777
|
-
flags: [
|
|
778
|
-
{
|
|
779
|
-
name: 'zone',
|
|
780
|
-
description: 'Filter by zone',
|
|
781
|
-
takesValue: true,
|
|
782
|
-
valueHint: 'dmz app secure internal external',
|
|
783
|
-
},
|
|
784
|
-
],
|
|
785
|
-
},
|
|
786
|
-
{
|
|
787
|
-
name: 'verify',
|
|
788
|
-
description: 'Re-verify a container service connection',
|
|
789
|
-
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
790
|
-
},
|
|
791
|
-
{
|
|
792
|
-
name: 'remove',
|
|
793
|
-
description: 'Remove a container service',
|
|
794
|
-
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
795
|
-
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
796
|
-
},
|
|
797
|
-
{
|
|
798
|
-
name: 'reconfigure',
|
|
799
|
-
description: 'Re-run configuration interview for a service',
|
|
800
|
-
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
801
|
-
},
|
|
802
|
-
{
|
|
803
|
-
name: 'config',
|
|
804
|
-
description: 'Get or set service configuration',
|
|
805
|
-
subcommands: [
|
|
806
|
-
{
|
|
807
|
-
name: 'get',
|
|
808
|
-
description: 'Get service configuration',
|
|
809
|
-
args: [
|
|
810
|
-
{ name: 'service-id', description: 'Service ID', completion: 'service_ids' },
|
|
811
|
-
{ name: 'key', description: 'Config key' },
|
|
812
|
-
],
|
|
813
|
-
},
|
|
814
|
-
{
|
|
815
|
-
name: 'set',
|
|
816
|
-
description: 'Set service configuration',
|
|
817
|
-
args: [
|
|
818
|
-
{ name: 'service-id', description: 'Service ID', completion: 'service_ids' },
|
|
819
|
-
{ name: 'key', description: 'Config key' },
|
|
820
|
-
{ name: 'value', description: 'Config value' },
|
|
821
|
-
],
|
|
822
|
-
},
|
|
823
|
-
],
|
|
824
|
-
},
|
|
825
|
-
],
|
|
826
|
-
},
|
|
827
|
-
{
|
|
828
|
-
name: 'machine',
|
|
829
|
-
description: 'Manage existing machines (Raspberry Pi, VPS, bare metal)',
|
|
830
|
-
subcommands: [
|
|
831
|
-
{
|
|
832
|
-
name: 'add',
|
|
833
|
-
description: 'Add an existing machine to the pool',
|
|
834
|
-
flags: [
|
|
835
|
-
{ name: 'ip', description: 'Machine IP address', takesValue: true },
|
|
836
|
-
{ name: 'ssh-user', description: 'SSH username', takesValue: true },
|
|
837
|
-
{
|
|
838
|
-
name: 'ssh-key-file',
|
|
839
|
-
description: 'SSH private key file',
|
|
840
|
-
takesValue: true,
|
|
841
|
-
valueHint: '_files',
|
|
842
|
-
},
|
|
843
|
-
{
|
|
844
|
-
name: 'zone',
|
|
845
|
-
description: 'Network zone',
|
|
846
|
-
takesValue: true,
|
|
847
|
-
valueHint: 'dmz app secure internal external',
|
|
848
|
-
},
|
|
849
|
-
{ name: 'name', description: 'Machine name', takesValue: true },
|
|
850
|
-
{
|
|
851
|
-
name: 'earmark',
|
|
852
|
-
description: 'Earmark machine for a specific module',
|
|
853
|
-
takesValue: true,
|
|
854
|
-
},
|
|
855
|
-
{
|
|
856
|
-
name: 'local',
|
|
857
|
-
description:
|
|
858
|
-
'This box itself — deploy over Ansible local connection (no SSH/key). Implied by ip 127.0.0.1.',
|
|
859
|
-
takesValue: false,
|
|
860
|
-
},
|
|
861
|
-
],
|
|
862
|
-
},
|
|
863
|
-
{
|
|
864
|
-
name: 'list',
|
|
865
|
-
description: 'List all machines',
|
|
866
|
-
flags: [
|
|
867
|
-
{
|
|
868
|
-
name: 'zone',
|
|
869
|
-
description: 'Filter by zone',
|
|
870
|
-
takesValue: true,
|
|
871
|
-
valueHint: 'dmz app secure internal external',
|
|
872
|
-
},
|
|
873
|
-
],
|
|
874
|
-
},
|
|
875
|
-
{
|
|
876
|
-
name: 'status',
|
|
877
|
-
description: 'Show machine status and assigned modules',
|
|
878
|
-
args: [
|
|
879
|
-
{ name: 'hostname', description: 'Machine hostname', completion: 'machine_hostnames' },
|
|
880
|
-
],
|
|
881
|
-
},
|
|
882
|
-
{
|
|
883
|
-
name: 'remove',
|
|
884
|
-
description: 'Remove a machine from the pool',
|
|
885
|
-
args: [
|
|
886
|
-
{ name: 'hostname', description: 'Machine hostname', completion: 'machine_hostnames' },
|
|
887
|
-
],
|
|
888
|
-
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
889
|
-
},
|
|
890
|
-
{
|
|
891
|
-
name: 'earmark',
|
|
892
|
-
description: 'Earmark a machine for a specific module',
|
|
893
|
-
args: [
|
|
894
|
-
{
|
|
895
|
-
name: 'hostname',
|
|
896
|
-
description: 'Machine hostname or IP',
|
|
897
|
-
completion: 'machine_hostnames',
|
|
898
|
-
},
|
|
899
|
-
{ name: 'module-id', description: 'Module ID to earmark for', completion: 'module_ids' },
|
|
900
|
-
],
|
|
901
|
-
flags: [{ name: 'clear', description: 'Clear the earmark', takesValue: false }],
|
|
902
|
-
},
|
|
903
|
-
],
|
|
904
|
-
},
|
|
905
|
-
{
|
|
906
|
-
name: 'system',
|
|
907
|
-
description: 'System configuration and initialization',
|
|
908
|
-
subcommands: [
|
|
909
|
-
{
|
|
910
|
-
name: 'init',
|
|
911
|
-
description: 'Initialize system configuration',
|
|
912
|
-
flags: [
|
|
913
|
-
{
|
|
914
|
-
name: 'accept-defaults',
|
|
915
|
-
description: 'Use default values without prompting',
|
|
916
|
-
takesValue: false,
|
|
917
|
-
},
|
|
918
|
-
],
|
|
919
|
-
},
|
|
920
|
-
{
|
|
921
|
-
name: 'apply-config',
|
|
922
|
-
description:
|
|
923
|
-
'Headless write of <key=value> overrides to systemConfig (for hooks / automation; no prompts, no guidance)',
|
|
924
|
-
args: [
|
|
925
|
-
{
|
|
926
|
-
name: 'overrides',
|
|
927
|
-
description: 'Config overrides as <key=value> positionals',
|
|
928
|
-
variadic: true,
|
|
929
|
-
},
|
|
930
|
-
],
|
|
931
|
-
flags: [
|
|
932
|
-
{
|
|
933
|
-
name: 'from-stdin',
|
|
934
|
-
description: 'Read a JSON map of overrides from stdin instead of positional args',
|
|
935
|
-
takesValue: false,
|
|
936
|
-
},
|
|
937
|
-
],
|
|
938
|
-
},
|
|
939
|
-
{
|
|
940
|
-
name: 'config',
|
|
941
|
-
description: 'Get or set system configuration',
|
|
942
|
-
subcommands: [
|
|
943
|
-
{
|
|
944
|
-
name: 'set',
|
|
945
|
-
description: 'Set configuration value',
|
|
946
|
-
args: [
|
|
947
|
-
{ name: 'key', description: 'Config key', completion: 'system_config_keys' },
|
|
948
|
-
{ name: 'value', description: 'Config value' },
|
|
949
|
-
],
|
|
950
|
-
},
|
|
951
|
-
{
|
|
952
|
-
name: 'get',
|
|
953
|
-
description: 'Get configuration value',
|
|
954
|
-
args: [{ name: 'key', description: 'Config key', completion: 'system_config_keys' }],
|
|
955
|
-
},
|
|
956
|
-
],
|
|
957
|
-
},
|
|
958
|
-
{
|
|
959
|
-
name: 'secret',
|
|
960
|
-
description: 'Get or set system secrets',
|
|
961
|
-
subcommands: [
|
|
962
|
-
{
|
|
963
|
-
name: 'set',
|
|
964
|
-
description: 'Set secret value',
|
|
965
|
-
args: [
|
|
966
|
-
{ name: 'key', description: 'Secret key', completion: 'system_secret_keys' },
|
|
967
|
-
{ name: 'value', description: 'Secret value' },
|
|
968
|
-
],
|
|
969
|
-
},
|
|
970
|
-
{
|
|
971
|
-
name: 'get',
|
|
972
|
-
description: 'Get secret value',
|
|
973
|
-
args: [{ name: 'key', description: 'Secret key', completion: 'system_secret_keys' }],
|
|
974
|
-
},
|
|
975
|
-
],
|
|
976
|
-
},
|
|
977
|
-
{ name: 'vault-password', description: 'Display Ansible vault password' },
|
|
978
|
-
{
|
|
979
|
-
name: 'audit',
|
|
980
|
-
description: 'Report system-wide drift (no mutations)',
|
|
981
|
-
flags: [
|
|
982
|
-
{
|
|
983
|
-
name: 'json',
|
|
984
|
-
description: 'Output a stable JSON schema instead of the human-readable table',
|
|
985
|
-
takesValue: false,
|
|
986
|
-
},
|
|
987
|
-
{
|
|
988
|
-
name: 'tui',
|
|
989
|
-
description: 'Force the interactive TUI (default when stdout is a terminal)',
|
|
990
|
-
takesValue: false,
|
|
991
|
-
},
|
|
992
|
-
{
|
|
993
|
-
name: 'no-tui',
|
|
994
|
-
description: 'Force the static text report even when stdout is a terminal',
|
|
995
|
-
takesValue: false,
|
|
996
|
-
},
|
|
997
|
-
{
|
|
998
|
-
name: 'theme',
|
|
999
|
-
description: 'TUI color theme (dark|light); defaults to dark',
|
|
1000
|
-
takesValue: true,
|
|
1001
|
-
},
|
|
1002
|
-
],
|
|
1003
|
-
},
|
|
1004
|
-
{
|
|
1005
|
-
name: 'update',
|
|
1006
|
-
description: 'Bring the system to the audit-determined READY state',
|
|
1007
|
-
flags: [
|
|
1008
|
-
{
|
|
1009
|
-
name: 'module',
|
|
1010
|
-
description: 'Restrict the run to a single module',
|
|
1011
|
-
takesValue: true,
|
|
1012
|
-
},
|
|
1013
|
-
{
|
|
1014
|
-
name: 'dry-run',
|
|
1015
|
-
description: 'Print the plan without executing',
|
|
1016
|
-
takesValue: false,
|
|
1017
|
-
},
|
|
1018
|
-
{
|
|
1019
|
-
name: 'no-backup',
|
|
1020
|
-
description: 'Skip pre-update backups (requires explicit acknowledgement)',
|
|
1021
|
-
takesValue: false,
|
|
1022
|
-
},
|
|
1023
|
-
{
|
|
1024
|
-
name: 'allow-destructive',
|
|
1025
|
-
description: 'Allow destructive terraform plans through',
|
|
1026
|
-
takesValue: false,
|
|
1027
|
-
},
|
|
1028
|
-
{
|
|
1029
|
-
name: 'json',
|
|
1030
|
-
description: 'Output a stable JSON schema instead of the human-readable summary',
|
|
1031
|
-
takesValue: false,
|
|
1032
|
-
},
|
|
1033
|
-
],
|
|
1034
|
-
},
|
|
1035
|
-
{
|
|
1036
|
-
name: 'migrate',
|
|
1037
|
-
description: 'Apply pending database migrations (idempotent; safe to re-run)',
|
|
1038
|
-
},
|
|
1039
|
-
{
|
|
1040
|
-
name: 'doctor',
|
|
1041
|
-
description:
|
|
1042
|
-
'Diagnose system prerequisites, @celilo/* version drift, and (on a management plane) fleet-runtime drift',
|
|
1043
|
-
flags: [
|
|
1044
|
-
{
|
|
1045
|
-
name: 'fix',
|
|
1046
|
-
description:
|
|
1047
|
-
'Repair the auto-fixable findings: `bun link` drifted @celilo/* packages and resync bus subscribers',
|
|
1048
|
-
takesValue: false,
|
|
1049
|
-
},
|
|
1050
|
-
{
|
|
1051
|
-
name: 'fleet',
|
|
1052
|
-
description:
|
|
1053
|
-
'Force the fleet-runtime section (dispatcher, subscribers, capability chains) even without a celilo DB',
|
|
1054
|
-
takesValue: false,
|
|
1055
|
-
},
|
|
1056
|
-
],
|
|
1057
|
-
},
|
|
1058
|
-
],
|
|
1059
|
-
},
|
|
1060
|
-
{
|
|
1061
|
-
name: 'package',
|
|
1062
|
-
description: 'Create module packages (.netapp files)',
|
|
1063
|
-
args: [
|
|
1064
|
-
{
|
|
1065
|
-
name: 'source-directory',
|
|
1066
|
-
description: 'Module source directory',
|
|
1067
|
-
completion: 'directories',
|
|
1068
|
-
},
|
|
1069
|
-
],
|
|
1070
|
-
flags: [
|
|
1071
|
-
{ name: 'output', description: 'Output file path', takesValue: true, valueHint: '_files' },
|
|
1072
|
-
],
|
|
1073
|
-
},
|
|
1074
|
-
{
|
|
1075
|
-
name: 'ipam',
|
|
1076
|
-
description: 'IP address management (allocate, reserve, release)',
|
|
1077
|
-
subcommands: [
|
|
1078
|
-
{ name: 'show', description: 'Show comprehensive IPAM summary' },
|
|
1079
|
-
{ name: 'list-allocations', description: 'Show all module IPAM allocations' },
|
|
1080
|
-
{
|
|
1081
|
-
name: 'vmid',
|
|
1082
|
-
description: 'Manage VMID reservations',
|
|
1083
|
-
subcommands: [
|
|
1084
|
-
{
|
|
1085
|
-
name: 'reserve',
|
|
1086
|
-
description: 'Reserve VMID or range',
|
|
1087
|
-
args: [
|
|
1088
|
-
{ name: 'vmid-or-range', description: 'VMID or range (e.g., 2100 or 2100-2110)' },
|
|
1089
|
-
],
|
|
1090
|
-
flags: [{ name: 'reason', description: 'Reservation reason', takesValue: true }],
|
|
1091
|
-
},
|
|
1092
|
-
{
|
|
1093
|
-
name: 'unreserve',
|
|
1094
|
-
description: 'Unreserve VMID or range',
|
|
1095
|
-
args: [{ name: 'vmid-or-range', description: 'VMID or range' }],
|
|
1096
|
-
},
|
|
1097
|
-
{ name: 'list-reservations', description: 'List all VMID reservations' },
|
|
1098
|
-
],
|
|
1099
|
-
},
|
|
1100
|
-
{
|
|
1101
|
-
name: 'ip',
|
|
1102
|
-
description: 'Manage IP address exclusions',
|
|
1103
|
-
subcommands: [
|
|
1104
|
-
{
|
|
1105
|
-
name: 'exclude',
|
|
1106
|
-
description: 'Exclude IP address or range from IPAM allocation',
|
|
1107
|
-
args: [{ name: 'ip-or-range', description: 'IP or range' }],
|
|
1108
|
-
flags: [
|
|
1109
|
-
{
|
|
1110
|
-
name: 'zone',
|
|
1111
|
-
description: 'Network zone (auto-detected from IP)',
|
|
1112
|
-
takesValue: true,
|
|
1113
|
-
valueHint: 'internal dmz app secure',
|
|
1114
|
-
},
|
|
1115
|
-
{ name: 'reason', description: 'Exclusion reason', takesValue: true },
|
|
1116
|
-
],
|
|
1117
|
-
},
|
|
1118
|
-
{
|
|
1119
|
-
name: 'include',
|
|
1120
|
-
description: 'Remove IP exclusion (allow IPAM to allocate again)',
|
|
1121
|
-
args: [{ name: 'ip-or-range', description: 'IP or range' }],
|
|
1122
|
-
flags: [
|
|
1123
|
-
{
|
|
1124
|
-
name: 'zone',
|
|
1125
|
-
description: 'Network zone (auto-detected from IP)',
|
|
1126
|
-
takesValue: true,
|
|
1127
|
-
valueHint: 'internal dmz app secure',
|
|
1128
|
-
},
|
|
1129
|
-
],
|
|
1130
|
-
},
|
|
1131
|
-
{ name: 'list-exclusions', description: 'List all IP exclusions' },
|
|
1132
|
-
],
|
|
1133
|
-
},
|
|
1134
|
-
],
|
|
1135
|
-
},
|
|
1136
|
-
{
|
|
1137
|
-
name: 'proxmox',
|
|
1138
|
-
description: 'Proxmox cluster introspection (nodes, capacity, instance sizing)',
|
|
1139
|
-
subcommands: [
|
|
1140
|
-
{
|
|
1141
|
-
name: 'node',
|
|
1142
|
-
description: 'Proxmox node operations',
|
|
1143
|
-
subcommands: [
|
|
1144
|
-
{
|
|
1145
|
-
name: 'list',
|
|
1146
|
-
description: 'List cluster nodes with live capacity (RAM/CPU/disk)',
|
|
1147
|
-
args: [{ name: 'service-id', description: 'Proxmox service (optional if only one)' }],
|
|
1148
|
-
},
|
|
1149
|
-
],
|
|
1150
|
-
},
|
|
1151
|
-
{
|
|
1152
|
-
name: 'vm',
|
|
1153
|
-
description: 'celilo-provisioned VM sizing',
|
|
1154
|
-
subcommands: [
|
|
1155
|
-
{
|
|
1156
|
-
name: 'list',
|
|
1157
|
-
description: 'List celilo VMs with desired vs actual size',
|
|
1158
|
-
args: [{ name: 'service-id', description: 'Proxmox service (optional if only one)' }],
|
|
1159
|
-
},
|
|
1160
|
-
{
|
|
1161
|
-
name: 'resize',
|
|
1162
|
-
description: 'Resize a celilo VM (canonical size + reconcile)',
|
|
1163
|
-
args: [{ name: 'name', description: 'Instance name (module/hostname)' }],
|
|
1164
|
-
flags: [
|
|
1165
|
-
{ name: 'memory', description: 'New RAM in MB', takesValue: true },
|
|
1166
|
-
{ name: 'cpu', description: 'New vCPU count', takesValue: true },
|
|
1167
|
-
{ name: 'force', description: 'Override the node capacity check', takesValue: false },
|
|
1168
|
-
{
|
|
1169
|
-
name: 'allow-reboot',
|
|
1170
|
-
description: 'Approve the stop/start a resize needs',
|
|
1171
|
-
takesValue: false,
|
|
1172
|
-
},
|
|
1173
|
-
{ name: 'skip-backup', description: 'Skip the pre-resize backup', takesValue: false },
|
|
1174
|
-
{
|
|
1175
|
-
name: 'yes',
|
|
1176
|
-
description: 'Auto-approve reboot + backup (headless)',
|
|
1177
|
-
takesValue: false,
|
|
1178
|
-
},
|
|
1179
|
-
],
|
|
1180
|
-
},
|
|
1181
|
-
],
|
|
1182
|
-
},
|
|
1183
|
-
{
|
|
1184
|
-
name: 'ct',
|
|
1185
|
-
description: 'celilo-provisioned container (LXC) sizing',
|
|
1186
|
-
subcommands: [
|
|
1187
|
-
{
|
|
1188
|
-
name: 'list',
|
|
1189
|
-
description: 'List celilo containers with desired vs actual size',
|
|
1190
|
-
args: [{ name: 'service-id', description: 'Proxmox service (optional if only one)' }],
|
|
1191
|
-
},
|
|
1192
|
-
{
|
|
1193
|
-
name: 'resize',
|
|
1194
|
-
description: 'Resize a celilo container (canonical size + reconcile)',
|
|
1195
|
-
args: [{ name: 'name', description: 'Instance name (module/hostname)' }],
|
|
1196
|
-
flags: [
|
|
1197
|
-
{ name: 'memory', description: 'New RAM in MB', takesValue: true },
|
|
1198
|
-
{ name: 'cpu', description: 'New vCPU count', takesValue: true },
|
|
1199
|
-
{ name: 'force', description: 'Override the node capacity check', takesValue: false },
|
|
1200
|
-
{
|
|
1201
|
-
name: 'allow-reboot',
|
|
1202
|
-
description: 'Approve the stop/start a resize needs',
|
|
1203
|
-
takesValue: false,
|
|
1204
|
-
},
|
|
1205
|
-
{ name: 'skip-backup', description: 'Skip the pre-resize backup', takesValue: false },
|
|
1206
|
-
{
|
|
1207
|
-
name: 'yes',
|
|
1208
|
-
description: 'Auto-approve reboot + backup (headless)',
|
|
1209
|
-
takesValue: false,
|
|
1210
|
-
},
|
|
1211
|
-
],
|
|
1212
|
-
},
|
|
1213
|
-
],
|
|
1214
|
-
},
|
|
1215
|
-
],
|
|
1216
|
-
},
|
|
1217
|
-
{
|
|
1218
|
-
name: 'subscribers',
|
|
1219
|
-
description: 'Manage build-bus subscribers (cross-machine publish-event delivery)',
|
|
1220
|
-
subcommands: [
|
|
1221
|
-
{
|
|
1222
|
-
name: 'list',
|
|
1223
|
-
description: 'Show registered build-bus subscribers',
|
|
1224
|
-
},
|
|
1225
|
-
{
|
|
1226
|
-
name: 'add',
|
|
1227
|
-
description: 'Add a build-bus subscriber',
|
|
1228
|
-
args: [{ name: 'url', description: 'Subscriber webhook URL (https://...)' }],
|
|
1229
|
-
flags: [
|
|
1230
|
-
{ name: 'secret', description: 'Per-subscriber HMAC secret', takesValue: true },
|
|
1231
|
-
{ name: 'name', description: 'Human-readable label', takesValue: true },
|
|
1232
|
-
{
|
|
1233
|
-
name: 'registry',
|
|
1234
|
-
description:
|
|
1235
|
-
'Filter: deliver only events from this registry (e.g. npm, celilo-registry)',
|
|
1236
|
-
takesValue: true,
|
|
1237
|
-
},
|
|
1238
|
-
{
|
|
1239
|
-
name: 'tag',
|
|
1240
|
-
description: 'Filter: deliver only events with this dist-tag (e.g. latest, alpha)',
|
|
1241
|
-
takesValue: true,
|
|
1242
|
-
},
|
|
1243
|
-
{
|
|
1244
|
-
name: 'package-pattern',
|
|
1245
|
-
description:
|
|
1246
|
-
'Filter: deliver only events whose package name matches this glob (e.g. @celilo/*)',
|
|
1247
|
-
takesValue: true,
|
|
1248
|
-
},
|
|
1249
|
-
],
|
|
1250
|
-
},
|
|
1251
|
-
{
|
|
1252
|
-
name: 'remove',
|
|
1253
|
-
description: 'Remove a subscriber by URL',
|
|
1254
|
-
args: [{ name: 'url', description: 'Subscriber webhook URL to remove' }],
|
|
1255
|
-
},
|
|
1256
|
-
{
|
|
1257
|
-
name: 'test',
|
|
1258
|
-
description: 'Fire a synthetic event at a subscriber and report the delivery outcome',
|
|
1259
|
-
args: [{ name: 'url', description: 'Subscriber webhook URL to test' }],
|
|
1260
|
-
},
|
|
1261
|
-
{
|
|
1262
|
-
name: 'serve',
|
|
1263
|
-
description:
|
|
1264
|
-
'Run the build-bus HTTP receiver daemon (verifies signed webhooks, emits to local bus, dispatches module hooks)',
|
|
1265
|
-
flags: [
|
|
1266
|
-
{ name: 'port', description: 'TCP port to listen on (default 8123)', takesValue: true },
|
|
1267
|
-
{
|
|
1268
|
-
name: 'secret',
|
|
1269
|
-
description: 'Shared HMAC secret incoming webhooks must sign with',
|
|
1270
|
-
takesValue: true,
|
|
1271
|
-
},
|
|
1272
|
-
{
|
|
1273
|
-
name: 'no-dispatch',
|
|
1274
|
-
description: 'Skip the in-process hook dispatcher (receiver-only mode)',
|
|
1275
|
-
takesValue: false,
|
|
1276
|
-
},
|
|
1277
|
-
],
|
|
1278
|
-
},
|
|
1279
|
-
{
|
|
1280
|
-
name: 'status',
|
|
1281
|
-
description:
|
|
1282
|
-
'Per-subscriber delivery history (success rate, last delivery, recent failures)',
|
|
1283
|
-
},
|
|
1284
|
-
],
|
|
1285
|
-
},
|
|
1286
|
-
{
|
|
1287
|
-
name: 'storage',
|
|
1288
|
-
description: 'Manage backup storage destinations',
|
|
1289
|
-
subcommands: [
|
|
1290
|
-
{
|
|
1291
|
-
name: 'add',
|
|
1292
|
-
description: 'Add a backup storage destination',
|
|
1293
|
-
subcommands: [
|
|
1294
|
-
{
|
|
1295
|
-
name: 'local',
|
|
1296
|
-
description: 'Add local filesystem storage',
|
|
1297
|
-
flags: [
|
|
1298
|
-
{ name: 'path', description: 'Storage directory path', takesValue: true },
|
|
1299
|
-
{ name: 'name', description: 'Storage name', takesValue: true },
|
|
1300
|
-
],
|
|
1301
|
-
},
|
|
1302
|
-
{
|
|
1303
|
-
name: 's3',
|
|
1304
|
-
description: 'Add S3-compatible storage',
|
|
1305
|
-
flags: [
|
|
1306
|
-
{ name: 'bucket', description: 'S3 bucket name', takesValue: true },
|
|
1307
|
-
{ name: 'region', description: 'AWS region', takesValue: true },
|
|
1308
|
-
{
|
|
1309
|
-
name: 'endpoint',
|
|
1310
|
-
description: 'Custom endpoint URL (MinIO, B2)',
|
|
1311
|
-
takesValue: true,
|
|
1312
|
-
},
|
|
1313
|
-
{ name: 'name', description: 'Storage name', takesValue: true },
|
|
1314
|
-
{
|
|
1315
|
-
name: 'access-key-id',
|
|
1316
|
-
description: 'S3 access key ID (non-interactive)',
|
|
1317
|
-
takesValue: true,
|
|
1318
|
-
},
|
|
1319
|
-
{
|
|
1320
|
-
name: 'secret-access-key',
|
|
1321
|
-
description: 'S3 secret access key (non-interactive)',
|
|
1322
|
-
takesValue: true,
|
|
1323
|
-
},
|
|
1324
|
-
],
|
|
1325
|
-
},
|
|
1326
|
-
],
|
|
1327
|
-
},
|
|
1328
|
-
{ name: 'list', description: 'List configured storage destinations' },
|
|
1329
|
-
{
|
|
1330
|
-
name: 'remove',
|
|
1331
|
-
description: 'Remove a storage destination',
|
|
1332
|
-
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
1333
|
-
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
1334
|
-
},
|
|
1335
|
-
{
|
|
1336
|
-
name: 'verify',
|
|
1337
|
-
description: 'Verify storage destination connectivity',
|
|
1338
|
-
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
1339
|
-
},
|
|
1340
|
-
{
|
|
1341
|
-
name: 'set-default',
|
|
1342
|
-
description: 'Set the default storage destination',
|
|
1343
|
-
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
1344
|
-
},
|
|
1345
|
-
],
|
|
1346
|
-
},
|
|
1347
|
-
{
|
|
1348
|
-
name: 'backup',
|
|
1349
|
-
description: 'Create and manage backups',
|
|
1350
|
-
subcommands: [
|
|
1351
|
-
{
|
|
1352
|
-
name: 'create',
|
|
1353
|
-
description: 'Create a backup',
|
|
1354
|
-
args: [
|
|
1355
|
-
{
|
|
1356
|
-
name: 'module-id',
|
|
1357
|
-
description: 'Module ID (optional, backs up all if omitted)',
|
|
1358
|
-
completion: 'module_ids',
|
|
1359
|
-
},
|
|
1360
|
-
],
|
|
1361
|
-
flags: [
|
|
1362
|
-
{ name: 'force', description: 'Ignore schedule, back up now', takesValue: false },
|
|
1363
|
-
{
|
|
1364
|
-
name: 'now',
|
|
1365
|
-
description: 'Ignore schedule, back up now (alias for --force)',
|
|
1366
|
-
takesValue: false,
|
|
1367
|
-
},
|
|
1368
|
-
{ name: 'storage', description: 'Storage destination ID', takesValue: true },
|
|
1369
|
-
{
|
|
1370
|
-
name: 'no-interactive',
|
|
1371
|
-
description: 'Non-interactive mode (for cron)',
|
|
1372
|
-
takesValue: false,
|
|
1373
|
-
},
|
|
1374
|
-
],
|
|
1375
|
-
},
|
|
1376
|
-
{
|
|
1377
|
-
name: 'list',
|
|
1378
|
-
description: 'List available backups',
|
|
1379
|
-
args: [
|
|
1380
|
-
{
|
|
1381
|
-
name: 'module-id',
|
|
1382
|
-
description: 'Filter by module ID',
|
|
1383
|
-
completion: 'module_ids',
|
|
1384
|
-
},
|
|
1385
|
-
],
|
|
1386
|
-
flags: [{ name: 'limit', description: 'Number of backups to show', takesValue: true }],
|
|
1387
|
-
},
|
|
1388
|
-
{
|
|
1389
|
-
name: 'restore',
|
|
1390
|
-
description: 'Restore from a backup',
|
|
1391
|
-
args: [{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' }],
|
|
1392
|
-
flags: [{ name: 'yes', description: 'Skip confirmation', takesValue: false }],
|
|
1393
|
-
},
|
|
1394
|
-
{
|
|
1395
|
-
name: 'delete',
|
|
1396
|
-
description: 'Delete a specific backup',
|
|
1397
|
-
args: [{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' }],
|
|
1398
|
-
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
1399
|
-
},
|
|
1400
|
-
{
|
|
1401
|
-
name: 'name',
|
|
1402
|
-
description: 'Get or set a human-readable name on a backup',
|
|
1403
|
-
args: [
|
|
1404
|
-
{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' },
|
|
1405
|
-
{ name: 'name', description: 'Name to assign (all remaining text)' },
|
|
1406
|
-
],
|
|
1407
|
-
flags: [{ name: 'clear', description: 'Remove the name', takesValue: false }],
|
|
1408
|
-
},
|
|
1409
|
-
{
|
|
1410
|
-
name: 'prune',
|
|
1411
|
-
description: 'Remove old backups according to retention policies',
|
|
1412
|
-
args: [
|
|
1413
|
-
{
|
|
1414
|
-
name: 'module-id',
|
|
1415
|
-
description: 'Module ID (optional)',
|
|
1416
|
-
completion: 'module_ids',
|
|
1417
|
-
},
|
|
1418
|
-
],
|
|
1419
|
-
flags: [{ name: 'dry-run', description: 'Show what would be deleted', takesValue: false }],
|
|
1420
|
-
},
|
|
1421
|
-
{
|
|
1422
|
-
name: 'import',
|
|
1423
|
-
description: 'Import a local file as a module backup',
|
|
1424
|
-
args: [
|
|
1425
|
-
{ name: 'file-path', description: 'Path to the file to import' },
|
|
1426
|
-
{
|
|
1427
|
-
name: 'module-id',
|
|
1428
|
-
description: 'Module ID to associate the backup with',
|
|
1429
|
-
completion: 'module_ids',
|
|
1430
|
-
},
|
|
1431
|
-
],
|
|
1432
|
-
flags: [
|
|
1433
|
-
{ name: 'name', description: 'Human-readable name for the backup', takesValue: true },
|
|
1434
|
-
{
|
|
1435
|
-
name: 'schema-version',
|
|
1436
|
-
description: 'Schema version metadata',
|
|
1437
|
-
takesValue: true,
|
|
1438
|
-
},
|
|
1439
|
-
{ name: 'storage', description: 'Storage destination ID', takesValue: true },
|
|
1440
|
-
{ name: 'yes', description: 'Skip confirmation', takesValue: false },
|
|
1441
|
-
],
|
|
1442
|
-
},
|
|
1443
|
-
{
|
|
1444
|
-
name: 'pull',
|
|
1445
|
-
description: "Download another box's backup artifact from a storage destination",
|
|
1446
|
-
flags: [
|
|
1447
|
-
{ name: 'storage', description: 'Storage destination name', takesValue: true },
|
|
1448
|
-
{
|
|
1449
|
-
name: 'module',
|
|
1450
|
-
description: 'Module ID whose backup to pull (default: system state)',
|
|
1451
|
-
takesValue: true,
|
|
1452
|
-
},
|
|
1453
|
-
{ name: 'output', description: 'Local path to write the artifact', takesValue: true },
|
|
1454
|
-
],
|
|
1455
|
-
},
|
|
1456
|
-
],
|
|
1457
|
-
},
|
|
1458
|
-
{
|
|
1459
|
-
name: 'restore',
|
|
1460
|
-
description: 'Restore a celilo-mgmt backup from a local artifact file (fresh-bootstrap path)',
|
|
1461
|
-
args: [
|
|
1462
|
-
{
|
|
1463
|
-
name: 'artifact-path',
|
|
1464
|
-
description: 'Path to the .backup file (also accepted via --from)',
|
|
1465
|
-
},
|
|
1466
|
-
],
|
|
1467
|
-
flags: [
|
|
1468
|
-
{ name: 'from', description: 'Path to the .backup file', takesValue: true },
|
|
1469
|
-
{
|
|
1470
|
-
name: 'force',
|
|
1471
|
-
description: 'Override non-destructive pre-flight (clobbers existing state)',
|
|
1472
|
-
takesValue: false,
|
|
1473
|
-
},
|
|
1474
|
-
],
|
|
1475
|
-
},
|
|
1476
|
-
{
|
|
1477
|
-
name: 'completion',
|
|
1478
|
-
description: 'Generate shell completion scripts',
|
|
1479
|
-
subcommands: [
|
|
1480
|
-
{ name: 'bash', description: 'Generate bash completion script' },
|
|
1481
|
-
{ name: 'zsh', description: 'Generate zsh completion script' },
|
|
1482
|
-
],
|
|
1483
|
-
},
|
|
1484
|
-
{
|
|
1485
|
-
name: 'help',
|
|
1486
|
-
description: 'Show help information',
|
|
1487
|
-
},
|
|
1488
|
-
];
|