xDesk
Changelog

What’s new in xDesk

Installed copies update themselves from the update button in the title bar.

v0.9.50

LATEST
  • Gifts (server gifts.js, gift invoices, Settings → Gifts, gifts.js polling), plans-pro.css redesign
  • Dashboard customize tray; Luna preview island; titlebar overlay room from env(titlebar-area-*); modeword colours; Tuned tag; +100 in bot colour; 60% default volumes

v0.9.49

  • Shared narratives research (research.js kind 'narratives', 10 min)
  • Roster 20% bigger; overview.js symRe escapes symbols; saved-key Remove as a standard button

v0.9.48

  • Settings: brokers moved to desk pages, settings-pro.css, sidebar groups and sub-items, button kinds and icons, number steppers, key backup step for new wallets

v0.9.47

  • wallets.js (up to 5, memeWallets secret, active = memeWalletKey), removal by emailed code (server ops walletremovestart / walletremove)
  • plainTalk(): the bots' JSON as plain lines in the meeting
  • Chart symbol picker with logos (chartData.logos)
  • Text size steps 0.8 / 0.9 / 1 / 1.2 (uiScaleV 5, saved choice keeps its place)

v0.9.46

  • Search economy: memecoin Skeptic X only, Vega without search on its findings, Skeptic-first default; round Skeptic builds on Luna; search: true|'x'|'web'
  • Shared research: x-xdesk-research header (researchFor), server research.js cache
  • Bot popup Tuned box (bots:memory returns tuned)
  • Settings info tips (infoTip in dom.js), brief notes

v0.9.45

  • cryptoBroker setting (auto/alpaca/bybit), cryptoVenue() shared by broker(), deskBroker and the background refresh (deskBroker read a venue saved settings never had)
  • Round start: one retry after 3 s when the account load times out or hits a network error
  • xai.js: errors through the xDesk server never name the provider; server-side retry of a special model on grok-4.3, plain upstream messages

v0.9.44

  • Solana RPC allowance (1,000/day and 30/min per account, 30,000/day total, meta counters); meme.js falls back per request to the public RPC (x-xdesk-budget day/minute); wallet check shows the connection and why

v0.9.43

  • Solana RPC proxy (Worker POST /v1/rpc/solana, HELIUS_RPC_URL; paid plans, method allowlist, rate limit); meme.js connection() custom > xDesk > public, polled confirmations
  • learning.js: forex desk in confidence and milestones
  • xDesk Cloud: cloud/engine (Phase 1) and desktop integration (Phase 2: CloudClient, Settings → Cloud, routing, ☁️ markers); hidden as coming soon until a cloud address is set

v0.9.42

  • capital.js (session with X-CAP-API-KEY/CST/X-SECURITY-TOKEN, account switch, markets/epics, prices, positions, confirms, netting + Use netting, reduce-only); Settings Capital.com box; forexBroker capital

v0.9.41

  • tradelocker.js (REST: JWT login/refresh, all-accounts, config columns, instruments/routes, quotes, history, orders with strategyId and absolute SL/TP, positions, DELETE close, ordersHistory fills, rate-limit retry); Settings TradeLocker box; forexBroker tradelocker|oanda
  • MetaTrader 5 removed (mt5.js, xdesk_mt5.py, mt5-python.js, bundled Python, Exness box/guide); mt5 users → oanda
  • meme: createWallet, withdraw, exportKey, QR (Settings → Memecoins Market wallet box)
  • dashboard: shared 90-day per-mode trade book for winloss/pnl/calendar/hero; full redraw on mode switch
  • Trades: pcard__close buttons everywhere, open orders as cards, action columns; status bar clock, footMeta wording

v0.9.40

  • Settings: exnessGuide (6 steps + fixes) in the MetaTrader 5 box

v0.9.39

  • xdesk_mt5.py find_terminals + auto-start (initialize with path); Settings live mt5Detect status, saved-but-unreachable shown
  • fxDeskClock (assets + own hours), Demo stocks real NYSE hours, pill countdown + local time, rounds gated on the desk clock
  • strategies view.marketClosed; Trades/stratpanel labels
  • News guard weekend event (forexWeekend vega/close/off, forexWeekendBefore), no new rounds near the weekly close
  • cTrader parked (hidden unless XDESK_CTRADER_ID); clearer server message

v0.9.38

  • strategies: grid dir long/short/neutral (sell book sqty/scost, openShort, cover, cellSide), parallel create, wayOf/on
  • FX round: Luna always (+ calendar upcoming 24 h), Clark plans (forexAsk → planner, grid dir), debate on every pick (Skeptic speaks), Vega forexDecide (GO/NO + confidence), parallel proposals on busy assets (manual), fxCanStart on Place and strat:create
  • forex.js RealFeed (Yahoo spark/chart) for Demo prices, candles and hours; chart TradingView first
  • fxSizingAdvice (fx:sizing); ctrader.js (Open API JSON/WS, OAuth, accounts) + settings box + server route /v1/ctrader/app (not deployed)
  • Run round busy message; cards qtyText; USD labels; strategies P&L refresh

v0.9.37

  • mt5Detect (mt5:detect): the account the MT5 terminal is on; Settings → Connections exnessConnect (Find / Use for Paper or Market, saves login + server); forexBroker default mt5 on Windows (oanda when OANDA keys exist and no choice saved, always on macOS); account fields behind "Enter the account by hand"
  • Trades: running strategies section (Pause/Resume, Close = stop with sell); position Close routes to its owning strategy; closed trades paged by 20

v0.9.36

  • mt5.js + mt5/xdesk_mt5.py: MetaTrader 5 bridge (official MetaTrader5 package, JSON lines over stdio); bundled embeddable Python 3.12 + MetaTrader5 + numpy (scripts/mt5-python.js, extraResources mt5py); forexBroker oanda|mt5; demo/real account check per mode; symbol resolution (suffixes, USOIL/UKOIL); lots from contract size/step; hedging positions closed FIFO, reduce-only; magic number; SL/TP on orders; lastExit from deals
  • strategies: broker-held SL (Grid/DCA safety stop, News TP/SL), reduce-only News close with broker-exit fallback, filled qty booked; news hold (held), flatten(); cycle codes backfilled for older strategies, codeAt() for older closed trades
  • newsguard.js: ForexFactory weekly calendar (hourly), high-impact matching per asset, before/after/calm phases, Vega plan (AI or rule), ask-if-present with timeout, Luna result, news round (runForexCycle event)
  • Trades tables: min widths + priority columns (ResizeObserver), centred page; .field grid fix; uiScale v4 (1/1.15/1.35/1.55)
  • switchMode uses settings plan liveMarkets (FX with crypto)

v0.9.35

  • MockBroker and FxDemo persisted (demo-account.json, demo-fx.json; saved on change and before-quit); Demo seen-state kept; FX seen-state separate
  • logExit: no crypto fee on FX & Commodities, partial P&L in USD (usdRate); report/memory: FX not crypto
  • Strategies: reduce-only sales (FxDemo, OANDA REDUCE_ONLY), book follows broker positions, deselected assets open no new steps
  • liveReady(): Market locked until a desk's live broker is linked (title bar, switchMode, setMode)
  • deskOpen(): settings:save refuses turning off a desk with open trades; deskOffGate (Luna + Turn on)
  • Closed trades: desk tag, BUY/SELL pill, cycle code; memory credits every bot per desk, one memory per cycle

v0.9.34

  • runForexCycle sets nextRunAt (rounds ran every tick); autoDue skips when every picked asset trades; strategies' allowed() ends a DCA on a deselected asset; fxPane saves choices at once
  • Strategy codes (nextCode), cycleEnd (targetUsd / maxLossUsd from forexTargetPct / forexRiskPct), codeOf() on exit logs and closed trades
  • Bull (Clark) and Bear debate in Forex rounds (News, Aggressive) via runDebate/mockDebate
  • deskOn per desk (scheduler skip, title bar dim, Settings → General switches)
  • sideWord/isPerp: BUY/SELL wording, LONG/SHORT for Bybit perpetuals

v0.9.33

  • Rounds run in a desk context (AsyncLocalStorage { desk, mode }): settings(), per-desk nextRunAt/paused/market/clock/portfolio state; scheduler runs every unpaused, set-up desk on its own cycle (screen desk first, one round at a time); manual runs queue behind a background round; Market pauses every desk; desk switch allowed mid-round
  • DESK_CAPS per plan (crypto/stocks/meme/forex) in every mode; plan.caps; Plans page lines
  • workingExits(): stops, targets, trails, grid next buy/sell, DCA next buy/TP/stop, News TP/SL in Open orders
  • MockBroker uses Bybit public tickers, klines and scan for crypto in Demo (simulated fallback)
  • Chart: TradingView widget switch on FX & Commodities (frame-src s.tradingview.com); open positions panel on every desk with a scrolling list
  • assetLot/lotsText/assetLogo helpers; lots and logos on position cards, strategy cards, Trades; geckoLink opens the chart for FX & Commodities

v0.9.32

  • forex.js ASSETS/META (EUR/USD, XAU/USD, USD/JPY, GBP/USD, WTI/USD, XAG/USD, AUD/USD, USD/CAD, BRENT/USD, USD/CHF): decimals, lot units, demo volatility, OANDA instruments (WTICO_USD, BCO_USD), per-asset hours (metals and oil Sunday 18:00, daily 17:00 to 18:00 break); clock(sym) in the engine
  • forexHours/forexStart/forexEnd/forexTz and fxHoursBlock (runBlock, autoWait, tick, round); closed assets skipped in a round
  • Plan cap on forexMaxOpen (1/2/5/10, plan.fxMax); fxLimit() from Run round and the waiting pill: raise or Plans
  • Desk shown as FX & Commodities; window.json (bounds, maximized) restored on a connected display; small screens open maximized; first-run uiScale from fitZoom (ZOOMS 1 to 1.7); store.hasSaved; lunaVolume default 0.6
  • Strategy cards as position cards with a ⋯ menu; chart symbol bar; assetDecimals helper

