agent-conveyor 0.1.14 → 0.1.15

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 CHANGED
@@ -295,6 +295,64 @@ tmux attach -t codex-live-test
295
295
 
296
296
  ## Commands
297
297
 
298
+ ### Campaigns
299
+
300
+ - `campaign create --name C --objective TEXT [--metadata-json JSON] [--json]` —
301
+ Create a campaign record for a multi-worker initiative.
302
+ - `campaign add-slot --name C --slot-key K --role-label TEXT [--channel CH] [--session-id S] [--thread-id ID] [--thread-title TITLE] [--state planned|active|idle|blocked|archived] [--metadata-json JSON] [--json]` —
303
+ Add a named worker slot to a campaign. If `--session-id` is supplied, the
304
+ runtime verifies that it is a registered worker session.
305
+ - `campaign attach-slot --name C --slot SLOT_ID [--session-id S] [--thread-id ID] [--thread-title TITLE] [--state planned|active|idle|blocked|archived] [--metadata-json JSON] [--json]` —
306
+ Attach or refresh worker-session and Codex app thread metadata for an existing
307
+ campaign slot. Supplying `--session-id` requires a registered worker session.
308
+ - `campaign rotate-slot --name C --slot SLOT_ID --expected-thread-id OLD --thread-id NEW [--thread-title TITLE] [--session-id S] [--state planned|active|idle|blocked|archived] [--json]` —
309
+ Record a campaign-owned worker slot rotation. The command refuses to update
310
+ the slot unless `OLD` matches the slot's current Codex app thread id.
311
+ - `campaign archive-slot --name C --slot SLOT_ID --expected-thread-id CURRENT [--json]` —
312
+ Mark a campaign worker slot archived only when the expected current thread id
313
+ matches the slot record.
314
+ - `campaign brief --name C --channel CH --brief-json JSON [--json]` —
315
+ Upsert the structured brief for a channel.
316
+ - `campaign assign --name C --slot SLOT_ID --title TEXT --instructions TEXT [--status queued|active|blocked|done|cancelled] [--metadata-json JSON] [--json]` —
317
+ Create a slot-scoped assignment.
318
+ - `campaign asset --name C --slot SLOT_ID --asset-type image|video|hyperframes|copy|audio|other --title TEXT [--assignment ASSIGNMENT_ID] [--channel CH] [--status draft|needs_review|approved|rejected|published] [--prompt-summary TEXT] [--artifact-path PATH] [--metadata-json JSON] [--review-notes TEXT] [--json]` —
319
+ Record a structured creative asset receipt.
320
+ - `campaign status --name C [--json]` —
321
+ Show campaign metadata, worker slots, channel briefs, assignment counts, and
322
+ asset receipt counts.
323
+ - `campaign dashboard --name C [--json]` —
324
+ Show a manager-oriented campaign aggregate: worker slot lifecycle states,
325
+ blockers, approval counts, and the next recommended manager action.
326
+
327
+ Creative Ops Campaign manager loop:
328
+
329
+ ```bash
330
+ conveyor campaign create --name "$CAMPAIGN" \
331
+ --objective "Produce reviewable channel assets." --json
332
+ conveyor campaign add-slot --name "$CAMPAIGN" --slot-key tiktok \
333
+ --role-label "TikTok worker" --channel tiktok \
334
+ --thread-id "$TIKTOK_THREAD_ID" --thread-title "TikTok Worker" \
335
+ --state active --json
336
+ conveyor campaign brief --name "$CAMPAIGN" --channel tiktok \
337
+ --brief-json '{"format":"9:16","review_gate":"human approval before publish"}' --json
338
+ conveyor campaign assign --name "$CAMPAIGN" --slot "$SLOT_ID" \
339
+ --title "Draft TikTok hooks" \
340
+ --instructions "Create reviewable draft copy only; do not publish." \
341
+ --status active --json
342
+ conveyor campaign asset --name "$CAMPAIGN" --slot "$SLOT_ID" \
343
+ --assignment "$ASSIGNMENT_ID" --asset-type copy \
344
+ --title "TikTok hooks v1" --status needs_review \
345
+ --prompt-summary "Sanitized prompt summary only." --json
346
+ conveyor campaign dashboard --name "$CAMPAIGN" --json
347
+ conveyor dashboard --campaign "$CAMPAIGN" --ensure-dispatch
348
+ ```
349
+
350
+ Use `campaign rotate-slot` or `campaign archive-slot` only with the exact
351
+ current `--expected-thread-id` for that campaign slot. Public publishing,
352
+ scheduling, posting, external account access, private phone content, raw audio,
353
+ tokens, JWTs, keys, archives, and IPAs require explicit human approval or must
354
+ stay out of receipts.
355
+
298
356
  ### Sessions and binding
