Commit Graph

1569 Commits

Author SHA1 Message Date
jeffemmett 8327d5b7f8 Merge pull request 'fix(rflows): align Openfort wallet label with flow-service' (#1) from dev into main
CI/CD / deploy (push) Successful in 2m40s Details
2026-04-03 03:59:40 +02:00
Jeff Emmett 8c349d2003 fix(rflows): align Openfort wallet label with flow-service
Use `user-${email}` instead of raw `email` as the Openfort player label,
matching the flow-service convention. Openfort rejects colons in labels,
and both codepaths must use the same format so users get the same wallet
regardless of whether they on-ramp via rfunds.online or rspace.online.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:59:24 +00:00
Jeff Emmett 570bfa95cb Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m43s Details
2026-04-02 16:21:09 -07:00
Jeff Emmett 6364eb8deb feat(shell): add Request Access button and Go to My Space fallback on access gate
When a logged-in user visits a private space they don't have access to,
the gate now shows a "Request Access" button (calls POST /api/spaces/:slug/access-requests)
and a "Go to {username}'s Space" secondary link. Handles already-pending (409) gracefully.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 16:20:56 -07:00
Jeff Emmett a73746bec3 Merge branch 'dev'
CI/CD / deploy (push) Waiting to run Details
2026-04-02 16:05:25 -07:00
Jeff Emmett 1cdbce0bcc fix(shell): update space-switcher on landing pages to show user's space or demo
Landing, module-landing, and sub-page-info pages showed a stale "Spaces"
dropdown. Now checks encryptid_session and sets the switcher to
{username}'s Space (logged in) or demo (logged out).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 16:05:14 -07:00
Jeff Emmett 2c3f8568a3 fix: use subdomain format {space}.rspace.online instead of path-based routing
Space creation popup slug field now shows input followed by .rspace.online
suffix instead of rspace.online/ prefix. Also fixes rtasks notification
link and browser extension help text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 15:16:07 -07:00
Jeff Emmett 666130954c fix: use subdomain format {space}.rspace.online instead of path-based routing
Space creation popup slug field now shows input followed by .rspace.online
suffix instead of rspace.online/ prefix. Also fixes rtasks notification
link and browser extension help text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 15:16:02 -07:00
Jeff Emmett f60e4683d5 ci: retrigger pipeline
CI/CD / deploy (push) Waiting to run Details
2026-04-02 15:11:43 -07:00
Jeff Emmett 52e2f77383 feat(canvas): add clipboard interop for tldraw/Excalidraw/JSON paste + Ctrl+C copy
CI/CD / deploy (push) Waiting to run Details
Enable pasting structured shape data from tldraw, Excalidraw, and generic
JSON into the rSpace canvas, with automatic type conversion and viewport
centering. Ctrl+C on selected shapes writes rSpace JSON to clipboard for
round-trip paste or external consumption.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 15:08:55 -07:00
Jeff Emmett 87bafc9d74 feat(rtime): port 14 missing hcc-mem-staging features to rTime module
- Connection & exec state persistence (POST /api/connections, PUT exec-state)
- Exec step detail forms for all 5 types (venue, comms, notes, prep, launch)
- Step state machine fix: click to expand/collapse, action button to complete
- Task editor links field with dynamic add/remove and server persistence
- Cyclos-aware launch handler with fallback to demo celebration
- Fix dead EXEC_STEPS[taskId] lookup, auto-place first task on empty canvas
- DID display truncation for unreadable DIDs in intent routes
- Dark/light theme toggle with localStorage persistence
- Hex hover stroke, commitment description in hex nodes, edit pencil on tasks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 15:08:43 -07:00
Jeff Emmett 5b4300db77 fix(ipfs): correct Kubo container hostname (collab-server-ipfs-1)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 15:06:05 -07:00
Jeff Emmett 789b74a776 ci: retrigger pipeline
CI/CD / deploy (push) Waiting to run Details
2026-04-02 15:05:16 -07:00
Jeff Emmett ca756b22aa Merge branch 'dev' 2026-04-02 14:28:19 -07:00
Jeff Emmett 1672477f68 feat(ipfs): add IPFS integration for backups and generated files
Pin encrypted backups and AI-generated files to Kubo (ipfs.jeffemmett.com)
as fire-and-forget redundancy. Filesystem remains primary storage — IPFS
failures are logged and swallowed. Adds /api/ipfs routes for status,
pin/unpin, and gateway proxy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 14:24:39 -07:00
Jeff Emmett c716723686 Merge branch 'dev'
CI/CD / deploy (push) Failing after 21m52s Details
2026-04-02 14:07:10 -07:00
Jeff Emmett 4b2592c27f fix(rinbox): handle IMAP socket errors to prevent server crash-loop
ImapFlow clients were created without .on('error') handlers. Socket
timeouts emitted unhandled errors that crashed the entire process,
taking down all 32 modules. Added error handlers to all 3 ImapFlow
instantiation sites and a process-level uncaughtException/unhandledRejection
safety net.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 13:50:45 -07:00
Jeff Emmett 83ae2e9bd9 Merge branch 'dev'
CI/CD / deploy (push) Successful in 6m9s Details
2026-04-01 15:54:15 -07:00
Jeff Emmett 14f7ccb090 fix(scribus): add healthcheck override for scribus-novnc
The Dockerfile's healthcheck hit a nonexistent /health endpoint, causing
permanent "unhealthy" status. Override with a check that accepts any HTTP
response (including 401) as proof the service is running.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 15:21:30 -07:00
Jeff Emmett 007df8a3bd Merge branch 'dev'
CI/CD / deploy (push) Waiting to run Details
2026-04-01 15:19:33 -07:00
Jeff Emmett c8e4aede02 feat(canvas): module-aware canvas architecture — shapes, tools, and toolbar gated by module
Modules now declare their canvas shapes and AI tools (canvasShapes/canvasToolIds
on RSpaceModule), creating a single source of truth that the canvas enforces:

- Phase 1: Extended RSpaceModule + ModuleInfo, added moduleId to CanvasToolDefinition
  with getToolsForModules() filter, added moduleOf() to ShapeRegistry, populated
  declarations in 9 modules, fixed 8 ungated toolbar buttons (rchoices, rwallet, rsocials)
- Phase 2: AI prompt sends enabledModules, server filters Gemini tool declarations
- Phase 3: folk-commitment-pool and folk-task-request show lock overlay when rtime disabled
- Phase 4: Extracted MODULE_META into shared lib/module-display.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 15:19:12 -07:00
Jeff Emmett 2a3c040990 Merge branch 'dev'
CI/CD / deploy (push) Successful in 6m57s Details
2026-04-01 14:59:38 -07:00
Jeff Emmett 3b0999da64 feat(rtime): commitment notifications + email delivery channel
- Fire commitment_accepted/commitment_declined notifications when solver
  results are accepted/rejected in intent-routes.ts
- Fire commitment_declined when a connection is deleted in mod.ts
- Add metadata (resultId, fromCommitmentId) to commitment_requested notify
- Fix actionUrl to use /rtime (subdomain-relative), not /{space}/rtime
- Add Accept/Decline action buttons in notification bell for
  commitment_requested events (same pattern as space_invite)
- Add email delivery channel to notification-service: sends from
  {space}-agent@rspace.online via SMTP, respects emailEnabled preference,
  inline HTML template with dark theme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:59:10 -07:00
Jeff Emmett bbe93cde78 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m11s Details
2026-04-01 14:46:28 -07:00
Jeff Emmett c4b85a82e6 feat(rnetwork): graph visualization polish, delegation sync, layers persistence
Phase 1 — UX Polish: loading spinner, node hover glow (THREE.RingGeometry),
empty state, live slider labels, keyboard shortcuts (Esc/F/T/L), toast
notifications, touch-friendly sizing (@media <=768px).

Phase 2 — Live Data Integration: edit delegation flow (POST vs PATCH),
cross-component sync via CustomEvent("delegations-updated"), dynamic
getAuthUrl() fallback chain, sparkline weight tracking via trust events,
revocation-aware time slider, new GET /api/trust/events endpoint,
include_revoked + revokedAt support on /api/delegations/space.

Phase 3 — New Visualizations: BFS delegation path tracing (max depth 3),
node/edge opacity dimming for non-path elements, transitive chain indicators
(TorusGeometry when >30% received weight), network metrics sidebar (Gini
concentration index, top 5 influencers with click-to-focus), log-scale
flow thickness (1.5 + log10(1 + w*9) * 3).

Phase 4 — Layers Persistence: LayerConfig + CrossLayerFlowConfig schema
types, CRDT doc version bump to 2 with migration, saveLayerConfig/
getLayerConfig in local-first-client, auto-persist on rebuildLayerGraph,
restore-on-connect, onEngineTick sine-wave pulse animation for compatible
feed targets during wiring, wiring progress indicator banner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:46:18 -07:00
Jeff Emmett 8f9aa98995 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m15s Details
2026-04-01 14:38:51 -07:00
Jeff Emmett 5b8b638661 feat: add commitment pool + task request canvas shapes for rTime
Two new FolkShape subclasses enable drag-from-pool-to-task interactions on
the canvas. Orbs dragged from the commitment pool highlight matching skill
slots on task request cards and POST connections via the rTime API. Adds
commitment_requested notification type so commitment owners are notified
when their time is requested.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:38:41 -07:00
Jeff Emmett 71f2bc8fa3 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m11s Details
2026-04-01 14:14:28 -07:00
Jeff Emmett b54d75d161 ci: re-trigger pipeline after server compose fix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:14:17 -07:00
Jeff Emmett ba5f3bfe3d Merge branch 'dev'
CI/CD / deploy (push) Waiting to run Details
2026-04-01 14:13:34 -07:00
Jeff Emmett ddf5772025 Fix space navigation redirects: server-side auth redirect + subdomain enforcement
Authenticated users visiting {space}.rspace.online/ now get a server-side
302 to /rspace instead of rendering the full dashboard then JS-redirecting
(eliminates flash of wrong header + 2-3 redirect chain → single redirect).

Bare domain rspace.online/{space} now 301-redirects to {space}.rspace.online/
so /{space}/ never appears in the URL bar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:13:24 -07:00
Jeff Emmett 09ac17b332 fix(ci): use SSH-based smoke test and deploy only rspace service
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:12:49 -07:00
Jeff Emmett 77095c4c18 Merge branch 'dev'
CI/CD / deploy (push) Failing after 1m46s Details
2026-04-01 14:02:27 -07:00
Jeff Emmett 7420228ce9 feat: add Mermaid diagram generator canvas tool + share panel role selector
- Add folk-mermaid-gen web component: AI-powered diagram generation via
  Ollama, client-side SVG preview via mermaid.js, animated GIF export via
  mermaid.rspace.online API
- Register in canvas tools, toolbar, and shape registry
- Add role selector dropdown to share panel invite form (backend already
  supports role parameter)
- Fix pre-existing TS errors: SankeyNode missing address field,
  SpaceMember type mismatch in WebSocket auth fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 14:01:52 -07:00
Jeff Emmett b84b1b41e3 ci: use REPO_READ_TOKEN for cross-repo encryptid-sdk clone
CI/CD / deploy (push) Successful in 1m54s Details
REGISTRY_TOKEN lacks read:repository scope.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 13:05:13 -07:00
Jeff Emmett 6018a88d26 Code-split shell.js: lazy-load Automerge/WASM offline chunk
CI/CD / deploy (push) Failing after 7s Details
Move RSpaceOfflineRuntime, CommunitySync, OfflineStore, and
RStackHistoryPanel into a new shell-offline.ts chunk loaded via
dynamic import(). This removes ~2.5MB of Automerge WASM from the
critical path, reducing blocking JS from ~960KB to ~150KB brotli.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:40:32 -07:00
Jeff Emmett 9fd3ca931c Harden rinbox agent mailbox pipeline: loop detection, rate limits, envelope fix
CI/CD / deploy (push) Waiting to run Details
- Fix executeApproval SMTP envelope to authenticate as SMTP_USER (Mailcow sender mismatch)
- Add reply loop detection: skip auto-replies, noreply, mailer-daemon, postmaster senders
- Per-sender rate limit: 3 replies/hr per sender per agent mailbox
- Daily send cap: 50 replies/day per agent mailbox
- Reply length cap: truncate agent replies at 2000 chars
- Bootstrap existing spaces on init: provision missing team inbox + agent mailbox docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:36:23 -07:00
Jeff Emmett adb1c7cb87 Merge branch 'main' into dev 2026-04-01 12:33:19 -07:00
Jeff Emmett e045ba1058 ci: clone encryptid-sdk with PAT for Docker build context
CI/CD / deploy (push) Waiting to run Details
Build needs named build context for encryptid-sdk dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:32:55 -07:00
Jeff Emmett 45372c6681 Fix sidebar showing all modules: hide Manage panel when none disabled
- App switcher: only show "Manage rApps" when there are actually
  disabled modules or active restrictions. Move "Available to Add"
  above "Remove" to prioritize adding. Eliminates duplicate module
  listing when all modules are enabled.
- Shell: update app switcher on modules-changed event (was only
  updating tab bar and folk-rapp, not the sidebar itself).
- SMTP: use space-agent@rspace.online as From for invite/approval
  emails with proper envelope sender for DKIM alignment.
- Shell CSS: fix banner z-index, smooth header transition on banner.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:32:53 -07:00
Jeff Emmett 44f562d531 ci: clone encryptid-sdk with PAT for Docker build context
Build needs named build context for encryptid-sdk dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:32:24 -07:00
Jeff Emmett b54ad4b36c Fix multi-user cursor positions: use page-relative coordinates
CI/CD / deploy (push) Failing after 8s Details
Remote cursors were broadcast as viewport-relative (clientX/Y), causing
them to appear at wrong positions when users had different scroll offsets.
Now sends page-relative coords and converts back on the receiver side.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:32:01 -07:00
Jeff Emmett d2fa533519 Improve rTasks drag-drop UX + sync space members on invite claim
CI/CD / deploy (push) Failing after 9s Details
rTasks: port backlog-md ordinal algorithm (bisection + rebalance),
fix column detection via bounding-box hit test, add empty-column
drop zones, source column dimming, no-op detection, and optimistic
DOM updates (no flash). New bulk-sort-order rebalance endpoint.

EncryptID: sync claimed invite members to Automerge doc immediately,
redirect to space subdomain after identity claim.

Server: add /api/internal/sync-space-member endpoint, fallback
member check in WebSocket auth for not-yet-synced invites.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:19:37 -07:00
Jeff Emmett fef217798e Fix PWA install banner: persist dismiss, prevent duplicates
- Add appinstalled event listener so browser-initiated installs also
  permanently dismiss the banner
- Ensure only one banner shows at a time (update hides install first)
- Refactor dismiss logic into single helper function

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:07:17 -07:00
Jeff Emmett a4cd977d17 Remove unreliable Ollama models from AI prompt, fix message overflow
- Remove Ollama model options (cold start timeouts via CF tunnel)
- Keep only Gemini Flash/Pro which are reliable cloud APIs
- Fix messages overflowing shape: min-height:0 on flex scroll container,
  word-break on messages, max-width on pre blocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 12:02:16 -07:00
Jeff Emmett 7dc4e9b3e9 Enforce module disabling on canvas folk-rapp shapes
CI/CD / deploy (push) Failing after 9s Details
Disabled rApp modules now show a grayed lock overlay on the canvas
instead of loading their iframe/widget. Uses a static instance registry
so setEnabledModules() broadcasts to all live shapes immediately.
Re-enabling a module reloads its content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 11:55:13 -07:00
Jeff Emmett 29cd6168f9 Fix mobile popup/modal issues across shell components
CI/CD / deploy (push) Failing after 9s Details
- Space switcher: clamp menu left to prevent right-edge overflow,
  add max-width: calc(100vw - 8px), scrollable tabs with smaller
  padding on mobile
- Auth/edit modals: add max-height: 90dvh + overflow-y: auto so
  virtual keyboard doesn't push modal off-screen, reduce padding
  on small screens
- Identity dropdown: raise z-index from 100 to 10002 so it renders
  above the app-switcher sidebar (10001)
- Device nudge toast: constrain max-width to viewport width
- App switcher: add translucent backdrop overlay on mobile (<640px)
  with tap-to-dismiss
- Add :active pseudo-class alongside :hover on interactive elements
  for touch tap feedback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 11:35:14 -07:00
Jeff Emmett 94964dfe88 ci: use internal registry (bypass Cloudflare upload limit)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:46:14 -07:00
Jeff Emmett f0fc60e6d5 ci: add Gitea Actions CI/CD pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 10:32:14 -07:00
Jeff Emmett 1dcc3ff0a1 Fix SVG dataset crash and 403 on intent API
- Remove `dataset = {}` assignment on SVG circle element (read-only
  property on SVGElement, causes TypeError crash on every render)
- Add authHeaders() helper using encryptid-token from localStorage
- Include Authorization header on all mutating intent API calls
  (create, solver/run, accept, reject)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 23:17:14 -07:00