diff options
| author | Craig Jennings <c@cjennings.net> | 2026-07-13 16:40:07 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-07-13 16:40:07 -0500 |
| commit | 04c3b29a968d62eac1a4123cf03606fc667c2d14 (patch) | |
| tree | df10eb05ce73b74184bef5d8f64bb144a2a5d6c3 /scripts/tests | |
| parent | 6cd3aa32b9f3b033c3890f08ab430e757696e5e3 (diff) | |
| download | rulesets-04c3b29a968d62eac1a4123cf03606fc667c2d14.tar.gz rulesets-04c3b29a968d62eac1a4123cf03606fc667c2d14.zip | |
feat(launcher): add ai --runtime for choosing the agent CLI
The ai launcher can now start codex sessions: --runtime claude|codex (or AI_RUNTIME), a runtime-to-CLI map with local reserved behind a clear error until the local-model evaluation picks a CLI, and a runtime-aware dependency check. A new --print-launch mode prints the pane launch command without touching tmux or fzf, and is the seam the six new bats tests drive. Both current CLIs take the opening line as a positional prompt, so only the command name varies.
Diffstat (limited to 'scripts/tests')
| -rw-r--r-- | scripts/tests/ai-launcher-runtime.bats | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/tests/ai-launcher-runtime.bats b/scripts/tests/ai-launcher-runtime.bats new file mode 100644 index 0000000..4ec24bf --- /dev/null +++ b/scripts/tests/ai-launcher-runtime.bats @@ -0,0 +1,58 @@ +#!/usr/bin/env bats +# The ai launcher's --runtime flag: pick the agent CLI (claude, codex) that +# a project window launches. Part of the generic-agent-runtime arc — the +# tmux-side counterpart of .emacs.d's ai-term multi-LLM handoff. The +# --print-launch mode exists for exactly these tests: it prints the launch +# command a real run would send to the pane, without touching tmux or fzf. + +setup() { + REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)" + AI="$REPO_ROOT/claude-templates/bin/ai" + PROJ="$(mktemp -d)" + mkdir -p "$PROJ/.ai" + touch "$PROJ/.ai/protocols.org" +} + +teardown() { + rm -rf "$PROJ" +} + +@test "default runtime launches claude" { + run bash "$AI" --print-launch "$PROJ" + [ "$status" -eq 0 ] + [[ "$output" == claude\ * ]] + [[ "$output" == *"protocols.org"* ]] +} + +@test "--runtime codex launches codex with the same opening line" { + run bash "$AI" --runtime codex --print-launch "$PROJ" + [ "$status" -eq 0 ] + [[ "$output" == codex\ * ]] + [[ "$output" == *"protocols.org"* ]] + [[ "$output" == *"$(basename "$PROJ")"* ]] +} + +@test "AI_RUNTIME env selects the runtime without the flag" { + AI_RUNTIME=codex run bash "$AI" --print-launch "$PROJ" + [ "$status" -eq 0 ] + [[ "$output" == codex\ * ]] +} + +@test "--runtime local is reserved and says why it is not wired" { + run bash "$AI" --runtime local --print-launch "$PROJ" + [ "$status" -eq 2 ] + [[ "$output" == *"not wired"* ]] +} + +@test "an unknown runtime errors and names the valid ones" { + run bash "$AI" --runtime frobnitz --print-launch "$PROJ" + [ "$status" -eq 2 ] + [[ "$output" == *"claude"* ]] + [[ "$output" == *"codex"* ]] +} + +@test "--print-launch refuses a non-project directory" { + run bash "$AI" --print-launch "$BATS_TEST_TMPDIR" + [ "$status" -eq 1 ] + [[ "$output" == *"protocols.org"* ]] +} |
