Testaaja ja QA saivat 503 koska smollm-solmua ei ole ladattu.
Kaikki agentit käyttävät nyt samaa qwen-coder -mallia.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pipelinen peräkkäiset kpnRun-kutsut saivat 503 koska hub merkitsi
solmun busyksi eikä vapauttanut sitä ajoissa. Reititetään aina
ensimmäiselle matchaavalle solmulle. LLM_BUSY suojaa Wasm-puolella.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Vanha frontend siirretty temp/. Uusi rakenne:
- StatusBar.astro, Terminal.astro, Editor.astro, Guide.astro
- global.css erillinen
- Wasm pääsäikeessä (ei Worker — yksinkertainen, debugattava)
- Tab-completion, dropdown, projektikortti, Monaco, GUIDE.md
- Ei tokenisointia eikä koodilaboratoriota
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ongelma: warmup-prompt käynnisti inferenssin heti yhdistymisen jälkeen,
jolloin oikea kpnRun-prompt tuli solmulle kun se oli vielä busy.
Solmu lähetti llm_error mutta UI:ssa ei ollut käsittelijää → ikuinen odotus.
Korjaukset:
1. Poistettu warmup ensureCoderNode:sta — ei tarvita koska kpnRun
käynnistää solmun automaattisesti
2. kpnRun odottaa coderWsReady-lippua max 15s (pollaus 500ms välein)
kiinteän 1s viiveen sijaan
3. Selkeä virheilmoitus jos solmu ei käynnisty
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kaksi korjausta laskentaan:
1. kpnRun kutsuu ensureCoderNode() automaattisesti jos solmu ei ole
vielä käynnissä — käyttäjän ei tarvitse muistaa kpn load
2. localStorage-autostart: jos malli oli ladattu ennen refreshiä,
ensureCoderNode() ajetaan automaattisesti sivulatauksessa
Tämä korjaa "Ei vapaata solmua" -virheen kpn run coder -komennoissa.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ongelma: start_agent_node palautui heti ennen kuin WebSocket ehti avautua.
Worker lähetti 'started' ja warmup lähti liian aikaisin → hub ei löytänyt
solmua → "Ei vapaata solmua" -virhe.
Korjaukset:
1. worker.js: kuuntelee "Yhteys Hubiin avattu" -logia Wasmista ja
resolveaa started-Promisen vasta sen jälkeen (15s timeout)
2. worker.js: onerror + onunhandledrejection käsittelijät
3. worker.js: console.error välitetään pääsäikeelle
4. index.astro: ensureCoderNode odottaa (await) workerStarted-Promisea
ennen warmupia ja pending-promptin lähetystä
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Decoupled robust frontend into an Astro framework in `frontend/`.
- Replaced direct WebSocket broadcast with Smart Routing to distribute workload only to idle capable nodes, preventing 503 errors and duplicate responses.
- Rewrote WASM panic points (`unwrap()` handling) into panic-safe match blocks in qwen_coder.rs preventing Node Web Workers from crashing.
- Integrated robust dynamic Three.js 3D visualization.
- Resolved mermaid and THREE.js frontend hydration issues.
Native-node kääntyy nyt macOS:llä ja muilla koneilla ilman NVIDIA-ajureita:
cargo run --no-default-features ← vain Ollama, ei GPU-tunnistusta
cargo run ← oletus: GPU-tunnistus mukana (nvml + wgpu)
Feature flag "gpu-detect" kontrolloi nvml-wrapper ja wgpu -riippuvuuksia.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Luetaan NODE_API_KEY-ympäristömuuttuja ja lisätään api_key-kenttä
auth-viestiin. Hub tarkistaa avaimen ja hylkää solmun jos se ei täsmää.
Käyttö:
NODE_API_KEY=kpn_sk_abc123 HUB_URL=ws://hub:3000/ws cargo run
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Natiivisolmujen (node_type: native) auth-viesti vaatii api_key-kentän
joka vastaa hubin NODE_API_KEY-ympäristömuuttujaa. Virheellinen avain
sulkee WebSocket-yhteyden.
Selainsolmut eivät vaadi avainta (Origin-validointi suojaa niitä).
Jos NODE_API_KEY ei ole asetettu, kaikki natiivisolmut hyväksytään
(kehitysympäristö).
Käyttö:
Hub: NODE_API_KEY=kpn_sk_abc123 cargo run
Node: NODE_API_KEY=kpn_sk_abc123 cargo run
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Jokaiselle avatarille lisätty:
- Ehdotettu rooli (Arkkitehti, CI/CD, UI/UX, Tech Lead, SRE jne.)
- Persoonakuvaus joka kuvaa hahmon luonnetta ja erikoisosaamista
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Poistettu: avatar-kortti, gallery-head, agentPrompts-entry,
avatarMap, värimapit. Tofuist on edelleen Agent Builderin
esimerkkiagentti ja docs/tofu-cheatsheet.md säilytetään.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Suhteellinen polku rikkoi sivun kun navigoitiin suoraan
/avatars/ tai muuhun alihakemistoon (selain yritti ladata
/avatars/pkg/node.js jota ei ollut).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- System Prompt: miten kirjoittaa hyvä prompti, esimerkit hyvä/huono
- Temperature: mitä arvot tarkoittavat (0.0–1.0+)
- Top-k: tokenivalinnan laajuus
- Max tokens: vastauksen pituus
- Malli: Ollama-malliesimerkit
- Docs: referenssidokumentin käyttö
- CSS .builder-tip ::after tooltip (white-space: pre-wrap)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kuvaa hahmolomakkeen arkkitehtuurin: agenttiskeema, rooli-templatet,
malli-valitsin, avatar-grid, docs-kenttä, localStorage-tallennus,
export/import ja 4-vaiheinen toteutussuunnitelma.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Tofuist-agentin model vaihdettu qwen-coder → qwen2.5-coder:7b
- Hub: qwen2.5-coder:* matchaa nyt qwen-coder*-solmuille ja päinvastoin
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Uusi agentti: Tofuist (gecko-avatar, oranssinkulta #e3a336)
- System prompt: HCL-koodi, moduulit, lifecycle, state encryption
- docs-kenttä: lataa automaattisesti /docs/tofu-cheatsheet.md referenssiksi
- kpnRun: tukee nyt agentin docs-kenttää (haetaan kerran, cachetetaan)
- OpenTofu-dokumentaatio haettu GitHubista + tiivistetty cheatsheet
- Avatar, gallery-head, värimapit ja pipeline-tuet lisätty
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Jos OLLAMA_URL ei ole asetettu, kokeillaan järjestyksessä:
1. localhost:11434 (paikallinen Ollama)
2. 127.0.0.1:11434
3. ollama:11434 (Docker-verkko)
4. host.docker.internal:11434 (Docker-kontti → isäntä)
Ensimmäinen joka vastaa /api/version-kutsuun valitaan.
Timeout 2s per kokeilu. Jos OLLAMA_URL on asetettu, sitä käytetään suoraan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ollama-palvelu puuttui client-composesta — native-node yritti yhdistää
ollamaan jota ei ollut. Nyt jokaisessa profiilissa on oma Ollama
(nvidia: latest+GPU, amd: rocm+/dev/kfd, cpu: latest) network alias
'ollama' jotta native-node löytää sen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Staattinen tekstitokenisointiesimerkki korvattu kuvalla joka
näyttää värikoodatut tokenit EN/FI-vertailussa
- Markdown-renderöijään lisätty  kuvatuki
- Kuva: static/images/tokenization-example.png
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lisätty #[wasm_bindgen] tokenize_js(text) → JSON-funktio joka lataa
tokenizerin IndexedDB:stä tai HuggingFacesta tarvittaessa.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
HUB_URL vaihdettu ws://agentic-poc:3000/ws → wss://kipina.studio/ws
jotta lokaali GPU-solmu palvelee tuotantoympäristöä.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tabit olivat piilotettu display:none-tyylillä, mikä rikkoi myös
hash-navigoinnin (#codelab, #network).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lisätty nappi jolla org-chartin voi vaihtaa vaaka- ja pystyasennon välillä.
Vaaka on oletuksena (kompakti), pysty lisää vertical-CSS-luokan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ongelma: kaksi erillistä avatar-aktivointilogiikkaa kilpaili:
1) pipelineStep() — oikea agentti statuksen perusteella
2) llm_prompt-handler — arvasi agentin prompt-tekstistä (usein väärin → DevOps vilkkui QA:n/Datan sijaan)
Korjaus:
- Poistettu llm_prompt- ja llm_done-handlerien avatar-heuristiikat
- pipelineStep() hoitaa kaiken: active → syttyy, done → sammuu heti
- Pipeline-lopussa kaikki avataret sammutetaan eksplisiittisesti
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pipelineStep() aktivoi nyt oikean agentin avatarin (sekä card että gallery-head)
kun status on 'active', ja poistaa 'done'-statuksella sekunnin viiveellä.
Poistettu llm_done-handlerin turha manageri-aktivointi joka vilkutti aina manageria.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ollaman system prompt: 'Use proper newlines and indentation'.
Staattinen analyysi: havaitsee jos .py-tiedosto on yhdellä rivillä.
Native node vaatii rebuildin.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>