Skip to content

feat(launcher): periodic updates, startup maximize, bigger editor, iOS force-touch - #112

Merged
MSTU0 merged 68 commits into
botswin:mainfrom
mykola-zalizniak:main
Jun 30, 2026
Merged

feat(launcher): periodic updates, startup maximize, bigger editor, iOS force-touch#112
MSTU0 merged 68 commits into
botswin:mainfrom
mykola-zalizniak:main

Conversation

@mykola-zalizniak

Copy link
Copy Markdown
Contributor

Changes

  • Kernel auto-update: now runs every 10 min, not only at startup (skips while a run/download is in progress).
  • Self-update: launcher update check interval is configurable; both kernel and launcher now check every 10 min (was hourly).
  • Window: maximize on startup.
  • Profile editor: larger Edit Profile dialog (860 → 1100px, 70 → 82vh).
  • Local DNS: rename "built-in resolver" → "local machine resolver" and reword the hint (persisted value unchanged).
  • Fix: iOS profiles (iPhone/iPad/iPod) now auto-enable --bot-mobile-force-touch on file selection, like Android.

mykola-zalizniak and others added 30 commits January 31, 2026 08:05
- Add "Save to proxy list" button in proxy input for reusing manually entered proxies
- Add batch proxy connectivity check with IP/status display in proxy management
- Sort proxy list by creation time (newest first)
- Fix kernel date display: parse from asset filename, fix timezone offset bug
- Simplify profile status column to icon-only (play/stop) with tooltips
- Remove year from "Last Launch" date to prevent truncation
- Widen window to 1080px, use fixed table layout to prevent horizontal scrollbar
- Add column width constraints for profile and proxy tables
…enhancements

- Separate row highlight (single click) from checkbox selection (batch ops)
- Add double-click to edit on both profile and proxy tables
- Add clear proxy button in profile editor
- Combine proxy type/host/port into single row layout
- Add --bot-stack-seed and --bot-network-info-override CLI flags
- Update noise seed from float to integer range
- Stack seed uses dropdown (profile/real/custom) like FPS
- Rearrange noise settings: seed+scale+timeseed row, fps+stackseed row
- Widen proxy type column in proxy list table
…text rects off

- Return created profile/proxy ID from dialog so the table highlights
  the new row after creation, matching the edit-then-highlight behavior
- Change botConfigNoiseTextRects default from on to off
…es guard

- Add --bot-config-orientation dropdown in Display & Input section with all orientation variants, noted as mobile profiles only
- Add --bot-gpu-emulation toggle in Behavior section for auto GPU rendering backend selection
- Add "Clear User Data" action in both profile edit dialog and profile list context menu to delete user-data-dir
- Guard profile and proxy edit dialogs against accidental close: Escape, backdrop click, and Cancel now prompt when forms have unsaved changes
…-03-26 flags

- Restructure sections: Proxy → Proxy & Network, move GPU Emulation
  to Rendering, History Injection to Identity (now supports count)
- Add --bot-enable-variations-in-context and --bot-inject-random-history={number}
- Add CLI command preview in Advanced tab + Copy CLI in context menu
- Backward compat for old profiles with flags in behavior.*
- Fix history count type coercion, add copy snackbar feedback
- Use unique directory per install (tagName_githubAssetId) to avoid overwriting running kernel files during auto-update
- Verify directory deletion before removing kernel record to prevent orphaned records when files are locked on Windows
- Clean up outdated kernels at runtime when browser exits, not only at launcher startup
- Check 7z availability early at init and before download, show warning banner when missing
- Fix nested 7z/zip extraction: use recursive dir search and trim \r from Windows dir output so chrome.7z is found and cleaned up
- Add open-folder button in kernel list to reveal install directory
- deleteKernel throws if files are locked instead of silently failing
- Add ShellService using non-blocking spawnProcess with event buffering
  to fix IPC event loop blocking during downloads and extraction
- Migrate all execCommand calls to ShellService (zero remaining)
- Replace native showMessageBox with snackbar (success) or AlertDialog
  (errors/warnings) for consistent in-app feedback
- Unify all clipboard copy actions with snackbar confirmation
- Add Copy URL button in proxy input
…ld kernel updates

