@memberjunction/cli 6.1.3 → 6.2.0-edge.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 (40) hide show
  1. package/README.md +18 -7
  2. package/dist/commands/agent/init.d.ts +23 -0
  3. package/dist/commands/agent/init.d.ts.map +1 -0
  4. package/dist/commands/agent/init.js +222 -0
  5. package/dist/commands/agent/init.js.map +1 -0
  6. package/dist/commands/doctor/index.d.ts +6 -4
  7. package/dist/commands/doctor/index.d.ts.map +1 -1
  8. package/dist/commands/doctor/index.js +43 -18
  9. package/dist/commands/doctor/index.js.map +1 -1
  10. package/dist/commands/test/scripts.d.ts +13 -0
  11. package/dist/commands/test/scripts.d.ts.map +1 -0
  12. package/dist/commands/test/scripts.js +50 -0
  13. package/dist/commands/test/scripts.js.map +1 -0
  14. package/dist/init-templates/citizen-builder/.agents/skills/new-agent/SKILL.md +66 -0
  15. package/dist/init-templates/citizen-builder/.agents/skills/package-agent/SKILL.md +69 -0
  16. package/dist/init-templates/citizen-builder/.agents/skills/test-agent/SKILL.md +61 -0
  17. package/dist/init-templates/citizen-builder/.claude/skills/new-agent/SKILL.md +66 -0
  18. package/dist/init-templates/citizen-builder/.claude/skills/package-agent/SKILL.md +69 -0
  19. package/dist/init-templates/citizen-builder/.claude/skills/test-agent/SKILL.md +61 -0
  20. package/dist/init-templates/citizen-builder/.env.example +30 -0
  21. package/dist/init-templates/citizen-builder/AGENTS.md +331 -0
  22. package/dist/init-templates/citizen-builder/README.md +259 -0
  23. package/dist/init-templates/citizen-builder/docker/Dockerfile +16 -0
  24. package/dist/init-templates/citizen-builder/docker-compose.yml +59 -0
  25. package/dist/init-templates/citizen-builder/docs/ENTERPRISE_ORG_SETUP.md +73 -0
  26. package/dist/init-templates/citizen-builder/docs/PROMOTION_GUIDE.md +70 -0
  27. package/dist/init-templates/citizen-builder/metadata/.mj-sync.json +7 -0
  28. package/dist/init-templates/citizen-builder/metadata/agents/.customer-insight-agent.json +55 -0
  29. package/dist/init-templates/citizen-builder/metadata/agents/.mj-sync.json +45 -0
  30. package/dist/init-templates/citizen-builder/metadata/prompts/.customer-insight-prompt.json +15 -0
  31. package/dist/init-templates/citizen-builder/metadata/prompts/.mj-sync.json +45 -0
  32. package/dist/init-templates/citizen-builder/metadata/prompts/templates/customer-insight.template.md +18 -0
  33. package/dist/init-templates/citizen-builder/scripts/bootstrap.sh +47 -0
  34. package/dist/init-templates/citizen-builder/scripts/docker-entrypoint.sh +184 -0
  35. package/dist/init-templates/citizen-builder/scripts/generate-capabilities.sh +74 -0
  36. package/dist/init-templates/citizen-builder/scripts/query-run-history.sh +34 -0
  37. package/dist/init-templates/citizen-builder/scripts/sync-metadata.sh +14 -0
  38. package/dist/init-templates/remote-mj/README.md +4 -4
  39. package/oclif.manifest.json +355 -197
  40. package/package.json +22 -22
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ # ==============================================================================
3
+ # Citizen Agent Builder - Execution Trace & Diagnostic Tool
4
+ # Inspects recent agent runs, step traces, and action execution errors via the
5
+ # native MemberJunction CLI (mj ai audit agent-run).
6
+ # ==============================================================================
7
+ set -e
8
+
9
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
10
+ cd "$DIR"
11
+
12
+ # Ensure MJ container is running
13
+ if ! docker compose ps --status running --format "{{.Service}}" 2>/dev/null | grep -q "mj"; then
14
+ echo "Error: MemberJunction container ('mj') is not running." >&2
15
+ echo "Start the workspace services with: docker compose up -d" >&2
16
+ exit 1
17
+ fi
18
+
19
+ # If specific arguments or flags are passed:
20
+ # - If first arg starts with '-' (e.g. --list, --format json, --errors), pass through directly
21
+ # - If first arg matches a UUID format, treat as RunID and pass through directly
22
+ # - If first arg is non-empty string, treat as agent name filter: --list --agent "$1"
23
+ # - If no args, list recent runs
24
+ if [ $# -eq 0 ]; then
25
+ docker compose exec -T mj mj ai audit agent-run --list
26
+ elif [[ "$1" == -* ]]; then
27
+ docker compose exec -T mj mj ai audit agent-run "$@"
28
+ elif [[ "$1" =~ ^[0-9a-fA-F-]{36}$ ]]; then
29
+ docker compose exec -T mj mj ai audit agent-run "$@"
30
+ else
31
+ AGENT_NAME="$1"
32
+ shift
33
+ docker compose exec -T mj mj ai audit agent-run --list --agent "$AGENT_NAME" "$@"
34
+ fi
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ # ==============================================================================
3
+ # Citizen Agent Builder - Metadata Sync Script
4
+ # Pushes metadata from local ./metadata directory to the running container instance
5
+ # ==============================================================================
6
+ set -e
7
+
8
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
9
+ cd "$DIR"
10
+
11
+ echo "Pushing metadata changes to MemberJunction database..."
12
+ docker compose exec -T mj mj sync push --dir /work/metadata
13
+
14
+ echo "Metadata sync complete!"
@@ -27,8 +27,8 @@ remote-mj/
27
27
  ```
28
28
 
29
29
  No tests/, no oracles/, no metadata/ — this example reuses the canonical MJ
30
- suite that ships in `metadata/test-suites/.regression-suite.json` and the 25
31
- test JSONs in `metadata/tests/regression/`.
30
+ suite that ships in `metadata-optional/regression-test/test-suites/.regression-suite.json`
31
+ and the 155 test JSONs in `metadata-optional/regression-test/tests/regression/`.
32
32
 
33
33
  ## Running it (inside the MJ monorepo)
34
34
 
@@ -61,8 +61,8 @@ Behind the scenes:
61
61
 
62
62
  ## ⚠️ Prerequisite — variable substitution
63
63
 
64
- For Mode B to actually retarget the canonical MJ suite, the 25 test JSONs in
65
- `metadata/tests/regression/` need to use `{{baseUrl}}` / `{{authUsername}}` /
64
+ For Mode B to actually retarget the canonical MJ suite, the 155 test JSONs in
65
+ `metadata-optional/regression-test/tests/regression/` need to use `{{baseUrl}}` / `{{authUsername}}` /
66
66
  `{{authPassword}}` / `{{allowedDomains}}` placeholders instead of hardcoded
67
67
  `http://localhost:4200`. This was Phase 1A's deliverable; the substitution
68
68
  **code** ships and is fully tested, but the **JSON conversion** is a follow-up
@@ -37,6 +37,70 @@
37
37
  "usage.js"
38
38
  ]
