Quality improvements: Unicode chars, Token class, imports, type hints, formatting
GitHub Actions
3f78ea8
- Ruff formatting applied to all 158 files
- Fixed Unicode character ambiguities (RUF001)
- Removed duplicate methods in _EchoBackend class
- Updated Token dataclass with proper type hints
- Fixed unused imports and parameter shadowing
- Improved optional import handling
- 47% reduction in ruff lint violations (51 → 27)
- All tests passing, no regressions
fix: easter-egg ticker now properly works in Gradio app
GitHub Actions
d6ca3a2
Moved ticker CSS/HTML/JS to module-level constant that gets injected
at app startup. This bypasses Gradio's iframe isolation that was
preventing the keydown listener from working.
- Ticker positioned as fixed overlay at bottom of page
- Smooth slide-in animation when pressing 'e'
- Won't trigger while typing in input fields
- Works across all tabs in the Gradio app
feat: WebLLM browser agent with PeerJS mesh, HybridRAG, news signals, and easter-egg ticker
GitHub Actions
78cc96f
- webagent/: complete browser-only app (no backend)
- WebLLM ReAct agent with tool-calling (search, scrape, summarize, remember, schedule, RAG)
- PeerJS over-internet mesh (anchor + roster gossip + reclaim failover)
- News RSS ingest with CORS proxy throttling, signal scoring (war/cyber/space/aviation/earth/finance), custom alerts
- HybridRAG integration (localStorage-persisted BM25+phonetic+Levenshtein+n-gram+sentence-window)
- Tab UI (Agent/News/Mesh) with model selector, chat, mesh peers, signal sharing
- Press 'e' to toggle live news ticker overlay (easter-egg)
- Python Phase 1 fixes (unstaged from prior session):
- hearthnet/services/llm/backends/hf_local.py: local Ollama/llama.cpp backend
- hearthnet/services/chat/service.py: chat routing
- hearthnet/services/demo.py: demo service
- app.py: Gradio web UI
- hearthnet/node.py: node initialization
- hearthnet/ui/tabs/ask.py: ask tab UI
Screenshots: 37/38 passed (1 pre-existing rag-trace failure)
New files:
- app_nemotron.py: second Gradio Space for Nemotron Document Intelligence
Custom purple-orange UI, structured extraction, Q&A, summarise, push-to-mesh
Targets: NVIDIA RTX 5080 (Nemotron), Off Brand badge, Tiny Titan (8B)
- hearthnet/ui/tabs/nemotron.py: Nemotron tab (embeddable in main app)
- hearthnet/services/llm/backends/modal_backend.py: Modal serverless GPU backend
Calls deployed Modal endpoint (MODAL_ENDPOINT env var)
- scripts/modal_deploy.py: one-command Modal endpoint deployment
- docs/IMPROVEMENTS.md: GPT-4o rating 8.3/10, 29 improvements, prize matrix
Changes:
- hearthnet/node.py install_services(): auto-wire Nemotron (NVIDIA_API_KEY),
MiniCPM (MINICPM_URL), Modal (MODAL_ENDPOINT) backends from env vars
- README.md: +tags nemotron/minicpm/modal, expanded hackathon section with
NVIDIA/OpenBMB/Modal sponsor prize targeting table
- tasks.md: updated test count (489), added June 11 entry
feat: impl_ref §22 gap-fill — all missing symbols implemented
GitHub Actions
38cba90
M12 CLI (9 new commands):
- log (follow mode + snapshot), erase (--keep-keys, --yes)
- rag list/ingest/reindex subgroup
- invite create/redeem subgroup
- version command
- _bus_call helper for bus/v1/call POST
node.py:
- ManifestPublisher class (periodic mDNS+UDP re-publish, triggered on registry change)
- PeriodicTask class (generic async interval runner)
- Removed 2nd duplicate NodeManifest that had leaked back via junk merge
M04 LLM backends (3 new files):
- lmstudio.py — LmStudioBackend wraps OpenAICompatBackend (localhost:1234/v1)
- hf_api.py — HfApiBackend (HF Inference API, HEARTHNET_HF_TOKEN opt-in)
- anthropic_api.py — AnthropicApiBackend (claude-3-haiku/sonnet, ANTHROPIC_API_KEY opt-in)
M01 Identity:
- CommunityPolicy, CommunityMember, RevokedEntry dataclasses added to manifest.py
- Exported from identity/__init__.py
M08 UI:
- hearthnet/ui/theme.py — hearthnet_theme (purple/dark), emergency_theme (red)
- hearthnet/ui/topology.py — TopologyComponent with push_trace/push_to…
fix: 0 test failures; FileService; real RagService; emergency probe; chat return
GitHub Actions
4aaae80
TESTS:
- conftest.py: nest_asyncio.apply() fixes Python 3.13 + pytest-asyncio 0.26
event-loop isolation — was causing 32 cross-test failures; now 102 passed 0 failed
- pyproject.toml: asyncio_mode=strict + asyncio_default_fixture_loop_scope=function
SERVICES (no mocks, no fakes in production):
- hearthnet/services/__init__.py: import real RagService not demo.RagService
- hearthnet/services/files/: new FileService providing file.put/file.get/file.list/
file.delete via bus (BLAKE3 CID, in-memory or disk store)
- node.py: register FileService in both install_demo_services and install_services
- marketplace: add market.delete capability (alias for expire)
UI BUGS FIXED:
- ui/tabs/chat.py: add missing return in except block (was returning None on error)
- ui/tabs/emergency.py: wire Run Connectivity Probe button with sync probe +
show results; was defined but never connected
- ui/tabs/settings.py: gen_invite gracefully handles missing nacl/community manifest
APP.PY (HF Space):
- Reg…
feat: implement all M01-M13, X01-X04 modules + quality gate fixes