@loopress/cli 0.22.0 → 0.24.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 (117) hide show
  1. package/README.md +794 -85
  2. package/dist/commands/acf/diff.d.ts +2 -0
  3. package/dist/commands/acf/diff.js +5 -0
  4. package/dist/commands/api/diff.d.ts +2 -0
  5. package/dist/commands/api/diff.js +5 -0
  6. package/dist/commands/api/list.d.ts +2 -12
  7. package/dist/commands/api/list.js +2 -20
  8. package/dist/commands/api/pull.d.ts +2 -20
  9. package/dist/commands/api/pull.js +2 -53
  10. package/dist/commands/api/push.d.ts +2 -22
  11. package/dist/commands/api/push.js +2 -116
  12. package/dist/commands/app/list.d.ts +17 -0
  13. package/dist/commands/app/list.js +35 -0
  14. package/dist/commands/{page → app}/pull.d.ts +7 -5
  15. package/dist/commands/app/pull.js +94 -0
  16. package/dist/commands/app/push.d.ts +28 -0
  17. package/dist/commands/app/push.js +130 -0
  18. package/dist/commands/app/remove.d.ts +20 -0
  19. package/dist/commands/app/remove.js +42 -0
  20. package/dist/commands/composer/pull.js +6 -16
  21. package/dist/commands/composer/push.d.ts +1 -0
  22. package/dist/commands/composer/push.js +43 -19
  23. package/dist/commands/dev.js +1 -1
  24. package/dist/commands/diff.d.ts +13 -0
  25. package/dist/commands/diff.js +42 -0
  26. package/dist/commands/form/diff.d.ts +2 -0
  27. package/dist/commands/form/diff.js +5 -0
  28. package/dist/commands/hook/diff.d.ts +2 -0
  29. package/dist/commands/hook/diff.js +5 -0
  30. package/dist/commands/hook/list.d.ts +2 -0
  31. package/dist/commands/hook/list.js +2 -0
  32. package/dist/commands/hook/pull.d.ts +2 -0
  33. package/dist/commands/hook/pull.js +2 -0
  34. package/dist/commands/hook/push.d.ts +2 -0
  35. package/dist/commands/hook/push.js +2 -0
  36. package/dist/commands/init.js +2 -1
  37. package/dist/commands/option/add.d.ts +15 -0
  38. package/dist/commands/option/add.js +47 -0
  39. package/dist/commands/option/diff.d.ts +2 -0
  40. package/dist/commands/option/diff.js +5 -0
  41. package/dist/commands/{page → option}/list.d.ts +5 -1
  42. package/dist/commands/option/list.js +151 -0
  43. package/dist/commands/option/pull.d.ts +16 -0
  44. package/dist/commands/option/pull.js +75 -0
  45. package/dist/commands/{page → option}/push.d.ts +3 -8
  46. package/dist/commands/option/push.js +66 -0
  47. package/dist/commands/option/remove.d.ts +22 -0
  48. package/dist/commands/option/remove.js +69 -0
  49. package/dist/commands/plugin/add.d.ts +1 -0
  50. package/dist/commands/plugin/add.js +18 -8
  51. package/dist/commands/plugin/audit.d.ts +30 -0
  52. package/dist/commands/plugin/audit.js +138 -0
  53. package/dist/commands/plugin/pull.d.ts +1 -2
  54. package/dist/commands/plugin/pull.js +11 -11
  55. package/dist/commands/plugin/push.d.ts +13 -8
  56. package/dist/commands/plugin/push.js +161 -67
  57. package/dist/commands/plugin/status.d.ts +22 -0
  58. package/dist/commands/plugin/status.js +65 -0
  59. package/dist/commands/pull.js +3 -2
  60. package/dist/commands/push.js +4 -3
  61. package/dist/commands/seo/diff.d.ts +2 -0
  62. package/dist/commands/seo/diff.js +5 -0
  63. package/dist/commands/snippet/diff.d.ts +2 -0
  64. package/dist/commands/snippet/diff.js +5 -0
  65. package/dist/commands/theme/add.d.ts +13 -0
  66. package/dist/commands/theme/add.js +35 -0
  67. package/dist/commands/theme/pull.d.ts +21 -0
  68. package/dist/commands/theme/pull.js +37 -0
  69. package/dist/commands/theme/push.d.ts +22 -0
  70. package/dist/commands/theme/push.js +123 -0
  71. package/dist/commands/theme/status.d.ts +20 -0
  72. package/dist/commands/theme/status.js +51 -0
  73. package/dist/lib/app-manifest.d.ts +36 -0
  74. package/dist/lib/app-manifest.js +162 -0
  75. package/dist/lib/base.d.ts +3 -1
  76. package/dist/lib/base.js +14 -19
  77. package/dist/lib/dev-watch.d.ts +1 -1
  78. package/dist/lib/dev-watch.js +1 -2
  79. package/dist/lib/diff-command.d.ts +47 -0
  80. package/dist/lib/diff-command.js +180 -0
  81. package/dist/lib/diff-state.d.ts +22 -0
  82. package/dist/lib/diff-state.js +88 -0
  83. package/dist/lib/find-orphaned-files.js +1 -1
  84. package/dist/lib/interactive.d.ts +1 -0
  85. package/dist/lib/interactive.js +10 -0
  86. package/dist/lib/php-files-command.d.ts +54 -0
  87. package/dist/lib/php-files-command.js +216 -0
  88. package/dist/lib/put-or-create.js +1 -1
  89. package/dist/lib/readdir-tolerant.d.ts +1 -0
  90. package/dist/lib/readdir-tolerant.js +3 -1
  91. package/dist/lib/resource-state.d.ts +14 -0
  92. package/dist/lib/resource-state.js +361 -0
  93. package/dist/lib/validate-local.js +15 -7
  94. package/dist/lib/wp-client.d.ts +5 -0
  95. package/dist/lib/wp-client.js +56 -0
  96. package/dist/types/plugin.d.ts +1 -0
  97. package/dist/types/project-config.generated.d.ts +19 -5
  98. package/dist/utils/option-format.d.ts +31 -0
  99. package/dist/utils/option-format.js +51 -0
  100. package/dist/utils/plugin-sync.d.ts +26 -0
  101. package/dist/utils/plugin-sync.js +31 -0
  102. package/dist/utils/plugins.d.ts +15 -2
  103. package/dist/utils/plugins.js +57 -12
  104. package/dist/utils/resource-dirs.d.ts +13 -0
  105. package/dist/utils/resource-dirs.js +34 -0
  106. package/dist/utils/themes.d.ts +30 -0
  107. package/dist/utils/themes.js +29 -0
  108. package/dist/utils/version.d.ts +2 -0
  109. package/dist/utils/version.js +21 -0
  110. package/oclif.manifest.json +1897 -244
  111. package/package.json +26 -19
  112. package/schemas/project-config.schema.json +32 -9
  113. package/dist/commands/page/list.js +0 -19
  114. package/dist/commands/page/pull.js +0 -57
  115. package/dist/commands/page/push.js +0 -132
  116. package/dist/utils/page-format.d.ts +0 -7
  117. package/dist/utils/page-format.js +0 -78
package/README.md CHANGED
@@ -21,7 +21,7 @@ $ npm install -g @loopress/cli
21
21
  $ lps COMMAND
22
22
  running command...
23
23
  $ lps (--version)
24
- @loopress/cli/0.22.0 linux-x64 node-v24.19.0
24
+ @loopress/cli/0.24.0 linux-x64 node-v24.20.0
25
25
  $ lps --help [COMMAND]
