Merge pull request #61 from outis1one/claude/explore-silent-send-oth4L

Fix PDF decompression, add proper noun detection toggle, bump to 0.9.25
This commit is contained in:
Outis
2026-03-29 17:10:50 -04:00
committed by GitHub
8 changed files with 28 additions and 10 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "Silent Send",
"version": "0.9.23",
"version": "0.9.25",
"description": "Intercepts personal info and substitutes it with user-defined replacements before sending to AI services.",
"browser_specific_settings": {
"gecko": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "Silent Send",
"version": "0.9.23",
"version": "0.9.25",
"description": "Intercepts personal info and substitutes it with user-defined replacements before sending to AI services.",
"permissions": [
"storage",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "silent-send",
"version": "0.9.23",
"version": "0.9.25",
"private": true,
"license": "MIT",
"description": "Browser extension that substitutes personal data before sending to AI services",
+8 -6
View File
@@ -278,7 +278,7 @@
// 4. Auto-detect: scan the FINAL text for unconfigured PII
// Auto-redact if enabled, otherwise just warn
if (settings.autoDetect !== false) {
const warnings = autoDetectPII(finalText, identity);
const warnings = autoDetectPII(finalText, identity, { detectProperNouns: settings.detectProperNouns === true });
if (warnings.length > 0) {
// Auto-redact detected PII in the outbound text
if (settings.autoRedactDetected !== false) {
@@ -454,7 +454,7 @@
});
}
function autoDetectPII(text, ident) {
function autoDetectPII(text, ident, opts) {
if (!text || text.length < 5) return [];
const hasContext = CONTEXT_WORDS_RE.test(text);
@@ -483,9 +483,11 @@
}
// Proper noun heuristic — catch names, company names, project names
// that aren't configured in identity
const properNouns = detectProperNouns(text, configured);
findings.push(...properNouns);
// that aren't configured in identity (opt-in, off by default)
if (opts?.detectProperNouns) {
const properNouns = detectProperNouns(text, configured);
findings.push(...properNouns);
}
// Deduplicate by value
const seen = new Set();
@@ -1441,7 +1443,7 @@
return;
}
const warnings = autoDetectPII(text, identity);
const warnings = autoDetectPII(text, identity, { detectProperNouns: settings.detectProperNouns === true });
if (warnings.length > 0) {
showPreSendWarning(warnings, target);
} else if (preSendWarningEl) {
+1 -1
View File
@@ -265,7 +265,7 @@ const DocumentScanner = {
const compressed = new Uint8Array(
[...streamData].map(c => c.charCodeAt(0))
);
const decompressed = this._inflateSync(compressed);
const decompressed = await this._inflateSync(compressed);
if (decompressed) {
content = new TextDecoder('latin1').decode(decompressed);
}
+1
View File
@@ -36,6 +36,7 @@ const DEFAULT_SETTINGS = {
revealMode: false,
secretScanning: true,
autoDetect: true,
detectProperNouns: false,
autoRedactDetected: true,
autoAddDetected: true,
maxLogEntries: 200,
+10
View File
@@ -67,6 +67,16 @@
<span class="toggle-slider"></span>
</label>
</div>
<div class="setting-row">
<div>
<label>Flag capitalized words as possible names/orgs</label>
<p class="setting-desc">Warn when capitalized words mid-sentence may be names, company names, or project names not in your configured identity (high false-positive rate)</p>
</div>
<label class="toggle">
<input type="checkbox" id="detectProperNouns">
<span class="toggle-slider"></span>
</label>
</div>
<div class="setting-row">
<div>
<label>Auto-redact detected PII on send</label>
+5
View File
@@ -22,6 +22,7 @@ document.addEventListener('DOMContentLoaded', async () => {
$('#showHighlights').checked = settings.showHighlights || false;
$('#secretScanning').checked = settings.secretScanning !== false;
$('#autoDetect').checked = settings.autoDetect !== false;
$('#detectProperNouns').checked = settings.detectProperNouns === true;
$('#autoRedactDetected').checked = settings.autoRedactDetected !== false;
$('#autoAddDetected').checked = settings.autoAddDetected !== false;
$('#maxLogEntries').value = settings.maxLogEntries || 200;
@@ -273,6 +274,10 @@ document.addEventListener('DOMContentLoaded', async () => {
await Storage.saveSettings({ autoDetect: e.target.checked });
});
$('#detectProperNouns').addEventListener('change', async (e) => {
await Storage.saveSettings({ detectProperNouns: e.target.checked });
});
$('#autoRedactDetected').addEventListener('change', async (e) => {
await Storage.saveSettings({ autoRedactDetected: e.target.checked });
});