Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Devloop ships two agent skills, installed into `~/.claude/skills` and `~/.agents

- Uses an isolated sibling git worktree by default; pass `--in-place` to stay in the current worktree.
- Runs up to 5 passes, commits eligible coder changes, and executes `.devloop/verify` after each coder pass when present. Keep `.devloop/verify` local and auditable.
- Shows lifecycle statuses and final results in the terminal. Internal agent transcripts are stored in `.devloop/logs/` rather than printed during a run.
- Writes tracks, reviews, reports, logs, session ids, and spec snapshots under `.devloop/`; generated worktrees and branches remain for inspection.

## Contributing
Expand Down
8 changes: 1 addition & 7 deletions devloop
Original file line number Diff line number Diff line change
Expand Up @@ -4242,10 +4242,9 @@ run_claude() {
run_with_prompt() {
local cwd="$1"
local log="$2"
local id="$3"
local prompt="$4"
shift 4
local prompt_file stdout_file stderr_file output_file code_file line pid
local prompt_file stdout_file stderr_file output_file code_file pid
prompt_file="$(mktemp "${TMPDIR:-/tmp}/devloop-prompt.XXXXXX")"
stdout_file="$(mktemp "${TMPDIR:-/tmp}/devloop-stdout.XXXXXX")"
stderr_file="$(mktemp "${TMPDIR:-/tmp}/devloop-stderr.XXXXXX")"
Expand Down Expand Up @@ -4279,11 +4278,6 @@ run_with_prompt() {
mkdir -p "$(dirname "$log")"
cp "$output_file" "$log"
fi
if [ -n "$id" ]; then
while IFS= read -r line; do
if [ -n "$line" ]; then event_log "$id" "$line"; fi
done < "$output_file"
fi
rm -f "$prompt_file" "$stdout_file" "$stderr_file" "$output_file" "$code_file"
}

Expand Down
65 changes: 65 additions & 0 deletions scripts/devloop_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ contains "$readme_text" "tmux" "README required dependency"
contains "$readme_text" "--no-tmux" "README foreground override"
contains "$readme_text" "Ctrl-b d" "README detach guidance"
contains "$readme_text" "tmux attach -t" "README reattach guidance"
contains "$readme_text" "Internal agent transcripts are stored in \`.devloop/logs/\` rather than printed during a run." "README agent transcript logging"
contributing_text="$(cat "$REPO_ROOT/CONTRIBUTING.md")"
contains "$contributing_text" "tmux" "CONTRIBUTING required dependency"
contains "$contributing_text" "--no-tmux" "CONTRIBUTING foreground override"
Expand Down Expand Up @@ -474,6 +475,70 @@ not_contains "$tui_help" "devloop $obsolete_update_command" "TUI help"
USE_TUI="$old_use_tui"
unset -f gum

transcript_success_agent() {
local index=1
while [ "$index" -le 64 ]; do
printf 'agent-success-stdout-%02d\n' "$index"
index=$((index + 1))
done
printf '%s\n' "To continue this session, run codex exec resume 11111111-1111-4111-8111-111111111111"
printf '%s\n' "agent-success-stderr-marker" >&2
}

transcript_failure_agent() {
printf '%s\n' "agent-failure-stdout-marker"
printf '%s\n' "agent-failure-stderr-marker" >&2
return 23
}

old_use_tui="$USE_TUI"
transcript_success_terminal="$work/transcript-success-terminal.log"
transcript_success_log="$work/transcript-success-agent.log"
USE_TUI=true
{
event_step "transcript-success" "capturing successful agent output"
run_with_prompt "$work" "$transcript_success_log" "transcript-success" "fixture prompt" transcript_success_agent
event_done "transcript-success" true "done"
event_log "transcript-success" "explicit event warning remains visible"
} > "$transcript_success_terminal" 2>&1
transcript_success_output="$(cat "$transcript_success_terminal")"
not_contains "$transcript_success_output" "agent-success-stdout-" "TUI agent stdout suppression"
not_contains "$transcript_success_output" "agent-success-stderr-marker" "TUI agent stderr suppression"
contains "$transcript_success_output" "capturing successful agent output" "TUI lifecycle status"
contains "$transcript_success_output" "done" "TUI lifecycle result"
contains "$transcript_success_output" "explicit event warning remains visible" "TUI explicit warning"
equals "$RUN_CODE" "0" "successful agent exit code"
equals "$(printf '%s\n' "$RUN_STDOUT" | wc -l | tr -d ' ')" "65" "successful agent captured stdout"
equals "$RUN_STDERR" "agent-success-stderr-marker" "successful agent captured stderr"
contains "$RUN_OUTPUT" "agent-success-stdout-64" "successful agent combined stdout"
contains "$RUN_OUTPUT" "agent-success-stderr-marker" "successful agent combined stderr"
equals "$(extract_session_id "$RUN_OUTPUT")" "11111111-1111-4111-8111-111111111111" "captured session extraction"
equals "$(cat "$transcript_success_log")" "$RUN_OUTPUT" "successful agent complete log"
equals "$(wc -l < "$transcript_success_log" | tr -d ' ')" "66" "successful agent log line count"

transcript_failure_terminal="$work/transcript-failure-terminal.log"
transcript_failure_log="$work/transcript-failure-agent.log"
USE_TUI=false
{
event_step "transcript-failure" "capturing failing agent output"
set +e
run_with_prompt "$work" "$transcript_failure_log" "transcript-failure" "fixture prompt" transcript_failure_agent
set -e
event_done "transcript-failure" false "agent exited with error, see log"
} > "$transcript_failure_terminal" 2>&1
transcript_failure_output="$(cat "$transcript_failure_terminal")"
not_contains "$transcript_failure_output" "agent-failure-stdout-marker" "plain agent stdout suppression"
not_contains "$transcript_failure_output" "agent-failure-stderr-marker" "plain agent stderr suppression"
contains "$transcript_failure_output" "capturing failing agent output" "plain lifecycle status"
contains "$transcript_failure_output" "agent exited with error, see log" "plain failure result"
equals "$RUN_CODE" "23" "failed agent exit code"
equals "$RUN_STDOUT" "agent-failure-stdout-marker" "failed agent captured stdout"
equals "$RUN_STDERR" "agent-failure-stderr-marker" "failed agent captured stderr"
equals "$RUN_OUTPUT" $'agent-failure-stdout-marker\nagent-failure-stderr-marker' "failed agent combined output"
equals "$(cat "$transcript_failure_log")" "$RUN_OUTPUT" "failed agent complete log"
USE_TUI="$old_use_tui"
ok "agent transcript suppression"

tmux_repo="$work/Fancy Repo!"
mkdir -p "$tmux_repo"
tmux_repo="$(cd "$tmux_repo" >/dev/null 2>&1 && pwd -P)"
Expand Down
Loading