Commit Graph
156 Commits
Author SHA1 Message Date
ciregenz c6cdb982fa [eric] release: bump squirrel to 1.1.71 (first squirrel release version / migration target) 2026-05-30 01:17:10 -07:00
ciregenz 78eedf18c4 [eric] win: squirrel firstrun silently removes the legacy NSIS install (NSIS->Squirrel migration cleanup, deferred to quit, best-effort) 2026-05-30 01:17:10 -07:00
ciregenz abf2daf0da [eric] win: fold proven squirrel autoUpdater fixes into squirrel (non-throwing check, event-signature normalization, already-running guard) 2026-05-30 01:06:11 -07:00
ciregenz be8d6fd081 [eric] win: switch product to squirrel target + wire built-in autoUpdater on the RELEASES feed 2026-05-29 22:22:43 -07:00
ciregenz ac31593eda [eric] win: handle Squirrel install events so the app makes its Start Menu/Desktop shortcut 2026-05-29 19:41:03 -07:00
ciregenz 06dde355a5 [eric] build: pin electron-builder-squirrel-windows so the -Squirrel target is build-safe 2026-05-29 18:55:24 -07:00
ciregenz 0d0bae0ba8 [eric] build: set explicit dmg.size (5g) so dmgbuild stops under-allocating the disk image 2026-05-29 16:14:58 -07:00
ciregenz 90bd4e2372 [eric] release: bump version to 1.1.70 2026-05-29 12:56:10 -07:00
Eric 99f1e56497 [eric] installer: skip Defender prewarm on silent installs to fix the install hang
- the customInstall macro runs `OpenSwarm.exe --prewarm` via nsExec::Exec,
  which is synchronous with no upper time bound. On a clean box the silent
  install launches the freshly-extracted, not-yet-signed binaries, provoking a
  cold Windows Defender scan that stalls for minutes - this hung the CI
  installer-verification step (no output for ~3m, then cancelled)
- both CI verification and production auto-updates run the installer with /S,
  so this same stall could hang a real user's auto-update
- gate the prewarm behind ${If} ${Silent} ... ${Else}: interactive first-time
  installs (where the cold-start win lands) still prewarm; silent installs skip
  it and finish promptly
- verify-installer: keep the blocking spawnSync (it must wait for the registry
  uninstall entry the gate checks) but add a 300s timeout so any future
  synchronous stall fails the gate in minutes instead of hanging the job
