Skip to content

feat(console): in-app init wizard (Initialize screen)#265

Merged
eFAILution merged 1 commit into
feat/tui-explorer-and-scan-runnerfrom
feat/console-init-wizard
Jun 13, 2026
Merged

feat(console): in-app init wizard (Initialize screen)#265
eFAILution merged 1 commit into
feat/tui-explorer-and-scan-runnerfrom
feat/console-init-wizard

Conversation

@eFAILution

Copy link
Copy Markdown
Collaborator

Description

Phase 3 of the Console roadmap: an in-app Initialize wizard. The home menu's Initialize entry now opens an InitScreen instead of shelling out to argus init. This PR targets the Console integration branch (feat/tui-explorer-and-scan-runner, PR #261), not main — it merges in once green so the full Console can be reviewed as one solution.

Changes Made

  • Modified existing scanner/workflow
  • Updated documentation
  • Added new scanner/workflow
  • Fixed bug
  • Other (please specify): new Console wizard screen + UI-free wizard core

Details

  • InitScreen (argus/viewers/terminal/console.py): detect → show what was found + a one-line tool-readiness summary → list proposed scanners as toggles → write argus.yml. w writes; r writes and hands off to the Phase-0 scan runner for the first scan; esc cancels. An existing argus.yml requires a confirming second keypress before overwrite (mirrors argus init --force) — never a silent clobber.
  • init_wizard.py (new, argus/viewers/terminal/): UI-free, textual-free frontend over the pure argus.init functions — no detection logic is reimplemented.
    • build_plan(root) calls detect_project / generate_config / _extract_enabled_scanners / _check_local_readiness and returns an InitPlan (detected categories, proposed scanners, generated YAML, readiness).
    • write_config enforces the overwrite guard (FileExistsError unless force).
  • Reuse, not duplication: scanner toggles reuse the Phase-2 config_editor over the generated YAML, so toggling and the comment-preserving write share one implementation.
  • argus.init.SIGNAL_LABELS: the signal→label map was promoted to a module-level constant so the CLI summary and the wizard render identical names.
  • Dead code removed: with Init in-app, the _HANDOFF_INIT sentinel and its subprocess hand-off in launch() are gone (the unused sys import too).

Testing

  • Unit tests added/updated
  • Integration tests added/updated
  • Manual testing performed

Test Results

  • test_init_wizard.py (new): 24 tests covering detected-category mapping, plan building (python project / empty dir / detect=False), readiness formatting, summary line, and the write_config overwrite guard.
  • test_console.py (updated): init now routes through _open_init (pushes InitScreen, no hand-off); added InitScreen construction coverage.
  • Manual: real-Textual Pilot smoke tests confirmed detect → toggle (recompose) → write end-to-end, and the existing-config two-keypress overwrite arm.
  • Full suite: 4051 passed, 21 skipped, coverage gate met (≥80%). The 3 local-only viewers/browser failures are the known pre-existing fastapi-0.136.1 template diffs (green in CI), unrelated to this change.

Security Considerations

  • No security impact

Security Details

The wizard writes a generated/validated argus.yml and never overwrites an existing file without an explicit second confirmation. No code execution; detection is the same read-only logic argus init already runs.

AI Context Updates (.ai/)

  • .ai/architecture.yaml updated (Init wizard + init_wizard.py noted under viewers/terminal/)
  • .ai/workflows.yaml updated
  • .ai/decisions.yaml updated
  • .ai/errors.yaml updated

Checklist

  • Code follows project style guidelines
  • Documentation updated (docs/console.md Initialize section, docs/developer/CONSOLE-ROADMAP.md Phase 3 → shipped)
  • Changelog updated (handled at release)
  • All tests pass
  • Reviewed by at least one maintainer
  • Reviewed CONTRIBUTING.md guidelines

Related Issues

Part of the Console epic (docs/developer/CONSOLE-ROADMAP.md, Phase 3).

Screenshots/Logs (if applicable)

Wizard is keyboard-driven (enter toggle · w write · r write & scan · esc cancel). It shows the detected project signals, a readiness line, and the proposed scanner toggles.

