@loopress/cli 0.23.0 → 0.24.1

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 (101) hide show
  1. package/README.md +603 -94
  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/api/rm.d.ts +2 -0
  13. package/dist/commands/api/rm.js +2 -0
  14. package/dist/commands/composer/pull.js +6 -16
  15. package/dist/commands/composer/push.d.ts +3 -0
  16. package/dist/commands/composer/push.js +24 -7
  17. package/dist/commands/dev.js +1 -1
  18. package/dist/commands/diff.d.ts +13 -0
  19. package/dist/commands/diff.js +42 -0
  20. package/dist/commands/form/diff.d.ts +2 -0
  21. package/dist/commands/form/diff.js +5 -0
  22. package/dist/commands/form/push.d.ts +2 -0
  23. package/dist/commands/form/push.js +11 -4
  24. package/dist/commands/hook/diff.d.ts +2 -0
  25. package/dist/commands/hook/diff.js +5 -0
  26. package/dist/commands/hook/list.d.ts +2 -0
  27. package/dist/commands/hook/list.js +2 -0
  28. package/dist/commands/hook/pull.d.ts +2 -0
  29. package/dist/commands/hook/pull.js +2 -0
  30. package/dist/commands/hook/push.d.ts +2 -0
  31. package/dist/commands/hook/push.js +2 -0
  32. package/dist/commands/hook/rm.d.ts +2 -0
  33. package/dist/commands/hook/rm.js +2 -0
  34. package/dist/commands/init.js +1 -1
  35. package/dist/commands/login.js +3 -2
  36. package/dist/commands/option/add.d.ts +15 -0
  37. package/dist/commands/option/add.js +47 -0
  38. package/dist/commands/option/diff.d.ts +2 -0
  39. package/dist/commands/option/diff.js +5 -0
  40. package/dist/commands/{page → option}/list.d.ts +5 -1
  41. package/dist/commands/option/list.js +151 -0
  42. package/dist/commands/{page → option}/pull.d.ts +3 -12
  43. package/dist/commands/option/pull.js +75 -0
  44. package/dist/commands/{page → option}/push.d.ts +3 -8
  45. package/dist/commands/option/push.js +66 -0
  46. package/dist/commands/option/remove.d.ts +22 -0
  47. package/dist/commands/option/remove.js +69 -0
  48. package/dist/commands/plugin/push.d.ts +0 -1
  49. package/dist/commands/plugin/push.js +3 -10
  50. package/dist/commands/pull.js +3 -2
  51. package/dist/commands/push.js +4 -3
  52. package/dist/commands/seo/diff.d.ts +2 -0
  53. package/dist/commands/seo/diff.js +5 -0
  54. package/dist/commands/seo/push.d.ts +2 -0
  55. package/dist/commands/seo/push.js +16 -4
  56. package/dist/commands/snippet/diff.d.ts +2 -0
  57. package/dist/commands/snippet/diff.js +5 -0
  58. package/dist/commands/theme/push.d.ts +0 -1
  59. package/dist/commands/theme/push.js +3 -10
  60. package/dist/hooks/finally.js +4 -1
  61. package/dist/lib/base.d.ts +2 -1
  62. package/dist/lib/base.js +12 -22
  63. package/dist/lib/dev-watch.d.ts +1 -1
  64. package/dist/lib/dev-watch.js +1 -2
  65. package/dist/lib/diff-command.d.ts +47 -0
  66. package/dist/lib/diff-command.js +180 -0
  67. package/dist/lib/diff-state.d.ts +22 -0
  68. package/dist/lib/diff-state.js +88 -0
  69. package/dist/lib/find-orphaned-files.js +1 -1
  70. package/dist/lib/interactive.d.ts +1 -0
  71. package/dist/lib/interactive.js +10 -0
  72. package/dist/lib/local-callback-server.d.ts +14 -1
  73. package/dist/lib/local-callback-server.js +40 -1
  74. package/dist/lib/php-files-command.d.ts +67 -0
  75. package/dist/lib/php-files-command.js +338 -0
  76. package/dist/lib/put-or-create.js +1 -1
  77. package/dist/lib/readdir-tolerant.d.ts +1 -0
  78. package/dist/lib/readdir-tolerant.js +3 -1
  79. package/dist/lib/resource-state.d.ts +14 -0
  80. package/dist/lib/resource-state.js +361 -0
  81. package/dist/lib/sentry.d.ts +3 -0
  82. package/dist/lib/sentry.js +30 -0
  83. package/dist/lib/validate-local.js +15 -7
  84. package/dist/lib/wp-authorize-flow.d.ts +4 -0
  85. package/dist/lib/wp-authorize-flow.js +10 -8
  86. package/dist/lib/wp-client.d.ts +5 -0
  87. package/dist/lib/wp-client.js +56 -0
  88. package/dist/types/project-config.generated.d.ts +8 -4
  89. package/dist/utils/option-format.d.ts +31 -0
  90. package/dist/utils/option-format.js +69 -0
  91. package/dist/utils/plugin-sync.d.ts +6 -0
  92. package/dist/utils/resource-dirs.d.ts +13 -0
  93. package/dist/utils/resource-dirs.js +34 -0
  94. package/oclif.manifest.json +1488 -301
  95. package/package.json +11 -8
  96. package/schemas/project-config.schema.json +10 -5
  97. package/dist/commands/page/list.js +0 -19
  98. package/dist/commands/page/pull.js +0 -57
  99. package/dist/commands/page/push.js +0 -132
  100. package/dist/utils/page-format.d.ts +0 -7
  101. 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.23.0 linux-x64 node-v24.20.0
24
+ @loopress/cli/0.24.1 linux-x64 node-v24.20.0
25
25
  $ lps --help [COMMAND]
26
26
  USAGE
27
27
  $ lps COMMAND
