- Replace minimal rDesign landing with full rl-* pattern (hero, features,
how-it-works, capabilities, open source, data protection, CTA)
- Add Scribus button to Create toolbar group in canvas (folk-design-agent)
- Export FolkDesignAgent from lib/index.ts, register in canvas.html
- Update module icon from 🎯 to 🎨 (matches favicon + MODULE_META)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Register rDesign in folk-rapp MODULE_META and shell FAVICON_BADGE_MAP
- Handle explicit presence-leave messages for immediate peer cleanup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Mobile toolbar collapsed position now flush with bottom-toolbar (bottom: 8px)
- Toolbar defaults to collapsed on mobile (<768px)
- Zoom expand/minimize uses distinct icons (magnifier +/-) instead of CSS rotation
- SW update banner on all pages: "New version available — Tap to update"
- Detects controllerchange + updatefound events
- Purple gradient bar, dismissible, reloads on tap
- Added to both shell.ts (module pages) and canvas.html (standalone)
- folk-rapp: filter picker/switcher by enabled modules
- server/shell: react to modules-changed event for runtime module toggling
- collab-presence: minor overlay updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RunPod was hard-gated — returned 503 when RUNPOD_API_KEY missing,
blocking even LLM script generation. Now generates script via Ollama
regardless, only attempts RunPod render if key is configured. Health
check returns warnings (non-blocking) vs issues (blocking). Default
model switched to qwen2.5:14b (available on server). Regex also
handles non-python-tagged code blocks.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transform MI from single-shot chat into an agentic system:
- LiteLLM provider with Claude Sonnet/Haiku models via proxy
- Agentic loop (max 5 turns): stream → parse actions → execute server-side → feed results back
- Server-side media generation (fal.ai + Gemini) as first-class MI actions
- Module data queries (rnotes, rtasks, rcal) read directly from Automerge
- System prompt enriched with recent notes, open tasks, and calendar events
- Client handles new NDJSON types (turn, action-start, action-result)
- Extracted shared media helpers, refactored image/video endpoints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transform the AI planner right panel into an interactive workspace:
- Persistent MapLibre GL map (40% height) with pin accumulation and route lines
- Flight search results with prices, airlines, and Kiwi.com booking links
- Route cards with distance/duration from OSRM
- Nearby POI discovery via Overpass API (restaurants, hotels, attractions)
- Server-side trip tool execution via new /api/trips/ai-prompt endpoint
- Conversational system prompt that progressively builds understanding
- New lib/trip-ai-tools.ts with 4 executable tools (search_flights, get_route,
geocode_place, find_nearby)
- Enhanced demo mode with realistic mock flights, routes, and geocode data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The bulk forget dialog was freezing because each shape triggered a
separate Automerge change, IndexedDB write, and WebSocket sync. New
bulkForget() method batches all shapes into one transaction with DOM
updates applied immediately for responsiveness.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace movementX/Y delta accumulation with absolute mouse-to-shape offset
tracking for drift-free drag. Remove drop suggestion overlay system entirely.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename all "Delete" labels to "Forget permanently" to align with the
three-state memory model (present → forgotten → deleted). Add explainer
blurb in memory panel. New Collective Memory graph view — force-directed
bubble chart showing shape remembrance scores sized by how many members
still remember each shape, with click-to-navigate.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Gemini Flash agentic loop that converts natural language prompts
into real MCP tool call sequences for PCB design (KiCad) and parametric
CAD (FreeCAD). Dynamic schema conversion from MCP tools to Gemini
function declarations, 8-turn/60s loop with real execution and result
feedback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The actual logout UI is in rspace-header.ts (not the encryptid login
button component). clearSession() now calls /api/session/logout, and
on page load the header validates the session with the server to detect
revocation from another browser session.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Forward Automerge change that overwrites content fields with snapshot data,
preserving meta and full history. Also fixes pre-existing TS errors in
folk-flow-river (undefined exitX) and test-full-loop (StepResult type).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
FolkShape now uses stopImmediatePropagation for pointerdown on non-drag
targets (scrollable content, inputs, buttons) so canvas selection and
snap listeners don't fire. Canvas capture-phase listener now checks
composedPath to only track actual drag targets (host, handles, headers).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Drawing/shape tools (pencil, line, rect, circle) now stay active for
multiple strokes instead of resetting to selector after each use.
Renamed collab overlay badge from "Solo/Share" to "Offline/Online".
Prevent canvas drag when interacting with image-gen and prompt content.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Register 5 trip-specific tools (destination, itinerary, booking, budget,
packing list) in canvas-tools.ts so Gemini can create trip shapes.
Add public toolsEnabled/systemPrompt properties to folk-prompt with
persistence. Add #trip-planner hash handler to canvas.html that auto-
creates a pre-configured AI prompt. Add "Plan with AI" gradient button
to rTrips list and detail views.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix Delete/Backspace deleting the note shape when editing text inside
it. The canvas keydown handler now uses composedPath() to detect
inputs inside Shadow DOM (textarea, title input). Also fixes Space
key and Ctrl+Z being intercepted by canvas while typing.
- Stop all keydown propagation from the editor/title inputs to prevent
arrow keys from moving the shape while editing.
- Fix layout: replace calc(100%-36px) with proper flex layout. Header,
toolbar, footer are flex-shrink:0; editor fills remaining space.
Fixes headers being cut off and weird sizing.
- Add semantic zoom: icon-only (<0.3x), summary (0.3-0.7x), full
editor (>0.7x). Reads --canvas-scale CSS custom property set by
updateCanvasTransform().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move mobile toolbar to right side to avoid zoom bar overlap
- Toolbar panel opens leftward, bottom toolbar offsets flipped
- Add [locked] attribute reflection on folk-shape for external CSS
- Persistent 🔒 badge on locked shapes visible when unselected
- Add Authorization header to calendar reminder POST request
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix elementFromPoint using canvas-relative coords instead of viewport
coords for shape detection during pin placement
- Use shape data from Automerge doc for offset calculation (more reliable)
- Add exitCommentMode() to deactivate pin placement when switching tools
- Integrate comment mode into syncBottomToolbar active state
- Escape key closes popover and exits comment mode
- Mutual exclusion between comment/draw/connect/pending tool modes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pins no longer require a message. Added "Link existing rNote" picker
to attach space notes to pins. Linked notes show as clickable links
in the popover with unlink option.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Overlay markers at canvas or shape-relative coords with threaded
comments, @mention notifications, and rSchedule reminder integration.
Toolbar "Leave Comment" button (/) next to Note tool.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
folk-prompt can now spawn shapes on the canvas when Tools mode is
enabled. Gemini calls functions (create_map, create_note, create_embed,
create_image, create_bookmark, create_image_gen) and the client
executes them via window.__canvasApi. Multi-turn loop on server (max 5
rounds) with synthetic success responses. Extensible via registerCanvasTool().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Authorization header to fetchTripData, fetchTripDetail, and
fetchNotesData to prevent 401 errors on private spaces
- Add #initialSyncFired flag to CommunitySync so the "synced" event
only fires once per connection cycle instead of on every debounce gap
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove ambient repulsion loop (shapes drifting apart at 60fps). Add
Figma-style snap alignment guides during drag with magnetic stickiness,
and ghost drop suggestion when shapes overlap after drop.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Destructive operations (forget, delete, remember) now flush to
IndexedDB + localStorage immediately instead of using 2s debounce,
preventing deleted items from reappearing on page reload.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add folk-shape to pushExemptTags so wb drawings (pencil, rect, circle,
line) are exempt from repulsion and can overlap other shapes freely
- Skip wb-drawing elements in repulsion loop and free-position placement
- Locked shapes are not pushed by repulsion (full push goes to unlocked neighbor)
- getExistingShapeRects uses pushExemptTags instead of hardcoded arrow check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Eraser now targets any folk-shape (not just wb-drawing), erasing whatever it touches
- Added lock property to folk-shape: locked shapes can't be moved, resized, or erased
- Lock state persisted via Automerge sync (toJSON/applyData/fromData)
- Lock icon appears beside calendar icon when shape(s) selected, toggles lock on click
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Local inverse-change stack that records before-snapshots of each mutation
and applies forward Automerge changes to restore state on undo. Batches
rapid same-shape changes (<500ms) so drags produce a single undo entry.
Supports create, move/resize, forget, remember, and hard-delete operations.
Max 50 entries, redo stack clears on new changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Force authenticatorAttachment: 'platform' across all WebAuthn registration
flows to prevent USB security key prompts. Redirect browser navigations to
space root when accessing disabled modules instead of returning JSON error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add guided tours to 6 modules that were missing them:
- Shadow DOM: rsocials dashboard, crowdsurf, rdata (TourEngine)
- Light DOM: rsplat, rbnb, rvnb (new LightTourEngine class)
Add solo mode toggle to collab overlay — click the presence badge
to hide your cursor/presence from others. Persists via localStorage,
dispatches event to canvas PresenceManager.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded light-mode colors (#f8fafc, #e2e8f0, white, #1e293b, etc.)
with theme-aware CSS custom properties (--rs-bg-surface, --rs-text-primary,
--rs-border, etc.) in 24 shape files. Adds color inheritance to folk-shape
base class so all shapes get correct text color in both dark and light mode.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Newsletter campaigns now require N-of-M team member approval via rInbox
before Listmonk starts sending. The send-newsletter workflow node creates
a draft campaign and gates it through the team inbox; a manual submit-
approval route is also available. The multisig email UI shows a green
"Newsletter Approval" badge with campaign ID for newsletter approvals.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Progressive approval workflow: paste brief → AI extracts structure →
AI generates per-platform posts → review with per-post regen →
commit (saves campaign, creates threads, drafts newsletters, builds workflow DAG).
Includes MI integration for Cmd+K campaign creation and vite build entry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- folk-calendar: fix data-date format for prev/next month padding days
(month=0 produced "2026--1-28" which split into NaN month → Invalid Date)
- folk-calendar: guard toJSON against invalid dates to prevent toISOString crash
- folk-calendar-view: add "+" button to expanded day detail panel
with inline title input + time picker for creating reminders
- Styles for the add-reminder form matching existing dark theme
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Space creation was broken because the canvas module has id "rspace" but
all navigation URLs used "/canvas". On production subdomain routing this
resulted in 404s after creating a space.
- Switch create-space form from deprecated /api/communities to /api/spaces
- Replace all /canvas navigation URLs with /rspace to match module ID
- Fix DID matching in space listing to check both sub and did:key formats
- Add proper client DID support in EncryptID registration flow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add global polyfills for AbortSignal.timeout() (Safari <17, Firefox <122)
and crypto.randomUUID() (Safari <15.4, Firefox <95) in shell HTML templates.
Add -webkit-backdrop-filter prefix across 13 files for older Safari support.
Add Firefox scrollbar (scrollbar-width/scrollbar-color), range input
(::-moz-range-thumb/track), and color-mix() rgba fallbacks. Create shared
compat.ts utility module. Lowers browser floor from Safari 17/Firefox 122
to Safari 15.4/Firefox 95.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
activeLayerId was being written to the shared Automerge CRDT on every tab
switch, causing all open windows/devices to follow. Now active tab is
local-only. Adds REST API + server-side storage so authenticated users'
tab lists persist across sessions and devices.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move "N online" badge to bottom-right corner, remove connection status indicator
- People panel opens upward from badge with Solo/Multi mode toggle
- Solo mode hides remote cursors and suppresses presence broadcasting
- Notification toast when others join in solo mode with quick switch button
- Move share button from floating badge to header (share arrow icon beside settings)
- Share panel now drops down from header instead of floating up from bottom
- Mode preference persisted to localStorage
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove apple-mobile-web-app-capable (redundant with manifest.json display),
add AbortController timeout + 524 handling for /api/3d-gen fetch, and
downgrade CommunitySync WS error to console.warn since reconnect is automatic.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Integrate RoomSync, participant markers, location sharing, waypoints,
emoji avatars, and participant panel into the canvas map shape. Users
can now create collaborative map rooms directly from the canvas toolbar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Port HolonShapeUtil from canvas-website to rSpace web components.
Replaces dead HoloSphere/GunDB stub with local-first CRDT storage
via window.__rspaceOfflineRuntime. H3 geospatial hierarchy via pure
h3-js. Data model designed for future AD4M Perspective bridging.
- lib/holon-service.ts: Automerge-backed holon registry + lens docs
- lib/folk-holon.ts: Main holon shape (ID entry → connected view with 16 lenses)
- lib/folk-holon-browser.ts: Search/browse shape with open-holon event
- Registered in canvas.html: imports, define, registry, CSS, toolbar, sizes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add AI zine generator section to rPubs landing page with style showcase
and links to /rpubs/zine and zine.mycofi.earth. Add /zine sub-route that
redirects to canvas with ?tool=folk-zine-gen. Add ?tool= URL param
support to canvas for auto-spawning any registered shape on load.
Also adds folk-image and folk-bookmark shape components.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ecosystem manifest protocol, EcosystemBridge class, server proxy
routes, port/event integration for folk-rapp, sandboxed iframe mode
with origin-validated postMessage, and SW caching for ecosystem modules.
Security: no allow-same-origin on sandboxed iframes, redirect: error
on proxy fetches, origin validation on all postMessage handlers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
folk-calendar subscribes to clock:tick/daily to refresh today marker.
folk-reminders-widget auto-refreshes every 5 minutes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server-side SystemClock broadcasts tick/5min/hourly/daily events via
WebSocket to all connected clients. Events are ephemeral (not persisted
in CRDT). Client-side fallback clock activates when server connection
is lost.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>