diff options
Diffstat (limited to 'tests/pi-live.sh')
| -rwxr-xr-x | tests/pi-live.sh | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/tests/pi-live.sh b/tests/pi-live.sh index 4ea4caf..6dff42f 100755 --- a/tests/pi-live.sh +++ b/tests/pi-live.sh @@ -169,6 +169,10 @@ expect "and the turn ends" "st agent" done 80 t send-keys -t main:agent -l "half typed" sleep 0.5 expect "a draft: it refuses" "ask_reload" '{"ok":false,"reason":"draft"}' +draft() { t show -pv -t main:agent @dingger_draft 2>/dev/null; } +draft_file() { echo "$D/drafts/$(basename "$(t show -pv -t main:agent @agent_session)").draft"; } +expect "the draft reaches dingger" "draft" "half typed" 30 +expect "and is kept for the session" "cat \"\$(draft_file)\"" "half typed" 30 # Through dingger: refused for the draft, retried until it can. "$DINGGER" reload-agents >"$D/reload.out" expect "reload-agents: not yet" "head -1 $D/reload.out" "reloaded 0 of 1 agent on an old dingger extension" @@ -176,6 +180,8 @@ expect "it says why it waits" "sed -n 2p $D/reload.out" "the other 1 reload once expect "the daemon was told no: a draft" "sed 's/\x1b\[[0-9;]*m//g' $D/daemon.log | grep -c 'reload: not now target=main:agent reason=draft'" 1 30 expect "the draft is untouched" "t capture-pane -p -t main:agent | grep -c 'half typed'" 1 for _ in $(seq 10); do t send-keys -t main:agent BSpace; done +expect "deleted: no draft" "draft" "" 30 +expect "nor its file" "[ -e \"\$(draft_file)\" ] && echo left || echo gone" gone 30 expect "once the input box is empty: reloaded" "t show -pv -t main:agent @dingger_extension 2>/dev/null" "$CURRENT" 150 expect "by the daemon" "reloads reloading" 1 30 expect "a new instance (a new socket)" "[ \"\$(ctl)\" != \"$SOCK1\" ] && [ -S \"\$(ctl)\" ] && echo yes" yes @@ -183,9 +189,13 @@ expect "the old socket is gone" "[ -e \"$SOCK1\" ] && echo left || echo gone" go expect "nothing left to reload" "t show -gv @dingger_outdated 2>/dev/null" 0 30 expect "still done (unseen)" "st agent" done expect "no message reached the model" "grep -c dingger-reload \"\$(t show -pv -t main:agent @agent_session)\"" 0 -type_line agent "slow 1 after" +t send-keys -t main:agent -l "slow 1 after" +expect "typed, then a pause: a draft" "draft" "slow 1 after" 30 +t send-keys -t main:agent Enter expect "it still works: working" "st agent" working 50 expect "and done" "st agent" done 60 +expect "a message sent is no draft" "draft" "" 30 +expect "nor kept" "[ -e \"\$(draft_file)\" ] && echo left || echo gone" gone 30 echo "2. screen detection (pi without the extension)" t send-keys -t main:plain "PI_CODING_AGENT_DIR=$D/agent-plain pi $NO_MCP" Enter @@ -200,6 +210,10 @@ echo "3. restore" SESSION=$(t show -pv -t main:agent @agent_session) latest() { ls "$D"/state/snapshots/*.json 2>/dev/null | tail -1; } expect "the snapshot has the agent's session" "grep -c \"\\\"session\\\": \\\"$SESSION\\\"\" \"\$(latest)\" 2>/dev/null" 1 80 +# A draft left behind when tmux goes away. +# (`\;`: send-keys would end its command at a trailing ;) +t send-keys -t main:agent -l 'an unsent idea\;' +expect "a draft before the crash" "t show -pv -t main:agent @dingger_draft 2>/dev/null" "an unsent idea;" 30 t kill-server expect "the layout becomes the restore candidate" "python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))[\"status\"])' $D/state/restore.json 2>/dev/null" offered 80 "$DINGGER" restore >"$D/restore.out" 2>&1 @@ -208,10 +222,17 @@ expect "resumed 1 of 1 agents" "grep -c '^resumed 1 of 1 agents' $D/restore.out" expect "it runs again, reporting the same session" "t show -pv -t main:agent @agent_session 2>/dev/null" "$SESSION" 150 expect "with its conversation" "t capture-pane -p -t main:agent -S - | grep -c 'slow 3 hello'" 1 50 expect "and its importance" "t show -pv -t main:agent @dingger_importance 2>/dev/null" high 50 +expect "and its draft, back in the input box" "t capture-pane -p -t main:agent | grep -c '^an unsent idea;'" 1 50 +expect "reported again" "t show -pv -t main:agent @dingger_draft 2>/dev/null" "an unsent idea;" 30 echo "4. exit" +LAST_DRAFT=$(draft_file) +expect "its draft is kept" "cat $LAST_DRAFT" "an unsent idea;" +# Deleted, then quit at once: before the input box is read again. +for _ in $(seq 20); do t send-keys -t main:agent BSpace; done t send-keys -t main:agent C-d expect "the agent is gone from the pane" "t show -pv -t main:agent @agent 2>/dev/null" "" 100 +expect "a draft deleted before quitting is not kept" "[ -e $LAST_DRAFT ] && echo left || echo gone" gone 30 echo echo "$PASSES passed, $FAILS failed" |