v0.9.31

  • Forex settings: forexSetupDone, forexMode (auto|manual), forexPairs, forexStrategies (grid|dca|news), forexStrategy (auto = Vega picks), forexProfile (+auto), forexRiskPct/MaxLots/Lot/TpPct/SlPct; Forex auto forces autoRun and autoExecute (Market: with liveAutoExecute)
  • forex.js: FxDemo margin 30:1 and shorts; OANDA positionFill DEFAULT (shorts), close by side; PRESETS, LOT, settingsCfg(grid|dca|news)
  • strategies.js: cellUnits/baseUnits, per-lot grid stop (cellSlPct), News kind (long/short, TP/SL), DCA new cycle reads settings (cfgFor), applyNow, Close = stop and sell
  • runForexCycle: your pairs only, Luna forexNews (search) when News allowed, forexAsk with allowed strategies and what it based the pick on; manual picks wait for Place (placeManual forex branch); runBlock/autoWait/tick respect forexMaxOpen; runBlock no longer calls Forex the US stock market
  • Settings → Forex wizard (fxPane); gold-bars tab icon; Forex first in title bar, House rules, Settings, Trades, P&L, onboarding; chart header with logo/type/name and Close; Trades reloads on a desk switch

v0.9.30

  • forex.js: PAIRS, isFx, fxClock (Sun 17:00 to Fri 17:00 ET), quoteUsd, FxDemo (own $10,000 account, mean-reverting walk), Oanda (v20 REST: summary, pricing, openPositions, MARKET orders, candles), scan(), profileCfg(soft/balanced/aggressive)
  • assetClass 'forex' (s.forex, venue 'forex'), fxBroker(mode), deskReady/setAssetClass/otherDesks/chartData/snapshot; secrets oandaKey/oandaAccount/oandaLiveKey/oandaLiveAccount; liveMarkets gets 'forex' with 'crypto'
  • runForexCycle + forexAsk (one Vega turn, JSON pick; demo canned) → strats().create(by 'vega', profile); forexStrategy/forexProfile/forexMaxOpen settings; stratSuggest IPC
  • strategies.js: Forex only; whole units; book in quote currency, results in USD (q); clocks per mode|desk
  • chartview.js rewritten: chart types, indicators (SMA/EMA/BB/VWAP/RSI pane), scale modes, watermark, countdown, screenshot, fullscreen, chart:tick every second (only the last bar is updated), merge via setData on refresh; mock/FxDemo lastPrice feeds unheld symbols
  • stratpanel.js: Forex only, behaviour switch fills the forms; Running list refreshes on 'strategies' events
  • Title bar gold bars; Settings → Forex tab and OANDA connections; Trades/Dashboard/House rules/onboarding/tour know Forex

v0.9.29

  • Chart view (chartview.js, vendor/lightweight-charts 5.2.1): chart:data IPC (candles, levels from xdesk/exits/bracket legs, log markers); Alpaca stock bars; GeckoTerminal OHLCV for memecoins (pool via DexScreener); mock candles aligned to intervals
  • strategies.js: Grid (crossing-triggered market orders, cells) and DCA (safety orders, TP, SL, timer, repeat); deskBroker(mode, desk); managedInCode skips them in take-profit, time stops, same-side caps and round candidates; lastPrice/marketOrder on Alpaca, Bybit, mock
  • stratpanel.js: forms with chart preview, Running list; GRID/DCA pill on position cards; Chart view takes the right panel's room
  • memeTakeProfitUsd reads the live setting (no longer frozen at the buy); memeLockUsd / cryptoLockUsd profit lock; peak open profit tracked and logged (peak); report trades carry peak
  • gaveBack(): lesson in the log, memory lessons for risk/lead, 'suggest' event offering a profit lock; bot instructions that are exit rules get a Make it a rule button
  • Dashboard P&L per desk chips; close button icon alignment; text sizes 1.2/1.35/1.5/1.7 (uiScaleV 3) and applyZoom clamps instead of falling back to 100%; Demo starts at $10,000

v0.9.28

  • cryptoTakeProfitUsd / memeTakeProfitUsd (per style; meme frozen at the buy); takeDollarProfits
  • keepOtherDesks: meme watchers for every mode with coins; crypto exits, ladder and take-profit when another desk is on screen
  • otherDesks across demo/paper/live with mode labels; Go there switches mode and desk
  • Mind no longer raises memeMinScore silently; per-coin skip reasons
  • memeintel/meme: paced DexScreener and RugCheck lanes, 429 backoff
  • Manual rounds bypass the scan cooldown cache
  • rescheduleFor: round and scan timers follow cadence changes; delayAfterSwitch uses the new cadence
  • Bot popup intros; Bots pane note

