From 605c4f1924ac3fe2792f219a0b3708e3ebd5f590 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Mon, 21 Sep 2026 03:55:20 +0200 Subject: [PATCH] site-theseus-x/extensions: Install + Download buttons on the bundled cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every card that has a signed update channel now carries the two buttons a reader actually needs — "Install in Theseus" (a theseus://extensions/install/ deep link that main.js already intercepts via will-navigate, popping the native install-consent dialog and verifying the operator signature before any bytes hit addons/) and "Download tarball" (direct .tar.gz link for sideloaders and archivists). A one-line update hint below the buttons points at the signed updates.json and notes SHA-256 verification, so the whole install-and-then-update path fits inside the card. Applies to Screenshot and PDF Editor. Notepad and Translate ship inside every Theseus build and have no separate channel yet — those carry a plain "Ships with Theseus — appears under Settings › Extensions on first launch" note in the same slot so the layout stays consistent across bundled entries. The download hrefs default to the current versioned tarball on the navigate.st gateway and get rewritten to the newest entry from the signed updates.json when the fetch succeeds (new data-live="download" setter on the manifest-fill script) so the button never points at a stale version. --- extensions/index.html | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/extensions/index.html b/extensions/index.html index 85d8cfc..09f90ac 100644 --- a/extensions/index.html +++ b/extensions/index.html @@ -96,6 +96,11 @@ .ext .h b{color:var(--mut);font-weight:600;min-width:70px} .ext .h code{font-family:ui-monospace,monospace;font-size:10.5px;color:#c9d4e3;word-break:break-all;background:transparent;border:none;padding:0} .ext .meta{color:var(--dim);font-size:12.5px;margin-top:.4rem} + .ext .act .download{display:inline-block;padding:9px 14px;border-radius:9px;text-decoration:none; + font-size:13.5px;font-weight:600;background:transparent;color:var(--ink);border:1px solid var(--line)} + .ext .act .download:hover{background:var(--panel)} + .ext .act .hint{color:var(--dim);font-size:11.5px;margin-left:auto;flex-basis:100%} + .ext .act .hint b{color:var(--mut);font-weight:500} .ext .act{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:.8rem} .ext .install{display:inline-block;background:var(--acid);color:#0b0e14;font-weight:600;font-size:14px; border:none;border-radius:9px;padding:9px 18px;cursor:pointer;text-decoration:none;font-family:inherit} @@ -181,6 +186,11 @@ you draw. The capture opens in a full-tab editor: crop, annotate, line tool, resizable text, redact, save.
Settings › Extensions ·
+
+ Install in Theseus + Download tarball +
Updates: signed updates.json · SHA-256 verified before every install
+
Signed update manifest — SHA-256 verified before install
@@ -193,6 +203,9 @@

📝 Notepad bundled 0.1.0

Right-sidebar notes. Text lives on this machine only and autosaves as you type.
Settings › Extensions · no update channel yet — ships with each Theseus release.
+
+ Ships with Theseus — nothing to install; appears under Settings › Extensions on first launch. +
@@ -200,6 +213,9 @@
Select text on any page and right-click Translate — the sidebar panel shows the translation, with LibreTranslate or Google as the backend (your choice in the panel). Nothing is sent until you ask.
Settings › Extensions · no update channel yet — ships with each Theseus release.
+
+ Ships with Theseus — nothing to install; appears under Settings › Extensions on first launch. +
@@ -209,6 +225,11 @@ is never touched. Opens from the toolbar's PDF Editor menu or the right-click Open PDF in editor on any link.
Settings › Extensions · signed update channel
+
+ Install in Theseus + Download tarball +
Updates: signed updates.json · SHA-256 verified before every install
+
Signed update manifest — SHA-256 verified before install
@@ -282,6 +303,7 @@ set("version", (el) => { el.textContent = top.version; }); set("sha256", (el) => { el.textContent = top.sha256 || "—"; }); set("url", (el) => { el.href = top.url; el.textContent = String(top.url).split("/").pop(); }); + set("download", (el) => { if (top.url) el.href = top.url; }); set("count", (el) => { el.textContent = list.length + " signed version" + (list.length === 1 ? "" : "s") + " on the channel"; }); } catch {} }