@@ -47,13 +47,16 @@ 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 api rm FILENAME`](#lps-api-rm-filename)
57
60
  * [`lps app list`](#lps-app-list)
58
61
  * [`lps app pull [PATH]`](#lps-app-pull-path)
59
62
  * [`lps app push [NAME]`](#lps-app-push-name)
@@ -62,17 +65,27 @@ report.
62
65
  * [`lps composer pull`](#lps-composer-pull)
63
66
  * [`lps composer push`](#lps-composer-push)
64
67
  * [`lps dev`](#lps-dev)
68
+ * [`lps diff`](#lps-diff)
65
69
  * [`lps doctor`](#lps-doctor)
70
+ * [`lps form diff [PATH]`](#lps-form-diff-path)
66
71
  * [`lps form list`](#lps-form-list)
67
72
  * [`lps form pull [PATH]`](#lps-form-pull-path)
68
73
  * [`lps form push [PATH]`](#lps-form-push-path)
69
74
  * [`lps help [COMMAND]`](#lps-help-command)
75
+ * [`lps hook diff [PATH]`](#lps-hook-diff-path)
76
+ * [`lps hook list`](#lps-hook-list)
77
+ * [`lps hook pull [PATH]`](#lps-hook-pull-path)
78
+ * [`lps hook push [PATH]`](#lps-hook-push-path)
79
+ * [`lps hook rm FILENAME`](#lps-hook-rm-filename)
70
80
  * [`lps init`](#lps-init)
71
81
  * [`lps login`](#lps-login)
72
82
  * [`lps logout`](#lps-logout)
73
- * [`lps page list`](#lps-page-list)
74
- * [`lps page pull [PATH]`](#lps-page-pull-path)
75
- * [`lps page push [PATH]`](#lps-page-push-path)
83
+ * [`lps option add NAME`](#lps-option-add-name)
84
+ * [`lps option diff [PATH]`](#lps-option-diff-path)
85
+ * [`lps option list`](#lps-option-list)
86
+ * [`lps option pull [PATH]`](#lps-option-pull-path)
87
+ * [`lps option push [PATH]`](#lps-option-push-path)
88
+ * [`lps option remove NAME`](#lps-option-remove-name)
76
89
  * [`lps plugin add SLUG`](#lps-plugin-add-slug)
77
90
  * [`lps plugin audit`](#lps-plugin-audit)
78
91
  * [`lps plugin pull`](#lps-plugin-pull)
@@ -88,9 +101,11 @@ report.
88
101
  * [`lps promote FROM TO`](#lps-promote-from-to)
89
102
  * [`lps pull`](#lps-pull)
90
103
  * [`lps push`](#lps-push)
104
+ * [`lps seo diff [PATH]`](#lps-seo-diff-path)
91
105
  * [`lps seo list`](#lps-seo-list)
92
106
  * [`lps seo pull [PATH]`](#lps-seo-pull-path)
93
107
  * [`lps seo push [PATH]`](#lps-seo-push-path)
108
+ * [`lps snippet diff [PATH]`](#lps-snippet-diff-path)
94
109
  * [`lps snippet list`](#lps-snippet-list)
95
110
  * [`lps snippet publish [PATH]`](#lps-snippet-publish-path)
96
111
  * [`lps snippet pull [PATH]`](#lps-snippet-pull-path)
@@ -104,6 +119,38 @@ report.
104
119
  * [`lps theme status`](#lps-theme-status)
105
120
  * [`lps validate`](#lps-validate)
106
121
 
122
+ ## `lps acf diff [PATH]`
123
+
124
+ 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
125
+
126
+ ```
127
+ USAGE
128
+ $ lps acf diff [PATH] [--json] [--env <value>] [--against <value>]
129
+
130
+ ARGUMENTS
131
+ [PATH] Path to ACF directory (overrides project config)
132
+
133
+ FLAGS
134
+ --against=<value> Compare the primary environment against this second environment instead of against local files
135
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
136
+
137
+ GLOBAL FLAGS
138
+ --json Format output as json.
139
+
140
+ DESCRIPTION
141
+ Show what differs in ACF field groups, post types, taxonomies, and options pages between your local files and a
142
+ WordPress environment, or between two environments
143
+
144
+ EXAMPLES
145
+ $ lps acf diff
146
+
147
+ $ lps acf diff --env staging
148
+
149
+ $ lps acf diff --env staging --against production
150
+ ```
151
+
152
+ _See code: [src/commands/acf/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/acf/diff.ts)_
153
+
107
154
  ## `lps acf list`
108
155
 
109
156
  List ACF field groups, post types, taxonomies, and options pages from WordPress
@@ -129,7 +176,7 @@ EXAMPLES
129
176
  $ lps acf list --type field-groups
130
177
  ```
131
178
 
132
- _See code: [src/commands/acf/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/acf/list.ts)_
179
+ _See code: [src/commands/acf/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/acf/list.ts)_
133
180
 
134
181
  ## `lps acf pull [PATH]`
135
182
 
@@ -158,7 +205,7 @@ EXAMPLES
158
205
  $ lps acf pull --type field-groups
159
206
  ```
160
207
 
161
- _See code: [src/commands/acf/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/acf/pull.ts)_
208
+ _See code: [src/commands/acf/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/acf/pull.ts)_
162
209
 
163
210
  ## `lps acf push [PATH]`
164
211
 
@@ -187,7 +234,39 @@ EXAMPLES
187
234
  $ lps acf push --type field-groups
188
235
  ```
189
236
 
190
- _See code: [src/commands/acf/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/acf/push.ts)_
237
+ _See code: [src/commands/acf/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/acf/push.ts)_
238
+
239
+ ## `lps api diff [PATH]`
240
+
241
+ Show what differs in custom API route files between your local files and a WordPress environment, or between two environments
242
+
243
+ ```
244
+ USAGE
245
+ $ lps api diff [PATH] [--json] [--env <value>] [--against <value>]
246
+
247
+ ARGUMENTS
248
+ [PATH] Path to api directory (overrides project config)
249
+
250
+ FLAGS
251
+ --against=<value> Compare the primary environment against this second environment instead of against local files
252
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
253
+
254
+ GLOBAL FLAGS
255
+ --json Format output as json.
256
+
257
+ DESCRIPTION
258
+ Show what differs in custom API route files between your local files and a WordPress environment, or between two
259
+ environments
260
+
261
+ EXAMPLES
262
+ $ lps api diff
263
+
264
+ $ lps api diff --env staging
265
+
266
+ $ lps api diff --env staging --against production
267
+ ```
268
+
269
+ _See code: [src/commands/api/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/diff.ts)_
191
270
 
192
271
  ## `lps api list`
193
272
 
@@ -210,7 +289,7 @@ EXAMPLES
210
289
  $ lps api list
211
290
  ```
212
291
 
213
- _See code: [src/commands/api/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/api/list.ts)_
292
+ _See code: [src/commands/api/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/list.ts)_
214
293
 
215
294
  ## `lps api publish [PATH]`
216
295
 
@@ -233,7 +312,7 @@ EXAMPLES
233
312
  $ lps api publish --path ./api
234
313
  ```
235
314
 
236
- _See code: [src/commands/api/publish.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/api/publish.ts)_
315
+ _See code: [src/commands/api/publish.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/publish.ts)_
237
316
 
238
317
  ## `lps api pull [PATH]`
239
318
 
@@ -263,7 +342,7 @@ EXAMPLES
263
342
  $ lps api pull --path ./api
264
343
  ```
265
344
 
266
- _See code: [src/commands/api/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/api/pull.ts)_
345
+ _See code: [src/commands/api/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/pull.ts)_
267
346
 
268
347
  ## `lps api push [PATH]`
269
348
 
@@ -271,7 +350,7 @@ Push custom API route files to WordPress
271
350
 
272
351
  ```