39
39
  },
40
+ "agent:init": {
41
+ "aliases": [
42
+ "ai:agents:init"
43
+ ],
44
+ "args": {
45
+ "dir": {
46
+ "default": ".",
47
+ "description": "Target directory for the agent builder environment (default: current directory).",
48
+ "name": "dir",
49
+ "required": false
50
+ }
51
+ },
52
+ "description": "Initialize a MemberJunction Citizen Agent Builder environment in the current or specified directory, including Docker setup.",
53
+ "examples": [
54
+ "<%= config.bin %> <%= command.id %>",
55
+ "<%= config.bin %> <%= command.id %> ./my-agent-workspace",
56
+ "<%= config.bin %> <%= command.id %> --no-start",
57
+ "<%= config.bin %> <%= command.id %> --app https://github.com/BlueCypress/bc-sampledata"
58
+ ],
59
+ "flags": {
60
+ "force": {
61
+ "char": "f",
62
+ "description": "Overwrite existing files in target directory if they already exist.",
63
+ "name": "force",
64
+ "allowNo": false,
65
+ "type": "boolean"
66
+ },
67
+ "start": {
68
+ "char": "s",
69
+ "description": "Start Docker containers and run bootstrap immediately after initialization (pass --no-start to skip).",
70
+ "name": "start",
71
+ "allowNo": true,
72
+ "type": "boolean"
73
+ },
74
+ "app": {
75
+ "description": "Open App Git URL to install for business context (default: More Cheese).",
76
+ "name": "app",
77
+ "hasDynamicHelp": false,
78
+ "multiple": false,
79
+ "type": "option"
80
+ },
81
+ "skip-docker-check": {
82
+ "description": "Skip verifying whether Docker Desktop is currently running.",
83
+ "name": "skip-docker-check",
84
+ "allowNo": false,
85
+ "type": "boolean"
86
+ }
87
+ },
88
+ "hasDynamicHelp": false,
89
+ "hiddenAliases": [],
90
+ "id": "agent:init",
91
+ "pluginAlias": "@memberjunction/cli",
92
+ "pluginName": "@memberjunction/cli",
93
+ "pluginType": "core",
94
+ "strict": true,
95
+ "enableJsonFlag": false,
96
+ "isESM": true,
97
+ "relativePath": [
98
+ "dist",
99
+ "commands",
100
+ "agent",
101
+ "init.js"
102
+ ]
103
+ },
40
104
  "ai": {
41
105
  "aliases": [],
42
106
  "args": {},
@@ -457,101 +521,6 @@
457
521
  "usage.js"
458
522
  ]
