@memberjunction/cli 6.2.0-edge.7 → 6.2.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 (64) hide show
  1. package/dist/commands/diag/export.d.ts +16 -0
  2. package/dist/commands/diag/export.d.ts.map +1 -0
  3. package/dist/commands/diag/export.js +37 -0
  4. package/dist/commands/diag/export.js.map +1 -0
  5. package/dist/commands/diag/inspect.d.ts +14 -0
  6. package/dist/commands/diag/inspect.d.ts.map +1 -0
  7. package/dist/commands/diag/inspect.js +45 -0
  8. package/dist/commands/diag/inspect.js.map +1 -0
  9. package/dist/commands/diag/keygen.d.ts +11 -0
  10. package/dist/commands/diag/keygen.d.ts.map +1 -0
  11. package/dist/commands/diag/keygen.js +36 -0
  12. package/dist/commands/diag/keygen.js.map +1 -0
  13. package/dist/commands/diag/scrub.d.ts +15 -0
  14. package/dist/commands/diag/scrub.d.ts.map +1 -0
  15. package/dist/commands/diag/scrub.js +34 -0
  16. package/dist/commands/diag/scrub.js.map +1 -0
  17. package/dist/commands/diag/slow.d.ts +14 -0
  18. package/dist/commands/diag/slow.d.ts.map +1 -0
  19. package/dist/commands/diag/slow.js +32 -0
  20. package/dist/commands/diag/slow.js.map +1 -0
  21. package/dist/commands/diag/timeline.d.ts +14 -0
  22. package/dist/commands/diag/timeline.d.ts.map +1 -0
  23. package/dist/commands/diag/timeline.js +29 -0
  24. package/dist/commands/diag/timeline.js.map +1 -0
  25. package/dist/commands/install/index.d.ts +12 -0
  26. package/dist/commands/install/index.d.ts.map +1 -1
  27. package/dist/commands/install/index.js +32 -5
  28. package/dist/commands/install/index.js.map +1 -1
  29. package/dist/commands/migrate/index.d.ts +26 -6
  30. package/dist/commands/migrate/index.d.ts.map +1 -1
  31. package/dist/commands/migrate/index.js +93 -21
  32. package/dist/commands/migrate/index.js.map +1 -1
  33. package/dist/commands/test/suite.d.ts +2 -0
  34. package/dist/commands/test/suite.d.ts.map +1 -1
  35. package/dist/commands/test/suite.js +10 -0
  36. package/dist/commands/test/suite.js.map +1 -1
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +2 -1
  39. package/dist/config.js.map +1 -1
  40. package/dist/lib/db-version.d.ts +34 -7
  41. package/dist/lib/db-version.d.ts.map +1 -1
  42. package/dist/lib/db-version.js +45 -17
  43. package/dist/lib/db-version.js.map +1 -1
  44. package/dist/lib/migration-fetch.d.ts +17 -14
  45. package/dist/lib/migration-fetch.d.ts.map +1 -1
  46. package/dist/lib/migration-fetch.js +35 -25
  47. package/dist/lib/migration-fetch.js.map +1 -1
  48. package/dist/lib/migration-timeout.d.ts +15 -0
  49. package/dist/lib/migration-timeout.d.ts.map +1 -0
  50. package/dist/lib/migration-timeout.js +23 -0
  51. package/dist/lib/migration-timeout.js.map +1 -0
  52. package/dist/lib/out-of-order.d.ts +56 -0
  53. package/dist/lib/out-of-order.d.ts.map +1 -0
  54. package/dist/lib/out-of-order.js +37 -0
  55. package/dist/lib/out-of-order.js.map +1 -0
  56. package/dist/light-commands.d.ts.map +1 -1
  57. package/dist/light-commands.js +13 -0
  58. package/dist/light-commands.js.map +1 -1
  59. package/dist/utils/diag-utils.d.ts +34 -0
  60. package/dist/utils/diag-utils.d.ts.map +1 -0
  61. package/dist/utils/diag-utils.js +147 -0
  62. package/dist/utils/diag-utils.js.map +1 -0
  63. package/oclif.manifest.json +901 -564
  64. package/package.json +28 -27
@@ -1941,62 +1941,6 @@
1941
1941
  "usage.js"
1942
1942
  ]
1943
1943
  },
1944
- "dev": {
1945
- "aliases": [],
1946
- "args": {},
1947
- "description": "Local development tooling: generate, inspect, and tear down the cross-repo pnpm workspace that links sibling repo clones. Run `mj dev usage` for every command's flags, examples, and runtime hints.",
1948
- "flags": {},
1949
- "hasDynamicHelp": false,
1950
- "hidden": false,
1951
- "hiddenAliases": [],
1952
- "id": "dev",
1953
- "pluginAlias": "@memberjunction/cli",
1954
- "pluginName": "@memberjunction/cli",
1955
- "pluginType": "core",
1956
- "strict": true,
1957
- "enableJsonFlag": false,
1958
- "isESM": true,
1959
- "relativePath": [
1960
- "dist",
1961
- "commands",
1962
- "dev",
1963
- "index.js"
1964
- ]
1965
- },
1966
- "dev:usage": {
1967
- "aliases": [],
1968
- "args": {},
1969
- "description": "Show usage, flags, examples, and runtime hints for every `mj dev` command.",
1970
- "flags": {
1971
- "format": {
1972
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
1973
- "name": "format",
1974
- "hasDynamicHelp": false,
1975
- "multiple": false,
1976
- "options": [
1977
- "text",
1978
- "json",
1979
- "md"
1980
- ],
1981
- "type": "option"
1982
- }
1983
- },
1984
- "hasDynamicHelp": false,
1985
- "hiddenAliases": [],
1986
- "id": "dev:usage",
1987
- "pluginAlias": "@memberjunction/cli",
1988
- "pluginName": "@memberjunction/cli",
1989
- "pluginType": "core",
1990
- "strict": true,
1991
- "enableJsonFlag": false,
1992
- "isESM": true,
1993
- "relativePath": [
1994
- "dist",
1995
- "commands",
1996
- "dev",
1997
- "usage.js"
1998
- ]
1999
- },
2000
1944
  "dbdoc:analyze": {
2001
1945
  "aliases": [],
2002
1946
  "args": {},
@@ -2526,83 +2470,15 @@
2526
2470
  "usage.js"
2527
2471
  ]
2528
2472
  },
