@memberjunction/cli 4.4.0 → 5.1.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.
Files changed (78) hide show
  1. package/README.md +130 -0
  2. package/dist/commands/app/check-updates.d.ts +13 -0
  3. package/dist/commands/app/check-updates.d.ts.map +1 -0
  4. package/dist/commands/app/check-updates.js +54 -0
  5. package/dist/commands/app/check-updates.js.map +1 -0
  6. package/dist/commands/app/disable.d.ts +16 -0
  7. package/dist/commands/app/disable.d.ts.map +1 -0
  8. package/dist/commands/app/disable.js +47 -0
  9. package/dist/commands/app/disable.js.map +1 -0
  10. package/dist/commands/app/enable.d.ts +16 -0
  11. package/dist/commands/app/enable.d.ts.map +1 -0
  12. package/dist/commands/app/enable.js +47 -0
  13. package/dist/commands/app/enable.js.map +1 -0
  14. package/dist/commands/app/info.d.ts +16 -0
  15. package/dist/commands/app/info.d.ts.map +1 -0
  16. package/dist/commands/app/info.js +64 -0
  17. package/dist/commands/app/info.js.map +1 -0
  18. package/dist/commands/app/install.d.ts +21 -0
  19. package/dist/commands/app/install.d.ts.map +1 -0
  20. package/dist/commands/app/install.js +54 -0
  21. package/dist/commands/app/install.js.map +1 -0
  22. package/dist/commands/app/list.d.ts +16 -0
  23. package/dist/commands/app/list.d.ts.map +1 -0
  24. package/dist/commands/app/list.js +60 -0
  25. package/dist/commands/app/list.js.map +1 -0
  26. package/dist/commands/app/remove.d.ts +22 -0
  27. package/dist/commands/app/remove.d.ts.map +1 -0
  28. package/dist/commands/app/remove.js +66 -0
  29. package/dist/commands/app/remove.js.map +1 -0
  30. package/dist/commands/app/upgrade.d.ts +20 -0
  31. package/dist/commands/app/upgrade.d.ts.map +1 -0
  32. package/dist/commands/app/upgrade.js +52 -0
  33. package/dist/commands/app/upgrade.js.map +1 -0
  34. package/dist/commands/clean/index.d.ts +0 -2
  35. package/dist/commands/clean/index.d.ts.map +1 -1
  36. package/dist/commands/clean/index.js +31 -19
  37. package/dist/commands/clean/index.js.map +1 -1
  38. package/dist/commands/codegen/5-0-fix-entity-names.d.ts +17 -0
  39. package/dist/commands/codegen/5-0-fix-entity-names.d.ts.map +1 -0
  40. package/dist/commands/codegen/5-0-fix-entity-names.js +104 -0
  41. package/dist/commands/codegen/5-0-fix-entity-names.js.map +1 -0
  42. package/dist/commands/codegen/5-0-fix-html-entity-names.d.ts +17 -0
  43. package/dist/commands/codegen/5-0-fix-html-entity-names.d.ts.map +1 -0
  44. package/dist/commands/codegen/5-0-fix-html-entity-names.js +92 -0
  45. package/dist/commands/codegen/5-0-fix-html-entity-names.js.map +1 -0
  46. package/dist/commands/codegen/5-0-fix-metadata-names.d.ts +17 -0
  47. package/dist/commands/codegen/5-0-fix-metadata-names.d.ts.map +1 -0
  48. package/dist/commands/codegen/5-0-fix-metadata-names.js +93 -0
  49. package/dist/commands/codegen/5-0-fix-metadata-names.js.map +1 -0
  50. package/dist/commands/codegen/index.d.ts +4 -1
  51. package/dist/commands/codegen/index.d.ts.map +1 -1
  52. package/dist/commands/codegen/index.js +30 -5
  53. package/dist/commands/codegen/index.js.map +1 -1
  54. package/dist/commands/codegen/manifest.d.ts +4 -1
  55. package/dist/commands/codegen/manifest.d.ts.map +1 -1
  56. package/dist/commands/codegen/manifest.js +34 -11
  57. package/dist/commands/codegen/manifest.js.map +1 -1
  58. package/dist/commands/migrate/index.d.ts +5 -1
  59. package/dist/commands/migrate/index.d.ts.map +1 -1
  60. package/dist/commands/migrate/index.js +102 -229
  61. package/dist/commands/migrate/index.js.map +1 -1
  62. package/dist/commands/sync/init.js +1 -1
  63. package/dist/commands/sync/init.js.map +1 -1
  64. package/dist/commands/sync/pull.js +4 -4
  65. package/dist/commands/sync/pull.js.map +1 -1
  66. package/dist/config.d.ts +154 -4
  67. package/dist/config.d.ts.map +1 -1
  68. package/dist/config.js +81 -48
  69. package/dist/config.js.map +1 -1
  70. package/dist/light-commands.d.ts +1 -1
  71. package/dist/light-commands.js +2 -2
  72. package/dist/light-commands.js.map +1 -1
  73. package/dist/utils/open-app-context.d.ts +48 -0
  74. package/dist/utils/open-app-context.d.ts.map +1 -0
  75. package/dist/utils/open-app-context.js +143 -0
  76. package/dist/utils/open-app-context.js.map +1 -0
  77. package/oclif.manifest.json +789 -247
  78. package/package.json +12 -12
@@ -22,65 +22,545 @@
22
22
  "index.js"
23
23
  ]
24
24
  },
