@memberjunction/cli 6.1.0-edge.6 → 6.1.0-edge.7

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.
@@ -93,77 +93,54 @@
93
93
  "usage.js"
94
94
  ]
95
95
  },
96
- "app:check-updates": {
96
+ "artifacts:reclassify": {
97
97
  "aliases": [],
98
98
  "args": {},
99
- "description": "Check for available upgrades for installed MJ Open Apps",
100
- "examples": [
101
- "<%= config.bin %> app check-updates"
102
- ],
103
- "flags": {},
104
- "hasDynamicHelp": false,
105
- "hiddenAliases": [],
106
- "id": "app:check-updates",
107
- "pluginAlias": "@memberjunction/cli",
108
- "pluginName": "@memberjunction/cli",
109
- "pluginType": "core",
110
- "strict": true,
111
- "enableJsonFlag": false,
112
- "isESM": true,
113
- "relativePath": [
114
- "dist",
115
- "commands",
116
- "app",
117
- "check-updates.js"
118
- ]
119
- },
120
- "app:disable": {
121
- "aliases": [],
122
- "args": {
123
- "name": {
124
- "description": "Name of the installed app to disable",
125
- "name": "name",
126
- "required": true
127
- }
128
- },
129
- "description": "Disable an installed MJ Open App without removing it",
99
+ "description": "Upgrade-recovery utility for v5.35 artifact unification. Re-evaluates rows whose TypeID is the deleted JSON fallback but whose actual content does not parse as JSON. Normally a no-op: the v5.35 backfill migration handles this automatically. This command is only relevant when the migration ran BEFORE the artifact-type metadata (Generic Text / Generic Binary) was pushed via `mj sync push`, in which case the migration prints a notice telling you to run this. Reports \"no candidates\" once everything is reconciled. Dry-run by default; --apply writes through Record Changes.",
130
100
  "examples": [
131
- "<%= config.bin %> app disable acme-crm"
101
+ "<%= config.bin %> <%= command.id %>",
102
+ "<%= config.bin %> <%= command.id %> --apply --limit 50"
132
103
  ],
133
- "flags": {},
134
- "hasDynamicHelp": false,
135
- "hiddenAliases": [],
136
- "id": "app:disable",
137
- "pluginAlias": "@memberjunction/cli",
138
- "pluginName": "@memberjunction/cli",
139
- "pluginType": "core",
140
- "strict": true,
141
- "enableJsonFlag": false,
142
- "isESM": true,
143
- "relativePath": [
144
- "dist",
145
- "commands",
146
- "app",
147
- "disable.js"
148
- ]
149
- },
150
- "app:enable": {
151
- "aliases": [],
152
- "args": {
153
- "name": {
154
- "description": "Name of the installed app to enable",
155
- "name": "name",
156
- "required": true
104
+ "flags": {
105
+ "conversation-id": {
106
+ "description": "Scope to artifacts attached to the given conversation.",
107
+ "name": "conversation-id",
108
+ "hasDynamicHelp": false,
109
+ "multiple": false,
110
+ "type": "option"
111
+ },
112
+ "since": {
113
+ "description": "Scope to artifacts created on/after this ISO date.",
114
+ "name": "since",
115
+ "hasDynamicHelp": false,
116
+ "multiple": false,
117
+ "type": "option"
118
+ },
119
+ "limit": {
120
+ "description": "Maximum number of rows to inspect.",
121
+ "name": "limit",
122
+ "default": 100,
123
+ "hasDynamicHelp": false,
124
+ "multiple": false,
125
+ "type": "option"
126
+ },
127
+ "apply": {
128
+ "description": "Write changes. Without this flag, this command only reports what it would do.",
129
+ "name": "apply",
130
+ "allowNo": false,
131
+ "type": "boolean"
132
+ },
133
+ "verbose": {
134
+ "char": "v",
135
+ "description": "Print every candidate row, not just the summary.",
136
+ "name": "verbose",
137
+ "allowNo": false,
138
+ "type": "boolean"
157
139
  }
158
140
  },
159
- "description": "Re-enable a disabled MJ Open App",
160
- "examples": [
161
- "<%= config.bin %> app enable acme-crm"
162
- ],
163
- "flags": {},
164
141
  "hasDynamicHelp": false,
165
142
  "hiddenAliases": [],
166
- "id": "app:enable",
143
+ "id": "artifacts:reclassify",
167
144
  "pluginAlias": "@memberjunction/cli",
168
145
  "pluginName": "@memberjunction/cli",
169
146
  "pluginType": "core",
@@ -173,27 +150,31 @@
173
150
  "relativePath": [
174
151
  "dist",
175
152
  "commands",
176
- "app",
177
- "enable.js"
153
+ "artifacts",
154
+ "reclassify.js"
178
155
  ]
179
156
  },
180
- "app:info": {
157
+ "artifacts:usage": {
181
158
  "aliases": [],
182
- "args": {
183
- "name": {
184
- "description": "Name of the installed app",
185
- "name": "name",
186
- "required": true
159
+ "args": {},
160
+ "description": "Show usage, flags, examples, and runtime hints for every `mj artifacts` command.",
161
+ "flags": {
162
+ "format": {
163
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
164
+ "name": "format",
165
+ "hasDynamicHelp": false,
166
+ "multiple": false,
167
+ "options": [
168
+ "text",
169
+ "json",
170
+ "md"
171
+ ],
172
+ "type": "option"
187
173
  }
188
174
  },
189
- "description": "Show detailed information about an installed MJ Open App",
190
- "examples": [
191
- "<%= config.bin %> app info acme-crm"
192
- ],
193
- "flags": {},
194
175
  "hasDynamicHelp": false,
195
176
  "hiddenAliases": [],
196
- "id": "app:info",
177
+ "id": "artifacts:usage",
197
178
  "pluginAlias": "@memberjunction/cli",
198
179
  "pluginName": "@memberjunction/cli",
199
180
  "pluginType": "core",
@@ -203,58 +184,96 @@
203
184
  "relativePath": [
204
185
  "dist",
205
186
  "commands",
206
- "app",
207
- "info.js"
187
+ "artifacts",
188
+ "usage.js"
208
189
  ]
209
190
  },
210
- "app:install": {
191
+ "baseline:build": {
211
192
  "aliases": [],
212
- "args": {
213
- "source": {
214
- "description": "GitHub repository URL of the Open App. For a multi-app repo, append the in-repo path to the app (e.g. https://github.com/MemberJunction/Integrations/CRM/HubSpot).",
215
- "name": "source",
216
- "required": true
217
- }
218
- },
219
- "description": "Install an MJ Open App from a GitHub repository",
193
+ "args": {},
194
+ "description": "Generate a deterministic baseline SQL script from the END-STATE of a migrated MSSQL database.",
220
195
  "examples": [
221
- "<%= config.bin %> app install https://github.com/acme/mj-crm",
222
- "<%= config.bin %> app install https://github.com/acme/mj-crm --version 1.2.0",
223
- "<%= config.bin %> app install https://github.com/acme/mj-crm --verbose",
224
- "<%= config.bin %> app install https://github.com/MemberJunction/Integrations/CRM/HubSpot",
225
- "<%= config.bin %> app install https://github.com/acme/mj-crm --non-interactive"
196
+ "<%= config.bin %> <%= command.id %> --out ./migrations/v5/ # auto: within-major rebaseline",
197
+ "<%= config.bin %> <%= command.id %> --source-dir ./migrations/v5 --out ./migrations/v5/",
198
+ "<%= config.bin %> <%= command.id %> --baseline-version 6.0 --out ./migrations/v6/ # explicit major-boundary",
199
+ "<%= config.bin %> <%= command.id %> --baseline-version 5.32 --database MJ_BL_Stack --out /tmp/baseline/"
226
200
  ],
227
201
  "flags": {
228
- "version": {
229
- "description": "Specific version to install (default: latest)",
230
- "name": "version",
202
+ "baseline-version": {
203
+ "description": "Baseline version stamp in Major.Minor format (literal x is appended for patch, matching the V-file convention). Omit to auto-detect from --source-dir (within-major rebaseline mode).",
204
+ "name": "baseline-version",
231
205
  "hasDynamicHelp": false,
232
206
  "multiple": false,
233
207
  "type": "option"
234
208
  },
235
- "verbose": {
236
- "char": "v",
237
- "description": "Show detailed output",
238
- "name": "verbose",
209
+ "source-dir": {
210
+ "description": "Migrations source directory (e.g. ./migrations/v5). Used to auto-detect the next baseline version + timestamp when --baseline-version is omitted. Defaults to the highest migrations/v*/ directory walked up from cwd.",
211
+ "name": "source-dir",
212
+ "hasDynamicHelp": false,
213
+ "multiple": false,
214
+ "type": "option"
215
+ },
216
+ "description": {
217
+ "description": "Human-readable description embedded in the file header.",
218
+ "name": "description",
219
+ "default": "MemberJunction Baseline",
220
+ "hasDynamicHelp": false,
221
+ "multiple": false,
222
+ "type": "option"
223
+ },
224
+ "database": {
225
+ "description": "Override database name (host/user/password come from MJ config).",
226
+ "name": "database",
227
+ "hasDynamicHelp": false,
228
+ "multiple": false,
229
+ "type": "option"
230
+ },
231
+ "out": {
232
+ "description": "Output directory. Filename is auto-generated.",
233
+ "name": "out",
234
+ "default": ".",
235
+ "hasDynamicHelp": false,
236
+ "multiple": false,
237
+ "type": "option"
238
+ },
239
+ "exclude-data": {
240
+ "description": "Comma-separated list of tables (schema-qualified or not) to skip data dump for.",
241
+ "name": "exclude-data",
242
+ "default": "",
243
+ "hasDynamicHelp": false,
244
+ "multiple": false,
245
+ "type": "option"
246
+ },
247
+ "batch-size": {
248
+ "description": "Rows per INSERT batch.",
249
+ "name": "batch-size",
250
+ "default": 1000,
251
+ "hasDynamicHelp": false,
252
+ "multiple": false,
253
+ "type": "option"
254
+ },
255
+ "no-data": {
256
+ "description": "Emit schema only, no data inserts.",
257
+ "name": "no-data",
239
258
  "allowNo": false,
240
259
  "type": "boolean"
241
260
  },
242
- "non-interactive": {
243
- "description": "Skip interactive setup prompts; post-install hooks use environment variables / defaults (for CI/headless installs)",
244
- "name": "non-interactive",
261
+ "verbose": {
262
+ "description": "Print per-object progress.",
263
+ "name": "verbose",
245
264
  "allowNo": false,
246
265
  "type": "boolean"
247
266
  },
248
- "dangerously-ignore-dbl-underscore-schema-rule": {
249
- "hidden": true,
250
- "name": "dangerously-ignore-dbl-underscore-schema-rule",
267
+ "dry-run": {
268
+ "description": "Print to stdout instead of writing a file.",
269
+ "name": "dry-run",
251
270
  "allowNo": false,
252
271
  "type": "boolean"
253
272
  }
254
273
  },
255
274
  "hasDynamicHelp": false,
256
275
  "hiddenAliases": [],
257
- "id": "app:install",
276
+ "id": "baseline:build",
258
277
  "pluginAlias": "@memberjunction/cli",
259
278
  "pluginName": "@memberjunction/cli",
260
279
  "pluginType": "core",
@@ -264,94 +283,114 @@
264
283
  "relativePath": [
265
284
  "dist",
266
285
  "commands",
267
- "app",
268
- "install.js"
286
+ "baseline",
287
+ "build.js"
269
288
  ]
270
289
  },
271
- "app:list": {
290
+ "baseline:compare": {
272
291
  "aliases": [],
273
292
  "args": {},
274
- "description": "List all installed MJ Open Apps",
293
+ "description": "Deterministically compare two databases object-by-object and row-by-row.",
275
294
  "examples": [
276
- "<%= config.bin %> app list"
295
+ "<%= config.bin %> <%= command.id %> --left MJ_BL_Stack --right MJ_BL_New",
296
+ "<%= config.bin %> <%= command.id %> --left A --right B --row-compare counts",
297
+ "<%= config.bin %> <%= command.id %> --left A --right B --fail-on-diff --out ./diffs/"
277
298
  ],
278
299
  "flags": {
279
- "verbose": {
280
- "char": "v",
281
- "description": "Show detailed output",
282
- "name": "verbose",
283
- "allowNo": false,
284
- "type": "boolean"
285
- }
286
- },
287
- "hasDynamicHelp": false,
288
- "hiddenAliases": [],
289
- "id": "app:list",
290
- "pluginAlias": "@memberjunction/cli",
291
- "pluginName": "@memberjunction/cli",
292
- "pluginType": "core",
293
- "strict": true,
294
- "enableJsonFlag": false,
295
- "isESM": true,
296
- "relativePath": [
297
- "dist",
298
- "commands",
299
- "app",
300
- "list.js"
301
- ]
302
- },
303
- "app:remove": {
304
- "aliases": [],
305
- "args": {
306
- "name": {
307
- "description": "Name of the installed app to remove",
308
- "name": "name",
309
- "required": true
310
- }
311
- },
312
- "description": "Remove an installed MJ Open App",
313
- "examples": [
314
- "<%= config.bin %> app remove acme-crm",
315
- "<%= config.bin %> app remove acme-crm --keep-data",
316
- "<%= config.bin %> app remove acme-crm --force"
317
- ],
318
- "flags": {
319
- "keep-data": {
320
- "description": "Keep the database schema and data",
321
- "name": "keep-data",
322
- "allowNo": false,
323
- "type": "boolean"
300
+ "left": {
301
+ "description": "Left database name (override).",
302
+ "name": "left",
303
+ "required": true,
304
+ "hasDynamicHelp": false,
305
+ "multiple": false,
306
+ "type": "option"
324
307
  },
325
- "force": {
326
- "description": "Force removal even if other apps depend on this one",
327
- "name": "force",
328
- "allowNo": false,
329
- "type": "boolean"
308
+ "right": {
309
+ "description": "Right database name (override).",
310
+ "name": "right",
311
+ "required": true,
312
+ "hasDynamicHelp": false,
313
+ "multiple": false,
314
+ "type": "option"
330
315
  },
331
- "yes": {
332
- "char": "y",
333
- "description": "Skip confirmation prompt",
334
- "name": "yes",
316
+ "dialect": {
317
+ "description": "Dialect of both DBs (must match).",
318
+ "name": "dialect",
319
+ "default": "mssql",
320
+ "hasDynamicHelp": false,
321
+ "multiple": false,
322
+ "options": [
323
+ "mssql",
324
+ "postgres"
325
+ ],
326
+ "type": "option"
327
+ },
328
+ "row-compare": {
329
+ "description": "Row comparison mode.",
330
+ "name": "row-compare",
331
+ "default": "full",
332
+ "hasDynamicHelp": false,
333
+ "multiple": false,
334
+ "options": [
335
+ "full",
336
+ "hash",
337
+ "counts",
338
+ "none"
339
+ ],
340
+ "type": "option"
341
+ },
342
+ "row-hash-algo": {
343
+ "description": "Hash algorithm when --row-compare hash.",
344
+ "name": "row-hash-algo",
345
+ "default": "sha256",
346
+ "hasDynamicHelp": false,
347
+ "multiple": false,
348
+ "options": [
349
+ "sha256",
350
+ "md5",
351
+ "checksum_agg"
352
+ ],
353
+ "type": "option"
354
+ },
355
+ "ignore": {
356
+ "description": "Regex of object names to skip.",
357
+ "name": "ignore",
358
+ "default": "^flyway_schema_history$",
359
+ "hasDynamicHelp": false,
360
+ "multiple": false,
361
+ "type": "option"
362
+ },
363
+ "sample-limit": {
364
+ "description": "Maximum row diffs to capture per table.",
365
+ "name": "sample-limit",
366
+ "default": 100,
367
+ "hasDynamicHelp": false,
368
+ "multiple": false,
369
+ "type": "option"
370
+ },
371
+ "out": {
372
+ "description": "Directory to write JSON + Markdown reports.",
373
+ "name": "out",
374
+ "hasDynamicHelp": false,
375
+ "multiple": false,
376
+ "type": "option"
377
+ },
378
+ "fail-on-diff": {
379
+ "description": "Exit non-zero if any diff is found.",
380
+ "name": "fail-on-diff",
335
381
  "allowNo": false,
336
382
  "type": "boolean"
337
383
  },
338
384
  "verbose": {
339
- "char": "v",
340
- "description": "Show detailed output",
385
+ "description": "Print per-phase progress.",
341
386
  "name": "verbose",
342
387
  "allowNo": false,
343
388
  "type": "boolean"
344
- },
345
- "dangerously-ignore-dbl-underscore-schema-rule": {
346
- "hidden": true,
347
- "name": "dangerously-ignore-dbl-underscore-schema-rule",
348
- "allowNo": false,
349
- "type": "boolean"
350
389
  }
351
390
  },
352
391
  "hasDynamicHelp": false,
353
392
  "hiddenAliases": [],
354
- "id": "app:remove",
393
+ "id": "baseline:compare",
355
394
  "pluginAlias": "@memberjunction/cli",
356
395
  "pluginName": "@memberjunction/cli",
357
396
  "pluginType": "core",
@@ -361,55 +400,119 @@
361
400
  "relativePath": [
362
401
  "dist",
363
402
  "commands",
364
- "app",
365
- "remove.js"
403
+ "baseline",
404
+ "compare.js"
366
405
  ]
367
406
  },
368
- "app:upgrade": {
407
+ "baseline:roundtrip": {
369
408
  "aliases": [],
370
- "args": {
371
- "name": {
372
- "description": "Name of the installed app to upgrade",
373
- "name": "name",
374
- "required": true
375
- }
376
- },
377
- "description": "Upgrade an installed MJ Open App to a newer version",
409
+ "args": {},
410
+ "description": "Build a baseline from a V-stack database, apply it to a fresh DB, and prove byte-equivalence.",
378
411
  "examples": [
379
- "<%= config.bin %> app upgrade acme-crm",
380
- "<%= config.bin %> app upgrade acme-crm --version 1.3.0"
412
+ "<%= config.bin %> <%= command.id %> --source MJ_BL_Stack --target MJ_BL_New # auto: within-major",
413
+ "<%= config.bin %> <%= command.id %> --baseline-version 6.0 --source MJ_BL_Stack --target MJ_BL_New # explicit major-boundary",
414
+ "<%= config.bin %> <%= command.id %> --source-dir ./migrations/v5 --source MJ_BL_Stack --target MJ_BL_New"
381
415
  ],
382
416
  "flags": {
383
- "version": {
384
- "description": "Specific version to upgrade to (default: latest)",
385
- "name": "version",
417
+ "baseline-version": {
418
+ "description": "Major.Minor version stamp. Omit to auto-detect from --source-dir (within-major rebaseline).",
419
+ "name": "baseline-version",
386
420
  "hasDynamicHelp": false,
387
421
  "multiple": false,
388
422
  "type": "option"
389
423
  },
390
- "verbose": {
391
- "char": "v",
392
- "description": "Show detailed output",
393
- "name": "verbose",
424
+ "source-dir": {
425
+ "description": "Migrations source directory used to auto-detect baseline version + timestamp when --baseline-version is omitted. Defaults to the highest migrations/v*/ near cwd.",
426
+ "name": "source-dir",
427
+ "hasDynamicHelp": false,
428
+ "multiple": false,
429
+ "type": "option"
430
+ },
431
+ "description": {
432
+ "description": "Header description.",
433
+ "name": "description",
434
+ "default": "MemberJunction Baseline",
435
+ "hasDynamicHelp": false,
436
+ "multiple": false,
437
+ "type": "option"
438
+ },
439
+ "dialect": {
440
+ "description": "Dialect to test. PG path runs the converter via /pg-migrate first.",
441
+ "name": "dialect",
442
+ "default": "mssql",
443
+ "hasDynamicHelp": false,
444
+ "multiple": false,
445
+ "options": [
446
+ "mssql",
447
+ "postgres"
448
+ ],
449
+ "type": "option"
450
+ },
451
+ "source": {
452
+ "description": "Database name with the V-stack already applied (used as comparison gold standard).",
453
+ "name": "source",
454
+ "required": true,
455
+ "hasDynamicHelp": false,
456
+ "multiple": false,
457
+ "type": "option"
458
+ },
459
+ "target": {
460
+ "description": "Empty database name to apply the new baseline to.",
461
+ "name": "target",
462
+ "required": true,
463
+ "hasDynamicHelp": false,
464
+ "multiple": false,
465
+ "type": "option"
466
+ },
467
+ "out": {
468
+ "description": "Output directory for baseline file + reports.",
469
+ "name": "out",
470
+ "default": ".",
471
+ "hasDynamicHelp": false,
472
+ "multiple": false,
473
+ "type": "option"
474
+ },
475
+ "apply-cmd": {
476
+ "description": "Command template to apply the baseline. Tokens: {file} {database}. Defaults to sqlcmd.",
477
+ "name": "apply-cmd",
478
+ "hasDynamicHelp": false,
479
+ "multiple": false,
480
+ "type": "option"
481
+ },
482
+ "row-compare": {
483
+ "description": "Row compare mode passed to the comparator.",
484
+ "name": "row-compare",
485
+ "default": "full",
486
+ "hasDynamicHelp": false,
487
+ "multiple": false,
488
+ "options": [
489
+ "full",
490
+ "hash",
491
+ "counts",
492
+ "none"
493
+ ],
494
+ "type": "option"
495
+ },
496
+ "fail-on-diff": {
497
+ "name": "fail-on-diff",
394
498
  "allowNo": false,
395
499
  "type": "boolean"
396
500
  },
397
- "non-interactive": {
398
- "description": "Skip interactive prompts; post-upgrade hooks use environment variables / defaults (for CI/headless upgrades)",
399
- "name": "non-interactive",
501
+ "keep-target": {
502
+ "description": "Do not drop the target database after run (useful for debugging diffs).",
503
+ "name": "keep-target",
400
504
  "allowNo": false,
401
505
  "type": "boolean"
402
506
  },
403
- "dangerously-ignore-dbl-underscore-schema-rule": {
404
- "hidden": true,
405
- "name": "dangerously-ignore-dbl-underscore-schema-rule",
507
+ "verbose": {
508
+ "name": "verbose",
406
509
  "allowNo": false,
407
510
  "type": "boolean"
408
511
  }
409
512
  },
410
513
  "hasDynamicHelp": false,
411
514
  "hiddenAliases": [],
412
- "id": "app:upgrade",
515
+ "id": "baseline:roundtrip",
413
516
  "pluginAlias": "@memberjunction/cli",
414
517
  "pluginName": "@memberjunction/cli",
415
518
  "pluginType": "core",
@@ -419,14 +522,14 @@
419
522
  "relativePath": [
420
523
  "dist",
421
524
  "commands",
422
- "app",
423
- "upgrade.js"
525
+ "baseline",
526
+ "roundtrip.js"
424
527
  ]
425
528
  },
426
- "app:usage": {
529
+ "baseline:usage": {
427
530
  "aliases": [],
428
531
  "args": {},
429
- "description": "Show usage, flags, examples, and runtime hints for every `mj app` command.",
532
+ "description": "Show usage, flags, examples, and runtime hints for every `mj baseline` command.",
430
533
  "flags": {
431
534
  "format": {
432
535
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -443,7 +546,7 @@
443
546
  },
444
547
  "hasDynamicHelp": false,
445
548
  "hiddenAliases": [],
446
- "id": "app:usage",
549
+ "id": "baseline:usage",
447
550
  "pluginAlias": "@memberjunction/cli",
448
551
  "pluginName": "@memberjunction/cli",
449
552
  "pluginType": "core",
@@ -453,7 +556,7 @@
453
556
  "relativePath": [
454
557
  "dist",
455
558
  "commands",
456
- "app",
559
+ "baseline",
457
560
  "usage.js"
458
561
  ]
459
562
  },
@@ -515,7 +618,95 @@
515
618
  },
516
619
  "hasDynamicHelp": false,
517
620
  "hiddenAliases": [],
518
- "id": "bump",
621
+ "id": "bump",
622
+ "pluginAlias": "@memberjunction/cli",
623
+ "pluginName": "@memberjunction/cli",
624
+ "pluginType": "core",
625
+ "strict": true,
626
+ "enableJsonFlag": false,
627
+ "isESM": true,
628
+ "relativePath": [
629
+ "dist",
630
+ "commands",
631
+ "bump",
632
+ "index.js"
633
+ ]
634
+ },
635
+ "bump:usage": {
636
+ "aliases": [],
637
+ "args": {},
638
+ "description": "Show usage, flags, examples, and runtime hints for every `mj bump` command.",
639
+ "flags": {
640
+ "format": {
641
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
642
+ "name": "format",
643
+ "hasDynamicHelp": false,
644
+ "multiple": false,
645
+ "options": [
646
+ "text",
647
+ "json",
648
+ "md"
649
+ ],
650
+ "type": "option"
651
+ }
652
+ },
653
+ "hasDynamicHelp": false,
654
+ "hiddenAliases": [],
655
+ "id": "bump:usage",
656
+ "pluginAlias": "@memberjunction/cli",
657
+ "pluginName": "@memberjunction/cli",
658
+ "pluginType": "core",
659
+ "strict": true,
660
+ "enableJsonFlag": false,
661
+ "isESM": true,
662
+ "relativePath": [
663
+ "dist",
664
+ "commands",
665
+ "bump",
666
+ "usage.js"
667
+ ]
668
+ },
669
+ "app:check-updates": {
670
+ "aliases": [],
671
+ "args": {},
672
+ "description": "Check for available upgrades for installed MJ Open Apps",
673
+ "examples": [
674
+ "<%= config.bin %> app check-updates"
675
+ ],
676
+ "flags": {},
677
+ "hasDynamicHelp": false,
678
+ "hiddenAliases": [],
679
+ "id": "app:check-updates",
680
+ "pluginAlias": "@memberjunction/cli",
681
+ "pluginName": "@memberjunction/cli",
682
+ "pluginType": "core",
683
+ "strict": true,
684
+ "enableJsonFlag": false,
685
+ "isESM": true,
686
+ "relativePath": [
687
+ "dist",
688
+ "commands",
689
+ "app",
690
+ "check-updates.js"
691
+ ]
692
+ },
693
+ "app:disable": {
694
+ "aliases": [],
695
+ "args": {
696
+ "name": {
697
+ "description": "Name of the installed app to disable",
698
+ "name": "name",
699
+ "required": true
700
+ }
701
+ },
702
+ "description": "Disable an installed MJ Open App without removing it",
703
+ "examples": [
704
+ "<%= config.bin %> app disable acme-crm"
705
+ ],
706
+ "flags": {},
707
+ "hasDynamicHelp": false,
708
+ "hiddenAliases": [],
709
+ "id": "app:disable",
519
710
  "pluginAlias": "@memberjunction/cli",
520
711
  "pluginName": "@memberjunction/cli",
521
712
  "pluginType": "core",
@@ -525,31 +716,27 @@
525
716
  "relativePath": [
526
717
  "dist",
527
718
  "commands",
528
- "bump",
529
- "index.js"
719
+ "app",
720
+ "disable.js"
530
721
  ]
531
722
  },
532
- "bump:usage": {
723
+ "app:enable": {
533
724
  "aliases": [],
534
- "args": {},
535
- "description": "Show usage, flags, examples, and runtime hints for every `mj bump` command.",
536
- "flags": {
537
- "format": {
538
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
539
- "name": "format",
540
- "hasDynamicHelp": false,
541
- "multiple": false,
542
- "options": [
543
- "text",
544
- "json",
545
- "md"
546
- ],
547
- "type": "option"
725
+ "args": {
726
+ "name": {
727
+ "description": "Name of the installed app to enable",
728
+ "name": "name",
729
+ "required": true
548
730
  }
549
731
  },
732
+ "description": "Re-enable a disabled MJ Open App",
733
+ "examples": [
734
+ "<%= config.bin %> app enable acme-crm"
735
+ ],
736
+ "flags": {},
550
737
  "hasDynamicHelp": false,
551
738
  "hiddenAliases": [],
552
- "id": "bump:usage",
739
+ "id": "app:enable",
553
740
  "pluginAlias": "@memberjunction/cli",
554
741
  "pluginName": "@memberjunction/cli",
555
742
  "pluginType": "core",
@@ -559,83 +746,27 @@
559
746
  "relativePath": [
560
747
  "dist",
561
748
  "commands",
562
- "bump",
563
- "usage.js"
749
+ "app",
750
+ "enable.js"
564
751
  ]
565
752
  },
566
- "bundle": {
753
+ "app:info": {
567
754
  "aliases": [],
568
- "args": {},
569
- "description": "Create a self-contained MemberJunction distribution zip for offline/air-gapped installs",
570
- "examples": [
571
- "<%= config.bin %> <%= command.id %> --out ./mj-install.zip",
572
- "<%= config.bin %> <%= command.id %> --tag v5.38.0 --out ./mj-install.zip",
573
- "<%= config.bin %> <%= command.id %> --source . --out ./mj-install.zip",
574
- "<%= config.bin %> <%= command.id %> --tag v5.38.0 --with-migrations --out ./mj-install.zip",
575
- "<%= config.bin %> <%= command.id %> --with-migrations --db-platform postgresql --out ./mj-install.zip"
576
- ],
577
- "flags": {
578
- "out": {
579
- "char": "o",
580
- "description": "Output zip path",
581
- "name": "out",
582
- "required": true,
583
- "hasDynamicHelp": false,
584
- "multiple": false,
585
- "type": "option"
586
- },
587
- "tag": {
588
- "char": "t",
589
- "description": "Release tag to bundle (e.g. v5.38.0). Defaults to the latest branch tip.",
590
- "name": "tag",
591
- "hasDynamicHelp": false,
592
- "multiple": false,
593
- "type": "option"
594
- },
595
- "source": {
596
- "description": "Bundle from a local working-tree directory instead of fetching from the repo",
597
- "name": "source",
598
- "hasDynamicHelp": false,
599
- "multiple": false,
600
- "type": "option"
601
- },
602
- "with-migrations": {
603
- "description": "Include the migration tree(s) so an air-gapped \"mj migrate\" can run offline. Ships both SQL Server and PostgreSQL trees by default.",
604
- "name": "with-migrations",
605
- "allowNo": false,
606
- "type": "boolean"
607
- },
608
- "db-platform": {
609
- "dependsOn": [
610
- "with-migrations"
611
- ],
612
- "description": "With --with-migrations, ship only this platform's migration tree instead of both",
613
- "name": "db-platform",
614
- "hasDynamicHelp": false,
615
- "multiple": false,
616
- "options": [
617
- "sqlserver",
618
- "postgresql"
619
- ],
620
- "type": "option"
621
- },
622
- "no-claude-pack": {
623
- "description": "Exclude the Claude Code pack (CLAUDE.md + .claude/) from the bundle. By default the pack is included so air-gapped installs get the same out-of-the-box Claude experience as online installs.",
624
- "name": "no-claude-pack",
625
- "allowNo": false,
626
- "type": "boolean"
627
- },
628
- "verbose": {
629
- "char": "v",
630
- "description": "Show detailed output",
631
- "name": "verbose",
632
- "allowNo": false,
633
- "type": "boolean"
755
+ "args": {
756
+ "name": {
757
+ "description": "Name of the installed app",
758
+ "name": "name",
759
+ "required": true
634
760
  }
635
761
  },
762
+ "description": "Show detailed information about an installed MJ Open App",
763
+ "examples": [
764
+ "<%= config.bin %> app info acme-crm"
765
+ ],
766
+ "flags": {},
636
767
  "hasDynamicHelp": false,
637
768
  "hiddenAliases": [],
638
- "id": "bundle",
769
+ "id": "app:info",
639
770
  "pluginAlias": "@memberjunction/cli",
640
771
  "pluginName": "@memberjunction/cli",
641
772
  "pluginType": "core",
@@ -645,31 +776,58 @@
645
776
  "relativePath": [
646
777
  "dist",
647
778
  "commands",
648
- "bundle",
649
- "index.js"
779
+ "app",
780
+ "info.js"
650
781
  ]
651
782
  },
652
- "bundle:usage": {
783
+ "app:install": {
653
784
  "aliases": [],
654
- "args": {},
655
- "description": "Show usage, flags, examples, and runtime hints for every `mj bundle` command.",
785
+ "args": {
786
+ "source": {
787
+ "description": "GitHub repository URL of the Open App. For a multi-app repo, append the in-repo path to the app (e.g. https://github.com/MemberJunction/Integrations/CRM/HubSpot).",
788
+ "name": "source",
789
+ "required": true
790
+ }
791
+ },
792
+ "description": "Install an MJ Open App from a GitHub repository",
793
+ "examples": [
794
+ "<%= config.bin %> app install https://github.com/acme/mj-crm",
795
+ "<%= config.bin %> app install https://github.com/acme/mj-crm --version 1.2.0",
796
+ "<%= config.bin %> app install https://github.com/acme/mj-crm --verbose",
797
+ "<%= config.bin %> app install https://github.com/MemberJunction/Integrations/CRM/HubSpot",
798
+ "<%= config.bin %> app install https://github.com/acme/mj-crm --non-interactive"
799
+ ],
656
800
  "flags": {
657
- "format": {
658
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
659
- "name": "format",
801
+ "version": {
802
+ "description": "Specific version to install (default: latest)",
803
+ "name": "version",
660
804
  "hasDynamicHelp": false,
661
805
  "multiple": false,
662
- "options": [
663
- "text",
664
- "json",
665
- "md"
666
- ],
667
806
  "type": "option"
807
+ },
808
+ "verbose": {
809
+ "char": "v",
810
+ "description": "Show detailed output",
811
+ "name": "verbose",
812
+ "allowNo": false,
813
+ "type": "boolean"
814
+ },
815
+ "non-interactive": {
816
+ "description": "Skip interactive setup prompts; post-install hooks use environment variables / defaults (for CI/headless installs)",
817
+ "name": "non-interactive",
818
+ "allowNo": false,
819
+ "type": "boolean"
820
+ },
821
+ "dangerously-ignore-dbl-underscore-schema-rule": {
822
+ "hidden": true,
823
+ "name": "dangerously-ignore-dbl-underscore-schema-rule",
824
+ "allowNo": false,
825
+ "type": "boolean"
668
826
  }
669
827
  },
670
828
  "hasDynamicHelp": false,
671
829
  "hiddenAliases": [],
672
- "id": "bundle:usage",
830
+ "id": "app:install",
673
831
  "pluginAlias": "@memberjunction/cli",
674
832
  "pluginName": "@memberjunction/cli",
675
833
  "pluginType": "core",
@@ -679,21 +837,21 @@
679
837
  "relativePath": [
680
838
  "dist",
681
839
  "commands",
682
- "bundle",
683
- "usage.js"
840
+ "app",
841
+ "install.js"
684
842
  ]
685
843
  },
686
- "clean": {
844
+ "app:list": {
687
845
  "aliases": [],
688
846
  "args": {},
689
- "description": "Resets the MemberJunction database to a pre-installation state",
847
+ "description": "List all installed MJ Open Apps",
690
848
  "examples": [
691
- "<%= config.bin %> <%= command.id %>\n"
849
+ "<%= config.bin %> app list"
692
850
  ],
693
851
  "flags": {
694
852
  "verbose": {
695
853
  "char": "v",
696
- "description": "Enable additional logging",
854
+ "description": "Show detailed output",
697
855
  "name": "verbose",
698
856
  "allowNo": false,
699
857
  "type": "boolean"
@@ -701,7 +859,7 @@
701
859
  },
702
860
  "hasDynamicHelp": false,
703
861
  "hiddenAliases": [],
704
- "id": "clean",
862
+ "id": "app:list",
705
863
  "pluginAlias": "@memberjunction/cli",
706
864
  "pluginName": "@memberjunction/cli",
707
865
  "pluginType": "core",
@@ -711,31 +869,62 @@
711
869
  "relativePath": [
712
870
  "dist",
713
871
  "commands",
714
- "clean",
715
- "index.js"
872
+ "app",
873
+ "list.js"
716
874
  ]
717
875
  },
718
- "clean:usage": {
876
+ "app:remove": {
719
877
  "aliases": [],
720
- "args": {},
721
- "description": "Show usage, flags, examples, and runtime hints for every `mj clean` command.",
878
+ "args": {
879
+ "name": {
880
+ "description": "Name of the installed app to remove",
881
+ "name": "name",
882
+ "required": true
883
+ }
884
+ },
885
+ "description": "Remove an installed MJ Open App",
886
+ "examples": [
887
+ "<%= config.bin %> app remove acme-crm",
888
+ "<%= config.bin %> app remove acme-crm --keep-data",
889
+ "<%= config.bin %> app remove acme-crm --force"
890
+ ],
722
891
  "flags": {
723
- "format": {
724
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
725
- "name": "format",
726
- "hasDynamicHelp": false,
727
- "multiple": false,
728
- "options": [
729
- "text",
730
- "json",
731
- "md"
732
- ],
733
- "type": "option"
892
+ "keep-data": {
893
+ "description": "Keep the database schema and data",
894
+ "name": "keep-data",
895
+ "allowNo": false,
896
+ "type": "boolean"
897
+ },
898
+ "force": {
899
+ "description": "Force removal even if other apps depend on this one",
900
+ "name": "force",
901
+ "allowNo": false,
902
+ "type": "boolean"
903
+ },
904
+ "yes": {
905
+ "char": "y",
906
+ "description": "Skip confirmation prompt",
907
+ "name": "yes",
908
+ "allowNo": false,
909
+ "type": "boolean"
910
+ },
911
+ "verbose": {
912
+ "char": "v",
913
+ "description": "Show detailed output",
914
+ "name": "verbose",
915
+ "allowNo": false,
916
+ "type": "boolean"
917
+ },
918
+ "dangerously-ignore-dbl-underscore-schema-rule": {
919
+ "hidden": true,
920
+ "name": "dangerously-ignore-dbl-underscore-schema-rule",
921
+ "allowNo": false,
922
+ "type": "boolean"
734
923
  }
735
924
  },
736
925
  "hasDynamicHelp": false,
737
926
  "hiddenAliases": [],
738
- "id": "clean:usage",
927
+ "id": "app:remove",
739
928
  "pluginAlias": "@memberjunction/cli",
740
929
  "pluginName": "@memberjunction/cli",
741
930
  "pluginType": "core",
@@ -745,96 +934,55 @@
745
934
  "relativePath": [
746
935
  "dist",
747
936
  "commands",
748
- "clean",
749
- "usage.js"
937
+ "app",
938
+ "remove.js"
750
939
  ]
751
940
  },
752
- "baseline:build": {
941
+ "app:upgrade": {
753
942
  "aliases": [],
754
- "args": {},
755
- "description": "Generate a deterministic baseline SQL script from the END-STATE of a migrated MSSQL database.",
943
+ "args": {
944
+ "name": {
945
+ "description": "Name of the installed app to upgrade",
946
+ "name": "name",
947
+ "required": true
948
+ }
949
+ },
950
+ "description": "Upgrade an installed MJ Open App to a newer version",
756
951
  "examples": [
757
- "<%= config.bin %> <%= command.id %> --out ./migrations/v5/ # auto: within-major rebaseline",
758
- "<%= config.bin %> <%= command.id %> --source-dir ./migrations/v5 --out ./migrations/v5/",
759
- "<%= config.bin %> <%= command.id %> --baseline-version 6.0 --out ./migrations/v6/ # explicit major-boundary",
760
- "<%= config.bin %> <%= command.id %> --baseline-version 5.32 --database MJ_BL_Stack --out /tmp/baseline/"
952
+ "<%= config.bin %> app upgrade acme-crm",
953
+ "<%= config.bin %> app upgrade acme-crm --version 1.3.0"
761
954
  ],
762
955
  "flags": {
763
- "baseline-version": {
764
- "description": "Baseline version stamp in Major.Minor format (literal x is appended for patch, matching the V-file convention). Omit to auto-detect from --source-dir (within-major rebaseline mode).",
765
- "name": "baseline-version",
766
- "hasDynamicHelp": false,
767
- "multiple": false,
768
- "type": "option"
769
- },
770
- "source-dir": {
771
- "description": "Migrations source directory (e.g. ./migrations/v5). Used to auto-detect the next baseline version + timestamp when --baseline-version is omitted. Defaults to the highest migrations/v*/ directory walked up from cwd.",
772
- "name": "source-dir",
773
- "hasDynamicHelp": false,
774
- "multiple": false,
775
- "type": "option"
776
- },
777
- "description": {
778
- "description": "Human-readable description embedded in the file header.",
779
- "name": "description",
780
- "default": "MemberJunction Baseline",
781
- "hasDynamicHelp": false,
782
- "multiple": false,
783
- "type": "option"
784
- },
785
- "database": {
786
- "description": "Override database name (host/user/password come from MJ config).",
787
- "name": "database",
788
- "hasDynamicHelp": false,
789
- "multiple": false,
790
- "type": "option"
791
- },
792
- "out": {
793
- "description": "Output directory. Filename is auto-generated.",
794
- "name": "out",
795
- "default": ".",
796
- "hasDynamicHelp": false,
797
- "multiple": false,
798
- "type": "option"
799
- },
800
- "exclude-data": {
801
- "description": "Comma-separated list of tables (schema-qualified or not) to skip data dump for.",
802
- "name": "exclude-data",
803
- "default": "",
804
- "hasDynamicHelp": false,
805
- "multiple": false,
806
- "type": "option"
807
- },
808
- "batch-size": {
809
- "description": "Rows per INSERT batch.",
810
- "name": "batch-size",
811
- "default": 1000,
956
+ "version": {
957
+ "description": "Specific version to upgrade to (default: latest)",
958
+ "name": "version",
812
959
  "hasDynamicHelp": false,
813
960
  "multiple": false,
814
961
  "type": "option"
815
962
  },
816
- "no-data": {
817
- "description": "Emit schema only, no data inserts.",
818
- "name": "no-data",
963
+ "verbose": {
964
+ "char": "v",
965
+ "description": "Show detailed output",
966
+ "name": "verbose",
819
967
  "allowNo": false,
820
968
  "type": "boolean"
821
969
  },
822
- "verbose": {
823
- "description": "Print per-object progress.",
824
- "name": "verbose",
970
+ "non-interactive": {
971
+ "description": "Skip interactive prompts; post-upgrade hooks use environment variables / defaults (for CI/headless upgrades)",
972
+ "name": "non-interactive",
825
973
  "allowNo": false,
826
974
  "type": "boolean"
827
975
  },
828
- "dry-run": {
829
- "description": "Print to stdout instead of writing a file.",
830
- "name": "dry-run",
976
+ "dangerously-ignore-dbl-underscore-schema-rule": {
977
+ "hidden": true,
978
+ "name": "dangerously-ignore-dbl-underscore-schema-rule",
831
979
  "allowNo": false,
832
980
  "type": "boolean"
833
981
  }
834
982
  },
835
983
  "hasDynamicHelp": false,
836
984
  "hiddenAliases": [],
837
- "id": "baseline:build",
985
+ "id": "app:upgrade",
838
986
  "pluginAlias": "@memberjunction/cli",
839
987
  "pluginName": "@memberjunction/cli",
840
988
  "pluginType": "core",
@@ -844,114 +992,31 @@
844
992
  "relativePath": [
845
993
  "dist",
846
994
  "commands",
847
- "baseline",
848
- "build.js"
995
+ "app",
996
+ "upgrade.js"
849
997
  ]
850
998
  },
851
- "baseline:compare": {
999
+ "app:usage": {
852
1000
  "aliases": [],
853
1001
  "args": {},
854
- "description": "Deterministically compare two databases object-by-object and row-by-row.",
855
- "examples": [
856
- "<%= config.bin %> <%= command.id %> --left MJ_BL_Stack --right MJ_BL_New",
857
- "<%= config.bin %> <%= command.id %> --left A --right B --row-compare counts",
858
- "<%= config.bin %> <%= command.id %> --left A --right B --fail-on-diff --out ./diffs/"
859
- ],
1002
+ "description": "Show usage, flags, examples, and runtime hints for every `mj app` command.",
860
1003
  "flags": {
861
- "left": {
862
- "description": "Left database name (override).",
863
- "name": "left",
864
- "required": true,
865
- "hasDynamicHelp": false,
866
- "multiple": false,
867
- "type": "option"
868
- },
869
- "right": {
870
- "description": "Right database name (override).",
871
- "name": "right",
872
- "required": true,
873
- "hasDynamicHelp": false,
874
- "multiple": false,
875
- "type": "option"
876
- },
877
- "dialect": {
878
- "description": "Dialect of both DBs (must match).",
879
- "name": "dialect",
880
- "default": "mssql",
881
- "hasDynamicHelp": false,
882
- "multiple": false,
883
- "options": [
884
- "mssql",
885
- "postgres"
886
- ],
887
- "type": "option"
888
- },
889
- "row-compare": {
890
- "description": "Row comparison mode.",
891
- "name": "row-compare",
892
- "default": "full",
893
- "hasDynamicHelp": false,
894
- "multiple": false,
895
- "options": [
896
- "full",
897
- "hash",
898
- "counts",
899
- "none"
900
- ],
901
- "type": "option"
902
- },
903
- "row-hash-algo": {
904
- "description": "Hash algorithm when --row-compare hash.",
905
- "name": "row-hash-algo",
906
- "default": "sha256",
1004
+ "format": {
1005
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
1006
+ "name": "format",
907
1007
  "hasDynamicHelp": false,
908
1008
  "multiple": false,
909
1009
  "options": [
910
- "sha256",
911
- "md5",
912
- "checksum_agg"
1010
+ "text",
1011
+ "json",
1012
+ "md"
913
1013
  ],
914
1014
  "type": "option"
915
- },
916
- "ignore": {
917
- "description": "Regex of object names to skip.",
918
- "name": "ignore",
919
- "default": "^flyway_schema_history$",
920
- "hasDynamicHelp": false,
921
- "multiple": false,
922
- "type": "option"
923
- },
924
- "sample-limit": {
925
- "description": "Maximum row diffs to capture per table.",
926
- "name": "sample-limit",
927
- "default": 100,
928
- "hasDynamicHelp": false,
929
- "multiple": false,
930
- "type": "option"
931
- },
932
- "out": {
933
- "description": "Directory to write JSON + Markdown reports.",
934
- "name": "out",
935
- "hasDynamicHelp": false,
936
- "multiple": false,
937
- "type": "option"
938
- },
939
- "fail-on-diff": {
940
- "description": "Exit non-zero if any diff is found.",
941
- "name": "fail-on-diff",
942
- "allowNo": false,
943
- "type": "boolean"
944
- },
945
- "verbose": {
946
- "description": "Print per-phase progress.",
947
- "name": "verbose",
948
- "allowNo": false,
949
- "type": "boolean"
950
1015
  }
951
1016
  },
952
1017
  "hasDynamicHelp": false,
953
1018
  "hiddenAliases": [],
954
- "id": "baseline:compare",
1019
+ "id": "app:usage",
955
1020
  "pluginAlias": "@memberjunction/cli",
956
1021
  "pluginName": "@memberjunction/cli",
957
1022
  "pluginType": "core",
@@ -961,111 +1026,75 @@
961
1026
  "relativePath": [
962
1027
  "dist",
963
1028
  "commands",
964
- "baseline",
965
- "compare.js"
1029
+ "app",
1030
+ "usage.js"
966
1031
  ]
967
1032
  },
968
- "baseline:roundtrip": {
1033
+ "bundle": {
969
1034
  "aliases": [],
970
1035
  "args": {},
971
- "description": "Build a baseline from a V-stack database, apply it to a fresh DB, and prove byte-equivalence.",
1036
+ "description": "Create a self-contained MemberJunction distribution zip for offline/air-gapped installs",
972
1037
  "examples": [
973
- "<%= config.bin %> <%= command.id %> --source MJ_BL_Stack --target MJ_BL_New # auto: within-major",
974
- "<%= config.bin %> <%= command.id %> --baseline-version 6.0 --source MJ_BL_Stack --target MJ_BL_New # explicit major-boundary",
975
- "<%= config.bin %> <%= command.id %> --source-dir ./migrations/v5 --source MJ_BL_Stack --target MJ_BL_New"
976
- ],
977
- "flags": {
978
- "baseline-version": {
979
- "description": "Major.Minor version stamp. Omit to auto-detect from --source-dir (within-major rebaseline).",
980
- "name": "baseline-version",
981
- "hasDynamicHelp": false,
982
- "multiple": false,
983
- "type": "option"
984
- },
985
- "source-dir": {
986
- "description": "Migrations source directory used to auto-detect baseline version + timestamp when --baseline-version is omitted. Defaults to the highest migrations/v*/ near cwd.",
987
- "name": "source-dir",
988
- "hasDynamicHelp": false,
989
- "multiple": false,
990
- "type": "option"
991
- },
992
- "description": {
993
- "description": "Header description.",
994
- "name": "description",
995
- "default": "MemberJunction Baseline",
996
- "hasDynamicHelp": false,
997
- "multiple": false,
998
- "type": "option"
999
- },
1000
- "dialect": {
1001
- "description": "Dialect to test. PG path runs the converter via /pg-migrate first.",
1002
- "name": "dialect",
1003
- "default": "mssql",
1004
- "hasDynamicHelp": false,
1005
- "multiple": false,
1006
- "options": [
1007
- "mssql",
1008
- "postgres"
1009
- ],
1010
- "type": "option"
1011
- },
1012
- "source": {
1013
- "description": "Database name with the V-stack already applied (used as comparison gold standard).",
1014
- "name": "source",
1038
+ "<%= config.bin %> <%= command.id %> --out ./mj-install.zip",
1039
+ "<%= config.bin %> <%= command.id %> --tag v5.38.0 --out ./mj-install.zip",
1040
+ "<%= config.bin %> <%= command.id %> --source . --out ./mj-install.zip",
1041
+ "<%= config.bin %> <%= command.id %> --tag v5.38.0 --with-migrations --out ./mj-install.zip",
1042
+ "<%= config.bin %> <%= command.id %> --with-migrations --db-platform postgresql --out ./mj-install.zip"
1043
+ ],
1044
+ "flags": {
1045
+ "out": {
1046
+ "char": "o",
1047
+ "description": "Output zip path",
1048
+ "name": "out",
1015
1049
  "required": true,
1016
1050
  "hasDynamicHelp": false,
1017
1051
  "multiple": false,
1018
1052
  "type": "option"
1019
1053
  },
1020
- "target": {
1021
- "description": "Empty database name to apply the new baseline to.",
1022
- "name": "target",
1023
- "required": true,
1054
+ "tag": {
1055
+ "char": "t",
1056
+ "description": "Release tag to bundle (e.g. v5.38.0). Defaults to the latest branch tip.",
1057
+ "name": "tag",
1024
1058
  "hasDynamicHelp": false,
1025
1059
  "multiple": false,
1026
1060
  "type": "option"
1027
1061
  },
1028
- "out": {
1029
- "description": "Output directory for baseline file + reports.",
1030
- "name": "out",
1031
- "default": ".",
1062
+ "source": {
1063
+ "description": "Bundle from a local working-tree directory instead of fetching from the repo",
1064
+ "name": "source",
1032
1065
  "hasDynamicHelp": false,
1033
1066
  "multiple": false,
1034
1067
  "type": "option"
1035
1068
  },
1036
- "apply-cmd": {
1037
- "description": "Command template to apply the baseline. Tokens: {file} {database}. Defaults to sqlcmd.",
1038
- "name": "apply-cmd",
1039
- "hasDynamicHelp": false,
1040
- "multiple": false,
1041
- "type": "option"
1069
+ "with-migrations": {
1070
+ "description": "Include the migration tree(s) so an air-gapped \"mj migrate\" can run offline. Ships both SQL Server and PostgreSQL trees by default.",
1071
+ "name": "with-migrations",
1072
+ "allowNo": false,
1073
+ "type": "boolean"
1042
1074
  },
1043
- "row-compare": {
1044
- "description": "Row compare mode passed to the comparator.",
1045
- "name": "row-compare",
1046
- "default": "full",
1075
+ "db-platform": {
1076
+ "dependsOn": [
1077
+ "with-migrations"
1078
+ ],
1079
+ "description": "With --with-migrations, ship only this platform's migration tree instead of both",
1080
+ "name": "db-platform",
1047
1081
  "hasDynamicHelp": false,
1048
1082
  "multiple": false,
1049
1083
  "options": [
1050
- "full",
1051
- "hash",
1052
- "counts",
1053
- "none"
1084
+ "sqlserver",
1085
+ "postgresql"
1054
1086
  ],
1055
1087
  "type": "option"
1056
1088
  },
1057
- "fail-on-diff": {
1058
- "name": "fail-on-diff",
1059
- "allowNo": false,
1060
- "type": "boolean"
1061
- },
1062
- "keep-target": {
1063
- "description": "Do not drop the target database after run (useful for debugging diffs).",
1064
- "name": "keep-target",
1089
+ "no-claude-pack": {
1090
+ "description": "Exclude the Claude Code pack (CLAUDE.md + .claude/) from the bundle. By default the pack is included so air-gapped installs get the same out-of-the-box Claude experience as online installs.",
1091
+ "name": "no-claude-pack",
1065
1092
  "allowNo": false,
1066
1093
  "type": "boolean"
1067
1094
  },
1068
1095
  "verbose": {
1096
+ "char": "v",
1097
+ "description": "Show detailed output",
1069
1098
  "name": "verbose",
1070
1099
  "allowNo": false,
1071
1100
  "type": "boolean"
@@ -1073,7 +1102,7 @@
1073
1102
  },
1074
1103
  "hasDynamicHelp": false,
1075
1104
  "hiddenAliases": [],
1076
- "id": "baseline:roundtrip",
1105
+ "id": "bundle",
1077
1106
  "pluginAlias": "@memberjunction/cli",
1078
1107
  "pluginName": "@memberjunction/cli",
1079
1108
  "pluginType": "core",
@@ -1083,14 +1112,14 @@
1083
1112
  "relativePath": [
1084
1113
  "dist",
1085
1114
  "commands",
1086
- "baseline",
1087
- "roundtrip.js"
1115
+ "bundle",
1116
+ "index.js"
1088
1117
  ]
1089
1118
  },
1090
- "baseline:usage": {
1119
+ "bundle:usage": {
1091
1120
  "aliases": [],
1092
1121
  "args": {},
1093
- "description": "Show usage, flags, examples, and runtime hints for every `mj baseline` command.",
1122
+ "description": "Show usage, flags, examples, and runtime hints for every `mj bundle` command.",
1094
1123
  "flags": {
1095
1124
  "format": {
1096
1125
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -1107,7 +1136,7 @@
1107
1136
  },
1108
1137
  "hasDynamicHelp": false,
1109
1138
  "hiddenAliases": [],
1110
- "id": "baseline:usage",
1139
+ "id": "bundle:usage",
1111
1140
  "pluginAlias": "@memberjunction/cli",
1112
1141
  "pluginName": "@memberjunction/cli",
1113
1142
  "pluginType": "core",
@@ -1117,50 +1146,21 @@
1117
1146
  "relativePath": [
1118
1147
  "dist",
1119
1148
  "commands",
1120
- "baseline",
1149
+ "bundle",
1121
1150
  "usage.js"
1122
1151
  ]
1123
1152
  },
1124
- "artifacts:reclassify": {
1153
+ "clean": {
1125
1154
  "aliases": [],
1126
1155
  "args": {},
1127
- "description": "Upgrade-recovery utility for v5.35 artifact unification. Re-evaluates rows whose TypeID is the deleted JSON fallback but whose actual content does not parse as JSON. Normally a no-op: the v5.35 backfill migration handles this automatically. This command is only relevant when the migration ran BEFORE the artifact-type metadata (Generic Text / Generic Binary) was pushed via `mj sync push`, in which case the migration prints a notice telling you to run this. Reports \"no candidates\" once everything is reconciled. Dry-run by default; --apply writes through Record Changes.",
1156
+ "description": "Resets the MemberJunction database to a pre-installation state",
1128
1157
  "examples": [
1129
- "<%= config.bin %> <%= command.id %>",
1130
- "<%= config.bin %> <%= command.id %> --apply --limit 50"
1158
+ "<%= config.bin %> <%= command.id %>\n"
1131
1159
  ],
1132
1160
  "flags": {
1133
- "conversation-id": {
1134
- "description": "Scope to artifacts attached to the given conversation.",
1135
- "name": "conversation-id",
1136
- "hasDynamicHelp": false,
1137
- "multiple": false,
1138
- "type": "option"
1139
- },
1140
- "since": {
1141
- "description": "Scope to artifacts created on/after this ISO date.",
1142
- "name": "since",
1143
- "hasDynamicHelp": false,
1144
- "multiple": false,
1145
- "type": "option"
1146
- },
1147
- "limit": {
1148
- "description": "Maximum number of rows to inspect.",
1149
- "name": "limit",
1150
- "default": 100,
1151
- "hasDynamicHelp": false,
1152
- "multiple": false,
1153
- "type": "option"
1154
- },
1155
- "apply": {
1156
- "description": "Write changes. Without this flag, this command only reports what it would do.",
1157
- "name": "apply",
1158
- "allowNo": false,
1159
- "type": "boolean"
1160
- },
1161
1161
  "verbose": {
1162
1162
  "char": "v",
1163
- "description": "Print every candidate row, not just the summary.",
1163
+ "description": "Enable additional logging",
1164
1164
  "name": "verbose",
1165
1165
  "allowNo": false,
1166
1166
  "type": "boolean"
@@ -1168,7 +1168,7 @@
1168
1168
  },
1169
1169
  "hasDynamicHelp": false,
1170
1170
  "hiddenAliases": [],
1171
- "id": "artifacts:reclassify",
1171
+ "id": "clean",
1172
1172
  "pluginAlias": "@memberjunction/cli",
1173
1173
  "pluginName": "@memberjunction/cli",
1174
1174
  "pluginType": "core",
@@ -1178,14 +1178,14 @@
1178
1178
  "relativePath": [
1179
1179
  "dist",
1180
1180
  "commands",
1181
- "artifacts",
1182
- "reclassify.js"
1181
+ "clean",
1182
+ "index.js"
1183
1183
  ]
1184
1184
  },
1185
- "artifacts:usage": {
1185
+ "clean:usage": {
1186
1186
  "aliases": [],
1187
1187
  "args": {},
1188
- "description": "Show usage, flags, examples, and runtime hints for every `mj artifacts` command.",
1188
+ "description": "Show usage, flags, examples, and runtime hints for every `mj clean` command.",
1189
1189
  "flags": {
1190
1190
  "format": {
1191
1191
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -1202,7 +1202,7 @@
1202
1202
  },
1203
1203
  "hasDynamicHelp": false,
1204
1204
  "hiddenAliases": [],
1205
- "id": "artifacts:usage",
1205
+ "id": "clean:usage",
1206
1206
  "pluginAlias": "@memberjunction/cli",
1207
1207
  "pluginName": "@memberjunction/cli",
1208
1208
  "pluginType": "core",
@@ -1212,7 +1212,7 @@
1212
1212
  "relativePath": [
1213
1213
  "dist",
1214
1214
  "commands",
1215
- "artifacts",
1215
+ "clean",
1216
1216
  "usage.js"
1217
1217
  ]
1218
1218
  },
@@ -5461,16 +5461,172 @@
5461
5461
  "hasDynamicHelp": false,
5462
5462
  "multiple": false,
5463
5463
  "options": [
5464
- "text",
5464
+ "text",
5465
+ "json",
5466
+ "md"
5467
+ ],
5468
+ "type": "option"
5469
+ }
5470
+ },
5471
+ "hasDynamicHelp": false,
5472
+ "hiddenAliases": [],
5473
+ "id": "update:usage",
5474
+ "pluginAlias": "@memberjunction/cli",
5475
+ "pluginName": "@memberjunction/cli",
5476
+ "pluginType": "core",
5477
+ "strict": true,
5478
+ "enableJsonFlag": false,
5479
+ "isESM": true,
5480
+ "relativePath": [
5481
+ "dist",
5482
+ "commands",
5483
+ "update",
5484
+ "usage.js"
5485
+ ]
5486
+ },
5487
+ "ai:actions:list": {
5488
+ "aliases": [],
5489
+ "args": {},
5490
+ "description": "List available AI actions",
5491
+ "examples": [
5492
+ "<%= config.bin %> <%= command.id %>",
5493
+ "<%= config.bin %> <%= command.id %> --output=table",
5494
+ "<%= config.bin %> <%= command.id %> --output=json"
5495
+ ],
5496
+ "flags": {
5497
+ "format": {
5498
+ "description": "Output format: text (human), json (machine-readable), md (Markdown). Defaults to human output on a terminal and json when stdout is piped. Legacy spellings (console/markdown/compact/table) are accepted.",
5499
+ "name": "format",
5500
+ "hasDynamicHelp": false,
5501
+ "multiple": false,
5502
+ "options": [
5503
+ "text",
5504
+ "json",
5505
+ "md",
5506
+ "human",
5507
+ "console",
5508
+ "markdown",
5509
+ "compact",
5510
+ "table"
5511
+ ],
5512
+ "type": "option"
5513
+ },
5514
+ "output": {
5515
+ "char": "o",
5516
+ "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
5517
+ "name": "output",
5518
+ "default": "compact",
5519
+ "hasDynamicHelp": false,
5520
+ "multiple": false,
5521
+ "options": [
5522
+ "compact",
5523
+ "json",
5524
+ "table"
5525
+ ],
5526
+ "type": "option"
5527
+ }
5528
+ },
5529
+ "hasDynamicHelp": false,
5530
+ "hiddenAliases": [],
5531
+ "id": "ai:actions:list",
5532
+ "pluginAlias": "@memberjunction/cli",
5533
+ "pluginName": "@memberjunction/cli",
5534
+ "pluginType": "core",
5535
+ "strict": true,
5536
+ "enableJsonFlag": false,
5537
+ "isESM": true,
5538
+ "relativePath": [
5539
+ "dist",
5540
+ "commands",
5541
+ "ai",
5542
+ "actions",
5543
+ "list.js"
5544
+ ]
5545
+ },
5546
+ "ai:actions:run": {
5547
+ "aliases": [],
5548
+ "args": {},
5549
+ "description": "Execute an AI action with parameters",
5550
+ "examples": [
5551
+ "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
5552
+ "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
5553
+ "<%= config.bin %> <%= command.id %> -n \"Send Single Message\" --param \"To=user@example.com\" --param \"Subject=Test\" --param \"Body=Hello\" --param \"MessageType=Email\" --param \"Provider=SendGrid\"",
5554
+ "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
5555
+ ],
5556
+ "flags": {
5557
+ "name": {
5558
+ "char": "n",
5559
+ "description": "Action name",
5560
+ "name": "name",
5561
+ "required": true,
5562
+ "hasDynamicHelp": false,
5563
+ "multiple": false,
5564
+ "type": "option"
5565
+ },
5566
+ "param": {
5567
+ "char": "p",
5568
+ "description": "Action parameters in key=value format",
5569
+ "name": "param",
5570
+ "hasDynamicHelp": false,
5571
+ "multiple": true,
5572
+ "type": "option"
5573
+ },
5574
+ "dry-run": {
5575
+ "description": "Validate without executing",
5576
+ "name": "dry-run",
5577
+ "allowNo": false,
5578
+ "type": "boolean"
5579
+ },
5580
+ "format": {
5581
+ "description": "Output format: text (human), json (machine-readable), md (Markdown). Defaults to human output on a terminal and json when stdout is piped. Legacy spellings (console/markdown/compact/table) are accepted.",
5582
+ "name": "format",
5583
+ "hasDynamicHelp": false,
5584
+ "multiple": false,
5585
+ "options": [
5586
+ "text",
5587
+ "json",
5588
+ "md",
5589
+ "human",
5590
+ "console",
5591
+ "markdown",
5592
+ "compact",
5593
+ "table"
5594
+ ],
5595
+ "type": "option"
5596
+ },
5597
+ "output": {
5598
+ "char": "o",
5599
+ "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
5600
+ "name": "output",
5601
+ "default": "compact",
5602
+ "hasDynamicHelp": false,
5603
+ "multiple": false,
5604
+ "options": [
5605
+ "compact",
5465
5606
  "json",
5466
- "md"
5607
+ "table"
5467
5608
  ],
5468
5609
  "type": "option"
5610
+ },
5611
+ "verbose": {
5612
+ "char": "v",
5613
+ "description": "Show detailed execution information",
5614
+ "name": "verbose",
5615
+ "allowNo": false,
5616
+ "type": "boolean"
5617
+ },
5618
+ "timeout": {
5619
+ "description": "Execution timeout in milliseconds",
5620
+ "name": "timeout",
5621
+ "default": 300000,
5622
+ "hasDynamicHelp": false,
5623
+ "multiple": false,
5624
+ "type": "option"
5469
5625
  }
5470
5626
  },
5471
5627
  "hasDynamicHelp": false,
5472
5628
  "hiddenAliases": [],
5473
- "id": "update:usage",
5629
+ "id": "ai:actions:run",
5474
5630
  "pluginAlias": "@memberjunction/cli",
5475
5631
  "pluginName": "@memberjunction/cli",
5476
5632
  "pluginType": "core",
@@ -5480,14 +5636,15 @@
5480
5636
  "relativePath": [
5481
5637
  "dist",
5482
5638
  "commands",
5483
- "update",
5484
- "usage.js"
5639
+ "ai",
5640
+ "actions",
5641
+ "run.js"
5485
5642
  ]
5486
5643
  },
5487
- "ai:actions:list": {
5644
+ "ai:agents:list": {
5488
5645
  "aliases": [],
5489
5646
  "args": {},
5490
- "description": "List available AI actions",
5647
+ "description": "List available AI agents",
5491
5648
  "examples": [
5492
5649
  "<%= config.bin %> <%= command.id %>",
5493
5650
  "<%= config.bin %> <%= command.id %> --output=table",
@@ -5528,7 +5685,7 @@
5528
5685
  },
5529
5686
  "hasDynamicHelp": false,
5530
5687
  "hiddenAliases": [],
5531
- "id": "ai:actions:list",
5688
+ "id": "ai:agents:list",
5532
5689
  "pluginAlias": "@memberjunction/cli",
5533
5690
  "pluginName": "@memberjunction/cli",
5534
5691
  "pluginType": "core",
@@ -5539,41 +5696,47 @@
5539
5696
  "dist",
5540
5697
  "commands",
5541
5698
  "ai",
5542
- "actions",
5699
+ "agents",
5543
5700
  "list.js"
5544
5701
  ]
5545
5702
  },
5546
- "ai:actions:run": {
5703
+ "ai:agents:run": {
5547
5704
  "aliases": [],
5548
5705
  "args": {},
5549
- "description": "Execute an AI action with parameters",
5706
+ "description": "Execute an AI agent with a prompt or start interactive chat",
5550
5707
  "examples": [
5551
- "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
5552
- "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
5553
- "<%= config.bin %> <%= command.id %> -n \"Send Single Message\" --param \"To=user@example.com\" --param \"Subject=Test\" --param \"Body=Hello\" --param \"MessageType=Email\" --param \"Provider=SendGrid\"",
5554
- "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
5708
+ "<%= config.bin %> <%= command.id %> -a \"Skip: Requirements Expert\" -p \"Create a dashboard for sales metrics\"",
5709
+ "<%= config.bin %> <%= command.id %> -a \"Child Component Generator Sub-agent\" --chat",
5710
+ "<%= config.bin %> <%= command.id %> -a \"Skip: Technical Design Expert\" -p \"Build a React component\" --verbose --timeout=600000"
5555
5711
  ],
5556
5712
  "flags": {
5557
- "name": {
5558
- "char": "n",
5559
- "description": "Action name",
5560
- "name": "name",
5713
+ "agent": {
5714
+ "char": "a",
5715
+ "description": "Agent name",
5716
+ "name": "agent",
5561
5717
  "required": true,
5562
5718
  "hasDynamicHelp": false,
5563
5719
  "multiple": false,
5564
5720
  "type": "option"
5565
5721
  },
5566
- "param": {
5722
+ "prompt": {
5567
5723
  "char": "p",
5568
- "description": "Action parameters in key=value format",
5569
- "name": "param",
5724
+ "description": "Prompt to execute",
5725
+ "exclusive": [
5726
+ "chat"
5727
+ ],
5728
+ "name": "prompt",
5570
5729
  "hasDynamicHelp": false,
5571
- "multiple": true,
5730
+ "multiple": false,
5572
5731
  "type": "option"
5573
5732
  },
5574
- "dry-run": {
5575
- "description": "Validate without executing",
5576
- "name": "dry-run",
5733
+ "chat": {
5734
+ "char": "c",
5735
+ "description": "Start interactive chat mode",
5736
+ "exclusive": [
5737
+ "prompt"
5738
+ ],
5739
+ "name": "chat",
5577
5740
  "allowNo": false,
5578
5741
  "type": "boolean"
5579
5742
  },
@@ -5626,7 +5789,7 @@
5626
5789
  },
5627
5790
  "hasDynamicHelp": false,
5628
5791
  "hiddenAliases": [],
5629
- "id": "ai:actions:run",
5792
+ "id": "ai:agents:run",
5630
5793
  "pluginAlias": "@memberjunction/cli",
5631
5794
  "pluginName": "@memberjunction/cli",
5632
5795
  "pluginType": "core",
@@ -5637,7 +5800,7 @@
5637
5800
  "dist",
5638
5801
  "commands",
5639
5802
  "ai",
5640
- "actions",
5803
+ "agents",
5641
5804
  "run.js"
5642
5805
  ]
5643
5806
  },
@@ -5874,169 +6037,6 @@
5874
6037
  "index.js"
5875
6038
  ]
5876
6039
  },
5877
- "ai:agents:list": {
5878
- "aliases": [],
5879
- "args": {},
5880
- "description": "List available AI agents",
5881
- "examples": [
5882
- "<%= config.bin %> <%= command.id %>",
5883
- "<%= config.bin %> <%= command.id %> --output=table",
5884
- "<%= config.bin %> <%= command.id %> --output=json"
5885
- ],
5886
- "flags": {
5887
- "format": {
5888
- "description": "Output format: text (human), json (machine-readable), md (Markdown). Defaults to human output on a terminal and json when stdout is piped. Legacy spellings (console/markdown/compact/table) are accepted.",
5889
- "name": "format",
5890
- "hasDynamicHelp": false,
5891
- "multiple": false,
5892
- "options": [
5893
- "text",
5894
- "json",
5895
- "md",
5896
- "human",
5897
- "console",
5898
- "markdown",
5899
- "compact",
5900
- "table"
5901
- ],
5902
- "type": "option"
5903
- },
5904
- "output": {
5905
- "char": "o",
5906
- "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
5907
- "name": "output",
5908
- "default": "compact",
5909
- "hasDynamicHelp": false,
5910
- "multiple": false,
5911
- "options": [
5912
- "compact",
5913
- "json",
5914
- "table"
5915
- ],
5916
- "type": "option"
5917
- }
5918
- },
5919
- "hasDynamicHelp": false,
5920
- "hiddenAliases": [],
5921
- "id": "ai:agents:list",
5922
- "pluginAlias": "@memberjunction/cli",
5923
- "pluginName": "@memberjunction/cli",
5924
- "pluginType": "core",
5925
- "strict": true,
5926
- "enableJsonFlag": false,
5927
- "isESM": true,
5928
- "relativePath": [
5929
- "dist",
5930
- "commands",
5931
- "ai",
5932
- "agents",
5933
- "list.js"
5934
- ]
5935
- },
5936
- "ai:agents:run": {
5937
- "aliases": [],
5938
- "args": {},
5939
- "description": "Execute an AI agent with a prompt or start interactive chat",
5940
- "examples": [
5941
- "<%= config.bin %> <%= command.id %> -a \"Skip: Requirements Expert\" -p \"Create a dashboard for sales metrics\"",
5942
- "<%= config.bin %> <%= command.id %> -a \"Child Component Generator Sub-agent\" --chat",
5943
- "<%= config.bin %> <%= command.id %> -a \"Skip: Technical Design Expert\" -p \"Build a React component\" --verbose --timeout=600000"
5944
- ],
5945
- "flags": {
5946
- "agent": {
5947
- "char": "a",
5948
- "description": "Agent name",
5949
- "name": "agent",
5950
- "required": true,
5951
- "hasDynamicHelp": false,
5952
- "multiple": false,
5953
- "type": "option"
5954
- },
5955
- "prompt": {
5956
- "char": "p",
5957
- "description": "Prompt to execute",
5958
- "exclusive": [
5959
- "chat"
5960
- ],
5961
- "name": "prompt",
5962
- "hasDynamicHelp": false,
5963
- "multiple": false,
5964
- "type": "option"
5965
- },
5966
- "chat": {
5967
- "char": "c",
5968
- "description": "Start interactive chat mode",
5969
- "exclusive": [
5970
- "prompt"
5971
- ],
5972
- "name": "chat",
5973
- "allowNo": false,
5974
- "type": "boolean"
5975
- },
5976
- "format": {
5977
- "description": "Output format: text (human), json (machine-readable), md (Markdown). Defaults to human output on a terminal and json when stdout is piped. Legacy spellings (console/markdown/compact/table) are accepted.",
5978
- "name": "format",
5979
- "hasDynamicHelp": false,
5980
- "multiple": false,
5981
- "options": [
5982
- "text",
5983
- "json",
5984
- "md",
5985
- "human",
5986
- "console",
5987
- "markdown",
5988
- "compact",
5989
- "table"
5990
- ],
5991
- "type": "option"
5992
- },
5993
- "output": {
5994
- "char": "o",
5995
- "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
5996
- "name": "output",
5997
- "default": "compact",
5998
- "hasDynamicHelp": false,
5999
- "multiple": false,
6000
- "options": [
6001
- "compact",
6002
- "json",
6003
- "table"
6004
- ],
6005
- "type": "option"
6006
- },
6007
- "verbose": {
6008
- "char": "v",
6009
- "description": "Show detailed execution information",
6010
- "name": "verbose",
6011
- "allowNo": false,
6012
- "type": "boolean"
6013
- },
6014
- "timeout": {
6015
- "description": "Execution timeout in milliseconds",
6016
- "name": "timeout",
6017
- "default": 300000,
6018
- "hasDynamicHelp": false,
6019
- "multiple": false,
6020
- "type": "option"
6021
- }
6022
- },
6023
- "hasDynamicHelp": false,
6024
- "hiddenAliases": [],
6025
- "id": "ai:agents:run",
6026
- "pluginAlias": "@memberjunction/cli",
6027
- "pluginName": "@memberjunction/cli",
6028
- "pluginType": "core",
6029
- "strict": true,
6030
- "enableJsonFlag": false,
6031
- "isESM": true,
6032
- "relativePath": [
6033
- "dist",
6034
- "commands",
6035
- "ai",
6036
- "agents",
6037
- "run.js"
6038
- ]
6039
- },
6040
6040
  "ai:prompts:list": {
6041
6041
  "aliases": [],
6042
6042
  "args": {},
@@ -6315,6 +6315,13 @@
6315
6315
  "multiple": true,
6316
6316
  "type": "option"
6317
6317
  },
6318
+ "apps": {
6319
+ "description": "Admit a member's app-shell packages, which the packages-rooted rule drops by default: <member>=<glob>[,<glob>] (e.g. Skip-Brain=apps/API,apps/MJAPI). The member must be detected or --include'd; names must be unique across the workspace.",
6320
+ "name": "apps",
6321
+ "hasDynamicHelp": false,
6322
+ "multiple": true,
6323
+ "type": "option"
6324
+ },
6318
6325
  "install": {
6319
6326
  "description": "Run `pnpm install` at the parent after generating (disable with --no-install)",
6320
6327
  "name": "install",
@@ -6840,5 +6847,5 @@
6840
6847
  ]
6841
6848
  }
6842
6849
  },
6843
- "version": "6.1.0-edge.6"
6850
+ "version": "6.1.0-edge.7"
6844
6851
  }