Phase 3 of the Console roadmap. The home menu's Initialize entry now opens
an in-app wizard (InitScreen) instead of shelling out to `argus init`: it
detects the project, shows what it found plus a tool-readiness line, lists
the proposed scanners as toggles, and writes argus.yml. `w` writes; `r`
writes and hands straight to the Phase-0 scan runner for the first scan;
`esc` cancels. An existing argus.yml requires a confirming second keypress
before it's overwritten — mirroring `argus init`'s --force guard, never a
silent clobber.

The wizard reimplements no detection logic. init_wizard.py is a UI-free,
textual-free frontend over the pure functions in argus.init
(detect_project, generate_config, _extract_enabled_scanners,
_check_local_readiness): build_plan returns an InitPlan (detected
categories, proposed scanners, generated YAML, readiness) and write_config
enforces the overwrite guard. Scanner toggles reuse the Phase-2
config_editor over the generated YAML, so toggling and the
comment-preserving write share one implementation.

The signal-to-label map moves to argus.init.SIGNAL_LABELS so the CLI
summary and the wizard render identical names. With Init now in-app, the
_HANDOFF_INIT sentinel and its subprocess hand-off in launch() are removed.
@codecov

codecov Bot commented Jun 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown
Contributor

🔒 Argus Container Security Scan

Branch: feat/console-init-wizard
Commit: c960a49

📊 Combined Findings Summary

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low 📦 Total 🔢 Unique
3 82 79 67 231 231

Scanned: 5 containers | Build Failures: 0

📦 Container Breakdown

Container Image 🚨 Crit ⚠️ High 🟡 Med 🔵 Low Total Unique Status
cli ghcr.io/huntridge-labs/argus/cli:c960a49811c71f4193276686c8424a8dbc4c4c86 1 62 41 4 108 108
scanner-bandit ghcr.io/huntridge-labs/argus/scanner-bandit:c960a49811c71f4193276686c8424a8dbc4c4c86 0 0 0 0 0 0
scanner-mumps ghcr.io/huntridge-labs/argus/scanner-mumps:c960a49811c71f4193276686c8424a8dbc4c4c86 0 0 0 0 0 0
scanner-opengrep ghcr.io/huntridge-labs/argus/scanner-opengrep:c960a49811c71f4193276686c8424a8dbc4c4c86 2 8 32 63 105 105
scanner-supply-chain ghcr.io/huntridge-labs/argus/scanner-supply-chain:c960a49811c71f4193276686c8424a8dbc4c4c86 0 12 6 0 18 18

🔍 Detailed Findings by Container

🚨 cli - 108 vulnerabilities (45 unique)

Image: ghcr.io/huntridge-labs/argus/cli:c960a49811c71f4193276686c8424a8dbc4c4c86

