Skip to content

feat(privacy): blocking consent gate for env-fallback LLM API keys#1233

Merged
igorls merged 1 commit intodevelopfrom
feat/privacy-consent-prompt
Apr 27, 2026
Merged

feat(privacy): blocking consent gate for env-fallback LLM API keys#1233
igorls merged 1 commit intodevelopfrom
feat/privacy-consent-prompt

Conversation

@milla-jovovich
Copy link
Copy Markdown
Collaborator

Adds api_key_source provenance ('flag' | 'env' | None) to LLMProvider so cmd_init can distinguish a key passed via --llm-api-key (explicit opt-in) from one silently picked up via OPENAI_API_KEY / ANTHROPIC_API_KEY shell env (stray credential).

When the endpoint is external AND api_key_source == 'env', init now prints a blocking [y/N] prompt before any data is sent. Anything other than 'y' drops the LLM and falls back to heuristics-only.

Adds --accept-external-llm flag for CI / non-interactive bypass.

Completes the UX gap in #1224: the URL-based warning was informational and init kept running, so a user who didn't notice the line had already leaked. The consent prompt is the actual gate; explicit flag-passed keys remain treated as already-consented.

What does this PR do?

How to test

Checklist

  • Tests pass (python -m pytest tests/ -v)
  • No hardcoded paths
  • Linter passes (ruff check .)

Adds api_key_source provenance ('flag' | 'env' | None) to LLMProvider
so cmd_init can distinguish a key passed via --llm-api-key (explicit
opt-in) from one silently picked up via OPENAI_API_KEY / ANTHROPIC_API_KEY
shell env (stray credential).

When the endpoint is external AND api_key_source == 'env', init now
prints a blocking [y/N] prompt before any data is sent. Anything other
than 'y' drops the LLM and falls back to heuristics-only.

Adds --accept-external-llm flag for CI / non-interactive bypass.

Completes the UX gap in #1224: the URL-based warning was informational
and init kept running, so a user who didn't notice the line had already
leaked. The consent prompt is the actual gate; explicit flag-passed keys
remain treated as already-consented.
@igorls igorls merged commit 4ffd0bd into develop Apr 27, 2026
6 checks passed
jphein added a commit to jphein/mempalace that referenced this pull request Apr 30, 2026
… update sync status

MemPalace#1262 (Legion345) is path 1 of MemPalace#1089's "interim guard PR" — adds
get-then-create wrapping in chromadb backend. Shepherding via review
comment posted 2026-04-30. Once it merges, fork-ahead Row 15 clears
via develop sync.

MemPalace#1286 (our PR, filed 2026-04-30) is the _get_collection retry-once +
log-on-failure improvement. Adjacent to Row 15 — when both MemPalace#1262 and
MemPalace#1286 land, the _get_collection path is both crash-resilient and
self-healing.

Status line refreshed: develop has moved to fdfaf01 (Gemini CLI
normalize MemPalace#1234, privacy consent MemPalace#1233, both 2026-04-27); next sync
will clear those plus row 15 once MemPalace#1262 merges.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
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.

2 participants