120ea7db24e9486d8e7767d649da6e0a3bfef94f
## What was built (Task #28 — all 5 requirements) ### 1. js/edge-worker.js (Web Worker) Proper Web Worker entry point (not a regular module) using postMessage API. Loads Transformers.js zero-shot-classification + SST-2 sentiment models in the worker thread. Signals { type:'ready' } when both models are warm. Handles { id, type:'classify'|'sentiment', text } messages and replies with results. Fast greeting heuristic bypasses model for trivial inputs. ### 2. js/edge-worker-client.js (main-thread proxy) Main-thread wrapper that spawns edge-worker.js via new Worker(url, {type:'module'}). Wraps classify()/sentiment() as Promise-based API. Exports: warmup(), onReady(), isReady(). Gracefully falls back to server routing if Web Workers unavailable. ### 3. js/nostr-identity.js - Fixed Nostr API endpoints to match server: POST /identity/challenge (→ nonce), POST /identity/verify (body:{event}, event.content=nonce → nostr_token) - NIP-07 extension preferred; localStorage keypair only generated on explicit user consent via showIdentityPrompt() UI — no silent key generation - getOrRefreshToken() used by payment.js/session.js for X-Nostr-Token header ### 4. js/agents.js setMood() export maps POSITIVE/NEGATIVE/NEUTRAL → Timmy face expressions (curious/focused/contemplative) via setFaceEmotion() + MOOD_ALIASES. ### 5. Sentiment on INBOUND messages (per reviewer requirement) - websocket.js: sentiment() runs on Timmy's inbound `chat` messages → setMood() - session.js: sentiment() runs on data.result (Timmy's reply), not outbound text - Both auto-clear mood after 10 s ### 6. UX additions - setEdgeWorkerReady() in ui.js shows "⚡ local AI" badge when worker models warm - showIdentityPrompt() opt-in Nostr identity UI shown 4 s after page load - Cost preview badge via /api/estimate with free/partial/full display - Local triage: trivial messages answered without Lightning payment ### 7. Infrastructure - vite.config.js: worker.format:'es' + optimizeDeps.exclude @xenova/transformers - package.json: nostr-tools, @xenova/transformers deps added
Description
Timmy Tower World — sovereign AI agent economy
Languages
TypeScript
68.9%
JavaScript
15.5%
Shell
10.6%
HTML
4.5%
CSS
0.4%