v0.9.27

  • Mac build leaves out bufferutil and utf-8-validate (Intel-only prebuilds in the arm64 app); check-mac-arch.js in the release workflow
  • demoTokens unset = demoTokenCap (new installs start at the plan's amount)
  • Server: up to 2 devices signed in; a third signs out the least recently used; idle device slots freed (deployed)
  • Mac guide: real first-open steps, Rosetta note for 0.9.26, notification prompt

v0.9.26

  • macOS: dmg + zip per chip via the release workflow (unsigned), publish-mac.js, /download/mac, updater opens the dmg on darwin, /mac guide, About link
  • desktopisland.js + island.html: floating island window mirrored from toasts and questions while xDesk isn't focused (desktopIsland setting)
  • nudgePortfolio after trade log events; 5 s refresh while orders wait; Trades reloads on the event

v0.9.25

  • manageHedge (meeting.js): BTC short at cryptoHedgeRatio% of net non-BTC longs over cryptoHedgeMinPct% of equity in trending-down/volatile regimes; resize >20% off, close on <60% threshold or up/choppy; stop cryptoHedgeStopPct; hedge.json per mode; excluded from time stops, same-bet count, bot BTC trades; card badge, House rules row; Demo perps add to open positions
  • intraday.js: readPair (1h trend, VWAP, 4h/24h range, hourly range), readRegime (4h EMA trend, 6h volatility ratio, 24h efficiency), regimeBlock (Scalp not volatile, Quick with the trend); candles() on Bybit, Alpaca, Demo
  • Crypto "Hedge" style shown as Scalp
  • Memecoin Account card in SOL (equity_sol, points record sol); red Flush button

v0.9.24

  • demoTokenCap (Max 50,000, else 10,000) for reset, reload, Demo reset and the Dashboard card
  • bots:extend refused in Demo; refreshTokens(0) after a purchase; popup shows why in Demo
  • Space radio: the app's lock icon only; re-render on xdesk:sub so locks follow the plan
  • Token chip: no "null" (replaceChildren slot filtered)

v0.9.23

  • memory.js: per-bot memories from closedTrades (all modes), plan sizes (Free 100; Basic 500/Vega 1,000; Pro 2,000/5,000; Max 4,000/25,000) + extra, least-useful forgotten, lessons and prompt note, popup summary
  • botpop.js: roster click → popup; flush (botflushstart/botflush) and extend (memextend, spendTokens) on the server
  • flushEmail names the bot

v0.9.22

  • Space radio (cosmic.js): generative stations by plan, 8D (radius 0.8), Radio bot sprite and 10 dances, dancer picker, dips under voices and Sound cues, 90 s lookahead when hidden, per-play session bus, resumes after restart; orb and volume bar in app tokens
  • Luna echo via Web Audio (lunaEcho, lunaEchoLevel 0.5); Vega's voice ducks the music
  • House rules: in-place edits (numbers, switches; .env-locked read-only), Market row with title bar icons, active style values; crypto single-value saves go to the active style
  • Token runway on the chip + pace offer; Luna news reuse (coveredNews, 30 min)
  • Queued manual run ahead of the budget stop
  • uiScale steps 1/1.1/1.2/1.35, default 1.1, old values migrated (uiScaleV 2)
  • Title bar: token bolt and desk icons centred

v0.9.21

  • manualGapMin 0 on every plan; upsell removed from Run round; plan cards say "automatic"
  • Free limits: meme true, memeMax 3 (client override for older passes; server subs.js)
  • Run round during an automatic memecoin scan is queued (was dropped); desk:run returns the queued answer; snapshot.scanning

v0.9.20

  • Crypto: same-bet cap (cryptoMaxSameSide), ATR stop floor (cryptoAtrStopX), funding-short notes, Bybit leverage 1-3x on Max with a close-stop rule; ATR in scans
  • Crypto Morning Brief edition (scoutCrypto, funding/mover flags, 24 h window, weekends)
  • Memecoin break-even (memeBreakEvenPct, per style)
  • Dashboard P&L calendar; new default layout; ticker restyle without the gecko button
  • Desk positions as cards; Trades: other desks, decisions under closed, working orders only when waiting
  • One-bot loader on boot and on mode/market switches; plain bot without a box
  • Settings: style tabs switch directly, bundled fonts, long units beside labels, new crypto fields
  • Manual run gaps by plan, upgrade offer at limits
  • Vega speaking animation; voice stops when the user moves on
  • Vega's Mind cosmic tier names; badge-first header
  • Terms of Service (/terms) with versioned acceptance (server: terms.js)
  • Release notes carry the last 8 versions; the update popup shows those newer than installed
  • House rules: desk emojis for real money, 24/7 on crypto and memes
  • Fix: Share settings inputs cancelled every key; Profile redraws kept the share box

v0.9.19

  • Onboarding highlights: after "Create my account", eight slides show what xDesk does best before the account details: the six-bot desk, Vega's Mind, Vega speaking up, Luna's Morning Brief, memecoins with guard rails (Quick and Hedge), crypto with smarter exits, practising first (Demo, Paper, then Market) and Telegram, sharing and invites. Luna reads each slide; Back, Next, dots and Skip; the last one goes on to About you.
  • Vega speaks up right after Save: values that just turned risky (a memecoin stop over 30%, buys over 0.5 SOL, score under 50, copycats or the rug exit off, no buy-back ban, chasing off or over 30%, pools under 5% of mcap, a daily memecoin loss over 2 SOL; crypto risk over 2% a trade, stops over 10%, no or a 10%+ daily cap, the BTC, depth or funding check off, positions over 30%) make Vega ask at once in the island, say it in his voice and walk to them with a safer value (Vega.afterSave, the style in use). Only a value that just changed to the risky side counts, so a choice kept on purpose is raised once. Settings called window.Vega, which top-level const modules don't set: fixed.
  • Vega's own sound (Sound cue vega): a low, slow three-note rise with a soft bell, used for all his questions; askIsland takes a sound.
  • Dead-coin exit (memecoins, per style: 5 min and 2%, Hedge 4 min and 1.5%): a coin whose price stayed inside the band from low to high for the whole window is sold, up, flat or down, even at a small profit (MemeBroker.isDead, a rolling price history on each coin, frozen at the buy).
  • Bot avatars always in their colour: sprites got their colour from a style attribute or an element around them, and the page's security policy (style-src 'self') silently drops inline style attributes written into HTML, so wherever no element around set the colour (Vega's question in the island, his note in Settings, the start-up loader's bots) a bot drew black. Each sprite now takes its colour from swarm.css by its data-bot, and the loader's bots by theirs. The island is black in both themes, so it uses the bots' dark-theme colours (Vega white) in the light theme too.
  • Settings always opens at the top, and each tab starts at its top; redrawing the same tab (a preset, Vega's guide) keeps the place.

v0.9.18

  • Settings in the terminal style too: "■ SETTINGS" title, mono capital tabs with a marker bar, "▸ SECTION ───" headings, near-black rows with thin strong borders and tight corners, dashed mono note boxes, mono inputs, outlined mono buttons and option pills, the dot grid behind the pane; the style switches, presets, Vega's notes, Vega's Mind cards and the share card follow.

v0.9.17

  • One look for every screen (styles/terminal.css, loaded last): Dashboard, Desk, Meeting tabs, Trades, Log and Report take the Swarm and Morning Brief's terminal style: titles in mono capitals with wide tracking and a small colour square per screen ("■ TRADES"), mono capital labels and table headers (the account panel too), near-black panels with thin strong borders and tighter corners, outlined mono buttons and option pills, a faint dot grid behind the screens.
  • Start-up loader stays at least 1.2 s, so a fast start shows it instead of a flicker (it still gives way at once to the sign-in screen).

v0.9.16

  • Settings, refreshed: fields are soft rounded cards that light up on hover and focus, sections have accent headings with a rule, notes are info callouts, the active tab has an accent bar, switches and option pills are larger with the accent colour.
  • Share settings redesigned as a card: header, "What to share" as toggle pills, Export and Import as tiles, "Send to a friend" (ID, note, Send, Enter sends), a one-line privacy note. Invite friends now sits above it on Profile.
  • Time-stop sales count as trades: the trade history only counted "target hit", "stop hit" and "closed" exits, so every memecoin "nothing happening" and time-limit sale ("time stop") was missing from Vega's Mind, the report card and today's result (the daily loss caps). Now counted.
  • Full memecoin sales are no longer "partial": a full sale can leave a speck of coins from rounding (0.000001), which flagged it partial, so the history waited for a final sale that never came. A sale is partial only while the coin is still held; old log lines showing "0 still open" (or a speck) count as final. On the owner's data the Mind went from 0 to 15 memecoin trades since its flush (88 in all), which is why Vega never had anything to say.
  • Preview Vega speaking up (Settings → Vega's Mind): plays the island question, his voice and the walk through Settings → Memecoins with example suggestions built from the settings now; nothing changes without Apply and Save.
  • Crypto daily loss cap (cryptoDailyLossPct, per style: 3%, Hedge 2%): once today's closed crypto trades (New York day) lost that share of equity, no new crypto trades until tomorrow; automatic rounds wait, Run says why (not queued), the round chip shows "Daily loss cap reached", and entries are rejected. Open trades keep their stops.
  • Funding rates used (cryptoMaxFundingPct, 0.05% per 8 h): on Bybit a long is refused when funding is above it (longs crowded, paying shorts) and a short below minus it; Mars is told to read the funding column too.
  • Follow the market (cryptoBtcFilterPct, 2%): when BTC is down that much today (from the round's scan), no new longs on other coins; up that much, no new shorts.
  • Vega's coach for crypto: crypto trades carry their style (style on the approval, t.style in trades); Vega's Mind keeps each crypto style's record (cryptoStyles) and the coach suggests crypto settings (tighter stops when wide stops lose, a stricter Skeptic when WAITs lose, a bigger partial when time stops lose, half the risk when crypto loses on average, and for Hedge under 60% of 15+ trades: follow the market at 1% and a 1× reward). Suggestions go to the crypto style in use; Vega's guide opens the Crypto tab for them.
  • Fees in crypto results: each crypto exit takes its estimated fees off the result where the exchange doesn't (Alpaca spot about 0.15% in / 0.25% out, Bybit 0.02% / 0.055%; Bybit's own closed P&L is already net) and logs them; the report card gets a Crypto card: trades, win rate, result per trade after fees, average win and loss, fees, and each style's win rate.
  • Crypto presets (Settings → Crypto): Careful, Balanced and Bold, applied to the style being edited.
  • Order-book check (cryptoMinDepthX 10×, cryptoMaxSpreadPct 0.2%): before a crypto entry the live order book (Bybit, Alpaca, Demo) must hold at least 10× the trade within 1% of the price on each side, with a tight spread; else the trade is refused with the numbers.
  • Crypto exit ladder (ladder.js, Settings → Crypto → Exit ladder, per style): once a trade is up cryptoBeR × its risk the stop moves to the entry (+0.1% for fees); at the plan's target cryptoPartialPct is sold and the rest trails cryptoTrailPct behind its best price (never giving back more than half the move). Defaults: Standard 1×, 50%, 3%; Quick 0.8×, 50%, 2%; Hedge 0.6×, 70%, 0.8%. Frozen at the entry. While the ladder runs the target, the exchange's own target is lifted so it can't close everything at once; the stop always stays on the exchange (Bybit trading-stop, reduce-only sales), at Alpaca (CryptoExits' stop order, cancelled and renewed at the new level, a market sale for the partial) or in Demo. State in crypto-ladder.json. Longs and shorts.
  • Memecoins, clearer wording: "Nothing happening: sell a flat coin after" explains that only flat or losing coins are sold at that point, with an example; coins already up carry on to their targets or the time limit.
  • Crypto styles: Standard, Quick and Hedge (Settings → Crypto → Style), each with its own rules and size (CRYPTO_STYLE_KEYS: risk per trade, max position, max open, cadence, Skeptic style, Bear debate, close-after hours, minimum reward-to-risk cryptoMinRR, maximum stop cryptoMaxStopPct). Standard keeps the desk's values; Quick and Hedge keep theirs in cryptoStyles (defaults: Quick 1.5×, 4%, 4 h; Hedge 1.2×, 1.5%, 2 h, 0.4% risk, 3 open, rounds every 15 min, no Bear debate). getSettings puts the style in use on top for the Crypto desk; the window edits each style on its own (cryptoBase/cryptoActive). The code checks use the style's limits (tradeLimits with settings), Quick and Hedge close trades after their hours, and in Hedge the Scanner, Clark, Mars and Vega are told to go for small, high-probability moves on liquid pairs (6 wins in 10). Stocks keep Standard and Quick.
  • Start-up loader: until the first real figures and the plan arrive, a loader covers the window: the desk's bots bobbing in the middle, the app blurred behind. It goes as soon as everything is in, when the sign-in screen opens, or after 12 s.
  • Short trade prices in the island: fills read "Filled $DONKEY · 833.8K @ 0.0₄585", exits "LOSS · Stop hit $DONKEY · −96.1% · −$47.03" (fmt.shortPrice); the full detail stays in the log.

v0.9.15

  • Automatic rounds never stall: each 5-second tick runs alone and never waits long: the market clock and the account get 10 s each (Alpaca calls now give up after 20 s; a dead connection after the PC slept used to hang them, and with them every later tick, so timed and queued rounds stopped), a stuck account fetch is dropped after a minute, and rounds and memecoin scans run on their own instead of holding the tick. A round that runs 15 minutes without finishing is stopped so the next one runs. Waking from sleep re-checks the clock and the account at once (powerMonitor resume). Development builds can shorten the scheduler's minute (XDESK_TEST_MINUTE_MS) to test the schedule.
  • Memecoins, full desk: with every slot in use, the automatic scan doesn't run (it couldn't buy, and its requests competed with the price checks the open coins need: the free swap-price service allows about one request a second); the next scan comes once a coin sells. When a coin can't be priced (that service busy), its time-based exits (nothing happening, max hold) still apply at the last price.
  • The round chip says why nothing starts: instead of a silent 0:00 it shows the reason (autoWait): all memecoin slots in use ("3/3 open · waiting for a sell", with a tooltip), out of tokens, out of practice tokens, the daily budget or the daily memecoin loss cap reached, or signed out; it's tinted amber and updates the moment the reason changes.
  • Plans renamed: Bronze is now Basic, Silver Pro, Gold Max (Free stays Free) everywhere people see them: plan cards, the title-bar badge, plan notices, Settings, Vega's Mind, onboarding and the server's plan list (receipts and emails). The internal ids (bronze, silver, gold) don't change, so passes, payments and promo codes keep working.

v0.9.14

  • Memecoin styles: Quick and Hedge (Settings → Memecoins → Style). Each keeps its own values for the strategy keys (MEME_STYLE_KEYS: size, max open, daily loss, stop, both targets, trail, max hold, stale exit, score, age, chase, spike, pool depth and liquidity, rug exit, scanner focus): Quick at the top level, Hedge in memeHedge. getSettings puts the style in use on top (the desk and the bots read it); the window edits each style's own values (memeQuick/memeActive), and a single change while on Hedge goes to Hedge. Gates, wallet and scanner pace are shared. Each open coin keeps the ladder it was bought with.
  • Hedge, tuned for small quick wins (HEDGE_DEFAULTS, "Use xDesk's tuned Hedge values"): 0.25 SOL a buy (fixed swap fees stay near 1%), score 70+, 20+ min old, $30K+ pool at 20%+ of mcap, no 5-min spike over 20%, no chasing over 5%, all pools (not only new pairs), 80% sold at +10% and the rest at +18%, a 7% stop that moves to the entry after the first target, a 5% trail, sold if not up 3% by 8 min, out by 20 min, rug exit at a 15% liquidity drop. The bots are told the style's goal (approve only coins likely to move +10% within minutes without first falling 7%).
  • Hedge is held to 6 wins in 10: trades carry their style; Vega's Mind keeps each style's record (memeStyles), and when Hedge wins under 60% of 15+ trades the coach suggests a higher minimum score and age. The Hedge preset is gone (it is the Hedge style now); Careful, Balanced and Degen remain for Quick. The title pill and house rules show the style.
  • The losing-streak pause is removed (memeLossStreak, memeStreakPauseMin): the desk never stops new buys for a set time. The daily loss cap and the ban on coins that lost stay.

v0.9.13

  • Phone with a country picker (onboarding and profile completion): pick the country (its ISO code and dial code shown, e.g. AE +971; 199 countries, the full list on click), then type the number. A leading 0 is dropped; it's stored as +CC number. The country is guessed from the system language and time zone (UAE if unknown); +1 reads as the US, +7 as Russia (countries.js).
  • Sign-out removes the account from the PC, after saving it: everything goes to the account first (cloud.saveAll: settings and keys, trade log, equity and wallets, Vega's Mind); if that fails (offline) the window asks before signing out anyway. Then the PC keeps only the device id, window options and the voice model: trade log, rounds, briefs, equity, wallets, caches, settings, every key (the memecoin wallet's too) and the window's stored notes are removed, and the app starts again at the sign-in screen. Refused while Market memecoins are open or a round runs. The wipe is finished again at the next start (wipe.json), before the desk loads, so nothing written in the last moments survives.
  • Another account on a used PC: owner.json names whose data the PC holds; when a different account signs in (the first was signed out from elsewhere), its data is removed first and the app restarts signed in to the new account.
  • Always from the cloud on a fresh PC: with nothing synced yet (new PC, or after a sign-out), the account's settings and files win; logs are merged line by line, so the first seconds' entries are kept. While nobody is signed in the desk fetches and writes no account figures.
  • The tour, once watched, can always be skipped: tourDone follows the account, so the first-run tour is only mandatory for accounts that never saw it.
  • No wrong figures on open or after a switch: every portfolio update carries its account (mode and market); a fetch that finishes after a switch is dropped in the main process and ignored by the window. Until the first real figures (and the plan) arrive, the equity, account panel, plan badge, house rules and dashboard hero show shimmering placeholders (Preload in dom.js, body.is-preloading), giving up after 12 s so a slow load never hides the app.
  • Memecoins: the account panel shows SOL's price now and the wallet's SOL first.
  • Low tokens: the warning offers Top up or Dismiss; Demo practice tokens under 1,500 offer Reload (to 10,000, free) or Dismiss, once a day.
  • GeckoTerminal link is an outlined little button with a hover state.
  • Title bar: updates, then the sound bell at the far right.
  • Meeting bar no longer overlaps: it wraps when narrow, buttons don't break onto two lines, and the round count hides when there's no room.
  • Tour follows the new layout (title bar left to right, then the views and round controls under it), mentions presets, sharing, practice tokens and centre notifications, and the Mind slide covers mistakes and Vega speaking up; the memecoin story shows the new ladder and copycat check.

v0.9.12

  • Memecoins, no chasing: right before a buy, the fresh Jupiter quote is turned into a price per coin and compared with the scan price the bots judged; more than memeMaxChasePct (15%) up is "late", more than that down is "not the coin they judged", and either skips the buy.
  • No buying back a stop-out: a coin whose last exit was a stop is not reviewed or bought for memeStopBanHours (24 h). It is filtered before the AI reviews, so no tokens go on it.
  • Losing-streak pause: after memeLossStreak (3) losing trades in a row (partial exits of one buy add up to one trade, MemeBroker.closedTrades), no new buys for memeStreakPauseMin (30 min); the round says so and the log notes it once.
  • Honest Paper and Demo fills: the fill is Jupiter's quote taken again 1.5 s later (a real swap's landing time), less 0.5% slippage, plus the base and priority fees on every swap. Each sale's reason ends with its fees and slippage in SOL (exit.feeSol, including its share of the buy's cost). At 0.1 SOL a round trip costs about 2.5–3%.
  • House rules said "This is paper trading only" in every mode: removed; each bot now gets the mode in one line (Demo, Paper, or Market with real money). "One line per stock" is now "per pick".
  • Settings → Memecoins → Desk rules for the three new rules (0 turns each off).
  • Early exit on a rug or sell-off: every 20 s the watcher reads the coin's deepest pool on DexScreener (MemeBroker.flow). Liquidity memeRugLiqDropPct (30%) under its high since the buy, or 15+ sells at 2:1 against buys on two reads in a row while under the entry, sells everything at once instead of waiting for the stop (memeRugExit).
  • Second target: at memeTp2Pct (+100%) another memeTp2SellPct (25%) of the first buy is sold and the stop on the rest moves up to the first target; the trail keeps the remainder (moonbag). 0 = off.
  • Nothing happening: a coin that hasn't hit its first target and isn't up memeStaleGainPct (5%) after memeStaleMin (25 min) is sold as a time exit. 0 = off.
  • Skeptic and Vega review at the same time (memeParallelReview, on): about a third faster from scan to buy. Vega's call is aborted the moment the Skeptic votes SKIP (or WAIT on Aggressive), and its turn closes with a note. memeCombine applies the Skeptic style: SKIP always vetoes; WAIT vetoes on Aggressive, and on Balanced when risk isn't LOW and it named red flags.
  • The bots and the market line describe the whole exit ladder (memeLadder).
  • The −96% $DONKEY loss (Demo): bought 15:16:31 UTC a 21-minute-old *copycat* ($DONKEY-HbgL, $63K mcap, $19K pool) of a bigger $DONKEY, right after a +37% 5-min spike and already off its high; at 15:17 one dump drained the pool from $6.0e-5 to $2.3e-6 in a single minute candle (pool now ~$2K). No stop can fill inside one trade; the watcher sold at what was left. Demo's AI reviews are canned, so only code gates protect it. Fixes below.
  • Copycat gate (memeSkipCopycats, on): a coin is skipped when a bigger coin with the same ticker is in the same scan. Pool depth gate (memeMinLiqPct, 10% of mcap) and an optional spike gate (memeMaxRun5mPct, off).
  • Never again: the buy-back ban now covers any losing trade (not only stops) and every coin with the same ticker, for memeStopBanHours (default 720 h = 30 days, up to a year).
  • One trade per buy: report.closedTrades adds partial exits into the trade they belong to (a first target and the final exit were two trades, which flattered the win rate). Trades carry meme (age, curve, pool, mcap, 5-min run, copycat, score, logged with the approval), feeSol and scanAt.
  • Vega's Mind, memecoins: lessons by copycat, age at entry, narrative, launch curve, thin pool and 5-min spike; mistakes (memecoins −50% or worse, others −8%) with what the coin looked like, read by the bots as MISTAKES TO AVOID; the coach (learning.coach) turns losing lessons into suggested settings (minimum score, age, pool depth, spike, stale exit, copycats, size after big losses, a tighter stop when memecoins lose on average), shown in the Mind tab with Apply (sets the Settings draft; Save keeps it).
  • A Demo reset keeps the Mind: Demo trade-log lines are archived (mode: demo-archived) instead of deleted, and still train it.
  • Presets at the top of Settings → Memecoins: Careful, Balanced (defaults), Hedge (quick small profits: +12% sells 70%, 10% stop, 8% trail, out in 10–30 min) and Degen.
  • Memecoin report card in Report: trades and win rate, result per trade, average win and loss, fees and slippage, median seconds from scan to approval, trades that lost half or more.
  • Tabs in the order Dashboard, Swarm, Desk, Meeting, Trades, Brief, Log, Report.
  • Round controls under the title bar: the next-round chip (⏱ and the countdown), Pause and Run round moved from the title bar to the right end of the row with the view tabs, shown on every screen.
  • Exact centre: the title bar's session pill sits in the exact middle of the window (absolute, unzoomed box) and every island opens in the exact middle too, over the pill, which fades while one is out (body.island-on). Waiting islands (balls) sit to the right of the full one without moving it. On a narrow window the pill moves between the sides (.titlebar.is-tight) before anything folds into the ☰ menu, and the tokens chip now folds last.
  • No data sources on show: the status bar, the meeting feed, logs, risk checklists and Settings no longer name GeckoTerminal, DexScreener, RugCheck, GMGN or Jupiter (the swap router; the bot keeps its name). The bots are told never to name sites or data providers, and memecoin turns no longer show citation links.
  • Vega intervenes (vega.js): every 10 minutes, 20 s after each round and 90 s after start, when Vega's Mind has suggestions (the coach) that aren't snoozed, Vega asks in the island ("Look at them with me?") and says the first one in his own male voice (Kokoro am_michael on this PC; never Luna's or the system voice). Show me opens Settings → Memecoins and walks through each one like the tour: the field glows, Vega's note sits under it with Apply / Skip / Stop, and Save is highlighted at the end. Not now snoozes those suggestions for a day. Settings → Vega's Mind: Vega speaks up, In Vega's voice, Ask Vega now. Fields carry data-key; Settings.set(key, value) sets a value in the open draft.
  • Flush Vega's Mind (Settings → Vega's Mind → Start over): two steps. Consent in the island, then a 6-digit code emailed to the account (flushEmail, 10 minutes, 3 an hour, 5 tries; /v1/sync ops mindflushstart, mindflush). The server erases the kept record (level, XP, milestones, lessons) but keeps the Paper level that opened Market (realLevel); the app sets mindResetAt (synced), so the Mind learns only from trades closed after it. Trades and reports stay.
  • Share settings (Settings → Profile): export memecoin, stocks and crypto settings (the house rules) to a file, import one, or send them to a friend's xDesk ID with a note. Incoming proposals ask in the island; every set is reviewed first (old → new per setting) and applied only on Accept; the sender hears once whether it was accepted. Only trading settings travel, checked on both sides (main/sharing.js, server share.js): never keys, wallets, the memecoin on/off, auto-execute or bot instructions. Server: /v1/share/send, /inbox, /answer; R2 share/in/<user>/, share/ans/<user>/, xid/<XID> (xDesk ID index, filled when the app loads a profile; a full look-through at most every 10 minutes); 20 sends a day, 20 waiting per account, two weeks to answer.

