feat(core): terminal graphics capability detection (Phase 9 foundation)#271
Conversation
Phase 9's foundation, dependency-free. argus/core/terminal_caps.py detects what the host terminal can do — inline-image graphics protocol (kitty / iterm / sixel), OSC 8 hyperlinks, and 24-bit truecolor — from environment variables alone (no unsolicited escape probing). Fully unit-tested (16 tests). The Console help overlay reports the detected capabilities. Scope, stated plainly: this ships the detection foundation, not raster rendering. Inline pixel images (a textual-image-backed logo / dependency graph / QR) are a capability-gated opt-in that builds on detect_graphics here, with a Unicode/ASCII fallback — deliberately deferred rather than adding a dependency for a marginal win on a supply-chain tool. Also: add "iterm" to the codespell ignore-words list (terminal name, not a typo).
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
🔒 Argus Container Security ScanBranch: 📊 Combined Findings Summary
Scanned: 5 containers | Build Failures: 0 📦 Container Breakdown
🔍 Detailed Findings by Container🚨 cli - 108 vulnerabilities (45 unique)Image: Combined (Deduplicated)
🔷 Trivy Scanner (108 findings, 43 unique)
...and 58 more ⚓ Grype Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Grype ✅ scanner-bandit - 0 vulnerabilities (0 unique)Image: Combined (Deduplicated)
🔷 Trivy Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Trivy ⚓ Grype Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Grype ✅ scanner-mumps - 0 vulnerabilities (0 unique)Image: Combined (Deduplicated)
🔷 Trivy Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Trivy ⚓ Grype Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Grype 🚨 scanner-opengrep - 106 vulnerabilities (49 unique)Image: Combined (Deduplicated)
🔷 Trivy Scanner (106 findings, 48 unique)
...and 56 more ⚓ Grype Scanner (0 findings, 0 unique)✅ No vulnerabilities detected by Grype
|
| 🚨 Critical | 🟡 Medium | 🔵 Low | Total | Unique | |
|---|---|---|---|---|---|
| 0 | 12 | 6 | 0 | 18 | 18 |
🔷 Trivy Scanner (18 findings, 18 unique)
| CVE | Severity | Package | Version | Fixed |
|---|---|---|---|---|
| CVE-2026-32280 | stdlib | v1.26.1 | 1.25.9, 1.26.2 | |
| CVE-2026-32281 | stdlib | v1.26.1 | 1.25.9, 1.26.2 | |
| CVE-2026-32283 | stdlib | v1.26.1 | 1.25.9, 1.26.2 | |
| CVE-2026-33810 | stdlib | v1.26.1 | 1.26.2 | |
| CVE-2026-33811 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-33814 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-39820 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-39823 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-39825 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-39836 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-42499 | stdlib | v1.26.1 | 1.25.10, 1.26.3 | |
| CVE-2026-42504 | stdlib | v1.26.1 | 1.25.11, 1.26.4 | |
| CVE-2026-27145 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.11, 1.26.4 |
| CVE-2026-32282 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.9, 1.26.2 |
| CVE-2026-32288 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.9, 1.26.2 |
| CVE-2026-32289 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.9, 1.26.2 |
| CVE-2026-39826 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.10, 1.26.3 |
| CVE-2026-42507 | 🟡 MEDIUM | stdlib | v1.26.1 | 1.25.11, 1.26.4 |
⚓ Grype Scanner (0 findings, 0 unique)
✅ No vulnerabilities detected by Grype
Generated by Argus
3d4d3ec
into
feat/tui-explorer-and-scan-runner
Description
Phase 9 — the graphics foundation, dependency-free.
argus/core/terminal_caps.pydetects what the host terminal can do (inline-image protocol, OSC 8 hyperlinks, truecolor) from environment variables, and the Console help overlay now reports it. Targets the integration branch (feat/tui-explorer-and-scan-runner, PR #261).Scope, stated plainly: this ships the detection foundation, not raster rendering. Inline pixel images (a
textual-image-backed logo / dependency graph / QR) are a capability-gated opt-in that builds ondetect_graphics, with a Unicode/ASCII fallback. They'd add a dependency for a marginal win, so they're deliberately deferred rather than forced onto every user of a supply-chain tool — the dep-conscious default. The roadmap's Phase 9 retains the raster path as the next opt-in.Changes Made
argus/core/terminal_caps.py)Details
terminal_caps.py(UI-free, dep-free):detect_graphics(kitty / iterm / sixel / none),supports_graphics/supports_hyperlinks/supports_truecolor,capability_summary. Env-only — no escape-probing (which would be unsafe unsolicited).DocsScreen) showsgraphics=… · hyperlinks=… · truecolor=…so users know what their terminal supports.Testing
test_terminal_caps.py(16 tests): kitty family (KITTY_WINDOW_ID / xterm-kitty / ghostty / wezterm), iTerm, sixel (foot / mlterm), none-for-plain, hyperlink yes/no (dumb/linux/opt-out), truecolor, summary.viewers/browserfailures are pre-existing + green in CI.)Security Considerations
AI Context Updates (.ai/)
.ai/architecture.yamlupdated (core/terminal_caps.py, both mirror blocks)Checklist
docs/console.md— help shows terminal capabilities)Related Issues
Console epic —
docs/developer/CONSOLE-ROADMAP.md, Phase 9 (foundation; raster rendering deferred as a dep-gated opt-in).