moondesk 0.11.7 → 0.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -120,7 +120,9 @@ Select the connector and start working.
120
120
 
121
121
  ## Browser control
122
122
 
123
- MoonDesk owns a dedicated agent browser instead of attaching to your personal browser profile. It starts lazily, runs headless by default, and can be switched to visible mode for human-assisted steps such as logins or permission prompts.
123
+ MoonDesk owns one lazy agent Chromium process instead of attaching to your personal browser profile or launching a separate browser for every project. Inside that shared Chromium, each registered workspace gets its own isolated BrowserContext for cookies and site storage, while each ChatGPT conversation gets its own MoonDesk-routed logical tab set. Different workspaces therefore do not share cookies, localStorage, IndexedDB, or service-worker state, and separate conversations cannot accidentally act on each other's selected tabs.
124
+
125
+ The browser runs headless by default and can be switched to visible mode for human-assisted steps such as logins or permission prompts. Presentation belongs to the shared Chromium process, so changing it while the browser is live requires explicit confirmation because every workspace BrowserContext and logical tab is recreated. MoonDesk never attaches to or reuses your personal browser profile, cookies, or logged-in sessions.
124
126
 
125
127
  ```bash
126
128
  moondesk browser navigate_page --url=http://localhost:3000
@@ -129,7 +131,7 @@ moondesk browser take_snapshot
129
131
  moondesk browser list_console_messages
130
132
  ```
131
133
 
132
- Use `view_page` when the task depends on actual rendered pixels rather than only a text/accessibility snapshot.
134
+ The `moondesk browser` CLI shares the resolved workspace's BrowserContext/login state but uses its own logical tab session, so scripted browser commands cannot steal a ChatGPT conversation's active page. Use `view_page` when the task depends on actual rendered pixels rather than only a text/accessibility snapshot.
133
135
 
134
136
  For browser-runtime invariants and implementation details, see [`docs/BROWSER_RUNTIME_ARCHITECTURE_HARDENING.md`](docs/BROWSER_RUNTIME_ARCHITECTURE_HARDENING.md).
135
137
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moondesk",
3
- "version": "0.11.7",
3
+ "version": "0.11.8",
4
4
  "description": "MoonDesk — use ChatGPT Chat as a local coding agent, by Shattermoon.",
5
5
  "author": "Shattermoon",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: browser
3
- description: Control MoonDesk's shared Chromium session without exposing the full Chrome DevTools MCP schema to the model.
3
+ description: Control MoonDesk's shared Chromium runtime with workspace-isolated storage and conversation-owned tabs without exposing the full Chrome DevTools MCP schema to the model.
4
4
  ---
5
5
 
6
6
  # MoonDesk Browser
@@ -9,10 +9,10 @@ Use MoonDesk's browser runtime for local web-app inspection, UI testing, console
9
9
 
10
10
  ## Interfaces
11
11
 
12
- - **MCP `set_browser_presentation`**: available in `multi-tools` mode for the rare case where the agent needs the isolated browser to become visible for human input. Prefer headless; a live-session switch requires explicit user approval before retrying with `confirm_restart=true`.
12
+ - **MCP `set_browser_presentation`**: available in `multi-tools` mode for the rare case where the user needs the shared agent Chromium to become visible for human input. Prefer headless; changing presentation while Chromium is live restarts the host-wide browser runtime and therefore requires explicit user approval before retrying with `confirm_restart=true`.
13
13
  - **MCP `browser_command`**: preferred for one browser action at a time and the only page-action primitive needed in Browser-only mode.
14
14
  - **MCP `view_page`**: preferred whenever appearance matters. It returns the current rendered page as model-visible pixels.
15
- - **`moondesk browser` CLI**: preferred in Both mode when several deterministic browser actions are easier to express as a shell script or loop. It calls the same MoonDesk native browser runtime, so it shares the same isolated agent-browser session as MCP without touching the user's personal browser profile.
15
+ - **`moondesk browser` CLI**: preferred in Both mode when several deterministic browser actions are easier to express as a shell script or loop. It calls the same MoonDesk Chromium runtime and workspace BrowserContext, but it intentionally owns a separate local-CLI logical tab session instead of borrowing a ChatGPT conversation's active page.
16
16
 
17
17
  Do not invoke `npx chrome-devtools-mcp` directly. MoonDesk pins and manages the compatible Chrome DevTools runtime.
18
18
 
@@ -26,14 +26,16 @@ Do not invoke `npx chrome-devtools-mcp` directly. MoonDesk pins and manages the
26
26
  6. Use `view_page` for visual judgment. Accessibility/text snapshots are structural evidence, not a substitute for seeing the rendered page.
27
27
  7. Inspect console/network/performance data when it helps the task; do not collect large traces by default.
28
28
 
