agent-conveyor 0.1.14 → 0.1.16

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