Commit Graph
1414 Commits
Author SHA1 Message Date
ciregenz de173a6a1c [eric] dashboard: body clicks select an unselected browser (webview passes them through) 2026-06-18 01:55:40 -07:00
ciregenz e0e2bb9f3c [eric] settings: Data & Privacy buttons match the About outlined style (Restart tour), drop the ellipsis + add section spacing 2026-06-18 00:21:55 -07:00
ciregenz 3f9fde17a8 [eric] electron: hard-reset IPC (kill backend, wipe data dir, relaunch) for factory reset 2026-06-17 23:32:17 -07:00
ciregenz 6d9e559892 [eric] settings: Data & Privacy section, Reset all settings + Erase all content (Apple-minimal, typed-confirm) 2026-06-17 23:31:26 -07:00
ciregenz 8b63e3d7c6 [eric] settings: add reset-to-defaults endpoint (preferences to defaults, keep connections + sign-in) 2026-06-17 23:31:26 -07:00
ciregenz fdfe014ae0 [eric] dashboard: select/drag a browser card from its whole body, not just the header 2026-06-17 23:13:01 -07:00
ciregenz a18111ac8a [eric] electron: red traffic-light quits the app instead of hiding; neuter Cmd+W 2026-06-17 20:12:56 -07:00
Eric 666c53e888 [eric] release: bump version to 1.3.92 2026-06-17 19:28:23 -07:00
Eric ec0f9600bc [eric] backend: remove cold-start diagnostics, keep the fix + slim lifespan timer
- the is_running() fast-fail fix (v1.3.91) verified cold backend-http-ready
  23.5s -> 3.86s and warm 5.0s -> 3.32s on the signed build, no 9Router regression
- strip the [perf] bg entry logs from mcp/skill/settings/service/9router now that
  the stall is diagnosed; keep Apps.py per-lifespan timing but only print a
  lifespan over 50ms plus the total (cheap regression tripwire)
- document the root cause + fix + before/after in docs/perf/winv2/README.md
2026-06-17 19:28:23 -07:00
Eric f2c9c25603 [eric] release: bump version to 1.3.91 2026-06-17 19:06:10 -07:00
Eric 24df3e8fac [eric] backend: fast-fail is_running() to kill the ~18s cold-start event-loop freeze
- faulthandler on the signed cold build caught the asyncio loop frozen in
  socket.create_connection inside is_running() (process.py): a synchronous
  httpx.get to "localhost:20128" called ~5x on the boot path before 9Router is up
- on Windows a dead-port connect to "localhost" stalls ~7s each (tries ::1 first,
  loopback refusal is slow), freezing the loop ~18s so uvicorn could not answer
  the health probe -> cold backend-http-ready was ~23s
- fix: probe 127.0.0.1 with a 0.3s TCP timeout first (measured 306ms vs ~7s), only
  HTTP-confirm when the port is open; 9Router binds 0.0.0.0 so reachability is
  unchanged. drop the faulthandler diagnostic from main.py
2026-06-17 19:06:10 -07:00
Eric 36f54aa534 [eric] release: bump version to 1.3.90 2026-06-17 18:40:02 -07:00
Eric 035ef26c0f [eric] backend: faulthandler stack-dump + settings boot log to catch the cold loop stall
- v1.3.89 cold proved two stacked stalls: ~5s in is_running() (sync httpx) and a
  bigger ~13s BEFORE any background task runs, a silent event-loop freeze
- add faulthandler.dump_traceback_later(7s, repeat) to a temp file so a dump lands
  inside the 13s window and names the exact synchronous call the loop is stuck in
