- Expand app.py _seed_corpus() to ingest main docs/ folder (CAPABILITY_CONTRACT, GLOSSARY, M01-M13, X01-X04, OVERVIEW, ARCHITECTURE, roadmap, etc.)
- Content-addressed deduplication via BLAKE3 (automatic no-op on re-ingest)
- Integrated with Ask tab RAG query + routing traces
- Enhanced bus capability.py with trust levels and request context
- Improved RAG service ingestion flow with doc_cid tracking
- Updated UI ask.py and mesh.py tabs for better query visualization
- Settings tab shows active corpus and document count
- Updated tasks.md with completion status
docs: live screenshot of Ask tab working with local Ollama LLM
GitHub Actions
1f16cca
docs: live screenshot of local node meshing with HF Space over the relay
GitHub Actions
c48a01e
Add all-to-all internet mesh over relay hub (P1-P3) + user-story screenshot proof
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)
fix: asyncio.get_running_loop() across backends; expand mesh/capability/model UI docs
GitHub Actions
8ee8138
asyncio fix (Invalid file descriptor: -1 on Python 3.10):
Replace asyncio.get_event_loop() with get_running_loop() in all async
methods across 13 files (24 occurrences). get_event_loop() can silently
create a new loop when called outside a running loop, which gets orphaned
and triggers ValueError in __del__ on GC. get_running_loop() raises
RuntimeError immediately if no loop is running — failing fast is correct.
Settings tab - 'Join This Mesh' section rewritten with:
- Option A (same LAN / mDNS): exact commands, timing, verify step
- Option B (invite QR): redeem command, HF Space invite URL example
- Option C (relay): config.toml snippet
- Connecting 3+ meshes: multi-community bridge pattern with code
Getting Started tab - new sections:
- 'Calling a Capability on Any Node': bus.call() Python + CLI examples
for llm.chat / rag.query / chat.send / market.list / registry.all()
- 'Getting Model Weights from a Peer Node': model.list / model.pull /
model.status…
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…