273
352
  USAGE
274
- $ lps api push [PATH] [--json] [--env <value>] [-d] [-y]
353
+ $ lps api push [PATH] [--json] [--env <value>] [-d] [-y] [--prune]
275
354
 
276
355
  ARGUMENTS
277
356
  [PATH] Path to api directory (overrides project config)
@@ -280,6 +359,7 @@ FLAGS
280
359
  -d, --dry-run Show what would change without making changes
281
360
  -y, --yes Answer yes to confirmation prompts
282
361
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
362
+ --prune Delete server-side route files not present locally after pushing
283
363
 
284
364
  GLOBAL FLAGS
285
365
  --json Format output as json.
@@ -291,9 +371,41 @@ EXAMPLES
291
371
  $ lps api push
292
372
 
293
373
  $ lps api push --path ./api
374
+
375
+ $ lps api push --prune
376
+ ```
377
+
378
+ _See code: [src/commands/api/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/push.ts)_
379
+
380
+ ## `lps api rm FILENAME`
381
+
382
+ Remove a custom API route file from WordPress
383
+
384
+ ```
385
+ USAGE
386
+ $ lps api rm FILENAME [--json] [--env <value>] [-d] [-y]
387
+
388
+ ARGUMENTS
389
+ FILENAME The route file to remove, its slug without the .php extension (e.g. "hello" or "invoice-pdf/[order_id]")
390
+
391
+ FLAGS
392
+ -d, --dry-run Show what would change without making changes
393
+ -y, --yes Answer yes to confirmation prompts
394
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
395
+
396
+ GLOBAL FLAGS
397
+ --json Format output as json.
398
+
399
+ DESCRIPTION
400
+ Remove a custom API route file from WordPress
401
+
402
+ EXAMPLES
403
+ $ lps api rm hello
404
+
405
+ $ lps api rm hello --yes
294
406
  ```
295
407
 
296
- _See code: [src/commands/api/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/api/push.ts)_
408
+ _See code: [src/commands/api/rm.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/api/rm.ts)_
297
409
 
298
410
  ## `lps app list`
299
411
 
@@ -316,7 +428,7 @@ EXAMPLES
316
428
  $ lps app list
317
429
  ```
318
430
 
319
- _See code: [src/commands/app/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/app/list.ts)_
431
+ _See code: [src/commands/app/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/app/list.ts)_
320
432
 
321
433
  ## `lps app pull [PATH]`
322
434
 
@@ -344,7 +456,7 @@ EXAMPLES
344
456
  $ lps app pull
345
457
  ```
346
458
 
347
- _See code: [src/commands/app/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/app/pull.ts)_
459
+ _See code: [src/commands/app/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/app/pull.ts)_
348
460
 
349
461
  ## `lps app push [NAME]`
350
462
 
@@ -375,7 +487,7 @@ EXAMPLES
375
487
  $ lps app push search
376
488
  ```
377
489
 
378
- _See code: [src/commands/app/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/app/push.ts)_
490
+ _See code: [src/commands/app/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/app/push.ts)_
379
491
 
380
492
  ## `lps app remove NAME`
381
493
 
@@ -404,7 +516,7 @@ EXAMPLES
404
516
  $ lps app remove search
405
517
  ```
406
518
 
407
- _See code: [src/commands/app/remove.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/app/remove.ts)_
519
+ _See code: [src/commands/app/remove.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/app/remove.ts)_
408
520
 
409
521
  ## `lps composer init`
410
522
 
@@ -427,7 +539,7 @@ EXAMPLES
427
539
  $ lps composer init --dry-run
428
540
  ```
429
541
 
430
- _See code: [src/commands/composer/init.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/composer/init.ts)_
542
+ _See code: [src/commands/composer/init.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/composer/init.ts)_
431
543
 
432
544
  ## `lps composer pull`
433
545
 
@@ -453,11 +565,11 @@ EXAMPLES
453
565
  $ lps composer pull --dry-run
454
566
  ```
455
567
 
456
- _See code: [src/commands/composer/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/composer/pull.ts)_
568
+ _See code: [src/commands/composer/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/composer/pull.ts)_
457
569
 
458
570
  ## `lps composer push`
459
571
 
460
- Push composer.json (and composer.lock, if present) to WordPress and run Composer
572
+ Push composer.json to WordPress and run Composer to resolve and install dependencies
461
573
 
462
574
  ```
463
575
  USAGE
@@ -473,7 +585,7 @@ GLOBAL FLAGS
473
585
  --json Format output as json.
474
586
 
475
587
  DESCRIPTION
476
- Push composer.json (and composer.lock, if present) to WordPress and run Composer
588
+ Push composer.json to WordPress and run Composer to resolve and install dependencies
477
589
 
478
590
  EXAMPLES
479
591
  $ lps composer push
@@ -481,7 +593,7 @@ EXAMPLES
481
593
  $ lps composer push --dry-run
482
594
  ```
483
595
 
484
- _See code: [src/commands/composer/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/composer/push.ts)_
596
+ _See code: [src/commands/composer/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/composer/push.ts)_
485
597
 
486
598
  ## `lps dev`
487
599
 
@@ -492,8 +604,8 @@ USAGE
492
604
  $ lps dev [--only <value>] [--skip <value>]
493
605
 
494
606
  FLAGS
495
- --only=<value> Only watch these resource types (comma-separated): snippets, pages, api, plugins
496
- --skip=<value> Skip these resource types (comma-separated): snippets, pages, api, plugins
607
+ --only=<value> Only watch these resource types (comma-separated): snippets, api, plugins
608
+ --skip=<value> Skip these resource types (comma-separated): snippets, api, plugins
497
609
 
498
610
  DESCRIPTION
499
611
  Watch project files and push changes to the local WordPress instance as they happen. Always targets the "local"
@@ -502,12 +614,52 @@ DESCRIPTION
502
614
  EXAMPLES
503
615
  $ lps dev
504
616
 
505
- $ lps dev --only=snippets,pages
617
+ $ lps dev --only=snippets,api
506
618
 
507
619
  $ lps dev --skip=plugins
508
620
  ```
509
621
 
