maeve-cli 0.9.0 → 0.10.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.
- package/README.md +102 -9
- package/dist/index.js +3991 -305
- package/examples/create-content.json +1 -1
- package/package.json +13 -12
package/README.md
CHANGED
|
@@ -150,14 +150,17 @@ maeve media:list --workspace <id> --type image --label-ids <id,id> --favorite
|
|
|
150
150
|
maeve media:list --workspace <id> --state deleted
|
|
151
151
|
maeve media:upload ./image.png --workspace <id>
|
|
152
152
|
maeve media:get --workspace <id> --id <mediaId>
|
|
153
|
+
maeve media:usage-history --workspace <id> --id <mediaId>
|
|
153
154
|
maeve media:update --workspace <id> --id <mediaId> --json media-update.json
|
|
154
155
|
maeve media:download-url --workspace <id> --id <mediaId>
|
|
155
156
|
maeve media:view-url --workspace <id> --id <mediaId>
|
|
156
157
|
maeve media:archive --workspace <id> --id <mediaId>
|
|
157
158
|
maeve media:delete --workspace <id> --id <mediaId>
|
|
159
|
+
maeve media:restore --workspace <id> --id <mediaId>
|
|
160
|
+
maeve media:delete-permanent --workspace <id> --id <mediaId> --yes
|
|
158
161
|
```
|
|
159
162
|
|
|
160
|
-
`media:delete` and `media:bulk-delete` move active media to the Bin. The API returns `deleteAfter`; media attached to scheduled posts is blocked with `MEDIA_ATTACHED_TO_SCHEDULED_POST`.
|
|
163
|
+
`media:delete` and `media:bulk-delete` move active media to the Bin. The API returns `deleteAfter`; media attached to scheduled posts is blocked with `MEDIA_ATTACHED_TO_SCHEDULED_POST`. Use `media:restore` to bring an item back from the Bin, or `media:delete-permanent` to remove it for good (requires `--yes`).
|
|
161
164
|
|
|
162
165
|
Folders and labels:
|
|
163
166
|
|
|
@@ -175,9 +178,28 @@ maeve media:labels:update --workspace <id> --id <labelId> --json media-label.jso
|
|
|
175
178
|
maeve media:labels:delete --workspace <id> --id <labelId>
|
|
176
179
|
maeve media:labels:attach --workspace <id> --id <mediaId> --json media-label-ids.json
|
|
177
180
|
maeve media:labels:detach --workspace <id> --id <mediaId> --json media-label-ids.json
|
|
181
|
+
maeve media:labels:usage --workspace <id> --label-ids <id,id>
|
|
182
|
+
maeve media:labels:health --workspace <id>
|
|
183
|
+
maeve media:labels:archive --workspace <id> --id <labelId>
|
|
184
|
+
maeve media:labels:restore --workspace <id> --id <labelId>
|
|
185
|
+
maeve media:labels:merge --workspace <id> --id <sourceLabelId> --json media-label-merge.json
|
|
178
186
|
```
|
|
179
187
|
|
|
180
|
-
`media:labels:*` is the canonical Media Room organization command family. If a global install still shows `media:tags:*`, upgrade `maeve-cli`.
|
|
188
|
+
`media:labels:*` is the canonical Media Room organization command family. If a global install still shows `media:tags:*`, upgrade `maeve-cli`. `media:labels:merge` folds the source label into a target; its payload is `{ "targetLabelId": "<id>" }`.
|
|
189
|
+
|
|
190
|
+
Label groups:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
maeve media:label-groups:list --workspace <id>
|
|
194
|
+
maeve media:label-groups:create --workspace <id> --json label-group.json
|
|
195
|
+
maeve media:label-groups:update --workspace <id> --id <groupId> --json label-group.json
|
|
196
|
+
maeve media:label-groups:reorder --workspace <id> --json label-group-order.json
|
|
197
|
+
maeve media:label-groups:add-labels --workspace <id> --id <groupId> --json label-ids.json
|
|
198
|
+
maeve media:label-groups:ungroup-labels --workspace <id> --json label-ids.json
|
|
199
|
+
maeve media:label-groups:delete --workspace <id> --id <groupId> --json label-group-delete.json
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`media:label-groups:reorder` takes the full `{ "groupIds": [...] }` order. `add-labels` and `ungroup-labels` take `{ "labelIds": [...] }`. `delete` takes `{ "mode": "archive-labels" }` or `{ "mode": "ungroup-labels" }` to say what happens to the labels in the group.
|
|
181
203
|
|
|
182
204
|
Bulk operations:
|
|
183
205
|
|
|
@@ -187,6 +209,8 @@ maeve media:bulk-move --workspace <id> --json media-bulk-move.json
|
|
|
187
209
|
maeve media:bulk-label --workspace <id> --json media-bulk-labels.json
|
|
188
210
|
maeve media:bulk-unlabel --workspace <id> --json media-bulk-labels.json
|
|
189
211
|
maeve media:bulk-delete --workspace <id> --json media-ids.json --yes
|
|
212
|
+
maeve media:bulk-restore --workspace <id> --json media-ids.json
|
|
213
|
+
maeve media:bulk-delete-forever --workspace <id> --json media-ids.json --yes
|
|
190
214
|
```
|
|
191
215
|
|
|
192
216
|
### Content
|
|
@@ -201,17 +225,20 @@ maeve content:schedule --workspace <id> --id <contentId> --scheduled-at "2026-05
|
|
|
201
225
|
maeve content:intended-time --workspace <id> --id <contentId> --scheduled-at "2026-05-01T10:00:00+10:00"
|
|
202
226
|
maeve content:notes --workspace <id> --id <contentId> --notes "<p>Planning notes</p>"
|
|
203
227
|
maeve content:notes --workspace <id> --id <contentId> --json notes.json
|
|
204
|
-
maeve content:workflow --workspace <id> --id <contentId> --status drafting
|
|
205
228
|
maeve content:publish --workspace <id> --id <contentId> --yes
|
|
206
229
|
maeve content:published-caption --workspace <id> --id <contentId> --json published-caption.json --yes
|
|
207
230
|
maeve content:archive --workspace <id> --id <contentId>
|
|
208
231
|
maeve content:restore --workspace <id> --id <contentId>
|
|
209
232
|
maeve content:retry --workspace <id> --id <contentId>
|
|
210
233
|
maeve content:delete --workspace <id> --id <contentId>
|
|
234
|
+
maeve content:recurring-occurrence:cancel --workspace <id> --occurrence <occurrenceId> --yes
|
|
235
|
+
maeve content:recurring-series:cancel --workspace <id> --series <seriesId> --effective-occurrence <occurrenceId> [--expected-version <number>] --yes
|
|
211
236
|
maeve content:failed-count --workspace <id>
|
|
212
237
|
maeve content:pending-approval-count --workspace <id>
|
|
213
238
|
```
|
|
214
239
|
|
|
240
|
+
`content:delete` refuses content that belongs to a recurring series; use the recurring cancel commands instead. `content:list` includes a `recurringMetadata` object on recurring-linked items with the `seriesId`, `occurrenceId`, and `seriesVersion` those commands need. `content:recurring-occurrence:cancel` cancels a single occurrence. `content:recurring-series:cancel` cancels the series and every not-yet-published occurrence from the effective occurrence forward. Both require `--yes` because they remove scheduled publishing work.
|
|
241
|
+
|
|
215
242
|
Approvals, comments, and activity:
|
|
216
243
|
|
|
217
244
|
```bash
|
|
@@ -248,6 +275,52 @@ maeve client-reviews:update-participant --workspace <id> --batch <batchId> --jso
|
|
|
248
275
|
maeve client-reviews:comment --workspace <id> --batch <batchId> --json comment.json
|
|
249
276
|
```
|
|
250
277
|
|
|
278
|
+
### Campaigns
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
maeve campaigns:list --workspace <id> --include-phases
|
|
282
|
+
maeve campaigns:get --workspace <id> --id <campaignId>
|
|
283
|
+
maeve campaigns:content --workspace <id> --id <campaignId> --status scheduled
|
|
284
|
+
maeve campaigns:create --workspace <id> --json campaign.json
|
|
285
|
+
maeve campaigns:update --workspace <id> --id <campaignId> --json campaign.json
|
|
286
|
+
maeve campaigns:archive --workspace <id> --id <campaignId>
|
|
287
|
+
maeve campaigns:restore --workspace <id> --id <campaignId>
|
|
288
|
+
maeve campaigns:phases:list --workspace <id> --id <campaignId>
|
|
289
|
+
maeve campaigns:phases:create --workspace <id> --id <campaignId> --json campaign-phase.json
|
|
290
|
+
maeve campaigns:phases:replace --workspace <id> --id <campaignId> --json campaign-phases.json
|
|
291
|
+
maeve campaigns:phases:update --workspace <id> --id <campaignId> --phase-id <phaseId> --json campaign-phase.json
|
|
292
|
+
maeve campaigns:phases:delete --workspace <id> --id <campaignId> --phase-id <phaseId> --yes
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Use `campaigns:list` and `campaigns:get` to find the campaign and phase IDs that
|
|
296
|
+
`content:create` and `content:update` accept in `campaignId` / `campaignPhaseId`. Create
|
|
297
|
+
payload: `name`, `startDate`, and `endDate` are required (dates are ISO 8601); `color`,
|
|
298
|
+
`goal`, `description`, `targetPlatforms`, `estimatedBudget`, `actualBudget`, and
|
|
299
|
+
`budgetCurrency` are optional. `campaigns:phases:replace` takes the full `{ "phases": [...] }`
|
|
300
|
+
array.
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"name": "May launch",
|
|
305
|
+
"startDate": "2026-05-01",
|
|
306
|
+
"endDate": "2026-05-31",
|
|
307
|
+
"color": "#2563EB",
|
|
308
|
+
"targetPlatforms": ["instagram", "facebook"]
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Strategy
|
|
313
|
+
|
|
314
|
+
Read-only. The CLI exposes the strategy reads the public API serves; strategy is edited in
|
|
315
|
+
the app.
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
maeve strategy:foundation --workspace <id>
|
|
319
|
+
maeve strategy:goals --workspace <id>
|
|
320
|
+
maeve strategy:goals:metrics --workspace <id>
|
|
321
|
+
maeve strategy:goal --workspace <id> --id <goalId>
|
|
322
|
+
```
|
|
323
|
+
|
|
251
324
|
### Taxonomy and hashtags
|
|
252
325
|
|
|
253
326
|
```bash
|
|
@@ -278,7 +351,7 @@ maeve analytics:report --workspace <id> --provider instagram --json analytics-re
|
|
|
278
351
|
|
|
279
352
|
`analytics:posts` is single-integration. `analytics:posts-aggregate` accepts `--integration-ids` and `--sort-by recent|engagement|views`.
|
|
280
353
|
|
|
281
|
-
`analytics:report` is
|
|
354
|
+
`analytics:report` is standard-plan only. It saves the PDF to `--output`. Stdout stays JSON metadata.
|
|
282
355
|
|
|
283
356
|
### Inbox
|
|
284
357
|
|
|
@@ -289,6 +362,11 @@ maeve inbox:stats --workspace <id>
|
|
|
289
362
|
maeve inbox:read --workspace <id> --thread <threadId>
|
|
290
363
|
maeve inbox:unread --workspace <id> --thread <threadId>
|
|
291
364
|
maeve inbox:read-all --workspace <id> --json inbox-read-all.json --yes
|
|
365
|
+
maeve inbox:resolve --workspace <id> --thread <threadId>
|
|
366
|
+
maeve inbox:reopen --workspace <id> --thread <threadId>
|
|
367
|
+
maeve inbox:resolve-all --workspace <id> --json inbox-resolve-all.json --yes
|
|
368
|
+
maeve inbox:resolve-message --workspace <id> --message <messageId>
|
|
369
|
+
maeve inbox:reopen-message --workspace <id> --message <messageId>
|
|
292
370
|
maeve inbox:reply --workspace <id> --thread <threadId> --json inbox-reply.json --yes
|
|
293
371
|
maeve inbox:note --workspace <id> --thread <threadId> --json inbox-note.json
|
|
294
372
|
maeve inbox:moderate --workspace <id> --message <messageId> --json inbox-moderate.json --yes
|
|
@@ -296,6 +374,8 @@ maeve inbox:retry-message --workspace <id> --message <messageId> --yes
|
|
|
296
374
|
maeve inbox:delete-failed --workspace <id> --message <messageId> --yes
|
|
297
375
|
```
|
|
298
376
|
|
|
377
|
+
`inbox:resolve` and `inbox:resolve-message` accept an optional `--json` file with a resolution reason and note. `inbox:resolve-all` resolves every thread matching the filter payload and requires `--yes`. The reopen commands take no body.
|
|
378
|
+
|
|
299
379
|
### Grid planner
|
|
300
380
|
|
|
301
381
|
```bash
|
|
@@ -310,6 +390,21 @@ maeve grid:remove-cover --workspace <id> --item <itemId>
|
|
|
310
390
|
maeve grid:promote --workspace <id> --item <itemId> --json grid-promote.json --yes
|
|
311
391
|
```
|
|
312
392
|
|
|
393
|
+
### Boosts
|
|
394
|
+
|
|
395
|
+
Read-only, standard plan. The CLI reads boost state for reporting but does not create, pause,
|
|
396
|
+
resume, delete, or estimate boosts, because those spend Meta ad budget. Run those from the
|
|
397
|
+
app.
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
maeve boosts:list --workspace <id> --statuses active,paused
|
|
401
|
+
maeve boosts:get --workspace <id> --id <boostId>
|
|
402
|
+
maeve boosts:performance --workspace <id> --id <boostId>
|
|
403
|
+
maeve boosts:ad-accounts --workspace <id> --integration <integrationId>
|
|
404
|
+
maeve boosts:boosted-content-ids --workspace <id>
|
|
405
|
+
maeve boosts:by-content --workspace <id> --content <contentId>
|
|
406
|
+
```
|
|
407
|
+
|
|
313
408
|
## Payloads
|
|
314
409
|
|
|
315
410
|
### Content
|
|
@@ -355,12 +450,10 @@ Common fields:
|
|
|
355
450
|
- `settings`: provider settings from integration capabilities only. Media metadata belongs in `contentMedia`.
|
|
356
451
|
- `firstComment`, `shareToFeed`: optional publish behavior fields.
|
|
357
452
|
- `pillarIds`, `formatIds`, `labelIds`: arrays of workspace taxonomy UUIDs.
|
|
358
|
-
- `campaignId`, `campaignPhaseId`: optional campaign links. Use `null` to clear when updating.
|
|
359
|
-
- `priority`: `urgent`, `high`, `medium`, or `low`.
|
|
453
|
+
- `campaignId`, `campaignPhaseId`: optional root-post campaign links. Use `null` to clear when updating.
|
|
454
|
+
- `priority`: optional root-post priority, `urgent`, `high`, `medium`, or `low`.
|
|
360
455
|
- `threadMessages`: items for thread-style content using `captions` and optional `contentMedia`.
|
|
361
456
|
|
|
362
|
-
`content:workflow` accepts only the user-mutable workflow statuses: `idea` or `drafting`.
|
|
363
|
-
|
|
364
457
|
`content:published-caption` edits the provider caption for an already-published Facebook item and requires `--yes`.
|
|
365
458
|
|
|
366
459
|
```json
|
|
@@ -371,7 +464,7 @@ Common fields:
|
|
|
371
464
|
|
|
372
465
|
### Approvals and client reviews
|
|
373
466
|
|
|
374
|
-
Approval and client review commands need
|
|
467
|
+
Approval and client review commands need a standard workspace plan and the role shown in each command's `--help`. Payloads mirror the public API DTOs.
|
|
375
468
|
|
|
376
469
|
Internal approval request:
|
|
377
470
|
|