26
26
  USAGE
27
27
  $ lps COMMAND
@@ -47,31 +47,48 @@ report.
47
47
  # Commands
48
48
 
49
49
  <!-- commands -->
50
+ * [`lps acf diff [PATH]`](#lps-acf-diff-path)
50
51
  * [`lps acf list`](#lps-acf-list)
51
52
  * [`lps acf pull [PATH]`](#lps-acf-pull-path)
52
53
  * [`lps acf push [PATH]`](#lps-acf-push-path)
54
+ * [`lps api diff [PATH]`](#lps-api-diff-path)
53
55
  * [`lps api list`](#lps-api-list)
54
56
  * [`lps api publish [PATH]`](#lps-api-publish-path)
55
57
  * [`lps api pull [PATH]`](#lps-api-pull-path)
56
58
  * [`lps api push [PATH]`](#lps-api-push-path)
59
+ * [`lps app list`](#lps-app-list)
60
+ * [`lps app pull [PATH]`](#lps-app-pull-path)
61
+ * [`lps app push [NAME]`](#lps-app-push-name)
62
+ * [`lps app remove NAME`](#lps-app-remove-name)
57
63
  * [`lps composer init`](#lps-composer-init)
58
64
  * [`lps composer pull`](#lps-composer-pull)
59
65
  * [`lps composer push`](#lps-composer-push)
60
66
  * [`lps dev`](#lps-dev)
67
+ * [`lps diff`](#lps-diff)
61
68
  * [`lps doctor`](#lps-doctor)
69
+ * [`lps form diff [PATH]`](#lps-form-diff-path)
62
70
  * [`lps form list`](#lps-form-list)
63
71
  * [`lps form pull [PATH]`](#lps-form-pull-path)
64
72
  * [`lps form push [PATH]`](#lps-form-push-path)
65
73
  * [`lps help [COMMAND]`](#lps-help-command)
74
+ * [`lps hook diff [PATH]`](#lps-hook-diff-path)
75
+ * [`lps hook list`](#lps-hook-list)
76
+ * [`lps hook pull [PATH]`](#lps-hook-pull-path)
77
+ * [`lps hook push [PATH]`](#lps-hook-push-path)
66
78
  * [`lps init`](#lps-init)
67
79
  * [`lps login`](#lps-login)
68
80
  * [`lps logout`](#lps-logout)
69
- * [`lps page list`](#lps-page-list)
70
- * [`lps page pull [PATH]`](#lps-page-pull-path)
71
- * [`lps page push [PATH]`](#lps-page-push-path)
81
+ * [`lps option add NAME`](#lps-option-add-name)
82
+ * [`lps option diff [PATH]`](#lps-option-diff-path)
83
+ * [`lps option list`](#lps-option-list)
84
+ * [`lps option pull [PATH]`](#lps-option-pull-path)
85
+ * [`lps option push [PATH]`](#lps-option-push-path)
86
+ * [`lps option remove NAME`](#lps-option-remove-name)
72
87
  * [`lps plugin add SLUG`](#lps-plugin-add-slug)
88
+ * [`lps plugin audit`](#lps-plugin-audit)
73
89
  * [`lps plugin pull`](#lps-plugin-pull)
74
90
  * [`lps plugin push`](#lps-plugin-push)
91
+ * [`lps plugin status`](#lps-plugin-status)
75
92
  * [`lps project config`](#lps-project-config)
76
93
  * [`lps project list`](#lps-project-list)
77
94
  * [`lps project pull`](#lps-project-pull)
@@ -82,9 +99,11 @@ report.
82
99
  * [`lps promote FROM TO`](#lps-promote-from-to)
83
100
  * [`lps pull`](#lps-pull)
84
101
  * [`lps push`](#lps-push)
102
+ * [`lps seo diff [PATH]`](#lps-seo-diff-path)
85
103
  * [`lps seo list`](#lps-seo-list)
86
104
  * [`lps seo pull [PATH]`](#lps-seo-pull-path)
87
105
  * [`lps seo push [PATH]`](#lps-seo-push-path)
106
+ * [`lps snippet diff [PATH]`](#lps-snippet-diff-path)
88
107
  * [`lps snippet list`](#lps-snippet-list)
89
108
  * [`lps snippet publish [PATH]`](#lps-snippet-publish-path)
90
109
  * [`lps snippet pull [PATH]`](#lps-snippet-pull-path)
@@ -92,8 +111,44 @@ report.
92
111
  * [`lps status`](#lps-status)
93
112
  * [`lps telemetry disable`](#lps-telemetry-disable)
94
113
  * [`lps telemetry enable`](#lps-telemetry-enable)
114
+ * [`lps theme add SLUG`](#lps-theme-add-slug)
115
+ * [`lps theme pull`](#lps-theme-pull)
116
+ * [`lps theme push`](#lps-theme-push)
117
+ * [`lps theme status`](#lps-theme-status)
95
118
  * [`lps validate`](#lps-validate)
96
119
 
120
+ ## `lps acf diff [PATH]`
121
+
122
+ Show what differs in ACF field groups, post types, taxonomies, and options pages between your local files and a WordPress environment, or between two environments
123
+
124
+ ```
125
+ USAGE
126
+ $ lps acf diff [PATH] [--json] [--env <value>] [--against <value>]
127
+
128
+ ARGUMENTS
129
+ [PATH] Path to ACF directory (overrides project config)
130
+
131
+ FLAGS
132
+ --against=<value> Compare the primary environment against this second environment instead of against local files
133
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
134
+
135
+ GLOBAL FLAGS
136
+ --json Format output as json.
137
+
138
+ DESCRIPTION
139
+ Show what differs in ACF field groups, post types, taxonomies, and options pages between your local files and a
140
+ WordPress environment, or between two environments
141
+
142
+ EXAMPLES
143
+ $ lps acf diff
144
+
145
+ $ lps acf diff --env staging
146
+
147
+ $ lps acf diff --env staging --against production
148
+ ```
149
+
150
+ _See code: [src/commands/acf/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/acf/diff.ts)_
151
+
97
152
  ## `lps acf list`
98
153
 
99
154
  List ACF field groups, post types, taxonomies, and options pages from WordPress
@@ -119,7 +174,7 @@ EXAMPLES
119
174
  $ lps acf list --type field-groups
120
175
  ```
121
176
 
122
- _See code: [src/commands/acf/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/acf/list.ts)_
177
+ _See code: [src/commands/acf/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/acf/list.ts)_
123
178
 
124
179
  ## `lps acf pull [PATH]`
125
180
 
@@ -148,7 +203,7 @@ EXAMPLES
148
203
  $ lps acf pull --type field-groups
149
204
  ```
150
205
 
151
- _See code: [src/commands/acf/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/acf/pull.ts)_
206
+ _See code: [src/commands/acf/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/acf/pull.ts)_
152
207
 
153
208
  ## `lps acf push [PATH]`
154
209
 
@@ -177,7 +232,39 @@ EXAMPLES
177
232
  $ lps acf push --type field-groups
178
233
  ```
179
234
 
180
- _See code: [src/commands/acf/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/acf/push.ts)_
235
+ _See code: [src/commands/acf/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/acf/push.ts)_
236
+
237
+ ## `lps api diff [PATH]`
238
+
239
+ Show what differs in custom API route files between your local files and a WordPress environment, or between two environments
240
+
241
+ ```
242
+ USAGE
243
+ $ lps api diff [PATH] [--json] [--env <value>] [--against <value>]
244
+
245
+ ARGUMENTS
246
+ [PATH] Path to api directory (overrides project config)
247
+
248
+ FLAGS
249
+ --against=<value> Compare the primary environment against this second environment instead of against local files
250
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
251
+
252
+ GLOBAL FLAGS
253
+ --json Format output as json.
254
+
255
+ DESCRIPTION
256
+ Show what differs in custom API route files between your local files and a WordPress environment, or between two
257
+ environments
258
+
259
+ EXAMPLES
260
+ $ lps api diff
261
+
262
+ $ lps api diff --env staging
263
+
264
+ $ lps api diff --env staging --against production
265
+ ```
266
+
267
+ _See code: [src/commands/api/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/api/diff.ts)_
181
268
 
182
269
  ## `lps api list`
183
270
 
@@ -200,7 +287,7 @@ EXAMPLES
200
287
  $ lps api list
201
288
  ```
202
289
 
203
- _See code: [src/commands/api/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/api/list.ts)_
290
+ _See code: [src/commands/api/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/api/list.ts)_
204
291
 
205
292
  ## `lps api publish [PATH]`
206
293
 
@@ -223,7 +310,7 @@ EXAMPLES
223
310
  $ lps api publish --path ./api
224
311
  ```
225
312
 
226
- _See code: [src/commands/api/publish.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/api/publish.ts)_
313
+ _See code: [src/commands/api/publish.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/api/publish.ts)_
227
314
 
228
315
  ## `lps api pull [PATH]`
229
316
 
@@ -253,7 +340,7 @@ EXAMPLES
253
340
  $ lps api pull --path ./api
254
341
  ```
255
342
 
256
- _See code: [src/commands/api/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/api/pull.ts)_
343
+ _See code: [src/commands/api/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/api/pull.ts)_
257
344
 
258
345
  ## `lps api push [PATH]`
259
346
 
@@ -283,7 +370,118 @@ EXAMPLES
283
370
  $ lps api push --path ./api
284
371
  ```
285
372
 
286
- _See code: [src/commands/api/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/api/push.ts)_
373
+ _See code: [src/commands/api/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/api/push.ts)_
374
+
375
+ ## `lps app list`
376
+
377
+ List single-page apps deployed to WordPress
378
+
379
+ ```
380
+ USAGE
381
+ $ lps app list [--json] [--env <value>]
382
+
383
+ FLAGS
384
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
385
+
386
+ GLOBAL FLAGS
387
+ --json Format output as json.
388
+
389
+ DESCRIPTION
390
+ List single-page apps deployed to WordPress
391
+
392
+ EXAMPLES
393
+ $ lps app list
394
+ ```
395
+
396
+ _See code: [src/commands/app/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/app/list.ts)_
397
+
398
+ ## `lps app pull [PATH]`
399
+
400
+ Pull single-page app bundles from WordPress into local files
401
+
402
+ ```
403
+ USAGE
404
+ $ lps app pull [PATH] [--json] [--env <value>] [-d] [-y]
405
+
406
+ ARGUMENTS
407
+ [PATH] Path to apps directory (overrides project config)
408
+
409
+ FLAGS
410
+ -d, --dry-run Show what would change without making changes
411
+ -y, --yes Answer yes to confirmation prompts
412
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
413
+
414
+ GLOBAL FLAGS
415
+ --json Format output as json.
416
+
417
+ DESCRIPTION
418
+ Pull single-page app bundles from WordPress into local files
419
+
420
+ EXAMPLES
421
+ $ lps app pull
422
+ ```
423
+
424
+ _See code: [src/commands/app/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/app/pull.ts)_
425
+
426
+ ## `lps app push [NAME]`
427
+
428
+ Push built single-page app bundles to WordPress. Each app is an `apps/<name>/` directory holding a loopress.app.json and a built dist/ folder. Only files whose content changed are uploaded.
429
+
430
+ ```
431
+ USAGE
432
+ $ lps app push [NAME] [--json] [--env <value>] [-d] [-y]
433
+
434
+ ARGUMENTS
435
+ [NAME] Push only this app (defaults to every app in the directory)
436
+
437
+ FLAGS
438
+ -d, --dry-run Show what would change without making changes
439
+ -y, --yes Answer yes to confirmation prompts
440
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
441
+
442
+ GLOBAL FLAGS
443
+ --json Format output as json.
444
+
445
+ DESCRIPTION
446
+ Push built single-page app bundles to WordPress. Each app is an `apps/<name>/` directory holding a loopress.app.json
447
+ and a built dist/ folder. Only files whose content changed are uploaded.
448
+
449
+ EXAMPLES
450
+ $ lps app push
451
+
452
+ $ lps app push search
453
+ ```
454
+
455
+ _See code: [src/commands/app/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/app/push.ts)_
456
+
457
+ ## `lps app remove NAME`
458
+
459
+ Remove a single-page app from WordPress: deletes its bundle from wp-content/loopress/apps/ and unregisters the shortcode. Local files are left untouched.
460
+
461
+ ```
462
+ USAGE
463
+ $ lps app remove NAME [--json] [--env <value>] [-d] [-y]
464
+
465
+ ARGUMENTS
466
+ NAME App to remove from WordPress
467
+
468
+ FLAGS
469
+ -d, --dry-run Show what would change without making changes
470
+ -y, --yes Answer yes to confirmation prompts
471
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
472
+
473
+ GLOBAL FLAGS
474
+ --json Format output as json.
475
+
476
+ DESCRIPTION
477
+ Remove a single-page app from WordPress: deletes its bundle from wp-content/loopress/apps/ and unregisters the
478
+ shortcode. Local files are left untouched.
479
+
480
+ EXAMPLES
481
+ $ lps app remove search
482
+ ```
483
+
484
+ _See code: [src/commands/app/remove.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/app/remove.ts)_
287
485
 
288
486
  ## `lps composer init`
289
487
 
@@ -306,7 +504,7 @@ EXAMPLES
306
504
  $ lps composer init --dry-run
307
505
  ```
308
506
 
309
- _See code: [src/commands/composer/init.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/composer/init.ts)_
507
+ _See code: [src/commands/composer/init.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/composer/init.ts)_
310
508
 
311
509
  ## `lps composer pull`
312
510
 
@@ -332,26 +530,27 @@ EXAMPLES
332
530
  $ lps composer pull --dry-run
333
531
  ```
334
532
 
335
- _See code: [src/commands/composer/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/composer/pull.ts)_
533
+ _See code: [src/commands/composer/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/composer/pull.ts)_
336
534
 
337
535
  ## `lps composer push`
338
536
 
339
- Push composer.json and composer.lock to WordPress and run composer install
537
+ Push composer.json (and composer.lock, if present) to WordPress and run Composer
340
538
 
341
539
  ```
342
540
  USAGE
343
- $ lps composer push [--json] [--env <value>] [-d] [-y]
541
+ $ lps composer push [--json] [--env <value>] [-d] [-y] [--force]
344
542
 
345
543
  FLAGS
346
544
  -d, --dry-run Show what would change without making changes
347
545
  -y, --yes Answer yes to confirmation prompts
348
546
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
547
+ --force Allow downgrades and take over plugins/themes installed outside Loopress
349
548
 
350
549
  GLOBAL FLAGS
351
550
  --json Format output as json.
352
551
 
353
552
  DESCRIPTION
354
- Push composer.json and composer.lock to WordPress and run composer install
553
+ Push composer.json (and composer.lock, if present) to WordPress and run Composer
355
554
 
356
555
  EXAMPLES
357
556
  $ lps composer push
@@ -359,7 +558,7 @@ EXAMPLES
359
558
  $ lps composer push --dry-run
360
559
  ```
361
560
 
362
- _See code: [src/commands/composer/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/composer/push.ts)_
561
+ _See code: [src/commands/composer/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/composer/push.ts)_
363
562
 
364
563
  ## `lps dev`
365
564
 
@@ -370,8 +569,8 @@ USAGE
370
569
  $ lps dev [--only <value>] [--skip <value>]
371
570
 
372
571
  FLAGS
373
- --only=<value> Only watch these resource types (comma-separated): snippets, pages, api, plugins
374
- --skip=<value> Skip these resource types (comma-separated): snippets, pages, api, plugins
572
+ --only=<value> Only watch these resource types (comma-separated): snippets, api, plugins
573
+ --skip=<value> Skip these resource types (comma-separated): snippets, api, plugins
375
574
 
376
575
  DESCRIPTION
377
576
  Watch project files and push changes to the local WordPress instance as they happen. Always targets the "local"
@@ -380,12 +579,52 @@ DESCRIPTION
380
579
  EXAMPLES
381
580
  $ lps dev
382
581
 
383
- $ lps dev --only=snippets,pages
582
+ $ lps dev --only=snippets,api
384
583
 
385
584
  $ lps dev --skip=plugins
386
585
  ```
387
586
 
388
- _See code: [src/commands/dev.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/dev.ts)_
587
+ _See code: [src/commands/dev.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/dev.ts)_
588
+
589
+ ## `lps diff`
590
+
591
+ Show what differs between your local tracked files and a WordPress environment, or between two environments. Covers snippets, forms, ACF, API routes, Hooks, SEO, and Composer. Plugins and themes have their own `lps plugin status` / `lps theme status`. Exit code: 0 in sync, 1 on drift, 2 when a resource could not be compared, so it doubles as a CI drift gate.
592
+
593
+ ```
594
+ USAGE
595
+ $ lps diff [--json] [--env <value>] [--against <value>] [--only
596
+ snippet|form|acf|api|hook|seo|option|composer...] [--skip snippet|form|acf|api|hook|seo|option|composer...]
597
+
598
+ FLAGS
599
+ --against=<value> Compare the primary environment against this second environment instead of against local files
600
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
601
+ --only=<option>... Only compare these resources
602
+ <options: snippet|form|acf|api|hook|seo|option|composer>
603
+ --skip=<option>... Compare every resource except these
604
+ <options: snippet|form|acf|api|hook|seo|option|composer>
605
+
606
+ GLOBAL FLAGS
607
+ --json Format output as json.
608
+
609
+ DESCRIPTION
610
+ Show what differs between your local tracked files and a WordPress environment, or between two environments. Covers
611
+ snippets, forms, ACF, API routes, Hooks, SEO, and Composer. Plugins and themes have their own `lps plugin status` /
612
+ `lps theme status`. Exit code: 0 in sync, 1 on drift, 2 when a resource could not be compared, so it doubles as a CI
613
+ drift gate.
614
+
615
+ EXAMPLES
616
+ $ lps diff
617
+
618
+ $ lps diff --env staging
619
+
620
+ $ lps diff --env staging --against production
621
+
622
+ $ lps diff --only snippet --only acf
623
+
624
+ $ lps diff --skip composer
625
+ ```
626
+
627
+ _See code: [src/commands/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/diff.ts)_
389
628
 
390
629
  ## `lps doctor`
391
630
 
@@ -407,7 +646,38 @@ EXAMPLES
407
646
  $ lps doctor --env production
408
647
  ```
409
648
 
410
- _See code: [src/commands/doctor.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/doctor.ts)_
649
+ _See code: [src/commands/doctor.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/doctor.ts)_
650
+
651
+ ## `lps form diff [PATH]`
652
+
653
+ Show what differs in forms between your local files and a WordPress environment, or between two environments
654
+
655
+ ```
656
+ USAGE
657
+ $ lps form diff [PATH] [--json] [--env <value>] [--against <value>]
658
+
659
+ ARGUMENTS
660
+ [PATH] Path to forms directory (overrides project config)
661
+
662
+ FLAGS
663
+ --against=<value> Compare the primary environment against this second environment instead of against local files
664
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
665
+
666
+ GLOBAL FLAGS
667
+ --json Format output as json.
668
+
669
+ DESCRIPTION
670
+ Show what differs in forms between your local files and a WordPress environment, or between two environments
671
+
672
+ EXAMPLES
673
+ $ lps form diff
674
+
675
+ $ lps form diff --env staging
676
+
677
+ $ lps form diff --env staging --against production
678
+ ```
679
+
680
+ _See code: [src/commands/form/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/form/diff.ts)_
411
681
 
412
682
  ## `lps form list`
413
683
 
@@ -430,7 +700,7 @@ EXAMPLES
430
700
  $ lps form list
431
701
  ```
432
702
 
433
- _See code: [src/commands/form/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/form/list.ts)_
703
+ _See code: [src/commands/form/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/form/list.ts)_
434
704
 
435
705
  ## `lps form pull [PATH]`
436
706
 
@@ -455,7 +725,7 @@ EXAMPLES
455
725
  $ lps form pull
456
726
  ```
457
727
 
458
- _See code: [src/commands/form/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/form/pull.ts)_
728
+ _See code: [src/commands/form/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/form/pull.ts)_
459
729
 
460
730
  ## `lps form push [PATH]`
461
731
 
@@ -481,7 +751,7 @@ EXAMPLES
481
751
  $ lps form push
482
752
  ```
483
753
 
484
- _See code: [src/commands/form/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/form/push.ts)_
754
+ _See code: [src/commands/form/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/form/push.ts)_
485
755
 
486
756
  ## `lps help [COMMAND]`
487
757
 
@@ -501,7 +771,121 @@ DESCRIPTION
501
771
  Display help for lps.
502
772
  ```
503
773
 
504
- _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/6.3.0/src/commands/help.ts)_
774
+ _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/7.0.0/src/commands/help.ts)_
775
+
776
+ ## `lps hook diff [PATH]`
777
+
778
+ Show what differs in hook files between your local files and a WordPress environment, or between two environments
779
+
780
+ ```
781
+ USAGE
782
+ $ lps hook diff [PATH] [--json] [--env <value>] [--against <value>]
783
+
784
+ ARGUMENTS
785
+ [PATH] Path to hooks directory (overrides project config)
786
+
787
+ FLAGS
788
+ --against=<value> Compare the primary environment against this second environment instead of against local files
789
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
790
+
791
+ GLOBAL FLAGS
792
+ --json Format output as json.
793
+
794
+ DESCRIPTION
795
+ Show what differs in hook files between your local files and a WordPress environment, or between two environments
796
+
797
+ EXAMPLES
798
+ $ lps hook diff
799
+
800
+ $ lps hook diff --env staging
801
+
802
+ $ lps hook diff --env staging --against production
803
+ ```
804
+
805
+ _See code: [src/commands/hook/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/hook/diff.ts)_
806
+
807
+ ## `lps hook list`
808
+
809
+ List hook files (actions, filters, cron) from WordPress
810
+
811
+ ```
812
+ USAGE
813
+ $ lps hook list [--json] [--env <value>]
814
+
815
+ FLAGS
816
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
817
+
818
+ GLOBAL FLAGS
819
+ --json Format output as json.
820
+
821
+ DESCRIPTION
822
+ List hook files (actions, filters, cron) from WordPress
823
+
824
+ EXAMPLES
825
+ $ lps hook list
826
+ ```
827
+
828
+ _See code: [src/commands/hook/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/hook/list.ts)_
829
+
830
+ ## `lps hook pull [PATH]`
831
+
832
+ Pull hook files (actions, filters, cron) from WordPress
833
+
834
+ ```
835
+ USAGE
836
+ $ lps hook pull [PATH] [--json] [--env <value>] [-d] [-y]
837
+
838
+ ARGUMENTS
839
+ [PATH] Path to hooks directory (overrides project config)
840
+
841
+ FLAGS
842
+ -d, --dry-run Show what would change without making changes
843
+ -y, --yes Answer yes to confirmation prompts
844
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
845
+
846
+ GLOBAL FLAGS
847
+ --json Format output as json.
848
+
849
+ DESCRIPTION
850
+ Pull hook files (actions, filters, cron) from WordPress
851
+
852
+ EXAMPLES
853
+ $ lps hook pull
854
+
855
+ $ lps hook pull --path ./hooks
856
+ ```
857
+
858
+ _See code: [src/commands/hook/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/hook/pull.ts)_
859
+
860
+ ## `lps hook push [PATH]`
861
+
862
+ Push hook files (actions, filters, cron) to WordPress
863
+
864
+ ```
865
+ USAGE
866
+ $ lps hook push [PATH] [--json] [--env <value>] [-d] [-y]
867
+
868
+ ARGUMENTS
869
+ [PATH] Path to hooks directory (overrides project config)
870
+
871
+ FLAGS
872
+ -d, --dry-run Show what would change without making changes
873
+ -y, --yes Answer yes to confirmation prompts
874
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
875
+
876
+ GLOBAL FLAGS
877
+ --json Format output as json.
878
+
879
+ DESCRIPTION
880
+ Push hook files (actions, filters, cron) to WordPress
881
+
882
+ EXAMPLES
883
+ $ lps hook push
884
+
885
+ $ lps hook push --path ./hooks
886
+ ```
887
+
888
+ _See code: [src/commands/hook/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/hook/push.ts)_
505
889
 
506
890
  ## `lps init`
507
891
 
@@ -518,7 +902,7 @@ EXAMPLES
518
902
  $ lps init
519
903
  ```
520
904
 
521
- _See code: [src/commands/init.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/init.ts)_
905
+ _See code: [src/commands/init.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/init.ts)_
522
906
 
523
907
  ## `lps login`
524
908
 
@@ -535,7 +919,7 @@ EXAMPLES
535
919
  $ lps login
536
920
  ```
537
921
 
538
- _See code: [src/commands/login.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/login.ts)_
922
+ _See code: [src/commands/login.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/login.ts)_
539
923
 
540
924
  ## `lps logout`
541
925
 
@@ -552,41 +936,111 @@ EXAMPLES
552
936
  $ lps logout
553
937
  ```
554
938
 
555
- _See code: [src/commands/logout.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/logout.ts)_
939
+ _See code: [src/commands/logout.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/logout.ts)_
940
+
941
+ ## `lps option add NAME`
942
+
943
+ Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.
944
+
945
+ ```
946
+ USAGE
947
+ $ lps option add NAME [--json] [--env <value>] [-d] [--path <value>]
948
+
949
+ ARGUMENTS
950
+ NAME Option name to start tracking (see `lps option list`)
951
+
952
+ FLAGS
953
+ -d, --dry-run Show what would change without making changes
954
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
955
+ --path=<value> Path to options directory (overrides project config)
956
+
957
+ GLOBAL FLAGS
958
+ --json Format output as json.
959
+
960
+ DESCRIPTION
961
+ Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this
962
+ copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.
963
+
964
+ EXAMPLES
965
+ $ lps option add wpseo_titles
966
+
967
+ $ lps option add siteurl
968
+ ```
969
+
970
+ _See code: [src/commands/option/add.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/add.ts)_
971
+
972
+ ## `lps option diff [PATH]`
973
+
974
+ Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two environments
975
+
976
+ ```
977
+ USAGE
978
+ $ lps option diff [PATH] [--json] [--env <value>] [--against <value>]
979
+
980
+ ARGUMENTS
981
+ [PATH] Path to options directory (overrides project config)
982
+
983
+ FLAGS
984
+ --against=<value> Compare the primary environment against this second environment instead of against local files
985
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
986
+
987
+ GLOBAL FLAGS
988
+ --json Format output as json.
989
+
990
+ DESCRIPTION
991
+ Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two
992
+ environments
993
+
994
+ EXAMPLES
995
+ $ lps option diff
996
+
997
+ $ lps option diff --env staging
998
+
999
+ $ lps option diff --env staging --against production
1000
+ ```
1001
+
1002
+ _See code: [src/commands/option/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/diff.ts)_
556
1003
 
557
- ## `lps page list`
1004
+ ## `lps option list`
558
1005
 
559
- List pages from WordPress
1006
+ List WordPress option names currently on the site (names and autoload only, never values). CORE flags a WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option you want, then `lps option add <name>` to track it.
560
1007
 
561
1008
  ```
562
1009
  USAGE
563
- $ lps page list [--json] [--env <value>]
1010
+ $ lps option list [--json] [--env <value>] [--no-core]
564
1011
 
565
1012
  FLAGS
566
1013
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1014
+ --no-core Exclude WordPress-native default options and the CORE column from the output, including --json
567
1015
 
568
1016
  GLOBAL FLAGS
569
1017
  --json Format output as json.
570
1018
 
571
1019
  DESCRIPTION
572
- List pages from WordPress
1020
+ List WordPress option names currently on the site (names and autoload only, never values). CORE flags a
1021
+ WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active
1022
+ plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is
1023
+ that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option
1024
+ you want, then `lps option add <name>` to track it.
573
1025
 
574
1026
  EXAMPLES
575
- $ lps page list
1027
+ $ lps option list
1028
+
1029
+ $ lps option list --no-core
576
1030
  ```
577
1031
 
578
- _See code: [src/commands/page/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/page/list.ts)_
1032
+ _See code: [src/commands/option/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/list.ts)_
579
1033
 
580
- ## `lps page pull [PATH]`
1034
+ ## `lps option pull [PATH]`
581
1035
 
582
- Pull pages from WordPress
1036
+ Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>` for those first.
583
1037
 
584
1038
  ```
585
1039
  USAGE
586
- $ lps page pull [PATH] [--json] [--env <value>] [-d] [-y]
1040
+ $ lps option pull [PATH] [--json] [--env <value>] [-d] [-y]
587
1041
 
588
1042
  ARGUMENTS
589
- [PATH] Path to pages directory (overrides project config)
1043
+ [PATH] Path to options directory (overrides project config)
590
1044
 
591
1045
  FLAGS
592
1046
  -d, --dry-run Show what would change without making changes
@@ -597,24 +1051,25 @@ GLOBAL FLAGS
597
1051
  --json Format output as json.
598
1052
 
599
1053
  DESCRIPTION
600
- Pull pages from WordPress
1054
+ Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>`
1055
+ for those first.
601
1056
 
602
1057
  EXAMPLES
603
- $ lps page pull
1058
+ $ lps option pull
604
1059
  ```
605
1060
 
606
- _See code: [src/commands/page/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/page/pull.ts)_
1061
+ _See code: [src/commands/option/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/pull.ts)_
607
1062
 
608
- ## `lps page push [PATH]`
1063
+ ## `lps option push [PATH]`
609
1064
 
610
- Push pages to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.
1065
+ Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options marked "readonly": true in their local file are skipped, edit the file to override.
611
1066
 
612
1067
  ```
613
1068
  USAGE
614
- $ lps page push [PATH] [--json] [--env <value>] [-d] [-y]
1069
+ $ lps option push [PATH] [--json] [--env <value>] [-d] [-y]
615
1070
 
616
1071
  ARGUMENTS
617
- [PATH] Path to pages directory (overrides project config)
1072
+ [PATH] Path to options directory (overrides project config)
618
1073
 
619
1074
  FLAGS
620
1075
  -d, --dry-run Show what would change without making changes
@@ -625,13 +1080,47 @@ GLOBAL FLAGS
625
1080
  --json Format output as json.
626
1081
 
627
1082
  DESCRIPTION
628
- Push pages to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.
1083
+ Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options
1084
+ marked "readonly": true in their local file are skipped, edit the file to override.
629
1085
 
630
1086
  EXAMPLES
631
- $ lps page push
1087
+ $ lps option push
1088
+ ```
1089
+
1090
+ _See code: [src/commands/option/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/push.ts)_
1091
+
1092
+ ## `lps option remove NAME`
1093
+
1094
+ Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass --local-only to skip the WordPress delete and only stop tracking.
1095
+
632
1096
  ```
1097
+ USAGE
1098
+ $ lps option remove NAME [--json] [--env <value>] [-d] [-y] [--local-only] [--path <value>]
633
1099
 
634
- _See code: [src/commands/page/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/page/push.ts)_
1100
+ ARGUMENTS
1101
+ NAME Option name to stop tracking
1102
+
1103
+ FLAGS
1104
+ -d, --dry-run Show what would change without making changes
1105
+ -y, --yes Answer yes to confirmation prompts
1106
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1107
+ --local-only Untrack locally without deleting the option on WordPress
1108
+ --path=<value> Path to options directory (overrides project config)
1109
+
1110
+ GLOBAL FLAGS
1111
+ --json Format output as json.
1112
+
1113
+ DESCRIPTION
1114
+ Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass
1115
+ --local-only to skip the WordPress delete and only stop tracking.
1116
+
1117
+ EXAMPLES
1118
+ $ lps option remove wpseo_titles
1119
+
1120
+ $ lps option remove wpseo_titles --local-only
1121
+ ```
1122
+
1123
+ _See code: [src/commands/option/remove.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/option/remove.ts)_
635
1124
 
636
1125
  ## `lps plugin add SLUG`
637
1126
 
@@ -639,14 +1128,15 @@ Add a WordPress.org plugin to loopress.json
639
1128
 
640
1129
  ```
641
1130
  USAGE
642
- $ lps plugin add SLUG [--env <value>] [-d]
1131
+ $ lps plugin add SLUG [--env <value>] [-d] [--version <value>]
643
1132
 
644
1133
  ARGUMENTS
645
1134
  SLUG Plugin slug on WordPress.org
646
1135
 
647
1136
  FLAGS
648
- -d, --dry-run Show what would change without making changes
649
- --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1137
+ -d, --dry-run Show what would change without making changes
1138
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1139
+ --version=<value> Exact version to pin (default: "latest", tracked on every push)
650
1140
 
651
1141
  DESCRIPTION
652
1142
  Add a WordPress.org plugin to loopress.json
@@ -654,14 +1144,39 @@ DESCRIPTION
654
1144
  EXAMPLES
655
1145
  $ lps plugin add woocommerce
656
1146
 
1147
+ $ lps plugin add woocommerce --version 9.4.2
1148
+
657
1149
  $ lps plugin add contact-form-7 --dry-run
658
1150
  ```
659
1151
 
660
- _See code: [src/commands/plugin/add.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/plugin/add.ts)_
1152
+ _See code: [src/commands/plugin/add.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/plugin/add.ts)_
1153
+
1154
+ ## `lps plugin audit`
1155
+
1156
+ Check the plugins in loopress.json for known vulnerabilities and health issues
1157
+
1158
+ ```
1159
+ USAGE
1160
+ $ lps plugin audit [--json] [--env <value>]
1161
+
1162
+ FLAGS
1163
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1164
+
1165
+ GLOBAL FLAGS
1166
+ --json Format output as json.
1167
+
1168
+ DESCRIPTION
1169
+ Check the plugins in loopress.json for known vulnerabilities and health issues
1170
+
1171
+ EXAMPLES
1172
+ $ lps plugin audit
1173
+ ```
1174
+
1175
+ _See code: [src/commands/plugin/audit.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/plugin/audit.ts)_
661
1176
 
662
1177
  ## `lps plugin pull`
663
1178
 
664
- Pull installed plugins from WordPress into loopress.json
1179
+ Pull installed plugins from WordPress into loopress.json, pinned to their live versions
665
1180
 
666
1181
  ```
667
1182
  USAGE
@@ -675,7 +1190,7 @@ GLOBAL FLAGS
675
1190
  --json Format output as json.
676
1191
 
677
1192
  DESCRIPTION
678
- Pull installed plugins from WordPress into loopress.json
1193
+ Pull installed plugins from WordPress into loopress.json, pinned to their live versions
679
1194
 
680
1195
  EXAMPLES
681
1196
  $ lps plugin pull
@@ -683,34 +1198,61 @@ EXAMPLES
683
1198
  $ lps plugin pull --dry-run
684
1199
  ```
685
1200
 
686
- _See code: [src/commands/plugin/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/plugin/pull.ts)_
1201
+ _See code: [src/commands/plugin/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/plugin/pull.ts)_
687
1202
 
688
1203
  ## `lps plugin push`
689
1204
 
690
- Push plugins to WordPress to match loopress.json
1205
+ Install plugins on WordPress to match loopress.json, pinned via Composer + WPackagist
691
1206
 
692
1207
  ```
693
1208
  USAGE
694
- $ lps plugin push [--json] [--env <value>] [-d] [-y]
1209
+ $ lps plugin push [--json] [--env <value>] [-d] [-y] [--force] [--prune]
695
1210
 
696
1211
  FLAGS
697
1212
  -d, --dry-run Show what would change without making changes
698
1213
  -y, --yes Answer yes to confirmation prompts
699
1214
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1215
+ --force Allow downgrades and let Loopress take over plugins installed outside it (replaces their files)
1216
+ --prune Deactivate plugins that are active on the site but absent from loopress.json
700
1217
 
701
1218
  GLOBAL FLAGS
702
1219
  --json Format output as json.
703
1220
 
704
1221
  DESCRIPTION
705
- Push plugins to WordPress to match loopress.json
1222
+ Install plugins on WordPress to match loopress.json, pinned via Composer + WPackagist
706
1223
 
707
1224
  EXAMPLES
708
1225
  $ lps plugin push
709
1226
 
710
1227
  $ lps plugin push --dry-run
1228
+
1229
+ $ lps plugin push --force --prune
1230
+ ```
1231
+
1232
+ _See code: [src/commands/plugin/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/plugin/push.ts)_
1233
+
1234
+ ## `lps plugin status`
1235
+
1236
+ Compare the plugins on WordPress against loopress.json and report drift
1237
+
1238
+ ```
1239
+ USAGE
1240
+ $ lps plugin status [--json] [--env <value>]
1241
+
1242
+ FLAGS
1243
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1244
+
1245
+ GLOBAL FLAGS
1246
+ --json Format output as json.
1247
+
1248
+ DESCRIPTION
1249
+ Compare the plugins on WordPress against loopress.json and report drift
1250
+
1251
+ EXAMPLES
1252
+ $ lps plugin status
711
1253
  ```
712
1254
 
713
- _See code: [src/commands/plugin/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/plugin/push.ts)_
1255
+ _See code: [src/commands/plugin/status.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/plugin/status.ts)_
714
1256
 
715
1257
  ## `lps project config`
716
1258
 
@@ -728,7 +1270,7 @@ EXAMPLES
728
1270
  $ lps project config
729
1271
  ```
730
1272
 
731
- _See code: [src/commands/project/config.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/config.ts)_
1273
+ _See code: [src/commands/project/config.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/config.ts)_
732
1274
 
733
1275
  ## `lps project list`
734
1276
 
@@ -748,7 +1290,7 @@ EXAMPLES
748
1290
  $ lps project list
749
1291
  ```
750
1292
 
751
- _See code: [src/commands/project/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/list.ts)_
1293
+ _See code: [src/commands/project/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/list.ts)_
752
1294
 
753
1295
  ## `lps project pull`
754
1296
 
@@ -765,7 +1307,7 @@ EXAMPLES
765
1307
  $ lps project pull
766
1308
  ```
767
1309
 
768
- _See code: [src/commands/project/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/pull.ts)_
1310
+ _See code: [src/commands/project/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/pull.ts)_
769
1311
 
770
1312
  ## `lps project push`
771
1313
 
@@ -785,7 +1327,7 @@ EXAMPLES
785
1327
  $ lps project push
786
1328
  ```
787
1329
 
788
- _See code: [src/commands/project/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/push.ts)_
1330
+ _See code: [src/commands/project/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/push.ts)_
789
1331
 
790
1332
  ## `lps project remove`
791
1333
 
@@ -802,7 +1344,7 @@ EXAMPLES
802
1344
  $ lps project remove
803
1345
  ```
804
1346
 
805
- _See code: [src/commands/project/remove.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/remove.ts)_
1347
+ _See code: [src/commands/project/remove.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/remove.ts)_
806
1348
 
807
1349
  ## `lps project rotate`
808
1350
 
@@ -824,7 +1366,7 @@ EXAMPLES
824
1366
  $ lps project rotate --env staging
825
1367
  ```
826
1368
 
827
- _See code: [src/commands/project/rotate.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/rotate.ts)_
1369
+ _See code: [src/commands/project/rotate.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/rotate.ts)_
828
1370
 
829
1371
  ## `lps project switch`
830
1372
 
@@ -841,7 +1383,7 @@ EXAMPLES
841
1383
  $ lps project switch
842
1384
  ```
843
1385
 
844
- _See code: [src/commands/project/switch.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/project/switch.ts)_
1386
+ _See code: [src/commands/project/switch.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/project/switch.ts)_
845
1387
 
846
1388
  ## `lps promote FROM TO`
847
1389
 
@@ -869,11 +1411,11 @@ EXAMPLES
869
1411
  $ lps promote production staging --dry-run
870
1412
  ```
871
1413
 
872
- _See code: [src/commands/promote.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/promote.ts)_
1414
+ _See code: [src/commands/promote.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/promote.ts)_
873
1415
 
874
1416
  ## `lps pull`
875
1417
 
876
- Pull all content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, from WordPress
1418
+ Pull all content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, from WordPress
877
1419
 
878
1420
  ```
879
1421
  USAGE
@@ -885,7 +1427,8 @@ FLAGS
885
1427
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
886
1428
 
887
1429
  DESCRIPTION
888
- Pull all content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, from WordPress
1430
+ Pull all content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, from
1431
+ WordPress
889
1432
 
890
1433
  EXAMPLES
891
1434
  $ lps pull
@@ -895,11 +1438,11 @@ EXAMPLES
895
1438
  $ lps pull --dry-run
896
1439
  ```
897
1440
 
898
- _See code: [src/commands/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/pull.ts)_
1441
+ _See code: [src/commands/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/pull.ts)_
899
1442
 
900
1443
  ## `lps push`
901
1444
 
902
- Push all local content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, to WordPress
1445
+ Push all local content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, to WordPress
903
1446
 
904
1447
  ```
905
1448
  USAGE
@@ -911,7 +1454,8 @@ FLAGS
911
1454
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
912
1455
 
913
1456
  DESCRIPTION
914
- Push all local content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, to WordPress
1457
+ Push all local content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, to
1458
+ WordPress
915
1459
 
916
1460
  EXAMPLES
917
1461
  $ lps push
@@ -921,7 +1465,39 @@ EXAMPLES
921
1465
  $ lps push --dry-run
922
1466
  ```
923
1467
 
924
- _See code: [src/commands/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/push.ts)_
1468
+ _See code: [src/commands/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/push.ts)_
1469
+
1470
+ ## `lps seo diff [PATH]`
1471
+
1472
+ Show what differs in SEO settings, post meta, and redirects between your local files and a WordPress environment, or between two environments
1473
+
1474
+ ```
1475
+ USAGE
1476
+ $ lps seo diff [PATH] [--json] [--env <value>] [--against <value>]
1477
+
1478
+ ARGUMENTS
1479
+ [PATH] Path to SEO directory (overrides project config)
1480
+
1481
+ FLAGS
1482
+ --against=<value> Compare the primary environment against this second environment instead of against local files
1483
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1484
+
1485
+ GLOBAL FLAGS
1486
+ --json Format output as json.
1487
+
1488
+ DESCRIPTION
1489
+ Show what differs in SEO settings, post meta, and redirects between your local files and a WordPress environment, or
1490
+ between two environments
1491
+
1492
+ EXAMPLES
1493
+ $ lps seo diff
1494
+
1495
+ $ lps seo diff --env staging
1496
+
1497
+ $ lps seo diff --env staging --against production
1498
+ ```
1499
+
1500
+ _See code: [src/commands/seo/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/seo/diff.ts)_
925
1501
 
926
1502
  ## `lps seo list`
927
1503
 
@@ -947,7 +1523,7 @@ EXAMPLES
947
1523
  $ lps seo list --post-type post
948
1524
  ```
949
1525
 
950
- _See code: [src/commands/seo/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/seo/list.ts)_
1526
+ _See code: [src/commands/seo/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/seo/list.ts)_
951
1527
 
952
1528
  ## `lps seo pull [PATH]`
953
1529
 
@@ -975,7 +1551,7 @@ EXAMPLES
975
1551
  $ lps seo pull --post-type post --post-type page
976
1552
  ```
977
1553
 
978
- _See code: [src/commands/seo/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/seo/pull.ts)_
1554
+ _See code: [src/commands/seo/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/seo/pull.ts)_
979
1555
 
980
1556
  ## `lps seo push [PATH]`
981
1557
 
@@ -1001,7 +1577,38 @@ EXAMPLES
1001
1577
  $ lps seo push
1002
1578
  ```
1003
1579
 
1004
- _See code: [src/commands/seo/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/seo/push.ts)_
1580
+ _See code: [src/commands/seo/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/seo/push.ts)_
1581
+
1582
+ ## `lps snippet diff [PATH]`
1583
+
1584
+ Show what differs in snippets between your local files and a WordPress environment, or between two environments
1585
+
1586
+ ```
1587
+ USAGE
1588
+ $ lps snippet diff [PATH] [--json] [--env <value>] [--against <value>]
1589
+
1590
+ ARGUMENTS
1591
+ [PATH] Path to snippets directory (overrides project config)
1592
+
1593
+ FLAGS
1594
+ --against=<value> Compare the primary environment against this second environment instead of against local files
1595
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1596
+
1597
+ GLOBAL FLAGS
1598
+ --json Format output as json.
1599
+
1600
+ DESCRIPTION
1601
+ Show what differs in snippets between your local files and a WordPress environment, or between two environments
1602
+
1603
+ EXAMPLES
1604
+ $ lps snippet diff
1605
+
1606
+ $ lps snippet diff --env staging
1607
+
1608
+ $ lps snippet diff --env staging --against production
1609
+ ```
1610
+
1611
+ _See code: [src/commands/snippet/diff.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/snippet/diff.ts)_
1005
1612
 
1006
1613
  ## `lps snippet list`
1007
1614
 
@@ -1024,7 +1631,7 @@ EXAMPLES
1024
1631
  $ lps snippet list
1025
1632
  ```
1026
1633
 
1027
- _See code: [src/commands/snippet/list.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/snippet/list.ts)_
1634
+ _See code: [src/commands/snippet/list.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/snippet/list.ts)_
1028
1635
 
1029
1636
  ## `lps snippet publish [PATH]`
1030
1637
 
@@ -1047,7 +1654,7 @@ EXAMPLES
1047
1654
  $ lps snippet publish --path ./snippets
1048
1655
  ```
1049
1656
 
1050
- _See code: [src/commands/snippet/publish.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/snippet/publish.ts)_
1657
+ _See code: [src/commands/snippet/publish.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/snippet/publish.ts)_
1051
1658
 
1052
1659
  ## `lps snippet pull [PATH]`
1053
1660
 
@@ -1077,7 +1684,7 @@ EXAMPLES
1077
1684
  $ lps snippet pull --path ./snippets
1078
1685
  ```
1079
1686
 
1080
- _See code: [src/commands/snippet/pull.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/snippet/pull.ts)_
1687
+ _See code: [src/commands/snippet/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/snippet/pull.ts)_
1081
1688
 
1082
1689
  ## `lps snippet push [PATH]`
1083
1690
 
@@ -1108,7 +1715,7 @@ EXAMPLES
1108
1715
  $ lps snippet push --path ./snippets
1109
1716
  ```
1110
1717
 
1111
- _See code: [src/commands/snippet/push.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/snippet/push.ts)_
1718
+ _See code: [src/commands/snippet/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/snippet/push.ts)_
1112
1719
 
1113
1720
  ## `lps status`
1114
1721
 
@@ -1133,7 +1740,7 @@ EXAMPLES
1133
1740
  $ lps status --env staging
1134
1741
  ```
1135
1742
 
1136
- _See code: [src/commands/status.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/status.ts)_
1743
+ _See code: [src/commands/status.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/status.ts)_
1137
1744
 
1138
1745
  ## `lps telemetry disable`
1139
1746
 
@@ -1150,7 +1757,7 @@ EXAMPLES
1150
1757
  $ lps telemetry disable
1151
1758
  ```
1152
1759
 
1153
- _See code: [src/commands/telemetry/disable.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/telemetry/disable.ts)_
1760
+ _See code: [src/commands/telemetry/disable.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/telemetry/disable.ts)_
1154
1761
 
1155
1762
  ## `lps telemetry enable`
1156
1763
 
@@ -1167,7 +1774,109 @@ EXAMPLES
1167
1774
  $ lps telemetry enable
1168
1775
  ```
1169
1776
 
1170
- _See code: [src/commands/telemetry/enable.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/telemetry/enable.ts)_
1777
+ _See code: [src/commands/telemetry/enable.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/telemetry/enable.ts)_
1778
+
1779
+ ## `lps theme add SLUG`
1780
+
1781
+ Add a WordPress.org theme to loopress.json
1782
+
1783
+ ```
1784
+ USAGE
1785
+ $ lps theme add SLUG [--env <value>] [-d] [--version <value>]
1786
+
1787
+ ARGUMENTS
1788
+ SLUG Theme slug on WordPress.org
1789
+
1790
+ FLAGS
1791
+ -d, --dry-run Show what would change without making changes
1792
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1793
+ --version=<value> Exact version to pin (default: "latest")
1794
+
1795
+ DESCRIPTION
1796
+ Add a WordPress.org theme to loopress.json
1797
+
1798
+ EXAMPLES
1799
+ $ lps theme add generatepress
1800
+
1801
+ $ lps theme add generatepress --version 3.4.0
1802
+ ```
1803
+
1804
+ _See code: [src/commands/theme/add.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/theme/add.ts)_
1805
+
1806
+ ## `lps theme pull`
1807
+
1808
+ Pull installed themes from WordPress into loopress.json, pinned to their live versions
1809
+
1810
+ ```
1811
+ USAGE
1812
+ $ lps theme pull [--json] [--env <value>] [-d]
1813
+
1814
+ FLAGS
1815
+ -d, --dry-run Show what would change without making changes
1816
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1817
+
1818
+ GLOBAL FLAGS
1819
+ --json Format output as json.
1820
+
1821
+ DESCRIPTION
1822
+ Pull installed themes from WordPress into loopress.json, pinned to their live versions
1823
+
1824
+ EXAMPLES
1825
+ $ lps theme pull
1826
+ ```
1827
+
1828
+ _See code: [src/commands/theme/pull.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/theme/pull.ts)_
1829
+
1830
+ ## `lps theme push`
1831
+
1832
+ Install themes on WordPress to match loopress.json (versions only, never switches the active theme)
1833
+
1834
+ ```
1835
+ USAGE
1836
+ $ lps theme push [--json] [--env <value>] [-d] [-y] [--force]
1837
+
1838
+ FLAGS
1839
+ -d, --dry-run Show what would change without making changes
1840
+ -y, --yes Answer yes to confirmation prompts
1841
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1842
+ --force Allow downgrades and take over themes installed outside Loopress
1843
+
1844
+ GLOBAL FLAGS
1845
+ --json Format output as json.
1846
+
1847
+ DESCRIPTION
1848
+ Install themes on WordPress to match loopress.json (versions only, never switches the active theme)
1849
+
1850
+ EXAMPLES
1851
+ $ lps theme push
1852
+
1853
+ $ lps theme push --force
1854
+ ```
1855
+
1856
+ _See code: [src/commands/theme/push.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/theme/push.ts)_
1857
+
1858
+ ## `lps theme status`
1859
+
1860
+ Compare the themes on WordPress against loopress.json and report version drift
1861
+
1862
+ ```
1863
+ USAGE
1864
+ $ lps theme status [--json] [--env <value>]
1865
+
1866
+ FLAGS
1867
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1868
+
1869
+ GLOBAL FLAGS
1870
+ --json Format output as json.
1871
+
1872
+ DESCRIPTION
1873
+ Compare the themes on WordPress against loopress.json and report version drift
1874
+
1875
+ EXAMPLES
1876
+ $ lps theme status
1877
+ ```
1878
+
1879
+ _See code: [src/commands/theme/status.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/theme/status.ts)_
1171
1880
 
1172
1881
  ## `lps validate`
1173
1882
 
@@ -1187,5 +1896,5 @@ EXAMPLES
1187
1896
  $ lps validate
1188
1897
  ```
1189
1898
 
1190
- _See code: [src/commands/validate.ts](https://github.com/loopress/loopress/blob/v0.22.0/src/commands/validate.ts)_
1899
+ _See code: [src/commands/validate.ts](https://github.com/loopress/loopress/blob/v0.24.0/src/commands/validate.ts)_
1191
1900
  <!-- commandsstop -->