- add an entry log to settings._boot_router_then_sync (first startup bg task)
- diagnostic only; reverted once the stall is pinned
2026-06-17 18:40:01 -07:00
ciregenz ea84f57813 [eric] release: bump to 1.3.86 v1.3.86 2026-06-17 18:36:11 -07:00
ciregenz c577382943 [eric] oauth: complete Claude callback server-to-server, not a cross-port browser 302 (fixes browser-dependent 'Connecting' hang from #84) 2026-06-17 18:24:33 -07:00
Eric 3ec6b16b26 [eric] release: bump version to 1.3.89 2026-06-17 18:11:46 -07:00
Eric 90aa66f6ce [eric] backend: timestamp each startup background task to pin the cold-start loop stall
- instrumented cold v1.3.88 proved the lifespans are 141ms even cold; the ~18s
  cold gap is a backgrounded create_task blocking the event loop AFTER lifespan
  startup but BEFORE uvicorn reports ready (what the health probe waits on)
- add [perf] entry/segment logs to the post-startup background tasks: mcp refresh,
  skill refresh, 9router ensure (+ prelude bisection), and svc._post/_post_or_spool
- logging only, no behavior change; next cold log names the exact blocking call
2026-06-17 18:11:46 -07:00
ciregenz 763d445f45 [eric] usage: minimal paid-usage meter nudge (approaching + maxed) mirroring the free-trial pattern 2026-06-17 17:53:00 -07:00
Eric 19ce052560 [eric] release: bump version to 1.3.88 2026-06-17 17:41:47 -07:00
ciregenz 6b8750efaf [eric] 9router: rotate the unbounded request-details log + cap node heap, fixes the idle OOM crash 2026-06-17 16:20:59 -07:00
Eric 2151802f41 [eric] docs: record winv2 cold-start source audit, mark DEBUGLETON hypothesis disproven
- audited all 16 lifespans + the service client in source: every body is trivial
  (yield / makedirs / early-return migrate / fire-and-forget svc.sync)
- the no-op debug() shipped and verified live but cold stayed 21.5s, so the
  DEBUGLETON scan was not the cold driver; residual ~16s is cold first-run paging
- next cold build with the new [perf] markers pins it or confirms distributed I/O
2026-06-17 03:22:10 -07:00
Eric b6652b6722 [eric] backend: add per-lifespan boot timing to pin cold-start stalls
- debug(sub_app.name) is a no-op in packaged builds, so the packaged backend.log
  had zero per-SubApp markers and a cold stall could only be guessed at
- wrap each enter_async_context with time.perf_counter + a flushed [perf] print,
  plus a lifespans-total line, so a cold launch names the exact slow lifespan
- logging only, no functional change; loop logic validated warm
2026-06-17 03:22:10 -07:00
Eric 3d6fe48340 [eric] perf: no-op swarm-debug debug() in packaged mode (removes ~17s cold-start scan)
- first debug() call instantiated Debugleton -> recursive os.scandir project scan on the boot path (~17s cold, ~80ms warm)

- early-return when OPENSWARM_PACKAGED=1; dev keeps the full debugger; debug() returns None so callers are unaffected

- validated: with the flag debug() no-ops (no scan); debugger is pip-installed from repo/debugger at build so this ships
2026-06-17 02:31:56 -07:00
Eric fa8daf2e76 [eric] perf: ROOT CAUSE of cold start found -- swarm-debug DEBUGLETON scandir scan on boot path
- debug() -> Debugleton().find_file_info -> build_structure recursive os.scandir walk runs synchronously on the bind path

- cold (uncached fs) ~17s, warm ~80ms; explains why defender + file-count did nothing (it is a scandir walk)

- proposed safe fix: no-op debug() when OPENSWARM_PACKAGED=1 (skip the scan in prod); expect cold ~22s -> ~5s
2026-06-17 02:24:29 -07:00
Eric afbfb8f82a [eric] perf: item 5 (defender exclusion) measured -- NO cold benefit; cold is not defender
- cold 21.4s WITH exclusion vs 22.5s without; items 1+3 also no change

- two defender-targeting fixes both ~0 -> residual cold is disk I/O + interpreter init + squirrel first-run, not AV

- recommend removing the exclusion (weakened AV for no gain); bank the wins (cold 54-138->22s, warm 9-10->5s)
2026-06-17 02:12:15 -07:00
Eric 1a559deadf [eric] perf: revert #9 items 1+3 build wiring (measured: no cold benefit)
- zip-stdlib + pyc-only gave no cold improvement (cold is native-binary-scan-bound)

- keep build lean; scripts stay as drafts; cold lever is the opt-in defender exclusion (item 5)
2026-06-17 01:50:18 -07:00
Eric c667a16206 [eric] perf: measure #9 items 1+3 on signed build -- NO cold benefit (negative result)
- python-env 13554->9285 files (31% fewer) but cold stayed 22.4s vs 22.5s

- cold is native-binary-bound (claude.exe 242MB + .pyd/.dll), not file-count; zip/pyc only touch pure-python

- real cold lever is item 5 (defender exclusion) or trimming native deps; warm 5s already under goal
2026-06-17 01:33:26 -07:00
ciregenz 18be72cf9c [eric] phase3b: 'fresh runs in ~Xh' on the spent nudge + one-tap continue-on-your-model after exhaustion 2026-06-17 01:14:40 -07:00
Eric 6d0e6bbf04 [eric] perf: mark #9 items 1+3 enabled + validated (import-clean, 31% fewer files) 2026-06-17 01:09:26 -07:00
Eric b22f46be47 [eric] perf: enable #9 items 1+3 in the windows build (zip stdlib + pyc-only deps)
- shrinks python-env 13554 -> 9287 files (~31%); validated: backend.main imports clean with both applied

- targets the python-env Defender scan that dominates the 22.5s cold start

- guarded (skips if python313.zip already present); non-fatal
2026-06-17 01:08:00 -07:00
Eric ff432466bf [eric] perf: re-verify task #10 on signed v1.3.86 (identical bits to abandoned 1.3.87)
- download 371.5MB @ 27.1MB/s, authenticode valid; install 6.3s

- cold 22.6s, warm 5.0s, asar 2.1MB, skills live total=17 -- all on the signed 1.3.86 build
2026-06-17 00:49:58 -07:00
ciregenz 46753fa9c8 [eric] aux: fix stale sonnet id (claude-sonnet-4-20250514 4.0 -> claude-sonnet-4-6), was 404ing every aux call 2026-06-17 00:46:21 -07:00
ciregenz 8c93d42226 [eric] phase2: fire connect offer on MCPSearch/MCPList (not just loop), 8s preflight, render below the reply 2026-06-17 00:30:42 -07:00
Eric 1f2d5f19b3 [eric] release: set version back to 1.3.86 on the fixed code (reuse the cancelled tag)
- 1.3.86's build was cancelled (never shipped); reuse the number, supersede 1.3.87
2026-06-17 00:13:49 -07:00
Eric 9f30c58d28 [eric] perf: task #10 results verified on signed v1.3.87 build
- signed installer (authenticode valid), 371MB @ 23.5MB/s; install ~9s

- cold backend-ready 54-138s -> 22.5s; warm 9-10s -> 5.0s (under 10s goal)

- asar 607MB -> 2.1MB; skills catalog live total=17 (bug #1 confirmed); validate 5/5 pass

- add before/after startup graph
2026-06-17 00:08:26 -07:00
Eric 3bd4506e4e [eric] release: bump version to 1.3.87
- supersedes the cancelled 1.3.86 build (pre-extract was too slow to package)
2026-06-16 23:44:22 -07:00
Eric 41f812f7d6 [eric] app-builder: ship webapp node_modules as .tar.gz, not pre-extracted (build perf)
- pre-extracting ~30k files into resources blew the windows build past 50min (squirrel lzma on tiny files) + bloated the installer

- revert step 4b to a single node_modules.<digest>.tar.gz (mirrors mac); runtime extracts to warm cache in the background at startup (off the create path)

- runtime _bundled_extracted_modules() stays as a harmless fallback (returns None -> tar path)
2026-06-16 23:44:21 -07:00
ciregenz fc6d53b492 [eric] phase3: hide the trial-spent nudge once a real model is connected 2026-06-16 23:00:23 -07:00
ciregenz 920f73cee9 [eric] phase2/3: minimal borderless free-trial nudges (post-wow + spent) + minimal in-task MCP connect card 2026-06-16 22:57:43 -07:00
Eric 623a819457 [eric] perf: task #10 download-speed + signature tracker for the signed build
- times gh release download (MB/s), verifies authenticode, hands off to validate_packaged.ps1
2026-06-16 22:38:47 -07:00
ciregenz 78c0971e88 [eric] phase2: wire in-task MCP connect offer into the ToolSearch loop-breaker (suggest-only, slug-matched) 2026-06-16 22:34:28 -07:00
Eric 58c2b6f411 [eric] perf: task #10 validation kit for the signed packaged build
- TASK10_CHECKLIST.md: produce signed build, verify signature, install, cold-start, GUI checks

- validate_packaged.ps1: automated structural + perf checks (verified it flags the unfixed 1.2.82)
2026-06-16 22:29:55 -07:00
Eric 947a6c1db5 [eric] perf: draft opt-in defender exclusion helper for windows cold-start (#9 item 5)
- scripts/add-defender-exclusion.ps1: dry-run default; -Apply/-Remove (admin); -Status

- excludes %LOCALAPPDATA%/%APPDATA%/~ openswarm dirs; kills defender cold-scan entirely

- security-sensitive: opt-in only, never silent; settings-toggle design documented, not auto-applied
2026-06-16 22:23:11 -07:00
ciregenz b8dc125da7 [eric] phase2: suggest-only offer_for_gated_server core + gate-safety invariants (in-task MCP connect) 2026-06-16 22:23:02 -07:00
Eric 8bc899ce74 [eric] perf: exclude duplicated python-env + build-staging from the asar (#9 item 4)
- inventory: 607MB asar was ~605MB duplication (python-env 408MB + build-staging 197MB)

- both already ship unpacked in resources/; runtime reads resources/, never the asar

- add build.files exclusion -> asar ~607MB -> ~2MB; kills the 639MB cold-read on first launch

- add inspect_asar.js inventory tool; validate asar size + boot on a packaged exe
2026-06-16 22:20:17 -07:00
Eric dcd4f6f149 [eric] perf: draft pyc-only site-packages strip to shrink defender cold-start (#9 item 3)
- standalone, dry-run by default, NOT wired into the release build (build-gated)

- strips 3352 .py (26.9MB) from site-packages to sourceless .pyc; mechanism proven on bundled 3.13

- scope: site-packages only (keeps backend source for the debugger); validate on a packaged exe
2026-06-16 22:15:45 -07:00
ciregenz 177d2b6fb7 [eric] free-trial: warm connect-your-own-model banner when the trial is spent (was the red no-model wall) 2026-06-16 22:12:56 -07:00
Eric 17e6c06d5c [eric] release: bump version to 1.3.86
- winv2: windows startup -90% warm, app builder windows fixes, skills seed
2026-06-16 22:07:40 -07:00
Eric 8df4d3821b [eric] perf: draft stdlib-zip tool to shrink defender cold-start surface (#9 item 1)
- standalone, dry-run by default, NOT wired into the release build (build-gated)

- collapses ~910 loose stdlib files into python313.zip (cpython auto-adds it to sys.path)

- validate on a packaged exe before enabling; see docs/perf/winv2
2026-06-16 21:59:16 -07:00
Eric 9f0f561dde [eric] app-builder: pre-extract webapp-template node_modules into windows resources
- step 4b builds node_modules natively and robocopies it into resources (digest-tagged)

- runtime junctions straight at it; kills the ~14s first-app extract; non-fatal on failure
2026-06-16 21:59:16 -07:00