Repository navigation
Redact secrets and personal data from prompts before they reach a cloud provider - #1695
Conversation
…ts (#295) A deterministic filter on every prompt Solenta hands a provider CLI: normal runs (prompt, hand-off, notes, PDF text, memory bootstrap), steers, Ask and /btw. Per-provider level in Settings > Advanced: off (default), secrets, or strict (adds emails, Luhn-valid card numbers, US SSNs and user regexes). Each redacted turn gets an event row naming the rules and counts, never the values. The #394 export redactor now shares the same rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 41297a8e02
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| onSaveSettings: (patch: Partial<AppSettings>) => Promise<AppSettings>; | ||
| }) { | ||
| const pg = settings?.privacyGateway ?? EMPTY; | ||
| const [patternsText, setPatternsText] = useState(() => pg.patterns.join("\n")); |
There was a problem hiding this comment.
Synchronize the pattern draft after settings hydrate
If the Settings modal mounts before the asynchronous settings request completes (or while a retry is pending), this initializer permanently captures an empty pattern list even after settings.privacyGateway.patterns arrives. The textarea then displays blank, and merely focusing and blurring it compares that blank draft with the loaded patterns and saves patterns: [], silently deleting the user's custom redaction rules. Synchronize patternsText when the settings prop hydrates or changes.
Useful? React with 👍 / 👎.
Adds the privacy gateway from #295. It's a deterministic filter (not a prompt) on every prompt Solenta hands a provider CLI, with a separate level for each provider. It's off by default, so nothing changes until you opt in under Settings › Advanced › Privacy gateway.
Closes #295
Changes
offsecrets: API keys and tokens (the guardrail rules), bearer tokens, whole PEM private keys, and this thread's secret-card values (Secret placeholders: orchestrator substitutes real values, agents never see them #289)strict: everything insecrets, plus emails, card numbers (Luhn-checked), US SSNs, and your own regexesthread_send. It also covers steers, Ask, and/btw. Each match becomes[redacted:<rule>].Privacy gateway (strict, grok) redacted 2 items before sending: github-token ×1, email ×1.The row has rules and counts, never values. The transcript keeps the raw prompt you typed.Verification
electron/test/privacy-gateway.test.js:-pprompt is redacted while the transcript keeps the raw text and gets the event rowtest/settingsModal.test.tsxfor the editor's saves. The settings modal file passes 96/0.CODER_*removed): 4965 pass / 0 fail / 0 cancelled.npm run typecheckandnpx vite buildare clean.Notes for reviewers
workflowEngine) build their own prompts and aren't filtered yet.strict: a 13–19 digit number starting with 3–6 that passes Luhn still gets redacted as a card number. Millisecond timestamps start with 1, so they're safe.claude-opus-5-5 via Claude Code
🤖 Generated with Claude Code