v0.9.11 (continued)

  • Vega's Mind (was the Learning Curve), trained on every plan: every closed trade, Demo, Paper and Market, trains the levels, XP, milestones, confidence and lessons on Free, Bronze, Silver and Gold. A second level on real prices only (Paper and Market, realLevel, kept with the account; records from before fall back to their level) is what opens Market at level 11 on Silver and Gold, so Demo can't open real money. The lessons guide the bots in Demo and Paper for everyone and in Market only on Silver and Gold (meeting.mindOn). The tab is open to every plan; the Plans card offers the Market part.
  • Quick mode keeps trading: a lesson is strong with 12+ trades and a win rate 20+ points off the desk's average. In Quick mode (and on memecoins) the DESK MEMORY note tells the bots to use the Mind as a nudge (confidence, size, choosing between ideas) and to veto only on a matching [STRONG] losing lesson; the memecoin minimum score is raised only by strong lessons. Server lcput keeps realLevel and each lesson's n and strong.
  • The Learning Curve is the account's training, kept with it: the server keeps each account's best level, every milestone with the day it was reached and the lessons (/v1/sync ops lcput / lcget, R2 sync/<user>/learning.json), and counts the tokens the account has spent on its AI (ai_usage) as "tokens invested in training your desk". A new PC, or trades older than the log, never lowers a level or loses a milestone; kept lessons keep steering the bots until newer trades teach new ones.
  • Lessons in the debate: the Bear and the Analyst read the desk's lessons (DESK MEMORY) before every buy: a setup that keeps losing becomes an objection, one that keeps winning can be a rebuttal. (Mars, the Skeptic and Vega already read them.)
  • 400 days of trades sync (was 90 on the app, 120 on the server), as far back as the Learning Curve reads.
  • Learning Curve tab: tokens invested, and notes when a level or lessons come from the account's record.

