Commit Graph
1183 Commits
Author SHA1 Message Date
ciregenz 1a4cccf3cd [eric] settings-agent: always-on SettingsRead/SettingsWrite MCP server + guarded /api/settings-meta endpoint, wired into every run 2026-06-19 02:47:38 -07:00
ciregenz f094de5fbd [eric] settings-agent: typed powering-credential resolver + schema-derived redactor + exhaustive no-suicide invariant test 2026-06-19 02:42:56 -07:00
ciregenz b7450f885a [eric] merge winv2: win startup speedups + skill-registry seed, release 1.3.87 v1.3.87 2026-06-19 00:57:57 -07:00
ciregenz 4ae97e5de0 [eric] throttle: emit rate_limited on exhausted backoff + muted auto-clearing pill (no error card)
(cherry picked from commit 03a9233b860683ae0f9d15b9e9efda32763c7d41)
2026-06-19 00:25:55 -07:00
ciregenz 6193863408 [eric] subscriptions: confirm active node before Connected (claude+codex), re-check on run-fail, honest copy
(cherry picked from commit 3ce44f314b3b51e48692d5f47df38d5bc43ec0f6)
2026-06-19 00:25:54 -07:00
ciregenz f0cb676afb [eric] permissions: read-only MCP actions auto-allow by default; writes still ask
(cherry picked from commit 03f3ce05be2c555990e7e6486859c48f0cd3c94c)
2026-06-19 00:25:54 -07:00
ciregenz 324edc1971 [eric] approvals: surface Always Allow All in the batch bar so it stops being hidden behind Approve All
(cherry picked from commit 9628c1f198ada1f3afdb909c38493bc6f0256f54)
2026-06-19 00:25:54 -07:00
ciregenz a5d89888d8 [eric] drm: redact Authorization bearer token in [drm-req] license logging
(cherry picked from commit 7b32eeea602e436e102fe7578bf50eccace6e0e0)
2026-06-19 00:25:54 -07:00
ciregenz b97609d92a [eric] github mcp: point at /x/all so every toolset is exposed, not the default subset
(cherry picked from commit 0df418496d98ea769f7cddb9d95219128668fc38)
2026-06-19 00:25:54 -07:00
ciregenz 40c863e9cf [eric] integrations: add GitHub MCP (remote http server + one-click OAuth)
(cherry picked from commit 901e3bf98244d3e599db5f3f05f4dc2ce943888e)
2026-06-19 00:25:54 -07:00
ciregenz db6c5c4d9d [eric] agents: idempotent id-keyed message commit so a stop racing the SDK envelope can't append a duplicate reply 2026-06-18 18:44:25 -07:00
ciregenz c1503eae97 [eric] agents: make Stop instant: commit the partial + free the task before the slow SDK teardown, and ignore a superseded task's late teardown 2026-06-18 18:24:54 -07:00
ciregenz b1fc1dd923 [eric] chat: on stop, promote the in-flight assistant text to a message immediately so the partial doesn't blink out during the SDK cancel lag 2026-06-18 05:02:19 -07:00
ciregenz a716b43df1 [eric] agents: after a mid-stream stop, rebuild history from session.messages so resume/follow-ups see the partial reply 2026-06-18 04:36:23 -07:00
ciregenz fb9a2a5b7b [eric] chat: fix the malformed resume-agent continue prompt 2026-06-18 04:00:47 -07:00
ciregenz 9a622c48e2 [eric] agents: keep the partial reply when a stream is stopped mid-flight 2026-06-18 04:00:47 -07:00
ciregenz 592744a843 [eric] dashboard: browser page is click-through in select mode so the whole card is pickable 2026-06-18 03:04:49 -07:00
ciregenz 8f922aee2d [eric] dashboard: revert browser body-click select; it blocked clicking into the page 2026-06-18 02:23:15 -07:00
ciregenz 1122e8846a [eric] dashboard: toolbar send passes the selected browser id so the agent uses it (was glow-only) 2026-06-18 02:07:58 -07:00
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