mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-21 21:31:12 +02:00
* feat(x): client auto-update with non-interrupting UX
Auto-update via update.electronjs.org (Squirrel), replacing the native
update dialog with a state machine pushed to the renderer:
- Non-modal "restart to update" toast, deferred while a call/turn is
active and retracted if one starts; 24h "Later" snooze persisted in
main so it survives window reloads
- Offline detection: network errors get a soft `offline` state instead
of a red failure, and don't emit update_failed analytics
- Update-waiting badges: macOS dock badge, Windows taskbar overlay icon
- macOS move-to-Applications prompt parented to the main window, with a
failure fallback dialog and focus re-check after a manual drag
- Settings > Help: version, manual check with accurate transient
"You're up to date" feedback, per-state messaging
- "Updated to vX" card on first launch after an upgrade (downgrades
restamp silently); "What's new" links to release notes
- Toaster: follow app dark mode (fixes unreadable description text) and
restyle to theme tokens
- Window state persistence so restart-to-update feels lossless
- Tests for version stamping and upgrade comparison
* feat(x): replace update toast with Zed-style titlebar chip
The restart-to-update prompt moves from a sonner toast to a persistent,
non-interrupting titlebar indicator: a spinner while an update downloads,
then a 'Restart to update' chip once staged. Clicking restarts into the
new version; the x snoozes the chip for 24h via the existing persisted
snooze. Busy-deferral is dropped - the chip never interrupts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(x): bottom-left update card with inline release notes
Reframe the restart prompt per PR feedback: by the time the user sees it,
Squirrel has already installed the update — the prompt only asks for a
restart (Chrome-style), and being loud about what shipped matters more
than being unobtrusive during early adoption.
- Replace the titlebar chip with a bottom-left "Update available" card
showing the new version, an inline "What's new" section rendered from
the GitHub release notes, and Later / Release notes / Restart now
- Release notes come from Squirrel.Mac's update feed (update.electronjs.org
passes the release body through); Squirrel.Windows only reports the
release name, so missing notes are backfilled from the GitHub API
- Drop the 24h snooze machinery — Later/× just dismiss for the session
- Drop offline detection (soft `offline` state) — separate PR later
- Drop the macOS move-to-Applications prompt/move button — separate PR
later; Settings still explains why updates are unavailable outside
/Applications
- Drop window state persistence
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(x): aggregate release notes across skipped versions, persistent up-to-date status
- Updater aggregates release bodies for every version between the running
app and the update target, with a commit-log fallback when no release in
range has notes
- CI fills empty release bodies with GitHub's auto-generated notes
- Settings shows a persistent 'You're up to date' line with last-checked
time instead of a transient confirmation
* fix(x): restore updater:quitAndInstall lines dropped in merge
The conflict resolution in 67d6a542 truncated the updater:quitAndInstall
entry in both the shared IPC schema and the main-process handler, leaving
an unclosed brace that broke the shared package build.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(x): simplify release notes handling per review feedback
Release notes are a process concern, not the updater's: drop the
CI job that auto-filled empty release bodies and the in-app GitHub
API backfill (backfillReleaseNotes + commitLogFallback). The update
card now adapts instead — it renders the notes Squirrel supplies,
or a static "Bug fixes and improvements." line when empty.
Also document that updateElectronApp() configures the same
autoUpdater singleton our listeners observe (no race), and that
gen-install-loading.sh is a manual one-off tool whose committed
GIF feeds Squirrel's loadingGif.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* refactor(x): drop update-electron-app, drive autoUpdater directly
With notifyUser: false the package reduced to setFeedURL + an
immediate checkForUpdates() + a 10-minute unconditional timer, plus
guards we already have (isPackaged, platform, app-ready). Inline
those three lines instead and remove the dependency.
The interval now runs through the existing guarded checkForUpdates()
(no-op unless idle/error), so ticks no longer emit Squirrel.Mac
"check already in progress" errors or make Squirrel.Windows
re-download an already-staged update.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
47 lines
No EOL
1.6 KiB
JSON
47 lines
No EOL
1.6 KiB
JSON
{
|
|
"name": "rowboat",
|
|
"productName": "Rowboat",
|
|
"description": "AI coworker with memory",
|
|
"type": "module",
|
|
"version": "0.1.0",
|
|
"main": ".package/dist/main.cjs",
|
|
"license": "Apache-2.0",
|
|
"scripts": {
|
|
"start": "electron .",
|
|
"build": "rm -rf dist && tsc && node bundle.mjs",
|
|
"package": "electron-forge package",
|
|
"make": "electron-forge make"
|
|
},
|
|
"dependencies": {
|
|
"@agentclientprotocol/claude-agent-acp": "^0.55.0",
|
|
"@agentclientprotocol/codex-acp": "^1.1.0",
|
|
"@x/core": "workspace:*",
|
|
"@x/shared": "workspace:*",
|
|
"agent-slack": "0.9.3",
|
|
"chokidar": "^4.0.3",
|
|
"electron-chrome-extensions": "^4.9.0",
|
|
"electron-squirrel-startup": "^1.0.1",
|
|
"html-to-docx": "^1.8.0",
|
|
"mammoth": "^1.11.0",
|
|
"node-pty": "^1.1.0",
|
|
"papaparse": "^5.5.3",
|
|
"pdf-parse": "^2.4.5",
|
|
"xlsx": "^0.18.5",
|
|
"zod": "^4.2.1"
|
|
},
|
|
"devDependencies": {
|
|
"@electron-forge/cli": "^7.10.2",
|
|
"@electron-forge/maker-base": "^7.11.1",
|
|
"@electron-forge/maker-deb": "^7.11.1",
|
|
"@electron-forge/maker-dmg": "^7.10.2",
|
|
"@electron-forge/maker-rpm": "^7.11.1",
|
|
"@electron-forge/maker-squirrel": "^7.10.2",
|
|
"@electron-forge/maker-zip": "^7.10.2",
|
|
"@electron-forge/publisher-github": "^7.11.1",
|
|
"@electron-forge/publisher-s3": "^7.10.2",
|
|
"@types/electron-squirrel-startup": "^1.0.2",
|
|
"@types/node": "^25.0.3",
|
|
"electron": "^39.2.7",
|
|
"esbuild": "^0.24.2"
|
|
}
|
|
} |