SOWA Privacy kehittäjille

Asenna lähdekoodista

SOWA Privacy toimitetaan Chrome Web Storen kautta binääriversiona, mutta lähdekoodi on avoin tarkastelua ja henkilökohtaista käyttöä varten Source-Available-lisenssin (LICENSE) nojalla. Rakentaaksesi ja ladataksesi sen paikallisesti:

git clone https://github.com/Sowa-Privacy/sowa-privacy-chrome-extension.git
cd sowa-privacy-chrome-extension
npm install
npm run build

Avaa sen jälkeen chrome://extensions/, ota käyttöön Kehittäjätila ja napsauta Lataa pakkaamaton ja valitse dist/-kansio.

Kolme raskasta toimittajapakettia

Rakennettu kerran esbuildilla ennen Viten suoritusta, joten tuotantokoonti on täysin omavarainen:

  • web-llm.bundle.js – ~5.4 MB – paikallinen LLM-päättely (valinnainen, käyttäjän aktivoitava).
  • transformers.bundle.js + onnx-wasm/* – ~32 MB – NER-putkiston ajoympäristö (valinnainen, käyttäjän aktivoitava).
  • file-parsers.bundle.js + pdf.worker.min.mjs + xlsx-worker.bundle.js – ~2 MB – PDF-, DOCX- ja XLSX-jäsennys tiedostolatauksen sieppaajalle.

Mitä sisällä on

manifest.json                 Chrome MV3 manifest (single source of truth for version)
contentScript.js              MV3 content script entrypoint
service_worker.js             MV3 service worker (stateless)
offscreen.js                  Offscreen doc for NER inference

lib/
  constants.js                DEF_CONFIG, PRESET_PATTERNS, NER_MODELS,
                              WEBLLM_MODELS, INDUSTRY_BLACKLISTS
  pii-core.js                 detectPII, mergeDetectionHits, blacklist + regex pipeline
  ner-detector.js             NER pipeline + diagnostic state surface
  ui-utils.js                 shouldUseRegex / NER / LLM helpers, theme, debounce
  ui_i18n.js                  t() + RESOURCES (4 locales) + applyI18n
  cs/
    owl-guardian.js           Owl widget Shadow DOM, continuous scan, badge counter
    upload-interceptor.js     File drag/drop / file input intercept
    host-matcher.js           contentIntegration.entries pattern matching

tests/unit/                   688 unit tests – keep green
scripts/                      esbuild bundle + zip packaging

Tietosuojatakuut

Nämä ovat koodissa pakotettuja sääntöjä, eivät pelkkiä lupauksia markkinointitekstissä:

  • Ei telemetriaa, ei analytiikkaa, ei ensimmäisen osapuolen palvelinkutsuja – yhdellä kapeasti rajatulla poikkeuksella: käyttäjän omien käyttöoikeuksien tarkistus (yksittäinen todennettu POST-pyyntö kohteeseen /api/entitlements/me, joka palauttaa vain käyttäjän suunnitelmamerkinnät). Välimuistissa tunti. Ei henkilötietoja, ei kehotteita.
  • NER oletuksena POIS PÄÄLTÄ, vain käyttäjän aktivoitavissa – NER-malli on 65 Mt kolmannen osapuolen lataus (HuggingFace). Se ei ala latautua ennen kuin käyttäjä ottaa sen käyttöön asetuksista.
  • Paikallinen LLM oletuksena POIS PÄÄLTÄ, vain käyttäjän aktivoitavissa – sama sääntö. WebLLM-mallit ovat suuria; lataaminen on käyttäjän päätös.
  • Owl on sivustokohtainen – sisältöskripti rekisteröityy <all_urls>-osoitteeseen elinkaarikoukkuja varten, mutta tunnistus, mallin esilämmitys ja owl-widget toimivat vain seitsemällä isännällä, jotka on määritelty contentIntegration.entries-kohteessa (ChatGPT, OpenAI, Claude, Gemini, Copilot, Grok, x.ai).
  • CSP kieltää dynaamisen koodin suorituksen'wasm-unsafe-eval' ONNXia varten on sallittu; 'unsafe-eval' ei ole. Ei Function-merkkijonosta, ei eval-pohjaisia liitännäisiä.
  • Vain Promise-kutsu chrome.*-ohjelmointirajapinnoille – ei takaisinkutsuja, jotka hämärtäisivät virheiden käsittelyä.
  • Tilaton palvelutyöntekijä – MV3 lopettaa aggressiivisesti; pysyvyys sijaitsee chrome.storage-kohteessa, ei moduulin globaalimuuttujissa.

Testit

Testit ovat ensisijainen oikeellisuuden varmistuskeino. Versiosta v1.2.5.x alkaen: 688/689 läpäisee 17 testipaketissa. Uuden koodin on pidettävä nämä vihreinä.

npm run test:unit:nocov   # fast loop during development (~3s)
npm run test:unit          # CI gate with coverage
npm run typecheck          # tsc --noEmit
npm run lint               # eslint

Virheenkorjaukset noudattavat TDD-mallia: kirjoita ensin epäonnistuva testi, korjaa virhe, testi jää regressiovartijana. Todellinen esimerkki toimitettu kohteessa tests/unit/lib/ner-detector.test.js – testi “detect-counter does NOT reset on subsequent init successes” kirjoitettiin ennen vastaavaa korjausta ja tunnisti huonon ensimmäisen toteutusyrityksen.

Osallistu kehitykseen

Viralliseen tietovarastoon tehdyt osallistumiset ovat tervetulleita lisenssiehtojen mukaisesti. Avaa ongelmaraportti tai lähetä vetopyyntö noudattaen CONTRIBUTING.md-tiedoston teknisiä standardeja:

  • Haaraudu main-haarasta. Yksi looginen muutos vetopyyntöä kohden.
  • Commit-viestin käytäntö: type(scope): description (vX.Y.Z.W).
  • Päivitä MIGRATION_LOG.md merkittävistä muutoksista (uudet moduulit, sopimusmuutokset, arkkitehtuurimuutokset).
  • Esitarkistuslista tunnistukseen tai verkkotoimintoihin liittyville vetopyynnöille: ei uusia fetch()-kutsuja ensimmäisen osapuolen palvelimelle, ei uutta telemetriaa, ei raskasta komponenttia automaattisesti käytössä, kaikki tallennettu data merkitään siirtolokiin, kaikki uudet oikeudet ovat perusteltu Chrome Web Store -tarkastajalle.

Vastuullinen ilmoittaminen

Tietoturvahaavoittuvuuksista älä avaa julkisia GitHub-ongelmia. Lähetä yksityiskohtainen raportti sähköpostilla osoitteeseen security@sowaprivacy.ai:

  • Selkeä kuvaus haavoittuvuudesta.
  • Toistamisen vaiheet.
  • Vaikuttunut versio (manifest.json-tiedoston version-kenttä).
  • Vaikutusarvio, jos sellainen on.
  • Ehdotettu korjaus, jos sovellettavissa.

Sitoudumme vahvistamaan raporttisi 72 tunnin kuluessa, toimittamaan tilannevilauksen 7 päivän kuluessa, mainitsemaan sinut julkaisutiedoissa (ellei halua pysyä anonyyminä) ja koordinoimaan julkisen ilmoittamisen ajoituksen kanssasi.

Julkaistu laajuus, esimerkit siitä, mitä pidämme haavoittuvuutena, ja Hall of Fame löytyvät tietovaraston juuressa olevasta SECURITY.md-tiedostosta.