v0.9.11

  • xDesk ID: every account has a short, permanent ID (XD-XXXX-XXXX) for support tickets, community and future transfers, shown under the user info on Profile with a Copy button. Derived on the server from the account's internal UUID (SHA-256, 40 bits, Crockford base32: no I, L, O, U), so existing accounts have one too and nothing is stored; the UUID stays private. Server: profile.xid (tokens.js xdeskId).

v0.9.10

  • Title bar: the token chip shows only the ⚡ icon and the number (no "tokens" / "practice" text; practice tokens keep their dashed border, and the tooltip explains both).
  • GeckoTerminal everywhere a coin shows: a 🦎 link next to memecoins and crypto pairs in the positions panel, the Trades tab (open positions, orders, decisions, closed trades), the dashboard positions widget and ticker tape, and the round's picks. Memecoins open their Solana token page (their address is remembered from positions, so closed trades link too); crypto pairs open the deepest pool for the coin or its wrapped token on Ethereum, Solana, BNB, Base or Arbitrum (GeckoTerminal's search API, cached a day), else the coin on CoinGecko. Stocks get no link.

v0.9.9

  • Notification stack: every notification goes on screen at once: the oldest island full size, the later ones as round balls showing only their icon and glowing in their colour (a question always stays full). Each one's time starts only when it is full size, so they open one after another until the stack is empty; clicking a ball opens it. Up to 8 on screen.
  • Two clocks, clear labels: the title bar's "Next auto round" counts down to the next automatic round (your Minutes between rounds); the Run round button says "Run now in m:ss" for when the plan allows one by hand (or "Queued · runs in m:ss").
  • Unsaved settings: only Save or Discard changes can close Settings while something is unsaved. Clicks outside, the ✕ and Esc shake it every time (they used to close it on the second try). Save gets a pulsing green border; Cancel becomes a red Discard changes button. Fixed: the ✕ lost its icon (its label was replaced too).

v0.9.8

  • Settings per desk, like Memecoins: 📈 Stocks and 🪙 Crypto tabs with their own rounds, trade style, size and orders (stock-only settings such as shorts, market hours and the last-minutes cutoff only on Stocks; pairs scanned only on Crypto). General keeps what all desks share; the Risk & sizing tab is gone (old links open Stocks). House rules → Edit opens the desk you are on.
  • Memecoins don't need the Quick style any more: the memecoin desk always uses its own exit ladder.
  • Luna and the tour: her lines are voiced ahead of time (first ones before the tour opens, with a "Luna is getting ready" card; the rest in order while it plays); a line already being voiced is reused instead of made twice; scenes no longer voice a title-only clip first.
  • Island: a round's phase shows its own bot in its own colour (Narrative Radar → Luna, scans → Jupiter, checks → Mars, decisions → Vega); the picture was blank before.
  • Fixed: a plain apostrophe in a Bots note string broke the whole Settings script.

v0.9.7

  • Auto-run: a failing clock or account check (no keys yet, a network blip) threw in the tick and stopped automatic rounds; both are now caught. The desk tells the window when a wait ends, and the button no longer sits at "Ready in 0:00".
  • Round in progress: the island shows the round live (which bot, thinking or speaking, elapsed time) and closes when it ends; the bot with the floor glows in The Desk sidebar.
  • Per desk: Stocks and Crypto keep their own risk, pacing and execution settings (desks in settings.json; the Risk & sizing and Meeting tabs have an Editing switch showing mode and desk); each bot has an instruction per desk (botNotesByDesk). House rules show which mode and desk they are for.
  • Unsaved settings: closing Settings with changes shakes the sheet, highlights Save and turns Cancel into Discard changes.
  • Paper and Market need the venue set up: a desk without its keys is locked in the title bar with what is missing (memecoins on Paper need nothing); switching to Paper moves to a desk that is set up.
  • Cloud sync of history: the trade log (90 days), the equity curve and the Paper and Demo memecoin wallets sync every 2 minutes (server stores 120 days).
  • One PC per account: signing in signs the account out everywhere else ("You signed in on another PC"); the app checks every 5 minutes.
  • Receipts: free (100% code) activations email their receipt too; one receipt helper for paid and free.
  • Main graph: one curve per account (Alpaca, Bybit, Solana wallet) and a label with mode, desk and venue.
  • Title bar: spent tokens float up from the token chip. The window opens at up to 1680×1000 and the sidebar is wider so the house rules fit on one line.
  • Avatars change at once (saved in the background). Luna's island opens only when her audio is ready.
  • About: Take the tour again, Watch the desk demo, Reset the Demo account (fresh $100,000, Demo history out of logs, rounds and the curve, practice tokens refilled).
  • Achievements and new Learning Curve levels are announced in the island. GeckoTerminal links on memecoin positions and picks.

v0.9.6

  • Round pacing per plan: Free (Demo) had a 1-minute minimum, so rounds and the cooldown ran every minute. Free now runs a round at most every 30 minutes like Bronze and Silver (Gold 15); memecoin scans 5 / 3 / 1 min on Bronze / Silver / Gold; the same in Demo, Paper and Market. The app enforces Free's 30 minutes even with an older pass.
  • Tester codes: a 100% promo code makes a monthly plan free: the server activates it at once (a paid $0 invoice on chain promo, no USDT), with the plan's normal monthly tokens as a company comp; once per account; refused on annual plans and top-ups. Every other code keeps the $1 minimum. npm run promo -- create CODE --percent 100 (plans only). The app goes straight to Done.

