@quonfig/cli 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -55
- package/dist/commands/environments.d.ts +8 -0
- package/dist/commands/environments.js +32 -0
- package/dist/commands/info.d.ts +1 -0
- package/dist/commands/info.js +59 -31
- package/dist/commands/set-default.js +28 -17
- package/dist/commands/set-rollout.js +2 -2
- package/dist/ui/get-confirmation.d.ts +10 -1
- package/dist/ui/get-confirmation.js +13 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/oclif.manifest.json +261 -184
- package/package.json +1 -1
package/oclif.manifest.json
CHANGED
|
@@ -530,6 +530,83 @@
|
|
|
530
530
|
"delete.js"
|
|
531
531
|
]
|
|
532
532
|
},
|
|
533
|
+
"environments": {
|
|
534
|
+
"aliases": [
|
|
535
|
+
"envs"
|
|
536
|
+
],
|
|
537
|
+
"args": {},
|
|
538
|
+
"description": "List the environments in your workspace.\n\nUse these names with --environment (set-default, set-rollout, get, run, ...).\n\"[Default]\" is not an environment: it names the default rules that every\nenvironment without rules of its own inherits. Protected environments may\nrequire extra permissions to change.",
|
|
539
|
+
"examples": [
|
|
540
|
+
"<%= config.bin %> <%= command.id %>",
|
|
541
|
+
"<%= config.bin %> <%= command.id %> --json"
|
|
542
|
+
],
|
|
543
|
+
"flags": {
|
|
544
|
+
"json": {
|
|
545
|
+
"description": "Format output as json.",
|
|
546
|
+
"helpGroup": "GLOBAL",
|
|
547
|
+
"name": "json",
|
|
548
|
+
"allowNo": false,
|
|
549
|
+
"type": "boolean"
|
|
550
|
+
},
|
|
551
|
+
"interactive": {
|
|
552
|
+
"description": "Force interactive mode",
|
|
553
|
+
"helpGroup": "GLOBAL",
|
|
554
|
+
"name": "interactive",
|
|
555
|
+
"allowNo": true,
|
|
556
|
+
"type": "boolean"
|
|
557
|
+
},
|
|
558
|
+
"no-color": {
|
|
559
|
+
"description": "Do not colorize output",
|
|
560
|
+
"env": "NO_COLOR",
|
|
561
|
+
"helpGroup": "GLOBAL",
|
|
562
|
+
"name": "no-color",
|
|
563
|
+
"allowNo": false,
|
|
564
|
+
"type": "boolean"
|
|
565
|
+
},
|
|
566
|
+
"verbose": {
|
|
567
|
+
"description": "Verbose output",
|
|
568
|
+
"helpGroup": "GLOBAL",
|
|
569
|
+
"name": "verbose",
|
|
570
|
+
"allowNo": false,
|
|
571
|
+
"type": "boolean"
|
|
572
|
+
},
|
|
573
|
+
"workspace": {
|
|
574
|
+
"char": "w",
|
|
575
|
+
"description": "Workspace slug to use (overrides QUONFIG_WORKSPACE env var and saved default)",
|
|
576
|
+
"helpGroup": "GLOBAL",
|
|
577
|
+
"name": "workspace",
|
|
578
|
+
"required": false,
|
|
579
|
+
"hasDynamicHelp": false,
|
|
580
|
+
"multiple": false,
|
|
581
|
+
"type": "option"
|
|
582
|
+
},
|
|
583
|
+
"profile": {
|
|
584
|
+
"char": "p",
|
|
585
|
+
"description": "Deprecated: use --workspace instead",
|
|
586
|
+
"helpGroup": "GLOBAL",
|
|
587
|
+
"hidden": true,
|
|
588
|
+
"name": "profile",
|
|
589
|
+
"required": false,
|
|
590
|
+
"hasDynamicHelp": false,
|
|
591
|
+
"multiple": false,
|
|
592
|
+
"type": "option"
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
"hasDynamicHelp": false,
|
|
596
|
+
"hiddenAliases": [],
|
|
597
|
+
"id": "environments",
|
|
598
|
+
"pluginAlias": "@quonfig/cli",
|
|
599
|
+
"pluginName": "@quonfig/cli",
|
|
600
|
+
"pluginType": "core",
|
|
601
|
+
"strict": true,
|
|
602
|
+
"enableJsonFlag": true,
|
|
603
|
+
"isESM": true,
|
|
604
|
+
"relativePath": [
|
|
605
|
+
"dist",
|
|
606
|
+
"commands",
|
|
607
|
+
"environments.js"
|
|
608
|
+
]
|
|
609
|
+
},
|
|
533
610
|
"generate-new-hex-key": {
|
|
534
611
|
"aliases": [],
|
|
535
612
|
"args": {},
|
|
@@ -2402,9 +2479,9 @@
|
|
|
2402
2479
|
"type": "option"
|
|
2403
2480
|
},
|
|
2404
2481
|
"confidential": {
|
|
2405
|
-
"description": "mark the value as confidential",
|
|
2482
|
+
"description": "mark the value as confidential. Auto-detected when the key already holds a confidential value; pass --no-confidential to store it in the clear",
|
|
2406
2483
|
"name": "confidential",
|
|
2407
|
-
"allowNo":
|
|
2484
|
+
"allowNo": true,
|
|
2408
2485
|
"type": "boolean"
|
|
2409
2486
|
},
|
|
2410
2487
|
"env-var": {
|
|
@@ -2860,17 +2937,18 @@
|
|
|
2860
2937
|
"workspace.js"
|
|
2861
2938
|
]
|
|
2862
2939
|
},
|
|
2863
|
-
"
|
|
2940
|
+
"activity:deleted": {
|
|
2864
2941
|
"aliases": [],
|
|
2865
2942
|
"args": {},
|
|
2866
|
-
"description": "List
|
|
2943
|
+
"description": "List configs that were deleted from the workspace and have not been restored.\n\nUseful for \"did somebody delete X?\" — pair with `qfg activity restore NAME`\nto undelete a tombstoned config.",
|
|
2867
2944
|
"examples": [
|
|
2868
2945
|
"<%= config.bin %> <%= command.id %>",
|
|
2869
2946
|
"<%= config.bin %> <%= command.id %> --json"
|
|
2870
2947
|
],
|
|
2871
2948
|
"flags": {
|
|
2872
2949
|
"json": {
|
|
2873
|
-
"description": "
|
|
2950
|
+
"description": "Format output as json.",
|
|
2951
|
+
"helpGroup": "GLOBAL",
|
|
2874
2952
|
"name": "json",
|
|
2875
2953
|
"allowNo": false,
|
|
2876
2954
|
"type": "boolean"
|
|
@@ -2921,7 +2999,7 @@
|
|
|
2921
2999
|
},
|
|
2922
3000
|
"hasDynamicHelp": false,
|
|
2923
3001
|
"hiddenAliases": [],
|
|
2924
|
-
"id": "
|
|
3002
|
+
"id": "activity:deleted",
|
|
2925
3003
|
"pluginAlias": "@quonfig/cli",
|
|
2926
3004
|
"pluginName": "@quonfig/cli",
|
|
2927
3005
|
"pluginType": "core",
|
|
@@ -2931,23 +3009,18 @@
|
|
|
2931
3009
|
"relativePath": [
|
|
2932
3010
|
"dist",
|
|
2933
3011
|
"commands",
|
|
2934
|
-
"
|
|
2935
|
-
"
|
|
3012
|
+
"activity",
|
|
3013
|
+
"deleted.js"
|
|
2936
3014
|
]
|
|
2937
3015
|
},
|
|
2938
|
-
"
|
|
3016
|
+
"activity:feed": {
|
|
2939
3017
|
"aliases": [],
|
|
2940
|
-
"args": {
|
|
2941
|
-
|
|
2942
|
-
"description": "config/feature-flag/etc. name",
|
|
2943
|
-
"name": "name"
|
|
2944
|
-
}
|
|
2945
|
-
},
|
|
2946
|
-
"description": "Write a cleanup payload for a ready-for-cleanup flag and hand off to the Quonfig agent skill.\n\nModeled on `qfg migrate my-code` — this command never edits source files\nitself. It validates that the flag is marked readyForCleanup=true, refuses to\nproceed if there are still evals_2d > 0 (use --force to override), writes\n`.qf/cleanup/<key>.json` describing the flag's current rule shape +\ntelemetry, and prints how to have your coding agent remove the call sites with\nthe quonfig agent skill (its references/retire-a-flag.md), which asks the\nengineer which value should \"win\" and applies the inlining. Install the skill\nwith `qfg agent install-skill` or `claude plugin install quonfig@quonfig`.\n\nThe payload deliberately does NOT suggest a winning value; that's the\nengineer's call. Run `qfg cleanup status <key>` first if you want to inspect\ntelemetry before retiring.",
|
|
3018
|
+
"args": {},
|
|
3019
|
+
"description": "Recent activity across the workspace, newest first.\n\nEach entry shows who changed which config, the action (created/updated/deleted/restored),\nand the human-readable audit message produced by the server. The server already\ntranslates JSON diffs into messages — this command does not re-translate.",
|
|
2947
3020
|
"examples": [
|
|
2948
|
-
"<%= config.bin %> <%= command.id %>
|
|
2949
|
-
"<%= config.bin %> <%= command.id %>
|
|
2950
|
-
"<%= config.bin %> <%= command.id %>
|
|
3021
|
+
"<%= config.bin %> <%= command.id %>",
|
|
3022
|
+
"<%= config.bin %> <%= command.id %> --limit 5",
|
|
3023
|
+
"<%= config.bin %> <%= command.id %> --json"
|
|
2951
3024
|
],
|
|
2952
3025
|
"flags": {
|
|
2953
3026
|
"json": {
|
|
@@ -3000,16 +3073,18 @@
|
|
|
3000
3073
|
"multiple": false,
|
|
3001
3074
|
"type": "option"
|
|
3002
3075
|
},
|
|
3003
|
-
"
|
|
3004
|
-
"description": "
|
|
3005
|
-
"name": "
|
|
3006
|
-
"
|
|
3007
|
-
"
|
|
3076
|
+
"limit": {
|
|
3077
|
+
"description": "Maximum number of feed entries (1-100)",
|
|
3078
|
+
"name": "limit",
|
|
3079
|
+
"default": 30,
|
|
3080
|
+
"hasDynamicHelp": false,
|
|
3081
|
+
"multiple": false,
|
|
3082
|
+
"type": "option"
|
|
3008
3083
|
}
|
|
3009
3084
|
},
|
|
3010
3085
|
"hasDynamicHelp": false,
|
|
3011
3086
|
"hiddenAliases": [],
|
|
3012
|
-
"id": "
|
|
3087
|
+
"id": "activity:feed",
|
|
3013
3088
|
"pluginAlias": "@quonfig/cli",
|
|
3014
3089
|
"pluginName": "@quonfig/cli",
|
|
3015
3090
|
"pluginType": "core",
|
|
@@ -3019,11 +3094,11 @@
|
|
|
3019
3094
|
"relativePath": [
|
|
3020
3095
|
"dist",
|
|
3021
3096
|
"commands",
|
|
3022
|
-
"
|
|
3023
|
-
"
|
|
3097
|
+
"activity",
|
|
3098
|
+
"feed.js"
|
|
3024
3099
|
]
|
|
3025
3100
|
},
|
|
3026
|
-
"
|
|
3101
|
+
"activity:history": {
|
|
3027
3102
|
"aliases": [],
|
|
3028
3103
|
"args": {
|
|
3029
3104
|
"name": {
|
|
@@ -3031,14 +3106,15 @@
|
|
|
3031
3106
|
"name": "name"
|
|
3032
3107
|
}
|
|
3033
3108
|
},
|
|
3034
|
-
"description": "
|
|
3109
|
+
"description": "Per-config audit trail for a flag, config, log-level, segment, or schema.\n\nResolves NAME against the workspace metadata (no need to specify type) and\nreturns the full commit history for that file with audit messages translated\nby the server. Restored entries are rendered distinctly so a recovery doesn't\nlook like a fresh create.",
|
|
3035
3110
|
"examples": [
|
|
3036
|
-
"<%= config.bin %> <%= command.id %> my.flag
|
|
3037
|
-
"<%= config.bin %> <%= command.id %>
|
|
3111
|
+
"<%= config.bin %> <%= command.id %> my.flag",
|
|
3112
|
+
"<%= config.bin %> <%= command.id %> request.timeout --json"
|
|
3038
3113
|
],
|
|
3039
3114
|
"flags": {
|
|
3040
3115
|
"json": {
|
|
3041
|
-
"description": "
|
|
3116
|
+
"description": "Format output as json.",
|
|
3117
|
+
"helpGroup": "GLOBAL",
|
|
3042
3118
|
"name": "json",
|
|
3043
3119
|
"allowNo": false,
|
|
3044
3120
|
"type": "boolean"
|
|
@@ -3089,7 +3165,7 @@
|
|
|
3089
3165
|
},
|
|
3090
3166
|
"hasDynamicHelp": false,
|
|
3091
3167
|
"hiddenAliases": [],
|
|
3092
|
-
"id": "
|
|
3168
|
+
"id": "activity:history",
|
|
3093
3169
|
"pluginAlias": "@quonfig/cli",
|
|
3094
3170
|
"pluginName": "@quonfig/cli",
|
|
3095
3171
|
"pluginType": "core",
|
|
@@ -3099,11 +3175,11 @@
|
|
|
3099
3175
|
"relativePath": [
|
|
3100
3176
|
"dist",
|
|
3101
3177
|
"commands",
|
|
3102
|
-
"
|
|
3103
|
-
"
|
|
3178
|
+
"activity",
|
|
3179
|
+
"history.js"
|
|
3104
3180
|
]
|
|
3105
3181
|
},
|
|
3106
|
-
"
|
|
3182
|
+
"activity:restore": {
|
|
3107
3183
|
"aliases": [],
|
|
3108
3184
|
"args": {
|
|
3109
3185
|
"name": {
|
|
@@ -3111,16 +3187,15 @@
|
|
|
3111
3187
|
"name": "name"
|
|
3112
3188
|
}
|
|
3113
3189
|
},
|
|
3114
|
-
"description": "
|
|
3190
|
+
"description": "Undelete a config that was previously removed.\n\nLooks up the most recent deletion for the key (so you see who deleted it and when),\nthen asks for confirmation before re-creating the file from the prior content.\nSchemas cannot be restored — use git history instead.",
|
|
3115
3191
|
"examples": [
|
|
3116
|
-
"<%= config.bin %> <%= command.id %> my.flag
|
|
3117
|
-
"<%= config.bin %> <%= command.id %>
|
|
3118
|
-
"<%= config.bin %> <%= command.id %> my.flag.key --json",
|
|
3119
|
-
"<%= config.bin %> <%= command.id %> my.flag.key && <%= config.bin %> delete my.flag.key"
|
|
3192
|
+
"<%= config.bin %> <%= command.id %> my.flag --yes",
|
|
3193
|
+
"<%= config.bin %> <%= command.id %> request.timeout --type config --yes"
|
|
3120
3194
|
],
|
|
3121
3195
|
"flags": {
|
|
3122
3196
|
"json": {
|
|
3123
|
-
"description": "
|
|
3197
|
+
"description": "Format output as json.",
|
|
3198
|
+
"helpGroup": "GLOBAL",
|
|
3124
3199
|
"name": "json",
|
|
3125
3200
|
"allowNo": false,
|
|
3126
3201
|
"type": "boolean"
|
|
@@ -3168,18 +3243,32 @@
|
|
|
3168
3243
|
"multiple": false,
|
|
3169
3244
|
"type": "option"
|
|
3170
3245
|
},
|
|
3171
|
-
"
|
|
3172
|
-
"description": "
|
|
3173
|
-
"name": "
|
|
3174
|
-
"
|
|
3246
|
+
"type": {
|
|
3247
|
+
"description": "Config type. Optional — inferred from history when omitted.",
|
|
3248
|
+
"name": "type",
|
|
3249
|
+
"required": false,
|
|
3175
3250
|
"hasDynamicHelp": false,
|
|
3176
3251
|
"multiple": false,
|
|
3252
|
+
"options": [
|
|
3253
|
+
"feature_flag",
|
|
3254
|
+
"config",
|
|
3255
|
+
"log_level",
|
|
3256
|
+
"segment",
|
|
3257
|
+
"flag",
|
|
3258
|
+
"log-level"
|
|
3259
|
+
],
|
|
3177
3260
|
"type": "option"
|
|
3261
|
+
},
|
|
3262
|
+
"yes": {
|
|
3263
|
+
"description": "Skip the confirmation prompt",
|
|
3264
|
+
"name": "yes",
|
|
3265
|
+
"allowNo": false,
|
|
3266
|
+
"type": "boolean"
|
|
3178
3267
|
}
|
|
3179
3268
|
},
|
|
3180
3269
|
"hasDynamicHelp": false,
|
|
3181
3270
|
"hiddenAliases": [],
|
|
3182
|
-
"id": "
|
|
3271
|
+
"id": "activity:restore",
|
|
3183
3272
|
"pluginAlias": "@quonfig/cli",
|
|
3184
3273
|
"pluginName": "@quonfig/cli",
|
|
3185
3274
|
"pluginType": "core",
|
|
@@ -3189,17 +3278,19 @@
|
|
|
3189
3278
|
"relativePath": [
|
|
3190
3279
|
"dist",
|
|
3191
3280
|
"commands",
|
|
3192
|
-
"
|
|
3193
|
-
"
|
|
3281
|
+
"activity",
|
|
3282
|
+
"restore.js"
|
|
3194
3283
|
]
|
|
3195
3284
|
},
|
|
3196
|
-
"
|
|
3285
|
+
"agent:install-skill": {
|
|
3197
3286
|
"aliases": [],
|
|
3198
3287
|
"args": {},
|
|
3199
|
-
"description": "
|
|
3288
|
+
"description": "Install the Quonfig agent skill into this repo so coding agents use Quonfig correctly.\n\nWrites .claude/skills/quonfig/ (SKILL.md + references/) — the same files as\n`claude plugin install quonfig@quonfig` from github.com/quonfig/skills, embedded\nin this qfg build (no network). Claude Code picks the skill up automatically;\nfor Codex, Cursor and other agents that read AGENTS.md, add --add-pointer.\n\nSafe to re-run: files still as qfg wrote them are upgraded in place, files you\nedited are left alone (the command fails and lists them) unless you pass --force.\n\nThis skill is for APPLICATION repos (SDK + qfg + MCP usage). A workspace repo\ncreated by `qfg init` has its own AGENTS.md/CLAUDE.md for editing config JSON.",
|
|
3200
3289
|
"examples": [
|
|
3201
3290
|
"<%= config.bin %> <%= command.id %>",
|
|
3202
|
-
"<%= config.bin %> <%= command.id %> --
|
|
3291
|
+
"<%= config.bin %> <%= command.id %> --add-pointer",
|
|
3292
|
+
"<%= config.bin %> <%= command.id %> --dir .agents/skills",
|
|
3293
|
+
"<%= config.bin %> <%= command.id %> --force"
|
|
3203
3294
|
],
|
|
3204
3295
|
"flags": {
|
|
3205
3296
|
"json": {
|
|
@@ -3231,31 +3322,30 @@
|
|
|
3231
3322
|
"allowNo": false,
|
|
3232
3323
|
"type": "boolean"
|
|
3233
3324
|
},
|
|
3234
|
-
"
|
|
3235
|
-
"
|
|
3236
|
-
"
|
|
3237
|
-
"
|
|
3238
|
-
"
|
|
3239
|
-
"required": false,
|
|
3240
|
-
"hasDynamicHelp": false,
|
|
3241
|
-
"multiple": false,
|
|
3242
|
-
"type": "option"
|
|
3325
|
+
"add-pointer": {
|
|
3326
|
+
"description": "Also append a one-line pointer to the skill in ./AGENTS.md (created if missing)",
|
|
3327
|
+
"name": "add-pointer",
|
|
3328
|
+
"allowNo": false,
|
|
3329
|
+
"type": "boolean"
|
|
3243
3330
|
},
|
|
3244
|
-
"
|
|
3245
|
-
"
|
|
3246
|
-
"
|
|
3247
|
-
"
|
|
3248
|
-
"hidden": true,
|
|
3249
|
-
"name": "profile",
|
|
3250
|
-
"required": false,
|
|
3331
|
+
"dir": {
|
|
3332
|
+
"description": "Skills directory to install into, relative to the current directory",
|
|
3333
|
+
"name": "dir",
|
|
3334
|
+
"default": ".claude/skills",
|
|
3251
3335
|
"hasDynamicHelp": false,
|
|
3252
3336
|
"multiple": false,
|
|
3253
3337
|
"type": "option"
|
|
3338
|
+
},
|
|
3339
|
+
"force": {
|
|
3340
|
+
"description": "Overwrite skill files you have edited locally",
|
|
3341
|
+
"name": "force",
|
|
3342
|
+
"allowNo": false,
|
|
3343
|
+
"type": "boolean"
|
|
3254
3344
|
}
|
|
3255
3345
|
},
|
|
3256
3346
|
"hasDynamicHelp": false,
|
|
3257
3347
|
"hiddenAliases": [],
|
|
3258
|
-
"id": "
|
|
3348
|
+
"id": "agent:install-skill",
|
|
3259
3349
|
"pluginAlias": "@quonfig/cli",
|
|
3260
3350
|
"pluginName": "@quonfig/cli",
|
|
3261
3351
|
"pluginType": "core",
|
|
@@ -3265,18 +3355,29 @@
|
|
|
3265
3355
|
"relativePath": [
|
|
3266
3356
|
"dist",
|
|
3267
3357
|
"commands",
|
|
3268
|
-
"
|
|
3269
|
-
"
|
|
3358
|
+
"agent",
|
|
3359
|
+
"install-skill.js"
|
|
3270
3360
|
]
|
|
3271
3361
|
},
|
|
3272
|
-
"
|
|
3362
|
+
"contexts:search": {
|
|
3273
3363
|
"aliases": [],
|
|
3274
|
-
"args": {
|
|
3275
|
-
|
|
3364
|
+
"args": {
|
|
3365
|
+
"contextType": {
|
|
3366
|
+
"description": "Context type to search, e.g. organization or user (the part before \".key\" in a rule)",
|
|
3367
|
+
"name": "contextType",
|
|
3368
|
+
"required": true
|
|
3369
|
+
},
|
|
3370
|
+
"query": {
|
|
3371
|
+
"description": "Case-insensitive text matched against each context key and its reported properties (e.g. a name)",
|
|
3372
|
+
"name": "query",
|
|
3373
|
+
"required": true
|
|
3374
|
+
}
|
|
3375
|
+
},
|
|
3376
|
+
"description": "Find a context's key from a name, to target it in a rule.\n\nTargeting rules should match a context by its KEY (<contextType>.key, e.g.\norganization.key or user.key), not by a slug, email or name. This searches the\ncontexts your SDKs have reported through telemetry, matching the query against\neach context's key and properties, and prints each match's key, its name and\nits email (blank when the context reported none), most recently seen first.\n\nOnly contexts your SDKs have reported are searchable. If nothing matches, the key\nis unknown: get it from whoever owns that customer rather than targeting a slug\nor email instead.\n\nPass a key as the query to see its name and email.\n\n--json prints {contexts: [{key, name, email?}]}: name is null when the context\nreported no name, and email is present only when it reported one.",
|
|
3276
3377
|
"examples": [
|
|
3277
|
-
"<%= config.bin %> <%= command.id %>",
|
|
3278
|
-
"<%= config.bin %> <%= command.id %> --
|
|
3279
|
-
"<%= config.bin %> <%= command.id %> --json"
|
|
3378
|
+
"<%= config.bin %> <%= command.id %> organization formhealth",
|
|
3379
|
+
"<%= config.bin %> <%= command.id %> user barry@example.com --environment production",
|
|
3380
|
+
"<%= config.bin %> <%= command.id %> organization formhealth --json"
|
|
3280
3381
|
],
|
|
3281
3382
|
"flags": {
|
|
3282
3383
|
"json": {
|
|
@@ -3329,10 +3430,17 @@
|
|
|
3329
3430
|
"multiple": false,
|
|
3330
3431
|
"type": "option"
|
|
3331
3432
|
},
|
|
3433
|
+
"environment": {
|
|
3434
|
+
"description": "Only contexts reported from this environment (default: every environment)",
|
|
3435
|
+
"name": "environment",
|
|
3436
|
+
"hasDynamicHelp": false,
|
|
3437
|
+
"multiple": false,
|
|
3438
|
+
"type": "option"
|
|
3439
|
+
},
|
|
3332
3440
|
"limit": {
|
|
3333
|
-
"description": "Maximum number of
|
|
3441
|
+
"description": "Maximum number of matches (1-100)",
|
|
3334
3442
|
"name": "limit",
|
|
3335
|
-
"default":
|
|
3443
|
+
"default": 20,
|
|
3336
3444
|
"hasDynamicHelp": false,
|
|
3337
3445
|
"multiple": false,
|
|
3338
3446
|
"type": "option"
|
|
@@ -3340,7 +3448,7 @@
|
|
|
3340
3448
|
},
|
|
3341
3449
|
"hasDynamicHelp": false,
|
|
3342
3450
|
"hiddenAliases": [],
|
|
3343
|
-
"id": "
|
|
3451
|
+
"id": "contexts:search",
|
|
3344
3452
|
"pluginAlias": "@quonfig/cli",
|
|
3345
3453
|
"pluginName": "@quonfig/cli",
|
|
3346
3454
|
"pluginType": "core",
|
|
@@ -3350,27 +3458,21 @@
|
|
|
3350
3458
|
"relativePath": [
|
|
3351
3459
|
"dist",
|
|
3352
3460
|
"commands",
|
|
3353
|
-
"
|
|
3354
|
-
"
|
|
3461
|
+
"contexts",
|
|
3462
|
+
"search.js"
|
|
3355
3463
|
]
|
|
3356
3464
|
},
|
|
3357
|
-
"
|
|
3465
|
+
"cleanup:list": {
|
|
3358
3466
|
"aliases": [],
|
|
3359
|
-
"args": {
|
|
3360
|
-
|
|
3361
|
-
"description": "config/feature-flag/etc. name",
|
|
3362
|
-
"name": "name"
|
|
3363
|
-
}
|
|
3364
|
-
},
|
|
3365
|
-
"description": "Per-config audit trail for a flag, config, log-level, segment, or schema.\n\nResolves NAME against the workspace metadata (no need to specify type) and\nreturns the full commit history for that file with audit messages translated\nby the server. Restored entries are rendered distinctly so a recovery doesn't\nlook like a fresh create.",
|
|
3467
|
+
"args": {},
|
|
3468
|
+
"description": "List feature flags marked readyForCleanup=true, with eval volume per window.\n\nColumns:\n KEY the flag key\n TYPE the flag's valueType (bool, string, int, etc.)\n EVALS_24H evals counted in today's bucket (latest day)\n EVALS_2D evals in the last 2 calendar days\n EVALS_7D evals in the last 7 calendar days\n EVALS_30D evals in the last 30 calendar days\n LAST_EVAL most recent calendar day with any evals (UTC), blank if none\n CLASS quiet (zero evals in last 2 days) or active\n\nDefault sort: quiet first, oldest LAST_EVAL at top.\n\nPass --json for the structured object (rows[]). Each row carries the columns\nabove plus the raw eval counts your agent can reason about itself.\n\nOnce you've picked a candidate, run `qfg cleanup status <key>` for the\ndrill-in, or `qfg cleanup remove <key>` to hand the removal to your coding agent\nwith the Quonfig agent skill.",
|
|
3366
3469
|
"examples": [
|
|
3367
|
-
"<%= config.bin %> <%= command.id %>
|
|
3368
|
-
"<%= config.bin %> <%= command.id %>
|
|
3470
|
+
"<%= config.bin %> <%= command.id %>",
|
|
3471
|
+
"<%= config.bin %> <%= command.id %> --json"
|
|
3369
3472
|
],
|
|
3370
3473
|
"flags": {
|
|
3371
3474
|
"json": {
|
|
3372
|
-
"description": "
|
|
3373
|
-
"helpGroup": "GLOBAL",
|
|
3475
|
+
"description": "Return structured rows for agent consumption",
|
|
3374
3476
|
"name": "json",
|
|
3375
3477
|
"allowNo": false,
|
|
3376
3478
|
"type": "boolean"
|
|
@@ -3421,7 +3523,7 @@
|
|
|
3421
3523
|
},
|
|
3422
3524
|
"hasDynamicHelp": false,
|
|
3423
3525
|
"hiddenAliases": [],
|
|
3424
|
-
"id": "
|
|
3526
|
+
"id": "cleanup:list",
|
|
3425
3527
|
"pluginAlias": "@quonfig/cli",
|
|
3426
3528
|
"pluginName": "@quonfig/cli",
|
|
3427
3529
|
"pluginType": "core",
|
|
@@ -3431,11 +3533,11 @@
|
|
|
3431
3533
|
"relativePath": [
|
|
3432
3534
|
"dist",
|
|
3433
3535
|
"commands",
|
|
3434
|
-
"
|
|
3435
|
-
"
|
|
3536
|
+
"cleanup",
|
|
3537
|
+
"list.js"
|
|
3436
3538
|
]
|
|
3437
3539
|
},
|
|
3438
|
-
"
|
|
3540
|
+
"cleanup:remove": {
|
|
3439
3541
|
"aliases": [],
|
|
3440
3542
|
"args": {
|
|
3441
3543
|
"name": {
|
|
@@ -3443,10 +3545,11 @@
|
|
|
3443
3545
|
"name": "name"
|
|
3444
3546
|
}
|
|
3445
3547
|
},
|
|
3446
|
-
"description": "
|
|
3548
|
+
"description": "Write a cleanup payload for a ready-for-cleanup flag and hand off to the Quonfig agent skill.\n\nModeled on `qfg migrate my-code` — this command never edits source files\nitself. It validates that the flag is marked readyForCleanup=true, refuses to\nproceed if there are still evals_2d > 0 (use --force to override), writes\n`.qf/cleanup/<key>.json` describing the flag's current rule shape +\ntelemetry, and prints how to have your coding agent remove the call sites with\nthe quonfig agent skill (its references/retire-a-flag.md), which asks the\nengineer which value should \"win\" and applies the inlining. Install the skill\nwith `qfg agent install-skill` or `claude plugin install quonfig@quonfig`.\n\nThe payload deliberately does NOT suggest a winning value; that's the\nengineer's call. Run `qfg cleanup status <key>` first if you want to inspect\ntelemetry before retiring.",
|
|
3447
3549
|
"examples": [
|
|
3448
|
-
"<%= config.bin %> <%= command.id %> my.flag
|
|
3449
|
-
"<%= config.bin %> <%= command.id %>
|
|
3550
|
+
"<%= config.bin %> <%= command.id %> my.flag.key",
|
|
3551
|
+
"<%= config.bin %> <%= command.id %> my.flag.key --force",
|
|
3552
|
+
"<%= config.bin %> <%= command.id %> my.flag.key --json"
|
|
3450
3553
|
],
|
|
3451
3554
|
"flags": {
|
|
3452
3555
|
"json": {
|
|
@@ -3499,32 +3602,16 @@
|
|
|
3499
3602
|
"multiple": false,
|
|
3500
3603
|
"type": "option"
|
|
3501
3604
|
},
|
|
3502
|
-
"
|
|
3503
|
-
"description": "
|
|
3504
|
-
"name": "
|
|
3505
|
-
"required": false,
|
|
3506
|
-
"hasDynamicHelp": false,
|
|
3507
|
-
"multiple": false,
|
|
3508
|
-
"options": [
|
|
3509
|
-
"feature_flag",
|
|
3510
|
-
"config",
|
|
3511
|
-
"log_level",
|
|
3512
|
-
"segment",
|
|
3513
|
-
"flag",
|
|
3514
|
-
"log-level"
|
|
3515
|
-
],
|
|
3516
|
-
"type": "option"
|
|
3517
|
-
},
|
|
3518
|
-
"yes": {
|
|
3519
|
-
"description": "Skip the confirmation prompt",
|
|
3520
|
-
"name": "yes",
|
|
3605
|
+
"force": {
|
|
3606
|
+
"description": "Skip the evals_2d > 0 safety gate (useful when telemetry is delayed but you know the flag is dead)",
|
|
3607
|
+
"name": "force",
|
|
3521
3608
|
"allowNo": false,
|
|
3522
3609
|
"type": "boolean"
|
|
3523
3610
|
}
|
|
3524
3611
|
},
|
|
3525
3612
|
"hasDynamicHelp": false,
|
|
3526
3613
|
"hiddenAliases": [],
|
|
3527
|
-
"id": "
|
|
3614
|
+
"id": "cleanup:remove",
|
|
3528
3615
|
"pluginAlias": "@quonfig/cli",
|
|
3529
3616
|
"pluginName": "@quonfig/cli",
|
|
3530
3617
|
"pluginType": "core",
|
|
@@ -3534,34 +3621,26 @@
|
|
|
3534
3621
|
"relativePath": [
|
|
3535
3622
|
"dist",
|
|
3536
3623
|
"commands",
|
|
3537
|
-
"
|
|
3538
|
-
"
|
|
3624
|
+
"cleanup",
|
|
3625
|
+
"remove.js"
|
|
3539
3626
|
]
|
|
3540
3627
|
},
|
|
3541
|
-
"
|
|
3628
|
+
"cleanup:status": {
|
|
3542
3629
|
"aliases": [],
|
|
3543
3630
|
"args": {
|
|
3544
|
-
"
|
|
3545
|
-
"description": "
|
|
3546
|
-
"name": "
|
|
3547
|
-
"required": true
|
|
3548
|
-
},
|
|
3549
|
-
"query": {
|
|
3550
|
-
"description": "Case-insensitive text matched against each context key and its reported properties (e.g. a name)",
|
|
3551
|
-
"name": "query",
|
|
3552
|
-
"required": true
|
|
3631
|
+
"name": {
|
|
3632
|
+
"description": "config/feature-flag/etc. name",
|
|
3633
|
+
"name": "name"
|
|
3553
3634
|
}
|
|
3554
3635
|
},
|
|
3555
|
-
"description": "
|
|
3636
|
+
"description": "Drill into one ready-for-cleanup flag — show telemetry across all environments and the current rule shape.\n\nUse this after `qfg cleanup list` to inspect a specific flag before handing\nremoval off to the Quonfig agent skill. The eval counts come from\nanalytics.configSparklines (the same backing data the per-flag sparklines on\nthe flag detail page use), summed into 24h/2d/7d/30d windows so you can decide\nwhether it's safe to retire.\n\nPass --json for the structured object including the full rule shape per\nenvironment — the agent skill consumes this directly.",
|
|
3556
3637
|
"examples": [
|
|
3557
|
-
"<%= config.bin %> <%= command.id %>
|
|
3558
|
-
"<%= config.bin %> <%= command.id %>
|
|
3559
|
-
"<%= config.bin %> <%= command.id %> organization formhealth --json"
|
|
3638
|
+
"<%= config.bin %> <%= command.id %> my.flag.key",
|
|
3639
|
+
"<%= config.bin %> <%= command.id %> my.flag.key --json"
|
|
3560
3640
|
],
|
|
3561
3641
|
"flags": {
|
|
3562
3642
|
"json": {
|
|
3563
|
-
"description": "
|
|
3564
|
-
"helpGroup": "GLOBAL",
|
|
3643
|
+
"description": "Return structured object for agent consumption",
|
|
3565
3644
|
"name": "json",
|
|
3566
3645
|
"allowNo": false,
|
|
3567
3646
|
"type": "boolean"
|
|
@@ -3608,26 +3687,11 @@
|
|
|
3608
3687
|
"hasDynamicHelp": false,
|
|
3609
3688
|
"multiple": false,
|
|
3610
3689
|
"type": "option"
|
|
3611
|
-
},
|
|
3612
|
-
"environment": {
|
|
3613
|
-
"description": "Only contexts reported from this environment (default: every environment)",
|
|
3614
|
-
"name": "environment",
|
|
3615
|
-
"hasDynamicHelp": false,
|
|
3616
|
-
"multiple": false,
|
|
3617
|
-
"type": "option"
|
|
3618
|
-
},
|
|
3619
|
-
"limit": {
|
|
3620
|
-
"description": "Maximum number of matches (1-100)",
|
|
3621
|
-
"name": "limit",
|
|
3622
|
-
"default": 20,
|
|
3623
|
-
"hasDynamicHelp": false,
|
|
3624
|
-
"multiple": false,
|
|
3625
|
-
"type": "option"
|
|
3626
3690
|
}
|
|
3627
3691
|
},
|
|
3628
3692
|
"hasDynamicHelp": false,
|
|
3629
3693
|
"hiddenAliases": [],
|
|
3630
|
-
"id": "
|
|
3694
|
+
"id": "cleanup:status",
|
|
3631
3695
|
"pluginAlias": "@quonfig/cli",
|
|
3632
3696
|
"pluginName": "@quonfig/cli",
|
|
3633
3697
|
"pluginType": "core",
|
|
@@ -3637,24 +3701,28 @@
|
|
|
3637
3701
|
"relativePath": [
|
|
3638
3702
|
"dist",
|
|
3639
3703
|
"commands",
|
|
3640
|
-
"
|
|
3641
|
-
"
|
|
3704
|
+
"cleanup",
|
|
3705
|
+
"status.js"
|
|
3642
3706
|
]
|
|
3643
3707
|
},
|
|
3644
|
-
"
|
|
3708
|
+
"cleanup:verify": {
|
|
3645
3709
|
"aliases": [],
|
|
3646
|
-
"args": {
|
|
3647
|
-
|
|
3710
|
+
"args": {
|
|
3711
|
+
"name": {
|
|
3712
|
+
"description": "config/feature-flag/etc. name",
|
|
3713
|
+
"name": "name"
|
|
3714
|
+
}
|
|
3715
|
+
},
|
|
3716
|
+
"description": "Confirm zero evals for a flag in the trailing N days (default 7). Exits 0 if safe to delete, non-zero otherwise.\n\nRead-only gate intended for chaining with `qfg delete` after a cleanup PR\nhas merged and the SDK has redeployed:\n\n qfg cleanup verify my.flag.key && qfg delete my.flag.key\n\nThe trailing window is stricter than the `qfg cleanup remove` 2-day gate on\npurpose — `remove` only writes a payload describing the flag, but `delete`\npermanently removes the flag definition, so we want a longer quiet period\nbefore chaining. Bump --days N if you want a more conservative window.",
|
|
3648
3717
|
"examples": [
|
|
3649
|
-
"<%= config.bin %> <%= command.id %>",
|
|
3650
|
-
"<%= config.bin %> <%= command.id %> --
|
|
3651
|
-
"<%= config.bin %> <%= command.id %> --
|
|
3652
|
-
"<%= config.bin %> <%= command.id %>
|
|
3718
|
+
"<%= config.bin %> <%= command.id %> my.flag.key",
|
|
3719
|
+
"<%= config.bin %> <%= command.id %> my.flag.key --days 14",
|
|
3720
|
+
"<%= config.bin %> <%= command.id %> my.flag.key --json",
|
|
3721
|
+
"<%= config.bin %> <%= command.id %> my.flag.key && <%= config.bin %> delete my.flag.key"
|
|
3653
3722
|
],
|
|
3654
3723
|
"flags": {
|
|
3655
3724
|
"json": {
|
|
3656
|
-
"description": "
|
|
3657
|
-
"helpGroup": "GLOBAL",
|
|
3725
|
+
"description": "Return structured object for agent consumption",
|
|
3658
3726
|
"name": "json",
|
|
3659
3727
|
"allowNo": false,
|
|
3660
3728
|
"type": "boolean"
|
|
@@ -3681,30 +3749,39 @@
|
|
|
3681
3749
|
"allowNo": false,
|
|
3682
3750
|
"type": "boolean"
|
|
3683
3751
|
},
|
|
3684
|
-
"
|
|
3685
|
-
"
|
|
3686
|
-
"
|
|
3687
|
-
"
|
|
3688
|
-
"
|
|
3752
|
+
"workspace": {
|
|
3753
|
+
"char": "w",
|
|
3754
|
+
"description": "Workspace slug to use (overrides QUONFIG_WORKSPACE env var and saved default)",
|
|
3755
|
+
"helpGroup": "GLOBAL",
|
|
3756
|
+
"name": "workspace",
|
|
3757
|
+
"required": false,
|
|
3758
|
+
"hasDynamicHelp": false,
|
|
3759
|
+
"multiple": false,
|
|
3760
|
+
"type": "option"
|
|
3689
3761
|
},
|
|
3690
|
-
"
|
|
3691
|
-
"
|
|
3692
|
-
"
|
|
3693
|
-
"
|
|
3762
|
+
"profile": {
|
|
3763
|
+
"char": "p",
|
|
3764
|
+
"description": "Deprecated: use --workspace instead",
|
|
3765
|
+
"helpGroup": "GLOBAL",
|
|
3766
|
+
"hidden": true,
|
|
3767
|
+
"name": "profile",
|
|
3768
|
+
"required": false,
|
|
3694
3769
|
"hasDynamicHelp": false,
|
|
3695
3770
|
"multiple": false,
|
|
3696
3771
|
"type": "option"
|
|
3697
3772
|
},
|
|
3698
|
-
"
|
|
3699
|
-
"description": "
|
|
3700
|
-
"name": "
|
|
3701
|
-
"
|
|
3702
|
-
"
|
|
3773
|
+
"days": {
|
|
3774
|
+
"description": "Number of trailing calendar days that must have zero evals",
|
|
3775
|
+
"name": "days",
|
|
3776
|
+
"default": 7,
|
|
3777
|
+
"hasDynamicHelp": false,
|
|
3778
|
+
"multiple": false,
|
|
3779
|
+
"type": "option"
|
|
3703
3780
|
}
|
|
3704
3781
|
},
|
|
3705
3782
|
"hasDynamicHelp": false,
|
|
3706
3783
|
"hiddenAliases": [],
|
|
3707
|
-
"id": "
|
|
3784
|
+
"id": "cleanup:verify",
|
|
3708
3785
|
"pluginAlias": "@quonfig/cli",
|
|
3709
3786
|
"pluginName": "@quonfig/cli",
|
|
3710
3787
|
"pluginType": "core",
|
|
@@ -3714,8 +3791,8 @@
|
|
|
3714
3791
|
"relativePath": [
|
|
3715
3792
|
"dist",
|
|
3716
3793
|
"commands",
|
|
3717
|
-
"
|
|
3718
|
-
"
|
|
3794
|
+
"cleanup",
|
|
3795
|
+
"verify.js"
|
|
3719
3796
|
]
|
|
3720
3797
|
},
|
|
3721
3798
|
"migrate:doctor": {
|
|
@@ -4427,5 +4504,5 @@
|
|
|
4427
4504
|
]
|
|
4428
4505
|
}
|
|
4429
4506
|
},
|
|
4430
|
-
"version": "0.
|
|
4507
|
+
"version": "0.6.0"
|
|
4431
4508
|
}
|