# Dziennik sesji agentów — GEMA-0 APEX **Wersja projektu:** `10.1.0` **Protokół:** [03_AGENT_PROTOCOL.md](03_AGENT_PROTOCOL.md) Nowe wpisy **zawsze na górze** (pod separatorem). Najstarsze wpisy można skracać po uzgodnieniu z właścicielem — nie kasuj historii bez pytania. --- ### 2026-06-02 — React+Vite: npm ci→install fallback, healthy node_modules, systempos fix - **Wersja:** 10.1.0 - **Pliki:** `backend/lib/reactViteProvisioning.mjs`, `backend/lib/environmentProvisioner.mjs`, `workspaces/systempos/src/*`, testy provisioning - **Co zrobiono:** `runWorkspaceNpmInstall` (EPERM/EBUSY → `npm install`); `reactViteNodeModulesHealthy` — provision nie pomija install przy pustym plugin-react; naprawa App/KdsDashboard/useOrders/OrderCard; `systempos` `npm run build` OK. - **Weryfikacja:** `node --test backend/tests/lib/reactViteProvisioning.test.mjs`; `npm run build` w workspaces/systempos. ### 2026-06-02 — Swarm: SECTION 2b in-file consolidation + reactViteStackRules - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/reactViteStackRules.mjs`, `backend/ai/prompts/swarmSystem.mjs`, `backend/tests/ai/shotgunSwarm.test.mjs` - **Co zrobiono:** `SWARM_COMPONENT_CONSOLIDATION_RULES` (inline Button/Card, mock w pliku widoku, brak wymyślonych importów); SECTION 2b w promptcie browser; `SWARM_MISSION_ONE_FILE_RULE` doprecyzowany; testy shotgunSwarm. - **Weryfikacja:** `node --test backend/tests/ai/shotgunSwarm.test.mjs` — OK. ### 2026-06-02 — Oraculum: SECTION 2d konsolidacja komponentów (task granularity) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/oraculumSystem.mjs`, `backend/tests/ai/oraculum.test.mjs` - **Co zrobiono:** SECTION 2d — GROUPING (bez mikro Button/Card), limit 3–5 misji FE, single source of truth (mock/stan w pliku widoku); SECTION 1/2c — kolejność misji bez „leaf micro-files”. - **Weryfikacja:** `node --test backend/tests/ai/oraculum.test.mjs` — OK. ### 2026-06-02 — React+Vite: twarde szablony + auto-build gate (provisioning) - **Wersja:** 10.1.0 - **Pliki:** `backend/lib/reactViteProvisioning.mjs`, `backend/lib/mechanicalProvisioning.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/lib/environmentProvisioner.mjs`, `backend/ai/oraculum.mjs`, `backend/ai/prompts/oraculumSystem.mjs`, `backend/tests/lib/reactViteProvisioning.test.mjs` - **Co zrobiono:** `stack_tags` react+vite; `injectReactViteBoilerplate` (package.json, vite root, index.html, main.jsx); po infra w `executeInfrastructureCommands`; po commicie manifestu `npm install` + `npm run build` → `MANIFEST_BUILD_FAILED` + `.gema0/assembly/last-vite-build-error.json`; `provisionProject` też uruchamia build gate. - **Weryfikacja:** `node --test backend/tests/lib/reactViteProvisioning.test.mjs` (build integracyjny: `GEMA_REACT_VITE_SKIP_BUILD=1` w CI jeśli brak sieci). ### 2026-06-02 — React+Vite+Matter: reguły Swarm/Oraculum + reactViteWorkspaceGuard - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/reactViteStackRules.mjs`, `backend/lib/reactViteWorkspaceGuard.mjs`, `backend/ai/prompts/swarmSystem.mjs`, `backend/ai/prompts/oraculumSystem.mjs`, `backend/ai/oraculum.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/lib/environmentProvisioner.mjs`, `backend/tests/lib/reactViteWorkspaceGuard.test.mjs`, `backend/tests/ai/shotgunSwarm.test.mjs` - **Co zrobiono:** Checklist Oraculum (infra ECHO + misje Matter); Swarm SECTION 7 per plik (main/App/Panel/Canvas); guard mechaniczny (index.html `/src/main.jsx`, vite root, react-dom, scaffold) po infra, provision i post-commit. - **Weryfikacja:** `node --test backend/tests/lib/reactViteWorkspaceGuard.test.mjs backend/tests/ai/shotgunSwarm.test.mjs` ### 2026-06-02 — workspaces/piasko2: naprawa Gravity Sandbox (Vite + Matter.js + React) - **Wersja:** 10.1.0 - **Pliki:** `workspaces/piasko2/package.json`, `vite.config.js`, `index.html`, `src/main.jsx`, `src/App.jsx`, `src/Canvas.jsx`, `src/Panel.jsx`, `src/index.css` (usunięto `src/Canvas.js`, `src/Panel.js`, `src/vite.config.js`) - **Co zrobiono:** Pełna infrastruktura Vite (`react-dom`, `@vitejs/plugin-react`, skrypty `dev`/`build`); bootstrap `createRoot`; `Canvas` jako FC z `useRef`/`useEffect` + Matter `Render` na `sceneRef`; `buildTower` / `replaceBalls` / `earthquake` przez `useImperativeHandle` → `Panel`; startowa wieża przy mount. - **Weryfikacja:** `npm run build` OK; `npm run dev` → http://127.0.0.1:5175/ (port 5173–5174 zajęte). ### 2026-06-02 — aiGateway: hotfix OpenRouter fallback — max 3 modele w `models` - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/aiGateway.mjs` - **Co zrobiono:** `buildOpenRouterPayload` — `buildOpenRouterModelList(...).slice(0, 3)` (fix 400: `'models' array must have 3 items or fewer`). - **Weryfikacja:** brak dedykowanego testu; regresja manualna przy następnym wywołaniu OpenRouter. ### 2026-06-02 — mechanicalProvisioning: natywny interceptor `echo >` / `echo >>` (fs, bez powłoki) - **Wersja:** 10.1.0 - **Pliki:** `backend/lib/mechanicalProvisioning.mjs`, `backend/tests/lib/mechanicalProvisioning.test.mjs` - **Co zrobiono:** `tryInterceptEchoWrite` — regex `echo ... >|>> file`, strip zewnętrznych cudzysłowów, `mkdirSync` katalogu docelowego, `writeFileSync` / `appendFileSync`; omija `cmd.exe`/`sh` (fix `< was unexpected at this time` na Windowsie). - **Weryfikacja:** `node --test backend/tests/lib/mechanicalProvisioning.test.mjs` — 6 OK. ### 2026-06-02 — aiGateway: OpenRouter natywny Fallback Routing (`route` + `models`) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/aiGateway.mjs` - **Co zrobiono:** `OPENROUTER_FALLBACK_MODELS`; `buildGroqPayload` (pole `model`) vs `buildOpenRouterPayload` (`route: "fallback"`, tablica `models` bez `model`); model żądania na początku listy; log gdy odpowiedź używa innego modelu niż primary. - **Weryfikacja:** `node --test` shotgunSwarm — OK (jeśli uruchomione). ### 2026-06-02 — Docker: backend + UI (Nginx), compose, volumes workspaces/.env - **Wersja:** 10.1.0 - **Pliki:** `backend/Dockerfile`, `frontend/sequencer-ui/Dockerfile`, `frontend/sequencer-ui/nginx.conf`, `docker-compose.yml`, `.dockerignore` - **Co zrobiono:** Konteneryzacja VPS — backend `node:20-alpine` + bash/curl/git/python/php83/build-base, port 7878; UI multi-stage → Nginx proxy `/api`, `/ws`, `/workspaces` → `backend:7878`; wolumeny `./workspaces`, `./.env:ro`, `./events.ndjson`; UI publicznie `:8080`. - **Uruchomienie:** `mkdir -p workspaces && touch events.ndjson` → `docker compose up -d --build` - **Weryfikacja:** build na VPS (Linux); lokalny Windows — tylko przygotowanie plików. ### 2026-06-01 — sequencer-ui: Oraculum manifest UI, Fix Loop, expectedExports dispatch - **Wersja:** 10.1.0 - **Pliki:** `frontend/sequencer-ui/src/App.jsx`, `swarmAgents.js`, `oraculumDispatch.mjs`, `orchestrator.mjs` (SWARM_START payload), README, usunięto `demoMission.js` - **Co zrobiono:** UI — manifest queue, dynamic X-RAY, agents/fixLoop z WS; handlery INFRA/RAM/MANIFEST; `buildMissionPayloadFromBody`; dispatch przekazuje expectedExports/apiSurface; SWARM_START attempt/maxAttempts. - **Weryfikacja:** `npm run ui:build` OK; `node --test` oraculumDispatch — 5 OK. ### 2026-06-01 — Luki audytu: buildMissionPayloadFromBody, SECTION 3 graft, sanitize compact fence - **Wersja:** 10.1.0 - **Pliki:** `oraculumDispatch.mjs`, `server.mjs`, `provisionRoutes.mjs`, `orchestrator.mjs`, `swarmSystem.mjs`, `sanitizeGeneratedCode.mjs`, testy - **Co zrobiono:** `buildMissionPayloadFromBody` — peerContext/runtime/expectedExports dla `/api/mission`; usunięta redundantna sanityzacja przy zapisie RAM; SECTION 3 rozróżnia graft vs file; BLOCK_REGEX `\n?` dla compact fence. - **Weryfikacja:** testy dispatch + swarm + sanitize — OK. ### 2026-06-01 — orchestrator: EN mission prompts, SWARM_FENCE_OUTPUT_RULE (koniec schizofrenii) - **Wersja:** 10.1.0 - **Pliki:** `backend/core/orchestrator.mjs`, `backend/ai/prompts/swarmSystem.mjs` (`buildCreateFileMissionPrompt`, `buildGraftMissionPrompt`), testy shotgunSwarm - **Co zrobiono:** Usunięte polskie WYJŚCIE/PLIK/ZADANIE i zakaz komentarzy/markdown; orchestrator buduje microContext przez buildery ze swarmSystem (FILE/TASK, fence policy, comments OK). Treść TASK (oraclePrompt) nadal dowolny język. - **Weryfikacja:** `node --test` shotgunSwarm + contextWindow + oraculumDispatch — OK. ### 2026-06-01 — swarmSystem: spójna polityka markdown fence (SECTION 1 + tech directives) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/swarmSystem.mjs`, `backend/ai/contextWindow.mjs`, testy shotgunSwarm - **Co zrobiono:** Kanoniczna stała `SWARM_FENCE_OUTPUT_RULE` + `SWARM_FIX_LOOP_FOOTER` w swarmSystem; SECTION 1 i dyrektywy PHP/Python/visual/browser bez sprzecznego „No markdown”; contextWindow re-eksportuje footer ze swarmSystem (jedno źródło prawdy). - **Weryfikacja:** `node --test` shotgunSwarm + contextWindow — 11 testów OK. ### 2026-06-01 — Rój + Context Window: bezpieczny extract, truncate judgeError, spójne fence - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/shotgunSwarm.mjs`, `backend/ai/contextWindow.mjs`, testy shotgunSwarm, contextWindow, phantomVM - **Co zrobiono:** `extractSwarmCode` deleguje do `sanitizeGeneratedCode` (fence extract bez strip komentarzy/URL); `truncateJudgeError` max 1500 znaków + `...[TRUNCATED]` w Fix Loop; stopka Fix Loop akceptuje markdown fences (spójność z extractorem). MICRO_STYLES / react_vite relikty już usunięte w poprzednim commicie. - **Weryfikacja:** `node --test` shotgunSwarm + contextWindow + phantomVM — 23 testy OK. ### 2026-06-01 — shotgunSwarm: cleanup (bez strip komentarzy, bez MICRO_STYLES, bez react_vite w determineModels) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/shotgunSwarm.mjs`, `backend/tests/ai/shotgunSwarm.test.mjs` - **Co zrobiono:** Nadpisanie Roju zoptymalizowaną wersją — `extractSwarmCode` tylko fence extract + trim (zero destrukcyjnych regex na komentarze); usunięte MICRO_STYLES ES6; `determineModels` bez reliktu `react_vite`, tylko `browser|node`; uproszczona pętla agentów. - **Weryfikacja:** `node --test` shotgunSwarm — 7 testów OK. ### 2026-06-01 — Swarm system prompt: swarmSystem.mjs (EN) + Fix Loop alignment - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/swarmSystem.mjs` (NEW), `backend/ai/shotgunSwarm.mjs`, `backend/ai/contextWindow.mjs` (EN peer/fix headers), testy swarm + contextWindow - **Co zrobiono:** `buildSwarmSystemPrompt` — ZERO YAPPING, contract obedience (expectedExports, peerContext), FIX LOOP recovery, runtime tech directives. `extractSwarmCode` — pass-through dla `.md`, szersze fence regex. `augmentSwarmPrompt` / `buildPeerContextManifest` — angielskie nagłówki zsynchronizowane ze stałymi `SWARM_FIX_LOOP_HEADER` / `SWARM_PEER_CONTEXT_HEADER`. - **Weryfikacja:** `node --test` shotgunSwarm + contextWindow — 9 testów OK. ### 2026-06-01 — Oraculum meta-świadomość: oraculumSystem.mjs (EN) + enrichProjectMap - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/prompts/oraculumSystem.mjs` (NEW), `backend/ai/oraculum.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/tests/ai/oraculum.test.mjs` - **Co zrobiono:** System prompt Oraculum wyciągnięty do `buildOraculumSystemPrompt` (EN, sekcje 0–6, meta-świadomość pipeline GEMA-0, ECHO rule — config via infrastructure_commands nie missions). `enrichProjectMapForOraculum(projectPath, baseMap)` — package.json scripts/deps, idempotencyHints, wykrywanie vite/index/gitignore. Dispatch przekazuje `projectPath` do `generateManifest`. - **Weryfikacja:** `node --test` oraculum + oraculumDispatch — 15 testów OK. ### 2026-06-01 — Dekapitacja Auto-Runner: previewStrategy, bez React/Vite w rdzeniu - **Wersja:** 10.1.0 - **Pliki:** `backend/lib/previewStrategy.mjs` (NEW), `backend/core/autoRunner.mjs` (NEW), `backend/core/workspaceDevManager.mjs`, `backend/core/orchestrator.mjs`, `backend/lib/environmentProvisioner.mjs`, `backend/api/provisionRoutes.mjs`, `backend/server.mjs`, `backend/tools/workspace-vite-dev.mjs`, `backend/lib/reactWorkspaceScaffold.mjs` (LEGACY), `frontend/sequencer-ui/src/lib/resolvePreviewLink.js`, `frontend/sequencer-ui/src/App.jsx`, testy - **Co zrobiono:** Auto-Runner decyduje o podglądzie przez `detectPreviewStrategy` (npm run dev/start vs static HTML) — zero `isReactWorkspace` / `ensureReactViteScaffold` w pipeline. Dev server: `npm run dev` zamiast hardcoded `npx vite`. API: `canStartDev`, `previewMode`, `devTool` zamiast `react`. UI zaktualizowany. `reactWorkspaceScaffold.mjs` oznaczony LEGACY (tylko szablony). - **Weryfikacja:** `node --test` previewStrategy, resolvePreviewLink, environmentProvisioner, oraculumDispatch — OK. ### 2026-06-01 — Refactor: Software Factory (Supervisor → Provisioning → Swarm → Judge → Fix Loop) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/oraculum.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/core/phantomVM.mjs`, `backend/core/orchestrator.mjs`, `backend/ai/shotgunSwarm.mjs`, `backend/lib/mechanicalProvisioning.mjs` (NEW), `backend/ai/contextWindow.mjs` (NEW), testy - **Co zrobiono:** Oraculum zwraca `master_specification` + `infrastructure_commands` (agnostyczny stos). Dispatch wykonuje mechanical provisioning przed Rojem. Context windowing (`peerContext`) wstrzykiwany do promptu Roju. PhantomVM: `resolveExecutionContext` zamiast sztywnych profili REACT_VITE; Node FULL_FILE → AST-only. Fix loop: błąd Sędziego → retry Roju (max 3) via `augmentSwarmPrompt`. Commit RAM→disk bez zmian (tylko po sukcesie manifestu). - **Weryfikacja:** `node --test` — 33 testy OK (oraculum, dispatch, phantomVM, mechanicalProvisioning, contextWindow, shotgunSwarm). ### 2026-06-01 — Naprawa workspaces/naj + pipeline: commit manifestu, PhantomVM importy - **Wersja:** 10.1.0 - **Pliki:** `workspaces/naj/src/**`, `backend/api/oraculumDispatch.mjs`, `backend/core/orchestrator.mjs`, `backend/core/phantomVM.mjs`, testy dispatch/phantomVM - **Co zrobiono:** Ręczna naprawa `naj` (App→GrowthDashboard, apiClient, strictValidator, build OK). Diagnoza: Oraculum wygenerował pliki leaf, `App.jsx` nie zaktualizowany (misje Roju padały na OpenRouter 404); PhantomVM akceptował składnię bez importów; `commitProject` zapisywał częściowy sukces. Fix: commit pomijany gdy jakakolwiek misja manifestu padnie (`discardAllPending`); PhantomVM odrzuca self-import, `console`/Node, Chakra/MUI. - **Weryfikacja:** `npm run build --prefix workspaces/naj`; `node --test backend/tests/api/oraculumDispatch.test.mjs backend/tests/core/phantomVM.test.mjs`. ### 2026-06-01 — Reszta audytu pipeline: orchestrator, dispatch, assembly, testy - **Wersja:** 10.1.0 - **Pliki:** `backend/core/orchestrator.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/api/provisionRoutes.mjs`, `backend/core/assemblyAdapter.mjs`, `backend/server.mjs`, `backend/ai/shotgunSwarm.mjs`, `backend/tests/ai/shotgunSwarm.test.mjs`, `backend/ai/test_swarm.mjs` - **Co zrobiono:** `normalizeSwarmSize` + `SWARM_GLOBAL_TIMEOUT_MS`; werdykt Sędziego w `winner.verdict` i `MISSION_SUCCESS`; dispatch Oraculum przekazuje `assemblyDir`/`traceExpectations`/`mechanicalGate`; `POST /api/projects/:id/assembly/:jobId/run`; usunięto martwy `resolveMissionLlm`/Gemini z dispatch; prompt wizualny w orchestratorze (CREATE + GRAFT); test Roju z `mock.module` (bez realnego API); `test_swarm.mjs` z mock MoE. - **Weryfikacja:** `node --check`; `node --test backend/tests/ai/shotgunSwarm.test.mjs backend/tests/core/phantomVM.test.mjs` — OK. Wyścig Roju (mock): `node --experimental-test-module-mocks backend/ai/test_swarm.mjs`. ### 2026-06-01 — Fix provision/podgląd: resolvePreviewLink, scan imports, szablon Vite - **Wersja:** 10.1.0 - **Pliki:** `frontend/sequencer-ui/src/lib/resolvePreviewLink.js`, `frontend/sequencer-ui/vite.config.js`, `backend/lib/environmentProvisioner.mjs`, `backend/lib/reactWorkspaceScaffold.mjs`, `templates/react-vite-starter/vite.config.js`, testy lib - **Co zrobiono:** React przed statycznym HTML w podglądzie; proxy `/workspaces`→7878 w UI dev; SKIP_IMPORT_PACKAGES (url itd.); szablon Vite host/strictPort; PREVIEW.md bez 5199. - **Weryfikacja:** `node --test backend/tests/lib/resolvePreviewLink.test.mjs backend/tests/lib/environmentProvisioner.test.mjs` — OK. ### 2026-06-01 — Align server/UI z MoE: status, settings, ostrzeżenia kluczy - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/moeEnv.mjs`, `backend/server.mjs`, `backend/api/oraculumDispatch.mjs`, `frontend/sequencer-ui/src/App.jsx`, `.env.example` - **Co zrobiono:** `/api/status` → providers groq/openrouter; `/api/settings` → MOE_SETTINGS_KEYS + whitelist POST; usunięto fałszywy check GEMINI/mock; startup log MoE; panel UI: Groq+OpenRouter primary; ostrzeżenia przed misją. - **Weryfikacja:** `node --check` — OK. ### 2026-06-01 — Fix Rój: respekt swarmSize Oraculum + dynamiczny prompt wizualny/JS - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** `actualSwarmSize = Math.max(1, Number(swarmSize) || 3)` zamiast floor 15. System prompt: `isVisual` + `techDirectives` dla CSS/HTML/SCSS/VUE vs Vanilla JS. - **Weryfikacja:** `node --check` — OK. ### 2026-06-01 — Fix Sędzia + Rój: spójny pass-through wizualny, extractSwarmCode - **Wersja:** 10.1.0 - **Pliki:** `backend/core/phantomVM.mjs`, `backend/ai/shotgunSwarm.mjs`, `backend/tests/core/phantomVM.test.mjs` - **Co zrobiono:** Wspólne `VISUAL_PASS_EXTENSIONS` / `isVisualPassThroughFile`. Werdykt pass-through: `{ success, result, trace: [], error: null }`. `extractSwarmCode` — tylko `sanitizeGeneratedCode` dla wizualnych (bez obcinania CSS). MoE `.md` → Groq. Testy zaktualizowane. - **Weryfikacja:** `node --check`; `node --test backend/tests/core/phantomVM.test.mjs` — OK. ### 2026-06-01 — Dekapitacja Gemini (wdrożenie): Oraculum Groq, Rój OpenRouter, PhantomVM pass-through - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/oraculum.mjs`, `backend/ai/shotgunSwarm.mjs`, `backend/ai/aiGateway.mjs`, `backend/core/phantomVM.mjs` - **Co zrobiono:** Oraculum → `groq/llama3-70b-8192`. Rój: `OPENROUTER_FALLBACK`, zero Gemini w `determineModels`/`filterAvailableModels`. aiGateway early fallback: Groq↔OpenRouter (bez Gemini). PhantomVM: pass-through `.css/.html/.scss/.vue/.md` + pełne args w `fireSwarm`. - **Weryfikacja:** `node --check` na czterech plikach — OK. ### 2026-06-01 — Dekapitacja Gemini: Oraculum → Groq, Rój → Groq/OpenRouter - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/oraculum.mjs`, `backend/ai/shotgunSwarm.mjs`, `backend/ai/aiGateway.mjs` - **Co zrobiono:** Oraculum (Brain) na `groq/llama3-70b-8192` przez `generateContent`. Rój: `VISUAL_EXTENSIONS` → Groq, `LOGIC_EXTENSIONS` → wyłącznie OpenRouter free; `OPENROUTER_FALLBACK` zamiast Gemini. Early fallback w aiGateway: brak Groq → OpenRouter, brak OpenRouter → Groq (zero degradacji do Gemini). - **Weryfikacja:** `node --check` na trzech plikach — OK. ### 2026-06-01 — Fix: podłączenie determineModels → fireSwarm (MoE end-to-end) - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** `fireSwarm` przyjmuje `targetFile`/`profile` z orchestratora, wywołuje `determineModels`, round-robin modeli per agent przez `generateContent` (aiGateway). Legacy `llmProvider` pominięty — inna sygnatura, tylko Gemini. - **Weryfikacja:** `node --check`; routing `.js` → gemini+openrouter, `.css` → groq (przy kluczach w `.env`). ### 2026-06-01 — Fix: fizyczne wdrożenie Zero Cost MoE w shotgunSwarm - **Wersja:** 10.1.0 - **Pliki:** `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** Zastąpiono starą `determineModels` (ANTHROPIC_API_KEY, `.endsWith`) blokiem Zero Cost: `filterAvailableModels`, `VISUAL_EXTENSIONS` / `LOGIC_EXTENSIONS`, Groq + OpenRouter free + Gemini fallback. - **Uwaga:** Poprzedni raport wdrożenia nie zapisał zmian na dysku — naprawione w tej sesji. ### 2026-05-31 — Wdrożenie Key Pooling i Mixture of Experts (MoE) - **Wersja:** 10.1.0 - **Zakres:** backend (AI Gateway, Shotgun Swarm) - **Agent / sesja:** Gemini 3.1 Pro (Główny Architekt Systemów AI) - **Pliki zmienione:** - `backend/ai/aiGateway.mjs` - `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** - Zaimplementowano mechanizm **Key Pooling** (rotacja kluczy Swarm). Instancje są cachowane jednorazowo z `GEMINI_SWARM_KEYS` z użyciem round-robin, unikając obciążenia GC i umożliwiając poprawny inteligentny Failover przy błędach np. 429. - Zaimplementowano **Mixture of Experts (MoE)** w procesie Roju wewnątrz `shotgunSwarm.mjs`. Pliki UI (rozszerzenie `.css`) otrzymują lżejszy i wydajniejszy model `gemini-2.0-flash`. Reszta populacji Roju jest mieszana równomiernie między modelami `gemini-2.5-flash` a `gemini-2.0-flash` (dystrybuowane zależnie od indeksu agenta). - **Odhaczono w planach:** - Zgodnie z wytycznymi optymalizacji wielomodelowej dla wydajności Roju. - **Otwarte / do poprawy:** - W `.env` należy zdefiniować listę kluczy oddzielonych przecinkami: `GEMINI_SWARM_KEYS="key1,key2,key3"`. ### 2026-05-31 — Fix: podgląd timeout (kolizja portu 5199 + wykrywanie Vite) - **Przyczyna:** wszystkie workspace miały `port: 5199` — Vite przeskakiwał na 5200+; backend czekał tylko na 5199 (timeout 45s). Na Windows stdout z `npm run dev` bywa buforowany. - **Fix:** `previewPortForProject(id)` → port 5200–5379; `patchViteConfigForPreview`; spawn `npx vite --host 127.0.0.1 --strictPort`; skan portów z logów + HTTP probe; timeout 60s. - **Pliki:** `reactWorkspaceScaffold.mjs`, `workspaceDevManager.mjs`, testy scaffold. ### 2026-05-31 — Fix: podgląd React ERR_CONNECTION_REFUSED :5199 - **Przyczyna:** `startDevServer` zwracał URL z `vite.config` po 4s bez sprawdzenia HTTP; workspace z `package.json` bez skryptu `dev` (np. `123123`) — `npm run dev` natychmiast padał. - **Pliki:** `backend/core/workspaceDevManager.mjs` (wait HTTP ready, błąd przy exit/timeout); `backend/lib/reactWorkspaceScaffold.mjs` (`patchPackageJsonForVite`); `frontend/sequencer-ui/src/App.jsx` (nie otwiera URL gdy React dev nie działa); `backend/tests/lib/reactWorkspaceScaffold.test.mjs`. - **Testy:** `node --test backend/tests/lib/reactWorkspaceScaffold.test.mjs backend/tests/lib/resolvePreviewLink.test.mjs` — pass. ### 2026-05-31 — Oraculum: normalizacja manifestu (tablica zamiast root object) - **Problem:** LLM zwracał `[{ "missions": [...] }]` lub gołą tablicę misji — `assertValidManifest` odrzucał poprawną treść. - **Pliki:** `backend/ai/oraculum.mjs` (unwrap `[0].missions`, wrap `{ missions: arr }`); `backend/tests/ai/oraculum.test.mjs` (+2 case). - **Testy:** `node --test backend/tests/ai/oraculum.test.mjs` — pass (8). ### 2026-05-31 — Fix: Oraculum manifest error → crash serwera (destructuring undefined) - **Diagnoza:** `/api/oraculum` wołało `dispatchOraculumMissions(...).catch(...)` bez re-throw — po błędzie `assertValidManifest` promise resolve'owało się na `undefined`, a `const { manifest } = await runInBackground` rzucało `TypeError` poza try-catch Oraculum. - **Pliki:** `backend/ai/oraculum.mjs` (`summarizeForDebug`, `console.warn` + snippet w komunikacie błędu); `backend/api/oraculumDispatch.mjs` (try/catch `generateManifestFn`, `statusCode: 422` dla błędów Oraculum); `backend/server.mjs` (usunięty połykający `.catch`, bezpośredni await + JSON error); `backend/tests/ai/oraculum.test.mjs` (asercja snippetu). - **Testy:** `node --test backend/tests/ai/oraculum.test.mjs backend/tests/api/oraculumDispatch.test.mjs` — pass. ### 2026-05-31 — Oraculum: kuloodporny JSON + AbortSignal.timeout(45s) - **Pliki:** `backend/ai/oraculum.mjs` (`extractJsonPayload` z dopasowaniem nawiasów + strip fence; `AbortSignal.timeout` → `generateContent`/`signal`; `assertValidManifest`); `backend/tests/ai/oraculum.test.mjs` (+fence, +brak missions, AbortError). - **aiGateway:** bez zmian — `signal` już przekazywany do `generateContent` requestOptions. - **Testy:** `node --test backend/tests/ai/oraculum.test.mjs` — pass (6). ### 2026-05-31 — Audyt promptów: modularność REACT_VITE + brutalny konkret Roju - **Diagnoza:** Oraculum nie wymuszało rozbijania UI na missions; REACT_VITE zachęcało do monolitu; MICRO_STYLES i „czytelny UI” generowały verbose output; GRAFT wysyłał skeleton w fence markdown (sprzeczność z zakazem ```). - **Pliki:** `backend/ai/oraculum.mjs` (modularność, swarmSize 3 dla UI, oraclePrompt imperatywny), `backend/ai/shotgunSwarm.mjs` (OUTPUT_RULES, MICRO_STYLES minimalistyczne, REACT_VITE jeden plik), `backend/core/orchestrator.mjs` (microContext bez fence), `workspaces/.project_rules`, `templates/react-vite-starter/.project_rules` (nowy). - **Testy:** `npm run test:new` — pass. - **Błąd:** `This operation was aborted` / `Unexpected token (1:0)` przy dużych plikach (np. POS) — globalny timeout roju 60s + Babel na pustym stringu. - **Pliki:** `backend/ai/shotgunSwarm.mjs` (`SWARM_GLOBAL_TIMEOUT_MS=300_000`, `timeoutMs` do `generateContent`), `backend/ai/aiGateway.mjs` (`timeout` w requestOptions, walidacja pustej odpowiedzi), `backend/lib/sanitizeGeneratedCode.mjs` (`AI_EMPTY_RESPONSE_ERROR`, `isEmptyGeneratedCode`), `backend/core/phantomVM.mjs` (wczesny reject pustego kodu skryptowego) - **Testy:** `npm run test:new` — pass (+2 empty response, +1 timeout constant). ### 2026-05-31 — Fix: PhantomVM pass-through dla CSS/HTML/JSON (Babel na plikach nieskryptowych) - **Błąd:** `Private names are only allowed in property accesses ('obj.#root')` — Babel parsował CSS (`#root`) przy `REACT_VITE` bez rozszerzenia w `targetFile` lub dla `.json`. - **Pliki:** `backend/core/phantomVM.mjs` (`isNonScriptAsset`, `NON_SCRIPT_EXTENSIONS`, wczesny `plain-text/pass-through`), `backend/core/orchestrator.mjs` (Sędzi: logiczny `targetFile` zamiast ścieżki RAM), `backend/tests/core/phantomVM.test.mjs` - **Testy:** `npm run test:new` — pass (+1 pass-through). ### 2026-05-30 — Fix: Module AST Validation / Missing semicolon (Sędzia + sanitize) - **Przyczyna:** `sanitizeGeneratedCode` nie rozpoznawał fence'ów ` ```jsx` / ` ```react` / ` ```tsx`; fallback obcinał tylko `js` z `jsx`, zostawiając śmieci (`x`, `react`) przed `import` → Babel: `Missing semicolon. (2:8)`. - **Pliki:** `backend/lib/sanitizeGeneratedCode.mjs`, `backend/core/phantomVM.mjs`, `backend/ast/parserConfig.mjs` (wspólna konfig Babel), `backend/ast/byteGrafter.mjs`, `backend/tests/lib/sanitizeGeneratedCode.test.mjs` - **Fix:** generyczny regex ` ```[\w-]*`, pętla czyszczenia resztek fence; PhantomVM sanitizuje wejście przed AST; wspólny `babelParserConfig` z pluginem `jsx`. - **Testy:** `npm run test:new` — 38 pass (+5 sanitize). ### 2026-05-30 — P0: RAM-first (orchestrator, flush odroczony, unmount) - **Pliki:** `backend/core/orchestrator.mjs`, `backend/core/ramWorkspaceManager.mjs`, `backend/api/oraculumDispatch.mjs`, testy RAM + oraculumDispatch - **GRAFT:** `fireSwarm`, `lockManager`, `graftFunctionBody`, `getCoordinates` — wyłącznie `ramTargetFile` (tmpdir); usunięto `absoluteTargetFile` z przepływu misji - **Flush:** usunięty per-mission `flushFile`; Oraculum ustawia `deferCommit: true` + `commitProject()` na końcu kolejki; pojedyncza misja (`POST /api/mission` pełny payload) commituje od razu - **Unmount:** `unmountFile()` + sticky `mountFile()` (nie nadpisuje RAM z dysku); discard przy błędzie; mechanical gate wymusza flush przed verify - **Testy:** `npm run test:new` — 32 pass ### 2026-05-30 — P1: Podgląd w Sequencer UI + smoke operacyjny (10.1.0) - **Gałąź:** `cursor/p1-operational-closure-2bbd` → PR do `main` - **Pliki:** `frontend/sequencer-ui/src/App.jsx`, `frontend/sequencer-ui/src/lib/resolvePreviewLink.js`, `backend/tests/lib/resolvePreviewLink.test.mjs`, `backend/tests/api/projectImport.test.mjs`, `_docs/04_GIT_JEDNO_MAIN.md` - **UI:** przycisk i link „Podgląd” przy wyborze projektu (`GET /preview` + `/environment`); React bez Vite → komunikat lub `POST /dev/start` z otwarciem URL. - **Testy:** `npm run test:new` (31 pass, +3 resolvePreviewLink, +1 importProject), `npm run test:apex` — zielone. - **Smoke (curl):** `GET /api/projects/1/preview`, `POST /api/projects/import` OK; `POST /api/mission` wymaga `GEMINI_API_KEY` do manifestu (pipeline pokryty `oraculumDispatch.test.mjs` z mock `generateManifestFn`). ### 2026-05-30 — Brief dla Architekta AI (Gemini) — RAM-first - **Plik:** `_docs/2026-05-30_BRIEF_DLA_ARCHITEKTA_AI.md` - **Cel:** odpowiedzi P1–P8 (przepływ, RAM vs disk, luki, frontend, priorytety migracji); skrót do wklejenia w Gemini. - **Odniesienie:** `_docs/2026-05-30_RAPORT_RUROCIAG_GEMA0_V10.md`, `main` @ 10.1.0 ### 2026-05-30 — Raport reverse-engineering rurociągu V10.1 + wersja w `/api/status` - **Plik:** `_docs/2026-05-30_RAPORT_RUROCIAG_GEMA0_V10.md` (treść V10.1.0) - **Kod:** `backend/server.mjs` — `APP_VERSION` z `package.json` w `/api/status`, hello WS, log startu - **Zakres:** mapa przepływu POST `/api/oraculum` → `flushFile`, luki integracyjne, frontend sequencer-ui vs backend. ### 2026-05-30 — Domknięcie V10.1 (P0: Swarm, Radar, /api/mission, wersja, SRE) - **Wersja:** `10.1.0` (`package.json`) - **Gałąź:** `cursor/v10-1-completion-f265` → PR do `main` - **Agent / sesja:** Cursor (Cloud Agent) - **Pliki:** `backend/ai/shotgunSwarm.mjs`, `backend/ast/workspaceIndexer.mjs`, `backend/api/oraculumDispatch.mjs`, `backend/server.mjs`, `backend/core/ramWorkspaceManager.mjs`, `package.json`, `_docs/README.md`, `README.md`, `_docs/05_MAPA_PLANOW_V5_V10.md`, `frontend/sequencer-ui/src/lib/demoMission.js`, testy w `backend/tests/` - **Co zrobiono:** - Usunięto `Math.max(15, swarmSize)` — `normalizeSwarmSize()` respektuje manifest 3–5. - Radar: `.jsx`, `.tsx`, `.html`, `.css`, `.json` + `GEMA_INDEX_EXTRA_EXT`; html/css/json → `[]` w mapie. - Wspólne `dispatchOraculumMissions()` dla `/api/oraculum` i skrótu `POST /api/mission` (`task` → `prompt`); `CREATE_NEW_FILE` bez `functionName`. - Shutdown: `ramWorkspace.unmountAll()` na SIGINT/SIGTERM. - Przykłady `SILOS-1` → `PROJECT-A` (README, demoMission, mapa planów). - **Testy:** `npm run test:new` (27 pass), `npm run test:apex` — zielone - **Otwarte:** link „Podgląd” w Sequencer UI (P1) ### 2026-05-30 — Environment Auto-Provisioner (środowisko workspace) - **Wersja:** 10.0.0 - **Zakres:** backend, frontend, templates - **Agent / sesja:** Cursor (Cloud Agent) - **Pliki:** `backend/lib/environmentProvisioner.mjs`, `backend/core/workspaceDevManager.mjs`, `backend/api/provisionRoutes.mjs`, `backend/tools/workspace-provision.mjs`, `templates/react-vite-starter/`, `frontend/sequencer-ui/src/App.jsx`, `backend/core/orchestrator.mjs`, `backend/server.mjs` - **Co zrobiono:** - Auto-Provisioner: wykrywanie stosu, scaffold Vite, skan importów → `package.json`, `npm install`. - API: `POST .../provision`, `.../dev/start|stop`, `GET .../environment`, `POST /api/projects/from-template`, `GET /api/templates`. - Szablon `react-vite-starter`; import z `autoProvision` (domyślnie true). - Orchestrator po sukcesie misji React uruchamia provision w tle. - UI Sequencer: panel Environment (Provision, Uruchom/Stop podgląd, szablon). - CLI: `npm run workspace:provision -- `; `workspace:dev` woła provision przed Vite. - **Testy:** `backend/tests/lib/environmentProvisioner.test.mjs` ### 2026-05-30 — Raport sesji marketing (noc + naprawa) - **Dokument:** [_docs/RAPORT_SESJI_MARKETING_2026-05-30.md](RAPORT_SESJI_MARKETING_2026-05-30.md) - **Commit na main:** `4970cdb` (PhantomVM, API marketing, workspace:dev) - **Skrót:** 4 misje Oraculum → projekt `1`; 3/4 sukces; `aiContentGenerator.js` padł w VM; naprawa backendu + raport. ### 2026-05-30 — Podgląd workspace React (Vite scaffold + workspace:dev) - **Wersja:** 10.0.0 - **Zakres:** backend, workspaces/1 - **Agent / sesja:** Cursor (Composer) - **Pliki zmienione:** - `backend/lib/reactWorkspaceScaffold.mjs` (nowy) - `backend/tools/workspace-vite-dev.mjs` (nowy) - `backend/core/orchestrator.mjs` - `backend/server.mjs` - `backend/ai/shotgunSwarm.mjs` - `package.json` - `workspaces/1/package.json`, `vite.config.js`, `PREVIEW.md` (scaffold) - **Co zrobiono:** - Przyczyna pustej strony: `index.html` z React/JSX otwarty przez `file://` — przeglądarka nie kompiluje JSX i ścieżki `/src/...` są nieprawidłowe. - Auto-scaffold Vite (`package.json`, `vite.config.js`, `PREVIEW.md`) po misji `REACT_VITE` / plikach `.jsx`. - Skrypt `npm run workspace:dev -- ` uruchamia Vite (np. http://localhost:5199). - `GET /api/projects/:id/preview` + statyczne `http://127.0.0.1:7878/workspaces//plik.html` przy `npm start`. - **Otwarte / do poprawy:** - Link „Podgląd” w Sequencer UI (opcjonalnie). ### 2026-05-30 — Import Gotowych Projektów i Nowe Testy (Bez AI) - **Wersja:** 10.1.0 - **Zakres:** backend, frontend - **Agent / sesja:** Gemini 3.1 Pro (Cursor) - **Commity:** (operacja w tle, bez pusha) - **Pliki zmienione:** - `backend/core/workspaceManager.mjs` - `backend/server.mjs` - `frontend/sequencer-ui/src/App.jsx` - `package.json` - **Co zrobiono:** - Przeniesiono stare testy ze ścieżki głównej (`test_*.mjs`, `test_*.cjs`, `test_*.js`) do dedykowanego folderu `legacy_tests/`. - Zweryfikowano poprawność i istnienie plików nowych testów (dla wariantu in-memory oraz rdzennych klas) w `backend/tests/`. Zaktualizowano `package.json` dodając wpis `"test:new": "node --test backend/tests/**/*.test.mjs"`. - Zaimplementowano punkt końcowy `POST /api/projects/import` pozwalający na skopiowanie/zaimportowanie istniejącego folderu z dysku bezpośrednio do nowej lokalizacji pod `workspaces/` wraz z generacją sterylnej struktury meta (foldery `.gema0/strategic`, `.gema0/assembly`). - Rozbudowano interfejs w `App.jsx` o tryb "Import Project" (przycisk przełączający logikę z "New project" na pola podania zewnętrznej ścieżki i nazwy docelowej projektu). - **Odhaczono w planach:** wdrożenie zaplanowanego "następnego kroku" (rozpakowanie z gotowego projektu bez ruszania AI) dla bezpieczniejszego eksperymentowania offline. - **Otwarte / do poprawy:** - Wymagane jest przetestowanie procesu importu przez UI ze ścieżką do poprawnego projektu. - Odświeżanie po stronie klienta (UI) następuje prawidłowo, ale w niektórych przypadkach może wymagać dodania trybu offline / bez Gemini bez rzucania wyjątkami dla samej analizy. ### 2026-05-30 — Wdrożenie pracy w pamięci RAM (Zero Disk Touch) - **Wersja:** 10.1.0 - **Zakres:** backend, core - **Agent / sesja:** Gemini 3.1 Pro (Cursor) - **Commity:** połączone wypchnięcie modułu zarządzania przestrzenią operacyjną. - **Pliki zmienione:** - `backend/core/ramWorkspaceManager.mjs` (nowy plik) - `backend/core/orchestrator.mjs` - **Co zrobiono:** - Zaprojektowano od podstaw `RamWorkspaceManager`, realizujący zrzut plików projektu z pamięci masowej (`workspaces/`) do pamięci operacyjnej TMPFS (`os.tmpdir()` czyli potencjalnie `/dev/shm` pod systemami Unix). - Przepięto proces produkcyjny w `orchestrator.mjs` – w obu trybach (`CREATE_NEW_FILE` oraz `GRAFT_EXISTING_AST`) wszelkie modyfikacje dokonywane przez Rój i Szczepiacza (`byteGrafter`) odbywają się w pamięci RAM. - Zaimplementowano rygorystyczny "Atomic Flush" na dysk fizyczny wyzwalany dopiero po zgłoszeniu w pełni udanego przeszczepu kodu (zabezpieczonego `runInWriteQueue`). - **Odhaczono w planach:** wdrożenie zaplanowanego w dokumentacji V7/V8 mechanizmu RAM Workspace. - **Otwarte / do poprawy:** - Oczyszczanie martwych stref pamięci RAM przy zamykaniu serwera (`unmountProject`). ### 2026-05-30 — Uniwersalna Konstytucja V10.1 + kwarantanna legacy docs - **Wersja:** 10.0.0 → V10.1 (profil wykonania) - **Zakres:** backend, docs, git, `.cursor/rules` - **Agent / sesja:** Cursor (Architekt Produktu + Archiwista kontekstu) - **Commity:** `c567289` (SRE E2E), `7c4ff0a` (Konstytucja) — **wypchnięte** na `origin/main` - **Pliki zmienione:** - `backend/ai/oraculum.mjs` — rola „Router Technologiczny”; manifest z `profile`, `swarmSize` - `backend/ai/shotgunSwarm.mjs` — dynamiczny system prompt z profilu (`NODE_ESM`, `REACT_VITE`, `STATIC_HTML`, `PYTHON_SCRIPT`) - `backend/core/phantomVM.mjs` — walidacja zależna od `profile` (VM vs skip AST vs static) - `backend/core/orchestrator.mjs`, `backend/server.mjs` — przekazywanie `profile`, `swarmSize`, `domainRules` - `workspaces/.project_rules` — neutralny szablon (auto-detekcja, bez wymuszonego V8/ESM) - `.gitignore` — `workspaces/*` z wyjątkiem `!workspaces/.project_rules` - `.cursor/rules/ignore-legacy.mdc` — zakaz czytania kwarantanny i `legacy/` - `_docs/quarantine_v8_legacy/` — przeniesiono plany V7/V8 (DDD, ERP, 5 silosów, War Room) - **Co zrobiono:** - Zaprojektowano i wdrożono warstwową Konstytucję: rdzeń GEMA → profil wykonania → reguły projektu. - Oraculum autonomicznie wybiera profil i skalę Roju (3–5 vs 15–20 agentów). - Usunięto hardcode zakazu TS/ESM ze Swarm — restrykcje tylko per profil. - Odcięto agentów od skażonej dokumentacji V8 (SaaS, ERP, SliceHub) bez kasowania historii. - **Odhaczono w planach:** pierwsza faza „Universal Constitution” z audytu lokalnego (P0 równolegle). - **Otwarte / do poprawy:** - `PhantomStrategy` jako osobne klasy (obecnie logika w `phantomVM.mjs`). - Radar (`workspaceIndexer`) — rozszerzenia plików per profil (html, css, jsx). - Chirurgiczna edycja `05_MAPA_PLANOW_V5_V10.md` (przykład `SILOS-1` → neutralny). - Test E2E React przez `/api/oraculum` na projekcie `123123` — do weryfikacji przez właściciela. ### 2026-05-29 — Architektura i SRE: Wdrożenie V10 (Raport Audytu - ZATWIERDZONY) - **Wersja:** 10.0.0 - **Zakres:** backend, core - **Agent / sesja:** Gemini 3.1 Pro (Główny Inżynier Architektury i SRE) - **Pliki zmienione:** - `backend/server.mjs` - `backend/core/lockManager.mjs` - `backend/core/phantomVM.mjs` - `backend/lib/sanitizeGeneratedCode.mjs` - `backend/core/orchestrator.mjs` - **Co zrobiono:** - **Anomalia 1:** Całkowicie usunięto globalny `missionChain`. Wdrożono mapę `projectMissionQueues` per `projectId`. Zastąpiono blokującą pętlę w `/api/oraculum` wywołaniem w tle (fire-and-forget). - **Anomalia 2:** W `lockManager.mjs` podniesiono timeout blokady `acquireLock` z 10000ms do 90000ms dla synchronizacji z czasem życia Roju. - **Anomalia 3:** W `phantomVM.mjs` zaimplementowano "sandbox ratunkowy" (replace import/export ESM), żeby VM omijał Node SyntaxError. Dodano detekcję HTML/CSS/JSX by pomijać Sędziego. - **Anomalia 4:** Zaimplementowano "Heurystykę Najdłuższego Bloku" w `sanitizeGeneratedCode.mjs`, uodparniając rurociąg na luźne konwersacje od LLMa. - **Anomalia 5:** Oczyszczono `orchestrator.mjs` z martwej/zduplikowanej logiki AST, integrując użycie `graftFunctionBody` z `byteGrafter.mjs`. - **Odhaczono w planach:** wdrożenie autoryzowanego raportu SRE. - **Otwarte / do poprawy:** brak, operacja V10 zakończona stabilnością. ### 2026-05-29 — Uszczelnienie Roju (shotgunSwarm.mjs) - **Wersja:** 10.0.0 - **Zakres:** backend (AI / Rój) - **Agent / sesja:** Gemini 3.1 Pro (Główny Inżynier Systemów) - **Pliki zmienione:** - `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** - Wdrożono staggering w pętli wyzwalającej Rój. Dodano `await new Promise(r => setTimeout(r, index * 250))` przed wysłaniem zapytania, minimalizując błędy przeciążeniowe API (429/503). - Zmieniono `systemPrompt` Roju na skrajnie restrykcyjny, zakazując jawnie stosowania TypeScript i znaczników formatowania Markdown (np. ` ```javascript `), co wyeliminuje odrzuty u Sędziego ("Unexpected token ':'"). ### 2026-05-29 — Wdrożenie poprawek (Frontend & Sędzia & Cleanup) - **Wersja:** 10.0.0 - **Zakres:** frontend, backend - **Agent / sesja:** Gemini 3.1 Pro (Lead Systems Engineer) - **Pliki zmienione:** - `frontend/sequencer-ui/src/App.jsx` - `backend/ai/oraculum.mjs` - `backend/server.mjs` - `backend/core/assemblyWatcher.mjs` (usunięto) - **Co zrobiono:** - **Luka A:** Wdrożono `setSwarmStatus('analyzing')` w `startSwarm` (natychmiast przed `fetch`), co odblokowuje pasek ORACLE. - **Luka D:** Zaimplementowano w UI kolejkę `missionQueue`. Płynne przechodzenie do kolejnych misji (`targetFile`, czyszczenie agentów) następuje dopiero po fladze `MISSION_SUCCESS`. - **Luka B:** Zaktualizowano schemat JSON w `oraculum.mjs`, aby wymuszał `validationArgs: ["..."]` (tablicę). Poprawiono w `server.mjs` wstrzykiwanie tej tablicy zamiast sztywnego `[]`, by Sędzia PhantomVM weryfikował I/O. - **Luka C:** Całkowicie usunięto martwy plik `assemblyWatcher.mjs` oraz jego odniesienia. ### 2026-05-29 — Konstytucja Projektu (Zerowe Halucynacje) - **Wersja:** 10.0.0 - **Zakres:** docs, backend - **Agent / sesja:** Gemini 3.1 Pro (Lead Software Architect) - **Pliki zmienione:** - `workspaces/.project_rules` (nowy plik) - **Co zrobiono:** - Utworzono uniwersalny szablon Konstytucji Projektu ładowany asynchronicznie przez backend serwera (z obszaru workspaces) prosto do System Promptu modułu Oraculum. - Zdefiniowano w nim 5 twardych, agnostycznych biznesowo dyrektyw, narzucających zero halucynacji (oparcie na projectMap), chirurgiczną modułowość (byteGrafter), surową optymalizację V8 oraz zakaz połykania błędów psujących event loopa. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** - Plik gotowy do użycia we wszystkich przyszłych projektach zarządzanych przez rurociąg. System gotowy do pierwszych prób bojowych na zewnątrz. ### 2026-05-29 — Głośna Fuzja Rurociągu (Integracja Oraculum + Radaru + Orkiestratora) - **Wersja:** 10.0.0 - **Zakres:** backend - **Agent / sesja:** Gemini 3.1 Pro (Lead Integration Engineer) - **Pliki zmienione:** - `backend/server.mjs` - **Co zrobiono:** - Całkowicie usunięto w `server.mjs` z endpointu `/api/oraculum` kod starych, mockowanych plików (skeleton i mechanical gate). - Wdrożono rygorystyczny 4-etapowy proces dla misji od strony Oraculum. - Zintegrowano skanowanie z użyciem Radaru (`buildProjectMap`) i wstrzyknięto do niego opcjonalne wczytywanie pliku `.project_rules`. - Wykonano asynchroniczne delegowanie zdekodowanego JSONa (`missions`) prosto do Orkiestratora (`executeMission`), uwalniając wątek HTTP dla klienta. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** - Architektura zaplecza backendowego jest domknięta. Gotowość operacyjna w obszarze backendu APEX 10 w pełni potwierdzona. Do weryfikacji pozostaje to, jak UI prezentuje nową asynchroniczną logikę w "The Timeline". ### 2026-05-29 — Wdrożenie Radaru Architektury (Static Analysis Indexer) - **Wersja:** 10.0.0 - **Zakres:** backend, ast - **Agent / sesja:** Gemini 3.1 Pro (Lead Static Analysis Engineer) - **Pliki zmienione:** - `backend/ast/workspaceIndexer.mjs` (nowy plik) - **Co zrobiono:** - Utworzono moduł `workspaceIndexer.mjs` realizujący zadanie budowania mapy projektu (projectMap) dla Oraculum. - Zaimplementowano rekursywny skaner dyskowy ignorujący z góry określone katalogi (np. `node_modules`, `.git`, `.gema0`, minifikowane) i wczytujący wyłącznie kod JS/TS. - Oparto wyciąganie sygnatur funkcji i klas o stabilny `@babel/parser`, rygorystycznie omijając ciała funkcji dla oszczędności pamięci. Zadbano o błyskawiczne Garbage Collection. - Zwracany obiekt mapuje względne ścieżki plików z tablicą nazw ich deklaracji. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** - Należy spiąć nowo utworzony moduł z silnikiem `server.mjs`, aby odpytywać ten radar przed wywołaniem endpointu `/api/oraculum`. ### 2026-05-29 — Architektura Kognitywna: Przebudowa Oraculum i AI Gateway (Natywny JSON) - **Wersja:** 10.0.0 - **Zakres:** backend, ai - **Agent / sesja:** Gemini 3.1 Pro (Lead Cognitive Architect) - **Pliki zmienione:** - `backend/ai/aiGateway.mjs` - `backend/ai/oraculum.mjs` - **Co zrobiono:** - Przebudowano `aiGateway.mjs` natywnie przekazując `responseMimeType: "application/json"` do konfiguracji generacji API Gemini. - Wyczyszczono stary dług techniczny w `oraculum.mjs` (usunięto regexy do markdowna, zgadywanie formatu). - Wdrożono nową sygnaturę `generateManifest(userRequest, projectMap, domainRules, llmProvider)` generującą dynamiczny System Prompt w locie. - Wymuszono twardy obiekt JSON ze znormalizowaną klauzulą `missions` (targetFile, functionName, mode, oraclePrompt). - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** - Zmiana sygnatury w `oraculum.mjs` całkowicie psuje starą logikę w `server.mjs` (brak `runOraculum`). Konieczne jest dostosowanie endopointu `/api/oraculum` (i rurociągu Assembly Watchera) do nowej struktury misji i zaprzestanie zapisu nieobecnych sekcji `mechanical_gate` i `skeleton`. ### 2026-05-29 — Brutalny Audyt Bezpieczeństwa (Red Team) - orchestrator.mjs - **Wersja:** 10.0.0 - **Zakres:** backend, core - **Agent / sesja:** Gemini 3.1 Pro (Red Team Auditor) - **Pliki zmienione:** - brak (tylko inspekcja i raport) - **Co zrobiono:** - Przeprowadzono rygorystyczny audyt `backend/core/orchestrator.mjs` pod kątem mutexów, izolacji kolejek zapisu oraz wycieków pamięci i locków. - Zweryfikowano poprawne uwięzienie operacji dyskowych w `runInWriteQueue` oraz ponowne wywoływanie `getCoordinates` na świeżo zaczytanym pliku wewnątrz chronionego bloku (Bottom-Up Grafting). - Potwierdzono bezwzględne zwalnianie mechanizmu `semanticLockId` poprzez `lockManager.releaseLock` na samym końcu bloku `finally`. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak wycieków i asynchronicznych dziur w audytowanym zakresie. Zrzut rdzenia został przekazany bezpośrednio dowódcy. ### 2026-05-29 — Wdrożenie In-Memory Byte-Range Lock Manager - **Wersja:** 10.0.0 - **Zakres:** backend, core - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/core/lockManager.mjs` (nowy plik) - **Co zrobiono:** - Zaimplementowano bezplikowy, działający w pamięci RAM system zarządzania asynchronicznym dostępem agentów do modyfikacji plików na podstawie zakresów bajtowych AST. - Oparto architekturę o klasę `LockManager` sprawdzającą matematycznie kolizje przedziałów. - Zastosowano unikalne identyfikatory ASCII locków i zaimplementowano mechanizm bezpieczeństwa automatycznego wygasania blokad. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** Zintegrować `LockManager` z `orchestrator.mjs`. ### 2026-05-29 — Przebudowa shotgunSwarm.mjs (Uwolnienie Roju) - **Wersja:** 10.0.0 - **Zakres:** backend, ai - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** - Skalowanie `swarmSize` rozszerzone do 15-20 instancji. - Zaimplementowano `MICRO_STYLES` dodawane do System Promptów poszczególnych agentów. - Zastosowano wyrównany rozkład temperatury [0.1 .. 1.0]. - Dodano `AbortController` z użyciem `Promise.any` i bezpieczną izolacją błędów, by poprawnie ubijać pozostałych agentów na rzecz pierwszego zwycięzcy bez przerywania węzła asynchronicznego. - Rozbudowano `extractCode` o ulepszone wyrażenia regularne do kasowania komentarzy i znaczników markdown. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-29 — Zastąpienie recast przez twardy byte-splicing (byteGrafter.mjs) - **Wersja:** 10.0.0 - **Zakres:** backend, ast - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/ast/byteGrafter.mjs` (nowy plik) - `backend/ast/ast_grafter.mjs` (usunięty) - `backend/ast/test_grafter.mjs` - `backend/core/orchestrator.mjs` - `backend/core/test_orchestrator.mjs` - `package.json` - **Co zrobiono:** - Całkowicie porzucono zewnętrzną i awaryjną bibliotekę `recast` służącą modyfikacji AST (usunięto ją również z `package.json`). - Stworzono nowoczesny moduł `byteGrafter.mjs` oparty wyłącznie na `magic-string` i wyciąganiu indeksów z `@babel/parser`. - Wdrożono zabezpieczenie "Bottom-Up Grafting", polegające na sortowaniu edycji (tablicy operacji) w kolejności od dołu pliku, aby indeksy bajtowe nadpisania kodu pozostały bezpieczne przy wielokrotnych transformacjach. - Zaktualizowano wszystkie moduły zależne (Orkiestrator i testy) i z sukcesem puszczono zautomatyzowane testy graftowania. - Naprawiono ścieżkę absolutną do dummy file w `test_orchestrator.mjs`. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — Ekshumacja zagubionych mechanik ze starych archiwów - **Wersja:** 10.0.0 - **Zakres:** mixed - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - brak (żadne pliki nie zostały skopiowane) - **Co zrobiono:** - Fizycznie przeszukano całe drzewo katalogów, zarchiwizowane foldery `legacy/`, pełną historię w repozutorium Git (`git log`, stashe) oraz zapisy archiwalne pod kątem występowania wskazanych wzorców (m.in. "magic-string", `slice()`, "Prompt Jittering", 20-50 iteracji roju, "lock manager"). - Potwierdzono, że tego typu mechaniki w formie gotowego kodu nigdy w repozytorium fizycznie nie istniały. - Wykryto, że wzmianki o `magic-string` i precyzyjnym `byteGrafter.mjs` lub "lock managerze" są obecne w dokumentacji projektowej (np. w plikach `_docs/00_GEMA0_ULTIMATE_MASTERPLAN.md` czy archiwum `GEMA0_V8_RED_TEAM_AUDIT.md`) i stanowiły w nich zaplanowaną, futurystyczną wizję, a nie faktycznie wdrożone rozwiązanie. Z tego powodu folder `backend/recovery_zone/` pozostał pusty (nie został utworzony, ponieważ niczego nie wyekstrahowano). - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — Ochrona rygoru danych (AST) przed CRLF - **Wersja:** 10.0.0 - **Zakres:** root - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `.gitattributes` - **Co zrobiono:** - Wykonano w terminalu `git config core.autocrlf false`, aby zablokować lokalnie w Git konwersję końcówek linii (LF na CRLF). - Utworzono plik `.gitattributes` wymuszający `* text=auto eol=lf` dla wszystkich plików, zapobiegając uszkodzeniu mapowania AST Byte Ranges dla rurociągu uruchamianego pod Linuksem. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — Aktualizacja modeli Gemini do standardów z 2026 r. i E2E Test - **Wersja:** 10.0.0 - **Zakres:** backend, ai - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/ai/oraculum.mjs` - `backend/ai/shotgunSwarm.mjs` - `backend/ai/aiGateway.mjs` - **Co zrobiono:** - Rozwiązano ostatecznie problem błędów 404/500 spowodowanych brakiem obsługi przestarzałych modeli przez Google API. - Oraculum zostało przebudowane w oparciu o wysoce inteligentny model `gemini-2.5-pro` idealny do zadawania architektury (skeleton). - Rój Strzelb (Shotgun Swarm) używa teraz potężnej ale jednocześnie ekonomicznej i szybkiej armaty `gemini-2.5-flash` zapewniającej darmowe generowanie iteracji u tanich koderów. - Potwierdzono E2E przejście ścieżki (AST X-Ray pokazuje GRAFTED) po zapisaniu nowej misji z panelu. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** - Należy zaimplementować `SEMANTIC_AUDIT` na etapie końca orkiestracji misji (Faza 5). - Trzeba zająć się usterkami UI: na koniec generacji pas "Analyzing..." z panelu ORACLE powinien znikać, a nie zostawać w interfejsie The Timeline. - Oczekuje wdrożenie "Time-Travel" na frontendzie (Faza 2 wg wizji NLE). ### 2026-05-28 — Przepięcie Kokpitu i Uzbrojenie PhantomVM (Sandbox node:vm) - **Wersja:** 10.0.0 - **Zakres:** frontend, backend - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `frontend/sequencer-ui/src/App.jsx` - `backend/core/phantomVM.mjs` - `backend/ai/shotgunSwarm.mjs` - `backend/core/orchestrator.mjs` - **Co zrobiono:** - Zmodyfikowano "THE ORACLE" w Kokpicie: `SWARM_START` uderza do `/api/oraculum` tylko z `projectId` oraz `prompt`. Sekcja "Mission Settings" została ukryta. - Sędzia (`PhantomVM`) przestał być atrapą. Użyto modułu `node:vm` do uruchamiania wygenerowanego kodu w piaskownicy z wbudowanym limitem timeoutu (2000 ms), by unikać nieskończonych pętli uwalających wątek serwera. - Sędzia dynamicznie zaczytuje plik `30_mechanical_gate.json` ze ścieżki zadania (przesyłanej kaskadowo z Orkiestratora -> Shotgun Swarm -> PhantomVM) zawierający zbiory wejść (`test.args`) oraz oczekiwanych wyjść (`test.expected`). Moduł ewaluuje każdy scenariusz, oznaczając dany kod jako `FAILED`, jeśli występuje niezgodność. - Rurociąg zyskał wsteczną kompatybilność, uruchamiając legacy test args, kiedy Assembly Dir nie podaje dodatkowych definicji w `mechanical_gate.json`. Zadbano również o poprawność walidacji `validateTrace` z poprzednich wersji. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — Moduł Oraculum i uzbrojenie Shotgun Swarm (Real API Gemini) - **Wersja:** 10.0.0 - **Zakres:** backend, ai - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/ai/aiGateway.mjs` (nowy plik) - `backend/ai/oraculum.mjs` (nowy plik) - `backend/server.mjs` - `backend/ai/shotgunSwarm.mjs` - **Co zrobiono:** - Dodano `aiGateway.mjs` ujednolicający komunikację z Gemini SDK (klucz `GEMINI_API_KEY`) oraz przesyłanie sygnału `AbortSignal` dla poprawnego odrzucania nadmiarowych zapytań (temperatura). - Utworzono moduł `oraculum.mjs` korzystający z mocniejszego modelu (`gemini-1.5-pro`), transformujący luźny prompt na ustrukturyzowany JSON (`skeleton` i `mechanical_gate`). - Przebudowano `server.mjs` dodając endpoint `POST /api/oraculum`, który po odpytaniu Oraculum zapisuje logikę prosto do plików dyskowych (`10_skeleton_target.md` i `30_mechanical_gate.json`) w folderze `.gema0/assembly/MISSION_`. - Przepisano `shotgunSwarm.mjs`, odłączając argument mockowanego `llmProvider` i nakazując mu strzelać realnymi zapytaniami z modułu `aiGateway.mjs` z modelem `gemini-1.5-flash` wykorzystując mechanizm Node `AbortController`. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — Most kodowy assembly -> misja (Watcher i Adapter) - **Wersja:** 10.0.0 - **Zakres:** backend, frontend - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `backend/core/assemblyAdapter.mjs` (nowy plik) - `backend/core/assemblyWatcher.mjs` (nowy plik) - `backend/server.mjs` - `backend/core/orchestrator.mjs` - `frontend/sequencer-ui/src/App.jsx` - **Co zrobiono:** - Utworzono `assemblyAdapter.mjs`, który parsuje `10_skeleton_target.md` oraz `30_mechanical_gate.json` zgadując tryb i argumenty walidacji dla nowego systemu misji Orkiestratora. - Zbudowano `assemblyWatcher.mjs`, który skanuje foldery `workspaces/*/ .gema0/assembly/` i na nowo powstałe katalogi wysyła zapytania `POST /api/mission`. - Wzbogacono `orchestrator.mjs` o obsłużenie pola `mechanicalGate` w obiekcie misji. Po udanym zapisie AST / tworzeniu pliku wywoływany jest mechanizm wykonujący `verifyCmd` przez Node.js `execSync`. Zapisywane są wtedy odpowiednie raporty `.lock`, `20_agent_report.md` oraz `40_auditor_verdict.md`. - Wzbogacono `App.jsx` o obsługę nowych zdarzeń logów `MECHANICAL_VERIFY_START` oraz `MECHANICAL_VERIFY_SUCCESS`. - **Odhaczono w planach:** - `05_MAPA_PLANOW_V5_V10.md` — Odhaczono most kodowy assembly->misja oraz adapter `30_mechanical_gate.json`. - **Otwarte / do poprawy:** - SEMANTIC_AUDIT z v5 (jeszcze niezaimplementowane). ### 2026-05-28 — Zabezpieczenie Orkiestratora i dodanie trybów tworzenia (CREATE_NEW_FILE / GRAFT_EXISTING_AST) - **Wersja:** 10.0.0 - **Zakres:** backend, frontend - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `frontend/sequencer-ui/src/App.jsx` - `backend/server.mjs` - `backend/core/orchestrator.mjs` - **Co zrobiono:** - W `App.jsx` dodano sekcję "Mission Settings" (z inputem na `Target File Name` i selectem na `Operation Mode`). Zaktualizowano payload `POST /api/mission` i warunki `disabled` dla przycisku startu. - Zmieniono walidację w `server.mjs`, aby przyznawała "Full Mission" zadaniom z `mode` zdefiniowanym z frontendu. - W `orchestrator.mjs` wydzielono obsługę `CREATE_NEW_FILE` jako pełne stworzenie pliku (bez parsowania przez AST Grafter) używając `fs.writeFileSync`. Orkiestrator poprawnie obsługuje foldery projektów używając absolutnych ścieżek względem `workspaces/`. - W `orchestrator.mjs` otoczono `executeMission` klauzulą `try/catch` publikującą zdarzenia `AGENT_FAILED` i `MISSION_FAILED` do UI w wypadku napotkania krytycznego błędu na etapie AST Graftera albo walidacji, by uniknąć crashu `ECONNRESET`. - **Odhaczono w planach:** brak - **Otwarte / do poprawy:** brak ### 2026-05-28 — The Oracle z dynamicznym UI podpiętym pod Workspace API - **Wersja:** 10.0.0 - **Zakres:** frontend - **Agent / sesja:** Gemini 3.1 Pro - **Pliki zmienione:** - `frontend/sequencer-ui/src/App.jsx` - **Co zrobiono:** - Przebudowano lewy panel "THE ORACLE" w `App.jsx`, zastępując sztywne UI dynamicznym panelem kontrolnym. - Dodano odpytywanie `GET /api/projects` w `useEffect` dla obsługi rozwijanej listy projektów. - Zaimplementowano tworzenie nowego projektu przez zapytanie `POST /api/projects`. - Powiązano wielolinijkowe pole `