25
+ "app:check-updates": {
26
+ "aliases": [],
27
+ "args": {},
28
+ "description": "Check for available upgrades for installed MJ Open Apps",
29
+ "examples": [
30
+ "<%= config.bin %> app check-updates"
31
+ ],
32
+ "flags": {},
33
+ "hasDynamicHelp": false,
34
+ "hiddenAliases": [],
35
+ "id": "app:check-updates",
36
+ "pluginAlias": "@memberjunction/cli",
37
+ "pluginName": "@memberjunction/cli",
38
+ "pluginType": "core",
39
+ "strict": true,
40
+ "enableJsonFlag": false,
41
+ "isESM": true,
42
+ "relativePath": [
43
+ "dist",
44
+ "commands",
45
+ "app",
46
+ "check-updates.js"
47
+ ]
48
+ },
49
+ "app:disable": {
50
+ "aliases": [],
51
+ "args": {
52
+ "name": {
53
+ "description": "Name of the installed app to disable",
54
+ "name": "name",
55
+ "required": true
56
+ }
57
+ },
58
+ "description": "Disable an installed MJ Open App without removing it",
59
+ "examples": [
60
+ "<%= config.bin %> app disable acme-crm"
61
+ ],
62
+ "flags": {},
63
+ "hasDynamicHelp": false,
64
+ "hiddenAliases": [],
65
+ "id": "app:disable",
66
+ "pluginAlias": "@memberjunction/cli",
67
+ "pluginName": "@memberjunction/cli",
68
+ "pluginType": "core",
69
+ "strict": true,
70
+ "enableJsonFlag": false,
71
+ "isESM": true,
72
+ "relativePath": [
73
+ "dist",
74
+ "commands",
75
+ "app",
76
+ "disable.js"
77
+ ]
78
+ },
79
+ "app:enable": {
80
+ "aliases": [],
81
+ "args": {
82
+ "name": {
83
+ "description": "Name of the installed app to enable",
84
+ "name": "name",
85
+ "required": true
86
+ }
87
+ },
88
+ "description": "Re-enable a disabled MJ Open App",
89
+ "examples": [
90
+ "<%= config.bin %> app enable acme-crm"
91
+ ],
92
+ "flags": {},
93
+ "hasDynamicHelp": false,
94
+ "hiddenAliases": [],
95
+ "id": "app:enable",
96
+ "pluginAlias": "@memberjunction/cli",
97
+ "pluginName": "@memberjunction/cli",
98
+ "pluginType": "core",
99
+ "strict": true,
100
+ "enableJsonFlag": false,
101
+ "isESM": true,
102
+ "relativePath": [
103
+ "dist",
104
+ "commands",
105
+ "app",
106
+ "enable.js"
107
+ ]
108
+ },
109
+ "app:info": {
110
+ "aliases": [],
111
+ "args": {
112
+ "name": {
113
+ "description": "Name of the installed app",
114
+ "name": "name",
115
+ "required": true
116
+ }
117
+ },
118
+ "description": "Show detailed information about an installed MJ Open App",
119
+ "examples": [
120
+ "<%= config.bin %> app info acme-crm"
121
+ ],
122
+ "flags": {},
123
+ "hasDynamicHelp": false,
124
+ "hiddenAliases": [],
125
+ "id": "app:info",
126
+ "pluginAlias": "@memberjunction/cli",
127
+ "pluginName": "@memberjunction/cli",
128
+ "pluginType": "core",
129
+ "strict": true,
130
+ "enableJsonFlag": false,
131
+ "isESM": true,
132
+ "relativePath": [
133
+ "dist",
134
+ "commands",
135
+ "app",
136
+ "info.js"
137
+ ]
138
+ },
139
+ "app:install": {
140
+ "aliases": [],
141
+ "args": {
142
+ "source": {
143
+ "description": "GitHub repository URL of the Open App",
144
+ "name": "source",
145
+ "required": true
146
+ }
147
+ },
148
+ "description": "Install an MJ Open App from a GitHub repository",
149
+ "examples": [
150
+ "<%= config.bin %> app install https://github.com/acme/mj-crm",
151
+ "<%= config.bin %> app install https://github.com/acme/mj-crm --version 1.2.0",
152
+ "<%= config.bin %> app install https://github.com/acme/mj-crm --verbose"
153
+ ],
154
+ "flags": {
155
+ "version": {
156
+ "description": "Specific version to install (default: latest)",
157
+ "name": "version",
158
+ "hasDynamicHelp": false,
159
+ "multiple": false,
160
+ "type": "option"
161
+ },
162
+ "verbose": {
163
+ "char": "v",
164
+ "description": "Show detailed output",
165
+ "name": "verbose",
166
+ "allowNo": false,
167
+ "type": "boolean"
168
+ }
169
+ },
170
+ "hasDynamicHelp": false,
171
+ "hiddenAliases": [],
172
+ "id": "app:install",
173
+ "pluginAlias": "@memberjunction/cli",
174
+ "pluginName": "@memberjunction/cli",
175
+ "pluginType": "core",
176
+ "strict": true,
177
+ "enableJsonFlag": false,
178
+ "isESM": true,
179
+ "relativePath": [
180
+ "dist",
181
+ "commands",
182
+ "app",
183
+ "install.js"
184
+ ]
185
+ },
186
+ "app:list": {
187
+ "aliases": [],
188
+ "args": {},
189
+ "description": "List all installed MJ Open Apps",
190
+ "examples": [
191
+ "<%= config.bin %> app list"
192
+ ],
193
+ "flags": {
194
+ "verbose": {
195
+ "char": "v",
196
+ "description": "Show detailed output",
197
+ "name": "verbose",
198
+ "allowNo": false,
199
+ "type": "boolean"
200
+ }
201
+ },
202
+ "hasDynamicHelp": false,
203
+ "hiddenAliases": [],
204
+ "id": "app:list",
205
+ "pluginAlias": "@memberjunction/cli",
206
+ "pluginName": "@memberjunction/cli",
207
+ "pluginType": "core",
208
+ "strict": true,
209
+ "enableJsonFlag": false,
210
+ "isESM": true,
211
+ "relativePath": [
212
+ "dist",
213
+ "commands",
214
+ "app",
215
+ "list.js"
216
+ ]
217
+ },
218
+ "app:remove": {
219
+ "aliases": [],
220
+ "args": {
221
+ "name": {
222
+ "description": "Name of the installed app to remove",
223
+ "name": "name",
224
+ "required": true
225
+ }
226
+ },
227
+ "description": "Remove an installed MJ Open App",
228
+ "examples": [
229
+ "<%= config.bin %> app remove acme-crm",
230
+ "<%= config.bin %> app remove acme-crm --keep-data",
231
+ "<%= config.bin %> app remove acme-crm --force"
232
+ ],
233
+ "flags": {
234
+ "keep-data": {
235
+ "description": "Keep the database schema and data",
236
+ "name": "keep-data",
237
+ "allowNo": false,
238
+ "type": "boolean"
239
+ },
240
+ "force": {
241
+ "description": "Force removal even if other apps depend on this one",
242
+ "name": "force",
243
+ "allowNo": false,
244
+ "type": "boolean"
245
+ },
246
+ "yes": {
247
+ "char": "y",
248
+ "description": "Skip confirmation prompt",
249
+ "name": "yes",
250
+ "allowNo": false,
251
+ "type": "boolean"
252
+ },
253
+ "verbose": {
254
+ "char": "v",
255
+ "description": "Show detailed output",
256
+ "name": "verbose",
257
+ "allowNo": false,
258
+ "type": "boolean"
259
+ }
260
+ },
261
+ "hasDynamicHelp": false,
262
+ "hiddenAliases": [],
263
+ "id": "app:remove",
264
+ "pluginAlias": "@memberjunction/cli",
265
+ "pluginName": "@memberjunction/cli",
266
+ "pluginType": "core",
267
+ "strict": true,
268
+ "enableJsonFlag": false,
269
+ "isESM": true,
270
+ "relativePath": [
271
+ "dist",
272
+ "commands",
273
+ "app",
274
+ "remove.js"
275
+ ]
276
+ },
277
+ "app:upgrade": {
278
+ "aliases": [],
279
+ "args": {
280
+ "name": {
281
+ "description": "Name of the installed app to upgrade",
282
+ "name": "name",
283
+ "required": true
284
+ }
285
+ },
286
+ "description": "Upgrade an installed MJ Open App to a newer version",
287
+ "examples": [
288
+ "<%= config.bin %> app upgrade acme-crm",
289
+ "<%= config.bin %> app upgrade acme-crm --version 1.3.0"
290
+ ],
291
+ "flags": {
292
+ "version": {
293
+ "description": "Specific version to upgrade to (default: latest)",
294
+ "name": "version",
295
+ "hasDynamicHelp": false,
296
+ "multiple": false,
297
+ "type": "option"
298
+ },
299
+ "verbose": {
300
+ "char": "v",
301
+ "description": "Show detailed output",
302
+ "name": "verbose",
303
+ "allowNo": false,
304
+ "type": "boolean"
305
+ }
306
+ },
307
+ "hasDynamicHelp": false,
308
+ "hiddenAliases": [],
309
+ "id": "app:upgrade",
310
+ "pluginAlias": "@memberjunction/cli",
311
+ "pluginName": "@memberjunction/cli",
312
+ "pluginType": "core",
313
+ "strict": true,
314
+ "enableJsonFlag": false,
315
+ "isESM": true,
316
+ "relativePath": [
317
+ "dist",
318
+ "commands",
319
+ "app",
320
+ "upgrade.js"
321
+ ]
322
+ },
25
323
  "bump": {
26
324
  "aliases": [],
27
325
  "args": {},
28
- "description": "Bumps MemberJunction dependency versions",
326
+ "description": "Bumps MemberJunction dependency versions",
327
+ "examples": [
328
+ {
329
+ "command": "<%= config.bin %> <%= command.id %>",
330
+ "description": "Bump all @memberjunction/* dependencies in the current directory's package.json to the CLI version"
331
+ },
332
+ {
333
+ "command": "<%= config.bin %> <%= command.id %> -rdv",
334
+ "description": "Preview all recursive packages bumps without writing any changes."
335
+ },
336
+ {
337
+ "command": "<%= config.bin %> <%= command.id %> -rqt v2.10.0 | xargs -n1 -I{} npm install --prefix {}",
338
+ "description": "Recursively bump all @memberjunction/* dependencies in all packages to version v2.10.0 and output only the paths containing the updated package.json files. Pipe the output to xargs to run npm install in each directory and update the package-lock.json files as well."
339
+ }
340
+ ],
341
+ "flags": {
342
+ "verbose": {
343
+ "char": "v",
344
+ "description": "Enable additional logging",
345
+ "name": "verbose",
346
+ "allowNo": false,
347
+ "type": "boolean"
348
+ },
349
+ "recursive": {
350
+ "char": "r",
351
+ "description": "Bump version in current directory and all subdirectories",
352
+ "name": "recursive",
353
+ "allowNo": false,
354
+ "type": "boolean"
355
+ },
356
+ "tag": {
357
+ "char": "t",
358
+ "description": "Version tag to bump target for bump (e.g. v2.10.0), defaults to the CLI version",
359
+ "name": "tag",
360
+ "hasDynamicHelp": false,
361
+ "multiple": false,
362
+ "type": "option"
363
+ },
364
+ "quiet": {
365
+ "char": "q",
366
+ "description": "Only output paths for updated packages",
367
+ "name": "quiet",
368
+ "allowNo": false,
369
+ "type": "boolean"
370
+ },
371
+ "dry": {
372
+ "char": "d",
373
+ "description": "Dry run, do not write changes to package.json files",
374
+ "name": "dry",
375
+ "allowNo": false,
376
+ "type": "boolean"
377
+ }
378
+ },
379
+ "hasDynamicHelp": false,
380
+ "hiddenAliases": [],
381
+ "id": "bump",
382
+ "pluginAlias": "@memberjunction/cli",
383
+ "pluginName": "@memberjunction/cli",
384
+ "pluginType": "core",
385
+ "strict": true,
386
+ "enableJsonFlag": false,
387
+ "isESM": true,
388
+ "relativePath": [
389
+ "dist",
390
+ "commands",
391
+ "bump",
392
+ "index.js"
393
+ ]
394
+ },
395
+ "clean": {
396
+ "aliases": [],
397
+ "args": {},
398
+ "description": "Resets the MemberJunction database to a pre-installation state",
399
+ "examples": [
400
+ "<%= config.bin %> <%= command.id %>\n"
401
+ ],
402
+ "flags": {
403
+ "verbose": {
404
+ "char": "v",
405
+ "description": "Enable additional logging",
406
+ "name": "verbose",
407
+ "allowNo": false,
408
+ "type": "boolean"
409
+ }
410
+ },
411
+ "hasDynamicHelp": false,
412
+ "hiddenAliases": [],
413
+ "id": "clean",
414
+ "pluginAlias": "@memberjunction/cli",
415
+ "pluginName": "@memberjunction/cli",
416
+ "pluginType": "core",
417
+ "strict": true,
418
+ "enableJsonFlag": false,
419
+ "isESM": true,
420
+ "relativePath": [
421
+ "dist",
422
+ "commands",
423
+ "clean",
424
+ "index.js"
425
+ ]
426
+ },
427
+ "codegen:5-0-fix-entity-names": {
428
+ "aliases": [],
429
+ "args": {},
430
+ "description": "[v5.0 Migration] Scan TypeScript files for entity names AND class names that need updating.\n\nThree strategies are applied:\n 1. Class name renames (regex) — ActionEntity -> MJActionEntity, ActionSchema -> MJActionSchema, etc.\n 2. Multi-word entity name renames (regex) — 'AI Models' -> 'MJ: AI Models'\n 3. Single-word entity name renames (AST) — 'Actions' -> 'MJ: Actions' in GetEntityObject, OpenEntityRecord,\n navigateToEntity, EntityName: assignments, .Name === comparisons, @RegisterClass decorators.\n\nThe rename map (272 entries) is built from entity_subclasses.ts @RegisterClass decorators plus\nan embedded rename map for class name prefixes. Runs in dry-run mode by default; use --fix to apply.",
431
+ "examples": [
432
+ {
433
+ "description": "Dry-run scan of the packages directory",
434
+ "command": "<%= config.bin %> <%= command.id %> --path packages/"
435
+ },
436
+ {
437
+ "description": "Scan a single file",
438
+ "command": "<%= config.bin %> <%= command.id %> --path packages/Angular/Explorer/dashboards/src/Actions/components/actions-overview.component.ts"
439
+ },
440
+ {
441
+ "description": "Apply fixes across the codebase",
442
+ "command": "<%= config.bin %> <%= command.id %> --path packages/ --fix"
443
+ },
444
+ {
445
+ "description": "Quiet mode (summary only)",
446
+ "command": "<%= config.bin %> <%= command.id %> --path packages/ -q"
447
+ }
448
+ ],
449
+ "flags": {
450
+ "path": {
451
+ "char": "p",
452
+ "description": "File or directory to scan. Accepts a single .ts file or a directory (scanned recursively). Defaults to the current working directory.",
453
+ "name": "path",
454
+ "hasDynamicHelp": false,
455
+ "multiple": false,
456
+ "type": "option"
457
+ },
458
+ "fix": {
459
+ "description": "Apply fixes in place. Without this flag, the command runs in dry-run mode and only reports findings.",
460
+ "name": "fix",
461
+ "allowNo": false,
462
+ "type": "boolean"
463
+ },
464
+ "entity-subclasses": {
465
+ "description": "Explicit path to entity_subclasses.ts for building the rename map. If omitted, the tool searches common locations relative to the target path.",
466
+ "name": "entity-subclasses",
467
+ "hasDynamicHelp": false,
468
+ "multiple": false,
469
+ "type": "option"
470
+ },
471
+ "quiet": {
472
+ "char": "q",
473
+ "description": "Suppress detailed per-file output; only show the final summary counts.",
474
+ "name": "quiet",
475
+ "allowNo": false,
476
+ "type": "boolean"
477
+ },
478
+ "verbose": {
479
+ "char": "v",
480
+ "description": "Show detailed progress including each file being scanned.",
481
+ "name": "verbose",
482
+ "allowNo": false,
483
+ "type": "boolean"
484
+ }
485
+ },
486
+ "hasDynamicHelp": false,
487
+ "hiddenAliases": [],
488
+ "id": "codegen:5-0-fix-entity-names",
489
+ "pluginAlias": "@memberjunction/cli",
490
+ "pluginName": "@memberjunction/cli",
491
+ "pluginType": "core",
492
+ "strict": true,
493
+ "enableJsonFlag": false,
494
+ "isESM": true,
495
+ "relativePath": [
496
+ "dist",
497
+ "commands",
498
+ "codegen",
499
+ "5-0-fix-entity-names.js"
500
+ ]
501
+ },
502
+ "codegen:5-0-fix-html-entity-names": {
503
+ "aliases": [],
504
+ "args": {},
505
+ "description": "[v5.0 Migration] Scan Angular HTML template files for hardcoded entity names that need \"MJ: \" prefix updates.\n\nUses targeted regex patterns to find entity name references in template expressions\nand attribute values. Detects method calls like navigateToEntity('Actions'),\nOpenEntityRecord('Entities', id), and attribute values like RowsEntityName=\"Users\".\nRuns in dry-run mode by default; use --fix to apply.\n\nThe rename map is built dynamically from entity_subclasses.ts by parsing all\n@RegisterClass(BaseEntity, 'MJ: XYZ') decorators (~272 entries).",
29
506
  "examples": [
30
507
  {
31
- "command": "<%= config.bin %> <%= command.id %>",
32
- "description": "Bump all @memberjunction/* dependencies in the current directory's package.json to the CLI version"
508
+ "description": "Dry-run scan of Angular templates",
509
+ "command": "<%= config.bin %> <%= command.id %> --path packages/Angular/"
33
510
  },
34
511
  {
35
- "command": "<%= config.bin %> <%= command.id %> -rdv",
36
- "description": "Preview all recursive packages bumps without writing any changes."
512
+ "description": "Apply fixes to HTML templates",
513
+ "command": "<%= config.bin %> <%= command.id %> --path packages/Angular/ --fix"
37
514
  },
38
515
  {
39
- "command": "<%= config.bin %> <%= command.id %> -rqt v2.10.0 | xargs -n1 -I{} npm install --prefix {}",
40
- "description": "Recursively bump all @memberjunction/* dependencies in all packages to version v2.10.0 and output only the paths containing the updated package.json files. Pipe the output to xargs to run npm install in each directory and update the package-lock.json files as well."
516
+ "description": "Scan with verbose output",
517
+ "command": "<%= config.bin %> <%= command.id %> --path packages/ -v"
518
+ },
519
+ {
520
+ "description": "Scan a single template file",
521
+ "command": "<%= config.bin %> <%= command.id %> --path packages/Angular/Explorer/dashboards/src/Actions/actions-dashboard.component.html"
41
522
  }
42
523
  ],
43
524
  "flags": {
44
- "verbose": {
45
- "char": "v",
46
- "description": "Enable additional logging",
47
- "name": "verbose",
48
- "allowNo": false,
49
- "type": "boolean"
525
+ "path": {
526
+ "char": "p",
527
+ "description": "File or directory to scan. Accepts a single .html file or a directory (scanned recursively). Defaults to the current working directory.",
528
+ "name": "path",
529
+ "hasDynamicHelp": false,
530
+ "multiple": false,
531
+ "type": "option"
50
532
  },
51
- "recursive": {
52
- "char": "r",
53
- "description": "Bump version in current directory and all subdirectories",
54
- "name": "recursive",
533
+ "fix": {
534
+ "description": "Apply fixes in place. Without this flag, the command runs in dry-run mode and only reports findings.",
535
+ "name": "fix",
55
536
  "allowNo": false,
56
537
  "type": "boolean"
57
538
  },
58
- "tag": {
59
- "char": "t",
60
- "description": "Version tag to bump target for bump (e.g. v2.10.0), defaults to the CLI version",
61
- "name": "tag",
539
+ "entity-subclasses": {
540
+ "description": "Explicit path to entity_subclasses.ts for building the rename map. If omitted, the tool searches common locations relative to the target path.",
541
+ "name": "entity-subclasses",
62
542
  "hasDynamicHelp": false,
63
543
  "multiple": false,
64
544
  "type": "option"
65
545
  },
66
546
  "quiet": {
67
547
  "char": "q",
68
- "description": "Only output paths for updated packages",
548
+ "description": "Suppress detailed per-file output; only show the final summary counts.",
69
549
  "name": "quiet",
70
550
  "allowNo": false,
71
551
  "type": "boolean"
72
552
  },
73
- "dry": {
74
- "char": "d",
75
- "description": "Dry run, do not write changes to package.json files",
76
- "name": "dry",
553
+ "verbose": {
554
+ "char": "v",
555
+ "description": "Show detailed progress including each file being scanned.",
556
+ "name": "verbose",
77
557
  "allowNo": false,
78
558
  "type": "boolean"
79
559
  }
80
560
  },
81
561
  "hasDynamicHelp": false,
82
562
  "hiddenAliases": [],
83
- "id": "bump",
563
+ "id": "codegen:5-0-fix-html-entity-names",
84
564
  "pluginAlias": "@memberjunction/cli",
85
565
  "pluginName": "@memberjunction/cli",
86
566
  "pluginType": "core",
@@ -90,21 +570,64 @@
90
570
  "relativePath": [
91
571
  "dist",
92
572
  "commands",
93
- "bump",
94
- "index.js"
573
+ "codegen",
574
+ "5-0-fix-html-entity-names.js"
95
575
  ]
96
576
  },
97
- "clean": {
577
+ "codegen:5-0-fix-metadata-names": {
98
578
  "aliases": [],
99
579
  "args": {},
100
- "description": "Resets the MemberJunction database to a pre-installation state",
580
+ "description": "[v5.0 Migration] Scan metadata JSON files for entity names that need \"MJ: \" prefix updates.\n\nTargets the metadata/ directory used by \"mj sync\". Detects entity name references in\n@lookup: directives (both the entity name and lookup value), .mj-sync.json and\n.mj-folder.json config files (entity/entityName fields), relatedEntities object keys,\nand fields.Name values in Entities-managing folders. Runs in dry-run mode by default;\nuse --fix to apply.\n\nThe rename map is built dynamically from entity_subclasses.ts by parsing all\n@RegisterClass(BaseEntity, 'MJ: XYZ') decorators (~272 entries).",
101
581
  "examples": [
102
- "<%= config.bin %> <%= command.id %>\n"
582
+ {
583
+ "description": "Dry-run scan of the metadata directory",
584
+ "command": "<%= config.bin %> <%= command.id %> --path metadata/"
585
+ },
586
+ {
587
+ "description": "Apply fixes to metadata files",
588
+ "command": "<%= config.bin %> <%= command.id %> --path metadata/ --fix"
589
+ },
590
+ {
591
+ "description": "Scan a specific subdirectory",
592
+ "command": "<%= config.bin %> <%= command.id %> --path metadata/resource-types"
593
+ },
594
+ {
595
+ "description": "Scan and fix a single metadata file",
596
+ "command": "<%= config.bin %> <%= command.id %> --path metadata/entities/.audit-related-entities.json --fix"
597
+ }
103
598
  ],
104
599
  "flags": {
600
+ "path": {
601
+ "char": "p",
602
+ "description": "File or directory to scan. Accepts a single .json file or a directory (scanned recursively, including dotfiles like .mj-sync.json). Defaults to the current working directory.",
603
+ "name": "path",
604
+ "hasDynamicHelp": false,
605
+ "multiple": false,
606
+ "type": "option"
607
+ },
608
+ "fix": {
609
+ "description": "Apply fixes in place. Without this flag, the command runs in dry-run mode and only reports findings.",
610
+ "name": "fix",
611
+ "allowNo": false,
612
+ "type": "boolean"
613
+ },
614
+ "entity-subclasses": {
615
+ "description": "Explicit path to entity_subclasses.ts for building the rename map. If omitted, the tool searches common locations relative to the target path.",
616
+ "name": "entity-subclasses",
617
+ "hasDynamicHelp": false,
618
+ "multiple": false,
619
+ "type": "option"
620
+ },
621
+ "quiet": {
622
+ "char": "q",
623
+ "description": "Suppress detailed per-file output; only show the final summary counts.",
624
+ "name": "quiet",
625
+ "allowNo": false,
626
+ "type": "boolean"
627
+ },
105
628
  "verbose": {
106
629
  "char": "v",
107
- "description": "Enable additional logging",
630
+ "description": "Show detailed progress including each file being scanned.",
108
631
  "name": "verbose",
109
632
  "allowNo": false,
110
633
  "type": "boolean"
@@ -112,7 +635,7 @@
112
635
  },
113
636
  "hasDynamicHelp": false,
114
637
  "hiddenAliases": [],
115
- "id": "clean",
638
+ "id": "codegen:5-0-fix-metadata-names",
116
639
  "pluginAlias": "@memberjunction/cli",
117
640
  "pluginName": "@memberjunction/cli",
118
641
  "pluginType": "core",
@@ -122,20 +645,27 @@
122
645
  "relativePath": [
123
646
  "dist",
124
647
  "commands",
125
- "clean",
126
- "index.js"
648
+ "codegen",
649
+ "5-0-fix-metadata-names.js"
127
650
  ]
128
651
  },
129
652
  "codegen": {
130
653
  "aliases": [],
131
654
  "args": {},
132
- "description": "Run CodeGen to generate code and update metadata for MemberJunction",
655
+ "description": "Run the full MemberJunction code generation pipeline.\n\nAnalyzes your SQL Server database schema, updates MemberJunction metadata, and\ngenerates synchronized code across the entire stack:\n\n - SQL views, stored procedures, indexes, and permissions\n - TypeScript entity classes with Zod validation schemas\n - Angular form components with AI-driven layouts\n - GraphQL resolvers and type definitions\n - Action subclasses and DB schema JSON\n\nConfiguration is loaded from mj.config.cjs in the current directory (or parent\ndirectories). Database connection can also be set via environment variables:\nDB_HOST, DB_DATABASE, CODEGEN_DB_USERNAME, CODEGEN_DB_PASSWORD.\n\nUse --skipdb to skip all database operations (metadata sync, SQL object\ngeneration) and only regenerate TypeScript, Angular, and GraphQL output from\nexisting metadata.",
133
656
  "examples": [
134
- "<%= config.bin %> <%= command.id %>\n"
657
+ {
658
+ "command": "<%= config.bin %> <%= command.id %>",
659
+ "description": "Run the full code generation pipeline"
660
+ },
661
+ {
662
+ "command": "<%= config.bin %> <%= command.id %> --skipdb",
663
+ "description": "Regenerate code files without touching the database"
664
+ }
135
665
  ],
136
666
  "flags": {
137
667
  "skipdb": {
138
- "description": "Skip database migration",
668
+ "description": "Skip database operations (metadata sync, SQL generation). Only regenerate TypeScript entities, Angular components, and GraphQL resolvers from existing metadata.",
139
669
  "name": "skipdb",
140
670
  "allowNo": false,
141
671
  "type": "boolean"
@@ -160,17 +690,29 @@
160
690
  "codegen:manifest": {
161
691
  "aliases": [],
162
692
  "args": {},
163
- "description": "Generate a class registrations manifest to prevent tree-shaking of @RegisterClass decorated classes",
693
+ "description": "Generate a class registration manifest to prevent tree-shaking.\n\nMemberJunction uses @RegisterClass decorators with a dynamic class factory.\nModern bundlers (ESBuild, Vite) cannot detect dynamic instantiation and will\ntree-shake these classes out of production builds. This command scans the\ndependency tree for all @RegisterClass-decorated classes and emits a manifest\nfile with static imports that the bundler cannot eliminate.\n\nTypically used as a prebuild/prestart script for MJAPI and MJExplorer. For\nMJ distribution users, pre-built manifests ship inside @memberjunction/server-bootstrap\nand @memberjunction/ng-bootstrap -- use --exclude-packages @memberjunction to\ngenerate a supplemental manifest covering only your own application classes.",
164
694
  "examples": [
165
- "<%= config.bin %> <%= command.id %> --output ./src/generated/class-registrations-manifest.ts",
166
- "<%= config.bin %> <%= command.id %> --appDir ./packages/MJAPI --output ./packages/MJAPI/src/generated/class-registrations-manifest.ts",
167
- "<%= config.bin %> <%= command.id %> --filter BaseEngine --filter BaseAction",
168
- "<%= config.bin %> <%= command.id %> --verbose"
695
+ {
696
+ "command": "<%= config.bin %> <%= command.id %>",
697
+ "description": "Generate manifest with default output path"
698
+ },
699
+ {
700
+ "command": "<%= config.bin %> <%= command.id %> --appDir ./packages/MJAPI --output ./packages/MJAPI/src/generated/class-registrations-manifest.ts",
701
+ "description": "Generate manifest for a specific application directory"
702
+ },
703
+ {
704
+ "command": "<%= config.bin %> <%= command.id %> --exclude-packages @memberjunction",
705
+ "description": "Exclude MJ packages (use pre-built bootstrap manifests instead)"
706
+ },
707
+ {
708
+ "command": "<%= config.bin %> <%= command.id %> --filter BaseEngine --filter BaseAction --verbose",
709
+ "description": "Only include specific base classes with detailed progress"
710
+ }
169
711
  ],
170
712
  "flags": {
171
713
  "output": {
172
714
  "char": "o",
173
- "description": "Output manifest file path",
715
+ "description": "Output file path for the generated manifest. The file will contain named imports and a CLASS_REGISTRATIONS array.",
174
716
  "name": "output",
175
717
  "default": "./src/generated/class-registrations-manifest.ts",
176
718
  "hasDynamicHelp": false,
@@ -179,7 +721,7 @@
179
721
  },
180
722
  "appDir": {
181
723
  "char": "a",
182
- "description": "App directory containing package.json (defaults to current directory)",
724
+ "description": "Root directory of the application whose package.json dependency tree will be scanned. Defaults to the current working directory.",
183
725
  "name": "appDir",
184
726
  "hasDynamicHelp": false,
185
727
  "multiple": false,
@@ -187,7 +729,7 @@
187
729
  },
188
730
  "filter": {
189
731
  "char": "f",
190
- "description": "Only include classes with this base class (can be repeated)",
732
+ "description": "Only include classes extending this base class. Can be repeated (e.g., --filter BaseEngine --filter BaseAction).",
191
733
  "name": "filter",
192
734
  "hasDynamicHelp": false,
193
735
  "multiple": true,
@@ -195,7 +737,7 @@
195
737
  },
196
738
  "exclude-packages": {
197
739
  "char": "e",
198
- "description": "Exclude packages matching this prefix from scanning (can be repeated). Example: --exclude-packages @memberjunction",
740
+ "description": "Skip packages whose name starts with this prefix. Useful for excluding @memberjunction packages when using pre-built bootstrap manifests. Can be repeated.",
199
741
  "name": "exclude-packages",
200
742
  "hasDynamicHelp": false,
201
743
  "multiple": true,
@@ -203,14 +745,14 @@
203
745
  },
204
746
  "quiet": {
205
747
  "char": "q",
206
- "description": "Suppress all output",
748
+ "description": "Suppress all output except errors.",
207
749
  "name": "quiet",
208
750
  "allowNo": false,
209
751
  "type": "boolean"
210
752
  },
211
753
  "verbose": {
212
754
  "char": "v",
213
- "description": "Show detailed progress including skipped classes and per-package info",
755
+ "description": "Show detailed progress including per-package scanning info and skipped classes.",
214
756
  "name": "verbose",
215
757
  "allowNo": false,
216
758
  "type": "boolean"
@@ -1069,12 +1611,12 @@
1069
1611
  "args": {},
1070
1612
  "description": "Pull metadata from database to local files",
1071
1613
  "examples": [
1072
- "<%= config.bin %> <%= command.id %> --entity=\"AI Prompts\"",
1073
- "<%= config.bin %> <%= command.id %> --entity=\"AI Prompts\" --filter=\"CategoryID='customer-service-id'\"",
1074
- "<%= config.bin %> <%= command.id %> --entity=\"AI Agents\" --merge-strategy=overwrite",
1614
+ "<%= config.bin %> <%= command.id %> --entity=\"MJ: AI Prompts\"",
1615
+ "<%= config.bin %> <%= command.id %> --entity=\"MJ: AI Prompts\" --filter=\"CategoryID='customer-service-id'\"",
1616
+ "<%= config.bin %> <%= command.id %> --entity=\"MJ: AI Agents\" --merge-strategy=overwrite",
1075
1617
  "<%= config.bin %> <%= command.id %> --entity=\"Actions\" --target-dir=./custom-actions --no-validate",
1076
1618
  "<%= config.bin %> <%= command.id %> --entity=\"Templates\" --dry-run --verbose",
1077
- "<%= config.bin %> <%= command.id %> --entity=\"AI Prompts\" --exclude-fields=InternalNotes,DebugInfo"
1619
+ "<%= config.bin %> <%= command.id %> --entity=\"MJ: AI Prompts\" --exclude-fields=InternalNotes,DebugInfo"
1078
1620
  ],
1079
1621
  "flags": {
1080
1622
  "entity": {
@@ -1913,192 +2455,70 @@
1913
2455
  "name": "testId",
1914
2456
  "required": false
1915
2457
  }
1916
- },
1917
- "description": "Validate test definitions without executing",
1918
- "examples": [
1919
- "<%= config.bin %> <%= command.id %> <test-id>",
1920
- "<%= config.bin %> <%= command.id %> --all",
1921
- "<%= config.bin %> <%= command.id %> --type=agent-eval",
1922
- "<%= config.bin %> <%= command.id %> --all --save-report",
1923
- "<%= config.bin %> <%= command.id %> --all --output=validation-report.md"
1924
- ],
1925
- "flags": {
1926
- "all": {
1927
- "char": "a",
1928
- "description": "Validate all tests",
1929
- "name": "all",
1930
- "allowNo": false,
1931
- "type": "boolean"
1932
- },
1933
- "type": {
1934
- "char": "t",
1935
- "description": "Validate tests by type",
1936
- "name": "type",
1937
- "hasDynamicHelp": false,
1938
- "multiple": false,
1939
- "type": "option"
1940
- },
1941
- "save-report": {
1942
- "description": "Save validation report to file",
1943
- "name": "save-report",
1944
- "allowNo": false,
1945
- "type": "boolean"
1946
- },
1947
- "format": {
1948
- "char": "f",
1949
- "description": "Output format",
1950
- "name": "format",
1951
- "default": "console",
1952
- "hasDynamicHelp": false,
1953
- "multiple": false,
1954
- "options": [
1955
- "console",
1956
- "json",
1957
- "markdown"
1958
- ],
1959
- "type": "option"
1960
- },
1961
- "output": {
1962
- "char": "o",
1963
- "description": "Output file path",
1964
- "name": "output",
1965
- "hasDynamicHelp": false,
1966
- "multiple": false,
1967
- "type": "option"
1968
- },
1969
- "verbose": {
1970
- "char": "v",
1971
- "description": "Show detailed information",
1972
- "name": "verbose",
1973
- "allowNo": false,
1974
- "type": "boolean"
1975
- }
1976
- },
1977
- "hasDynamicHelp": false,
1978
- "hiddenAliases": [],
1979
- "id": "test:validate",
1980
- "pluginAlias": "@memberjunction/cli",
1981
- "pluginName": "@memberjunction/cli",
1982
- "pluginType": "core",
1983
- "strict": true,
1984
- "enableJsonFlag": false,
1985
- "isESM": true,
1986
- "relativePath": [
1987
- "dist",
1988
- "commands",
1989
- "test",
1990
- "validate.js"
1991
- ]
1992
- },
1993
- "ai:actions:list": {
1994
- "aliases": [],
1995
- "args": {},
1996
- "description": "List available AI actions",
1997
- "examples": [
1998
- "<%= config.bin %> <%= command.id %>",
1999
- "<%= config.bin %> <%= command.id %> --output=table",
2000
- "<%= config.bin %> <%= command.id %> --output=json"
2001
- ],
2002
- "flags": {
2003
- "output": {
2004
- "char": "o",
2005
- "description": "Output format",
2006
- "name": "output",
2007
- "default": "compact",
2008
- "hasDynamicHelp": false,
2009
- "multiple": false,
2010
- "options": [
2011
- "compact",
2012
- "json",
2013
- "table"
2014
- ],
2015
- "type": "option"
2016
- }
2017
- },
2018
- "hasDynamicHelp": false,
2019
- "hiddenAliases": [],
2020
- "id": "ai:actions:list",
2021
- "pluginAlias": "@memberjunction/cli",
2022
- "pluginName": "@memberjunction/cli",
2023
- "pluginType": "core",
2024
- "strict": true,
2025
- "enableJsonFlag": false,
2026
- "isESM": true,
2027
- "relativePath": [
2028
- "dist",
2029
- "commands",
2030
- "ai",
2031
- "actions",
2032
- "list.js"
2033
- ]
2034
- },
2035
- "ai:actions:run": {
2036
- "aliases": [],
2037
- "args": {},
2038
- "description": "Execute an AI action with parameters",
2039
- "examples": [
2040
- "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
2041
- "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
2042
- "<%= 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\"",
2043
- "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
2458
+ },
2459
+ "description": "Validate test definitions without executing",
2460
+ "examples": [
2461
+ "<%= config.bin %> <%= command.id %> <test-id>",
2462
+ "<%= config.bin %> <%= command.id %> --all",
2463
+ "<%= config.bin %> <%= command.id %> --type=agent-eval",
2464
+ "<%= config.bin %> <%= command.id %> --all --save-report",
2465
+ "<%= config.bin %> <%= command.id %> --all --output=validation-report.md"
2044
2466
  ],
2045
2467
  "flags": {
2046
- "name": {
2047
- "char": "n",
2048
- "description": "Action name",
2049
- "name": "name",
2050
- "required": true,
2051
- "hasDynamicHelp": false,
2052
- "multiple": false,
2053
- "type": "option"
2468
+ "all": {
2469
+ "char": "a",
2470
+ "description": "Validate all tests",
2471
+ "name": "all",
2472
+ "allowNo": false,
2473
+ "type": "boolean"
2054
2474
  },
2055
- "param": {
2056
- "char": "p",
2057
- "description": "Action parameters in key=value format",
2058
- "name": "param",
2475
+ "type": {
2476
+ "char": "t",
2477
+ "description": "Validate tests by type",
2478
+ "name": "type",
2059
2479
  "hasDynamicHelp": false,
2060
- "multiple": true,
2480
+ "multiple": false,
2061
2481
  "type": "option"
2062
2482
  },
2063
- "dry-run": {
2064
- "description": "Validate without executing",
2065
- "name": "dry-run",
2483
+ "save-report": {
2484
+ "description": "Save validation report to file",
2485
+ "name": "save-report",
2066
2486
  "allowNo": false,
2067
2487
  "type": "boolean"
2068
2488
  },
2069
- "output": {
2070
- "char": "o",
2489
+ "format": {
2490
+ "char": "f",
2071
2491
  "description": "Output format",
2072
- "name": "output",
2073
- "default": "compact",
2492
+ "name": "format",
2493
+ "default": "console",
2074
2494
  "hasDynamicHelp": false,
2075
2495
  "multiple": false,
2076
2496
  "options": [
2077
- "compact",
2497
+ "console",
2078
2498
  "json",
2079
- "table"
2499
+ "markdown"
2080
2500
  ],
2081
2501
  "type": "option"
2082
2502
  },
2503
+ "output": {
2504
+ "char": "o",
2505
+ "description": "Output file path",
2506
+ "name": "output",
2507
+ "hasDynamicHelp": false,
2508
+ "multiple": false,
2509
+ "type": "option"
2510
+ },
2083
2511
  "verbose": {
2084
2512
  "char": "v",
2085
- "description": "Show detailed execution information",
2513
+ "description": "Show detailed information",
2086
2514
  "name": "verbose",
2087
2515
  "allowNo": false,
2088
2516
  "type": "boolean"
2089
- },
2090
- "timeout": {
2091
- "description": "Execution timeout in milliseconds",
2092
- "name": "timeout",
2093
- "default": 300000,
2094
- "hasDynamicHelp": false,
2095
- "multiple": false,
2096
- "type": "option"
2097
2517
  }
2098
2518
  },
2099
2519
  "hasDynamicHelp": false,
2100
2520
  "hiddenAliases": [],
2101
- "id": "ai:actions:run",
2521
+ "id": "test:validate",
2102
2522
  "pluginAlias": "@memberjunction/cli",
2103
2523
  "pluginName": "@memberjunction/cli",
2104
2524
  "pluginType": "core",
@@ -2108,15 +2528,14 @@
2108
2528
  "relativePath": [
2109
2529
  "dist",
2110
2530
  "commands",
2111
- "ai",
2112
- "actions",
2113
- "run.js"
2531
+ "test",
2532
+ "validate.js"
2114
2533
  ]
2115
2534
  },
2116
- "ai:agents:list": {
2535
+ "ai:actions:list": {
2117
2536
  "aliases": [],
2118
2537
  "args": {},
2119
- "description": "List available AI agents",
2538
+ "description": "List available AI actions",
2120
2539
  "examples": [
2121
2540
  "<%= config.bin %> <%= command.id %>",
2122
2541
  "<%= config.bin %> <%= command.id %> --output=table",
@@ -2140,7 +2559,7 @@
2140
2559
  },
2141
2560
  "hasDynamicHelp": false,
2142
2561
  "hiddenAliases": [],
2143
- "id": "ai:agents:list",
2562
+ "id": "ai:actions:list",
2144
2563
  "pluginAlias": "@memberjunction/cli",
2145
2564
  "pluginName": "@memberjunction/cli",
2146
2565
  "pluginType": "core",
@@ -2151,47 +2570,41 @@
2151
2570
  "dist",
2152
2571
  "commands",
2153
2572
  "ai",
2154
- "agents",
2573
+ "actions",
2155
2574
  "list.js"
2156
2575
  ]
2157
2576
  },
2158
- "ai:agents:run": {
2577
+ "ai:actions:run": {
2159
2578
  "aliases": [],
2160
2579
  "args": {},
2161
- "description": "Execute an AI agent with a prompt or start interactive chat",
2580
+ "description": "Execute an AI action with parameters",
2162
2581
  "examples": [
2163
- "<%= config.bin %> <%= command.id %> -a \"Skip: Requirements Expert\" -p \"Create a dashboard for sales metrics\"",
2164
- "<%= config.bin %> <%= command.id %> -a \"Child Component Generator Sub-agent\" --chat",
2165
- "<%= config.bin %> <%= command.id %> -a \"Skip: Technical Design Expert\" -p \"Build a React component\" --verbose --timeout=600000"
2582
+ "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
2583
+ "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
2584
+ "<%= 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\"",
2585
+ "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
2166
2586
  ],
2167
2587
  "flags": {
2168
- "agent": {
2169
- "char": "a",
2170
- "description": "Agent name",
2171
- "name": "agent",
2588
+ "name": {
2589
+ "char": "n",
2590
+ "description": "Action name",
2591
+ "name": "name",
2172
2592
  "required": true,
2173
2593
  "hasDynamicHelp": false,
2174
2594
  "multiple": false,
2175
2595
  "type": "option"
2176
2596
  },
2177
- "prompt": {
2597
+ "param": {
2178
2598
  "char": "p",
2179
- "description": "Prompt to execute",
2180
- "exclusive": [
2181
- "chat"
2182
- ],
2183
- "name": "prompt",
2599
+ "description": "Action parameters in key=value format",
2600
+ "name": "param",
2184
2601
  "hasDynamicHelp": false,
2185
- "multiple": false,
2602
+ "multiple": true,
2186
2603
  "type": "option"
2187
2604
  },
2188
- "chat": {
2189
- "char": "c",
2190
- "description": "Start interactive chat mode",
2191
- "exclusive": [
2192
- "prompt"
2193
- ],
2194
- "name": "chat",
2605
+ "dry-run": {
2606
+ "description": "Validate without executing",
2607
+ "name": "dry-run",
2195
2608
  "allowNo": false,
2196
2609
  "type": "boolean"
2197
2610
  },
@@ -2227,7 +2640,7 @@
2227
2640
  },
2228
2641
  "hasDynamicHelp": false,
2229
2642
  "hiddenAliases": [],
2230
- "id": "ai:agents:run",
2643
+ "id": "ai:actions:run",
2231
2644
  "pluginAlias": "@memberjunction/cli",
2232
2645
  "pluginName": "@memberjunction/cli",
2233
2646
  "pluginType": "core",
@@ -2238,7 +2651,7 @@
2238
2651
  "dist",
2239
2652
  "commands",
2240
2653
  "ai",
2241
- "agents",
2654
+ "actions",
2242
2655
  "run.js"
2243
2656
  ]
2244
2657
  },
@@ -2458,6 +2871,135 @@
2458
2871
  "index.js"
2459
2872
  ]
2460
2873
  },
2874
+ "ai:agents:list": {
2875
+ "aliases": [],
2876
+ "args": {},
2877
+ "description": "List available AI agents",
2878
+ "examples": [
2879
+ "<%= config.bin %> <%= command.id %>",
2880
+ "<%= config.bin %> <%= command.id %> --output=table",
2881
+ "<%= config.bin %> <%= command.id %> --output=json"
2882
+ ],
2883
+ "flags": {
2884
+ "output": {
2885
+ "char": "o",
2886
+ "description": "Output format",
2887
+ "name": "output",
2888
+ "default": "compact",
2889
+ "hasDynamicHelp": false,
2890
+ "multiple": false,
2891
+ "options": [
2892
+ "compact",
2893
+ "json",
2894
+ "table"
2895
+ ],
2896
+ "type": "option"
2897
+ }
2898
+ },
2899
+ "hasDynamicHelp": false,
2900
+ "hiddenAliases": [],
2901
+ "id": "ai:agents:list",
2902
+ "pluginAlias": "@memberjunction/cli",
2903
+ "pluginName": "@memberjunction/cli",
2904
+ "pluginType": "core",
2905
+ "strict": true,
2906
+ "enableJsonFlag": false,
2907
+ "isESM": true,
2908
+ "relativePath": [
2909
+ "dist",
2910
+ "commands",
2911
+ "ai",
2912
+ "agents",
2913
+ "list.js"
2914
+ ]
2915
+ },
2916
+ "ai:agents:run": {
2917
+ "aliases": [],
2918
+ "args": {},
2919
+ "description": "Execute an AI agent with a prompt or start interactive chat",
2920
+ "examples": [
2921
+ "<%= config.bin %> <%= command.id %> -a \"Skip: Requirements Expert\" -p \"Create a dashboard for sales metrics\"",
2922
+ "<%= config.bin %> <%= command.id %> -a \"Child Component Generator Sub-agent\" --chat",
2923
+ "<%= config.bin %> <%= command.id %> -a \"Skip: Technical Design Expert\" -p \"Build a React component\" --verbose --timeout=600000"
2924
+ ],
2925
+ "flags": {
2926
+ "agent": {
2927
+ "char": "a",
2928
+ "description": "Agent name",
2929
+ "name": "agent",
2930
+ "required": true,
2931
+ "hasDynamicHelp": false,
2932
+ "multiple": false,
2933
+ "type": "option"
2934
+ },
2935
+ "prompt": {
2936
+ "char": "p",
2937
+ "description": "Prompt to execute",
2938
+ "exclusive": [
2939
+ "chat"
2940
+ ],
2941
+ "name": "prompt",
2942
+ "hasDynamicHelp": false,
2943
+ "multiple": false,
2944
+ "type": "option"
2945
+ },
2946
+ "chat": {
2947
+ "char": "c",
2948
+ "description": "Start interactive chat mode",
2949
+ "exclusive": [
2950
+ "prompt"
2951
+ ],
2952
+ "name": "chat",
2953
+ "allowNo": false,
2954
+ "type": "boolean"
2955
+ },
2956
+ "output": {
2957
+ "char": "o",
2958
+ "description": "Output format",
2959
+ "name": "output",
2960
+ "default": "compact",
2961
+ "hasDynamicHelp": false,
2962
+ "multiple": false,
2963
+ "options": [
2964
+ "compact",
2965
+ "json",
2966
+ "table"
2967
+ ],
2968
+ "type": "option"
2969
+ },
2970
+ "verbose": {
2971
+ "char": "v",
2972
+ "description": "Show detailed execution information",
2973
+ "name": "verbose",
2974
+ "allowNo": false,
2975
+ "type": "boolean"
2976
+ },
2977
+ "timeout": {
2978
+ "description": "Execution timeout in milliseconds",
2979
+ "name": "timeout",
2980
+ "default": 300000,
2981
+ "hasDynamicHelp": false,
2982
+ "multiple": false,
2983
+ "type": "option"
2984
+ }
2985
+ },
2986
+ "hasDynamicHelp": false,
2987
+ "hiddenAliases": [],
2988
+ "id": "ai:agents:run",
2989
+ "pluginAlias": "@memberjunction/cli",
2990
+ "pluginName": "@memberjunction/cli",
2991
+ "pluginType": "core",
2992
+ "strict": true,
2993
+ "enableJsonFlag": false,
2994
+ "isESM": true,
2995
+ "relativePath": [
2996
+ "dist",
2997
+ "commands",
2998
+ "ai",
2999
+ "agents",
3000
+ "run.js"
3001
+ ]
3002
+ },
2461
3003
  "ai:prompts:list": {
2462
3004
  "aliases": [],
2463
3005
  "args": {},
@@ -2598,5 +3140,5 @@
2598
3140
  ]
2599
3141
  }
2600
3142
  },
2601
- "version": "4.4.0"
3143
+ "version": "5.1.0"
2602
3144
  }