Commit Graph

1970 Commits

Author SHA1 Message Date
Jeff Emmett c1bd6d770f Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m26s Details
2026-04-16 15:51:34 -04:00
Jeff Emmett dd608f831c tweak(mi-voice): quiet feminine — Emma, volume 0.25, neutral pitch
User preference: quiet + feminine. Swap Andrew (male) for Emma
(calmer, softer female than Aria). Drop volume 0.3 -> 0.25, reset
pitch to natural (deeper shift made it sound male). Rate stays slow.
2026-04-16 15:51:31 -04:00
Jeff Emmett 07b4714f48 fix(rpubs): canonical subdomain URLs for published pages
Published hosted_url, pdf_url, epub_url, and all links in the reader
page now use {space}.rspace.online/rpubs/... (subdomain form) instead
of path-scoped rspace.online/{space}/rpubs/... — matching the site
convention that space slugs always appear as subdomains.

The server already rewrites subdomain → path-scope internally for
routing, so Hono route mounts stay the same.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 15:51:28 -04:00
Jeff Emmett dd885487a0 Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-16 15:48:51 -04:00
Jeff Emmett d55b9f74c0 tweak(mi-voice): brief but well-formed, not telegraphic
Prior voice-mode prompt leaned too far into caveman/telegraphic speech
('drop articles'). User wants brevity with proper grammar — short
complete sentences, not neanderthal fragments.
2026-04-16 15:48:48 -04:00
Jeff Emmett 7cbf96de8b feat(rmeets): live captions + MI internal-key auth
- Add Web Speech API captions overlay in the default Jitsi meeting view,
  broadcasting final/interim transcripts over Jitsi's data channel so each
  participant sees everyone's speech in real time.
- Toggle via the MI FAB dropdown; degrades gracefully where SR is unsupported.
- miApiFetch + /api/mi-proxy now forward X-MI-Internal-Key so the Meeting
  Intelligence recordings/search/meetings lists resolve from the backend
  without per-user tokens.
- docker-compose exposes MEETING_INTELLIGENCE_API_URL, MI_INTERNAL_KEY,
  JITSI_URL to the rspace container.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 15:46:30 -04:00
Jeff Emmett 78c403da60 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m37s Details
2026-04-16 15:44:16 -04:00
Jeff Emmett 39fbd99897 feat(mi-voice): quieter+smoother voice, caveman terseness in voice mode
- Default voice en-US-AvaMultilingualNeural -> en-US-AndrewMultilingualNeural
  (smoother, less feminine timbre).
- Volume 0.55 -> 0.3, rate -8% -> -10%, pitch -2Hz -> -6Hz.
- Browser fallback matches: pitch 0.85, volume 0.3.
- Client passes voiceMode flag to /api/mi/ask; server appends a VOICE
  MODE section to the system prompt demanding ≤1-2 short sentences,
  no lists/markdown/emoji/preamble — because listening to long replies
  is tedious.
2026-04-16 15:44:11 -04:00
Jeff Emmett d53b8ee3bf Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m42s Details
2026-04-16 15:30:20 -04:00
Jeff Emmett 71782b1cf1 fix(mi-voice): await AudioContext.resume before source.start
Suspended contexts silently queued audio that never played. Await resume,
split connect() chain to avoid undefined-return on older browsers, and
re-check state after source setup in case first resume lost the gesture.
2026-04-16 15:30:16 -04:00
Jeff Emmett 858711e783 feat(rpubs): EPUB export + Publish-to-Space hosted URLs
- epub-gen.ts: reflowable (markdown → styled xhtml) and fixed-layout
  (Typst per-page PNGs wrapped as pre-paginated EPUB3). No new deps.
- typst-compile.ts: compileDocumentToPages() rasterizes Typst directly
  to PNG via the CLI (no poppler/mupdf needed).
- Persistent publications store at /data/rpubs-publications/{space}/{slug}
  with public reader page, PDF + EPUB downloads at /{space}/rpubs/publications/{slug}.
- Preview/Press step now has quick EPUB download buttons next to PDF.
- Publish panel: "Publish to {space}" is now the primary action, showing
  hosted URL + copy-link after publishing. EPUB variants remain in downloads.
- Dockerfile: new PUBS_DIR volume for persistence.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 15:23:49 -04:00
Jeff Emmett 415c80a5fb Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m3s Details
2026-04-16 15:19:06 -04:00
Jeff Emmett 1f084fa674 fix(mi-voice): big-endian header parse, apply gain, softer voice defaults
- Parse WS frame header length as big-endian (server uses struct.pack('>I')).
  Previous little-endian read always failed, silently forcing the browser
  Web Speech fallback.
- Apply header volume via GainNode so quieter actually plays quieter.
- Default voice en-US-AriaNeural -> en-US-AvaMultilingualNeural, with
  rate -8% / pitch -2Hz / volume 0.55 for a calmer, less grating output.
  Browser fallback gets matching rate/pitch/volume.