459
523
  },
460
- "artifacts:reclassify": {
461
- "aliases": [],
462
- "args": {},
463
- "description": "Upgrade-recovery utility for v5.35 artifact unification. Re-evaluates rows whose TypeID is the deleted JSON fallback but whose actual content does not parse as JSON. Normally a no-op: the v5.35 backfill migration handles this automatically. This command is only relevant when the migration ran BEFORE the artifact-type metadata (Generic Text / Generic Binary) was pushed via `mj sync push`, in which case the migration prints a notice telling you to run this. Reports \"no candidates\" once everything is reconciled. Dry-run by default; --apply writes through Record Changes.",
464
- "examples": [
465
- "<%= config.bin %> <%= command.id %>",
466
- "<%= config.bin %> <%= command.id %> --apply --limit 50"
467
- ],
468
- "flags": {
469
- "conversation-id": {
470
- "description": "Scope to artifacts attached to the given conversation.",
471
- "name": "conversation-id",
472
- "hasDynamicHelp": false,
473
- "multiple": false,
474
- "type": "option"
475
- },
476
- "since": {
477
- "description": "Scope to artifacts created on/after this ISO date.",
478
- "name": "since",
479
- "hasDynamicHelp": false,
480
- "multiple": false,
481
- "type": "option"
482
- },
483
- "limit": {
484
- "description": "Maximum number of rows to inspect.",
485
- "name": "limit",
486
- "default": 100,
487
- "hasDynamicHelp": false,
488
- "multiple": false,
489
- "type": "option"
490
- },
491
- "apply": {
492
- "description": "Write changes. Without this flag, this command only reports what it would do.",
493
- "name": "apply",
494
- "allowNo": false,
495
- "type": "boolean"
496
- },
497
- "verbose": {
498
- "char": "v",
499
- "description": "Print every candidate row, not just the summary.",
500
- "name": "verbose",
501
- "allowNo": false,
502
- "type": "boolean"
503
- }
504
- },
505
- "hasDynamicHelp": false,
506
- "hiddenAliases": [],
507
- "id": "artifacts:reclassify",
508
- "pluginAlias": "@memberjunction/cli",
509
- "pluginName": "@memberjunction/cli",
510
- "pluginType": "core",
511
- "strict": true,
512
- "enableJsonFlag": false,
513
- "isESM": true,
514
- "relativePath": [
515
- "dist",
516
- "commands",
517
- "artifacts",
518
- "reclassify.js"
519
- ]
520
- },
521
- "artifacts:usage": {
522
- "aliases": [],
523
- "args": {},
524
- "description": "Show usage, flags, examples, and runtime hints for every `mj artifacts` command.",
525
- "flags": {
526
- "format": {
527
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
528
- "name": "format",
529
- "hasDynamicHelp": false,
530
- "multiple": false,
531
- "options": [
532
- "text",
533
- "json",
534
- "md"
535
- ],
536
- "type": "option"
537
- }
538
- },
539
- "hasDynamicHelp": false,
540
- "hiddenAliases": [],
541
- "id": "artifacts:usage",
542
- "pluginAlias": "@memberjunction/cli",
543
- "pluginName": "@memberjunction/cli",
544
- "pluginType": "core",
545
- "strict": true,
546
- "enableJsonFlag": false,
547
- "isESM": true,
548
- "relativePath": [
549
- "dist",
550
- "commands",
551
- "artifacts",
552
- "usage.js"
553
- ]
554
- },
555
524
  "baseline:build": {
556
525
  "aliases": [],
557
526
  "args": {},
@@ -924,6 +893,101 @@
924
893
  "usage.js"
925
894
  ]
