Commit Graph

  • 131d26c8a7 [eric] merge #130: plain scroll zooms canvas + cmd/ctrl-scroll pans (pierre); anchor zoom at cursor not viewport-center ciregenz 2026-07-15 11:45:16 -07:00
  • 14d83bf499 [eric] theme: gradient engine (1-3 stops on the pad, canvas wash, gradient-tinted card emblem) ciregenz 2026-07-15 11:20:05 -07:00
  • 6ad74bea0b [eric] onboarding: claude design language (starburst mark on intro, thinking-pulse finish, starburst card emblem) ciregenz 2026-07-15 01:38:12 -07:00
  • db99781847 [eric] onboarding: prep tuning (swarm-shaped first starter, tangible results only, no em-dashes) ciregenz 2026-07-15 01:23:39 -07:00
  • 2b28193e15 [eric] onboarding: arc stagecraft (window birth, zigzag grain rooms, picker device, mini-canvas, swarm card) ciregenz 2026-07-15 01:23:39 -07:00
  • 99dbc414d6 [eric] onboarding: schedule-offer toast + morning-brief chip turn the first win into a standing job ciregenz 2026-07-15 01:23:39 -07:00
  • dd5a67b266 [eric] theme: accent picker gets a Settings home; applies live like theme ciregenz 2026-07-15 01:23:39 -07:00
  • 224bc07a52 [eric] dashboard: snap card-framing camera in 150ms (was a lazy 320ms glide) ciregenz 2026-07-15 01:05:09 -07:00
  • 9831941047 [eric] onboarding: merge eric/dev (v3 connect-first flow lands); retire superseded cinematic exploration ciregenz 2026-07-15 00:38:23 -07:00
  • e67dec985e [eric] onboarding: preserve stale cinematic-flow WIP before v3 supersedes this line ciregenz 2026-07-15 00:37:38 -07:00
  • 910f87f270 [eric] onboarding: v3 connect-first flow, live theme pad, personalized reveal ciregenz 2026-07-15 00:29:11 -07:00
  • 164f5c6c06 [eric] theme: user accent hex derived into live tokens via ThemeContext ciregenz 2026-07-15 00:29:11 -07:00
  • 83bb052c0b [eric] onboarding: identity/scan/prep endpoints, settings fields, disk-row reader ciregenz 2026-07-15 00:29:11 -07:00
  • 40bbc867f1 Merge branch 'pr-131-fresh' into HEAD ciregenz 2026-07-15 00:24:00 -07:00
  • fcc6af0f0b Merge branch 'pr-126-fresh' into HEAD ciregenz 2026-07-15 00:23:59 -07:00
  • 1f74cc13de [eric] browser: general capture-replay write tier (site's own captured route, same-origin + gated, default off) ciregenz 2026-07-14 23:47:17 -07:00
  • d445543430 [eric] browser: wire BrowserApiWrite agent tool + robust Reddit write receipt ciregenz 2026-07-14 23:27:39 -07:00
  • 8bc7e479e8 [eric] browser: unified API-first write registry (site's own write API via borrowed session) + Reddit adapter ciregenz 2026-07-14 19:51:53 -07:00
  • 5956f377e8 [pierre] fix: scroll focused card horizontally with Left/Right arrow keys SirKentut 2026-07-14 16:27:16 -07:00
  • b8cd6fe2b3 pierre/cmd-scroll-vertical-pan: cmd/ctrl+scroll pans vertically SirKentut 2026-07-14 16:11:02 -07:00
  • c4704ff27a pierre/clamp-mouse-wheel-zoom: tame discrete wheel notches SirKentut 2026-07-14 16:03:02 -07:00
  • 4707439d6c pierre/scroll-to-zoom: plain wheel zooms at viewport center SirKentut 2026-07-14 16:00:28 -07:00
  • f5056bb310 [eric] build: revert notarize.js to stock @electron/notarize flow ciregenz 2026-07-14 01:01:24 -07:00
  • a422d4d79e [aidan] fix/chat-history: stop retaining unopened histories aidan/fix/chat-history-retention abccodes 2026-07-13 21:21:30 -07:00
  • 65f57cda7f [aidan] feat/affiliate-filenames: move referred downloads to edge AidanandGitHub 2026-07-13 18:55:19 -07:00
  • 7b03eab475 [eric] build: submit+poll notarization, drop --wait (notarytool progress printer SIGBUSes on macOS 25.5) ciregenz 2026-07-13 16:15:37 -07:00
  • 8abe5b5490 [eric] build: retry notarization on transient notarytool wait failures ciregenz 2026-07-13 15:47:37 -07:00
  • 95436ede47 [aidan] feat/installer-egress: stream attributed downloads through edge agent/installer-egress abccodes 2026-07-13 15:31:48 -07:00
  • e7aa032b61 [eric] release: bump to 1.5.7 v1.5.7 ciregenz 2026-07-13 15:24:54 -07:00
  • fb8745f9a3 [pierre] share: refresh the workflow list after importing a workflow .swarm SirKentut 2026-07-13 15:04:47 -07:00
  • 42a3249976 [eric] browser: broaden compose-trigger vocabulary (create/new-thread/start-a-thread variants) ciregenz 2026-07-13 14:59:21 -07:00
  • 1375e6126b [pierre] workflows: share any workflow straight from the sidebar row on hover SirKentut 2026-07-13 14:58:27 -07:00
  • 6ee392839f [pierre] workflows: share the open workflow as a .swarm from the hub title bar SirKentut 2026-07-13 14:55:00 -07:00
  • 9fee353fda [pierre] swarm: de-lazy WorkflowExportable now that the workflow store is on this branch SirKentut 2026-07-13 14:21:12 -07:00
  • 937bb35dca [eric] browser: evalInPage runs via CDP Runtime.evaluate, not webContents.executeJavaScript ciregenz 2026-07-12 21:55:59 -07:00
  • 82fe16767c [eric] browser: handleType reads back its fill and falls back to real keystrokes = the main type action now detects when execCommand insertText did not commit (editors that reject synthetic input) and retypes via wv.sendInputEvent, same lever as the composer finder's keystrokeFill ciregenz 2026-07-12 21:26:49 -07:00
  • 19a3e8ad1a [eric] browser: keystroke-fill fallback + cross-nav reveal retry (both flag-gated, default off) ciregenz 2026-07-12 20:52:15 -07:00
  • a3099f035c [eric] browser: reveal-and-find gains activation-click + shadow-safe collection = a placeholder composer that fills empty (YouTube 'Add a comment') gets clicked, rescanned, and the real editor filled; deepMatch collects only selector matches (few hundred) not every node (the old all-node 4000 cap truncated before a heavy SPA's late-in-DOM composer, which hid X's OWN box); openFirstItem broadened to chat/message lists (data-testid=conversation, message/chat links) and pierces shadow DOM; CDP-direct n=2 reproduced: reveal converts LinkedIn post (modal) + YouTube comment (activation), controls stay filled ciregenz 2026-07-12 20:03:05 -07:00
  • 64675115f8 [eric] browser: reveal-and-find reach primitive (OSW_COMPOSER_REVEAL, default off) = when no composer is painted the finder takes ONE reversible reveal action (click a scored compose-trigger, open the first list item, or scroll) and rescans, bounded; SPA route changes keep the JS context alive so X/LinkedIn/Reddit/YouTube stay drivable in one call; never clicks an irreversible control (hard-block send/submit/pay/delete); send-script forwards reveal only under the flag; 2 tests (reveal forwarded when on, false by default) ciregenz 2026-07-12 19:29:07 -07:00
  • 311f195585 [eric] electron: split installer filename attribution out of affiliateTracking (300-line cap) ciregenz 2026-07-12 18:46:25 -07:00
  • 91a603ce96 [eric] conventions: strip em-dashes from app runtime contract; de-prefix cross-file affiliate exports ciregenz 2026-07-12 18:39:18 -07:00
  • dca6298f1b [eric] merge #125: virtualize large user messages (aidan) ciregenz 2026-07-12 18:37:58 -07:00
  • 026d491722 [eric] merge #124: bind installs from stamped installer filenames; unify install id (aidan) ciregenz 2026-07-12 18:37:57 -07:00
  • 0f5b974eb0 [eric] merge #123: surface app terminal + console errors to the App Builder (pierre) ciregenz 2026-07-12 18:37:57 -07:00
  • fb89324462 [aidan] chore/affiliate-attribution: align private names and trim comments agent/installer-filename-attribution abccodes 2026-07-10 19:31:35 -07:00
  • 1e1d0d3c60 [aidan] fix/affiliate-scan: tolerate future mtimes + cover win32 and all artifact shapes abccodes 2026-07-10 18:51:04 -07:00
  • c7004c9878 [aidan] feat/affiliate-ids: unify install identity across electron and python backend abccodes 2026-07-10 18:06:11 -07:00
  • 4b39d747c4 [aidan] fix/lazyload-chat-lag: virtualize large user messages, add hard-cut fallback aidan/fix/lazyload-chat-lag abccodes 2026-07-10 18:02:52 -07:00
  • b40cb79216 [pierre] fix: keep the App Builder's runtime contract current on every install SirKentut 2026-07-10 17:54:49 -07:00
  • ac2f8e31b6 [aidan] feat/affiliate-filenames: bind installs from stamped filenames abccodes 2026-07-10 02:37:48 -07:00
  • 2d49687ae0 [eric] browser: composer finder pierces shadow DOM (Reddit shreddit, Telegram, WhatsApp, Slack build their composer inside web-component shadow roots a light-DOM querySelectorAll can't see); bounded recursive walk (depth 8, 400-node cap). Live finder-probe on real DOMs: correctly picks X's contenteditable 'Post text' + excludes the search combobox; the remaining wall is that lazy/dialog/chat-gated composers aren't rendered at scan time (detection is downstream of render) ciregenz 2026-07-10 00:56:05 -07:00
  • f542007a3c [pierre] fix: surface app terminal + console errors to the App Builder SirKentut 2026-07-10 00:32:44 -07:00
  • 4c85dd6314 [eric] browser: structural composer finder (OSW_COMPOSER_STRUCT, default off) = an in-page primitive that ranks editable regions (contenteditable/textarea/text-input near a Send/Post/Reply control, excluding search boxes) instead of matching AX names, marks the winner + fills+reads-back in-page (the only reliable commit-check for a React contenteditable whose text never reaches the AX tree); send-script uses it as a fallback when the name detector misses, unblocking unnamed/non-standard composers (Reddit Lexical, X DM); 3 tests, all safety gates + dry-run stop unchanged ciregenz 2026-07-10 00:13:44 -07:00
  • 5ebe554a4c [eric] browser: OSW_PRESTAGE_WARMUP (default off) = before the aux loop, poll perception up to a wall-clock-bounded 8s so a cold heavy SPA (Gmail/LinkedIn) that just opened is perceivable instead of read-empty-then-give-up; wall-clock (not iteration) bound so a slow/wedged card can't overrun the outer prestage timeout; a page that never settles still fails fast (honest wedge, not hidden) ciregenz 2026-07-09 17:25:45 -07:00
  • 31c4817146 [eric] browser: prestage opener-aware block rule (OSW_PRESTAGE_OPENER, default off) = a compose-entry word (post/comment/reply/tweet/write) is allowed to REVEAL a composer while none is present but REFUSED the instant a composer textbox exists (then it's the real submit); hard-irreversible words (send/submit/pay/buy/delete/subscribe) refused always; +1 deeper reach step + composer-open system prompt; flag-off is byte-identical to the legacy blanket gate; 6 tests incl the submit-still-refused safety invariant ciregenz 2026-07-09 16:42:55 -07:00
  • a9d239383e [eric] merge #122: abort card drag on pointer release off-canvas, no stranded edge-pan (pierre) ciregenz 2026-07-09 16:38:33 -07:00
  • 329209259b [eric] browser: dry-run terminates the browser run with a grep-stable [dryrun-report] gate line (a dry-run decline falling through to the model loop could perform the REAL send the flag exists to avoid, and a loop rescue would contaminate gate attribution); inert when the flag is off; +2 tests ciregenz 2026-07-09 16:26:15 -07:00
  • 72e71d6710 [eric] dashboard: clicks inside a webview page select its browser card (guest app-clicked IPC, select+raise only, no camera yank) ciregenz 2026-07-09 16:26:04 -07:00
  • db9aea3d2b [eric] browser: composer regex catches X's 'Post text' + 'add a comment' (live coverage sweep: X tweet composer IS in the AX list but its name didn't match; safely excludes 'postal code'). Proves the deeper point: composer names vary per site, name-regex is inherently chasing them ciregenz 2026-07-09 00:21:22 -07:00
  • 0156f475b8 [pierre] fix: explicitly invoking a an abortDrag the moment the user releases the pointer when off canvas SirKentut 2026-07-09 00:10:25 -07:00
  • 5cff552f0d [eric] browser: send-script dry-run probe (OSW_SENDSCRIPT_DRYRUN) = fills + verifies readiness but stops before the irreversible click, so generalization to a new site can be proven live with zero outward send ciregenz 2026-07-09 00:01:00 -07:00
  • 4eb1f909d2 [eric] browser: generalize the send-script surface gate from a LinkedIn-URL regex to a STRUCTURAL 'composer or opener present in the perception' check, so the same ~14s send fast-lane fires on ANY messaging site (X/Slack/Discord/Instagram/Gmail), no per-site code; broadened composer+opener name regexes to general messaging shapes; all safety gates unchanged (site-agnostic already); +2 tests incl a non-LinkedIn X composer firing ciregenz 2026-07-08 23:53:11 -07:00
  • 9fdfa12cc5 [eric] dashboard: note textarea + browser chrome clicks select (capture-phase); card presses never arm the marquee deselect ciregenz 2026-07-08 23:52:31 -07:00
  • 7de724c930 [eric] browser: fix the 2 warm-marriage replay bugs = (1) 'Send a message to X' opener no longer trips the replay send-boundary (it opens the composer, reversible), (2) marriage replays NAV+opener only and hands composer->send to the send-script (which polls the lazy overlay), instead of replaying a composer-textbox click that races the render; 4 tests ciregenz 2026-07-08 23:39:19 -07:00
  • 3b0d3bb6a7 [eric] dashboard: plain click selects the card so spawn-beside-selection fires without shift/marquee ciregenz 2026-07-08 23:35:01 -07:00
  • 8dcf4b4ae0 [eric] browser: skip prestage when a learned skill exists for the host+task (the replayed prefix owns the nav; prestage would aux-drive the same path for ~8-12s first); skill key hoisted above the gate so skip + replay share one derivation ciregenz 2026-07-08 23:22:25 -07:00
  • 3257caafe4 [eric] browser: warm-write marriage (OSW_REPLAY_SENDTAIL, default off) = a learned send-skill's replayed prefix hands its post-nav state to the verified send-script tail, so a warm write completes with ZERO model turns; also fixes prefix steps missing from action_log (warm re-record was clobbering the skill with a tail-only version); zero-LLM e2e test ciregenz 2026-07-08 23:20:07 -07:00
  • dca6008ddd [eric] providers: health pill ignores clickaway (first canvas click was silently killing it) ciregenz 2026-07-08 23:16:27 -07:00
  • 8dead0c890 [eric] merge #121: spawn cards beside selection or viewport-center; agent browsers dock to chat (pierre) ciregenz 2026-07-08 22:58:42 -07:00
  • 8ed9149c7e [eric] providers: boot-time login-health pill (dead sub token -> reconnect toast, no more silent codex deaths) ciregenz 2026-07-08 20:34:37 -07:00
  • ae563ee9d5 [pierre] fix: deterministic browser spawn SirKentut 2026-07-08 18:14:00 -07:00
  • e6c781a380 [eric] 9router: never orphan-sweep custom nodes off an empty provider list (corrupt-settings boot mass-reap guard) ciregenz 2026-07-08 17:33:15 -07:00
  • f669fc16df [eric] providers: drop reasoning_effort when function tools present (OpenAI now 400s the combo on chat/completions, all gpt-5.x) ciregenz 2026-07-08 17:33:15 -07:00
  • eae31e744f [eric] browser: fold page text into the auto-attached post-action state (OSW_FOLD_TEXT, default off) = after any action the model has BOTH clickable elements AND readable text, so it stops double-perceiving (measured: 52% of tool calls are perception, ~half redundant list+GetText pairs, the biggest untouched turn-cost) ciregenz 2026-07-08 17:08:16 -07:00
  • e0162779a7 [eric] browser: gate document-order display behind OSW_DOC_ORDER (default on) so the A/B can measure it against legacy rank-order; 14 ranking tests ciregenz 2026-07-08 14:57:24 -07:00
  • c19f4ca99e [eric] browser: never suspend an audible card (Chrome parity, music keeps playing off-screen) ciregenz 2026-07-08 14:00:26 -07:00
  • 2234ae46de [eric] browser: interactives render in DOCUMENT order (rank still picks who survives the cap, but display is top-to-bottom page order); the scrambled list forced the model to burn orientation turns reading page text to recover position on ordinal tasks ('the 4th story' landed at [48]), the real cause of the slow HN planning ciregenz 2026-07-08 14:00:02 -07:00
  • a308444487 [eric] browser: planner maps ordinals to the Nth matching row (live fire declined 'the 4th story's comments' because it wasn't told it may count) ciregenz 2026-07-07 23:26:43 -07:00
  • f238fbfce9 [eric] browser: code-side plan dispatch (OSW_PLAN_DISPATCH, default off) = one aux call compiles the task's mechanical prefix into verified steps, code executes them resolve-late+verified, the big model starts with that work done; irreversibles refused in the PARSER, fail-open everywhere; the turn-collapser that doesn't wait for model tool adoption (0/3 A/Bs), 4 tests ciregenz 2026-07-07 23:13:41 -07:00
  • e67b22df66 [eric] browser: reframe BrowserBatch schema copy (was 'your standard way to ACT', steering the model away from the verified tool; now points dependent named click/fill sequences at BrowserActVerified) ciregenz 2026-07-07 23:04:30 -07:00
  • 02fee0983e [eric] browser: evict only AGENT-SPAWNED cards (a wedged USER card must never be deleted out from under the user; unverifiable ownership = no delete, reuse-skip is the remedy); caught in the downstream-risk review, 3 tests ciregenz 2026-07-07 23:04:09 -07:00
  • 161c65cdcd [eric] browser: Chrome-style suspend capsules (sessionStorage+scroll survive), last-visible-frame snapshots, 20s working grace ciregenz 2026-07-07 22:52:28 -07:00
  • aa752303cd [eric] browser: verified-action executor = resolve-late resolver + act/verify/re-aim step loop + BrowserActVerified tool (model emits 2-4 dependent click/fill steps in ONE turn, code resolves each by name against the live page, verifies the specific effect, re-aims once; irreversible targets refused in code, solo-send rule unchanged); 16 unit + 1 loop-interception test ciregenz 2026-07-07 22:42:39 -07:00
  • f7b4e91dd2 [eric] browser: unwedge off-screen webview suspend (capturePage hang) + glow-leak liveness gate ciregenz 2026-07-07 21:27:33 -07:00
  • d1713f901c [pierre] feat: browser spawned from agent will always spawn to the right of parent chat SirKentut 2026-07-07 18:14:17 -07:00
  • c4789ebdab [pierre][refactor]: placeCard exact flag replaces the placeCard+setCardPosition double-dispatch SirKentut 2026-07-06 19:26:38 -07:00
  • f8b9e44cd9 [pierre][fix]: dead-center new cards in viewport and on camera fit SirKentut 2026-07-02 16:05:13 -07:00
  • c3d69d175d [pierre][fix]: spawn new dashboard cards beside selected card or viewport center SirKentut 2026-06-29 02:20:09 -07:00
  • 63bfb7cfae [eric] agents: admission gate caps concurrent root turns (children bypass, queued pill) ciregenz 2026-07-07 18:09:57 -07:00
  • 1e6dd84495 [eric] browser: verified-action executor foundation = generic site-agnostic effect verification (did the action produce the SPECIFIC expected effect: url_changed/appeared/gone/filled/cleared), zero per-site code; wired into the send-script's receipt (proves it on the real flow, behavior-identical to the old inline check via an equivalence test) so it's the executor's verification core, not dead scaffolding ciregenz 2026-07-07 18:00:35 -07:00
  • c423517a9f [eric] browser: close the evict->remount race (wait for the dead webview's teardown to land before recovery spawns its replacement; live-observed the recovery card still capped once when it mounted next to a still-freeing dead one); failure-path-only wait, invisible next to the 15s cap it prevents ciregenz 2026-07-07 17:56:38 -07:00
  • a1a461eb57 [eric] agents: cap persistent client pool + background sweeper (bound resident memory) ciregenz 2026-07-07 17:33:35 -07:00
  • 3123e9a1b4 [eric] browser: evict a dead card's webview BEFORE recovery spawns a fresh one (the recovery-card wedge: two heavy pages starve the renderer event loop; unmounting the wedged one leaves the recovery card the only heavy neighbor); immediate removeBrowserCard (no fade/keep-pill) + layout drop, gated by OSW_DEADCARD_EVICT, 2 tests ciregenz 2026-07-07 17:20:57 -07:00
  • b60f0b94aa [eric] browser: wrong-target detectability probe = the click hit-test now reports WHAT element was actually under the click point, so a click that lands on the wrong element (occluded/stale/moved, and still changes the page) is finally measurable, the failure a page-change metric can't see ciregenz 2026-07-07 16:47:47 -07:00
  • 09262801d9 [eric] release: bump to 1.5.6 v1.5.6 ciregenz 2026-07-07 16:08:19 -07:00
  • 2b63953650 [eric] browser: click-effect probe wraps ALL clickBackendNode exits (was only on the coordinate branch; real-site clicks exit via the covered-element JS path, so the metric captured ~none) ciregenz 2026-07-07 15:48:37 -07:00
  • 8f2565e027 [eric] browser: thread self-heal + click-effect metric into BATCH sub-clicks too (most clicks are batched; gating only top-level click_index measured ~none of them) + scan batch sub-results for the telemetry ciregenz 2026-07-07 15:41:07 -07:00
  • f54f474de7 [eric] browser: click-effect metric (measure before fixing) = fingerprint the page before/after a click to catch the INVISIBLE failure the tool-error counter misses (a click that succeeds but hits the wrong/dead element = nothing changes); flag-gated OSW_CLICK_EFFECT_PROBE, zero cost off, 3 unit tests ciregenz 2026-07-07 15:33:33 -07:00
  • ba3f083832 [eric] merge #120: idle-based workflow step timeout (pierre) ciregenz 2026-07-07 15:20:58 -07:00
  • 522b55f2c8 [eric] browser: log self-heal click recoveries for the A/B (backend can't see the renderer console.log) ciregenz 2026-07-07 15:07:12 -07:00