2026-04-16 15:18:40 -04:00
Jeff Emmett db7e49ee92 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m8s Details
2026-04-16 15:01:39 -04:00
Jeff Emmett 9daeb60895 fix(collab): dedup cursors by username + same-page-only visibility
- Deduplicate cursor rendering using #uniquePeers() (was showing
  multiple cursors per user from different tabs/sessions)
- Strict same-page filtering: cursors only visible when peers share
  the same effectiveViewId (viewId ?? moduleId)
- Users on different rApps no longer see each other's cursors
- Applied same fixes to focus rings and panel "different view" badge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:00:11 -04:00
Jeff Emmett 2b75651655 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m6s Details
2026-04-16 14:56:12 -04:00
Jeff Emmett c885773844 fix(shell): move tab bar up 2px more, reduce left padding for full-width span
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 14:56:05 -04:00
Jeff Emmett 9b9170c90b Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m9s Details
2026-04-16 12:47:14 -04:00
Jeff Emmett c5a58e1908 feat(rfeeds): add landing page and standalone domain (rfeeds.online)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 12:47:05 -04:00
Jeff Emmett 31a0b93310 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m27s Details
2026-04-16 12:44:33 -04:00
Jeff Emmett 1bc2a0af8c fix(encryptid): add missing welcome-email.ts to Docker build
Dockerfile.encryptid was missing COPY for server/welcome-email.ts,
causing container crash on startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 12:44:25 -04:00
Jeff Emmett 052be5159e Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m31s Details
2026-04-16 12:39:23 -04:00
Jeff Emmett 97c1b02c58 feat(rnetwork): power indices for DAO governance analysis
Banzhaf & Shapley-Shubik power index computation via DP, integrated
into trust engine 5-min cycle. Power tab in rNetwork 3D graph viewer
with animated bar chart, Gini/HHI gauges, and Banzhaf-scaled node
sizes. On-demand computation when DB empty. Left-drag now rotates.

New files:
- src/encryptid/power-indices.ts (pure math: Banzhaf DP, SS DP, Gini, HHI)
- modules/rnetwork/components/folk-power-indices.ts (standalone component)

API: GET /api/power-indices, GET /api/power-indices/:did,
     POST /api/power-indices/simulate

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 12:39:01 -04:00
Jeff Emmett 67b5d8e7f0 Merge branch 'dev'
CI/CD / deploy (push) Failing after 1m56s Details
2026-04-16 12:19:33 -04:00
Jeff Emmett b0049ba8f4 fix(shell): close header-tabbar gap, minimize all 3 header bars together
- Move tab row up 1px (top: 55px) to overlap header border, eliminating gap
- Minimize toggle now hides header + tab row + subnav (was leaving subnav visible)
- Floating restore button (top-right, semi-transparent) when headers minimized
- Smooth transition on subnav hide/show

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 12:19:26 -04:00
Jeff Emmett 24543b678d Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m4s Details
2026-04-16 11:04:25 -04:00
Jeff Emmett a2f74faa3e feat(rtime): split-screen layout — commitment form left, pool viz right
Restructured rTime from pool+weaving side-by-side to commitment entry
form (left 50%) and pool orb visualization (right 50%). Inline form
replaces modal for pledging time. Commitments list shows below form.
Weaving SVG moved to separate toggled view via "Weave" button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:04:14 -04:00
Jeff Emmett 8592abd467 feat(rmeets): chat popup notifications + right-side chat panel
- Enable chat notifications (brief popup for all participants)
- Move chat panel to right side via CHAT_PANEL_POSITION
- Applied to both clean room mode and folk-jitsi-room shell mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:36:29 -04:00
Jeff Emmett 12cc724291 fix(rmeets): add recording button + post-meeting transcript link
- Add "recording" to Jitsi toolbarButtons in both clean room mode
  and folk-jitsi-room shell mode so users can trigger Jibri recording
