Repository navigation
CodeMap 1.4.0
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 ChatBotagallery {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
zainstalowanegocodemap analyze(wykrywa cykl na próbce). Nazwacodemapw 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
similarityprzy 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 zgit log -Mna 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); APICM.ChatBotbez 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 przezctx; APICM.MindMapbez 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ładekCM.Settings.addTab(key, icon, render)ze stałą kolejnością, wspólne
helpery wCM.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) —
\bw 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ższypackage.json
nad plikiem z polemimports, dokładny klucz albo wzorzec#x/*, warunki jak wexports; cel spoza projektu
(nazwa pakietu) bez krawędzi.#xw 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.js899 → ~400 linii; test pilnuje, że lista w UI = układy obsługiwane przezapply(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) iU.escapeText(sam tekst, dla kolorowania
składni) zamiast 8 lokalnych kopii wui.js,chatbot.js,drive.js,repo-hosts.js,mindmap.js,renderer.js.
Bezpieczeństwo — Faza 8
- CSP egzekwowane z
<meta>windex.html(GitHub Pages nie ustawia nagłówków): skrypty tylko z tej strony
i z esm.run / jsDelivr, bez inline /on…=/eval,wasm-unsafe-evaldla WASM,object-src 'none',
base-uri 'self', ramki tylko własne;connect-srccelowo szeroki (dostawcy AI, własna Ollama, API repozytoriów).
Sprawdzone pod polityką: Runner, graf symboli (tree-sitter), rough.js, embeddingi WebLLM (worker zblob:),
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 bezallow-same-origin; „otwórz w nowej karcie" — ta sama strona zamiast dokumentublob:.
runner.htmlw precache service workera, na liście plików serwera dev i wtools/deploy.ps1. - SRI dla tree-sitter:
tools/sri.mjsprzypina SHA-384 dlatree-sitter.js,tree-sitter.wasmi 12 gramatyk
(js/sri.js); worker sprawdza bajty przed wykonaniem (skrypt zblob:, WASM przezwasmBinary/
Language.load(bytes)), tryb bez workera — natywnyintegrity. CI:node tools/sri.mjs --check. deploy/Caddyfile: CSP w nagłówku egzekwowane (+frame-ancestors 'self', bezrunner.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".