Combined (Deduplicated)

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low Total Unique
1 62 41 4 108 45
🔷 Trivy Scanner (108 findings, 43 unique)
CVE Severity Package Version Fixed
CVE-2025-68121 🚨 CRITICAL stdlib v1.24.11 1.24.13, 1.25.7, 1.26.0-rc.3
CVE-2026-32280 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-32281 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-32283 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-33810 ⚠️ HIGH stdlib v1.26.1 1.26.2
CVE-2026-33811 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-33814 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39820 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39823 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39825 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39836 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-42499 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-42504 ⚠️ HIGH stdlib v1.26.1 1.25.11, 1.26.4
CVE-2025-61726 ⚠️ HIGH stdlib v1.24.11 1.24.12, 1.25.6
CVE-2026-25679 ⚠️ HIGH stdlib v1.24.11 1.25.8, 1.26.1
CVE-2026-32280 ⚠️ HIGH stdlib v1.24.11 1.25.9, 1.26.2
CVE-2026-32281 ⚠️ HIGH stdlib v1.24.11 1.25.9, 1.26.2
CVE-2026-32283 ⚠️ HIGH stdlib v1.24.11 1.25.9, 1.26.2
CVE-2026-33811 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-33814 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-39820 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-39823 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-39825 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-39836 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-42499 ⚠️ HIGH stdlib v1.24.11 1.25.10, 1.26.3
CVE-2026-42504 ⚠️ HIGH stdlib v1.24.11 1.25.11, 1.26.4
CVE-2026-46680 ⚠️ HIGH github.com/containerd/containerd/v2 v2.2.2 2.0.9, 2.2.4, 2.3.1
CVE-2026-34040 ⚠️ HIGH github.com/docker/docker v28.5.2+incompatible 29.3.1
CVE-2026-41567 ⚠️ HIGH github.com/docker/docker v28.5.2+incompatible N/A
CVE-2026-42306 ⚠️ HIGH github.com/docker/docker v28.5.2+incompatible N/A
CVE-2026-44973 ⚠️ HIGH github.com/go-git/go-billy/v5 v5.8.0 5.9.0
CVE-2026-45022 ⚠️ HIGH github.com/go-git/go-git/v5 v5.18.0 5.19.0
CVE-2026-33811 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-33814 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39820 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39823 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39825 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39836 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-42499 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-42504 ⚠️ HIGH stdlib v1.26.2 1.25.11, 1.26.4
CVE-2026-46680 ⚠️ HIGH github.com/containerd/containerd/v2 v2.2.2 2.0.9, 2.2.4, 2.3.1
CVE-2026-44973 ⚠️ HIGH github.com/go-git/go-billy/v5 v5.8.0 5.9.0
CVE-2026-45022 ⚠️ HIGH github.com/go-git/go-git/v5 v5.18.0 5.19.0
CVE-2026-33811 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-33814 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39820 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39823 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39825 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-39836 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3
CVE-2026-42499 ⚠️ HIGH stdlib v1.26.2 1.25.10, 1.26.3

...and 58 more

⚓ Grype Scanner (0 findings, 0 unique)

✅ No vulnerabilities detected by Grype

scanner-bandit - 0 vulnerabilities (0 unique)

Image: ghcr.io/huntridge-labs/argus/scanner-bandit:c960a49811c71f4193276686c8424a8dbc4c4c86

Combined (Deduplicated)

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low Total Unique
0 0 0 0 0 0
🔷 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: ghcr.io/huntridge-labs/argus/scanner-mumps:c960a49811c71f4193276686c8424a8dbc4c4c86

Combined (Deduplicated)

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low Total Unique
0 0 0 0 0 0
🔷 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: ghcr.io/huntridge-labs/argus/scanner-opengrep:c960a49811c71f4193276686c8424a8dbc4c4c86

