fix(tui-gateway): preserve skill install review - #38688
Conversation
|
Thanks for identifying this TUI-specific trust-boundary gap. The premise still holds on current main: The proposed inspect-only response removes the gateway-side installer call rather than attempting to prompt through the TUI transport. That fits the stated browse/inspect-only remediation and covers both current TUI callers: Automated hermes-sweeper review. |
Make the non-interactive TUI gateway install route inspect-only so it cannot call the installer with review and confirmation disabled. Return an explicit review-required, installed-false result with skill metadata, and render that result truthfully in both TUI callers without claiming installation is underway or treating the required review as an error.
f5e42bf to
7df2e41
Compare
|
Rebased and refreshed onto current |
|
CI retry receipt
Source behavior is unchanged by the retry commit; the PR remains open and mergeable. |
Summary
The TUI gateway's non-interactive
skills.manage installaction is now inspect-only. It no longer invokesdo_install(..., skip_confirm=True)with a silent console, so a TUI or local RPC client cannot move third-party skill code into the live skills directory without the operator-visible scan, review, and confirmation performed by the interactive CLI.Instead, the gateway returns a truthful result:
installed: falsestatus: review_requiredreview_required: trueSKILL.mdpreview when availableBoth TUI callers preserve that contract. The slash command shows a review panel and no longer says installation is underway; the Skills Hub keeps the overlay open, renders the preview and review notice, and does not label the expected review requirement as an error.
Root cause
The TUI route used the CLI installer as a non-interactive shortcut, hardcoding
skip_confirm=Trueand discarding all console output. That suppressed the scan report, disclaimer, and confirmation prompt while still allowing quarantine content to be installed.Validation
scripts/run_tests.sh tests/tui_gateway/test_protocol.py -q— 84 passednpm run check --workspace ui-tui— build, typecheck, and full Vitest suite passed (1,208 passed, 1 skipped)git diff --check origin/main...HEAD— passedRebased onto
mainat477c08b44766ace8b890faa72bf82ecbcf2b3ba8.Head:
7df2e41a0366bb0efde32996c2a5b7646545abde.Closes #38687