Skip to content

CodeMap 1.4.0

Choose a tag to compare

@RaCzKoViC RaCzKoViC released this 27 Sep 09:25
· 45 commits to main since this release

Najważniejsze / Highlights: egzekwowane CSP (także na GitHub Pages) z Runnerem w osobnej stronie w piaskownicy, SRI dla tree-sitter (weryfikacja SHA-384 przed wykonaniem), podział chatbot.js / settings.js / mindmap.js (−2200 linii w największych plikach), testy renderera i logiki ChatBota (444 testy), galeria 9 przykładowych repozytoriów z trasą po kodzie, wybór PR z listy otwartych, package.json#imports, zmiany nazw z edycją w historii git, wersjonowanie ustawień, paczka npm CLI gotowa do publikacji.

Jakość własna i bezpieczeństwo (faza 8): egzekwowane CSP, SRI, podział trzech największych plików, testy renderera
i ChatBota, dług z faz 1–3; galeria przykładów, paczka npm CLI; wybór PR z listy (faza 5) — docs/ROADMAP.md.

Dodane — Faza 5 (dokończenie)

  • Wybór PR z listy: okno „Przegląd PR…" pokazuje otwarte pull / merge requesty repozytorium (GitRemote.listPRs — GitHub,
    GitLab, Bitbucket, jedno zapytanie, najświeższe pierwsze) z autorem, czasem i oznaczeniem szkicu; kliknięcie uruchamia
    analizę. Sprawdzone na preactjs/preact (24 otwarte PR); test na podstawionym fetch dla trzech hostingów.

Dodane — Faza 8 (społeczność)

  • Galeria przykładowych repozytoriów (js/gallery.js): 9 małych projektów open source w 7 językach (Express,
    Preact, ky, petite-vue, Flask, Gin, serde json, Gson, Rake — 53–313 plików), karty z opisem, liczbą plików
    i językiem; „Otwórz" (deep-link #repo=, z podkatalogiem dla Flask / Gson / Rake), „🧭 Z trasą" (po wczytaniu
    trasa automatyczna), kopiowanie linku. Wejścia: „Przykłady" na ekranie startowym, Wczytaj → „Przykładowe
    repozytoria…", akcja ChatBota gallery {repo?, tour?}. Sprawdzone na petite-vue z GitHuba: 53 pliki, trasa 7 kroków.
    Tarcza obrotu chowa się, gdy trasa jest aktywna (nachodziła na kartę kroku).

  • Paczka npm CLI gotowa do publikacji (tools/npm-pack.mjs, npm run npm-pack -- --name @zakres/codemap): CLI + tylko
    17 modułów analizy (29 plików, 167 KB), npm pack, instalacja tarballa w pustym projekcie i uruchomienie
    zainstalowanego codemap analyze (wykrywa cykl na próbce). Nazwa codemap w npm jest zajęta — publikacja pod
    zakresem właściciela (npm publish dist/npm/<plik>.tgz --access public).