Combined (Deduplicated)

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low Total Unique
2 8 32 63 106 49
🔷 Trivy Scanner (106 findings, 48 unique)
CVE Severity Package Version Fixed
CVE-2026-42496 🚨 CRITICAL perl-base 5.40.1-6 N/A
CVE-2026-8376 🚨 CRITICAL perl-base 5.40.1-6 N/A
CVE-2025-69720 ⚠️ HIGH libncursesw6 6.5+20250216-2 N/A
CVE-2025-69720 ⚠️ HIGH libtinfo6 6.5+20250216-2 N/A
CVE-2025-69720 ⚠️ HIGH ncurses-base 6.5+20250216-2 N/A
CVE-2025-69720 ⚠️ HIGH ncurses-bin 6.5+20250216-2 N/A
CVE-2026-42497 ⚠️ HIGH perl-base 5.40.1-6 N/A
CVE-2026-48959 ⚠️ HIGH perl-base 5.40.1-6 N/A
CVE-2026-48962 ⚠️ HIGH perl-base 5.40.1-6 N/A
CVE-2026-9538 ⚠️ HIGH perl-base 5.40.1-6 N/A
CVE-2026-27456 🟡 MEDIUM bsdutils 1:2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM bsdutils 1:2.41-5 N/A
CVE-2026-27456 🟡 MEDIUM libblkid1 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM libblkid1 2.41-5 N/A
CVE-2026-42250 🟡 MEDIUM libbz2-1.0 1.0.8-6 N/A
CVE-2026-5435 🟡 MEDIUM libc-bin 2.41-12+deb13u3 N/A
CVE-2026-5450 🟡 MEDIUM libc-bin 2.41-12+deb13u3 N/A
CVE-2026-5928 🟡 MEDIUM libc-bin 2.41-12+deb13u3 N/A
CVE-2026-6238 🟡 MEDIUM libc-bin 2.41-12+deb13u3 N/A
CVE-2026-5435 🟡 MEDIUM libc6 2.41-12+deb13u3 N/A
CVE-2026-5450 🟡 MEDIUM libc6 2.41-12+deb13u3 N/A
CVE-2026-5928 🟡 MEDIUM libc6 2.41-12+deb13u3 N/A
CVE-2026-6238 🟡 MEDIUM libc6 2.41-12+deb13u3 N/A
CVE-2026-27456 🟡 MEDIUM liblastlog2-2 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM liblastlog2-2 2.41-5 N/A
CVE-2026-34743 🟡 MEDIUM liblzma5 5.8.1-1 N/A
CVE-2026-27456 🟡 MEDIUM libmount1 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM libmount1 2.41-5 N/A
CVE-2026-27456 🟡 MEDIUM libsmartcols1 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM libsmartcols1 2.41-5 N/A
CVE-2026-27456 🟡 MEDIUM libuuid1 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM libuuid1 2.41-5 N/A
CVE-2026-27456 🟡 MEDIUM login 1:4.16.0-2+really2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM login 1:4.16.0-2+really2.41-5 N/A
CVE-2026-27456 🟡 MEDIUM mount 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM mount 2.41-5 N/A
CVE-2025-15649 🟡 MEDIUM perl-base 5.40.1-6 N/A
CVE-2026-7010 🟡 MEDIUM perl-base 5.40.1-6 N/A
CVE-2026-5704 🟡 MEDIUM tar 1.35+dfsg-3.1 N/A
CVE-2026-27456 🟡 MEDIUM util-linux 2.41-5 N/A
CVE-2026-3184 🟡 MEDIUM util-linux 2.41-5 N/A
CVE-2026-27171 🟡 MEDIUM zlib1g 1:1.3.dfsg+really1.3.1-1+b1 N/A
CVE-2011-3374 🔵 LOW apt 3.0.3 N/A
TEMP-0841856-B18BAF 🔵 LOW bash 5.2.37-2+b9 N/A
CVE-2022-0563 🔵 LOW bsdutils 1:2.41-5 N/A
CVE-2025-14104 🔵 LOW bsdutils 1:2.41-5 N/A
CVE-2017-18018 🔵 LOW coreutils 9.7-3 N/A
CVE-2025-5278 🔵 LOW coreutils 9.7-3 N/A
CVE-2011-3374 🔵 LOW libapt-pkg7.0 3.0.3 N/A
CVE-2022-0563 🔵 LOW libblkid1 2.41-5 N/A

...and 56 more

⚓ Grype Scanner (0 findings, 0 unique)

✅ No vulnerabilities detected by Grype

⚠️ scanner-supply-chain - 18 vulnerabilities (18 unique)

Image: ghcr.io/huntridge-labs/argus/scanner-supply-chain:c960a49811c71f4193276686c8424a8dbc4c4c86

Combined (Deduplicated)

🚨 Critical ⚠️ High 🟡 Medium 🔵 Low Total Unique
0 12 6 0 18 18
🔷 Trivy Scanner (18 findings, 18 unique)
CVE Severity Package Version Fixed
CVE-2026-32280 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-32281 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-32283 ⚠️ HIGH stdlib v1.26.1 1.25.9, 1.26.2
CVE-2026-33810 ⚠️ HIGH stdlib v1.26.1 1.26.2
CVE-2026-33811 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-33814 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39820 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39823 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39825 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-39836 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-42499 ⚠️ HIGH stdlib v1.26.1 1.25.10, 1.26.3
CVE-2026-42504 ⚠️ HIGH 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

@eFAILution eFAILution merged commit e375afe into feat/tui-explorer-and-scan-runner Jun 13, 2026
26 checks passed
@eFAILution eFAILution deleted the feat/console-init-wizard branch June 13, 2026 12:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant