Site approvals and panel approvals share one allowedOrigins list on disk because the policy is one SitePolicy either way, but on screen they are two different things: a URL you signed in on versus an Aegis sidebar panel you unlocked. The panel showed them in one mono list under "Sites Claude may control", so an Aegis approval read as "theseus-panel://aegis" with no label and no clue it was a panel at all. publicState() now splits allowedOrigins into allowedSites (web origins) and allowedPanels (theseus-panel://<addon>, enriched with the add-on's own title via api.tabControl.list()). The panel.html renders them in their own sections: "Sites Claude may control" and "Add-on panels Claude may control", the latter hidden when nothing is approved. Each panel row shows the add-on title in bold with the mono origin as a subtitle. The ✕ button goes through the existing remove-origin IPC — removing either kind takes one call. The renderer falls back to deriving the split from allowedOrigins so a UI loaded against an older host still renders both sections.
3.9 KiB
Pending — uncommitted Theseus changes
Working-tree state that hasn't been committed or shipped. Read this before touching the same files. Update when you land or add work.
Format: each group has a session: label so parallel sessions can see
what belongs to whom and coordinate. Naming convention:
YYYY-MM-DD:short-slug for date-bounded work, or parallel:<theme> for
work owned by a session that isn't the current one.
Last updated: 2026-10-28.
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.128)
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.Xout,Game.Xin on the Silent Mode cards section (home.html:366-375defaultState().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 athttps://dl.silentmode.st/home-cards.jsonneeds the same swap so existing profiles pick it up without a reset (localsections.smisn't reseeded bymigrateCards— the remote cache is the only way through to installed users).game.xisn't resolving yet (no s3 pointer on-chain, no manifest); wait until the service is up before baking its description/favicon. - LANDED: Claude connector reaches add-on sidebar panels (Aegis, Hermes,
Pithos, and any other sidebar add-on). The tab-control hook now exposes
each open panel as a tab with a negative id,
kind: "panel",addonandpanelIdfields (main.jspanelCtrlEntries/tabControlHook.list). The connector'suse()branches to_usePanel, approves control under a synthetictheseus-panel://<addonId>origin (one approval covers every panel owned by that add-on), skips origin pinning (panels load from the add-on scheme and never change under us) and drives the panel'swebContentswith the sameTabDriveras a web tab.navigate/activate_tab/close_tabrefuse panels — the user owns panel visibility. The approval modal says "Let Claude control the Aegis panel?" when the origin is a panel origin. list_tabs returns closed panels too so a client can see what exists;webContents(-N)throws " is not open; ask the user to open the panel from the sidebar first" until the user docks it. Password-field refusal and the action log still apply. The connector panel.html now splits site approvals from panel approvals into their own sections, with the add-on's own title ("Aegis panel") above the mono origin string and a ✕ Remove button that goes through the existingremove-originIPC.
session: parallel:collision-policy
Owner's focus: BCNR ↔ ICANN name collision handling. Not mine — leave for that session to land or bundle by explicit ask.
- Android / mobile: ../AriadneResolver/mobile/app/AndroidManifest.xml, BchFetcher.java, Bns.java, build.ps1 — mobile-side collision changes.
- Repo-wide:
.gitignoregained a/.keys/line (harmless).
Live state
Shipped hashes live at ../site/releases-manifest.json and
https://dl.silentmode.st/releases-manifest.json. On-chain pointer at
releases.silentmode.bch. See GOTCHAS.md for the release
gotchas.