Zmienione — Faza 8 (jakość własna)

  • Historia git: zmiana nazwy z edycją (jak git log -M, próg 50 %) — pary usunięty × dodany w commicie porównywane
    po liniach (wielozbiór skrótów, bez białych znaków; tylko tekst ≤ 1 MB), zachłannie od najlepszej pary; pole
    similarity przy R. Autorzy, zmiany i hotspoty idą za plikiem także po przeniesieniu z edycją. Limity: 400 par
    na commit, 4000 odczytów blobów na historię. Test: zbiór zmian nazw zgodny z git log -M na repozytorium testowym.
  • Wersjonowanie ustawień (js/prefs.js, codemap_settings._v = 2): migracja przy odczycie — _menuTint → _menuRgb,
    układ spoza listy (także 20 usuniętych) → pack, pola po usuniętych kontrolkach wypadają; dotyczy też bloba z synchronizacji
    z innego urządzenia. Sprawdzone na starym blobie w przeglądarce; 3 testy.
  • Podział chatbot.js (1373 → 694 linie): chatbot-strings.js (teksty PL/EN), chatbot-core.js (CM.ChatBotCore — logika
    bez DOM: katalog narzędzi, prompty, parsowanie i walidacja akcji, / komendy, intentFallback), chatbot-render.js
    (markdown, wiadomości, źródła, kroki agenta, menu /, uchwyty okna); API CM.ChatBot bez zmian; 28 testów logiki.
  • Podział mindmap.js (1707 → 719 linii): mindmap-strings.js, mindmap-templates.js (16 ramek, 34 diagramy, miniatury),
    mindmap-layout.js (algorytmy układu, okno „Schemat układu"), mindmap-io.js (Markdown w obie strony, .mindmap.json,
    SVG/PNG, migawki), mindmap-ui.js (widżety); stan przekazywany jawnie przez ctx; API CM.MindMap bez zmian;
    Markdown, SVG i pozycje węzłów identyczne jak przed podziałem; 16 testów (każdy diagram i ramka, round-trip Markdown).
  • Podział settings.js (946 → 392 linie): settings-strings.js, settings-ai.js (zakładka AI z RAG), settings-docs.js
    (Specyfikacja, Instrukcja); rejestr zakładek CM.Settings.addTab(key, icon, render) ze stałą kolejnością, wspólne
    helpery w CM.Settings.kit; HTML wszystkich 23 widoków zakładek identyczny jak przed podziałem; 10 testów.
  • Poprawka: „pokaż hotspoty" / „zmień motyw…" wykonują się od razu (bez modelu) — \b w wyrażeniu JS nie widział granicy
    słowa po „ż" / „ń"; teraz granice z klasami Unicode (\p{L}).
  • Analiza: package.json#imports (subpath imports Node, import x from '#utils/log') — najbliższy package.json
    nad plikiem z polem imports, dokładny klucz albo wzorzec #x/*, warunki jak w exports; cel spoza projektu
    (nazwa pakietu) bez krawędzi. #x w JS nie jest już odrzucany jako kotwica (w HTML / CSS nadal jest).
  • Usunięte 20 układów nieosiągalnych z interfejsu, ChatBota i linków (tree, radial, grid, honeycomb, vortex…):
    layouts.js 899 → ~400 linii; test pilnuje, że lista w UI = układy obsługiwane przez apply (bez martwych
    i brakujących). Zapisany widok z usuniętym układem przywraca się z bieżącym (nieznana nazwa jest pomijana).
  • Testy renderera (test/renderer.test.mjs, 9): kamera świat ↔ ekran przy obrocie i pochyleniu, pamięć macierzy,
    przybliżanie z punktem pod kursorem, trafianie węzłów (billboard przy pochyleniu) i krawędzi (prosta / łuk), fit
    z panelami, wybór backendu bez WebGL, rysowanie na atrapie kontekstu, eksport SVG z escapowaniem.
  • Escapowanie HTML z jednego miejsca: U.escapeHtml (tekst i atrybuty) i U.escapeText (sam tekst, dla kolorowania
    składni) zamiast 8 lokalnych kopii w ui.js, chatbot.js, drive.js, repo-hosts.js, mindmap.js, renderer.js.

Bezpieczeństwo — Faza 8

  • CSP egzekwowane z <meta> w index.html (GitHub Pages nie ustawia nagłówków): skrypty tylko z tej strony
    i z esm.run / jsDelivr, bez inline / on…= / eval, wasm-unsafe-eval dla WASM, object-src 'none',
    base-uri 'self', ramki tylko własne; connect-src celowo szeroki (dostawcy AI, własna Ollama, API repozytoriów).
    Sprawdzone pod polityką: Runner, graf symboli (tree-sitter), rough.js, embeddingi WebLLM (worker z blob:),
    Ollama, renderer WebGL — zero naruszeń. Rozszerzenie VS Code usuwa tę metę (ma własną z nonce).
  • Runner przez runner.html: <iframe srcdoc> dziedziczyłby CSP aplikacji, więc kod z ChatBota trafia przez
    postMessage (po sygnale „ready") do strony pośredniej z własną polityką, a tam do zagnieżdżonej ramki
    w piaskownicy bez allow-same-origin; „otwórz w nowej karcie" — ta sama strona zamiast dokumentu blob:.
    runner.html w precache service workera, na liście plików serwera dev i w tools/deploy.ps1.
  • SRI dla tree-sitter: tools/sri.mjs przypina SHA-384 dla tree-sitter.js, tree-sitter.wasm i 12 gramatyk
    (js/sri.js); worker sprawdza bajty przed wykonaniem (skrypt z blob:, WASM przez wasmBinary /
    Language.load(bytes)), tryb bez workera — natywny integrity. CI: node tools/sri.mjs --check.
  • deploy/Caddyfile: CSP w nagłówku egzekwowane (+ frame-ancestors 'self', bez runner.html),
    X-Frame-Options: SAMEORIGIN (DENY blokowałby Runnera), report-only z wąską listą hostów zostaje do obserwacji.
  • Testy: SRI (manifest, podmiana, adres spoza listy), webview VS Code (jedna polityka), krok smoke „CSP + Runner".