510
- _See code: [src/commands/dev.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/dev.ts)_
622
+ _See code: [src/commands/dev.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/dev.ts)_
623
+
624
+ ## `lps diff`
625
+
626
+ 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.
627
+
628
+ ```
629
+ USAGE
630
+ $ lps diff [--json] [--env <value>] [--against <value>] [--only
631
+ snippet|form|acf|api|hook|seo|option|composer...] [--skip snippet|form|acf|api|hook|seo|option|composer...]
632
+
633
+ FLAGS
634
+ --against=<value> Compare the primary environment against this second environment instead of against local files
635
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
636
+ --only=<option>... Only compare these resources
637
+ <options: snippet|form|acf|api|hook|seo|option|composer>
638
+ --skip=<option>... Compare every resource except these
639
+ <options: snippet|form|acf|api|hook|seo|option|composer>
640
+
641
+ GLOBAL FLAGS
642
+ --json Format output as json.
643
+
644
+ DESCRIPTION
645
+ Show what differs between your local tracked files and a WordPress environment, or between two environments. Covers
646
+ snippets, forms, ACF, API routes, Hooks, SEO, and Composer. Plugins and themes have their own `lps plugin status` /
647
+ `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
648
+ drift gate.
649
+
650
+ EXAMPLES
651
+ $ lps diff
652
+
653
+ $ lps diff --env staging
654
+
655
+ $ lps diff --env staging --against production
656
+
657
+ $ lps diff --only snippet --only acf
658
+
659
+ $ lps diff --skip composer
660
+ ```
661
+
662
+ _See code: [src/commands/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/diff.ts)_
511
663
 
512
664
  ## `lps doctor`
513
665
 
@@ -529,7 +681,38 @@ EXAMPLES
529
681
  $ lps doctor --env production
530
682
  ```
531
683
 
532
- _See code: [src/commands/doctor.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/doctor.ts)_
684
+ _See code: [src/commands/doctor.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/doctor.ts)_
685
+
686
+ ## `lps form diff [PATH]`
687
+
688
+ Show what differs in forms between your local files and a WordPress environment, or between two environments
689
+
690
+ ```
691
+ USAGE
692
+ $ lps form diff [PATH] [--json] [--env <value>] [--against <value>]
693
+
694
+ ARGUMENTS
695
+ [PATH] Path to forms directory (overrides project config)
696
+
697
+ FLAGS
698
+ --against=<value> Compare the primary environment against this second environment instead of against local files
699
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
700
+
701
+ GLOBAL FLAGS
702
+ --json Format output as json.
703
+
704
+ DESCRIPTION
705
+ Show what differs in forms between your local files and a WordPress environment, or between two environments
706
+
707
+ EXAMPLES
708
+ $ lps form diff
709
+
710
+ $ lps form diff --env staging
711
+
712
+ $ lps form diff --env staging --against production
713
+ ```
714
+
715
+ _See code: [src/commands/form/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/form/diff.ts)_
533
716
 
534
717
  ## `lps form list`
535
718
 
@@ -552,7 +735,7 @@ EXAMPLES
552
735
  $ lps form list
553
736
  ```
554
737
 
555
- _See code: [src/commands/form/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/form/list.ts)_
738
+ _See code: [src/commands/form/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/form/list.ts)_
556
739
 
557
740
  ## `lps form pull [PATH]`
558
741
 
@@ -577,7 +760,7 @@ EXAMPLES
577
760
  $ lps form pull
578
761
  ```
579
762
 
580
- _See code: [src/commands/form/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/form/pull.ts)_
763
+ _See code: [src/commands/form/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/form/pull.ts)_
581
764
 
582
765
  ## `lps form push [PATH]`
583
766
 
@@ -585,15 +768,18 @@ Push forms to WordPress. Local files created or updated remotely are renamed on
585
768
 
586
769
  ```
587
770
  USAGE
588
- $ lps form push [PATH] [--env <value>] [-d] [-y]
771
+ $ lps form push [PATH] [--env <value>] [-d] [-y] [--allow-notifications]
589
772
 
590
773
  ARGUMENTS
591
774
  [PATH] Path to forms directory (overrides project config)
592
775
 
593
776
  FLAGS
594
- -d, --dry-run Show what would change without making changes
595
- -y, --yes Answer yes to confirmation prompts
596
- --env=<value> Target environment by name, overriding the globally active one (lps project switch)
777
+ -d, --dry-run Show what would change without making changes
778
+ -y, --yes Answer yes to confirmation prompts
779
+ --allow-notifications Also push each form's notification and confirmation settings (recipients, sender,
780
+ messages). Off by default: the server keeps its own so a stray push can't redirect
781
+ submissions.
782
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
597
783
 
598
784
  DESCRIPTION
599
785
  Push forms to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>.json`
@@ -601,9 +787,11 @@ DESCRIPTION
601
787
 
602
788
  EXAMPLES
603
789
  $ lps form push
