* fix: keep Claude Code interactive after initial prompt
Claude Code's -p flag runs in one-shot mode (exits after responding),
which prevents follow-up messages via `ao send`. Instead, launch Claude
interactively and deliver the initial prompt post-launch via
runtime.sendMessage().
Adds `promptDelivery` property to the Agent interface so each agent
plugin can declare whether prompts should be inlined in the launch
command or sent after the agent starts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: make post-launch prompt delivery non-fatal and add test coverage
- Move sendMessage call outside the try/catch that destroys the session.
A prompt delivery failure should not kill a running agent — user can
retry with `ao send`.
- Add tests: no-prompt + post-launch agent, sendMessage failure resilience,
5s delay verification, systemPrompt/systemPromptFile alongside omitted -p.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* test: add integration test for prompt delivery (proves bug and fix)
Two real-Claude integration tests that contrast:
1. `-p` mode: Claude exits after responding (the bug)
2. Interactive + sendMessage: Claude stays alive, follow-up works (the fix)
Runs in CI with ANTHROPIC_API_KEY. Skips when prerequisites missing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(test): skip interactive test without auth, improve TUI readiness detection
The integration test failed in CI because interactive Claude requires
full login auth (not just ANTHROPIC_API_KEY). Skip the interactive suite
when `claude auth status` reports not logged in.
Also fix local flakiness: replace blind 5s sleep with polling for
Claude's TUI prompt character (❯) before sending the first message,
and increase scrollback capture from 200 to 500 lines.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(test): skip interactive test in CI, fix TUI readiness detection
The interactive test ran in CI despite hasInteractiveAuth() — Claude
reports logged in when ANTHROPIC_API_KEY is set, but interactive mode
requires OAuth. Use `!process.env.CI` as the skip condition instead.
Also fix waitForTuiReady false positive: the OAuth screen's
"Paste code here if prompted >" matched the `>` regex. Now checks
the last non-empty line for Claude's specific ❯ prompt character,
and bails early if the OAuth/login screen is detected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>