Headless launch mode for orchestrators #316

Open
didericis-claude wants to merge 11 commits from headless-launch-mode into main

11 Commits

Author SHA1 Message Date
didericis b04c81c4f1 test: add headless_prompt stub to in-test AgentProvider subclasses
lint / lint (push) Successful in 1m59s
test / unit (pull_request) Successful in 51s
test / integration (pull_request) Successful in 18s
test / coverage (pull_request) Successful in 1m7s
The new abstract headless_prompt method broke two test files that
define minimal _Provider subclasses of AgentProvider, causing
collection-time TypeErrors that aborted the whole unit suite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WL77TgFxKbs3cidGMG9dz7
2026-06-30 13:31:19 -04:00
didericis-claude ee5c042c9e feat: headless_prompt method on AgentProvider + --prompt arg
lint / lint (push) Failing after 2m10s
test / unit (pull_request) Failing after 48s
test / integration (pull_request) Successful in 25s
test / coverage (pull_request) Failing after 53s
2026-06-29 12:55:25 -04:00
didericis-claude 4424eee9fa feat: headless_prompt method on AgentProvider + --prompt arg
test / integration (pull_request) Successful in 24s
test / coverage (pull_request) Failing after 55s
lint / lint (push) Failing after 2m10s
test / unit (pull_request) Failing after 13m3s
2026-06-29 12:55:19 -04:00
didericis-claude fe354d3ffb feat: headless_prompt method on AgentProvider + --prompt arg
test / unit (pull_request) Failing after 48s
test / integration (pull_request) Successful in 25s
test / coverage (pull_request) Failing after 55s
lint / lint (push) Failing after 2m12s
2026-06-29 12:55:12 -04:00
didericis-claude a55aa5fa4d feat: headless_prompt method on AgentProvider + --prompt arg
lint / lint (push) Failing after 1m57s
test / unit (pull_request) Failing after 40s
test / integration (pull_request) Successful in 18s
test / coverage (pull_request) Failing after 56s
2026-06-29 12:55:07 -04:00
didericis-claude 33b6956f59 feat: headless_prompt method on AgentProvider + --prompt arg
test / unit (pull_request) Failing after 39s
test / integration (pull_request) Successful in 16s
test / coverage (pull_request) Failing after 43s
lint / lint (push) Failing after 1m56s
2026-06-29 12:54:58 -04:00
didericis-claude ae281ae28d feat: headless_prompt method on AgentProvider + --prompt arg
test / unit (pull_request) Failing after 45s
test / integration (pull_request) Successful in 20s
test / coverage (pull_request) Failing after 50s
lint / lint (push) Failing after 1m57s
2026-06-29 12:54:48 -04:00
didericis-claude 0eeb82a592 feat: headless_prompt method on AgentProvider + --prompt arg
test / unit (pull_request) Failing after 51s
test / integration (pull_request) Successful in 20s
test / coverage (pull_request) Failing after 49s
lint / lint (push) Failing after 2m2s
2026-06-29 12:54:41 -04:00
didericis-claude 3e6b8d1d61 feat: headless_prompt method on AgentProvider + --prompt arg
test / unit (pull_request) Failing after 51s
test / integration (pull_request) Successful in 27s
test / coverage (pull_request) Failing after 59s
lint / lint (push) Failing after 2m11s
2026-06-29 12:54:34 -04:00
didericis-claude 2d16fcbce9 feat: headless_prompt method on AgentProvider + --prompt arg
lint / lint (push) Failing after 2m22s
2026-06-29 12:54:27 -04:00
didericis 76f488a5a5 feat(cli): add headless launch mode for orchestrators
lint / lint (push) Successful in 2m4s
test / unit (pull_request) Successful in 57s
test / integration (pull_request) Successful in 28s
test / coverage (pull_request) Successful in 1m15s
`cli.py start` was interactive-only: TUI selectors (agent / bottle /
name+color) plus a y/N preflight, then a blocking PTY attached to the
controlling terminal. That shape can't be driven by an orchestrator
(Paseo), CI, or webhook dispatch, and made spinning up a known
agent+bottle more friction than necessary.

Add a `--headless` path on `start`:
  - agent / bottles / label / color come from flags + manifest defaults;
    no TUI selectors, no y/N (auto-confirmed via a new `assume_yes` param
    threaded into the shared `_launch_bottle` core).
  - `--bottle` (repeatable) defaults to the agent's own `bottle:` when
    omitted; `--label` defaults to the agent name and auto-uniquifies on
    slug collision (orchestrators fire-and-forget many bottles);
    `--color` defaults to none.
  - the agent still execs on inherited stdio/PTY, so whatever allocates
    the PTY drives the live session — only the launch chrome went
    non-interactive.
  - `--headless --dry-run` previews the resolved plan without launching.

Prerequisite for orchestrator integration, webhook dispatch, and remote
spin-up. New unit coverage in tests/unit/test_cli_start_headless.py
(11 tests); start/cli/launch sweep green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NkwFXLFff9PYPy4wgVBJp9
2026-06-29 11:41:33 -04:00