v0.9.5

  • Cloud sync (server sync.js, app cloudsync.js): settings and API keys (Alpaca, Bybit, Telegram) follow the account. Stored in R2 per user; keys AES-GCM encrypted under a key derived from PASS_KEY (HKDF). A new PC takes the account's copy on sign-in; changes are sent 3 s after each save. Never synced: the memecoin wallet's private key, the session, mode and market, start-up options, Demo practice tokens.
  • One-click Telegram (server telegram.js): Connect opens the company's xDesk bot with a one-time code; /start links the chat; messages go through /v1/telegram/send (120 an hour). The own-bot and six-bot floor settings moved under Advanced. Needs TELEGRAM_BOT_TOKEN (secret) and TELEGRAM_BOT (var).
  • Run round: blocked while the US market is closed (stocks desk) and during the plan's cooldown in every mode, Demo included; the button fills as the cooldown passes, and a click queues the round to start when it ends. Pause and resume no longer skip the wait. Memecoin scans follow the plan's scan pace.
  • Onboarding: Luna reads each onboarding screen and narrates the whole tour in the island (mute button, remembered). The first tour after onboarding always runs (any goal, memecoins included) and has no Skip. Luna's voice loads right after launch.
  • One voice at a time: any Luna clip stops the one playing; Compare stops when another voice starts.
  • Morning brief: runs on every desk, without broker keys, and never with an empty watchlist (each desk's majors fill in).
  • Promo code field: typing works again (its key handler returned false, which cancelled every key).
  • Payments: Back on the pay screen cancels the payment (server: becomes expired; a late payment is still matched for 24 h).
  • Memecoin P&L: open P&L uses the same basis as exits (what selling now pays minus the SOL put in, at today's SOL price), and the listed price no longer overwrites the sell-quote price every 12 s.
  • Token widget: the dashboard's usage widget shows xDesk tokens (Market full rate, Paper half, Demo practice tokens), the balance left, and tokens per bot; no dollars or provider names.
  • Settings: wider sheet, larger text, an icon per tab, and search across every setting (click a result to jump to it).

v0.9.4

  • Luna's own voice: Kokoro-82M (Apache-2.0, kokoro-js) runs on the PC in a utility process (kokoro.js, kokoro-worker.js). The quantized model (about 90 MB) downloads once from Hugging Face into <userData>/voice/models (in the background a minute after start, or from Settings), then works offline; every sentence is cached in <userData>/voice/clips (400 clips). No API calls and no tokens. Default voice B: Bella at 0.95 (owner's pick). Luna reads with the female Windows voice until the model is there. Playback pipelined two sentences at a time; Stop is instant. CSP allows media-src blob:.
  • Settings → Luna's voice: voice engine (Luna's voice or Windows voice), download with progress, auditions A (Heart 0.90), B (Bella 0.95), C (Heart 0.85) with Listen / Use this / Compare, voice list, speed, volume, daily auto-read, test phrase.
  • Account panel: every venue reports balance, equity, buying power, unrealized P&L, realized today (closed trades, New York day, per desk), long and short exposure, margin used, free margin, maintenance, margin level and leverage (meeting.enrichAccount). Bybit adds its wallet balance, unrealized P&L and margins; Demo models a Reg T account (50% initial, 25% maintenance). Accounts without a previous close (Bybit) keep the day's starting equity in daystarts.json, so Day P&L is no longer always zero there.
  • Installer grows to about 140 MB (ONNX Runtime for Windows; other platforms, the web runtime and source maps are left out).

v0.9.3

  • Luna's voice: Electron's speechSynthesis has no voices on Windows and fell back to the male default (David). Luna now speaks through the system speech engine (voice.js: System.Speech with an installed female English voice such as Zira, rate −1; say -v Samantha on macOS); the browser engine is only a fallback.
  • Tokens by mode: Paper calls cost half the tokens of Market calls (x-xdesk-mode header, server PAPER_RATE 0.5); Demo spends free practice tokens on every AI path.
  • Memecoin pace per plan: scans at most every 5 min (Bronze), 3 min (Silver), 1 min (Gold). Bronze's memecoin desk uses free sources only (memeAI: false: score, RugCheck, honeypot test; no Skeptic or Vega reviews, no Narrative Radar).
  • Server: a plan given by the company (no payment) gets its allowance as soon as the plan changes, then every 30 days.

v0.9.2

  • Plans: every plan is shown again. While a bigger plan runs, smaller ones are greyed out ("Downgrade later") with the date they open up; renewing and upgrading stay open. The server still refuses downgrade invoices.

v0.9.1

  • Bots renamed: Jupiter (Scanner), Luna (News), Clark (Planner), Mars (Risk Manager), Skeptic, Vega (Desk Lead). Display names only; ids and prompts' roles unchanged.
  • Plans: monthly or annual (Bronze 7%, Silver 14%, Gold 21% off). Annual allowances arrive every 30 days, a twelfth of the payment each. Promo codes are checked before paying (server /v1/promo); no promo codes on top-ups. No downgrades while a bigger plan runs (UI and server). Plan allowance follows the price actually paid, once per payment; owed tokens block calls; bigger calls need a bigger balance; broken streams are charged an estimate.
  • Emails: branded sign-in code (Luna) and payment receipt with invoice (Vega), pixel-art bots, sent on every credited payment.
  • Plan gates: Memes always in the title bar on plans with memecoins (locked on Free); one click turns the desk on with the Quick style. Locks on modes and markets the plan doesn't include. Settings hide what the plan doesn't include. Round setup (scan reuse, memecoin scan pace, Narrative Radar, scan widths) bounded per plan. House rules show the plan's limits. Market confirmation checks the venue's keys.
  • Onboarding: nothing runs behind it (desk locked until the profile is complete). First-run tour: the six bots work one trade with sound, a Learning Curve slide, then coach marks on the title bar.
  • Learning Curve: 50 levels in 10 badge tiers, 17 milestones, Market at level 11; Market trades count with Paper.
  • Morning brief: fixed "broker.scan is not a function" on the crypto and memecoin desks; recap of the last trading day on top; Luna reads it aloud once a day and after Run brief, with a wave in the island.
  • Sounds: opening, welcome, win, loss, done, warning, question, low tokens, and a voice per bot; every island notification has one. Bell in the title bar mutes all.
  • Tokens: in the status bar with this month's use; reminders when renewal is 3 days away and when tokens run low (island, sound, desktop notification). Demo uses its own practice tokens (free, reset any time).
  • Hourly update check; the island offers Update and Restart. Version in the status bar; plan pill next to the logo. Short memecoin prices (0.0₄148) in notifications and Telegram; no scrollbars on card images. The app ships RELEASE_NOTES.md instead of this changelog; developer rows and .env notes removed from Settings.

v0.9.0

  • xDesk AI and tokens. The bots no longer need your own xAI key: every AI call (the six bots, the Bear debate, the Morning Brief, the memecoin Skeptic, Meme Trader and Narrative Radar) runs on xDesk AI through the xDesk server and is paid in xDesk tokens. Plans include a monthly allowance (Bronze 7,990, Silver 20,000, Gold 40,000 tokens a month); top-ups of 5,000 to 50,000 tokens ($5 to $50 in USDT) never expire. When tokens run out, automatic rounds and scans pause and the dynamic island offers a top-up; open positions keep their exits. Demo needs no tokens.
  • Settings → Usage & tokens: the balance (this month's allowance and top-ups), how long it lasts at your pace, tokens per day and per bot, and the history of grants, top-ups and rewards. The token balance also shows in the title bar.
  • Onboarding: new users go through a short guided setup: name, date of birth (18+ only), email, phone, a referral code, then the email code, an avatar (one of the six desk bots) and what they want to do (stocks, crypto, memecoins or just learning), which sets the desk up for it. Existing users only fill in what is missing.
  • Avatar in the title bar (click for your profile); change it any time in Settings → Profile.
  • Referrals: everyone gets a code (e.g. ZAIN7K2). A friend who signs up with it gets 10% off their first plan; when they pay, you get tokens worth 20% of what they paid. Settings → Profile shows your code, a share link and what it has earned.
  • Promo codes in xDesk Plans for plans, renewals and top-ups (the better of a promo and the referral discount applies). Created by The Stargen Enterprises with npm run promo.
  • Trade cards you can share: click a symbol in the Trades tab (an open position, a decision or a closed trade) to open its card, the same one Telegram gets, in a dynamic-island popup, with your referral code and a QR to the download page. Post on X (a ready post; the image is copied to paste in), Instagram or TikTok (the image is saved and the caption copied), save it or copy it.
  • A join page for shared links (/join/CODE) and a draft terms and privacy page (/legal) on the xDesk server.

v0.8.0

  • xDesk accounts. xDesk now opens on a sign-in screen: sign in with Google, or with a 6-digit code emailed to you (no password). Your plan, your 2 PCs and your Learning Curve belong to your account. The first time you sign in on a PC that already has a plan, that plan moves into your account. Signed out, the desk runs nothing (open positions keep their exits watched). Offline, a signed-in PC keeps working on its saved plan for up to a week.
  • Settings → Profile: who is signed in, plan and renewal, PCs, Learning Curve badge, sign out.
  • xDesk Plans (capital P) with four plans and their highlights:
  • Bronze, $7.99/month (new): Solana memecoins on Paper and Market with up to 3 open, the New Pairs Scanner, Risk Manager, Skeptic, honeypot and rug checks, plus Paper stocks and crypto with 2 positions.
  • Silver, $20: the Learning Curve, Market on stocks, crypto and memecoins, 5 positions and 5 memecoins.
  • Gold, $40: 10 positions and 10 memecoins, rounds every 15 minutes.
  • Memecoins start at Bronze. Payment amounts now work with cents and stay within 10 cents of the price.
  • Learning Curve (Silver and Gold, Settings → Learning Curve): xDesk learns from your own Paper and Demo trades. Six levels (Rookie → Elite) with badges and XP, a confidence score per desk, and lessons: setups that keep winning or losing on your desk (news type, Skeptic vote, RVOL, shorts, time of day, memecoin score…). The Risk Manager, Skeptic and Desk Lead read the lessons before every decision, and a losing memecoin score band raises the memecoin minimum score on its own. Grok itself is not retrained. Kept on this PC for now; it moves to your account (cloud) later.
  • Market needs a milestone: Silver and Gold open Market at Learning Curve level 4, Strategist (50 Paper trades over 14+ days with positive expectancy). Bronze opens Market on memecoins after 20 closed Paper memecoin trades. Bronze trades stocks and crypto on Paper only.
  • Narrative Radar (memecoins): memecoins are launched within minutes of a viral moment and named after it. About every 30 minutes one Grok call (X and web search) lists what is going viral right now: famous accounts' posts, news, memes, trends. New pairs named after a hot narrative are safety-checked first and score up to +10, and the Meme Trader is told what they ride.
  • Fixed: saving the memecoin wallet key failed in the installed app ("require() of ES Module … uuid"). A library inside the Solana package needed a newer module format than Electron's Node supports; it is pinned to a compatible version.
  • Fixed: a rug could pass the safety gates. PumpSwap pools were all treated as LP-burned; only coins launched on pump.fun get that, and hand-made PumpSwap pools (whose liquidity can be pulled) must now show the LP locked or burned.
  • Coins that can't be sold: when Jupiter finds no route (liquidity pulled), the coin is valued at 0, not at its last listed price. On Paper and Demo it is written off as a loss (at once when you click Close, or after 3 tries). In Market xDesk keeps trying and says why. A position emptied by a sale no longer lingers as a 0-coin row, one sale per coin runs at a time, and Close buttons can't be clicked twice.
  • No more Windows OK/Cancel boxes: questions (close a position, cancel an order, sign out, replace a bot instruction) are asked in the dynamic island with their own buttons (Esc or a click outside cancels).
  • Telegram cards keep their shape for memecoins: long numbers are shortened (0.0₆837 for 0.000000837, 10.92M coins) and coins are labelled Coins, not Shares. Reward:risk on short cards is fixed.

v0.7.5

  • Bigger title bar: 48 px tall (from 40) with everything in it at 120%: the logo, the Demo/Paper/Market and market switches, the plan badge, the session pill, Next round and the buttons. The Windows window controls match the new height.
  • The session pill sits centred in the space between the two sides, so more fits before items fold into the ☰ menu. For US stocks it shows only the countdown that matters: "Closes in" while the market is open, "Opens in" while it is closed.
  • "The Swarm" is now just Swarm.

v0.7.4

  • New Pairs Scanner. On Memes the Scanner now hunts new pairs for early entries: three pages of the newest Solana pools (GeckoTerminal) plus hot 5-minute pools and DexScreener boosts, only pairs launched 10 to 120 minutes ago (Settings → Memecoins → Scanner: New pairs, or New + trending for older hot pools). Early buyers in the last 5 minutes and younger pairs rank first; the youngest safe pairs score best.
  • Memecoin Risk Manager (code, no AI cost): a checklist for every coin that passes the gates: top 10 and largest holder (pools left out), sniper and bundle networks, dev holdings and whether the dev sold, the dev's other launches (serial deployers are rejected: more than 3 other coins this week), LP burned or locked, liquidity against market cap, holders, buyers vs sellers in the last 5 minutes, age, and a honeypot test (buy and sell straight back at Jupiter's quotes; a coin that loses more than 10% is rejected). It gives a risk level: HIGH is never traded, MEDIUM is traded on Soft and Balanced only, LOW always qualifies.
  • Memecoin Skeptic (Grok with X and web search): hunts for the rug before every buy: what GMGN.ai shows (its token page and the GMGN screenshots traders post: dev sold, bundles, snipers, insiders, fresh wallets), the dev or team selling, the launch called out as bundled or a rug, copycats and fake CTOs, paid shills, bot-only buzz. SKIP blocks the trade; WAIT goes to the Meme Trader to weigh (it blocks on Aggressive).
  • The Meme Trader decides with the Risk Manager's checklist and the Skeptic's view in front of it. Score only skips both AI turns but keeps the Risk Manager and its honeypot test.
  • GMGN.ai has no public API and blocks automated requests, so xDesk does not call it directly; the Skeptic reads it through Grok's web and X search.
  • Memecoin scans run every 60 seconds by default.