- Add "View Transcript & Summary" link on meeting-ended screen
- Jibri network connectivity fixed on Netcup (was on wrong Docker
  network, couldn't reach Prosody XMPP)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:09:30 -04:00
Jeff Emmett 694f47e363 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m4s Details
2026-04-16 08:47:42 -04:00
Jeff Emmett b1dfbfd3e9 feat(rfeeds): Phase 1+2 — RSS dashboard with rApp activity adapters & user feed profiles
Phase 1: External RSS/Atom import, manual posts, OPML import, combined
Atom 1.0 output feed, background sync loop, reshare curation.

Phase 2: 8 activity adapters (rcal, rtasks, rdocs, rnotes, rsocials,
rwallet, rphotos, rfiles) read Automerge docs directly — no circular
deps. Activity cache in FeedsDoc, configurable per-module toggles.
User feed profiles with personal Atom feeds at /user/{did}/feed.xml
subscribable cross-space via existing RSS import.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:47:29 -04:00
Jeff Emmett ae1ab57a99 Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-16 08:45:30 -04:00
Jeff Emmett d49b4ea2dc feat(rsocials): graph-based campaign creation with brief-to-canvas pipeline
Add campaign planner as primary creation tool. Brief inputs in collapsible
sidebar generate editable node graph via Gemini 2.5 Flash. New input node
types (goal, message, tone) with feeds edges to downstream post/thread nodes.
Stale tracking propagates when inputs change; batch regen + single-node AI fill.

- schemas: goal/message/tone node types, feeds edge, stale tracking, schema v8
- mod: 3 API endpoints (from-brief, regen-nodes, ai-fill-node) + /campaign-flow page
- planner: ports, wiring, rendering, inline config, brief sidebar, context menu
- css: brief panel, platform chips, stale badges, feeds edge styles

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:45:22 -04:00
Jeff Emmett c3f8e9ef1b Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-16 08:45:11 -04:00
Jeff Emmett fec934b8a3 fix(persistence): flush docs on shutdown, fix eviction race, mobile flush
- Add saveDocImmediate() for synchronous awaitable saves (no debounce)
- Add SyncServer.flushAll() to iterate all in-memory docs
- Fix eviction race: onDocEvict now uses saveDocImmediate instead of
  debounced saveDoc (which could fire after doc deleted from memory)
- Add SIGTERM/SIGINT handlers with 10s timeout safety net
- Add visibilitychange flush on client (reliable on mobile/bfcache)
- Flush pending IDB saves in DocSyncManager.disconnect()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:45:01 -04:00
Jeff Emmett 79ea868234 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m12s Details
2026-04-16 08:17:32 -04:00
Jeff Emmett 63c6fcc941 fix(auth): preserve current page on login instead of redirecting
Only redirect to personal dashboard when on demo landing page.
Logging in from any module page now reloads in place.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 08:17:24 -04:00
Jeff Emmett af9a7582b9 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m41s Details
2026-04-15 21:29:47 -04:00
Jeff Emmett 3ec8ac5308 fix(auth): auto-focus passkey input for mobile autofill
Remove readonly and auto-focus the username webauthn input so mobile
browsers show passkey suggestions immediately when the sign-in modal
opens, matching the desktop experience.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 21:29:40 -04:00
Jeff Emmett 887d6cf24d Merge branch 'dev'
CI/CD / deploy (push) Failing after 1m58s Details
2026-04-15 19:23:38 -04:00
Jeff Emmett efe3615228 fix(auth,rcred): passkey autofill for mobile + rcred write access
- Add conditional mediation to sign-in modal so mobile browsers show
  saved passkeys with usernames in the autofill area (desktop parity)
- Add publicWrite to rcred module so recompute route's own auth runs
  instead of being blocked by the global write-access middleware

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:23:28 -04:00
Jeff Emmett c2fb1b2858 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m28s Details
2026-04-15 17:32:24 -04:00
Jeff Emmett 932e550c66 fix(shell): eliminate phantom tab persistence — validate + dedup on restore
Filter restored tabs against valid moduleIds from moduleList, deduplicate
on every restore path (localStorage, server sync, BroadcastChannel).
Add closed-module tracking to renderExternalAppShell to prevent server
sync from resurrecting tabs closed in the current session.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:32:15 -04:00
Jeff Emmett cb521cad12 feat(rtime): shell tab bar + pool legend, remove internal tabs/stats bar
- Add shell tabs: Commitment Pool, Fulfillment, Open in Cyclos
- Move stats (hours, contributors, skill breakdown) into pool legend
- Remove internal tab-bar and stats-bar from component
- Listen for rapp-tab-change shell events for view switching
- Legacy routes redirect to new tab paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:27:46 -04:00
Jeff Emmett 9f258702a1 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m32s Details
2026-04-15 17:19:44 -04:00
Jeff Emmett c82eca38fa fix(server): add styled 404 page + stop SPA fallback serving stale HTML
Add app.notFound() handler with themed 404 page instead of Hono's
plain "404 Not Found". Restrict canvas.html SPA fallback to /rspace
sub-paths only — was serving index.html for all unmatched routes,
causing stale "Activated" page to appear on navigation errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:19:41 -04:00
Jeff Emmett 7214599f5a Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m7s Details
2026-04-15 17:16:58 -04:00
Jeff Emmett 72587ef690 feat(canvas): wire commitment weaving data flow between rTime and rTasks applets
Add pool-out port to folk-commitment-pool, two new applets (weaving-coverage
for rTime, resource-coverage for rTasks), fetchLiveData polling in FolkApplet,
and canvas AI tool declarations for both new applets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:16:48 -04:00
Jeff Emmett 4097a5eeac Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m30s Details
2026-04-15 17:12:56 -04:00
Jeff Emmett 8146f97550 fix(rnetwork): consolidate to single sub-tab menu, remove empty nav items
- Reduce tabs to Members (default), Trust, CRM
- Remove empty outputPaths (Connections, Groups placeholders)
- Hide subnav when tabbar is present (avoid double menu)
- CRM tab redirects to the CRM sub-app

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:12:50 -04:00