Six user-visible improvements + supporting infra, all uncommitted from
the earlier session-in-progress state. Ships together in one release.
Chrome / tabs
- Same-size tabs: flex 1 1 0 with max 200px, min 60px. Container gets
overflow: hidden so many tabs shrink evenly instead of scrolling out.
- Drag-and-drop tab reordering. HTML5 drag events on each .tab; drop
side chosen by pointer x within target (Chrome UX). New move-tab IPC
splices the tabs array + re-emits.
Address bar
- Persistent history at userData/history.json capped at 500 LRU. Ranked
by host-prefix > url-prefix > contains > title-contains > recency.
- Floating suggestions dropdown (addressPicker WebContentsView) anchored
under the URL bar. Debounced 80ms input; ArrowUp/Down forward to the
picker via address-cursor IPC; Enter fires goURL; blur closes after
160ms so click-through registers. New files address-picker.html +
address-picker-preload.js. Cleared by existing clearHistoryOnQuit.
Password autofill (A.2 MVP)
- Green key chip in the address bar appears when the vault is UNLOCKED
and the active tab's host has matching credentials (exact hostname
match for phase 1; eTLD+1 upgrade queued as A.2.5).
- Click chip → floating picker of usernames. Click a match → main.js
runs a small script in the active tab: finds first visible
input[type=password]:not([disabled]), walks the same form for a
visible text/email/tel/url/search input whose name/id/autocomplete
matches /username|user|email|login|account|id/, fills both via the
native value setter + dispatches input/change so React/Vue-controlled
inputs update. New files pw-fill.html + pw-fill-preload.js.
- emitPwAvailability fires from pushNav + vault setup/unlock/lock so
the chip's visibility + count stays accurate.
Bookmarks bar
- Right-click context menu on the favorites bar. On empty area:
"Add current page" (or "Remove current page" if already saved). On a
specific bookmark: "Open", "Edit title…" (prompt), "Remove", plus
the add/remove-current entry. Uses a shared .ctxmenu style mirroring
the settings ctxmenu (dark/light aware).
- Empty-state text updated to mention right-click.
Home page
- Larger responsive card grid: auto-fill minmax(260-280px, 1fr) with
breakpoints at 600/900/1200. Cards have a subtitle line, a colored
badge (on-chain / Sia / server / custom), and edit affordances that
reveal only in Edit mode.
- User-editable set: Edit toggle reveals per-card ✎/✕ + a dashed "+ Add
card" tile. Modal for add/edit with title / URL / subtitle / badge.
Reset-to-defaults button.
- Persisted at userData/home-cards.json. New home-preload.js exposes
window.home = { getCards, setCards, resetCards, navigate }. IPC
handlers in main.js validate sender.getURL() matches our own
home.html — third-party pages see the API shape via the preload but
can't act on the user's local cards.
- Fallback set of 2 cards renders when window.home is unavailable
(e.g. opening home.html directly outside Electron for preview) so
the grid is never blank.
Docs
- TheseusNavigator/ROADMAP-identity-wallet.md — the phased plan for
the two independent strands (password manager A.2/3, browser wallet
B.1-6). Committed earlier this session; re-listed here for context.
- TheseusNavigator/SESSION-PROMPT-identity-wallet.md — pastable
kickoff for the next session picking up either strand.
Files added to build.files: address-picker.html,
address-picker-preload.js, pw-fill.html, pw-fill-preload.js,
home-preload.js.
71 lines
2 KiB
JSON
71 lines
2 KiB
JSON
{
|
|
"name": "theseus-navigator",
|
|
"version": "0.0.3",
|
|
"description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.",
|
|
"author": "Silent Mode",
|
|
"main": "main.js",
|
|
"type": "commonjs",
|
|
"scripts": {
|
|
"start": "electron .",
|
|
"resolve-test": "node resolve-test.mjs",
|
|
"dist": "electron-builder --win nsis portable"
|
|
},
|
|
"dependencies": {
|
|
"fetch-socks": "^1.3.3",
|
|
"socks-proxy-agent": "^10.1.0",
|
|
"ws": "^8.18.0"
|
|
},
|
|
"devDependencies": {
|
|
"electron": "^33.0.0",
|
|
"electron-builder": "^25.1.8"
|
|
},
|
|
"build": {
|
|
"appId": "st.silentmode.theseus",
|
|
"productName": "Theseus Navigator",
|
|
"artifactName": "TheseusNavigator-${version}-${arch}.${ext}",
|
|
"directories": { "output": "dist-public" },
|
|
"asar": true,
|
|
"files": [
|
|
"main.js",
|
|
"preload.js",
|
|
"chrome.html",
|
|
"home.html",
|
|
"settings.html",
|
|
"settings-preload.js",
|
|
"popover.html",
|
|
"popover-preload.js",
|
|
"engine-picker.html",
|
|
"engine-picker-preload.js",
|
|
"downloads.html",
|
|
"downloads-preload.js",
|
|
"address-picker.html",
|
|
"address-picker-preload.js",
|
|
"pw-fill.html",
|
|
"pw-fill-preload.js",
|
|
"home-preload.js",
|
|
"collision.html",
|
|
"collision-preload.js",
|
|
"package.json",
|
|
"node_modules/**/*",
|
|
"!**/*.md",
|
|
"!**/*.map",
|
|
"!tor${/*}",
|
|
"!dist-public${/*}",
|
|
"!resolve-test.mjs",
|
|
"!*PROMPT.md"
|
|
],
|
|
"extraResources": [
|
|
{ "from": "tor", "to": "tor" },
|
|
{ "from": "../Argus/src/lib/resolver-web.js", "to": "resolver-web.mjs" },
|
|
{ "from": "../Argus/src/lib/password-vault.js", "to": "password-vault.mjs" }
|
|
],
|
|
"win": { "target": ["nsis", "portable"] },
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"perMachine": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"artifactName": "TheseusNavigator-Setup-${version}.${ext}"
|
|
},
|
|
"portable": { "artifactName": "TheseusNavigator-${version}-portable.${ext}" }
|
|
}
|
|
}
|