790
+
791
+ $ lps form push --allow-notifications
604
792
  ```
605
793
 
606
- _See code: [src/commands/form/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/form/push.ts)_
794
+ _See code: [src/commands/form/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/form/push.ts)_
607
795
 
608
796
  ## `lps help [COMMAND]`
609
797
 
@@ -625,6 +813,153 @@ DESCRIPTION
625
813
 
626
814
  _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/7.0.0/src/commands/help.ts)_
627
815
 
816
+ ## `lps hook diff [PATH]`
817
+
818
+ Show what differs in hook files between your local files and a WordPress environment, or between two environments
819
+
820
+ ```
821
+ USAGE
822
+ $ lps hook diff [PATH] [--json] [--env <value>] [--against <value>]
823
+
824
+ ARGUMENTS
825
+ [PATH] Path to hooks directory (overrides project config)
826
+
827
+ FLAGS
828
+ --against=<value> Compare the primary environment against this second environment instead of against local files
829
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
830
+
831
+ GLOBAL FLAGS
832
+ --json Format output as json.
833
+
834
+ DESCRIPTION
835
+ Show what differs in hook files between your local files and a WordPress environment, or between two environments
836
+
837
+ EXAMPLES
838
+ $ lps hook diff
839
+
840
+ $ lps hook diff --env staging
841
+
842
+ $ lps hook diff --env staging --against production
843
+ ```
844
+
845
+ _See code: [src/commands/hook/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/hook/diff.ts)_
846
+
847
+ ## `lps hook list`
848
+
849
+ List hook files (actions, filters, cron) from WordPress
850
+
851
+ ```
852
+ USAGE
853
+ $ lps hook list [--json] [--env <value>]
854
+
855
+ FLAGS
856
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
857
+
858
+ GLOBAL FLAGS
859
+ --json Format output as json.
860
+
861
+ DESCRIPTION
862
+ List hook files (actions, filters, cron) from WordPress
863
+
864
+ EXAMPLES
865
+ $ lps hook list
866
+ ```
867
+
868
+ _See code: [src/commands/hook/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/hook/list.ts)_
869
+
870
+ ## `lps hook pull [PATH]`
871
+
872
+ Pull hook files (actions, filters, cron) from WordPress
873
+
874
+ ```
875
+ USAGE
876
+ $ lps hook pull [PATH] [--json] [--env <value>] [-d] [-y]
877
+
878
+ ARGUMENTS
879
+ [PATH] Path to hooks directory (overrides project config)
880
+
881
+ FLAGS
882
+ -d, --dry-run Show what would change without making changes
883
+ -y, --yes Answer yes to confirmation prompts
884
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
885
+
886
+ GLOBAL FLAGS
887
+ --json Format output as json.
888
+
889
+ DESCRIPTION
890
+ Pull hook files (actions, filters, cron) from WordPress
891
+
892
+ EXAMPLES
893
+ $ lps hook pull
894
+
895
+ $ lps hook pull --path ./hooks
896
+ ```
897
+
898
+ _See code: [src/commands/hook/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/hook/pull.ts)_
899
+
900
+ ## `lps hook push [PATH]`
901
+
902
+ Push hook files (actions, filters, cron) to WordPress
903
+
904
+ ```
905
+ USAGE
906
+ $ lps hook push [PATH] [--json] [--env <value>] [-d] [-y] [--prune]
907
+
908
+ ARGUMENTS
909
+ [PATH] Path to hooks directory (overrides project config)
910
+
911
+ FLAGS
912
+ -d, --dry-run Show what would change without making changes
913
+ -y, --yes Answer yes to confirmation prompts
914
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
915
+ --prune Delete server-side hook files not present locally after pushing
916
+
917
+ GLOBAL FLAGS
918
+ --json Format output as json.
919
+
920
+ DESCRIPTION
921
+ Push hook files (actions, filters, cron) to WordPress
922
+
923
+ EXAMPLES
924
+ $ lps hook push
925
+
926
+ $ lps hook push --path ./hooks
927
+
928
+ $ lps hook push --prune
929
+ ```
930
+
931
+ _See code: [src/commands/hook/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/hook/push.ts)_
932
+
933
+ ## `lps hook rm FILENAME`
934
+
935
+ Remove a hook file (action, filter, cron) from WordPress
936
+
937
+ ```
938
+ USAGE
939
+ $ lps hook rm FILENAME [--json] [--env <value>] [-d] [-y]
940
+
941
+ ARGUMENTS
942
+ FILENAME The hook file to remove, its slug without the .php extension (e.g. "hello" or "invoice-pdf/[order_id]")
943
+
944
+ FLAGS
945
+ -d, --dry-run Show what would change without making changes
946
+ -y, --yes Answer yes to confirmation prompts
947
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
948
+
949
+ GLOBAL FLAGS
950
+ --json Format output as json.
951
+
952
+ DESCRIPTION
953
+ Remove a hook file (action, filter, cron) from WordPress
954
+
955
+ EXAMPLES
956
+ $ lps hook rm hello
957
+
958
+ $ lps hook rm hello --yes
959
+ ```
960
+
961
+ _See code: [src/commands/hook/rm.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/hook/rm.ts)_
962
+
628
963
  ## `lps init`
629
964
 
630
965
  Initialize a loopress.json config file in the current directory
@@ -640,7 +975,7 @@ EXAMPLES
640
975
  $ lps init
641
976
  ```
642
977
 
643
- _See code: [src/commands/init.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/init.ts)_
978
+ _See code: [src/commands/init.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/init.ts)_
644
979
 
645
980
  ## `lps login`
646
981
 
@@ -657,7 +992,7 @@ EXAMPLES
657
992
  $ lps login
658
993
  ```
659
994
 
660
- _See code: [src/commands/login.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/login.ts)_
995
+ _See code: [src/commands/login.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/login.ts)_
661
996
 
662
997
  ## `lps logout`
663
998
 
@@ -674,41 +1009,111 @@ EXAMPLES
674
1009
  $ lps logout
675
1010
  ```
676
1011
 
677
- _See code: [src/commands/logout.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/logout.ts)_
1012
+ _See code: [src/commands/logout.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/logout.ts)_
1013
+
1014
+ ## `lps option add NAME`
1015
+
1016
+ 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.
1017
+
1018
+ ```
1019
+ USAGE
1020
+ $ lps option add NAME [--json] [--env <value>] [-d] [--path <value>]
1021
+
1022
+ ARGUMENTS
1023
+ NAME Option name to start tracking (see `lps option list`)
1024
+
1025
+ FLAGS
1026
+ -d, --dry-run Show what would change without making changes
1027
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1028
+ --path=<value> Path to options directory (overrides project config)
1029
+
1030
+ GLOBAL FLAGS
1031
+ --json Format output as json.
1032
+
1033
+ DESCRIPTION
1034
+ Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this
1035
+ copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.
1036
+
1037
+ EXAMPLES
1038
+ $ lps option add wpseo_titles
1039
+
1040
+ $ lps option add siteurl
1041
+ ```
1042
+
1043
+ _See code: [src/commands/option/add.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/add.ts)_
1044
+
1045
+ ## `lps option diff [PATH]`
1046
+
1047
+ Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two environments
1048
+
1049
+ ```
1050
+ USAGE
1051
+ $ lps option diff [PATH] [--json] [--env <value>] [--against <value>]
1052
+
1053
+ ARGUMENTS
1054
+ [PATH] Path to options directory (overrides project config)
1055
+
1056
+ FLAGS
1057
+ --against=<value> Compare the primary environment against this second environment instead of against local files
1058
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1059
+
1060
+ GLOBAL FLAGS
1061
+ --json Format output as json.
1062
+
1063
+ DESCRIPTION
1064
+ Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two
1065
+ environments
1066
+
1067
+ EXAMPLES
1068
+ $ lps option diff
1069
+
1070
+ $ lps option diff --env staging
1071
+
1072
+ $ lps option diff --env staging --against production
1073
+ ```
1074
+
1075
+ _See code: [src/commands/option/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/diff.ts)_
678
1076
 
679
- ## `lps page list`
1077
+ ## `lps option list`
680
1078
 
681
- List pages from WordPress
1079
+ 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.
682
1080
 
683
1081
  ```
684
1082
  USAGE
685
- $ lps page list [--json] [--env <value>]
1083
+ $ lps option list [--json] [--env <value>] [--no-core]
686
1084
 
687
1085
  FLAGS
688
1086
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1087
+ --no-core Exclude WordPress-native default options and the CORE column from the output, including --json
689
1088
 
690
1089
  GLOBAL FLAGS
691
1090
  --json Format output as json.
692
1091
 
693
1092
  DESCRIPTION
694
- List pages from WordPress
1093
+ List WordPress option names currently on the site (names and autoload only, never values). CORE flags a
1094
+ WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active
1095
+ plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is
1096
+ that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option
1097
+ you want, then `lps option add <name>` to track it.
695
1098
 
696
1099
  EXAMPLES
697
- $ lps page list
1100
+ $ lps option list
1101
+
1102
+ $ lps option list --no-core
698
1103
  ```
699
1104
 
700
- _See code: [src/commands/page/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/page/list.ts)_
1105
+ _See code: [src/commands/option/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/list.ts)_
701
1106
 