926
895
  },
896
+ "artifacts:reclassify": {
897
+ "aliases": [],
898
+ "args": {},
899
+ "description": "Upgrade-recovery utility for v5.35 artifact unification. Re-evaluates rows whose TypeID is the deleted JSON fallback but whose actual content does not parse as JSON. Normally a no-op: the v5.35 backfill migration handles this automatically. This command is only relevant when the migration ran BEFORE the artifact-type metadata (Generic Text / Generic Binary) was pushed via `mj sync push`, in which case the migration prints a notice telling you to run this. Reports \"no candidates\" once everything is reconciled. Dry-run by default; --apply writes through Record Changes.",
900
+ "examples": [
901
+ "<%= config.bin %> <%= command.id %>",
902
+ "<%= config.bin %> <%= command.id %> --apply --limit 50"
903
+ ],
904
+ "flags": {
905
+ "conversation-id": {
906
+ "description": "Scope to artifacts attached to the given conversation.",
907
+ "name": "conversation-id",
908
+ "hasDynamicHelp": false,
909
+ "multiple": false,
910
+ "type": "option"
911
+ },
912
+ "since": {
913
+ "description": "Scope to artifacts created on/after this ISO date.",
914
+ "name": "since",
915
+ "hasDynamicHelp": false,
916
+ "multiple": false,
917
+ "type": "option"
918
+ },
919
+ "limit": {
920
+ "description": "Maximum number of rows to inspect.",
921
+ "name": "limit",
922
+ "default": 100,
923
+ "hasDynamicHelp": false,
924
+ "multiple": false,
925
+ "type": "option"
926
+ },
927
+ "apply": {
928
+ "description": "Write changes. Without this flag, this command only reports what it would do.",
929
+ "name": "apply",
930
+ "allowNo": false,
931
+ "type": "boolean"
932
+ },
933
+ "verbose": {
934
+ "char": "v",
935
+ "description": "Print every candidate row, not just the summary.",
936
+ "name": "verbose",
937
+ "allowNo": false,
938
+ "type": "boolean"
939
+ }
940
+ },
941
+ "hasDynamicHelp": false,
942
+ "hiddenAliases": [],
943
+ "id": "artifacts:reclassify",
944
+ "pluginAlias": "@memberjunction/cli",
945
+ "pluginName": "@memberjunction/cli",
946
+ "pluginType": "core",
947
+ "strict": true,
948
+ "enableJsonFlag": false,
949
+ "isESM": true,
950
+ "relativePath": [
951
+ "dist",
952
+ "commands",
953
+ "artifacts",
954
+ "reclassify.js"
955
+ ]
956
+ },
957
+ "artifacts:usage": {
958
+ "aliases": [],
959
+ "args": {},
960
+ "description": "Show usage, flags, examples, and runtime hints for every `mj artifacts` command.",
961
+ "flags": {
962
+ "format": {
963
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
964
+ "name": "format",
965
+ "hasDynamicHelp": false,
966
+ "multiple": false,
967
+ "options": [
968
+ "text",
969
+ "json",
970
+ "md"
971
+ ],
972
+ "type": "option"
973
+ }
974
+ },
975
+ "hasDynamicHelp": false,
976
+ "hiddenAliases": [],
977
+ "id": "artifacts:usage",
978
+ "pluginAlias": "@memberjunction/cli",
979
+ "pluginName": "@memberjunction/cli",
980
+ "pluginType": "core",
981
+ "strict": true,
982
+ "enableJsonFlag": false,
983
+ "isESM": true,
984
+ "relativePath": [
985
+ "dist",
986
+ "commands",
987
+ "artifacts",
988
+ "usage.js"
989
+ ]
990
+ },
927
991
  "bump": {
928
992
  "aliases": [],
929
993
  "args": {},
@@ -2302,6 +2366,8 @@
2302
2366
  "examples": [
2303
2367
  "<%= config.bin %> <%= command.id %>",
2304
2368
  "<%= config.bin %> <%= command.id %> --dir ./my-mj-project",
2369
+ "<%= config.bin %> <%= command.id %> --format json",
2370
+ "<%= config.bin %> <%= command.id %> --scope ai",
2305
2371
  "<%= config.bin %> <%= command.id %> --verbose",
2306
2372
  "<%= config.bin %> <%= command.id %> --report",
2307
2373
  "<%= config.bin %> <%= command.id %> --report_extended"
@@ -2315,6 +2381,37 @@
2315
2381
  "multiple": false,
2316
2382
  "type": "option"
2317
2383
  },
2384
+ "scope": {
2385
+ "description": "Diagnostic scope to filter by (install, runtime, ai, metadata, agent)",
2386
+ "name": "scope",
2387
+ "hasDynamicHelp": false,
2388
+ "multiple": false,
2389
+ "options": [
2390
+ "install",
2391
+ "runtime",
2392
+ "ai",
2393
+ "metadata",
2394
+ "agent"
2395
+ ],
2396
+ "type": "option"
2397
+ },
2398
+ "format": {
2399
+ "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.",
2400
+ "name": "format",
2401
+ "hasDynamicHelp": false,
2402
+ "multiple": false,
2403
+ "options": [
2404
+ "text",
2405
+ "json",
2406
+ "md",
2407
+ "human",
2408
+ "console",
2409
+ "markdown",
2410
+ "compact",
2411
+ "table"
2412
+ ],
2413
+ "type": "option"
2414
+ },
2318
2415
  "verbose": {
2319
2416
  "char": "v",
2320
2417
  "description": "Show detailed output including suggested fixes inline",
@@ -3071,107 +3168,6 @@
3071
3168
  "usage.js"
3072
3169
  ]
3073
3170
  },