v0.7.3

  • New memecoin desk logic. New coins have no news, so the six-bot meeting no longer runs on Memes. Every scan (every 90 s, no AI cost) takes new and trending pools from GeckoTerminal (new, hot over 5 min and 1 h) and DexScreener (boosted and promoted) across pump.fun, PumpSwap, Raydium, Meteora and Moonshot, then:
  • Safety gates from RugCheck's full report: not rugged, mint and freeze authority off, no transfer tax, no danger flags, the largest real holder and the top 10 under their limits (pools, launch curves and lockers left out), sniper and bundle networks (wallets funded from one source) under 15%, the dev under 5%, at least 100 holders, LP locked or burned, not in its first 10 minutes.
  • A score out of 100 from unique buyers vs sellers (1 h and 5 min), trades per wallet (bot-like flow scores low), volume pace, trend (dumping or parabolic scores low), liquidity, holder spread and age. Each part is shown in the meeting feed.
  • One review per qualifying coin: the Meme Trader (Grok with X search) checks whether the buzz is a real community or shills, and looks for rug warnings. Or set Decision to Score only to trade on the score with no xAI cost.
  • Approved coins are bought at once in Paper and Demo (Settings → Memecoins → Auto-buy; Market follows Live auto-execute). Only as many coins are reviewed as there are free slots, a coin already held is never bought again, and a reviewed coin is looked at again after 30 minutes or when its score jumps by 10.
  • Automatic scans show in the feed only when a coin reaches the review; the status bar shows each scan's counts. Run round always shows the full scan.
  • Gates, minimum score, scan interval and the review are all in Settings → Memecoins.
  • Open memecoins are valued at what selling them would pay right now (a Jupiter quote), so P&L, the stop and the targets all use the price an exit would actually get.
  • Live numbers. While positions are open, the account refreshes every 5 seconds (20 s when flat) and the equity curve takes a point every 20 seconds. Equity, today's P&L, prices and P&L glide to each new value with a short green or red tint, in the side panel, the dashboard and the Trades tab. The dashboard no longer rebuilds itself on every refresh, the curve keeps its tooltip while you hover it, and the ticker tape updates its prices in place instead of restarting.
  • Market pill: Crypto and Memes show 24/7 instead of "opens always / closes never", and the label always matches the desk on screen ("Memes · Solana" only on Memes). The Next round countdown on Memes counts down to the next scan.
  • The view tabs (Dashboard … Report) are about 25% larger.

v0.7.2

  • Memecoin wallet key: a private key copied with spaces, a line break or quote marks around it is now accepted. A recovery phrase or a wallet address is refused with a message that says what was pasted and where Phantom shows the private key (Settings → Manage Accounts → the burner account → Show Private Key). The Settings error no longer starts with "Error invoking remote method".
  • Fixed garbled arrows and minus signs (shown as "→") in some memecoin messages.

v0.7.1

  • Fixed: xDesk could stay running in the background with no window, and then every launch from Windows did nothing (the running copy kept the one-copy-at-a-time lock). Now a launch always gets a window: if the running copy has none, it restarts; a window that isn't on screen 25 seconds after start is shown anyway; and if startup fails, xDesk says why and quits instead of hanging. Startup problems are written to logs/startup.log in the data folder.

v0.7.0

  • Solana memecoins (Settings → Memecoins, Quick mode only). A third market, Memes 🐸, next to Stocks and Crypto. The desk scans new and trending pairs on pump.fun, PumpSwap, Raydium, Meteora and Moonshot (DexScreener), drops anything RugCheck flags (mint or freeze authority still on, danger risks) or that can't be sold back at a fair price, and buys a fixed size (0.1 SOL by default) through Jupiter. Every exit is managed by xDesk every 5 seconds: hard stop −20%, sells half at +40% and moves the stop on the rest to the entry, trails the rest 20% under its high, and closes anything still open after 2 hours. Max 3 open coins and a daily loss cap (0.5 SOL). All adjustable.
  • Memecoin Paper and Demo simulate every swap at Jupiter's real quote (real prices, fees and slippage; a 10 SOL paper wallet). Market swaps for real from a burner wallet whose private key you paste in Settings (OS-encrypted, used only to sign swaps), with an optional Helius or QuickNode RPC.
  • Trades tab: open positions with entry, stop, target, live P&L and time open (close any of them); working orders; trades approved and waiting for Place; the latest decisions; and every closed trade, whole or partial, with WIN or LOSS, P&L and how long it was held.
  • Fixed: a stop that sold only part of a position went unnoticed. When Alpaca filled a crypto buy in parts, the stop was sized for the first part; when it hit, the rest stayed open without a stop and nothing was logged. Now the stop grows with the position, a stop that fills is reported as an exit (win or loss, in the app, the desktop notification and Telegram), and a new stop protects what is left. Positions are remembered across restarts and updates, so an exit that happens while xDesk is closed is still logged on the next start, and every partial close is logged too.
  • Every exit now shows a WIN or LOSS dynamic island (stops, targets, time stops, closes by hand), not only stop and target hits.
  • Ticker tape keeps every symbol the desk has traded, saved on disk so it survives restarts and updates, with coin and company logos.
  • The dashboard's equity multiple shows 4 decimals while the change is under 1% (it read 1.00× on a $100k account however a trade moved), and the memecoin wallet has its own curve.
  • Long quantities (memecoins come in millions) are shortened to K and M in tables; prices under $1 show enough decimals.

v0.6.2

  • Stock shorts. The Stocks desk now trades long AND short on Alpaca (Settings → Risk & sizing → Short stocks too, on by default). The Scanner picks stocks falling on heavy volume as SHORT ideas, News rates the bad news, the Planner puts the stop above and the target below, Risk flags squeeze risk, and the Bear argues against shorts too. A short goes out as one bracket order (sell short, stop above, target below), so Alpaca holds both exits.
  • Before any Bear debate or order, xDesk checks with Alpaca that the account allows shorting (a margin account; paper accounts do) and that the stock is shortable and easy to borrow. If not, the trade is rejected with the reason.
  • The market pill reads "Open · long & short" when shorts are on. Demo plays a stock short round too.