702
- ## `lps page pull [PATH]`
1107
+ ## `lps option pull [PATH]`
703
1108
 
704
- Pull pages from WordPress
1109
+ Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>` for those first.
705
1110
 
706
1111
  ```
707
1112
  USAGE
708
- $ lps page pull [PATH] [--json] [--env <value>] [-d] [-y]
1113
+ $ lps option pull [PATH] [--json] [--env <value>] [-d] [-y]
709
1114
 
710
1115
  ARGUMENTS
711
- [PATH] Path to pages directory (overrides project config)
1116
+ [PATH] Path to options directory (overrides project config)
712
1117
 
713
1118
  FLAGS
714
1119
  -d, --dry-run Show what would change without making changes
@@ -719,24 +1124,25 @@ GLOBAL FLAGS
719
1124
  --json Format output as json.
720
1125
 
721
1126
  DESCRIPTION
722
- Pull pages from WordPress
1127
+ Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>`
1128
+ for those first.
723
1129
 
724
1130
  EXAMPLES
725
- $ lps page pull
1131
+ $ lps option pull
726
1132
  ```
727
1133
 
728
- _See code: [src/commands/page/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/page/pull.ts)_
1134
+ _See code: [src/commands/option/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/pull.ts)_
729
1135
 
730
- ## `lps page push [PATH]`
1136
+ ## `lps option push [PATH]`
731
1137
 
732
- Push pages to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.
1138
+ 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.
733
1139
 
734
1140
  ```
735
1141
  USAGE
736
- $ lps page push [PATH] [--json] [--env <value>] [-d] [-y]
1142
+ $ lps option push [PATH] [--json] [--env <value>] [-d] [-y]
737
1143
 
738
1144
  ARGUMENTS
739
- [PATH] Path to pages directory (overrides project config)
1145
+ [PATH] Path to options directory (overrides project config)
740
1146
 
741
1147
  FLAGS
742
1148
  -d, --dry-run Show what would change without making changes
@@ -747,13 +1153,47 @@ GLOBAL FLAGS
747
1153
  --json Format output as json.
748
1154
 
749
1155
  DESCRIPTION
750
- Push pages to WordPress. Local files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.
1156
+ Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options
1157
+ marked "readonly": true in their local file are skipped, edit the file to override.
1158
+
1159
+ EXAMPLES
1160
+ $ lps option push
1161
+ ```
1162
+
1163
+ _See code: [src/commands/option/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/push.ts)_
1164
+
1165
+ ## `lps option remove NAME`
1166
+
1167
+ 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.
1168
+
1169
+ ```
1170
+ USAGE
1171
+ $ lps option remove NAME [--json] [--env <value>] [-d] [-y] [--local-only] [--path <value>]
1172
+
1173
+ ARGUMENTS
1174
+ NAME Option name to stop tracking
1175
+
1176
+ FLAGS
1177
+ -d, --dry-run Show what would change without making changes
1178
+ -y, --yes Answer yes to confirmation prompts
1179
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1180
+ --local-only Untrack locally without deleting the option on WordPress
1181
+ --path=<value> Path to options directory (overrides project config)
1182
+
1183
+ GLOBAL FLAGS
1184
+ --json Format output as json.
1185
+
1186
+ DESCRIPTION
1187
+ Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass
1188
+ --local-only to skip the WordPress delete and only stop tracking.
751
1189
 
752
1190
  EXAMPLES
753
- $ lps page push
1191
+ $ lps option remove wpseo_titles
1192
+
1193
+ $ lps option remove wpseo_titles --local-only
754
1194
  ```
755
1195
 
756
- _See code: [src/commands/page/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/page/push.ts)_
1196
+ _See code: [src/commands/option/remove.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/option/remove.ts)_
757
1197
 
758
1198
  ## `lps plugin add SLUG`
759
1199
 
@@ -782,7 +1222,7 @@ EXAMPLES
782
1222
  $ lps plugin add contact-form-7 --dry-run
783
1223
  ```
784
1224
 
785
- _See code: [src/commands/plugin/add.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/plugin/add.ts)_
1225
+ _See code: [src/commands/plugin/add.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/plugin/add.ts)_
786
1226
 
787
1227
  ## `lps plugin audit`
788
1228
 
@@ -805,7 +1245,7 @@ EXAMPLES
805
1245
  $ lps plugin audit
806
1246
  ```
807
1247
 
808
- _See code: [src/commands/plugin/audit.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/plugin/audit.ts)_
1248
+ _See code: [src/commands/plugin/audit.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/plugin/audit.ts)_
809
1249
 
810
1250
  ## `lps plugin pull`
811
1251
 
@@ -831,7 +1271,7 @@ EXAMPLES
831
1271
  $ lps plugin pull --dry-run
832
1272
  ```
833
1273
 
834
- _See code: [src/commands/plugin/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/plugin/pull.ts)_
1274
+ _See code: [src/commands/plugin/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/plugin/pull.ts)_
835
1275
 
836
1276
  ## `lps plugin push`
837
1277
 
@@ -862,7 +1302,7 @@ EXAMPLES
862
1302
  $ lps plugin push --force --prune
863
1303
  ```
864
1304
 
865
- _See code: [src/commands/plugin/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/plugin/push.ts)_
1305
+ _See code: [src/commands/plugin/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/plugin/push.ts)_
866
1306
 
867
1307
  ## `lps plugin status`
868
1308
 
@@ -885,7 +1325,7 @@ EXAMPLES
885
1325
  $ lps plugin status
886
1326
  ```
887
1327
 
888
- _See code: [src/commands/plugin/status.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/plugin/status.ts)_
1328
+ _See code: [src/commands/plugin/status.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/plugin/status.ts)_
889
1329
 
890
1330
  ## `lps project config`
891
1331
 
@@ -903,7 +1343,7 @@ EXAMPLES
903
1343
  $ lps project config
904
1344
  ```
905
1345
 
906
- _See code: [src/commands/project/config.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/config.ts)_
1346
+ _See code: [src/commands/project/config.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/config.ts)_
907
1347
 
908
1348
  ## `lps project list`
909
1349
 
@@ -923,7 +1363,7 @@ EXAMPLES
923
1363
  $ lps project list
924
1364
  ```
925
1365
 
926
- _See code: [src/commands/project/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/list.ts)_
1366
+ _See code: [src/commands/project/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/list.ts)_
927
1367
 
928
1368
  ## `lps project pull`
929
1369
 
@@ -940,7 +1380,7 @@ EXAMPLES
940
1380
  $ lps project pull
941
1381
  ```
942
1382
 
943
- _See code: [src/commands/project/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/pull.ts)_
1383
+ _See code: [src/commands/project/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/pull.ts)_
944
1384
 
945
1385
  ## `lps project push`
946
1386
 