3074
- "sql-audit": {
3075
- "aliases": [],
3076
- "args": {},
3077
- "description": "Compare source and target databases for migration verification",
3078
- "examples": [
3079
- "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\"",
3080
- "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\" --output report.txt",
3081
- "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\" --source-schema __mj --target-schema __mj"
3082
- ],
3083
- "flags": {
3084
- "source": {
3085
- "description": "Source database connection string (mssql://... or postgres://...)",
3086
- "name": "source",
3087
- "required": true,
3088
- "hasDynamicHelp": false,
3089
- "multiple": false,
3090
- "type": "option"
3091
- },
3092
- "target": {
3093
- "description": "Target database connection string (mssql://... or postgres://...)",
3094
- "name": "target",
3095
- "required": true,
3096
- "hasDynamicHelp": false,
3097
- "multiple": false,
3098
- "type": "option"
3099
- },
3100
- "source-schema": {
3101
- "description": "Source schema name",
3102
- "name": "source-schema",
3103
- "default": "__mj",
3104
- "hasDynamicHelp": false,
3105
- "multiple": false,
3106
- "type": "option"
3107
- },
3108
- "target-schema": {
3109
- "description": "Target schema name",
3110
- "name": "target-schema",
3111
- "default": "__mj",
3112
- "hasDynamicHelp": false,
3113
- "multiple": false,
3114
- "type": "option"
3115
- },
3116
- "output": {
3117
- "char": "o",
3118
- "description": "Save report to file",
3119
- "name": "output",
3120
- "hasDynamicHelp": false,
3121
- "multiple": false,
3122
- "type": "option"
3123
- }
3124
- },
3125
- "hasDynamicHelp": false,
3126
- "hiddenAliases": [],
3127
- "id": "sql-audit",
3128
- "pluginAlias": "@memberjunction/cli",
3129
- "pluginName": "@memberjunction/cli",
3130
- "pluginType": "core",
3131
- "strict": true,
3132
- "enableJsonFlag": false,
3133
- "isESM": true,
3134
- "relativePath": [
3135
- "dist",
3136
- "commands",
3137
- "sql-audit",
3138
- "index.js"
3139
- ]
3140
- },
3141
- "sql-audit:usage": {
3142
- "aliases": [],
3143
- "args": {},
3144
- "description": "Show usage, flags, examples, and runtime hints for every `mj sql-audit` command.",
3145
- "flags": {
3146
- "format": {
3147
- "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
3148
- "name": "format",
3149
- "hasDynamicHelp": false,
3150
- "multiple": false,
3151
- "options": [
3152
- "text",
3153
- "json",
3154
- "md"
3155
- ],
3156
- "type": "option"
3157
- }
3158
- },
3159
- "hasDynamicHelp": false,
3160
- "hiddenAliases": [],
3161
- "id": "sql-audit:usage",
3162
- "pluginAlias": "@memberjunction/cli",
3163
- "pluginName": "@memberjunction/cli",
3164
- "pluginType": "core",
3165
- "strict": true,
3166
- "enableJsonFlag": false,
3167
- "isESM": true,
3168
- "relativePath": [
3169
- "dist",
3170
- "commands",
3171
- "sql-audit",
3172
- "usage.js"
3173
- ]
3174
- },
3175
3171
  "querygen:export": {
3176
3172
  "aliases": [],
3177
3173
  "args": {},
@@ -3421,6 +3417,107 @@
3421
3417
  "validate.js"
3422
3418
  ]