2529
- "doctor": {
2473
+ "dev": {
2530
2474
  "aliases": [],
2531
2475
  "args": {},
2532
- "description": "Diagnose a MemberJunction installation",
2533
- "examples": [
2534
- "<%= config.bin %> <%= command.id %>",
2535
- "<%= config.bin %> <%= command.id %> --dir ./my-mj-project",
2536
- "<%= config.bin %> <%= command.id %> --format json",
2537
- "<%= config.bin %> <%= command.id %> --scope ai",
2538
- "<%= config.bin %> <%= command.id %> --verbose",
2539
- "<%= config.bin %> <%= command.id %> --report",
2540
- "<%= config.bin %> <%= command.id %> --report_extended"
2541
- ],
2542
- "flags": {
2543
- "dir": {
2544
- "description": "Target directory to diagnose",
2545
- "name": "dir",
2546
- "default": ".",
2547
- "hasDynamicHelp": false,
2548
- "multiple": false,
2549
- "type": "option"
2550
- },
2551
- "scope": {
2552
- "description": "Diagnostic scope to filter by (install, runtime, ai, metadata, agent)",
2553
- "name": "scope",
2554
- "hasDynamicHelp": false,
2555
- "multiple": false,
2556
- "options": [
2557
- "install",
2558
- "runtime",
2559
- "ai",
2560
- "metadata",
2561
- "agent"
2562
- ],
2563
- "type": "option"
2564
- },
2565
- "format": {
2566
- "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.",
2567
- "name": "format",
2568
- "hasDynamicHelp": false,
2569
- "multiple": false,
2570
- "options": [
2571
- "text",
2572
- "json",
2573
- "md",
2574
- "human",
2575
- "console",
2576
- "markdown",
2577
- "compact",
2578
- "table"
2579
- ],
2580
- "type": "option"
2581
- },
2582
- "verbose": {
2583
- "char": "v",
2584
- "description": "Show detailed output including suggested fixes inline",
2585
- "name": "verbose",
2586
- "allowNo": false,
2587
- "type": "boolean"
2588
- },
2589
- "report": {
2590
- "char": "r",
2591
- "description": "Generate a diagnostic report file (mj-diagnostic-report.md) for sharing with support",
2592
- "name": "report",
2593
- "allowNo": false,
2594
- "type": "boolean"
2595
- },
2596
- "report_extended": {
2597
- "description": "Generate an extended report with config file snapshots and service startup log capture (~60s longer)",
2598
- "name": "report_extended",
2599
- "allowNo": false,
2600
- "type": "boolean"
2601
- }
2602
- },
2476
+ "description": "Local development tooling: generate, inspect, and tear down the cross-repo pnpm workspace that links sibling repo clones. Run `mj dev usage` for every command's flags, examples, and runtime hints.",
2477
+ "flags": {},
2603
2478
  "hasDynamicHelp": false,
2479
+ "hidden": false,
2604
2480
  "hiddenAliases": [],
2605
- "id": "doctor",
2481
+ "id": "dev",
2606
2482
  "pluginAlias": "@memberjunction/cli",
2607
2483
  "pluginName": "@memberjunction/cli",
2608
2484
  "pluginType": "core",
@@ -2612,14 +2488,14 @@
2612
2488
  "relativePath": [
2613
2489
  "dist",
2614
2490
  "commands",
2615
- "doctor",
2491
+ "dev",
2616
2492
  "index.js"
2617
2493
  ]
2618
2494
  },
2619
- "doctor:usage": {
2495
+ "dev:usage": {
2620
2496
  "aliases": [],
2621
2497
  "args": {},
2622
- "description": "Show usage, flags, examples, and runtime hints for every `mj doctor` command.",
2498
+ "description": "Show usage, flags, examples, and runtime hints for every `mj dev` command.",
2623
2499
  "flags": {
2624
2500
  "format": {
2625
2501
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -2636,7 +2512,7 @@
2636
2512
  },
2637
2513
  "hasDynamicHelp": false,
2638
2514
  "hiddenAliases": [],
2639
- "id": "doctor:usage",
2515
+ "id": "dev:usage",
2640
2516
  "pluginAlias": "@memberjunction/cli",
2641
2517
  "pluginName": "@memberjunction/cli",
2642
2518
  "pluginType": "core",
@@ -2646,102 +2522,60 @@
2646
2522
  "relativePath": [
2647
2523
  "dist",
2648
2524
  "commands",
2649
- "doctor",
2525
+ "dev",
2650
2526
  "usage.js"
2651
2527
  ]
2652
2528
  },
2653
- "migrate:convert": {
2529
+ "diag:export": {
2654
2530
  "aliases": [],
2655
- "args": {},
2656
- "description": "Convert T-SQL migrations to PostgreSQL",
2657
- "examples": [
2658
- "<%= config.bin %> migrate convert --split",
2659
- "<%= config.bin %> migrate convert --split --dry-run",
2660
- "<%= config.bin %> migrate convert --split --file V202604060452__v5.24.x__KnowledgeHub.sql",
2661
- "<%= config.bin %> migrate convert --source-dir ./migrations/v5 --output-dir ./migrations-pg/v5",
2662
- "<%= config.bin %> migrate convert --verbose"
2663
- ],
2531
+ "args": {
2532
+ "file": {
2533
+ "description": "Path to the .mjdiag bundle archive",
2534
+ "name": "file",
2535
+ "required": true
2536
+ }
2537
+ },
2538
+ "description": "Export .mjdiag traces to Chrome Trace Event (Perfetto) or OpenTelemetry OTLP JSON",
2664
2539
  "flags": {
2665
- "source-dir": {
2666
- "description": "Source T-SQL migrations directory",
2667
- "name": "source-dir",
2668
- "default": "./migrations/v5",
2540
+ "output": {
2541
+ "char": "o",
2542
+ "description": "Output JSON file path",
2543
+ "name": "output",
2544
+ "required": true,
2669
2545
  "hasDynamicHelp": false,
2670
2546
  "multiple": false,
2671
2547
  "type": "option"
2672
2548
  },
2673
- "output-dir": {
2674
- "description": "Output PG migrations directory",
2675
- "name": "output-dir",
2676
- "default": "./migrations-pg/v5",
2677
- "hasDynamicHelp": false,
2678
- "multiple": false,
2679
- "type": "option"
2549
+ "perfetto": {
2550
+ "description": "Export in Chrome Trace Event format for ui.perfetto.dev",
2551
+ "name": "perfetto",
2552
+ "allowNo": false,
2553
+ "type": "boolean"
2680
2554
  },
2681
- "file": {
2682
- "description": "Convert a specific file (filename only, looked up in source-dir)",
2683
- "name": "file",
2684
- "hasDynamicHelp": false,
2685
- "multiple": false,
2686
- "type": "option"
2555
+ "otlp": {
2556
+ "description": "Export in OpenTelemetry OTLP JSON format",
2557
+ "name": "otlp",
2558
+ "allowNo": false,
2559
+ "type": "boolean"
2687
2560
  },
2688
- "schema": {
2689
- "description": "Target schema name",
2690
- "name": "schema",
2691
- "default": "__mj",
2561
+ "private-key": {
2562
+ "description": "Base64 PKCS#8 X25519 private key for an encrypted MJDB envelope. The value is visible to other processes and stays in shell history; prefer --private-key-file or MJ_DIAG_PRIVATE_KEY",
2563
+ "name": "private-key",
2692
2564
  "hasDynamicHelp": false,
2693
2565
  "multiple": false,
2694
2566
  "type": "option"
2695
2567
  },
2696
- "core-schema": {
2697
- "description": "MJ core schema substituted for ${mjSchema} (default __mj). Distinct from --schema, which is the app's OWN schema: an Open App migration references core as ${mjSchema} and itself as ${flyway:defaultSchema}, and for every app those differ.",
2698
- "name": "core-schema",
2699
- "default": "__mj",
2568
+ "private-key-file": {
2569
+ "description": "Path to a file that holds the base64 PKCS#8 X25519 private key for an encrypted MJDB envelope",
2570
+ "name": "private-key-file",
2700
2571
  "hasDynamicHelp": false,
2701
2572
  "multiple": false,
2702
2573
  "type": "option"
2703
- },
2704
- "dry-run": {
2705
- "description": "Show what would be converted without writing files",
2706
- "name": "dry-run",
2707
- "allowNo": false,
2708
- "type": "boolean"
2709
- },
2710
- "no-header": {
2711
- "description": "Skip PG header (extensions, schema, implicit cast)",
2712
- "name": "no-header",
2713
- "allowNo": false,
2714
- "type": "boolean"
2715
- },
2716
- "verbose": {
2717
- "char": "v",
2718
- "description": "Show per-statement progress",
2719
- "name": "verbose",
2720
- "allowNo": false,
2721
- "type": "boolean"
2722
- },
2723
- "split": {
2724
- "description": "Split-and-regenerate (the standard path): transpile only hand-written DDL via the AST dialect; CodeGen objects are regenerated by `mj codegen` and mj-sync metadata re-seeded by `mj sync push`; every conversion gap is surfaced and fails the run unless --allow-gaps.",
2725
- "name": "split",
2726
- "allowNo": false,
2727
- "type": "boolean"
2728
- },
2729
- "allow-gaps": {
2730
- "description": "Exit 0 even when migrations have conversion gaps — with --split: hand-authoring needed or unhandled statements; on the legacy path: \"-- Could not parse\" / \"-- ERROR converting batch\" markers in the output. Gaps are still embedded as comments and listed in the summary.",
2731
- "name": "allow-gaps",
2732
- "allowNo": false,
2733
- "type": "boolean"
2734
- },
2735
- "bake-codegen": {
2736
- "description": "With --split: bake native PG CodeGen objects inline per migration (Path C), so the set deploys with `mj migrate` alone — no `mj codegen` step. Requires a LIVE working PG database (DB_PLATFORM=postgresql + PG_* env, same as `mj codegen`) seeded to the state just BEFORE the migrations being converted (typically the latest baseline); the converter brings it forward in committed order as it bakes. Not compatible with --dry-run.",
2737
- "name": "bake-codegen",
2738
- "allowNo": false,
2739
- "type": "boolean"
2740
2574
  }
2741
2575
  },
2742
2576
  "hasDynamicHelp": false,
2743
2577
  "hiddenAliases": [],
2744
- "id": "migrate:convert",
2578
+ "id": "diag:export",
2745
2579
  "pluginAlias": "@memberjunction/cli",
2746
2580
  "pluginName": "@memberjunction/cli",
2747
2581
  "pluginType": "core",
@@ -2751,63 +2585,45 @@
2751
2585
  "relativePath": [
2752
2586
  "dist",
2753
2587
  "commands",
2754
- "migrate",
2755
- "convert.js"
2588
+ "diag",
2589
+ "export.js"
2756
2590
  ]
2757
2591
  },
2758
- "migrate:create": {
2592
+ "diag:inspect": {
2759
2593
  "aliases": [],
2760
2594
  "args": {
2761
- "description": {
2762
- "description": "Short description (will be converted to PascalCase with underscores)",
2763
- "name": "description",
2595
+ "file": {
2596
+ "description": "Path to the .mjdiag bundle archive",
2597
+ "name": "file",
2764
2598
  "required": true
2765
2599
  }
2766
2600
  },
2767
- "description": "Scaffold a new migration file for the current database platform",
2768
- "examples": [
2769
- "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\"",
2770
- "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\" --version 5.25 --platform postgresql",
2771
- "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\" --dir ./migrations/v5"
2772
- ],
2601
+ "description": "Verify and inspect a MemberJunction .mjdiag diagnostic bundle",
2773
2602
  "flags": {
2774
- "version": {
2775
- "char": "v",
2776
- "description": "Migration version tag, e.g. \"5.25\" (default: parsed from repo baseline or \"0.0\")",
2777
- "name": "version",
2603
+ "private-key": {
2604
+ "description": "Base64 PKCS#8 X25519 private key for an encrypted MJDB envelope. The value is visible to other processes and stays in shell history; prefer --private-key-file or MJ_DIAG_PRIVATE_KEY",
2605
+ "name": "private-key",
2778
2606
  "hasDynamicHelp": false,
2779
2607
  "multiple": false,
2780
2608
  "type": "option"
2781
2609
  },
2782
- "platform": {
2783
- "char": "p",
2784
- "description": "Override platform: sqlserver | postgresql (default: config.dbPlatform)",
2785
- "name": "platform",
2786
- "hasDynamicHelp": false,
2787
- "multiple": false,
2788
- "options": [
2789
- "sqlserver",
2790
- "postgresql"
2791
- ],
2792
- "type": "option"
2793
- },
2794
- "dir": {
2795
- "description": "Output directory (default: ./migrations/v5 or ./migrations-pg/v5)",
2796
- "name": "dir",
2610
+ "private-key-file": {
2611
+ "description": "Path to a file that holds the base64 PKCS#8 X25519 private key for an encrypted MJDB envelope",
2612
+ "name": "private-key-file",
2797
2613
  "hasDynamicHelp": false,
2798
2614
  "multiple": false,
2799
2615
  "type": "option"
2800
2616
  },
2801
- "x-x": {
2802
- "description": "Use {version}.x.x suffix instead of {version}.x (e.g. 5.25.x instead of 5.25.x)",
2803
- "name": "x-x",
2617
+ "json": {
2618
+ "description": "Emit machine-readable JSON output",
2619
+ "name": "json",
2804
2620
  "allowNo": false,
2805
2621
  "type": "boolean"
2806
2622
  }
2807
2623
  },
2808
2624
  "hasDynamicHelp": false,
2809
2625
  "hiddenAliases": [],
2810
- "id": "migrate:create",
2626
+ "id": "diag:inspect",
2811
2627
  "pluginAlias": "@memberjunction/cli",
2812
2628
  "pluginName": "@memberjunction/cli",
2813
2629
  "pluginType": "core",
@@ -2817,66 +2633,39 @@
2817
2633
  "relativePath": [
2818
2634
  "dist",
2819
2635
  "commands",
2820
- "migrate",
2821
- "create.js"
2636
+ "diag",
2637
+ "inspect.js"
2822
2638
  ]
2823
2639
  },
2824
- "migrate": {
2640
+ "diag:keygen": {
2825
2641
  "aliases": [],
2826
2642
  "args": {},
2827
- "description": "Migrate MemberJunction database to latest version. Open App migrates also run the core metadata-heal procs (same work as R__RefreshMetadata) scoped to the app schema, on SQL Server and PostgreSQL.",
2828
- "examples": [
2829
- "<%= config.bin %> <%= command.id %>\n",
2830
- "<%= config.bin %> <%= command.id %> --schema __BCSaaS --dir ./migrations/v1\n",
2831
- "<%= config.bin %> <%= command.id %> --schema __BCSaaS --tag v1.0.0\n"
2832
- ],
2643
+ "description": "Generate an X25519 collector keypair (and optional Ed25519 signing keypair) for a Diagnostic Bundles Intake server",
2833
2644
  "flags": {
2834
- "verbose": {
2835
- "char": "v",
2836
- "description": "Enable additional logging",
2837
- "name": "verbose",
2838
- "allowNo": false,
2839
- "type": "boolean"
2840
- },
2841
- "tag": {
2842
- "char": "t",
2843
- "description": "Version tag to use for running remote migrations",
2844
- "name": "tag",
2845
- "hasDynamicHelp": false,
2846
- "multiple": false,
2847
- "type": "option"
2848
- },
2849
- "schema": {
2850
- "char": "s",
2851
- "description": "Target schema (overrides coreSchema from config)",
2852
- "name": "schema",
2853
- "hasDynamicHelp": false,
2854
- "multiple": false,
2855
- "type": "option"
2856
- },
2857
- "dir": {
2858
- "description": "Migration source directory (overrides migrationsLocation from config)",
2859
- "name": "dir",
2645
+ "key-id": {
2646
+ "description": "Key identifier (kid) embedded in MJDB envelope headers",
2647
+ "name": "key-id",
2648
+ "default": "mjc-intake-2026-01",
2860
2649
  "hasDynamicHelp": false,
2861
2650
  "multiple": false,
2862
2651
  "type": "option"
2863
2652
  },
2864
- "check-connection": {
2865
- "description": "Verify the database connection (including TLS) and exit without migrating",
2866
- "name": "check-connection",
2653
+ "signing": {
2654
+ "description": "Also generate an Ed25519 keypair for signing public key manifests or sender envelopes",
2655
+ "name": "signing",
2867
2656
  "allowNo": false,
2868
2657
  "type": "boolean"
2869
2658
  },
2870
- "skip-cache-clear": {
2871
- "description": "Do not clear the shared Redis cache (REDIS_URL) after migrating. Also: MJ_SKIP_SHARED_CACHE_CLEAR=1",
2872
- "name": "skip-cache-clear",
2659
+ "json": {
2660
+ "description": "Emit JSON output",
2661
+ "name": "json",
2873
2662
  "allowNo": false,
2874
2663
  "type": "boolean"
2875
2664
  }
2876
2665
  },
2877
2666
  "hasDynamicHelp": false,
2878
2667
  "hiddenAliases": [],
2879
- "id": "migrate",
2668
+ "id": "diag:keygen",
2880
2669
  "pluginAlias": "@memberjunction/cli",
2881
2670
  "pluginName": "@memberjunction/cli",
2882
2671
  "pluginType": "core",
@@ -2886,68 +2675,111 @@
2886
2675
  "relativePath": [
2887
2676
  "dist",
2888
2677
  "commands",
2889
- "migrate",
2890
- "index.js"
2678
+ "diag",
2679
+ "keygen.js"
2891
2680
  ]
2892
2681
  },
2893
- "migrate:rebake": {
2682
+ "diag:scrub": {
2894
2683
  "aliases": [],
2895
- "args": {},
2896
- "description": "Re-bake the post-baseline PG migration set with inline native CodeGen",
2897
- "examples": [
2898
- "<%= config.bin %> migrate rebake",
2899
- "<%= config.bin %> migrate rebake --baseline-floor V202605291452 --dry-run"
2900
- ],
2684
+ "args": {
2685
+ "file": {
2686
+ "description": "Path to the source .mjdiag bundle archive",
2687
+ "name": "file",
2688
+ "required": true
2689
+ }
2690
+ },
2691
+ "description": "Re-scrub an existing .mjdiag bundle archive at Standard or FullRaw profile",
2901
2692
  "flags": {
2902
- "source-dir": {
2903
- "description": "Source T-SQL migrations directory",
2904
- "name": "source-dir",
2905
- "default": "./migrations/v5",
2693
+ "output": {
2694
+ "char": "o",
2695
+ "description": "Output path for the scrubbed .mjdiag archive",
2696
+ "name": "output",
2697
+ "required": true,
2906
2698
  "hasDynamicHelp": false,
2907
2699
  "multiple": false,
2908
2700
  "type": "option"
2909
2701
  },
2910
- "output-dir": {
2911
- "description": "PG migrations directory (committed files read here + baked output written here)",
2912
- "name": "output-dir",
2913
- "default": "./migrations-pg/v5",
2702
+ "profile": {
2703
+ "description": "Scrubber profile to apply (Standard or FullRaw)",
2704
+ "name": "profile",
2705
+ "default": "Standard",
2914
2706
  "hasDynamicHelp": false,
2915
2707
  "multiple": false,
2708
+ "options": [
2709
+ "Standard",
2710
+ "FullRaw"
2711
+ ],
2916
2712
  "type": "option"
2917
2713
  },
2918
- "schema": {
2919
- "description": "Target schema name",
2920
- "name": "schema",
2921
- "default": "__mj",
2714
+ "private-key": {
2715
+ "description": "Base64 PKCS#8 X25519 private key for an encrypted MJDB envelope. The value is visible to other processes and stays in shell history; prefer --private-key-file or MJ_DIAG_PRIVATE_KEY",
2716
+ "name": "private-key",
2922
2717
  "hasDynamicHelp": false,
2923
2718
  "multiple": false,
2924
2719
  "type": "option"
2925
2720
  },
2926
- "core-schema": {
2927
- "description": "MJ core schema substituted for ${mjSchema} (default __mj). Distinct from --schema, which is the app's OWN schema: an Open App migration references core as ${mjSchema} and itself as ${flyway:defaultSchema}, and for every app those differ.",
2928
- "name": "core-schema",
2929
- "default": "__mj",
2721
+ "private-key-file": {
2722
+ "description": "Path to a file that holds the base64 PKCS#8 X25519 private key for an encrypted MJDB envelope",
2723
+ "name": "private-key-file",
2724
+ "hasDynamicHelp": false,
2725
+ "multiple": false,
2726
+ "type": "option"
2727
+ }
2728
+ },
2729
+ "hasDynamicHelp": false,
2730
+ "hiddenAliases": [],
2731
+ "id": "diag:scrub",
2732
+ "pluginAlias": "@memberjunction/cli",
2733
+ "pluginName": "@memberjunction/cli",
2734
+ "pluginType": "core",
2735
+ "strict": true,
2736
+ "enableJsonFlag": false,
2737
+ "isESM": true,
2738
+ "relativePath": [
2739
+ "dist",
2740
+ "commands",
2741
+ "diag",
2742
+ "scrub.js"
2743
+ ]
2744
+ },
2745
+ "diag:slow": {
2746
+ "aliases": [],
2747
+ "args": {
2748
+ "file": {
2749
+ "description": "Path to the .mjdiag bundle archive",
2750
+ "name": "file",
2751
+ "required": true
2752
+ }
2753
+ },
2754
+ "description": "List slow client/server spans and SQL queries from a .mjdiag bundle",
2755
+ "flags": {
2756
+ "threshold": {
2757
+ "char": "t",
2758
+ "description": "Minimum duration in milliseconds",
2759
+ "name": "threshold",
2760
+ "default": 500,
2930
2761
  "hasDynamicHelp": false,
2931
2762
  "multiple": false,
2932
2763
  "type": "option"
2933
2764
  },
2934
- "baseline-floor": {
2935
- "description": "Re-bake migrations strictly AFTER this version key (default: the latest B* in output-dir)",
2936
- "name": "baseline-floor",
2765
+ "private-key": {
2766
+ "description": "Base64 PKCS#8 X25519 private key for an encrypted MJDB envelope. The value is visible to other processes and stays in shell history; prefer --private-key-file or MJ_DIAG_PRIVATE_KEY",
2767
+ "name": "private-key",
2937
2768
  "hasDynamicHelp": false,
2938
2769
  "multiple": false,
2939
2770
  "type": "option"
2940
2771
  },
2941
- "dry-run": {
2942
- "description": "Report what would be re-baked without writing files",
2943
- "name": "dry-run",
2944
- "allowNo": false,
2945
- "type": "boolean"
2772
+ "private-key-file": {
2773
+ "description": "Path to a file that holds the base64 PKCS#8 X25519 private key for an encrypted MJDB envelope",
2774
+ "name": "private-key-file",
2775
+ "hasDynamicHelp": false,
2776
+ "multiple": false,
2777
+ "type": "option"
2946
2778
  }
2947
2779
  },
2948
2780
  "hasDynamicHelp": false,
2949
2781
  "hiddenAliases": [],
2950
- "id": "migrate:rebake",
2782
+ "id": "diag:slow",
2951
2783
  "pluginAlias": "@memberjunction/cli",
2952
2784
  "pluginName": "@memberjunction/cli",
2953
2785
  "pluginType": "core",
@@ -2957,31 +2789,48 @@
2957
2789
  "relativePath": [
2958
2790
  "dist",
2959
2791
  "commands",
2960
- "migrate",
2961
- "rebake.js"
2792
+ "diag",
2793
+ "slow.js"
2962
2794
  ]
2963
2795
  },
2964
- "migrate:usage": {
2796
+ "diag:timeline": {
2965
2797
  "aliases": [],
2966
- "args": {},
2967
- "description": "Show usage, flags, examples, and runtime hints for every `mj migrate` command.",
2798
+ "args": {
2799
+ "file": {
2800
+ "description": "Path to the .mjdiag bundle archive",
2801
+ "name": "file",
2802
+ "required": true
2803
+ }
2804
+ },
2805
+ "description": "Print a merged chronological timeline of client spans, server spans, SQL queries and breadcrumbs",
2968
2806
  "flags": {
2969
- "format": {
2970
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
2971
- "name": "format",
2807
+ "limit": {
2808
+ "char": "n",
2809
+ "description": "Maximum number of timeline rows to display",
2810
+ "name": "limit",
2811
+ "default": 50,
2812
+ "hasDynamicHelp": false,
2813
+ "multiple": false,
2814
+ "type": "option"
2815
+ },
2816
+ "private-key": {
2817
+ "description": "Base64 PKCS#8 X25519 private key for an encrypted MJDB envelope. The value is visible to other processes and stays in shell history; prefer --private-key-file or MJ_DIAG_PRIVATE_KEY",
2818
+ "name": "private-key",
2819
+ "hasDynamicHelp": false,
2820
+ "multiple": false,
2821
+ "type": "option"
2822
+ },
2823
+ "private-key-file": {
2824
+ "description": "Path to a file that holds the base64 PKCS#8 X25519 private key for an encrypted MJDB envelope",
2825
+ "name": "private-key-file",
2972
2826
  "hasDynamicHelp": false,
2973
2827
  "multiple": false,
2974
- "options": [
2975
- "text",
2976
- "json",
2977
- "md"
2978
- ],
2979
2828
  "type": "option"
2980
2829
  }
2981
2830
  },
2982
2831
  "hasDynamicHelp": false,
2983
2832
  "hiddenAliases": [],
2984
- "id": "migrate:usage",
2833
+ "id": "diag:timeline",
2985
2834
  "pluginAlias": "@memberjunction/cli",
2986
2835
  "pluginName": "@memberjunction/cli",
2987
2836
  "pluginType": "core",
@@ -2991,41 +2840,87 @@
2991
2840
  "relativePath": [
2992
2841
  "dist",
2993
2842
  "commands",
2994
- "migrate",
2995
- "usage.js"
2843
+ "diag",
2844
+ "timeline.js"
2996
2845
  ]
2997
2846
  },
2998
- "plugin:add": {
2847
+ "doctor": {
2999
2848
  "aliases": [],
3000
- "args": {
3001
- "package": {
3002
- "description": "Plugin entry-point specifier (package name, subpath, or relative path)",
3003
- "name": "package",
3004
- "required": true
3005
- }
3006
- },
3007
- "description": "Register a CLI plugin package in mj-cli-plugins.json so `mj` loads it at startup.",
2849
+ "args": {},
2850
+ "description": "Diagnose a MemberJunction installation",
3008
2851
  "examples": [
3009
- "<%= config.bin %> <%= command.id %> @my-org/mj-plugin/plugins",
3010
- "<%= config.bin %> <%= command.id %> ./local-plugins/my-tool"
2852
+ "<%= config.bin %> <%= command.id %>",
2853
+ "<%= config.bin %> <%= command.id %> --dir ./my-mj-project",
2854
+ "<%= config.bin %> <%= command.id %> --format json",
2855
+ "<%= config.bin %> <%= command.id %> --scope ai",
2856
+ "<%= config.bin %> <%= command.id %> --verbose",
2857
+ "<%= config.bin %> <%= command.id %> --report",
2858
+ "<%= config.bin %> <%= command.id %> --report_extended"
3011
2859
  ],
3012
2860
  "flags": {
2861
+ "dir": {
2862
+ "description": "Target directory to diagnose",
2863
+ "name": "dir",
2864
+ "default": ".",
2865
+ "hasDynamicHelp": false,
2866
+ "multiple": false,
2867
+ "type": "option"
2868
+ },
2869
+ "scope": {
2870
+ "description": "Diagnostic scope to filter by (install, runtime, ai, metadata, agent)",
2871
+ "name": "scope",
2872
+ "hasDynamicHelp": false,
2873
+ "multiple": false,
2874
+ "options": [
2875
+ "install",
2876
+ "runtime",
2877
+ "ai",
2878
+ "metadata",
2879
+ "agent"
2880
+ ],
2881
+ "type": "option"
2882
+ },
3013
2883
  "format": {
3014
- "description": "Output format",
2884
+ "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.",
3015
2885
  "name": "format",
3016
- "default": "text",
3017
2886
  "hasDynamicHelp": false,
3018
2887
  "multiple": false,
3019
2888
  "options": [
3020
2889
  "text",
3021
- "json"
2890
+ "json",
2891
+ "md",
2892
+ "human",
2893
+ "console",
2894
+ "markdown",
2895
+ "compact",
2896
+ "table"
3022
2897
  ],
3023
2898
  "type": "option"
2899
+ },
2900
+ "verbose": {
2901
+ "char": "v",
2902
+ "description": "Show detailed output including suggested fixes inline",
2903
+ "name": "verbose",
2904
+ "allowNo": false,
2905
+ "type": "boolean"
2906
+ },
2907
+ "report": {
2908
+ "char": "r",
2909
+ "description": "Generate a diagnostic report file (mj-diagnostic-report.md) for sharing with support",
2910
+ "name": "report",
2911
+ "allowNo": false,
2912
+ "type": "boolean"
2913
+ },
2914
+ "report_extended": {
2915
+ "description": "Generate an extended report with config file snapshots and service startup log capture (~60s longer)",
2916
+ "name": "report_extended",
2917
+ "allowNo": false,
2918
+ "type": "boolean"
3024
2919
  }
3025
2920
  },
3026
2921
  "hasDynamicHelp": false,
3027
2922
  "hiddenAliases": [],
3028
- "id": "plugin:add",
2923
+ "id": "doctor",
3029
2924
  "pluginAlias": "@memberjunction/cli",
3030
2925
  "pluginName": "@memberjunction/cli",
3031
2926
  "pluginType": "core",
@@ -3035,14 +2930,14 @@
3035
2930
  "relativePath": [
3036
2931
  "dist",
3037
2932
  "commands",
3038
- "plugin",
3039
- "add.js"
2933
+ "doctor",
2934
+ "index.js"
3040
2935
  ]
3041
2936
  },
3042
- "plugin:usage": {
2937
+ "doctor:usage": {
3043
2938
  "aliases": [],
3044
2939
  "args": {},
3045
- "description": "Show usage, flags, examples, and runtime hints for every `mj plugin` command.",
2940
+ "description": "Show usage, flags, examples, and runtime hints for every `mj doctor` command.",
3046
2941
  "flags": {
3047
2942
  "format": {
3048
2943
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -3059,7 +2954,7 @@
3059
2954
  },
3060
2955
  "hasDynamicHelp": false,
3061
2956
  "hiddenAliases": [],
3062
- "id": "plugin:usage",
2957
+ "id": "doctor:usage",
3063
2958
  "pluginAlias": "@memberjunction/cli",
3064
2959
  "pluginName": "@memberjunction/cli",
3065
2960
  "pluginType": "core",
@@ -3069,7 +2964,7 @@
3069
2964
  "relativePath": [
3070
2965
  "dist",
3071
2966
  "commands",
3072
- "plugin",
2967
+ "doctor",
3073
2968
  "usage.js"
3074
2969
  ]
3075
2970
  },
@@ -3284,16 +3179,361 @@
3284
3179
  "allowNo": false,
3285
3180
  "type": "boolean"
3286
3181
  },
3287
- "no-claude-pack": {
3288
- "description": "Exclude the Claude Code pack (CLAUDE.md + .claude/ tree) from the scaffold. By default the pack ships with the install so opening Claude Code in your new MJ project gives you the curated MJ-aware experience immediately.",
3289
- "name": "no-claude-pack",
3182
+ "no-claude-pack": {
3183
+ "description": "Exclude the Claude Code pack (CLAUDE.md + .claude/ tree) from the scaffold. By default the pack ships with the install so opening Claude Code in your new MJ project gives you the curated MJ-aware experience immediately.",
3184
+ "name": "no-claude-pack",
3185
+ "allowNo": false,
3186
+ "type": "boolean"
3187
+ }
3188
+ },
3189
+ "hasDynamicHelp": false,
3190
+ "hiddenAliases": [],
3191
+ "id": "install",
3192
+ "pluginAlias": "@memberjunction/cli",
3193
+ "pluginName": "@memberjunction/cli",
3194
+ "pluginType": "core",
3195
+ "strict": true,
3196
+ "enableJsonFlag": false,
3197
+ "isESM": true,
3198
+ "relativePath": [
3199
+ "dist",
3200
+ "commands",
3201
+ "install",
3202
+ "index.js"
3203
+ ]
3204
+ },
3205
+ "install:usage": {
3206
+ "aliases": [],
3207
+ "args": {},
3208
+ "description": "Show usage, flags, examples, and runtime hints for every `mj install` command.",
3209
+ "flags": {
3210
+ "format": {
3211
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
3212
+ "name": "format",
3213
+ "hasDynamicHelp": false,
3214
+ "multiple": false,
3215
+ "options": [
3216
+ "text",
3217
+ "json",
3218
+ "md"
3219
+ ],
3220
+ "type": "option"
3221
+ }
3222
+ },
3223
+ "hasDynamicHelp": false,
3224
+ "hiddenAliases": [],
3225
+ "id": "install:usage",
3226
+ "pluginAlias": "@memberjunction/cli",
3227
+ "pluginName": "@memberjunction/cli",
3228
+ "pluginType": "core",
3229
+ "strict": true,
3230
+ "enableJsonFlag": false,
3231
+ "isESM": true,
3232
+ "relativePath": [
3233
+ "dist",
3234
+ "commands",
3235
+ "install",
3236
+ "usage.js"
3237
+ ]
3238
+ },
3239
+ "migrate:convert": {
3240
+ "aliases": [],
3241
+ "args": {},
3242
+ "description": "Convert T-SQL migrations to PostgreSQL",
3243
+ "examples": [
3244
+ "<%= config.bin %> migrate convert --split",
3245
+ "<%= config.bin %> migrate convert --split --dry-run",
3246
+ "<%= config.bin %> migrate convert --split --file V202604060452__v5.24.x__KnowledgeHub.sql",
3247
+ "<%= config.bin %> migrate convert --source-dir ./migrations/v5 --output-dir ./migrations-pg/v5",
3248
+ "<%= config.bin %> migrate convert --verbose"
3249
+ ],
3250
+ "flags": {
3251
+ "source-dir": {
3252
+ "description": "Source T-SQL migrations directory",
3253
+ "name": "source-dir",
3254
+ "default": "./migrations/v5",
3255
+ "hasDynamicHelp": false,
3256
+ "multiple": false,
3257
+ "type": "option"
3258
+ },
3259
+ "output-dir": {
3260
+ "description": "Output PG migrations directory",
3261
+ "name": "output-dir",
3262
+ "default": "./migrations-pg/v5",
3263
+ "hasDynamicHelp": false,
3264
+ "multiple": false,
3265
+ "type": "option"
3266
+ },
3267
+ "file": {
3268
+ "description": "Convert a specific file (filename only, looked up in source-dir)",
3269
+ "name": "file",
3270
+ "hasDynamicHelp": false,
3271
+ "multiple": false,
3272
+ "type": "option"
3273
+ },
3274
+ "schema": {
3275
+ "description": "Target schema name",
3276
+ "name": "schema",
3277
+ "default": "__mj",
3278
+ "hasDynamicHelp": false,
3279
+ "multiple": false,
3280
+ "type": "option"
3281
+ },
3282
+ "core-schema": {
3283
+ "description": "MJ core schema substituted for ${mjSchema} (default __mj). Distinct from --schema, which is the app's OWN schema: an Open App migration references core as ${mjSchema} and itself as ${flyway:defaultSchema}, and for every app those differ.",
3284
+ "name": "core-schema",
3285
+ "default": "__mj",
3286
+ "hasDynamicHelp": false,
3287
+ "multiple": false,
3288
+ "type": "option"
3289
+ },
3290
+ "dry-run": {
3291
+ "description": "Show what would be converted without writing files",
3292
+ "name": "dry-run",
3293
+ "allowNo": false,
3294
+ "type": "boolean"
3295
+ },
3296
+ "no-header": {
3297
+ "description": "Skip PG header (extensions, schema, implicit cast)",
3298
+ "name": "no-header",
3299
+ "allowNo": false,
3300
+ "type": "boolean"
3301
+ },
3302
+ "verbose": {
3303
+ "char": "v",
3304
+ "description": "Show per-statement progress",
3305
+ "name": "verbose",
3306
+ "allowNo": false,
3307
+ "type": "boolean"
3308
+ },
3309
+ "split": {
3310
+ "description": "Split-and-regenerate (the standard path): transpile only hand-written DDL via the AST dialect; CodeGen objects are regenerated by `mj codegen` and mj-sync metadata re-seeded by `mj sync push`; every conversion gap is surfaced and fails the run unless --allow-gaps.",
3311
+ "name": "split",
3312
+ "allowNo": false,
3313
+ "type": "boolean"
3314
+ },
3315
+ "allow-gaps": {
3316
+ "description": "Exit 0 even when migrations have conversion gaps — with --split: hand-authoring needed or unhandled statements; on the legacy path: \"-- Could not parse\" / \"-- ERROR converting batch\" markers in the output. Gaps are still embedded as comments and listed in the summary.",
3317
+ "name": "allow-gaps",
3318
+ "allowNo": false,
3319
+ "type": "boolean"
3320
+ },
3321
+ "bake-codegen": {
3322
+ "description": "With --split: bake native PG CodeGen objects inline per migration (Path C), so the set deploys with `mj migrate` alone — no `mj codegen` step. Requires a LIVE working PG database (DB_PLATFORM=postgresql + PG_* env, same as `mj codegen`) seeded to the state just BEFORE the migrations being converted (typically the latest baseline); the converter brings it forward in committed order as it bakes. Not compatible with --dry-run.",
3323
+ "name": "bake-codegen",
3324
+ "allowNo": false,
3325
+ "type": "boolean"
3326
+ }
3327
+ },
3328
+ "hasDynamicHelp": false,
3329
+ "hiddenAliases": [],
3330
+ "id": "migrate:convert",
3331
+ "pluginAlias": "@memberjunction/cli",
3332
+ "pluginName": "@memberjunction/cli",
3333
+ "pluginType": "core",
3334
+ "strict": true,
3335
+ "enableJsonFlag": false,
3336
+ "isESM": true,
3337
+ "relativePath": [
3338
+ "dist",
3339
+ "commands",
3340
+ "migrate",
3341
+ "convert.js"
3342
+ ]
3343
+ },
3344
+ "migrate:create": {
3345
+ "aliases": [],
3346
+ "args": {
3347
+ "description": {
3348
+ "description": "Short description (will be converted to PascalCase with underscores)",
3349
+ "name": "description",
3350
+ "required": true
3351
+ }
3352
+ },
3353
+ "description": "Scaffold a new migration file for the current database platform",
3354
+ "examples": [
3355
+ "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\"",
3356
+ "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\" --version 5.25 --platform postgresql",
3357
+ "<%= config.bin %> <%= command.id %> \"Add FooID to Bar\" --dir ./migrations/v5"
3358
+ ],
3359
+ "flags": {
3360
+ "version": {
3361
+ "char": "v",
3362
+ "description": "Migration version tag, e.g. \"5.25\" (default: parsed from repo baseline or \"0.0\")",
3363
+ "name": "version",
3364
+ "hasDynamicHelp": false,
3365
+ "multiple": false,
3366
+ "type": "option"
3367
+ },
3368
+ "platform": {
3369
+ "char": "p",
3370
+ "description": "Override platform: sqlserver | postgresql (default: config.dbPlatform)",
3371
+ "name": "platform",
3372
+ "hasDynamicHelp": false,
3373
+ "multiple": false,
3374
+ "options": [
3375
+ "sqlserver",
3376
+ "postgresql"
3377
+ ],
3378
+ "type": "option"
3379
+ },
3380
+ "dir": {
3381
+ "description": "Output directory (default: ./migrations/v5 or ./migrations-pg/v5)",
3382
+ "name": "dir",
3383
+ "hasDynamicHelp": false,
3384
+ "multiple": false,
3385
+ "type": "option"
3386
+ },
3387
+ "x-x": {
3388
+ "description": "Use {version}.x.x suffix instead of {version}.x (e.g. 5.25.x instead of 5.25.x)",
3389
+ "name": "x-x",
3390
+ "allowNo": false,
3391
+ "type": "boolean"
3392
+ }
3393
+ },
3394
+ "hasDynamicHelp": false,
3395
+ "hiddenAliases": [],
3396
+ "id": "migrate:create",
3397
+ "pluginAlias": "@memberjunction/cli",
3398
+ "pluginName": "@memberjunction/cli",
3399
+ "pluginType": "core",
3400
+ "strict": true,
3401
+ "enableJsonFlag": false,
3402
+ "isESM": true,
3403
+ "relativePath": [
3404
+ "dist",
3405
+ "commands",
3406
+ "migrate",
3407
+ "create.js"
3408
+ ]
3409
+ },
3410
+ "migrate": {
3411
+ "aliases": [],
3412
+ "args": {},
3413
+ "description": "Migrate MemberJunction database to latest version. Open App migrates also run the core metadata-heal procs (same work as R__RefreshMetadata) scoped to the app schema, on SQL Server and PostgreSQL. Each database request may run for up to 30 minutes by default; set MJ_MIGRATION_REQUEST_TIMEOUT (milliseconds) or dbRequestTimeout in mj.config.cjs to change it.",
3414
+ "examples": [
3415
+ "<%= config.bin %> <%= command.id %>\n",
3416
+ "<%= config.bin %> <%= command.id %> --schema __BCSaaS --dir ./migrations/v1\n",
3417
+ "<%= config.bin %> <%= command.id %> --schema __BCSaaS --tag v1.0.0\n"
3418
+ ],
3419
+ "flags": {
3420
+ "verbose": {
3421
+ "char": "v",
3422
+ "description": "Enable additional logging",
3423
+ "name": "verbose",
3424
+ "allowNo": false,
3425
+ "type": "boolean"
3426
+ },
3427
+ "tag": {
3428
+ "char": "t",
3429
+ "description": "Version tag to use for running remote migrations",
3430
+ "name": "tag",
3431
+ "hasDynamicHelp": false,
3432
+ "multiple": false,
3433
+ "type": "option"
3434
+ },
3435
+ "schema": {
3436
+ "char": "s",
3437
+ "description": "Target schema (overrides coreSchema from config)",
3438
+ "name": "schema",
3439
+ "hasDynamicHelp": false,
3440
+ "multiple": false,
3441
+ "type": "option"
3442
+ },
3443
+ "dir": {
3444
+ "description": "Migration source directory (overrides migrationsLocation from config)",
3445
+ "name": "dir",
3446
+ "hasDynamicHelp": false,
3447
+ "multiple": false,
3448
+ "type": "option"
3449
+ },
3450
+ "check-connection": {
3451
+ "description": "Verify the database connection (including TLS) and exit without migrating",
3452
+ "name": "check-connection",
3453
+ "allowNo": false,
3454
+ "type": "boolean"
3455
+ },
3456
+ "skip-cache-clear": {
3457
+ "description": "Do not clear the shared Redis cache (REDIS_URL) after migrating. Also: MJ_SKIP_SHARED_CACHE_CLEAR=1",
3458
+ "name": "skip-cache-clear",
3459
+ "allowNo": false,
3460
+ "type": "boolean"
3461
+ }
3462
+ },
3463
+ "hasDynamicHelp": false,
3464
+ "hiddenAliases": [],
3465
+ "id": "migrate",
3466
+ "pluginAlias": "@memberjunction/cli",
3467
+ "pluginName": "@memberjunction/cli",
3468
+ "pluginType": "core",
3469
+ "strict": true,
3470
+ "enableJsonFlag": false,
3471
+ "isESM": true,
3472
+ "relativePath": [
3473
+ "dist",
3474
+ "commands",
3475
+ "migrate",
3476
+ "index.js"
3477
+ ]
3478
+ },
3479
+ "migrate:rebake": {
3480
+ "aliases": [],
3481
+ "args": {},
3482
+ "description": "Re-bake the post-baseline PG migration set with inline native CodeGen",
3483
+ "examples": [
3484
+ "<%= config.bin %> migrate rebake",
3485
+ "<%= config.bin %> migrate rebake --baseline-floor V202605291452 --dry-run"
3486
+ ],
3487
+ "flags": {
3488
+ "source-dir": {
3489
+ "description": "Source T-SQL migrations directory",
3490
+ "name": "source-dir",
3491
+ "default": "./migrations/v5",
3492
+ "hasDynamicHelp": false,
3493
+ "multiple": false,
3494
+ "type": "option"
3495
+ },
3496
+ "output-dir": {
3497
+ "description": "PG migrations directory (committed files read here + baked output written here)",
3498
+ "name": "output-dir",
3499
+ "default": "./migrations-pg/v5",
3500
+ "hasDynamicHelp": false,
3501
+ "multiple": false,
3502
+ "type": "option"
3503
+ },
3504
+ "schema": {
3505
+ "description": "Target schema name",
3506
+ "name": "schema",
3507
+ "default": "__mj",
3508
+ "hasDynamicHelp": false,
3509
+ "multiple": false,
3510
+ "type": "option"
3511
+ },
3512
+ "core-schema": {
3513
+ "description": "MJ core schema substituted for ${mjSchema} (default __mj). Distinct from --schema, which is the app's OWN schema: an Open App migration references core as ${mjSchema} and itself as ${flyway:defaultSchema}, and for every app those differ.",
3514
+ "name": "core-schema",
3515
+ "default": "__mj",
3516
+ "hasDynamicHelp": false,
3517
+ "multiple": false,
3518
+ "type": "option"
3519
+ },
3520
+ "baseline-floor": {
3521
+ "description": "Re-bake migrations strictly AFTER this version key (default: the latest B* in output-dir)",
3522
+ "name": "baseline-floor",
3523
+ "hasDynamicHelp": false,
3524
+ "multiple": false,
3525
+ "type": "option"
3526
+ },
3527
+ "dry-run": {
3528
+ "description": "Report what would be re-baked without writing files",
3529
+ "name": "dry-run",
3290
3530
  "allowNo": false,
3291
3531
  "type": "boolean"
3292
3532
  }
3293
3533
  },
3294
3534
  "hasDynamicHelp": false,
3295
3535
  "hiddenAliases": [],
3296
- "id": "install",
3536
+ "id": "migrate:rebake",
3297
3537
  "pluginAlias": "@memberjunction/cli",
3298
3538
  "pluginName": "@memberjunction/cli",
3299
3539
  "pluginType": "core",
@@ -3303,14 +3543,14 @@
3303
3543
  "relativePath": [
3304
3544
  "dist",
3305
3545
  "commands",
3306
- "install",
3307
- "index.js"
3546
+ "migrate",
3547
+ "rebake.js"
3308
3548
  ]
3309
3549
  },
3310
- "install:usage": {
3550
+ "migrate:usage": {
3311
3551
  "aliases": [],
3312
3552
  "args": {},
3313
- "description": "Show usage, flags, examples, and runtime hints for every `mj install` command.",
3553
+ "description": "Show usage, flags, examples, and runtime hints for every `mj migrate` command.",
3314
3554
  "flags": {
3315
3555
  "format": {
3316
3556
  "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
@@ -3327,7 +3567,7 @@
3327
3567
  },
3328
3568
  "hasDynamicHelp": false,
3329
3569
  "hiddenAliases": [],
3330
- "id": "install:usage",
3570
+ "id": "migrate:usage",
3331
3571
  "pluginAlias": "@memberjunction/cli",
3332
3572
  "pluginName": "@memberjunction/cli",
3333
3573
  "pluginType": "core",
@@ -3337,7 +3577,85 @@
3337
3577
  "relativePath": [
3338
3578
  "dist",
3339
3579
  "commands",
3340
- "install",
3580
+ "migrate",
3581
+ "usage.js"
3582
+ ]
3583
+ },
3584
+ "plugin:add": {
3585
+ "aliases": [],
3586
+ "args": {
3587
+ "package": {
3588
+ "description": "Plugin entry-point specifier (package name, subpath, or relative path)",
3589
+ "name": "package",
3590
+ "required": true
3591
+ }
3592
+ },
3593
+ "description": "Register a CLI plugin package in mj-cli-plugins.json so `mj` loads it at startup.",
3594
+ "examples": [
3595
+ "<%= config.bin %> <%= command.id %> @my-org/mj-plugin/plugins",
3596
+ "<%= config.bin %> <%= command.id %> ./local-plugins/my-tool"
3597
+ ],
3598
+ "flags": {
3599
+ "format": {
3600
+ "description": "Output format",
3601
+ "name": "format",
3602
+ "default": "text",
3603
+ "hasDynamicHelp": false,
3604
+ "multiple": false,
3605
+ "options": [
3606
+ "text",
3607
+ "json"
3608
+ ],
3609
+ "type": "option"
3610
+ }
3611
+ },
3612
+ "hasDynamicHelp": false,
3613
+ "hiddenAliases": [],
3614
+ "id": "plugin:add",
3615
+ "pluginAlias": "@memberjunction/cli",
3616
+ "pluginName": "@memberjunction/cli",
3617
+ "pluginType": "core",
3618
+ "strict": true,
3619
+ "enableJsonFlag": false,
3620
+ "isESM": true,
3621
+ "relativePath": [
3622
+ "dist",
3623
+ "commands",
3624
+ "plugin",
3625
+ "add.js"
3626
+ ]
3627
+ },
3628
+ "plugin:usage": {
3629
+ "aliases": [],
3630
+ "args": {},
3631
+ "description": "Show usage, flags, examples, and runtime hints for every `mj plugin` command.",
3632
+ "flags": {
3633
+ "format": {
3634
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
3635
+ "name": "format",
3636
+ "hasDynamicHelp": false,
3637
+ "multiple": false,
3638
+ "options": [
3639
+ "text",
3640
+ "json",
3641
+ "md"
3642
+ ],
3643
+ "type": "option"
3644
+ }
3645
+ },
3646
+ "hasDynamicHelp": false,
3647
+ "hiddenAliases": [],
3648
+ "id": "plugin:usage",
3649
+ "pluginAlias": "@memberjunction/cli",
3650
+ "pluginName": "@memberjunction/cli",
3651
+ "pluginType": "core",
3652
+ "strict": true,
3653
+ "enableJsonFlag": false,
3654
+ "isESM": true,
3655
+ "relativePath": [
3656
+ "dist",
3657
+ "commands",
3658
+ "plugin",
3341
3659
  "usage.js"
3342
3660
  ]
3343
3661
  },
@@ -6463,6 +6781,25 @@
6463
6781
  "hasDynamicHelp": false,
6464
6782
  "multiple": false,
6465
6783
  "type": "option"
6784
+ },
6785
+ "shard": {
6786
+ "description": "Deterministic shard specification (<index>/<total>, 1-based, e.g. --shard=1/3) for partitioning suite execution across isolated parallel worker processes using duration-aware LPT balancing.",
6787
+ "name": "shard",
6788
+ "hasDynamicHelp": false,
6789
+ "multiple": false,
6790
+ "type": "option"
6791
+ },
6792
+ "transport": {
6793
+ "description": "Filter suite tests by transport layer (server, client, or all).",
6794
+ "name": "transport",
6795
+ "hasDynamicHelp": false,
6796
+ "multiple": false,
6797
+ "options": [
6798
+ "server",
6799
+ "client",
6800
+ "all"
6801
+ ],
6802
+ "type": "option"
6466
6803
  }
6467
6804
  },
6468
6805
  "hasDynamicHelp": false,
@@ -6905,232 +7242,76 @@
6905
7242
  "relativePath": [
6906
7243
  "dist",
6907
7244
  "commands",
6908
- "update",
6909
- "usage.js"
6910
- ]
6911
- },
6912
- "user:clone": {
6913
- "aliases": [],
6914
- "args": {},
6915
- "description": "Create a user as a copy of another (a template user by default)",
6916
- "examples": [
6917
- "<%= config.bin %> user clone --from demo.user@example.org --email jane@example.com --first Jane --last Doe",
6918
- "<%= config.bin %> user clone --from alice@example.com --email bob@example.com --first Bob --last Lee --preset with-settings",
6919
- "<%= config.bin %> user clone --from demo.user@example.org --email jane@example.com --first Jane --last Doe --dry-run"
6920
- ],
6921
- "flags": {
6922
- "from": {
6923
- "description": "Email of the user to copy",
6924
- "name": "from",
6925
- "required": true,
6926
- "hasDynamicHelp": false,
6927
- "multiple": false,
6928
- "type": "option"
6929
- },
6930
- "email": {
6931
- "description": "Email of the new user (the identity they sign in with)",
6932
- "name": "email",
6933
- "required": true,
6934
- "hasDynamicHelp": false,
6935
- "multiple": false,
6936
- "type": "option"
6937
- },
6938
- "first": {
6939
- "description": "First name of the new user",
6940
- "name": "first",
6941
- "required": true,
6942
- "hasDynamicHelp": false,
6943
- "multiple": false,
6944
- "type": "option"
6945
- },
6946
- "last": {
6947
- "description": "Last name of the new user",
6948
- "name": "last",
6949
- "required": true,
6950
- "hasDynamicHelp": false,
6951
- "multiple": false,
6952
- "type": "option"
6953
- },
6954
- "preset": {
6955
- "description": "MJ: Users clone preset: 'template' (template users only), 'with-views', 'with-settings', or none for the base copy",
6956
- "name": "preset",
6957
- "default": "template",
6958
- "hasDynamicHelp": false,
6959
- "multiple": false,
6960
- "type": "option"
6961
- },
6962
- "inactive": {
6963
- "description": "Leave the new user inactive for review instead of activating it",
6964
- "name": "inactive",
6965
- "allowNo": false,
6966
- "type": "boolean"
6967
- },
6968
- "dry-run": {
6969
- "description": "Show what would be copied without creating anything",
6970
- "name": "dry-run",
6971
- "allowNo": false,
6972
- "type": "boolean"
6973
- }
6974
- },
6975
- "hasDynamicHelp": false,
6976
- "hiddenAliases": [],
6977
- "id": "user:clone",
6978
- "pluginAlias": "@memberjunction/cli",
6979
- "pluginName": "@memberjunction/cli",
6980
- "pluginType": "core",
6981
- "strict": true,
6982
- "enableJsonFlag": false,
6983
- "isESM": true,
6984
- "relativePath": [
6985
- "dist",
6986
- "commands",
6987
- "user",
6988
- "clone.js"
6989
- ]
6990
- },
6991
- "ai:actions:list": {
6992
- "aliases": [],
6993
- "args": {},
6994
- "description": "List available AI actions",
6995
- "examples": [
6996
- "<%= config.bin %> <%= command.id %>",
6997
- "<%= config.bin %> <%= command.id %> --output=table",
6998
- "<%= config.bin %> <%= command.id %> --output=json"
6999
- ],
7000
- "flags": {
7001
- "format": {
7002
- "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.",
7003
- "name": "format",
7004
- "hasDynamicHelp": false,
7005
- "multiple": false,
7006
- "options": [
7007
- "text",
7008
- "json",
7009
- "md",
7010
- "human",
7011
- "console",
7012
- "markdown",
7013
- "compact",
7014
- "table"
7015
- ],
7016
- "type": "option"
7017
- },
7018
- "output": {
7019
- "char": "o",
7020
- "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
7021
- "name": "output",
7022
- "default": "compact",
7023
- "hasDynamicHelp": false,
7024
- "multiple": false,
7025
- "options": [
7026
- "compact",
7027
- "json",
7028
- "table"
7029
- ],
7030
- "type": "option"
7031
- }
7032
- },
7033
- "hasDynamicHelp": false,
7034
- "hiddenAliases": [],
7035
- "id": "ai:actions:list",
7036
- "pluginAlias": "@memberjunction/cli",
7037
- "pluginName": "@memberjunction/cli",
7038
- "pluginType": "core",
7039
- "strict": true,
7040
- "enableJsonFlag": false,
7041
- "isESM": true,
7042
- "relativePath": [
7043
- "dist",
7044
- "commands",
7045
- "ai",
7046
- "actions",
7047
- "list.js"
7245
+ "update",
7246
+ "usage.js"
7048
7247
  ]
7049
7248
  },
7050
- "ai:actions:run": {
7249
+ "user:clone": {
7051
7250
  "aliases": [],
7052
7251
  "args": {},
7053
- "description": "Execute an AI action with parameters",
7252
+ "description": "Create a user as a copy of another (a template user by default)",
7054
7253
  "examples": [
7055
- "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
7056
- "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
7057
- "<%= 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\"",
7058
- "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
7254
+ "<%= config.bin %> user clone --from demo.user@example.org --email jane@example.com --first Jane --last Doe",
7255
+ "<%= config.bin %> user clone --from alice@example.com --email bob@example.com --first Bob --last Lee --preset with-settings",
7256
+ "<%= config.bin %> user clone --from demo.user@example.org --email jane@example.com --first Jane --last Doe --dry-run"
7059
7257
  ],
7060
7258
  "flags": {
7061
- "name": {
7062
- "char": "n",
7063
- "description": "Action name",
7064
- "name": "name",
7259
+ "from": {
7260
+ "description": "Email of the user to copy",
7261
+ "name": "from",
7065
7262
  "required": true,
7066
7263
  "hasDynamicHelp": false,
7067
7264
  "multiple": false,
7068
7265
  "type": "option"
7069
7266
  },
7070
- "param": {
7071
- "char": "p",
7072
- "description": "Action parameters in key=value format",
7073
- "name": "param",
7267
+ "email": {
7268
+ "description": "Email of the new user (the identity they sign in with)",
7269
+ "name": "email",
7270
+ "required": true,
7074
7271
  "hasDynamicHelp": false,
7075
- "multiple": true,
7272
+ "multiple": false,
7076
7273
  "type": "option"
7077
7274
  },
7078
- "dry-run": {
7079
- "description": "Validate without executing",
7080
- "name": "dry-run",
7081
- "allowNo": false,
7082
- "type": "boolean"
7275
+ "first": {
7276
+ "description": "First name of the new user",
7277
+ "name": "first",
7278
+ "required": true,
7279
+ "hasDynamicHelp": false,
7280
+ "multiple": false,
7281
+ "type": "option"
7083
7282
  },
7084
- "format": {
7085
- "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.",
7086
- "name": "format",
7283
+ "last": {
7284
+ "description": "Last name of the new user",
7285
+ "name": "last",
7286
+ "required": true,
7087
7287
  "hasDynamicHelp": false,
7088
7288
  "multiple": false,
7089
- "options": [
7090
- "text",
7091
- "json",
7092
- "md",
7093
- "human",
7094
- "console",
7095
- "markdown",
7096
- "compact",
7097
- "table"
7098
- ],
7099
7289
  "type": "option"
7100
7290
  },
7101
- "output": {
7102
- "char": "o",
7103
- "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
7104
- "name": "output",
7105
- "default": "compact",
7291
+ "preset": {
7292
+ "description": "MJ: Users clone preset: 'template' (template users only), 'with-views', 'with-settings', or none for the base copy",
7293
+ "name": "preset",
7294
+ "default": "template",
7106
7295
  "hasDynamicHelp": false,
7107
7296
  "multiple": false,
7108
- "options": [
7109
- "compact",
7110
- "json",
7111
- "table"
7112
- ],
7113
7297
  "type": "option"
7114
7298
  },
7115
- "verbose": {
7116
- "char": "v",
7117
- "description": "Show detailed execution information",
7118
- "name": "verbose",
7299
+ "inactive": {
7300
+ "description": "Leave the new user inactive for review instead of activating it",
7301
+ "name": "inactive",
7119
7302
  "allowNo": false,
7120
7303
  "type": "boolean"
7121
7304
  },
7122
- "timeout": {
7123
- "description": "Execution timeout in milliseconds",
7124
- "name": "timeout",
7125
- "default": 300000,
7126
- "hasDynamicHelp": false,
7127
- "multiple": false,
7128
- "type": "option"
7305
+ "dry-run": {
7306
+ "description": "Show what would be copied without creating anything",
7307
+ "name": "dry-run",
7308
+ "allowNo": false,
7309
+ "type": "boolean"
7129
7310
  }
7130
7311
  },
7131
7312
  "hasDynamicHelp": false,
7132
7313
  "hiddenAliases": [],
7133
- "id": "ai:actions:run",
7314
+ "id": "user:clone",
7134
7315
  "pluginAlias": "@memberjunction/cli",
7135
7316
  "pluginName": "@memberjunction/cli",
7136
7317
  "pluginType": "core",
@@ -7140,9 +7321,8 @@
7140
7321
  "relativePath": [
7141
7322
  "dist",
7142
7323
  "commands",
7143
- "ai",
7144
- "actions",
7145
- "run.js"
7324
+ "user",
7325
+ "clone.js"
7146
7326
  ]
7147
7327
  },
7148
7328
  "ai:agents:list": {
@@ -7556,6 +7736,163 @@
7556
7736
  "index.js"
7557
7737
  ]
7558
7738
  },
7739
+ "ai:actions:list": {
7740
+ "aliases": [],
7741
+ "args": {},
7742
+ "description": "List available AI actions",
7743
+ "examples": [
7744
+ "<%= config.bin %> <%= command.id %>",
7745
+ "<%= config.bin %> <%= command.id %> --output=table",
7746
+ "<%= config.bin %> <%= command.id %> --output=json"
7747
+ ],
7748
+ "flags": {
7749
+ "format": {
7750
+ "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.",
7751
+ "name": "format",
7752
+ "hasDynamicHelp": false,
7753
+ "multiple": false,
7754
+ "options": [
7755
+ "text",
7756
+ "json",
7757
+ "md",
7758
+ "human",
7759
+ "console",
7760
+ "markdown",
7761
+ "compact",
7762
+ "table"
7763
+ ],
7764
+ "type": "option"
7765
+ },
7766
+ "output": {
7767
+ "char": "o",
7768
+ "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
7769
+ "name": "output",
7770
+ "default": "compact",
7771
+ "hasDynamicHelp": false,
7772
+ "multiple": false,
7773
+ "options": [
7774
+ "compact",
7775
+ "json",
7776
+ "table"
7777
+ ],
7778
+ "type": "option"
7779
+ }
7780
+ },
7781
+ "hasDynamicHelp": false,
7782
+ "hiddenAliases": [],
7783
+ "id": "ai:actions:list",
7784
+ "pluginAlias": "@memberjunction/cli",
7785
+ "pluginName": "@memberjunction/cli",
7786
+ "pluginType": "core",
7787
+ "strict": true,
7788
+ "enableJsonFlag": false,
7789
+ "isESM": true,
7790
+ "relativePath": [
7791
+ "dist",
7792
+ "commands",
7793
+ "ai",
7794
+ "actions",
7795
+ "list.js"
7796
+ ]
7797
+ },
7798
+ "ai:actions:run": {
7799
+ "aliases": [],
7800
+ "args": {},
7801
+ "description": "Execute an AI action with parameters",
7802
+ "examples": [
7803
+ "<%= config.bin %> <%= command.id %> -n \"Get Weather\" --param \"Location=Boston\"",
7804
+ "<%= config.bin %> <%= command.id %> -n \"Get Stock Price\" --param \"Ticker=AAPL\"",
7805
+ "<%= 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\"",
7806
+ "<%= config.bin %> <%= command.id %> -n \"Calculate Expression\" --param \"Expression=2+2*3\" --dry-run"
7807
+ ],
7808
+ "flags": {
7809
+ "name": {
7810
+ "char": "n",
7811
+ "description": "Action name",
7812
+ "name": "name",
7813
+ "required": true,
7814
+ "hasDynamicHelp": false,
7815
+ "multiple": false,
7816
+ "type": "option"
7817
+ },
7818
+ "param": {
7819
+ "char": "p",
7820
+ "description": "Action parameters in key=value format",
7821
+ "name": "param",
7822
+ "hasDynamicHelp": false,
7823
+ "multiple": true,
7824
+ "type": "option"
7825
+ },
7826
+ "dry-run": {
7827
+ "description": "Validate without executing",
7828
+ "name": "dry-run",
7829
+ "allowNo": false,
7830
+ "type": "boolean"
7831
+ },
7832
+ "format": {
7833
+ "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.",
7834
+ "name": "format",
7835
+ "hasDynamicHelp": false,
7836
+ "multiple": false,
7837
+ "options": [
7838
+ "text",
7839
+ "json",
7840
+ "md",
7841
+ "human",
7842
+ "console",
7843
+ "markdown",
7844
+ "compact",
7845
+ "table"
7846
+ ],
7847
+ "type": "option"
7848
+ },
7849
+ "output": {
7850
+ "char": "o",
7851
+ "description": "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). Prefer --format.",
7852
+ "name": "output",
7853
+ "default": "compact",
7854
+ "hasDynamicHelp": false,
7855
+ "multiple": false,
7856
+ "options": [
7857
+ "compact",
7858
+ "json",
7859
+ "table"
7860
+ ],
7861
+ "type": "option"
7862
+ },
7863
+ "verbose": {
7864
+ "char": "v",
7865
+ "description": "Show detailed execution information",
7866
+ "name": "verbose",
7867
+ "allowNo": false,
7868
+ "type": "boolean"
7869
+ },
7870
+ "timeout": {
7871
+ "description": "Execution timeout in milliseconds",
7872
+ "name": "timeout",
7873
+ "default": 300000,
7874
+ "hasDynamicHelp": false,
7875
+ "multiple": false,
7876
+ "type": "option"
7877
+ }
7878
+ },
7879
+ "hasDynamicHelp": false,
7880
+ "hiddenAliases": [],
7881
+ "id": "ai:actions:run",
7882
+ "pluginAlias": "@memberjunction/cli",
7883
+ "pluginName": "@memberjunction/cli",
7884
+ "pluginType": "core",
7885
+ "strict": true,
7886
+ "enableJsonFlag": false,
7887
+ "isESM": true,
7888
+ "relativePath": [
7889
+ "dist",
7890
+ "commands",
7891
+ "ai",
7892
+ "actions",
7893
+ "run.js"
7894
+ ]
7895
+ },
7559
7896
  "ai:prompts:list": {
7560
7897
  "aliases": [],
7561
7898
  "args": {},
@@ -8366,5 +8703,5 @@
8366
8703
  ]
8367
8704
  }
8368
8705
  },
8369
- "version": "6.2.0-edge.7"
8706
+ "version": "6.2.0"
8370
8707
  }