@@ -960,7 +1400,7 @@ EXAMPLES
960
1400
  $ lps project push
961
1401
  ```
962
1402
 
963
- _See code: [src/commands/project/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/push.ts)_
1403
+ _See code: [src/commands/project/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/push.ts)_
964
1404
 
965
1405
  ## `lps project remove`
966
1406
 
@@ -977,7 +1417,7 @@ EXAMPLES
977
1417
  $ lps project remove
978
1418
  ```
979
1419
 
980
- _See code: [src/commands/project/remove.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/remove.ts)_
1420
+ _See code: [src/commands/project/remove.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/remove.ts)_
981
1421
 
982
1422
  ## `lps project rotate`
983
1423
 
@@ -999,7 +1439,7 @@ EXAMPLES
999
1439
  $ lps project rotate --env staging
1000
1440
  ```
1001
1441
 
1002
- _See code: [src/commands/project/rotate.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/rotate.ts)_
1442
+ _See code: [src/commands/project/rotate.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/rotate.ts)_
1003
1443
 
1004
1444
  ## `lps project switch`
1005
1445
 
@@ -1016,7 +1456,7 @@ EXAMPLES
1016
1456
  $ lps project switch
1017
1457
  ```
1018
1458
 
1019
- _See code: [src/commands/project/switch.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/project/switch.ts)_
1459
+ _See code: [src/commands/project/switch.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/project/switch.ts)_
1020
1460
 
1021
1461
  ## `lps promote FROM TO`
1022
1462
 
@@ -1044,11 +1484,11 @@ EXAMPLES
1044
1484
  $ lps promote production staging --dry-run
1045
1485
  ```
1046
1486
 
1047
- _See code: [src/commands/promote.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/promote.ts)_
1487
+ _See code: [src/commands/promote.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/promote.ts)_
1048
1488
 
1049
1489
  ## `lps pull`
1050
1490
 
1051
- Pull all content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, from WordPress
1491
+ Pull all content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, from WordPress
1052
1492
 
1053
1493
  ```
1054
1494
  USAGE
@@ -1060,7 +1500,8 @@ FLAGS
1060
1500
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1061
1501
 
1062
1502
  DESCRIPTION
1063
- Pull all content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, from WordPress
1503
+ Pull all content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, from
1504
+ WordPress
1064
1505
 
1065
1506
  EXAMPLES
1066
1507
  $ lps pull
@@ -1070,11 +1511,11 @@ EXAMPLES
1070
1511
  $ lps pull --dry-run
1071
1512
  ```
1072
1513
 
1073
- _See code: [src/commands/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/pull.ts)_
1514
+ _See code: [src/commands/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/pull.ts)_
1074
1515
 
1075
1516
  ## `lps push`
1076
1517
 
1077
- Push all local content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, to WordPress
1518
+ Push all local content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, to WordPress
1078
1519
 
1079
1520
  ```
1080
1521
  USAGE
@@ -1086,7 +1527,8 @@ FLAGS
1086
1527
  --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1087
1528
 
1088
1529
  DESCRIPTION
1089
- Push all local content, plugins, composer dependencies, ACF, API routes, forms, pages, SEO, and snippets, to WordPress
1530
+ Push all local content, plugins, composer dependencies, ACF, API routes, hooks, forms, SEO, options, and snippets, to
1531
+ WordPress
1090
1532
 
1091
1533
  EXAMPLES
1092
1534
  $ lps push
@@ -1096,7 +1538,39 @@ EXAMPLES
1096
1538
  $ lps push --dry-run
1097
1539
  ```
1098
1540
 
1099
- _See code: [src/commands/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/push.ts)_
1541
+ _See code: [src/commands/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/push.ts)_
1542
+
1543
+ ## `lps seo diff [PATH]`
1544
+
1545
+ Show what differs in SEO settings, post meta, and redirects between your local files and a WordPress environment, or between two environments
1546
+
1547
+ ```
1548
+ USAGE
1549
+ $ lps seo diff [PATH] [--json] [--env <value>] [--against <value>]
1550
+
1551
+ ARGUMENTS
1552
+ [PATH] Path to SEO directory (overrides project config)
1553
+
1554
+ FLAGS
1555
+ --against=<value> Compare the primary environment against this second environment instead of against local files
1556
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1557
+
1558
+ GLOBAL FLAGS
1559
+ --json Format output as json.
1560
+
1561
+ DESCRIPTION
1562
+ Show what differs in SEO settings, post meta, and redirects between your local files and a WordPress environment, or
1563
+ between two environments
1564
+
1565
+ EXAMPLES
1566
+ $ lps seo diff
1567
+
1568
+ $ lps seo diff --env staging
1569
+
1570
+ $ lps seo diff --env staging --against production
1571
+ ```
1572
+
1573
+ _See code: [src/commands/seo/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/seo/diff.ts)_
1100
1574
 
1101
1575
  ## `lps seo list`
1102
1576
 
@@ -1122,7 +1596,7 @@ EXAMPLES
1122
1596
  $ lps seo list --post-type post
1123
1597
  ```
1124
1598
 
1125
- _See code: [src/commands/seo/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/seo/list.ts)_
1599
+ _See code: [src/commands/seo/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/seo/list.ts)_
1126
1600
 
1127
1601
  ## `lps seo pull [PATH]`
1128
1602
 
@@ -1150,7 +1624,7 @@ EXAMPLES
1150
1624
  $ lps seo pull --post-type post --post-type page
1151
1625
  ```
1152
1626
 
1153
- _See code: [src/commands/seo/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/seo/pull.ts)_
1627
+ _See code: [src/commands/seo/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/seo/pull.ts)_
1154
1628
 
1155
1629
  ## `lps seo push [PATH]`
1156
1630
 
@@ -1158,15 +1632,17 @@ Push SEO settings, post meta, and redirects to WordPress. Local redirect files c
1158
1632
 
1159
1633
  ```
1160
1634
  USAGE
1161
- $ lps seo push [PATH] [--env <value>] [-d] [-y]
1635
+ $ lps seo push [PATH] [--env <value>] [-d] [-y] [--allow-external-redirects]
1162
1636
 
1163
1637
  ARGUMENTS
1164
1638
  [PATH] Path to SEO directory (overrides project config)
1165
1639
 
1166
1640
  FLAGS
1167
- -d, --dry-run Show what would change without making changes
1168
- -y, --yes Answer yes to confirmation prompts
1169
- --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1641
+ -d, --dry-run Show what would change without making changes
1642
+ -y, --yes Answer yes to confirmation prompts
1643
+ --allow-external-redirects Allow pushing a redirect whose target points off this site. Off by default: the server
1644
+ rejects an off-site `urlTo` so a stray push can't 301 traffic away.
1645
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1170
1646
 
1171
1647
  DESCRIPTION