3423
3419
  },
3420
+ "sql-audit": {
3421
+ "aliases": [],
3422
+ "args": {},
3423
+ "description": "Compare source and target databases for migration verification",
3424
+ "examples": [
3425
+ "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\"",
3426
+ "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\" --output report.txt",
3427
+ "<%= config.bin %> sql-audit --source \"mssql://sa:pass@host/db\" --target \"postgres://user:pass@host:5432/db\" --source-schema __mj --target-schema __mj"
3428
+ ],
3429
+ "flags": {
3430
+ "source": {
3431
+ "description": "Source database connection string (mssql://... or postgres://...)",
3432
+ "name": "source",
3433
+ "required": true,
3434
+ "hasDynamicHelp": false,
3435
+ "multiple": false,
3436
+ "type": "option"
3437
+ },
3438
+ "target": {
3439
+ "description": "Target database connection string (mssql://... or postgres://...)",
3440
+ "name": "target",
3441
+ "required": true,
3442
+ "hasDynamicHelp": false,
3443
+ "multiple": false,
3444
+ "type": "option"
3445
+ },
3446
+ "source-schema": {
3447
+ "description": "Source schema name",
3448
+ "name": "source-schema",
3449
+ "default": "__mj",
3450
+ "hasDynamicHelp": false,
3451
+ "multiple": false,
3452
+ "type": "option"
3453
+ },
3454
+ "target-schema": {
3455
+ "description": "Target schema name",
3456
+ "name": "target-schema",
3457
+ "default": "__mj",
3458
+ "hasDynamicHelp": false,
3459
+ "multiple": false,
3460
+ "type": "option"
3461
+ },
3462
+ "output": {
3463
+ "char": "o",
3464
+ "description": "Save report to file",
3465
+ "name": "output",
3466
+ "hasDynamicHelp": false,
3467
+ "multiple": false,
3468
+ "type": "option"
3469
+ }
3470
+ },
3471
+ "hasDynamicHelp": false,
3472
+ "hiddenAliases": [],
3473
+ "id": "sql-audit",
3474
+ "pluginAlias": "@memberjunction/cli",
3475
+ "pluginName": "@memberjunction/cli",
3476
+ "pluginType": "core",
3477
+ "strict": true,
3478
+ "enableJsonFlag": false,
3479
+ "isESM": true,
3480
+ "relativePath": [
3481
+ "dist",
3482
+ "commands",
3483
+ "sql-audit",
3484
+ "index.js"
3485
+ ]
3486
+ },
3487
+ "sql-audit:usage": {
3488
+ "aliases": [],
3489
+ "args": {},
3490
+ "description": "Show usage, flags, examples, and runtime hints for every `mj sql-audit` command.",
3491
+ "flags": {
3492
+ "format": {
3493
+ "description": "Output format. Defaults to text on a terminal and json when stdout is piped.",
3494
+ "name": "format",
3495
+ "hasDynamicHelp": false,
3496
+ "multiple": false,
3497
+ "options": [
3498
+ "text",
3499
+ "json",
3500
+ "md"
3501
+ ],
3502
+ "type": "option"
3503
+ }
3504
+ },
3505
+ "hasDynamicHelp": false,
3506
+ "hiddenAliases": [],
3507
+ "id": "sql-audit:usage",
3508
+ "pluginAlias": "@memberjunction/cli",
3509
+ "pluginName": "@memberjunction/cli",
3510
+ "pluginType": "core",
3511
+ "strict": true,
3512
+ "enableJsonFlag": false,
3513
+ "isESM": true,
3514
+ "relativePath": [
3515
+ "dist",
3516
+ "commands",
3517
+ "sql-audit",
3518
+ "usage.js"
3519
+ ]
3520
+ },
3424
3521
  "sql-convert": {
3425
3522
  "aliases": [],
3426
3523
  "args": {
@@ -4951,6 +5048,67 @@
4951
5048
  "run.js"
4952
5049
  ]
4953
5050
  },
