feat(desktop): reusable screenshot workflow for agents#826
Merged
Conversation
d0f745b to
727377c
Compare
…tion Agents working on desktop UI changes had no automated way to capture and share visual results. Extends screenshot.mjs with --messages injection so agents can populate the channel timeline before capturing, adds scripts/post-screenshots.sh for hosting PNGs via a shared orphan branch on GitHub, wires up a just desktop-screenshot target that handles build and server lifecycle automatically, and updates AGENTS.md with the full workflow. Signed-off-by: Will Pfleger <wpfleger@block.xyz>
727377c to
7527e16
Compare
Fixes all issues from the crossfire review (3 Claude specialists + Codex + Gemini): - Replace slashed tree paths with flat pr-N-- namespace so git mktree accepts them (was failing on every invocation) - Add PR number validation, channelName format check, and multi-channel rejection with clear error messages - Wrap screenshot.mjs main logic in try/finally for browser cleanup - Warn when --messages and --route are both provided - Use --force-with-lease instead of --force for push safety - Replace literal tabs with printf/explicit $'\t' for robustness - Deduplicate image URL markdown loop in post-screenshots.sh - Always rebuild frontend in just desktop-screenshot for freshness
wpfleger96
added a commit
that referenced
this pull request
Jun 3, 2026
wpfleger96
added a commit
that referenced
this pull request
Jun 3, 2026
wpfleger96
added a commit
that referenced
this pull request
Jun 3, 2026
The justfile `desktop-screenshot` recipe used `cd ..; just desktop-build` which navigated above the worktree root, breaking the subsequent `cd desktop`. The post-screenshots.sh script had two issues: command substitution stripped trailing newlines from printf, concatenating tree entries into a single malformed filename; and the grep filter didn't account for git quoting filenames that contain special characters.
wpfleger96
added a commit
that referenced
this pull request
Jun 3, 2026
Collaborator
Author
Derive GitHub username via `gh api user` and push to `agent-screenshots/<username>` instead of a shared branch. Eliminates cross-developer contention on `--force-with-lease` pushes.
Trim from 67 to 46 lines by removing subheaders, heredoc scaffolding, the Playwright MCP browser note, and verbose explanations. All flags, JSON schema, mock channel list, and post-screenshots usage preserved.
wesbillman
approved these changes
Jun 3, 2026
wesbillman
approved these changes
Jun 3, 2026
michaelneale
added a commit
that referenced
this pull request
Jun 4, 2026
* origin/main: (36 commits) fix: use immutable commit-SHA URLs in screenshot PR comments (#842) feat(mobile+desktop): two-tier Slack-style app icon badge (#802) chore: simplify file-size check to a flat 1000-line limit (#839) fix(desktop): robust emoji picker — unify picker + fix custom emoji in editing, status, reactions (#837) feat(desktop): reusable screenshot workflow for agents (#826) desktop(mesh-llm): let a serving node route a different model (#833) chore(release): release version 0.3.9 (#832) fix: native arbitrary-file download + image context-menu flash (#830) fix(desktop): custom emoji reaction rendering + picker autofocus (#831) Mesh-LLM v1: relay-gated direct-iroh inference between users (WAN) (#822) chore(release): release version 0.3.8 (#829) chore(release): release version 0.3.7 (#825) feat: code block rendering, syntax highlighting, and compose fixes (#803) feat: custom emoji — user-owned NIP-30 sets with a client-side union (#816) Install sprout-cli skill at repo root + fix desktop clippy (#818) fix(desktop): use public re-export path for ensure_client_node_for_model (#824) refactor(desktop): feature-gate mesh-llm-sdk behind optional Cargo feature (#823) fix(desktop): align workflow read/save commands to the frontend contract (#820) fix(desktop): disable mesh-llm auto-build to prevent git config corruption (#819) fix(desktop): clear clippy lints in agents/mesh_llm commands (#817) ... # Conflicts: # Cargo.lock # desktop/scripts/check-file-sizes.mjs # desktop/src-tauri/Cargo.toml # desktop/src/app/AppShell.tsx # desktop/src/app/AppTopChrome.tsx # desktop/src/features/messages/hooks.ts # desktop/src/features/workspaces/useWorkspaceInit.ts # desktop/src/shared/api/tauri.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





Adds tooling so agents working on desktop UI changes can take screenshots and post them to PRs without manual intervention or external image hosting.
The existing
screenshot.mjshelper could only navigate to static routes. For PR #803 we manually wrote custom Playwright scripts to inject messages, take screenshots, and host images via git plumbing — this codifies that ad-hoc process into reusable tooling.desktop/tests/helpers/screenshot.mjswith a--messages <path>option that injects mock messages into the channel timeline (via__SPROUT_E2E_EMIT_MOCK_MESSAGE__) before capturing, with subscription-ready gating, JSON validation, multi-channel rejection, andchannelNameformat checksscripts/post-screenshots.shthat hosts PNGs on a sharedagent-screenshotsorphan branch (flatpr-<N>--namespace, idempotent on re-runs,--force-with-leasefor push safety) and posts agh pr commentwith embedded image URLsjust desktop-screenshottarget that always rebuilds the frontend and manages the preview server lifecycle automaticallytry/finallyfor guaranteed browser cleanup on errors