2026-05-28 23:39:41 -07:00
Eric 9aaf503b03 [eric] e2e: expose the redux store deterministically via webPreferences.additionalArguments, fix visibility capture (read the chromium trace from tracingComplete, resolve click targets to the control, drop the dead contextBridge ipc wrap), harden onboarding/settings/combinatorial specs and add multi-window-stress 2026-05-28 21:41:01 -07:00
Eric f1a3ec2598 [eric] electron: fix the electron 42 windows build - electronLanguages en to en-US so the renderer gets a non-empty --lang (electron 42 renamed en.pak to en-US.pak; empty locale crashed blink LCIDFromLocaleInternal with 0xC0000005), bump electron-builder 25.1.8 to 26.8.1 + migrate win.sign to signtoolOptions, after-pack hook restores the 9router node_modules eb26 drops from extraResources so the subscription service stops hanging, and verify-locale-paks + verify-router-deps gate both in verify-all 2026-05-28 21:41:01 -07:00
Eric 6353bbddda [eric] electron+e2e: close the init-script race - main reads OPENSWARM_E2E env on startup and appends an --openswarm-e2e chromium switch, preload reads the switch BEFORE any page script parses and contextBridge-exposes __OPENSWARM_E2E__=true so the production store-on-window gate fires deterministically rather than racing addInitScript against bundle parse 2026-05-28 09:38:29 -07:00
Eric b0b3bff91d [eric] ci: add dogfood-aggregator that walks the rolling manifest, computes per-platform per-check warn/fail rates, emits preflight-tunings.json with a demote list when a check exceeds 2x the false-positive tolerance, and writes a release-readiness block the v* gate reads; preflight.js loadTunings/applyTunings honors the demote list at runtime so a chronically-noisy check gets silently downgraded to warn on subsequent boots 2026-05-28 09:17:15 -07:00
Eric 7fb57cea5e [eric] electron: defer the preflight cache-write until both preflight finished AND backend-http-ready fired so a kill in the window between cannot leave a verdict=ok token that masks a real boot break on the next launch, plus honor settings.preflight_enabled and a deterministic installation_id-bucket cohort gate 2026-05-28 02:49:11 -07:00
Eric 1396372c8f [eric] electron: wire the preflight module into main next to logPreflight, honor OPENSWARM_DISABLE_PREFLIGHT=1 kill switch, fire async so it overlaps with backend spawn instead of adding to boot, emit a [preflight2] verdict line and fold the result into the boot beacon payload 2026-05-28 02:13:14 -07:00
Eric 4843d993d3 [eric] electron: add preflight module with nine env-injected checks (os, resources, appdata-writable, security-block, system-libs, network, gpu, dual-stack, clock) each wrapped by withTimeout that turns hangs into warn-not-fail, plus version-keyed cache read/write/prune so subsequent launches skip the work and a version bump deletes the stale token 2026-05-28 02:12:52 -07:00
Eric 7ce71cb29c [eric] build: bump electron from castlabs v40.7.0 to v42.0.0 wvcus so chromium goes from 144 to 146 and the windows tsf/webview segfaults the team has been ablating become unneeded 2026-05-27 20:31:33 -07:00
Eric 2a4cb96ac0 [eric] docs: record the one-line-comment rule in the precedence list 2026-05-27 19:11:12 -07:00
Eric d4aa87a320 [eric] fix: fire the boot beacon only after backend-ready, not just first-paint, so it doesnt post into a dead socket 2026-05-27 19:11:12 -07:00
Eric 9990ab8e09 [eric] feat: add boot preflight diagnostics and a silent opt-out-honored fleet boot beacon 2026-05-27 19:11:12 -07:00
Eric e2f1e89cb8 [eric] build: import the notarize esm module lazily so electron-builder stops choking on every non-mac build 2026-05-27 12:28:40 -07:00
Eric ac6ae7c7ce [eric] diagnostics: time the boot + stamp the shipped commit into the log 2026-05-27 10:19:53 -07:00
Eric 30914ae40c [eric] build: pin electron-builder + deps to exact versions so the packager cant drift 2026-05-27 10:19:52 -07:00
Eric 9c1940077f [eric] diagnostics: add backend.log, handle backend spawn failures, force utf-8 in executor sandbox 2026-05-26 20:25:31 -07:00
Eric 8c5b3bdf64 [eric] ui: fix the windows guide cursor jumping instead of gliding (it was being rebuilt from scratch every frame) and remove the new chat / history pills above the composer; bump 1.1.69 2026-05-26 15:41:13 -07:00
Eric 440a3e22f6 [eric] windows: fix "backend crashed" by making the app pick a port that is genuinely free so it stops colliding with another program already on port 8324; bump 1.1.68 2026-05-26 14:17:12 -07:00
EricandClaude Opus 4.7 45a97aa05f [eric] windows: stop nsis upgrades hitting "cannot be closed" by reaping app builder children on quit and fixing the dead orphan-killer; bump 1.1.67
- root cause: window-all-closed called killBackend() (windows: taskkill /F) BEFORE before-quit could POST /shutdown-all, so the backend died before running stop_all(), orphaning the bundled vite node.exe; a running node.exe locks its own image at resources\node\x64\node.exe, so the next nsis upgrade cannot overwrite it and surfaces appCannotBeClosed via the file-lock retry path (extractAppPackage.nsh / installUtil.nsh), not the name-based app-running check
- windows-only because mac's killBackend sends SIGTERM, letting uvicorn run its lifespan shutdown -> stop_all(); only since 1.1.64 because app builder first spawned these children on windows in bf6d7a9 (before that they died with WinError 2)
- electron/main.js: drop the premature killBackend() in window-all-closed (will-quit still kills the backend, now AFTER the reap) and raise the pre-quit reap budget from 2s to 10s to cover stop_all's parallel taskkill (up to 5s) + 3s grace
- electron/build/installer-recovery.nsh: replace the customInit orphan-killer (wmic, removed from windows 11 24H2 so it silently no-oped) with a path-scoped powershell Stop-Process; backtick-delimited for valid nsis tokenization, verified the macro compiles with makensis + the bundled nsExec plugin
- mac unaffected: will-quit already kills the backend; the app reap just runs explicitly via /shutdown-all now instead of riding on SIGTERM timing; the .nsh path is windows-only

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:30:05 -07:00
EricandClaude Opus 4.7 c0d0e012cc [eric] outputs/quit: reap app builder child processes before killing the backend on windows so nsis upgrades stop hitting "cannot be closed"; bump 1.1.67
- root cause: window-all-closed called killBackend() (windows: taskkill /F) BEFORE before-quit could POST /shutdown-all, so the backend was dead before it could run stop_all(), orphaning the bundled vite node.exe; a running node.exe locks its own image at resources\node\x64\node.exe, so the next nsis upgrade cannot overwrite it and surfaces appCannotBeClosed via the file-lock retry path (extractAppPackage.nsh / installUtil.nsh), not the name-based app-running check
- windows-only because mac's killBackend sends SIGTERM, which lets uvicorn run its lifespan shutdown -> stop_all(); only since 1.1.64 because app builder first started spawning these children on windows in bf6d7a9 (before that they died with WinError 2)
- fix: drop the premature killBackend() in window-all-closed (will-quit still kills the backend, now AFTER the reap) and raise the pre-quit reap budget from 2s to 10s to cover stop_all's parallel taskkill (up to 5s) + 3s SIGTERM grace
- mac unaffected: will-quit already kills the backend; the app reap simply runs explicitly via /shutdown-all now instead of riding on SIGTERM timing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:19:11 -07:00
EricandClaude Opus 4.7 cf74ada3c2 [eric] auth: generate installation_id at backend startup so first-launch sign-in always has a non-empty install_id; bump 1.1.66
- installation_id was created lazily on the first analytics submission; 1.1.64 removed the workflows startup poller, which was the early backend ping that used to generate it, so on a clean install the sign-in window built its google/email oauth url with an empty install_id and the cloud rejected the start
- now generated in main.py at the same pre-bind moment as the auth token, so GET /api/settings carries it from the very first fetch (no dependency on analytics timing)
- idempotent uuid4 hex, only written when missing; lazy path kept as fallback; platform-agnostic so mac is unchanged except the id exists slightly earlier

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 12:25:31 -07:00
Eric 40b7c19b75 [eric] onboarding cursor: restore writePos-after-spring order so mac stays byte-identical (windows still eases via no-op controls + css transition); bump 1.1.65 2026-05-26 11:17:01 -07:00
Eric 3509c08057 [eric] workflows: remove scheduled-tasks end-to-end (frontend pages+slice, backend app+routes, electron poller), keep dock chat; bump 1.1.64 2026-05-26 11:12:29 -07:00
Eric 529d350cae [eric] windows 1.1.63: drop the textarea + file-input squirrel-era ablations, restore contentEditable @-mention UI and the attach
paperclip on windows, plus a cubic-bezier cursor transition
2026-05-26 02:42:56 -07:00
Eric da61377d8c [eric] windows 1.1.62: cursor and popups follow target on windows via store-driven style.transform 2026-05-26 02:10:56 -07:00
Eric 31a90502c7 [eric] windows 1.1.61: restore AgenticCursor render on Windows now that the framer-motion shim makes motion.div safe 2026-05-26 01:42:05 -07:00
Eric fc8c35e5e0 [eric] windows 1.1.60: revert installer to nsis to test if squirrel was the renderer-crash trigger 2026-05-26 01:20:20 -07:00
Eric bb2de72f6f [eric] windows 1.1.59: production webpack and framer-motion shim 2026-05-26 00:29:17 -07:00
Eric 7407e6cb37 [eric] windows 1.1.58: three fixes — (a) revert file-input restore: <input type="file"> is ALSO a Windows commit-phase crasher just like the contentEditable was, both must stay ablated, drag-and-drop still works; (b) nuclear-disable OnboardingRoot on Windows since the AgenticCursor visual ablation alone was insufficient (Onboarding panel/director/popups have additional Framer Motion + portal subtrees that segfault on commit) — user loses the guided tour on Windows but the rest of the app works; (c) remove iframe sandbox from BrowserCard so sites that need full-document access can render (Google specifically still appears grey because they run JavaScript anti-iframe detection that blanks document.body when window.top !== window.self, which header stripping cannot defeat; most non-Google sites should render fine now); Mac path untouched 2026-05-25 23:47:14 -07:00
Eric 3903766e96 [eric] windows 1.1.57: (a) relax CSP frame-src to allow http: and https: so BrowserCard iframe can render external sites (our own app-level CSP was the second-layer blocker after the upstream XFO/CSP frame-ancestors we already strip in main.js — together they let the iframe load Google et al); (b) gate AgenticCursor's portaled Framer Motion infinite-loop scale + drop-shadow node on Windows so the onboarding panel commit phase no longer segfaults from that subtree (visual cursor disabled on Windows, imperative handle still works for AC runtime); Mac path untouched 2026-05-25 23:16:14 -07:00
Eric 0076909145 [eric] windows 1.1.56 hotfix: webRequest.onHeadersReceived filter uses 'subFrame' (Electron camelCase) not 'sub_frame' (Chrome extension snake_case) — wrong name threw "Invalid type sub_frame" synchronously during app.whenReady, became an unhandledRejection, prevented the app from booting on 1.1.55 2026-05-25 22:51:34 -07:00
Eric b73f508755 [eric] windows 1.1.55: (a) textarea-aware editor read/write/clear helpers so Enter-to-send works on Windows where EditorSurface uses textarea instead of contentEditable (handleSend was reading .textContent which is empty on textarea); (b) gate BrowserCard webview behind !Windows so dashboard hydration no longer segfaults from webview tag commit (iframe fallback is now usable for most sites since we also strip X-Frame-Options and CSP frame-ancestors on sub_frame loads via session.webRequest.onHeadersReceived, scoped to http/https types:sub_frame so OAuth popups and deep links keep their security headers); (c) gate onboarding video autoPlay on Windows so panel mount does not trigger the autoplay+animation crash; Mac path untouched everywhere 2026-05-25 22:29:17 -07:00
Eric 518d0574dd [eric] windows 1.1.54 ablate (fix): correctly platform-gate the file-input/attach-button ablation (1.1.53 mistakenly disabled them on both Mac and Windows because the file was already wrapped in {false && ...} from a prior diagnostic — Mac now renders the full attach UI again, Windows still skips it); textarea-instead-of-contentEditable already correctly platform-gated since 1.1.53 2026-05-25 21:59:19 -07:00
Eric d85d9c2c10 [eric] windows 1.1.52 ablate: swap contentEditable div for textarea + hide <input type="file"> on Windows so the commit-phase 0xC0000005 (Chromium 144 + Electron 40 native crashers) cannot mount; Mac path untouched so @-mention rich-UI and full attach button stay working there; UA-gated at module load via navigator.userAgent.includes('Windows') so zero runtime branch cost; if Windows chat opens without crash one of these was the trigger and we narrow in v1.1.53 by re-enabling each 2026-05-25 21:53:04 -07:00
Eric e2ea5e03cf [eric] windows 1.1.51 diag: render logs on every ChatInputToolbar child (ModeControl, ModelPickerMenu, ThinkingLevelControl, ToolbarActions) so the next 0xC0000005 crash narrows from "ChatInputToolbar last" to the exact toolbar child that commits before the segfault 2026-05-25 21:27:14 -07:00
Eric 06e7c54f57 [eric] windows 1.1.50 diag: render logs on every ChatInputView child (ChatInputToolbar, AttachmentChips, ChatInputOverlays, SendBlockBanner) so the next 0xC0000005 crash trace shows which sibling commits after EditorSurface — spellCheck=false on the contentEditable did not stop the crash so the trigger is either later in ChatInputView's child render order or in the JSX after EditorSurface's render log; bump for Squirrel fresh-fetch 2026-05-25 21:04:46 -07:00
Eric 664faa1033 [eric] windows 1.1.49: spellCheck={false} on contentEditable div + ChatInputView and EditorSurface render logs + version bump so Squirrel actually fetches a fresh signed binary (force-retagging v1.1.44 was reusing the cached install on every iteration); tag v1.1.49 2026-05-25 20:04:37 -07:00
Eric 0bec1ea268 [eric] windows: serve packaged frontend via embedded http://127.0.0.1 server instead of file:// since dev mode (http origin) never crashed while packaged (file://) consistently 0xC0000005 segfaulted on chat/dashboard mount, confirming file:// origin is the actual native-crash trigger on Electron 40 CastLabs Chromium 144; revert disableHardwareAcceleration to keep GPU perf since the fault was never GPU-side; retag v1.1.44 2026-05-25 18:40:06 -07:00
Eric 9a6956477f [eric] windows: app.disableHardwareAcceleration() since dropping the gpu-blocklist override alone did not stop 0xC0000005 renderer crashes on chat/dashboard mount, so the native segfault is in the GPU process itself not just blocklist-bypass paths; software rasterization is slower but neutralizes the entire GPU-side native-crash class; win32 only, mac is unaffected; retag v1.1.44 2026-05-25 18:15:03 -07:00
Eric bfe59e52b0 [eric] windows: drop ignore-gpu-blocklist + enable-gpu-rasterization + enable-zero-copy since Crashpad confirms every renderer crash is STATUS_ACCESS_VIOLATION 0xC0000005 with no JS cause, classic blocklisted-driver segfault pattern on Electron 40 CastLabs Chromium 144; respecting the blocklist lets Chromium fall back to software rasterization on affected GPUs; retag v1.1.44 2026-05-25 17:49:12 -07:00
Eric 099a0c69e7 [eric] diag: max-coverage logs (crashReporter for native minidumps, main-process uncaughtException + unhandledRejection + child-process-gone + preload-error, full render-process-gone details, safe sendToRenderer, every ipcMain.handle entry, BrowserCard / WorkflowCard render, AgentChat before-jsx) so the next renderer crash leaves a complete trace; retag v1.1.44 2026-05-25 17:29:40 -07:00
Eric aa644d2d2a [eric] fix: WebSocketManager.connect diag log read this.options.sessionId on a class that stores the field as this.sessionId directly, so every WS connect threw TypeError and triggered the Windows native renderer crash on every chat / dashboard hydration; retag as v1.1.44 since the chat-spawn root cause was already closed by the v1.1.44 preload race fix and my v1.1.45 instrumentation regressed it 2026-05-25 16:49:01 -07:00