29
- The browser starts lazily on the first operation and runs headless by default at a deterministic 1280x800 initial viewport, so normal agent work does not open a desktop Chromium window. Headless mode still supports snapshots, screenshots, `view_page`, console/network inspection, interaction, and responsive emulation. Resize or emulate the target viewport before responsive or pixel-sensitive QA. Users can switch the agent browser to visible presentation from MoonDesk's dashboard. In `multi-tools`, an agent may use `set_browser_presentation` when the user needs to see or manually interact with the isolated browser, such as a login, CAPTCHA, or permission prompt; do not switch merely for agent visual inspection because `view_page` already provides rendered pixels. Because presentation is chosen when Chromium starts, changing it while the browser is running closes the current isolated session and prior tabs, cookies/storage, page state, and snapshot UIDs are gone. The tool therefore returns `confirmation_required` without changing a live session unless the agent retries with `confirm_restart=true` after explicit user approval. Switching to visible starts a fresh empty visible session immediately; if that headful launch fails, MoonDesk reverts the setting to headless so later browser work remains usable. Keep a human-assisted session visible while its entered state is still needed. Switching back to headless closes the visible browser and the next browser action starts a fresh hidden session. Normal commands otherwise reuse the existing session. If the owned browser runtime is lost or a dispatched operation exceeds its deadline, MoonDesk invalidates that runtime before allowing another browser operation; the next call starts a fresh isolated session. MoonDesk does not automatically replay an ambiguous state-changing action, so navigate/select the target page and take a fresh snapshot after session loss.
29
+ MoonDesk starts one host-owned Chromium lazily on the first browser operation and runs it headless by default at a deterministic 1280x800 initial viewport. The expensive Chromium/MCP process is shared, but browser ownership is not: each registered workspace gets a named isolated BrowserContext for cookies/storage, and each ChatGPT conversation gets its own logical page set inside that workspace context. MoonDesk routes page-scoped operations by the conversation's owned page ID instead of trusting Chromium's globally selected tab. Conversations in the same workspace therefore share that project's login/storage state while keeping separate tabs; different workspaces do not share cookies/localStorage/IndexedDB/service-worker state. Always use the connector that owns the project for its browser work--do not switch to another workspace connector merely because it exposes browser tools.
30
+
31
+ Headless mode still supports snapshots, screenshots, `view_page`, console/network inspection, interaction, and responsive emulation. Users can switch the one agent Chromium to visible presentation from MoonDesk's dashboard. In `multi-tools`, use `set_browser_presentation` only when the user needs to see or manually interact with the browser, such as a login, CAPTCHA, or permission prompt; `view_page` already provides rendered pixels for agent inspection. Presentation is process-global. Changing it while Chromium is running closes **all** MoonDesk workspace BrowserContexts and conversation/CLI tabs, so the tool returns `confirmation_required` until the user explicitly approves that loss and the agent retries with `confirm_restart=true`. If the shared runtime is lost or a dispatched operation exceeds its deadline, MoonDesk invalidates that runtime before another browser operation can run; the next call starts a fresh Chromium generation and all callers must re-establish their page/snapshot state. MoonDesk never automatically replays an ambiguous state-changing action.
30
32
 
31
33
  ## Local dev-server verification
32
34
 
33
35
  When an agent starts a local web server, browser verification is part of completing the task rather than a separate setup step:
34
36
 
35
37
  1. Wait until the server reports its localhost URL as ready.
36
- 2. Navigate the shared agent browser to that URL.
38
+ 2. Navigate this conversation's project browser page to that URL.
37
39
  3. Set the viewport being tested, then take a fresh snapshot.
38
40
  4. Exercise the user-visible flow with snapshot UIDs.
39
41
  5. Inspect console/network output when debugging behavior.
@@ -76,7 +78,8 @@ Prefer the CLI for orchestration, but return to `view_page` whenever the task re
76
78
  ## Safety and lifecycle
77
79
 
78
80
  - Do not run browser lifecycle commands (`start`, `status`, `stop`) through MCP `browser_command` or `moondesk browser`; the running MoonDesk host owns that lifecycle.
79
- - `moondesk browser` is a lightweight localhost client to the running MoonDesk host. It does not own a separate browser process; independent shell commands share the same MoonDesk-owned agent-browser session as MCP.
81
+ - `moondesk browser` is a lightweight localhost client to the running MoonDesk host. It does not own a separate browser process. CLI calls for one workspace share that workspace's BrowserContext/storage but use a dedicated local-CLI logical tab session, separate from ChatGPT conversations.
80
82
  - ReadOnly mode permits inspection commands only; navigation, JavaScript execution, interaction, uploads, resizing, and other state-changing browser commands are blocked.
81
- - Treat `evaluate_script` as code execution in the currently selected page. Use it only when needed and keep the function narrowly scoped.
83
+ - Treat `evaluate_script` as code execution in this caller's currently active logical page. MoonDesk injects the owned upstream page ID; callers must not rely on Chromium's globally selected tab. Use scripts only when needed and keep them narrowly scoped.
82
84
  - Browser file paths are local machine paths. Relative input paths stay inside the active workspace. Browser-only mode keeps browser inputs workspace-scoped. When Computer tools are also enabled (`Both` mode), an explicit absolute input-file path (for example, `upload_file`) may reference another regular file readable by the MoonDesk user; MoonDesk stages a private copy before Chromium sees it. Input directories and file-producing/output paths remain workspace-bound.
85
+ - Browser-global extension lifecycle operations are intentionally unavailable through the shared runtime because installing/reloading an extension would mutate every workspace. Performance traces and screencasts are globally singleton upstream resources, so MoonDesk leases them to the conversation and exact page that started them.