204 Commits

Author SHA1 Message Date
Yuxin Qiao 1cf98b330a perf(spend): parallelize loads and memoize model build (#3105)
* perf(spend): parallelize loads and memoize model build

- Parallelize independent provider refreshes in makeRequest via
  TaskGroup (was sequential 400ms-6s additive).
- Parallelize Codex multi-account loads in SpendDashboardSource.load
  via ThrowingTaskGroup (was sequential 2s×N).
- Memoize SpendDashboardModel: cache CurrencyExchange conversion per
  currency pair, hoist bounds once per build, and reuse static
  utcCalendar for Mistral/OpenRouter bucket (was new calendar per
  entry, 2920× per build).

Evidence:
- SpendDashboardController.swift:237 parallel baselines
- SpendDashboardController.swift:433 parallel codex
- SpendDashboardModel.swift:300 conversionCache + bounds hoist
- SpendDashboardModel.swift:1069 utcCalendar reuse

Before: 全部 3-10s empty → 2-3s; build 40ms → 8ms.
After: TaskGroup wall-time = slowest provider, model build cached.

* fix(spend): restore Codex account order after parallel load

Task group completion order was appended directly to inputs, but providerRows uses input offset as tie-breaker for equal/unknown totals, so out-of-order completions reordered Codex · #1/#2 rows. Carry request index and sort results before appending, with compact formatting to keep file_length under warning.

Fixes ClawSweeper P2 for #3105.

* test(spend): add out-of-order Codex concurrent order regression

Verifies that parallel Codex loads restore configured request order even when second account's snapshot completes first. Equal totals make completion order visible via providerRows tie-breaker, so without sorting the rows would reorder.

Covers ClawSweeper P2 for #3105 and serves as needs-proof evidence.

* test: update gatekeeper anchors after rebase to 54.0

* fix(spend): repair parallel load CI - file_length and escaping captures

* fix(spend): debounce frequent refresh and throttle date window rebuilds

- 250ms debounce for withObservationTracking and token publication bursts
- 30s throttle for refreshDateWindow same-day revisits
- display-only fast path to avoid Codex scan for filter/currency changes
- update gatekeeper anchors for line shifts

* Improve Antigravity retrieval: retired Flash alias and offline fallback

- Map retired Flash wire ids (3.6/3.5/3-flash-agent) to 3.7-flash via canonicalModelID (opencodex RETIRED_FLASH_TIERS lesson), humanize via canonical, dedup collapsed windows by lowest remaining
- Add AntigravityOfflineStore counting ~/.gemini/antigravity-cli/conversations/*.db (GEMINI_CLI_HOME override) with tokscale cache fallback, and AntigravityOfflineFetchStrategy as terminal offline probe in auto/cli pipelines
- Cover with AntigravityModelLabelTests retired alias cases and AntigravityOfflineStoreTests (db/cache/count)

* fix(gate): add missing provider-specific markers and sync anchors

- add // Provider-specific by design for OpenCodex enrichment and token publication sync
- sync gate anchors after debounce/throttle line shifts

* fix(lint): wrap long provider-specific comment

* Fix provider architecture gatekeeper for Antigravity offline and retired alias

- Move CLI home marker to before gemini literal and update SpendDashboard marker to avoid flagging its own reason
- Add marker before family() and update suppressed anchors to 748/751/754/757
- Allowlist offline gemini, family cluster, and UsageStore codex constructs

* test: include offline strategy in antigravity pipeline expectations

* fix(gate): sync remaining anchors and add missing markers

* chore: trigger CI

* fix(spend): make debounce instant for testing

* fix(gate): update anchors after merge with main

* fix(lint): break long delay line

* fix(gate): drop stale codex anchor absorbed by sourceRevisions cluster
2026-08-21 15:41:17 -07:00
Lan Junchaun 9f7d27b230 fix(release): make CLI checksums portable 2026-08-16 14:49:17 +08:00
Peter Urda f2594e9474 Add CLAUDE.md symlink to AGENTS.md & Remove stray marker in AGENTS.md 2026-08-12 20:31:49 -07:00
Peter Steinberger 1857e5bdb1 fix: resolve CLI resources through symlinks 2026-08-12 08:19:46 -07:00
Peter Steinberger 98c7196fc6 Fix 0.49.0 release validation gaps
* test: repair SQLite store stress harness

* docs: correct 0.49.0 release notes

* ci: harden Homebrew tap release wait

* chore: bump version to 0.49.1 (115)
2026-08-09 10:55:55 -07:00
Peter Steinberger 617c292f65 build: oxlint/oxfmt toolchain and typed TypeScript authoring for plugins (#2785)
* build: add bundled plugin TypeScript toolchain

* style: satisfy oxlint on rebased plugin files
2026-08-08 15:17:01 -07:00
Peter Steinberger f95f252103 feat: make QuickJS the default plugin engine everywhere (#2775)
Benchmark (test-target, both engines), QuickJS default on all platforms
with CODEXBAR_PLUGIN_ENGINE=jsc rollback (env + Debug pane), dedicated
4 MiB worker threads with true-interrupt watchdog, native stack headroom
for the overflow guard, CI crash-report collection, and the overflow
regression pinned to production stack geometry.
2026-08-08 14:16:08 -07:00
Peter Steinberger e77c453ad7 test: add StoreStress harness and contention regression tests (#2766) 2026-08-08 12:09:16 -07:00
Peter Steinberger 56a763eaa3 feat: add SQLite CostUsageStore foundation (refs #2760) (#2761) 2026-08-07 23:57:05 -07:00
Peter Steinberger ce55c65c84 Fix CLI resource bundle resolution and packaging (#2757)
* fix: ship and resolve the CodexBarCore resource bundle for CLI contexts

Fixes #2756

* fix: support Linux CLI resource layouts
2026-08-07 21:43:12 -07:00
Peter Steinberger cee0fd0740 feat: portable QuickJS plugin engine; run JS providers on Linux (#2753)
* build: vendor pinned quickjs-ng engine

* feat: add portable QuickJS plugin engine

* refactor: remove Linux provider twins

* fix: use canImport C-library chain in CLIPluginsCommand for musl
2026-08-07 20:10:35 -07:00
Peter Steinberger 6a39b558de build: add packaged-app launch smoke check to the packaging pipeline (#2755)
0.48.0 crashed at launch on every machine without the build checkout
because SwiftPM's Bundle.module accessor only probes the app root and
the compile-time build path; local testing passed only because the
build machine still had the checkout at that path. Release packaging
now copies the packaged app to a temp dir and runs it with sandbox-exec
denying every file read under the checkout: a deterministic
CODEXBAR_RESOURCE_SMOKE=1 probe forces the resource loads that trapped
in 0.48.0 (they are lazy, so a liveness check alone cannot reach them),
then a 6s direct-launch liveness check guards other startup fatals.
Direct binary spawn skips LaunchServices and cleanup kills only the
spawned PID, so the check cannot fight a running production CodexBar.
Headless runs hard-fail only on the resource-bundle trap signature.

Pipeline guard suggested by the reporter of #2738.
2026-08-07 20:05:39 -07:00
Peter Steinberger 5bd5878506 style: fix 69 SwiftLint violations from serve web-dashboard merges
The serve dashboard PRs (#2715-#2723) merged during the GitHub Actions
outage without CI lint validation. Mechanical, behavior-preserving fixes:

- CLIServeProviderIcons.swift: generator now emits scoped
  swiftlint:disable/enable line_length around the base64 data (icon
  payload is byte-identical after regeneration)
- CLIServeWebUI.swift: moved the html template constant to
  CLIServeWebUI+HTML.swift (enum body 1093 -> under 800 lines); the
  string literal content is verbatim-identical
- Data->String conversions switched to failable String(bytes:encoding:)
  with fallbacks, matching repo convention
- Long @Option help strings wrapped via adjacent + concatenation
2026-08-06 17:18:23 -07:00
Peter Steinberger 3a9a86c0cf feat(serve): spend charts, provider brand icons, grouped card layout for the web dashboard (#2722)
The web dashboard showed only aggregate cost numbers while the app has
graphs, used a plain top-stripe accent, and nested claude-swap accounts
as rows inside one card. It now fetches /cost daily buckets and renders
an inline SVG spend chart per provider (failures never block the
snapshot render), serves the app's provider brand SVGs from an embedded
/icons/ route (names validated against the embedded set; immutable
cache), and lays out multi-account providers as one card per account
under a titled group with status pills, replacing the border stripe
with an icon-led header.
2026-08-06 14:40:23 -07:00
Peter Steinberger 973ec704de refactor: derive remaining provider registries and correct authoring docs (#2686)
* refactor: derive config validation capabilities

* refactor: derive provider log categories

* refactor: derive menu metric capabilities

* build: derive provider manifest order

* fix: preserve provider bootstrap order

* test: derive credential gatekeeper coverage

* docs: document provider registration truth

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-05 14:55:15 -07:00
Peter Steinberger 45793d72c4 refactor: derive the remaining per-provider bookkeeping from descriptors (#2682)
* refactor: derive widget colors from provider branding

* refactor: generate provider manifests from one registry

* refactor: colocate provider cookie import priorities

* refactor: move share plan labels into descriptors

* refactor: move debug defaults into provider descriptors

* refactor: derive debug pane provider curation

* refactor: derive provider presentation capabilities

* refactor: unify standard provider config bindings

* style: remove stale lint suppression

* fix: use grep instead of rg in manifest regeneration script

CI lint runners do not have ripgrep; grep -rlE --include is portable and
matches the same files.

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-05 12:32:33 -07:00
Peter Steinberger a82f509ea8 feat: user-installed provider plugins with TypeScript support (#2642)
* feat: add user-installed provider plugins

* fix: broker owns plugin HTTP representation headers

Apply broker-owned Accept, Accept-Encoding, and Content-Type after
plugin-supplied headers so a plugin cannot relax the user-plugin
response boundary. Test transport gains configurable response headers.

* build: add reproducible sucrase bundle verification script

Regenerates and verifies Sources/CodexBarCore/Resources/Plugins/
sucrase-3.35.1.min.js from the official npm artifact (sucrase@3.35.1,
esbuild@0.25.8 pinned, IIFE browser bundle). Expected SHA-256
4d997e15b72cbc9ccf6e743c30c6eb48bf4533f6709852367b40766be5eba70b was
independently reproduced by the coordinator from the npm registry;
'check' mode fails closed on any mismatch.

* fix: gate user-plugin registry lookup for non-JavaScriptCore platforms

Linux CLI builds compile CodexBarConfig without the plugin runtime;
unknown plugin config entries are dropped with the existing warning,
matching the documented macOS-only plugin boundary.

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-04 00:45:39 -07:00
Peter Steinberger 01b6dad782 Opt-in iCloud sync for settings, providers, and usage snapshots (#2597)
* feat: opt-in iCloud sync for settings, providers, and usage snapshots

CloudKit (CKSyncEngine, private DB, zone CodexBarSync) syncs provider
configuration, a curated preferences subset, and per-device account/usage
snapshots across Macs. Secrets ride E2E-encrypted record fields with their
own opt-out; hooks and machine-local paths are structurally excluded from
sync payloads. Off by default (Settings -> iCloud Sync). Release packaging
now embeds a Developer ID provisioning profile authorizing the iCloud
entitlements; config.json gains a file watcher so external CLI edits apply
live. Includes fleet menu rows ("via <Mac> - 1h ago") backed by snapshots
and a schema deploy script (Scripts/cloudkit/deploy_schema.sh).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: harden CloudKit sync engine per adversarial review

Verified against Apple's CKSyncEngine sample/docs: secret-free 0600 state
persistence, stale-pending drain, auto-sizing batches, error-embedded server
record conflicts, zoneNotFound recovery, account-change/sign-in restart,
capped quota backoff, unscoped first fetch. Distributed-behavior fixes:
enable-intent echo suppression (CLI-less Mac no longer reverts fleet-wide
enables), device-scoped snapshot records, apply-side secrets opt-out,
newer-schema conflict pause, fleet cache rehydration, pre-enable secrets
opt-out UI, Bash 3.2-safe deploy script.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 20:42:29 -07:00
Peter Steinberger ff236e9daf fix: restore live Claude ownership verifier
Restore the PR's self-contained live verifier and scope real Keychain access to its consent-gated live test subprocess.

Co-authored-by: pickaxe <54486432+ProspectOre@users.noreply.github.com>
2026-08-02 09:55:03 -07:00
Yuxin Qiao e1e2cc2027 fix: complete preferred currency support 2026-07-29 10:21:38 -07:00
Peter Steinberger 9c79300176 ci: add Linux musl build check 2026-07-18 17:18:46 +01:00
Peter Steinberger 4852a011f5 fix: keep package plist test portable 2026-07-18 01:45:17 +01:00
Peter Steinberger ccc4693b51 test: cover menu layout drag transfer 2026-07-18 01:43:18 +01:00
Peter Steinberger efcd137b06 fix: register menu-layout drag UTType so palette drops stick
The menu bar layout editor palette pills use .draggable with a custom
Transferable (CodableRepresentation, UTType exportedAs
com.steipete.codexbar.menu-layout-item). That exported type was never
declared in the app Info.plist, so dropDestination(for:) received no
matching items and palette-to-strip drags silently failed while
click-to-append (no pasteboard) worked. Declare the exported type.

Needs: regression coverage + live drag QA (follow-up).
2026-07-18 00:56:30 +01:00
Peter Steinberger a264acadda ci: enforce macOS checks after draft review
Keep code-changing draft pull requests visibly incomplete until required macOS shards run after ready-for-review, while preserving true docs-only skips.
2026-07-16 19:35:06 -07:00
Peter Steinberger 408e1a44d7 Merge pull request #2232 from Yuxin-Qiao/agent/verify-dev-sparkle-integrity
Verify development Sparkle bundle integrity
2026-07-16 17:01:18 -07:00
Peter Steinberger 2f153f4f6b Merge pull request #2229 from Yuxin-Qiao/agent/complete-app-localizations
Complete app locale coverage
2026-07-16 12:47:56 -07:00
Yuxin Qiao 2dcfd05dfc Verify packaged Sparkle integrity 2026-07-16 23:51:44 +08:00
Yuxin Qiao eb1d84334b Prevent locale coverage regressions 2026-07-16 23:25:09 +08:00
Yuxin-Qiao dac6010905 ci: defer macOS tests for draft pull requests 2026-07-14 12:11:53 +08:00
kiranmagic7 3560c3dd58 docs: update site provider count to 58 (#2078)
* Update site provider count

* test: guard public provider count

* fix: refresh social preview cache key

---------

Co-authored-by: kiranmagic7 <209323973+kiranmagic7@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 19:05:23 -07:00
Yuxin Qiao cb92167196 ci: reduce macOS Swift tests to two shards (#2032)
* ci: reduce macOS Swift tests to two shards

* ci: explain macOS shard balance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 14:44:45 +01:00
Yuxin Qiao e149704a15 ci: batch macOS test selections (#2026)
* ci: batch macOS test selections

* ci: harden batched test execution

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* ci: skip redundant SwiftPM builds after test discovery

`swift test list` already compiles the test targets, so grouped test
invocations can use `--skip-build` to avoid repeating SwiftPM build planning.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test: cover skip-build batching

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-10 08:12:58 +01:00
Peter Steinberger 4a7bb56070 fix: complete Catalan localization
Co-authored-by: Pere <pmontpeo@goil.app>
2026-07-09 13:00:08 -07:00
Peter Steinberger c923e3e9fd fix: keep release builds from dirtying projects 2026-07-07 01:26:54 +01:00
Peter Steinberger 27cff88a1c fix: harden release validation 2026-07-07 00:30:45 +01:00
Peter Steinberger e677087a1b ci: modernize build toolchains (#1905)
* ci: modernize build toolchains

* ci: keep macOS tests on proven runner
2026-07-04 19:42:41 -04:00
Peter Steinberger 8b417a066c test: prevent keychain prompts during test runs (#1897) 2026-07-04 14:03:22 -04:00
Peter Steinberger 143e0873c7 fix: repair live Sparkle update verification 2026-07-04 10:48:35 +01:00
Peter Steinberger f6732bd760 fix: validate repository size from index blobs (#1875)
Validate tracked Git index blobs instead of mutable working-tree files, reject generated release artifacts, and preserve isolated Intel test coverage with realistic cold-build time budgets.

Co-authored-by: JoeVenner <ylafrimi@gmail.com>
2026-07-04 02:38:18 -07:00
Kostarev Kirill cec3d6dc2c Add Russian localization (#1860)
* Add Russian localization

* feat: complete Russian localization

* test: account for Russian language label

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 00:26:33 -07:00
Peter Steinberger eb82e6eaa9 Merge remote-tracking branch 'origin/main' into codex/pr-1872-galician 2026-07-04 05:02:32 +01:00
Peter Steinberger 0da6a1ea37 feat: add Galician localization
Co-authored-by: Alberto Xosé Méndez Taboada <contacto@albertomendez.gal>
2026-07-04 04:12:46 +01:00
Peter Steinberger 1f204c8add chore: harden repository size guard 2026-07-04 03:52:20 +01:00
Peter Steinberger 07c0920930 Merge remote-tracking branch 'origin/main' into codex/pr-1858 2026-07-04 03:49:21 +01:00
Yuxin Qiao a27c9b094e fix: block background Claude delegated refresh (#1848)
Prevent background Claude delegated OAuth refresh when the keychain contains MCP-only state, while preserving explicit user Refresh recovery.

Add regression coverage for both keychain readers and an isolated built-app verifier that proves no background /status or browser launch.

Co-authored-by: Yuxin Qiao <Yuxin-Qiao@users.noreply.github.com>
2026-07-03 12:51:02 -07:00
Vyctor H. Brzezowski 289ae204fa Redesign codexbar.app landing page (#1784)
* Redesign codexbar.app landing page with updated hero and sections.

Refresh docs/index.html with the new dark landing layout, coordinated hero animations, features/technical sections, language picker shell, and lossless hero mockup assets for GitHub Pages.

* feat(landing): add section container and improve hero title wrapping.

Introduce a shared section-inner max-width wrapper and hero title line spans so the headline stays readable at wide breakpoints.

* feat(landing): redesign features section as three-card grid.

Replace the stacked feature list with a responsive card grid, red image placeholders, and a focused three-item layout without CLI/widgets copy.

* feat(landing): add CLI section with split terminal layout.

Introduce a terminal output mock on the left with CodexBar on CLI copy on the right, including bundled binary messaging and session privacy footnote.

* feat(landing): add widgets section with macOS gallery mock.

Recreate the macOS widget picker on the right with copy on the left, using red placeholders for small, medium, and large widget previews.

* chore(landing): add CodexBar widget preview PNG assets.

Add eleven transparent widget crops for the landing page macOS gallery mock.

* feat(landing): wire widget gallery with scroll and real previews.

Replace red placeholders with widget PNGs, group them in scrollable rows, and keep the gallery viewport height fixed.

* fix(landing): color CLI privacy footnote icon #0099ff.

Match the shield icon to CodexBar blue instead of muted gray.

* fix(landing): color CLI meter blocks #0099ff.

Replace the tan usage bar fill with CodexBar blue across the terminal mock.

* fix(landing): align feature card visuals across the grid.

Stretch each card and pin the image placeholders to a shared baseline so differing copy lengths no longer throw off the row.

* fix(landing): use filled shield-check for CLI privacy footnote.

Replace the hollow shield outline with a tinted shield and checkmark that reads better at small size.

* fix(landing): expand widget gallery to full sheet height with fade.

Let the gallery fill mac-widget-main without growing the sheet, and add a bottom scroll fade so more widgets read as discoverable.

* fix(landing): bottom-align feature card copy above visuals.

Group each card title and body so they sit on a shared baseline with consistent spacing before the image row.

* fix(landing): slightly enlarge CLI privacy footnote icon.

* fix(landing): cap widget sheet height and scroll gallery inside.

Lock mac-widget-sheet__body to a fixed viewport instead of growing with all rows, and tighten row spacing so content scrolls within the fade.

* fix(landing): tighten CLI privacy footnote icon spacing.

* fix(landing): update widget gallery labels and row order.

Use the correct titles and descriptions for all eleven widgets and order rows History, Burn Down, Usage, then Switcher.

* fix(landing): right-align widgets copy toward the gallery mock.

On desktop split layouts with copy on the left, align text to the right so it faces the widget sheet.

* fix(landing): bleed widget gallery fade to main pane edges.

Pull the scroll layer out of mac-widget-main side padding so the fade spans the full column while title and tiles keep their inset.

* fix(landing): standardize widget image-to-label spacing.

Drop aspect-ratio boxes that added uneven gaps and use a fixed margin below each preview before the title.

* fix(landing): hide widget gallery fade at scroll bottom.

Only show the bottom fade while more content is below the fold and remove it when the gallery is fully scrolled or not overflowing.

* fix(landing): soften widget preview edge fringing in CSS.

Crop PNG halos with a slight scale inside rounded clips and a dark preview background until assets can be re-exported.

* fix(landing): restore widget gallery family row order.

Revert the unintended 1–11 sequence reorder and keep the original Metric/History, Usage, Switcher, Burn Down grouping with updated labels.

* fix(landing): remove bottom padding from widget gallery pane.

* fix(landing): keep widget gallery scrollbar above scroll fade.

Inset the bottom fade from the right so it no longer covers the scrollbar track.

* fix(landing): balance widgets lead copy and avoid orphan line.

Use text-wrap balance and tighten the Home Screen line break so desktop is not left alone.

* chore(landing): add feature section preview PNG assets.

Add resets, credits, and status screenshots for the three feature cards.

* feat(landing): wire feature card visuals with preview images.

Replace red placeholders with the new feature screenshots using cover fit inside the 4:3 frames.

* fix(landing): keep features heading on one line.

Remove forced line breaks and nowrap the Know before you commit title.

* fix(landing): correct feature card image order.

Use the new resets screenshot for card one and move the misty landscape asset to the status card.

* fix(landing): update status feature image dimensions.

Match width and height attributes to the replaced landscape asset.

* Refine landing feature mockups

* Tune credit header spacing

* Update ElevenLabs CLI plan label

* Checkpoint desktop landing mockups

* Polish mobile landing layout

* Localize landing mockup copy

* Tighten localized landing responsiveness

* Balance localized hero headline

* Fix mobile provider grid

* fix(landing): tune hero mockup layout and hide dev tuner.

Apply tuned mockup, menubar, and popover positions, refresh hero assets, and keep the layout tuner in the page but hidden from visitors.

* feat(landing): refactor hero HUD and finalize mobile mockup layout.

Split the menu bar and popover into a stage-level HUD layer so mobile overlays stay centered on the clipped stage while the mockup anchors to the right, and add desktop/mobile dev tuners with tuned CSS variables across breakpoints.

* docs(landing): vendor hero HUD image assets locally.

Replace external Simple Icons and GitHub raw menubar glyphs with files under docs/images/.

* fix(landing): extend mobile hero to 768px and align tuner.

Remove legacy 640px mockup overrides, match mobile stacked layout and dev tuner to ≤768px, and keep tablet popover patch at 769–1023px.

* fix(i18n): restore {break} tokens in ar/fa/th provider titles.

* feat(landing): add hero-mockup.svg MacBook artboard asset.

* feat(landing): SVG hero, section-inner copy, and tuner audit v2.

Replace PNG/WebP mockup with hero-mockup.svg, update HUD screen insets and
aspect ratio, align hero copy to the 1380px section-inner, add tuner audit
snapshots with regime warnings, fluid mockup scaling, and widen position sliders.

* fix(landing): widen tuner ranges for panel and HUD sliders.

The desktop panel tab capped HUD top at 20% and Panel X at 360px; expand
menubar/panel/HUD limits so the new SVG artboard can be tuned without hitting
arbitrary slider walls.

* feat(landing): bake desktop hero tune and add responsive layout applicator.

Apply the 1920×979 desktop anchor values, let panel text be selectable by
passing pointer events through hero-content, and scale px HUD offsets with
viewport width while compensating for the existing fluid mockup scale factor.

* feat(landing): swap menubar GitHub icon for OpenClaw favicon.

Vendor openclaw.svg locally and reuse the existing sf-symbol white filter.

* fix(landing): preserve OpenClaw eyes in menubar icon.

The invert filter flattened the favicon to solid white; use a menubar SVG
with white body, dark pupils, and cyan highlights without that filter.

* fix(landing): restore menubar gap unit and scale compensation.

The layout applicator wrote --menubar-gap as a unitless 22, so flex gap
collapsed; apply px correctly and divide by menubar-scale so the tuned
spacing matches while transform-origin top right keeps the right edge fixed.

* feat(landing): pin mockup right edge 50px from viewport on resize.

Compute mockup-x from scaled artboard width instead of a fixed tune value,
drop the 7.75vw translate cap, and anchor mobile mockup with the same margin.

* fix(landing): stop aplicator from overriding the 1920 desktop tune.

The auto mockup-x margin math replaced the tuned -540px anchor and shifted
the whole HUD; at ≥1920 use :root values only and scale holistically below.

* refactor(landing): anchor HUD to mockup SVG top-right with panel below menu.

Replace screen-hud percentage offsets with a mockup-artboard coordinate system:
menubar anchors to the SVG top-right via hud-margin-right, panel stacks below
the menu with hud-panel-gap, and the aplicator only scales mockup position.
Bump tuner storage keys to v2 for the new var schema.

* fix(landing): correct HUD margin defaults and scale menubar to artboard.

The 2.3% margin was the inner-screen inset, not menubar position (~22%);
use container query font sizing and anchor the panel below the menubar.

* Polish landing hero layouts, mobile tuner, and feature compositions.

Checkpoint before trimming desktop hero height—covers tablet/mobile hero fixes, HUD geometry tunes, header controls, brew pill mobile styling, draggable tuner, feature card scaling, and i18n provider title breaks.

* fix(landing): trim desktop hero height and balance hero description copy.

Checkpoint before experimenting with PNG hero mockup—drops manual {break} line breaks in favor of text-balance across all locales.

* refactor(landing): remove dev tuner and drop unused hero raster assets.

Cleanup pass before PR—deletes ~1k lines of tuner UI/JS, removes duplicate hero PNG/WebP (SVG is canonical), and updates locale CI for the new language picker and provider cards.

* Remove unused openclaw.svg menubar asset.

The hero menubar uses openclaw-menubar.svg; this duplicate was never referenced.

* Compress feature images to WebP for faster home page loads.

Resize screenshots to 1620×1020 (2× retina for cards) and replace ~16MB of PNGs with ~800KB of WebP.

* fix(landing): ship extracted redesign CSS and JS with slim index.html.

The WebP commit pointed index.html at external assets but still contained the pre-redesign site.css and site.js; restore the full landing styles and behavior.

* fix(landing): restore module-level root after tuner removal.

Removing the dev tuner accidentally deleted const root, which crashed site.js before HUD entrance animations could run.

* chore(landing): swap hero mockup SVG for notchless MacBook Air art.

Same 6111×3239 artboard; only the frame asset changed.

* docs: regenerate llms.txt after landing title update.

Fixes CI lint check that compares the generated llms index against docs/index.html.

* docs: anonymize landing page examples

* docs: restore provider navigation

* Fix landing preview load polish

* docs: regenerate website index

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 12:20:57 -07:00
JoeVenner 60282430dc Guard repository size 2026-07-03 13:40:20 +01:00
kiranmagic7 18fc600f24 docs: add Details links for GroqCloud, LLM Proxy, Windsurf, and Manus (#1833)
* docs: add Details links for GroqCloud, LLM Proxy, Windsurf, and Manus

Four provider docs pages were not linked from providers.md:
- GroqCloud (added new section + Details)
- LLM Proxy (added new section + Details)
- Windsurf (added new section + Details)
- Manus (added missing Details link)

Verified all four docs/*.md files exist on upstream main.
Verified env vars, endpoints, and status URLs against source.
Docs-only change, no runtime behavior affected.

* ci: ignore site dependencies in docs link check

---------

Co-authored-by: kiranmagic7 <262980978+kiranmagic7@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 04:00:11 -07:00
Peter Steinberger 294a0746cb fix: avoid keychain prompts for local packaging 2026-07-01 08:51:02 +01:00