hermes-agent/hermes_cli/subcommands
JezzaHehn 54f32af4a7 fix(security): require explicit consent before uploading debug logs
`hermes debug share` printed a privacy notice and then uploaded the
report to a public paste service in the same breath — the user never got
to say yes or no. Add a consent gate: an interactive [y/N] prompt, a
--yes/-y flag to skip it, and a hard refusal (exit 1) in non-interactive
contexts (no TTY on stdin) so debug data can't be exposed silently in
scripts/CI.

- New _confirm_upload() helper gates the actual upload after the notice.
- Applied to BOTH upload paths: the public paste.rs path and the --nous
  Nous-S3 path (the latter is a sibling site the original PR missed).
- The /debug slash command passes yes=True (typing /debug is itself the
  consent action, and input() would hang inside prompt_toolkit).
- Rewrote the privacy notice for accuracy: secrets (API keys/tokens/
  passwords) ARE force-redacted before upload; PII (display name,
  platform user ID, verbatim message content, filesystem paths) is NOT,
  and that URL is public.

Fixes #22016.

Co-authored-by: liuhao1024 <liuhao1024@users.noreply.github.com>
2026-07-01 00:38:17 -07:00
..
__init__.py
_shared.py
acp.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
auth.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
backup.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
claw.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
config.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
cron.py revert(cron): return cron job storage to per-profile (reverts #32117 + #50993) (#51116) 2026-06-22 17:53:50 -07:00
dashboard.py test(cli): pin the hermes serve decoupling contract 2026-06-28 22:11:48 -05:00
debug.py fix(security): require explicit consent before uploading debug logs 2026-07-01 00:38:17 -07:00
doctor.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
dump.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
gateway.py fix(gateway): honor --start-now/--start-on-login flags and support non-TTY headless installs 2026-06-28 04:09:54 -07:00
gui.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
hooks.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
import_cmd.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
insights.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
login.py fix(cli): deprecated hermes login fails gracefully for any provider 2026-06-17 12:55:40 +05:30
logout.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
logs.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
mcp.py fix(mcp): auto-recover from invalid_client on stale OAuth client registration 2026-06-26 00:35:27 -07:00
memory.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
model.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
pairing.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
plugins.py feat(plugins): enable-time consent prompt for tool_override grant 2026-06-30 04:00:42 -07:00
postinstall.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
profile.py fix(profile): make clone-from a full source selector 2026-06-13 07:33:58 -07:00
prompt_size.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
security.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
setup.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
skills.py fix(skills-hub): surface per-tap providers (NVIDIA/OpenAI/...) in runtime search (#53191) 2026-06-26 11:04:41 -07:00
slack.py feat(slack): add --no-assistant flag to manifest generation 2026-06-23 11:30:10 -07:00
status.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
tools.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
uninstall.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
update.py fix(update): default pre-update backup to off (#52729) 2026-06-25 16:01:09 -07:00
version.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
webhook.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00
whatsapp.py refactor(cli): extract 25 more subcommand parsers into hermes_cli/subcommands/ 2026-06-07 22:18:14 -07:00