CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Changelog
VRCloud IDE ships as a single, continuously updated release. The repository keeps
one commit on `main`; every update replaces it and bumps the version below.
Installed servers pick up new versions with `vrcloud update` or the **Update**
button in the menubar.
## 4.0.6
### Fixed
- **The agent now actually uses the project's skills on Anthropic and Grok.** Only the Cursor
SDK reads `.cursor/`; the other providers need the skills index and rules injected into the
prompt. When a `.cursor` link existed, that injection was skipped for everyone, so an
Anthropic/Grok agent never saw the available skills. The index (and rules) are now always
included for non-Cursor providers, with an instruction to read the matching `SKILL.md` and
follow it before improvising; Cursor still defers to its SDK when `.cursor` is present.
- **Remote desktop error `CopyFromScreen ... "The handle is invalid"` on Windows.** The screen
capture reused one graphics context across frames, so once the desktop handle went stale
(lock/unlock, resolution change, RDP reconnect, secure/UAC desktop) every capture failed for
good. It now recreates the context and retries, recovering on its own; if the session truly
has no desktop, the message explains it and points at console auto-logon instead of the cryptic
handle error.
## 4.0.5
### Added
- **Remote desktop without an RDP login (Windows Server).** The session VRCloud runs in becomes
*disconnected* when you close RDP (and there is none before the first login), so the desktop
stops rendering and remote desktop / computer use go black. The Remote Desktop panel and
`desktop_setup` now detect a disconnected session and say exactly what is wrong. A new helper,
`scripts\windows-headless-desktop.ps1`, sets up console auto-logon so a chosen account is signed
into the physical console at boot, keeps it awake and unlocked, and redirects RDP back to the
console on disconnect — so the desktop keeps rendering with no RDP session open (`-Remove` undoes
it). The Windows installer offers this step (it already runs elevated), `scripts\vrcloud.ps1
headless` enables it any time (self-elevates via UAC), and both offer a reboot at the end.
## 4.0.4
### Fixed
- **Empty reply with no response after changing the API key.** When the Anthropic model returned
an empty turn (no text, no tool call, a normal stop), the turn was recorded internally but
nothing was ever streamed to the chat, leaving a blank "VRCloud AI" bubble with no error. This
happened most often on the first message after switching the API key, since that request runs
on a freshly rebuilt history and a transient empty completion was not handled. An empty turn is
now retried once; if it is still empty, a visible note is shown instead of silence. Normal and
tool-using turns are unchanged.
## 4.0.3
### Added
- **Web search for every provider.** A `web_search` tool is available to Cursor, Anthropic and
Grok in all modes. It picks a backend from the configured key: Tavily (`tvly-…`), Brave
Search, or DuckDuckGo with no key at all. Results carry title, URL, snippet and date; a
`recency` filter and a `site:` restriction narrow them, and `fetch_top` reads the full text of
the top pages so answers rest on sources rather than the model's memory. Identical queries
are cached for ten minutes. The key lives in the AI settings ("Pencarian web") or in
`SEARCH_API_KEY`.
- **Research discipline.** A `[Research]` guide is sent for tasks, conversation and Ask: for
anything factual that can change (versions, docs, errors, prices, news, people, products)
the assistant searches first, reads one to three sources, prefers primary ones, cross-checks
important claims, notes dates, separates sources from interpretation, and ends with the URLs
it actually used. It does not search for things it knows for certain or for the user's own
code.
- **Tool activity shown the way Claude shows it.** Consecutive tool steps are grouped into one
collapsible block. While working it shows a shimmering label with the current action
("Menelusuri web…", "Mengedit…"); when the reply starts it folds into a one-line summary
("Menelusuri web · membaca 2 halaman", "Mengedit 1 file · 2 perintah") with an icon and the
favicons of the sites used. Inside, steps are flat rows; search steps list their sources as
favicon · title · domain, and page fetches show favicon + domain + path. Thinking that happens
between tools lives in the same block; plans, change reviews and approvals stay outside.
### Fixed
- **TLS certificate could not be regenerated on Windows.** When the machine's IP set changed
and `openssl` was not on PATH, the PowerShell fallback could hang and the server refused to
start. The certificate helper now also uses the `openssl` bundled with Git for Windows (and
Homebrew on macOS), which takes about a second.
## 4.0.2
### Added
- **Conversation, not just tasks.** The assistant is now a thinking partner as well as an
engineer. Messages that are talk rather than work (questions, opinions, brainstorming,
learning, a chat about the day) are detected and answered as conversation: with a point of
view and reasons, disagreement when warranted, a clear line between what it knows and what
it guesses, in the user's language and register, at most one clarifying question, and web
research when facts could be stale. Such messages skip the task machinery (todos, step
verification, project snapshot, orchestration), so they are faster and cheaper. Work
requests (verbs, file paths, code vocabulary, attached skills) still get the full playbook.
If a conversation turns into something it could do in the workspace, it offers in one
sentence rather than editing files on its own.
- **It remembers you.** Durable facts about the user (name, role, preferences, how they like
answers, what they are working on) are stored as `user` memories and shown to the assistant
in every mode, so Agent, Plan, Ask and Chat all know who they are talking to.
- **Chat mode** in the Mode menu: talk and discuss freely, with web research, memory and image
generation available, and no edits, shell, AST or desktop control. On the Cursor provider it
blocks the mutating built-in tools without the strict Ask allowlist, so custom tools such as
the browser remain available.
## 4.0.1
### Fixed
- **Anthropic: "messages: text content blocks must be non-empty".** An empty model reply was
stored as an empty text block, after which every later message in that chat failed with
HTTP 400. Empty replies are no longer stored that way, saved histories are repaired before
each request (existing broken chats work again), and if the API still rejects a request for
this reason the history is repaired and the request is retried automatically, so the run
continues.
- **Restore to before this message could delete the whole chat.** Consecutive messages share
a checkpoint when no file changed between them, and the restore looked the message up by
checkpoint and took the first match, so restoring the second message removed the first one
and everything after it. The button now identifies the exact message it belongs to; without
that information it picks the latest match, never an earlier one.
## 4.0.0
### Added
- **Image generation** when the task needs it and the model supports it. Cursor uses its
native `generateImage` tool; Grok uses Grok Imagine (`generate_image`, generate or edit
up to 5 workspace images) with the signed-in session. Claude cannot generate images, so
the tool is not offered unless `XAI_API_KEY` is set. Results are saved in the workspace,
shown as a gallery in the chat, and tracked by checkpoints. New **Image** chip
(Auto / Off) in the composer.
- **Context bar** above the composer showing how much of the model's context window the
last request used, with warning colours at 65 / 85 / 95%. For Anthropic it is measured
exactly with `count_tokens` once the estimate passes 60%.
- **Active-file pill** next to the context bar: shows which editor file (and how many open
tabs) the agent receives as context; click to send the next message without them. While
the agent works, the same spot shows live progress (step x/y, elapsed time, or waiting
for command approval).
- **Context handoff**: at 80% of the window the agent writes a structured handoff (goal,
done + how it was verified, in progress, findings, remaining) and a fresh agent continues
from it instead of restarting the task. Continuation prompts always carry a task-state
digest rebuilt from todos, changed files and the last verification.
- **Overflow guard** (Anthropic): when the prompt would not fit, older tool output is
compacted harder and the oldest tool rounds are dropped without breaking tool pairs.
- **`diagnostics(path)` tool** for every provider: language-server errors and warnings
for a file in under a second, honest about servers that are not installed.
- **`desktop_find` and `desktop_click({ name })`**: find and click controls by name
through the OS accessibility tree (Windows UI Automation, Linux AT-SPI, macOS System
Events) instead of estimating coordinates from a screenshot.
- Desktop tool results now report the exact pointer position in pixels and fractions.
- Smart Agent shows **why** each message took the direct or orchestrated path; medium-
length change requests are classified by the model instead of by character count.
- Hermetic tests for prompt invariants, safety guards and image generation
(`npm run test:prompts`); live eval fixtures for the browser and computer use, which
are reported as skipped on servers without a browser or desktop.
### Changed
- **Command approval is on by default and enforced for every provider.** Commands that
match the safety patterns wait for approval in the AI panel; a timeout or a run with no
one to ask means **deny**. The Cursor shell-guard hook is installed (HTTPS-aware) instead
of removed at boot; Anthropic and Grok check in the `shell` tool itself.
- **Todos need evidence**: a step marked completed without a check run since it started
(shell, diagnostics, browser, desktop, generated image) is put back to in progress and
the agent is told why. One check cannot complete two steps.
- One-step-at-a-time verification guidance for all providers, and rewritten browser and
computer-use playbooks (structure/refs first, stale refs after navigation, click by name).
- Read-only tool rounds (read, grep, glob, ls, ast_search, ...) run in parallel for
Anthropic and Grok.
- Structured memory is the single source of truth; `.vrcloud-agent/memory.md` contains a
generated block from it, and free-form notes outside the block are preserved.
- The workspace writer lock is global: a direct agent run in one chat no longer edits
files at the same time as an orchestrated implementer in another.
- **Restore to before this message** now rewinds the conversation too: that message and
every message below it are deleted for all browsers, the agent's memory of them is
discarded (Anthropic/Grok history, the stored Cursor agent), and the message text is put
back in the input box to edit or resend. It refuses while the agent is running and checks
before restoring any file, so files and chat never get out of step.
- Remote Desktop pointer input is coalesced on the client and server, so the cursor no
longer lags seconds behind; agent desktop actions wait less between steps and Linux drags
use a single `xdotool` call.
### Fixed
- **Touch devices**: controls that only appeared on hover are now always visible on phones
and tablets (restore-to-message, copy reply, rename/export chat); tap targets in the AI
panel are 34–40px instead of 18–28px; inputs use 16px text so iOS Safari no longer zooms
the page when you tap them; the send/microphone group stays right-aligned when the
composer wraps; the model name is no longer clipped on narrow screens.
- **Menus could not be used on phones.** Chip menus (Agent, Browser, Computer) and the
model popover's Effort / Context / Model submenus opened *behind* the full-screen mobile
panel, closed themselves about a second after a tap (hover-leave auto-close fired when the
finger lifted), and the Effort / Context / Model submenus were positioned off-screen. They
now open on top, stay open until you tap outside, and are kept inside the screen. Touch is
detected from the actual pointer type, not only from media queries some phones misreport.
- The mobile composer uses two fixed rows: option chips on top; plus, model, microphone and
send below.
- Toasts appear at the top in mobile mode instead of covering the composer.
- The updater no longer offers an "update" when the local install is a newer, unpushed
release than GitHub — that update would have reset it to the older version.
- `noNativeTask` is enforced: no fallback of the Cursor tool list can re-enable nested
subagents inside the orchestrated implementer.
- Task-state and evidence checks recognise Cursor's `inProgress` todo status.
## 3.0.19
### Added
- **Smart Agent orchestration** for substantive Agent-mode work: one planner, bounded
parallel read-only explorers, a single workspace writer, deterministic verification,
bounded repair attempts, and read-only finalization. Worker/todo/verification/result
events persist in order; stopping a run cancels workers and verification.
- **Ranked project context** backed by a persistent workspace index, canonical change
events, active/open/explicit-file priority, symbol/import/test hints, strict context
budgets, and cache invalidation after editor, disk, shell or agent changes.
- **Optional language-server context** for JavaScript/TypeScript, Python, Go and Rust
(`typescript-language-server`, `pyright-langserver`, `gopls`, `rust-analyzer`) with
diagnostics, symbol/definition/reference caches, restart backoff and lexical fallback.
- **Tree-sitter structural tools** for JavaScript/JSX, TypeScript/TSX, Python, Go and Rust.
`ast_search` returns stable match IDs, byte ranges and source hashes; `ast_edit` rejects
stale, ambiguous, non-unique and syntax-regressing changes while preserving UTF-8,
BOMs and line endings.
- **Evidence-backed structured memory** with scope, provenance, confidence, TTL and source
hashes. Changed evidence becomes stale until revalidated; Ask mode can search but cannot
mutate memory.
- **Verification engine** that reconciles actual workspace changes, selects relevant project
checks, bounds output and execution time, supports cancellation, and feeds failures into
the repair loop and final review metadata.
- **Hermetic Smart Agent acceptance suite** with cross-provider doubles, orchestration,
context ranking, LSP, memory invalidation, structural edit, verification/repair,
cancellation, checkpoint/review and event compatibility coverage. `npm test` no longer
reads `.env`, starts a server or uses the network; realtime coverage moved to
`npm run test:smoke`.
- **Opt-in live agent evaluator** (`npm run eval:agent`) with JavaScript, TypeScript, TSX,
Python, Go and Rust fixtures plus stale/ambiguous/syntax rejection and protected diff-scope
cases. It runs only with explicit enablement and records JSON success, provider/model,
tool-call, text-edit fallback, token, duration, changed-file and syntax-regression metrics.
### Changed
- Multi-agent runs now activate for Indonesian coding requests, stream localized worker
lifecycle/activity/tool-count/timing cards in real time, retain compact progress in
history, and preserve substantive implementation details plus authoritative changed-file
and verification evidence in the final response.
- Linux installers now detect `apt`, `dnf`, or `yum`. CentOS Stream 9+ and AlmaLinux
8+ are supported, including native build dependencies, optional Chromium runtime
libraries, EPEL/CRB-backed virtual desktop packages, and `firewalld` setup guidance.
Bootstrap-installed Node.js remains discoverable when RHEL's `sudo` secure path omits
`/usr/local/bin`.
- Reverted the mobile-responsive shell and follow-up phone UX (PRs #4, #6, #7, #8, #9).
The desktop IDE is back to the pre-mobile layout: menubar, activity bar, sidebar,
Ace editor, terminal, and the original composer. No bottom nav, no file drawer,
no hidden editor on narrow viewports, and no phone-only composer tap-target CSS.
- **Grok account login is kept** (PR #5 / 3.0.14): Settings → Grok → Sign in with Grok
still runs xAI device-code OAuth at `auth.x.ai`. Session tokens stay encrypted in
`data/grok-session.json`.
## 3.0.18
### Changed
- On phones and narrow browsers (≤768px) the Ace text editor / workarea pane is gone.
The bottom bar is Files / Terminal / Agent; Agent (or the file drawer) fills the
space the editor used to occupy. Opening a file no longer switches to the editor —
it stays on the current mobile pane. Desktop (≥1024px) file open and the editor
are unchanged.
## 3.0.17
### Fixed
- Opening a file on a phone no longer paints a white Ace sheet that looks like the
server crashed. Ambiance is loaded with the page (not a later dynamic fetch),
TextMate’s default `#fff` background is overridden to the dark editor colors,
and adding a tab no longer tears down `#workarea` (which blanked Ace on iOS).
Workers are disabled before the first session. A process-level log line is
written if Node would otherwise die silently. Desktop file open is unchanged.
## 3.0.16
### Fixed
- Composer toolbar on phones is compact again (one row: +, model pill, tool icons, mic,
send) instead of the oversized two-row 44px chrome. Invisible hit padding keeps taps
reliable without enlarging the glyphs. The model (`auto`) chip is clickable again —
menus are pinned above the chip so they are not clipped by the agent overlay.
- Opening a file on a phone no longer blanks or freezes the IDE. Ace no longer
auto-focuses (which scrolled its hidden textarea off-screen and zoomed the page),
workers / live autocomplete / minimap are skipped on narrow viewports, and the
viewport is pinned so the workarea stays usable. Desktop file open is unchanged.
## 3.0.15
### Fixed
- On phones and narrow browsers (≤768px), every control on the AI composer toolbar is a
~44×44 tap target. The model, Mode/Browser/Computer/Review/Skills, mic, and send buttons
no longer share one cramped row: tool icons wrap onto a second row (and can scroll
sideways if needed) so adjacent icons are not mis-tapped. Chip menus now open above the
agent overlay instead of behind it. Desktop (≥1024px) chrome is unchanged.
## 3.0.14
### Added
- **Grok** as an AI provider via the operator's own Grok / xAI account. Sign in from
the AI settings panel (official device-code OAuth at `auth.x.ai` — the same flow as
`grok login --device-auth`). Session tokens stay on the server in
`data/grok-session.json` (encrypted, mode 0600) and can be signed out. No
`GROK_API_KEY` / `XAI_API_KEY` is required. The agent uses the same workspace tools
as Anthropic (files, shell, search, browser, computer use). Needs SuperGrok or
X Premium+; xAI may rate-limit or expire the session (re-login from settings).
## 3.0.13
### Changed
- Phones and narrow browsers (≤768px, with a tighter 480px pass) get a usable IDE: viewport
and safe-area handling, a file drawer, a Menu overflow, touch-sized chrome, and a bottom bar
for Files / Editor / Terminal / Agent. The previous mobile mode that hid the IDE and left
only the AI chat is gone. Desktop (≥1024px) layout is unchanged.
## 3.0.12
### Changed
- The agent instructions now follow the same working habits used by other coding agents: search only until the cause is clear, batch independent lookups, keep edits small and exact, verify with the narrowest check, and stay read-only in Ask mode. The text is VRCloud's own; other products' system prompts are not copied in.
- Windows update works on a ZIP download that has no `.git`. `vrcloud.ps1 update` and the Update button turn the folder into a Git checkout, then fetch `main`. `.env` and `data/` stay in place.
## 3.0.11
### Added
- Windows `scripts\vrcloud.ps1 update` fetches the latest release and restarts the Scheduled Task when it is running, matching `vrcloud update` on Linux. The Update button in the IDE already did this on Windows.
## 3.0.10
### Changed
- Windows installs now open the IDE the same way Linux does: inbound TCP on the server port is allowed, and the installer plus `vrcloud.ps1 start` / `status` print `https://IP:port` for the public address, LAN address, and localhost.
## 3.0.9
### Fixed
- Browser steps in the chat card often had no screenshot. A failed attempt to shrink a large capture discarded the image, and text steps such as extract never captured one. Captures are kept, extract and error pages are screenshotted, and the card shows the latest image when the selected step has none.
## 3.0.8
### Fixed
- Computer-use screenshots in the chat were broken when the agent used the Cursor API. That provider puts raw JPEG bytes in the tool result, and embedding those bytes made the card show a broken image. Each capture is now saved as a file and the card loads it by URL.
## 3.0.7
### Fixed
- Computer-use screenshots were missing in the chat when the agent used the Cursor API. That provider returns images as `{ image: { data } }` and often omits the bytes from the tool event, so the "Controlling the computer" card said the step had no screenshot. Both result shapes are read now, and the capture is kept on the server per tool call so the card can still show it.
## 3.0.6
### Changed
- An invalid or rejected API key now shows the provider's own error (HTTP status and message) in the chat and in the agent settings, instead of a generic failure.
- Changing the API key or the provider keeps the open chat. The new agent re-reads that conversation and continues the same task.
## 3.0.5
### Changed
- Computer-use screenshots and the remote-desktop stream draw the mouse pointer (a white arrow). Its tip is the click point, so the agent can see when a click missed. macOS already captured the system cursor; Windows and Linux now draw one because their capture APIs omit it.
- Computer-use instructions now walk the agent through a tighter loop: look, act once, check where the cursor tip landed, wait instead of repeating a missed click, switch to the keyboard after two misses, and only report success when the result is visible.
## 3.0.4
### Fixed
- The "N terminal agent" bar above the composer counted finished background shell cards, so it stayed visible after the processes had already exited. It now lists only processes that are still alive.
- Each listed process, and the bar itself, has a Stop button that ends that process (and its children).
## 3.0.3
### Changed
- Computer use no longer stops at login, sign-up, CAPTCHA, checkout, or payment. When those
steps are part of the task, the agent fills and submits them (using details the user gave,
that are on screen, or that are saved in the browser) and gets past dialogs that block the
outcome instead of handing the work back.
## 3.0.2
### Changed
- **All agent instructions in one file.** System prompt, per-message guidance, Ask mode,
browser and computer-use playbooks, memory rules, context labels, the continue prompt and
every tool description (workspace, `desktop_*`, `browser_*`) now live in
`lib/agent-instructions.js`; `ai-chat.js`, `anthropic-agent.js`, `desktop-remote.js` and
`browser-automation.js` import from it. Browser tool and parameter descriptions are now
English like everything else the agent reads.
- The Anthropic provider no longer receives the static "how to work" block twice (system
prompt and per message), saving tokens on every turn.
## 3.0.1
### Fixed
- **Black Remote Desktop on Linux.** The virtual display could be alive while no desktop
session was drawing on it (Xvfb survives a server restart, or XFCE failed to start under
systemd without `HOME` / `XDG_RUNTIME_DIR` / a D-Bus session), so every frame was black.
The server now checks for a running window manager on the virtual display and (re)starts
the session when it is missing, gives the session a proper environment, disables the xfwm4
compositor (which blanks `import` captures on Xvfb), captures with `-screen`, sets a
non-black root background while the session loads, logs session output to
`data/desktop-session.log`, falls back to openbox / fluxbox / icewm / twm when XFCE is not
installed, and shows "Starting desktop session..." in the panel. `desktop-setup.sh` now
installs `xprop` and `xsetroot` on every supported distro.
## 3.0.0
The "computer use" release.
### New
- **Computer use for the AI agent.** The agent can now see and operate the
server's real desktop: `desktop_screenshot`, `desktop_click`, `desktop_drag`,
`desktop_move`, `desktop_type`, `desktop_key`, `desktop_scroll`,
`desktop_wait` and `desktop_setup`. Coordinates are resolution-independent
fractions of the screen; every action returns a fresh screenshot.
- **"Controlling the computer" card** in the chat: consecutive desktop steps
fold into one card with a large live screen frame and numbered steps with
thumbnails, the same way browser sessions do.
- **Computer use toggle** in the composer (Auto / On / Off), next to Browser
tools. Off removes the desktop tools entirely; On tells the agent to prefer
the desktop GUI for application and window tasks.
- **Remote Desktop** (VNC-like) from the OS badge in the menubar: JPEG screen
streaming over WebSocket with mouse and keyboard control on Windows, Linux
and macOS, plus one-click virtual desktop (Xvfb + XFCE) setup on headless
Linux servers.
- **Realtime UI mirroring** across browsers: open tabs, active tab, split
layout, editor content and cursors, terminal output, sidebar view, AI panel
state and the Remote Desktop panel are all kept in sync between sessions.
- **Notification center**: bell icon with unread badge, history dropdown,
in-app toasts and optional browser notifications when the agent finishes.
- **Smarter agent prompts** with a live project snapshot (stack, git state,
file tree, recent changes), editor context, repeated-failure detection and
history compaction. All agent instructions and tool descriptions are in
English.
- **Project memory** (`.vrcloud-agent/memory.md`) can be switched on and off
from the agent settings.
- **HTTPS by default** with an automatically generated self-signed certificate
that covers local and public IPs (`https://IP:PORT`), or your own PEM files.
### Improved
- Realtime editor sync: 40 ms keystroke debounce, server-side conflict
resolution that retries local edits, and disk changes by the agent or by
scripts are reflected in open tabs immediately.
- The **Run** button detects the interpreter or compiler for the active file's
extension on the server and runs the file in its own folder, in a floating
terminal that can be docked as a tab.
- VS Code-style file and folder icons, inline rename and file creation in the
tree (F2 / Delete), clearer line numbers, collapsible Open Files list.
- Redesigned login and loading screens; the login page follows the IDE
language setting.
- Chat rendering closer to Claude and ChatGPT: streamed thinking blocks,
GFM tables, nested and task lists, copy buttons, accept/reject review card
that jumps to the first changed line.
- The OS badge shows a monitor icon with the OS logo on screen and opens
Remote Desktop on click.
- Tool cards, browser and desktop steps, option chips and the Remote Desktop
panel are fully translated in English mode.
### Fixed
- Commands sent to a terminal from the chat (the run-in-terminal button) now
send a real Enter (CR), which PowerShell/ConPTY expects; previously they
showed a `>>` continuation prompt on Windows.
- Transient screen-capture errors no longer flash an error in the Remote
Desktop panel; the stream retries silently and only reports persistent
failures.
- The Windows capture and input helpers are split so antivirus (AMSI) no
longer blocks streaming and control.
## 2.0.0
Realtime collaboration, AI agent with checkpoints and review mode, headless
browser automation, source control panel, command palette, project memory,
self-update.
## 1.0.0
Initial release: Ace editor, tmux-backed terminals, file manager, login,
systemd and Windows installers.