From 9c29331e5b2d88d1eb5a0442b6ba548d1c693fbb Mon Sep 17 00:00:00 2001 From: Theseus Dev Date: Fri, 30 Oct 2026 00:38:08 +0200 Subject: [PATCH] Theseus 0.3.131: Mail promoted to Sidebar quicklink, Nostr signer ships, panels free RAM when idle, Game.X in SM cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Silent Mode Mail is no longer an extension. The 0.1.0 panel was a black screen (iframe to mail.silentmode.st which sends X-Frame-Options: DENY; the browser rendered the block page and still fired the iframe's load event, so the 5-second "did it embed?" watchdog saw it as loaded and the fallback never swapped in). The whole extension existed to put one "Open Mail" button in a panel — that is exactly what a sidebar quicklink does, without taking a panel slot or an Extensions row. So: - settings.quickLinks default list gains silentmail at the top (Silent Mode Mail → https://mail.silentmode.st/). - migrateAegisRename grew a mail retirement block: any existing extensions/mail/ folder on the user's box moves to addons-backups/mail-migrated-/ on first boot of this Theseus, so the old extension vanishes from Settings instead of sitting there with a broken panel. - "mail" added to the first-party reserved-ids list so no community add-on can claim the id after retirement. Nostr NIP-07 signer finally ships. The bundled-addons/nostr/ folder was sitting untracked in the main checkout, so the detached-HEAD build worktree 0.3.130 used never saw it (same reason build/, tor/, snapshots/ have to be hand-copied into the worktree). This build committed the folder and copied it in. Puts window.nostr on https + localhost pages; identity is Hermes's key (one npub for DMs and public notes). Per-origin read/sign grants; kinds 0/3/5/10002 re-prompt every time with no remember option. Sidebar panel apps free their render tree after idle. closeLeftPanel used to keep the loaded page warm forever — great for fast reopen, bad for RAM when the user docks a heavy panel (Hermes, Pithos, Aegis) once and never comes back. A 2-minute idle timer now blanks the panel to about:blank after close; reopen within the window still reuses the loaded page (cancelLeftPanelIdleUnload on open), reopen after the window reloads fresh. LEFT_PANEL_IDLE_MS = 2 * 60 * 1000. Right-side sidebar view (webapp tabs — Telegram, X, WhatsApp, AI chat) is longer- lived by design and untouched here. Startpage layout: - Game.X takes SilentMode.X's slot in the Silent Mode cards (stub description + a built-in gamepad brand mark until game.x goes live). SilentMode.X moves to the quick-links strip as the 5th slot. Still TODO: push the swap into the remote home-cards.json for existing profiles. - Light-theme palette flip under body.light. The @media (prefers-color-scheme: light) block only triggered on OS-level light preference; picking the "light" background preset left --ink white against a white page, so hero titles, card titles, slot labels and the ".bch" extension read as pale ghosts. Added a full body.light { --ink; --mut; --card; --line; ... } block plus overrides for the hero + card translucent panels (dark-glass → light-glass on light theme) and the ctx-menu / modal. Dark theme untouched. --- PENDING.md | 186 ++++++++++-------------- bundled-addons/nostr/addon.json | 32 +++++ bundled-addons/nostr/icon.svg | 1 + bundled-addons/nostr/index.js | 203 +++++++++++++++++++++++++++ bundled-addons/nostr/nostr-inject.js | 72 ++++++++++ bundled-addons/nostr/panel.html | 156 ++++++++++++++++++++ home-preload.js | 6 +- home.html | 64 +++++++-- main.js | 96 ++++++++++++- package.json | 2 +- 10 files changed, 685 insertions(+), 133 deletions(-) create mode 100644 bundled-addons/nostr/addon.json create mode 100644 bundled-addons/nostr/icon.svg create mode 100644 bundled-addons/nostr/index.js create mode 100644 bundled-addons/nostr/nostr-inject.js create mode 100644 bundled-addons/nostr/panel.html diff --git a/PENDING.md b/PENDING.md index 98acb1a7..1affcf78 100644 --- a/PENDING.md +++ b/PENDING.md @@ -8,7 +8,7 @@ what belongs to whom and coordinate. Naming convention: `YYYY-MM-DD:short-slug` for date-bounded work, or `parallel:` for work owned by a session that isn't the current one. -Last updated: 2026-10-29. +Last updated: 2026-10-29 (post-0.3.130 batch). --- @@ -16,122 +16,84 @@ Releases are no longer recorded here: the live version and hashes are in `../site/releases-manifest.json` and `https://dl.silentmode.st/releases-manifest.json`, and each release commit is `Theseus 0.3.x: ...` in git history. -## Staged for the next release (post-0.3.129) +## Staged for the next release (post-0.3.130) Queue of asks for the next cut. Items marked LANDED are edited in the working tree waiting for a bump + build. Items marked TODO still need the code change. -- **TODO: Home — swap `SilentMode.X` out, `Game.X` in** on the Silent Mode - cards section ([home.html:366-375](home.html) `defaultState().sections.sm`). - Game.X should pick up its own description + favicon from the live site, - so the entry is a stub (`{ title: "Game.X", url: "https://game.x/", - brand: "game" }`) until game.x goes live. SilentMode.X moves to a short - link somewhere else — the user suggested either under the search field, - at the bottom of the home page, or in the quicklinks (sections.q). The - canonical remote list at `https://dl.silentmode.st/home-cards.json` - needs the same swap so existing profiles pick it up without a reset - (local `sections.sm` isn't reseeded by `migrateCards` — the remote cache - is the only way through to installed users). `game.x` isn't resolving - yet (no s3 pointer on-chain, no manifest); wait until the service is up - before baking its description/favicon. -- **LANDED: Searchbox no longer auto-grows on focus; URL/search ratio - capped at 75/25.** Reverts the 0.3.128 "give the searchbox more room - while typing" rule — focusing the searchbox was pulling the drag handle - with it and making the ratio hard to set by hand. Changes in - [chrome.html](chrome.html): dropped the - `.urlsearch:has(.searchbox:focus-within) .searchbox { flex: 2 1 480px }` - rule and its `.14s` transition on `.searchbox`; added - `max-width: 75%` to `.urlwrap` so a stored `urlBarWidthPx` from the old - 80 % ceiling clamps on load without the user having to redrag; bumped - the drag `MIN_SHARE` 0.20 → 0.25 so new drags can't push the search - bar below 25 % of the shared budget. 0.3.128's typing-wider effect - stays off; the user owns the ratio again. -- **LANDED: Startpage sidebar runs the full page height alongside the - hero; slots fill the whole sidebar panel; empty cells double as the - "add link" surface.** [home.html](home.html): - - **Page layout restructured.** Hero + homepage are now wrapped in a - single `.page` grid (`grid-template-columns: minmax(240, 280) 1fr`) - with the sidebar `