299
357
 
300
358
  - `start-worker --name N [--cwd D] [--task "..."] [--sandbox SANDBOX] [--ask-for-approval ASK_FOR_APPROVAL] [--accept-trust] [--timeout-seconds N]` —
@@ -443,6 +501,18 @@ tmux attach -t codex-live-test
443
501
  heartbeats since the last command or inbox-consumption receipt, it recommends
444
502
  `stop_autopilot` so operators can quiesce blocked/no-progress loops instead
445
503
  of repeating idle pulses.
504
+ - `app-worker-rotation-plan TASK --old-worker-thread-id ID [--require-handoff]
505
+ [--reason TEXT] [--json]` — Prepare a Codex app fresh-worker rotation. The
506
+ CLI verifies that `ID` exactly matches the active bound worker session before
507
+ emitting adapter-ready actions to create a replacement worker thread and
508
+ archive the old worker thread. Blocked plans contain no archive action.
509
+ - `app-worker-rotation-record TASK --old-worker-thread-id OLD
510
+ --new-worker-thread-id NEW [--new-worker-thread-title TITLE]
511
+ --archive-status archived|blocked [--reason TEXT] [--json]` — Record the
512
+ result after the Codex app layer creates the replacement worker thread and
513
+ archives, or blocks on archiving, the old thread. The command re-checks active
514
+ binding ownership before updating the worker session to the new app thread id,
515
+ so a stale plan cannot archive or replace an unrelated thread.
446
516
  - `discover [QUERY] [--all] [--limit N]` / `search [QUERY]` — Search tasks,
447
517
  registered sessions, active bindings, and recent telemetry in one JSON result.
448
518
  Use this for conversational setup when a manager or Codex session needs to
@@ -587,6 +657,10 @@ tmux attach -t codex-live-test
587
657
  before/after sending the worker instruction. `--dry-run` still records the
588
658
  command in `commands`, `replay`, and `mutation-audit` with `dry_run: true`
589
659
  and `sent: false`.
660
+ In Codex app threads, remote `/compact` or `/clear` sent through
661
+ `send_message_to_thread` is prompt text, not an executable slash command. Use
662
+ `app-worker-rotation-plan` plus Codex app `create_thread` and
663
+ `set_thread_archived` when fresh context is required for app-native workers.
590
664
  - `bind --task T --worker W --manager M` — Create the task binding.
591
665
  - `unbind --task T` — End the active binding for a task.
592
666
  - `finish-task <task> [--reason R] [--require-criteria-audit]
@@ -616,7 +690,7 @@ tmux attach -t codex-live-test
616
690
 
617
691
  ### Observation
618
692
 
619
- - `dashboard [--task T] [--ensure-dispatch] [--dispatcher-id ID]
693
+ - `dashboard [--task T] [--campaign C] [--ensure-dispatch] [--dispatcher-id ID]
620
694
  [--host 127.0.0.1] [--port 8797]` — Launch the
621
695
  local live supervision cockpit. The dashboard binds to loopback by default,
622
696
  uses the TypeScript backend to shell out to `conveyor` JSON commands, and
@@ -624,10 +698,12 @@ tmux attach -t codex-live-test
624
698
  a WebSocket PTY bridge. It includes browser bootstrap controls for creating a
625
699
  task, starting a worker/manager pair with `conveyor pair`, auto-attaching the
626
700
  terminals, attach/bind controls, and audited action receipts for cycle,
627
- nudge, interrupt, finish, and export. With `--ensure-dispatch`, launch also
628
- ensures a Dispatch watch process using the supplied `--dispatcher-id` when
629
- provided, reusing only a fresh heartbeat from that same dispatcher id. Use
630
- `--dry-run --json` to inspect the launch command.
701
+ nudge, interrupt, finish, and export. With `--campaign`, the observation rail
702
+ also shows campaign slot lifecycle, blockers, approval counts, and the next
703
+ manager action. With `--ensure-dispatch`, launch also ensures a Dispatch watch
704
+ process using the supplied `--dispatcher-id` when provided, reusing only a
705
+ fresh heartbeat from that same dispatcher id. Use `--dry-run --json` to
706
+ inspect the launch command.
631
707
  - `cycle <task> [--busy-wait-seconds N]` — One observation cycle. Idempotent. Runs `ingest`, computes
632
708
  worker state from the JSON event stream, captures the tmux pane as a shadow
633
709
  signal, writes a `manager_cycles` row, and returns a JSON dict the manager