Skip to content

Foxl v0.2.13

Choose a tag to compare

@foxl-bot foxl-bot released this 19 Apr 01:30

Pixel Office — full redesign pass

  • New cozy startup aesthetic: warm cream walls with wainscot trim, light marble-tile floor (6x3 staggered slabs with veining), wood-framed windows with sills, wall decorations (framed picture, clock, cork pinboard), and slowly-rotating ceiling fans. Ambient golden light beams with dithered edges and drifting dust motes near windows.
  • Harmonized furniture palette: every piece now draws from the same ~18-color palette. Desks have warm oak tops with a single centered accessory (coffee mug, paper stack, or desk plant - deterministic per position). Chairs are backless 2-wide terracotta stools so a pet clearly perches on the cushion. Plants, lamps, shelves, whiteboards, and the water cooler all use coordinated wood + terracotta + sage tones.
  • 2.5D object sprites: tall items (floor lamp 1x2, floor plant 1x2, bookshelf 3x1 drawn 2 tiles tall, whiteboard 4x1 drawn 2 tiles tall) protrude upward beyond their grid footprint without colliding with surrounding furniture. No more "floating head" plants or clipped shelves at the wall edge.
  • Balanced layout: 4 workstations (left), meeting room with whiteboard + 3x3 rug + table + 2 chairs (center), lounge with rug + 2 cushions + tall lamp + tall plant (right), kitchenette with water cooler + bookshelf + pet feeder/bowl/cushion (far right). Mix of 1x1 and 1x2 items, perimeter plants and lamps anchor each zone.
  • Agent-to-pet assignment is randomized: earlier the leftmost free pet and leftmost free seat always got picked, so the same pet always worked. Now random pick means workstations rotate.
  • Clickable agent popover when a working pet is selected: compact 320px card with status dot, pet name, current task, live tool indicator with animated dots, last error, top-used tools, iteration/tool/elapsed stats, and Stop + Open Full actions. Much cleaner than the old cramped popover.
  • Real-time pet-position persistence: pet positions (plus direction and state) now save to localStorage every 3 seconds and on tab blur / window close. Returning to the Agents page keeps every pet exactly where it was. Writes are batched so there is only one localStorage set per cycle.
  • Notifications are deep-linkable: agent-completion notifications now carry the session id in their payload. Clicking "Agent Done" in the bell popover jumps straight into that agent's detail page. Works across the in-app bell, the Electron titlebar bell, and the Windows header bell.

Pixel Office - earlier in v0.2.13

  • Claude-Code-inspired rare encounter journal (18 critters across 5 tiers, seasonal/night/agent-completion gates).
  • Welcome-back summary modal with sparks/items/sightings earned while away.
  • Pets replace human agent sprites; each walks to a chair and "works" with an animated monitor.
  • Background pet simulation always runs when the Pixel Office is enabled (no separate opt-in).
  • Wall-clock catch-up simulation so pet stats and rare rolls progress accurately after long absences.
  • Server-side state backup via /api/pixel-office/state (single-row blob store, overwrites in place - no history accumulation).
  • Visitor system retired and unified under the rare-encounter journal (sightings-only).
  • Inventory now surfaces only placeable items; starter seed is a single comfy cushion.
  • Auto-forage removed; pets stay home.

Fixes

  • Feed sidebar black dot that couldn't be dismissed (legacy Activities-era code).
  • Goal-started agents now appear as separate rows in the history list (each run mints its own session id).
  • Agent popover used to show 2 running agents for 1 goal because the in-memory "default" row and the fresh session row both appeared - now deduped.
  • Sidebar label "Agent Team" simplified to "Agents" across all 10 locales.
  • i18n interpolation accepts both {var} and {{var}} placeholder styles.
  • Monitor flicker on working pet's desk now aligns to the desk's centered monitor and refreshes at a subtle 2 fps instead of strobing.
  • Wall-anchored tall items (whiteboard, shelf) previously got clipped or hidden when placed near the wall seam - render order fixed.
  • Settings showed a stray "Background Pet Simulation" toggle even though the feature is always on - removed.
  • Notifications now support action buttons. Previously the in-app bell dropdown only showed title + body - there was no way to trigger "Install", "Dismiss", etc. - so the new-version notification in particular had no actionable path. The Electron native OS notification also gains action buttons (macOS) and opens the bell popover when clicked (Windows/Linux), bringing the in-app action chips to every platform.
  • "Update ready" notification now posts to the in-app notification center with Install Now / Later buttons, not just a silent system toast. Dedupes across multiple download cycles via a fixed notification id.
  • Fix tunnel "restart desktop" and update-install restart paths leaking the spawned Node server subprocess. Previously app.exit(0) / quitAndInstall skipped the before-quit lifecycle, so the server kept running on port 13847 and the relaunched app could not bind the port - making restart worse for users who were trying to recover from a stuck state. Restart now explicitly tears down the server subprocess and tunnel client before handing off to the updater / relaunch.
  • Fix Claude Code OAuth credential detection on Windows. The previous code path tried to read tokens from Windows Credential Manager via the community Get-StoredCredential / New-StoredCredential cmdlets, which are NOT installed by default on Windows - the shell-out silently failed for every Windows user and then fell through to the file fallback. Claude Code on Windows actually stores tokens in %USERPROFILE%\.claude\.credentials.json (matches upstream openclaw / pi-ai reference behavior), so we now read/write that file directly with no PowerShell spawn and no module dependency. Token refresh writes back to the same file claude login uses.
  • Fix Feed Generator interval changes not applying. Changing "Frequency" in Settings → Feed Generator from 5 minutes to 1 hour updated only the heartbeat-runner but left the scheduler's paired Heartbeat schedule spinning its own setInterval at the old interval forever. Execution is now owned exclusively by the heartbeat-runner; the Heartbeat entry in the Schedules UI is display-only (scheduler skips attaching a timer for the auto-seeded entry). Settings ↔ Schedules UI are kept in sync both directions: interval/enabled changes from Settings mirror to the schedule row, and toggles/interval edits from the Schedules UI mirror back to HEARTBEAT.md + the runner.

Changes

  • Feed Generator is now the single Heartbeat schedule. Users can no longer create additional heartbeat-type schedules from the Schedules UI - that type is removed from the create dialog, and POST /api/schedules rejects type: "heartbeat" requests. Use Cron instead for custom periodic schedules.