Testing#519
Conversation
Textual's copy_to_clipboard uses OSC 52, which Terminal.app does not honor by default, so the Copy button silently did nothing. Add a _native_clipboard_copy helper that shells out to pbcopy on macOS, clip on Windows, and wl-copy/xclip/xsel on Linux, then falls back to OSC 52. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a JavaScript harvesting + static-analysis skill that other specialist agents consume as their attack surface map. Produces a deterministic js_analysis.md artifact with API endpoints, parameters, secrets, dangerous sinks, source-map recovery, and auth/session touchpoints. Wire into hunter, deep, and standard scan modes as a mandatory first agent. Quick mode runs a lightweight pass (Phases 1-3 only).
Greptile SummaryThis PR introduces a native clipboard helper (
Confidence Score: 3/5The Python change in app.py introduces a subprocess that can write error text directly to the terminal, corrupting the Textual TUI display in certain Linux environments; needs the stdout/stderr fix before merging. The clipboard subprocess runs without suppressing its output streams. On Linux, tools like strix/interface/tui/app.py — specifically the Important Files Changed
Prompt To Fix All With AIFix the following 1 code review issue. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 1
strix/interface/tui/app.py:68-70
The `subprocess.run` call does not suppress `stdout` or `stderr`, so any output emitted by the clipboard tool (e.g., `wl-copy` printing `error: could not connect to display` when `WAYLAND_DISPLAY` is unset, or `xclip` printing `Error: Can't open display` when `DISPLAY` is missing) is written directly to the process's file descriptors. Because Textual owns the terminal in raw/alternate-screen mode, those writes corrupt the TUI display mid-session. Both `wl-copy` and `xclip` can be found by `shutil.which` yet still fail with stderr output if the corresponding display server is unavailable.
```suggestion
proc = subprocess.run(
cmd,
input=text.encode("utf-8"),
check=False,
timeout=2,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
```
Reviews (1): Last reviewed commit: "feat(skills): add js-analysis skill and ..." | Re-trigger Greptile |
| proc = subprocess.run( | ||
| cmd, input=text.encode("utf-8"), check=False, timeout=2 | ||
| ) |
There was a problem hiding this comment.
The
subprocess.run call does not suppress stdout or stderr, so any output emitted by the clipboard tool (e.g., wl-copy printing error: could not connect to display when WAYLAND_DISPLAY is unset, or xclip printing Error: Can't open display when DISPLAY is missing) is written directly to the process's file descriptors. Because Textual owns the terminal in raw/alternate-screen mode, those writes corrupt the TUI display mid-session. Both wl-copy and xclip can be found by shutil.which yet still fail with stderr output if the corresponding display server is unavailable.
| proc = subprocess.run( | |
| cmd, input=text.encode("utf-8"), check=False, timeout=2 | |
| ) | |
| proc = subprocess.run( | |
| cmd, | |
| input=text.encode("utf-8"), | |
| check=False, | |
| timeout=2, | |
| stdout=subprocess.DEVNULL, | |
| stderr=subprocess.DEVNULL, | |
| ) |
Prompt To Fix With AI
This is a comment left during a code review.
Path: strix/interface/tui/app.py
Line: 68-70
Comment:
The `subprocess.run` call does not suppress `stdout` or `stderr`, so any output emitted by the clipboard tool (e.g., `wl-copy` printing `error: could not connect to display` when `WAYLAND_DISPLAY` is unset, or `xclip` printing `Error: Can't open display` when `DISPLAY` is missing) is written directly to the process's file descriptors. Because Textual owns the terminal in raw/alternate-screen mode, those writes corrupt the TUI display mid-session. Both `wl-copy` and `xclip` can be found by `shutil.which` yet still fail with stderr output if the corresponding display server is unavailable.
```suggestion
proc = subprocess.run(
cmd,
input=text.encode("utf-8"),
check=False,
timeout=2,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
```
How can I resolve this? If you propose a fix, please make it concise.- Add per-scan test_log tool (record_test/query_tests/test_log_summary)
persisted to {state_dir}/test_log.json with merge logic, agent_history,
tags, notes; survives --resume via hydrate on runner start
- Wire test_log tools into the base agent toolset and add an
"ENDPOINT TEST MEMORY (REQUIRED)" block to the system prompt so every
agent calls query_tests before testing and record_test after
- Propagate agent_name into child contexts so test_log can attribute
entries to the spawning specialist
- Update scan_modes/{hunter,deep,standard,quick}.md to mandate the
JS Analysis agent and call out the test memory workflow; add a
Test-Coverage Memory section to coordination/root_agent.md
- TUI: add Activity panel (left) showing tool calls for the selected
agent and a Plan/Todos panel (right) reading per-agent todos; wire
refresh into the live-view tick and agent-selection change; rebalance
layout widths in tui_styles.tcss
No description provided.