v0.6.1

  • Skeptic style (Settings → Risk & sizing): Soft (the Skeptic only advises; only a SKIP on a hard fact blocks; the Bear needs 2 of 3 rebuttals), Balanced (HARD news can go ahead over a WAIT; 2 of 3) or Aggressive (nothing trades without the Skeptic's BUY on HARD news; 3 of 3).
  • Quick mode takes the best trade: with a Soft or Balanced Skeptic, the Desk Lead approves the single best plan that passed Risk instead of ending with no trade, and the Planner no longer rejects a pick just for being "already extended" (it plans a pullback or, on Bybit, the other direction).
  • Scan cooldown (Settings → Meeting, 10 minutes by default): a round within that time of the last fresh scan reuses the Scanner's and News Checker's replies, with fresh prices, instead of paying for new ones, whether you press Run round or it runs on its own. Reused replies are marked in the meeting and the Log.
  • More crypto: 40 pairs per round by default (10 to 100): the most-traded pairs plus the day's biggest movers either way, so there are short ideas as well as long ones.

v0.6.0

  • Crypto long AND short. Alpaca can't short crypto, so with Bybit API keys (Settings → Connections) the Crypto desk trades Bybit USDT perpetuals, long or short at 1x (no leverage). Paper uses Bybit's testnet, Market your bybit.com account. Stops and targets are attached to every order and held by Bybit, so they work with xDesk closed. The scan uses Bybit's real volume (about $3.7B a day for BTC) with RVOL against the 20-day average, adds the funding rate, and skips stock, ETF and commodity perpetuals. Without Bybit keys, Crypto stays on Alpaca spot, long only.
  • Every bot knows the short side: the Scanner marks LONG or SHORT ideas, News rates bad news as the catalyst, the Planner puts the stop above and the target below, Risk checks funding, and the Bear argues squeezes and reversals.
  • Quick mode (Settings → Risk & sizing → Trade style): smaller, faster wins with reward at least 1.5x risk, tighter stops (3% stocks, 4% crypto) and a time stop that closes a trade at market after a set number of hours (4 by default). The report card shows whether it pays.
  • Shorts appear with a SHORT tag in decisions and positions; P&L, the Logger, Telegram cards and the report card handle both directions.

v0.5.6

  • The Bear debate decides. A Skeptic WAIT is now advice: the Desk Lead can approve a trade with HARD news that passed Risk, and every approval goes to the Bear debate, which vetoes it unless each of three objections is rebutted with a fact. The Skeptic blocks only with SKIP, which needs a hard fact (an offering, a hack, a delisting, earnings within two days, a regulator's action, a denied catalyst). SOFT news still needs the Skeptic's BUY. With the Bear debate switched off, a WAIT blocks again.
  • Report card: the Desk Lead is no longer blamed for following that rule, and the Risk Manager only for passing a stop wider than its limit.

v0.5.5

  • Switching Demo / Paper / Market or Stocks / Crypto no longer starts a round: the next automatic round waits one full cadence after the switch. After a restart (or an update) the schedule continues from the last round instead of running one straight away. Run round still starts one whenever you want.
  • Crypto: the Skeptic no longer reads Alpaca's small venue volume as thin liquidity.

v0.5.4

  • Updates install silently: after Restart to update, xDesk closes, installs the new version in the background (no setup wizard, no Finish page) and reopens by itself. (This takes effect from the next update after this one.)

v0.5.3

  • Spends less on xAI. A round now stops as soon as nothing is left to review: when no pick has HARD or SOFT news, when the Planner finds no setup, or when Risk fails every plan, the later bots are skipped (the Log says how many calls were saved). Later bots also only see the names still in play.
  • The Skeptic is back on grok-4.3. The multi-agent Grok cost about 35 times as much per call (44% of a day's bill); it now runs only in the Bear debate, which happens only when a buy is approved.
  • The Skeptic votes WAIT or SKIP only for a concrete, named reason; general caution no longer blocks every trade.
  • Crypto: Risk no longer fails pairs for low dollar volume (Alpaca's venue volume is always small); it judges RVOL instead.

v0.5.2

  • The Stocks / Crypto switch is now a compact icon toggle (a rising chart and a ₿ coin, drawn so they look the same on every Windows version), built from a list so Forex can be added later.
  • The title bar no longer squeezes on narrow windows or large text: items that don't fit move into a ☰ menu, least important first (session clock, next round, market, mode, plan), and come back as soon as there is room.

v0.5.1

  • The Entry/Exit Planner now always says WHY when it writes NO SETUP (falling, no stop level within 5%, reward under 2x, already extended), and after a big gap up it can use a nearer stop such as today's open or the middle of the range.
  • The Volume Scanner picks only names moving higher: the desk only buys, so falling stocks no longer use up the meeting.
  • Only one xDesk runs at a time; opening it again brings the open window forward (two copies could trade the same account).

v0.5.0

  • Crypto desk, around the clock. A Stocks / Crypto switch in the title bar. Crypto scans Alpaca's USD pairs (BTC/USD, ETH/USD and more; stablecoins left out) 24/7 with no market-hours gate, and every bot gets crypto-aware instructions. Alpaca has no bracket orders for crypto, so xDesk buys with a GTC limit, places a stop at Alpaca once filled (it holds even with xDesk closed) and watches the target itself. Long only, fractional sizes, stops up to 8%.
  • Sharper volume signal. RVOL now compares today's volume with the 20-day average, adjusted for the time of day (the typical intraday curve for stocks, the share of the UTC day for crypto).
  • Report card (new Report view): win rate, average win and loss, expectancy, worst losing streak and the result against SPY (or BTC), which bot was most often wrong with a ready-made instruction to fix it in one click, and the rule that would have saved the worst trade. Sent to Telegram every Friday after the close.
  • The bar before real money: at least 50 paper trades over 30 days, positive expectancy and beating SPY. Shown in the Report view and in the Market confirmation.
  • Trading floor on Telegram: optional bot per role (Settings → Connections). Each role posts under its own name; in Every round mode each bot posts its part of the meeting.
  • Bots: prompts and models are set by The Stargen Enterprises and no longer shown. Add one instruction of up to 250 characters per bot in Settings → Bots. The Skeptic, Bear and brief checker run on the multi-agent Grok, with an automatic fallback.

v0.4.0

  • Plans: Free (Demo only), Silver $20/month (Paper and Market, up to 5 positions, rounds every 30 min or more) and Gold $40/month (up to 10 positions, rounds every 15 min or more). The plan badge sits next to the mode switch; the limits are enforced by the app, whatever the settings say.
  • Pay in USDT on BNB Smart Chain (BEP20) or Tron (TRC20) from a popup in the island style: pick a plan and network (with coin and network icons), scan the QR, send the exact amount, and watch confirmations arrive live. The plan switches on by itself once the payment is final, even if xDesk is closed. 30 days per payment; time left carries over when you renew or switch plan.
  • Your subscription key (Settings → About) works on 2 PCs; sign out on one to move it. Plans are signed by the xDesk server and checked offline, so they keep working for a week without internet.
  • Faster start: the window appears straight away with a loading cover while your desk loads. A status-bar pill shows when you are offline or the xDesk server can't be reached; xDesk retries on its own and tells you when it's back.
  • The installed app refuses to start if its files have been modified.

v0.3.2

  • In-app updates from a private update server: an update button in the title bar shows a dot when a new version is out, with release notes, Download (with progress) and Restart to update. Nothing downloads or installs without a click.
  • Updates need a licence key (Settings → About → Updates), with Stable and Beta channels and an automatic check every 6 hours. The app works fully without a key; it just gets no updates.

v0.3.1

  • Notifications are now a dynamic island at the top centre: it springs open from a pill, its border and glow take the bot's colour (Lead for orders, Risk for exits, Bear/Skeptic for vetoes, News for the brief), shows one message at a time and dismisses on click. Fills, exits and vetoes raise it too.
  • Dashboard widgets fill their boxes and scale with their size: Live round shows large tiles with name and live state (3×2 when narrow, 6×1 when wide); Daily P&L fills the box with day labels, value labels and best / worst / green-red day stats; Wins & losses and Desk status spread over the full height.

v0.3.0

  • xAI usage widget: spend (reported by xAI, or estimated from list prices), tokens in/out, requests and searches, per bot (incl. Bear, Analyst and the Brief), per round, by today / 7 days / all, with tips on what costs most.
  • xAI daily budget (Settings → Meeting): warns at 80%, stops automatic rounds and the brief at 100% until tomorrow.
  • Dashboard widgets now share one height and back-fill gaps, so rows always line up; the default layout fills every row.
  • Demo | Paper | Market switch in the title bar. Market trades your Alpaca live account (real money) with guardrails: separate live keys, a confirmation dialog, automatic rounds paused on entry and on restart, a separate live auto-execute switch (off by default), key/account-type checks, and LIVE tags on logs, notifications and Telegram cards.
  • Paper, demo and live trades are tagged; dashboard stats count only the current mode.
  • Market pill and dashboard show live Opens in and Closes in countdowns (hover for your local times).
  • Text size setting (Small / Default / Large / Larger, Ctrl + / − / 0).
  • Windows installer packaging: icon unpacked for notifications, clean build labels.
  • Fix: a Settings sheet opened earlier can no longer change the trading mode when saved.

v0.2.0

  • Renamed to xDesk by The Stargen Enterprises LLC, with a pixel-coin app icon.
  • Startup preloader, pitch-black dark theme (now the default).
  • Dashboard with adjustable widgets: equity chart, traded tickers, wins and losses, P&L, positions, desk agents, live round, brief, debate and logger.
  • Sound system, desktop notifications, open at login (Windows and macOS).
  • Telegram image cards for trades, exits, vetoes and the morning brief.
  • About screen with version, build and this changelog.
  • Bear debate: three reasons against every buy, rebutted by the Analyst, vetoed in code when they are not.
  • Logger: every decision with its reason, kill count, filters and search.
  • Morning Brief: SEC filings, insider trades, a Grok scout and a checker before the open.
  • Desk overview, The Swarm and pixel-art bot avatars.

v0.1.0

  • Six-bot paper-trading desk meeting on xAI Grok with Alpaca paper bracket orders.
  • .env configuration, Telegram round alerts, hard checks and fixed position sizing.