5051
+ "test:scripts": {
5052
+ "aliases": [],
5053
+ "args": {},
5054
+ "description": "Review and promote recorded replay scripts. A run that re-derives a test which already had a script stores the new one as pending rather than replacing what replay uses, so a UI change never rewrites the suite unnoticed. This is where you see the drift and decide.",
5055
+ "examples": [
5056
+ "<%= config.bin %> <%= command.id %>",
5057
+ "<%= config.bin %> <%= command.id %> --test \"T042 - Filter Grid\"",
5058
+ "<%= config.bin %> <%= command.id %> --promote --test \"T042 - Filter Grid\"",
5059
+ "<%= config.bin %> <%= command.id %> --promote --yes",
5060
+ "<%= config.bin %> <%= command.id %> --discard --test \"T042 - Filter Grid\""
5061
+ ],
5062
+ "flags": {
5063
+ "test": {
5064
+ "description": "Limit to one test, by name or ID",
5065
+ "name": "test",
5066
+ "hasDynamicHelp": false,
5067
+ "multiple": false,
5068
+ "type": "option"
5069
+ },
5070
+ "promote": {
5071
+ "description": "Promote the pending script(s) into the slot replay uses",
5072
+ "exclusive": [
5073
+ "discard"
5074
+ ],
5075
+ "name": "promote",
5076
+ "allowNo": false,
5077
+ "type": "boolean"
5078
+ },
5079
+ "discard": {
5080
+ "description": "Drop the pending script(s), keeping the promoted one",
5081
+ "exclusive": [
5082
+ "promote"
5083
+ ],
5084
+ "name": "discard",
5085
+ "allowNo": false,
5086
+ "type": "boolean"
5087
+ },
5088
+ "yes": {
5089
+ "char": "y",
5090
+ "description": "Confirm a bulk --promote/--discard that was not narrowed with --test",
5091
+ "name": "yes",
5092
+ "allowNo": false,
5093
+ "type": "boolean"
5094
+ }
5095
+ },
5096
+ "hasDynamicHelp": false,
5097
+ "hiddenAliases": [],
5098
+ "id": "test:scripts",
5099
+ "pluginAlias": "@memberjunction/cli",
5100
+ "pluginName": "@memberjunction/cli",
5101
+ "pluginType": "core",
5102
+ "strict": true,
5103
+ "enableJsonFlag": false,
5104
+ "isESM": true,
5105
+ "relativePath": [
5106
+ "dist",
5107
+ "commands",
5108
+ "test",
5109
+ "scripts.js"
5110
+ ]
5111
+ },
4954
5112
  "test:suite": {
4955
5113
  "aliases": [],
4956
5114
  "args": {
@@ -6862,5 +7020,5 @@
6862
7020
  ]
6863
7021
  }
6864
7022
  },
6865
- "version": "6.1.3"
7023
+ "version": "6.2.0-edge.0"
6866
7024
  }