1172
1648
  Push SEO settings, post meta, and redirects to WordPress. Local redirect files created remotely are renamed on disk to
@@ -1174,9 +1650,42 @@ DESCRIPTION
1174
1650
 
1175
1651
  EXAMPLES
1176
1652
  $ lps seo push
1653
+
1654
+ $ lps seo push --allow-external-redirects
1655
+ ```
1656
+
1657
+ _See code: [src/commands/seo/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/seo/push.ts)_
1658
+
1659
+ ## `lps snippet diff [PATH]`
1660
+
1661
+ Show what differs in snippets between your local files and a WordPress environment, or between two environments
1662
+
1663
+ ```
1664
+ USAGE
1665
+ $ lps snippet diff [PATH] [--json] [--env <value>] [--against <value>]
1666
+
1667
+ ARGUMENTS
1668
+ [PATH] Path to snippets directory (overrides project config)
1669
+
1670
+ FLAGS
1671
+ --against=<value> Compare the primary environment against this second environment instead of against local files
1672
+ --env=<value> Target environment by name, overriding the globally active one (lps project switch)
1673
+
1674
+ GLOBAL FLAGS
1675
+ --json Format output as json.
1676
+
1677
+ DESCRIPTION
1678
+ Show what differs in snippets between your local files and a WordPress environment, or between two environments
1679
+
1680
+ EXAMPLES
1681
+ $ lps snippet diff
1682
+
1683
+ $ lps snippet diff --env staging
1684
+
1685
+ $ lps snippet diff --env staging --against production
1177
1686
  ```
1178
1687
 
1179
- _See code: [src/commands/seo/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/seo/push.ts)_
1688
+ _See code: [src/commands/snippet/diff.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/snippet/diff.ts)_
1180
1689
 
1181
1690
  ## `lps snippet list`
1182
1691
 
@@ -1199,7 +1708,7 @@ EXAMPLES
1199
1708
  $ lps snippet list
1200
1709
  ```
1201
1710
 
1202
- _See code: [src/commands/snippet/list.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/snippet/list.ts)_
1711
+ _See code: [src/commands/snippet/list.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/snippet/list.ts)_
1203
1712
 
1204
1713
  ## `lps snippet publish [PATH]`
1205
1714
 
@@ -1222,7 +1731,7 @@ EXAMPLES
1222
1731
  $ lps snippet publish --path ./snippets
1223
1732
  ```
1224
1733
 
1225
- _See code: [src/commands/snippet/publish.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/snippet/publish.ts)_
1734
+ _See code: [src/commands/snippet/publish.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/snippet/publish.ts)_
1226
1735
 
1227
1736
  ## `lps snippet pull [PATH]`
1228
1737
 
@@ -1252,7 +1761,7 @@ EXAMPLES
1252
1761
  $ lps snippet pull --path ./snippets
1253
1762
  ```
1254
1763
 
1255
- _See code: [src/commands/snippet/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/snippet/pull.ts)_
1764
+ _See code: [src/commands/snippet/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/snippet/pull.ts)_
1256
1765
 
1257
1766
  ## `lps snippet push [PATH]`
1258
1767
 
@@ -1283,7 +1792,7 @@ EXAMPLES
1283
1792
  $ lps snippet push --path ./snippets
1284
1793
  ```
1285
1794
 
1286
- _See code: [src/commands/snippet/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/snippet/push.ts)_
1795
+ _See code: [src/commands/snippet/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/snippet/push.ts)_
1287
1796
 
1288
1797
  ## `lps status`
1289
1798
 
@@ -1308,7 +1817,7 @@ EXAMPLES
1308
1817
  $ lps status --env staging
1309
1818
  ```
1310
1819
 
1311
- _See code: [src/commands/status.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/status.ts)_
1820
+ _See code: [src/commands/status.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/status.ts)_
1312
1821
 
1313
1822
  ## `lps telemetry disable`
1314
1823
 
@@ -1325,7 +1834,7 @@ EXAMPLES
1325
1834
  $ lps telemetry disable
1326
1835
  ```
1327
1836
 
1328
- _See code: [src/commands/telemetry/disable.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/telemetry/disable.ts)_
1837
+ _See code: [src/commands/telemetry/disable.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/telemetry/disable.ts)_
1329
1838
 
1330
1839
  ## `lps telemetry enable`
1331
1840
 
@@ -1342,7 +1851,7 @@ EXAMPLES
1342
1851
  $ lps telemetry enable
1343
1852
  ```
1344
1853
 
1345
- _See code: [src/commands/telemetry/enable.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/telemetry/enable.ts)_
1854
+ _See code: [src/commands/telemetry/enable.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/telemetry/enable.ts)_
1346
1855
 
1347
1856
  ## `lps theme add SLUG`
1348
1857
 
@@ -1369,7 +1878,7 @@ EXAMPLES
1369
1878
  $ lps theme add generatepress --version 3.4.0
1370
1879
  ```
1371
1880
 
1372
- _See code: [src/commands/theme/add.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/theme/add.ts)_
1881
+ _See code: [src/commands/theme/add.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/theme/add.ts)_
1373
1882
 
1374
1883
  ## `lps theme pull`
1375
1884
 
@@ -1393,7 +1902,7 @@ EXAMPLES
1393
1902
  $ lps theme pull
1394
1903
  ```
1395
1904
 
1396
- _See code: [src/commands/theme/pull.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/theme/pull.ts)_
1905
+ _See code: [src/commands/theme/pull.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/theme/pull.ts)_
1397
1906
 
1398
1907
  ## `lps theme push`
1399
1908
 
@@ -1421,7 +1930,7 @@ EXAMPLES
1421
1930
  $ lps theme push --force
1422
1931
  ```
1423
1932
 
1424
- _See code: [src/commands/theme/push.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/theme/push.ts)_
1933
+ _See code: [src/commands/theme/push.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/theme/push.ts)_
1425
1934
 
1426
1935
  ## `lps theme status`
1427
1936
 
@@ -1444,7 +1953,7 @@ EXAMPLES
1444
1953
  $ lps theme status
1445
1954
  ```
1446
1955
 
1447
- _See code: [src/commands/theme/status.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/theme/status.ts)_
1956
+ _See code: [src/commands/theme/status.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/theme/status.ts)_
1448
1957
 
1449
1958
  ## `lps validate`
1450
1959
 
@@ -1464,5 +1973,5 @@ EXAMPLES
1464
1973
  $ lps validate
1465
1974
  ```
1466
1975
 
1467
- _See code: [src/commands/validate.ts](https://github.com/loopress/loopress/blob/v0.23.0/src/commands/validate.ts)_
1976
+ _See code: [src/commands/validate.ts](https://github.com/loopress/loopress/blob/v0.24.1/src/commands/validate.ts)_
1468
1977
  <!-- commandsstop -->