aboutsummaryrefslogtreecommitdiff
path: root/tests/pi-live.sh
AgeCommit message (Collapse)Author
4 daystest: restore after tmux is stopped the ways a restart or logout stops itIgor Soarez
7 daystest: a rename by another extension (as PiRC's from the phone) is keptIgor Soarez
8 daysname pi sessions automatically, replacing the pi-auto-session-name packageIgor Soarez
8 daysname pi agents by their reported session name, not the terminal title; ↵Igor Soarez
scroll a panel list taller than the screen
8 dayspi: a failed run says so: a 'failed' alert with the error, and the error in ↵Igor Soarez
red until seen
8 dayspi: a dialog during a run is blocked, and a cancelled run is idle, not doneIgor Soarez
10 dayscount pi costs as pi's footer does: compaction and other priced calls, not ↵Igor Soarez
event logs
10 daysshow each pi agent's context use: a meter in the panel and search, text in ↵Igor Soarez
the menu
12 daysshow what pi agents cost today, this week and this month, counting forked ↵Igor Soarez
replies once
14 daysmark forgotten drafts in pi agents' input boxes, and keep them across a ↵Igor Soarez
crash or restore
14 daysreload pi agents on an old extension: versioned extension, control socket, ↵Igor Soarez
menu item and reload-agents
2026-10-27pi: no footer line for the importanceIgor Soarez
it took a line of its own in pi's footer. pi says the level when it is set, and /importance alone shows it; pi clears the old line at /reload.
2026-10-27mark as unread: make an idle agent done again, to come back to itIgor Soarez
like "mark as unread" in mail: an agent you have seen (idle) becomes done again, last among done agents of its importance, with no sound or notification. it stays done until you come back to it: leave its tmux window and return, or jump to it. marked while you look at it, it holds until you look away (`held`); a new turn clears it. only idle agents can be marked. - daemon: `pane.mark_unread` on the hook socket; the watcher applies it after the tick's observations (mark_unread, advance's hold rule). - `dingger unread [--pane]`: refuses done, working, blocked, and panes without an agent; returns once the agent shows as done. - pi: /unread (refused while the agent works or is blocked). - panel: right-click an idle agent in the full list, "Mark as unread". - search: ⌘U or right-click marks the selected idle agent; the footer offers ⌘U when it applies; search stays open. tests: unit (hold, jump, new turn, idle only), e2e step 22 (queue position, hold, look away and back, jump, refusals, no sound, menu, the extension), pi-live in real pi 1.4 (a mark, not a turn: an unknown command would also end done), swift selftest (menu only for idle, footer).
2026-10-26importance: mark an agent high, normal, or lowIgor Soarez
within a status, more important agents are listed first, and so jumped to first; status stays first. a high agent shows a bold ! before its name, a low agent's name is lightly dimmed with "low" on its second line, and it makes no sound (it still notifies and waits in line). in pi, /importance high|normal|low (completes the levels; none once one is typed out, so Enter runs it). the extension saves it in the session as a custom entry (dingger-importance), so /reload, restarts, /resume and restore bring it back; /new starts at normal. it shows a level other than normal in pi's footer, emits dingger:importance { level } for other extensions, and sends it with every report. for other agents, `dingger importance [level] [--pane]`; it refuses a pi that reports itself, whose saved level would win. the daemon stays the one writer of pane state: it writes @dingger_importance (unset for normal), which goes with the agent and survives a daemon restart. `dingger status` marks high and low. tests: e2e step 21 (order, the option, no sound for low, the menu bar, the command, the extension through a harness that now matches pi's extension API), a DINGGER_SOUND seam so sounds are observable, and a status-line check that read the counts once (flaky) now polls. pi-live: /importance in real pi 1.4, its footer and session entry, and the level after a restore; every pi there now uses the test's agent directory (a restored pi read the user's). negative controls fail each part.
2026-10-24tests/pi-live.sh: check a real pi release against dinggerIgor Soarez
runs a real pi binary on a tmux server and dingger daemon of its own, with a fake OpenAI-compatible model (tests/fake-model.py, reply delay set by the prompt) and its own pi agent directory: no network, no credentials, the user's pi untouched. plain shells, and a stop if the panes would not run the pi under test (a login shell's profile puts the user's pi first). it checks identification, the extension's state and session reports, a turn (working, then done), /reload, an extension's blocked event, screen detection for a pi without the extension, restore by session file, and exit. pi 1.4.0 and 1.0.3: 23 of 23 each. a dingger whose extension listens for a renamed event fails it. in both, a pi confirm dialog shows as not blocked: pi tells terminals (OSC 7501, which tmux does not forward) but not extensions.