- Proxy input: move Clear button left of Check IP and gate it behind a confirm dialog; enable Clear in the profile-list "Change Proxy" flow.
- Profile list: add Kernel column (derived from bot profile's Chrome major version) with sorting.
- Kernel service: when a release contains several same-platform builds (e.g. botbrowser_20260514_148.0.7778.168 and _20260518_...), pick the asset with the latest assetDate instead of the first one returned by GitHub, so auto-update actually downloads the freshest build.
…ows CLI quoting, drop opinionated defaults

WebKit/Safari profile support:
- run() and getKernelVersion resolve via override → UA Chrome major → Safari→Chromium map (currently 26→149) → latest-installed-kernel fallback → version field. Profiles whose UA carries no Chrome major (e.g. webkit26_*.enc) now launch correctly.
- Snapshot of the latest installed kernel refreshes on kernel.service.installedKernelsVersion so the Kernel column matches what the launcher will actually use.
- Removed the hardcoded default that always emitted --bot-config-browser-brand=chrome; WebKit profiles must NOT receive this flag or they get coerced into Chrome identity. Dropdown gains a "Default (from profile)" option.

shQuoteWin rewrite (Windows CLI quoting):
- Now cmd.exe-quote-parity aware: walks the CommandLineToArgvW-escaped string byte by byte, toggles state on every literal `"`, inserts `"^%"` around % only when cmd is inside quotes, doubles backslash runs preceding the synthetic quote, and appends one extra `"` when input has an odd number of `"` so cmd state can't leak into the next argument.
- shQuotePosix uses single quotes (suppresses $, backtick, \ expansion). Platform detected once via navigator.

Stop overriding BB defaults:
- Dropped launcher-side hardcoded fallbacks for botConfigBrowserBrand / Keyboard / Fonts / ColorScheme / Webgl / Webgpu / SpeechVoices / MediaDevices / MediaTypes / Webrtc and the always-on behavior/noise toggles. Each affected dropdown gains an explicit "Default" option so the no-flag state is visible.
- Window/Screen Mode dropdowns get a "Default" option; #handleFileSelection no longer patches the form when the bot file is replaced.

New features:
- Edit Profile shows the bot profile's original source file path.
- Profile list has a new Platform column (OS · engine, derived from UA); Group moved to the end.
- Proxy list has an Export button that writes selected (or all) proxies to a .txt file in scheme://user:pass@host:port form, round-trippable with Bulk Import.
- Forensics section: V8Log mode/dir + CanvasLab/AudioLab record file pickers (V8Log dir gated to mode at flag-emission time).

Other fixes:
- kernelMajorOverride === 0 treated as "no override" consistently across form init, run() gate, getKernelVersion, and #parseKernelMajorOverride.
- Custom binaryPath validation: stat the candidate and require isFile; strip trailing slashes so a Finder-pasted ".app/" still routes through #findMacOSExecutable.
- Override validation hoisted above the binaryPath branch in run() so malformed overrides surface even when binaryPath would short-circuit kernel resolution.
- Kernel auto-update: when a release has multiple same-platform assets at different build dates, pick the asset with the latest assetDate instead of GitHub's listing order.
- Save-time validators reject empty wxh/json window/screen values and empty custom DNS server before persisting.
- File picker handlers and #handleFileSelection mutations marked dirty / wrapped in NgZone so the unsaved-changes guard works and mat-select bindings stay in sync.
- Clear-proxy prompts a confirm dialog; Clear button moved left of Check IP. Profile-list "Change Proxy" allows clearing.
- Early-exit dialog branches on whether a kernel was used, so the "kernel update / files indexed" message no longer fires for custom-binary launches.
- index.html: replace stale Create-React-App placeholder %PUBLIC_URL%/__neutralino_globals.js with __neutralino_globals.js so Neutralino globals actually load (this caused the welcome page to appear on app start).

Toolchain upgrade:
- @angular/* 21 → 22 (ng update migrations applied), Node bumped to 22.22.3.
- @neutralinojs/lib 6.5 → 6.8, runtime binary 6.5 → 6.8, neu CLI 11.7.2.
- allowedCommonJsDependencies adds @neutralinojs/lib, browserslist trimmed to modern engines (avoids zone.js destructuring error in old Safari target).
- Component anyComponentStyle budget raised to 6kB/10kB.
…igration + Node 24.15 pin

Default-on toggle flags now only emit =false when user explicitly overrides
(debugger/always-active/console-message + 4 noise toggles), matching BB's
own defaults so the CLI preview no longer ships redundant flags. Tri-state
mat-select for Mobile Mode (Default/On/Off) replaces the binary toggle that
could not distinguish "inherit profile" from "force desktop". Free-text
locale fields (languages/locale/timezone/location) treat literal "auto" as
the no-emit default. Local DNS dropdown drops the redundant "off" option
(was identical to kernel default) and shows "Default (off)". V8Log hides
duplicate "none" (functionally identical to Off) and gates the directory
input on a chosen mode. --bot-title moves into buildProfileFlags so CLI
preview matches the actual spawn. botConfigNoiseTextRects form default
matches BB's default-on (was missing the fallback).

Legacy compatibility: profiles persisted from earlier UI carry boolean
false for Mobile / LocalDns that meant "no override" under the old emit
rules; new code would re-interpret those as explicit Off and silently
force desktop mode or re-emit the redundant --bot-local-dns=false. Form
initializers now coerce legacy false to null on load, and the service
emit drops the v === false branch for LocalDns so un-migrated profiles
still launch cleanly. botV8Log='none' (no longer a visible mode) similarly
normalizes to the Off sentinel so the mat-select renders correctly.
Mobile mat-select pre-selects "Default (from profile)" when the form
value is undefined via a null fallback matching the V8Log pattern.

emitToggle hardened against null leaking through from hand-edited or
imported profile JSON (was emitting --bot-config-noise-*=null).

Node version pin bumped from 24.13.0 (rejected by Angular 22's engine
constraint ^22.22.3 || ^24.15.0 || >=26) to 24.15.0 across .nvmrc and
all three setup scripts, plus an engines field on package.json so npm
warns early. Install scripts now version-check the existing private
Node dir and re-extract on mismatch so re-running setup actually
upgrades a stale install instead of short-circuiting. README clarifies
the Node LTS support stance.
Pick up the three flags surfaced in BB 149.0.7827.102 / 2026-06-19 release docs.

- --bot-video-fps (ENT Tier2, new): free-text input next to FPS / Stack Seed
  accepting the documented <actual>[:<reported>] form (e.g. 1, 1:30, 1:real).
  Empty = default; profiles without Video FPS Control enabled ignore the flag.

- --proxy-pac-url (Chromium standard): text input under Advanced Proxy Config.
  Required entry point for trusted PAC scripts that expose BotBrowser's new
  request callback workflow (ENT Tier3).

- --disable-quic (Chromium standard): slide-toggle in Network Protection.
  Documented companion flag for SOCKS5 UDP fallback so deployments can keep
  SOCKS5 routing while opting out of QUIC/HTTP3.
The launcher had `?? true` on the form initializer and `bbDefault=true` in
the noise emit helper, plus the toggle hint claimed "(default: on)". All of
these matched older PROFILE_CONFIGS.md / CHANGELOG.md docs but contradicted
the current kernel behavior, which leaves --bot-config-noise-text-rects off
unless overridden (FONT.md states "disabled by default"). Fresh profiles
that left the toggle untouched showed ON in the UI while BB shipped OFF
at runtime.

Launcher:
- drop `?? true` fallback on botConfigNoiseTextRects form init
- emitToggle bbDefault for text-rects flipped to false (matches kernel)
- toggle hint changed to "(default: off)"

Docs alignment:
- profiles/PROFILE_CONFIGS.md: table + JSON template noiseTextRects default
  flipped to false to match the kernel
- CHANGELOG.md: example CLI and "Example configs Snippet" both flipped
- docs/guides/fingerprint/FONT.md: ClientRects line reworded from the
  ambiguous "(default)" to "(disabled by default)" so it matches every
  other authoritative source for that flag's actual default
…file editor

Kernel auto-update no longer runs only at startup. KernelService gains
startPeriodicCheck(): it re-fetches releases, auto-updates/-downloads
installed kernels, and skips a tick while a previous run or any download
is still in progress. Both the kernel and the launcher self-update now
check every 10 minutes (kernel was startup-only, launcher was hourly);
UpdateService.startPeriodicCheck takes an interval argument so the cadence
is set from app.component.

- Maximize the window on startup: neutralino.config maximize=true plus a
  ready-event window.maximize() so useSavedState can't restore a smaller
  size on later launches.
- Enlarge the Edit Profile dialog: width 860 -> 1100px, content max-height
  70 -> 82vh.
- Local DNS: rename the boolean mode from "built-in resolver" to
  "local machine resolver" and reword the hint so it reads as host-side
  DNS resolution, not a bundled resolver. Internal mode value 'builtin' ->
  'local'; persisted botLocalDns (true / string) is unchanged.
Selecting a bot profile only enabled --bot-mobile-force-touch when the UA
contained "android", so iPhone/iPad/iPod profiles (equally touch-first)
were left with touch off. Generalize the check to match android/iphone/
ipad/ipod so iOS profiles get the same default on file selection.

iPadOS UAs that masquerade as desktop Mac stay undetectable here and are
left to the user. Only triggers on file selection, matching the prior
Android behavior; opening an existing profile does not flip the toggle.
@MSTU0
MSTU0 merged commit f22b0b0 into botswin:main Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants