smooth-operator-mcp 2.3.0 → 2.4.0

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/docs/harnesses.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Interactive wizard (one-command)
4
4
 
5
- `smooth-operator install <harness>` is interactive by default — it asks 6 curated questions (mode, headless, allowed/blocked domains, page JavaScript, data directory) with recommended defaults in brackets. Omitting `<harness>` is allowed too: on a TTY the installer prompts for the target first (default `opencode`), while piped or CI environments print usage and exit instead. Use `smooth-operator install opencode --yes` to skip prompts and use recommended defaults. The wizard saves its choices to `~/.smooth-operator/config.json` (0600, symlink-safe) — mode, headless, domains, and allowEval are written exactly as answered on every run — and then registers the harness.
5
+ `smooth-operator install <harness>` is interactive by default — it asks 7 curated questions (browser mode, browser executable, headless, allowed domains, blocked domains, page JavaScript, and data directory) with recommended defaults in brackets. Omitting `<harness>` is allowed too: on a TTY the installer prompts for the target first (default `opencode`), while piped or CI environments print usage and exit instead. Use `smooth-operator install opencode --yes` to skip prompts and use recommended defaults. The wizard saves its choices to `~/.smooth-operator/config.json` (0600, symlink-safe) — mode, executable path, headless, domains, and allowEval are written exactly as answered on every run — and then registers the harness. Personal-Chrome mode derives `browserUrl` after launching the helper on port 9222; it is not a separate prompt.
6
6
 
7
7
  ### Personal Chrome (connect) helper
8
8
 
@@ -297,6 +297,11 @@ are always applied, with explicit opt-ins where documented:
297
297
  redirects that leave policy. The browser's own later DNS resolution is not
298
298
  fully controllable by this process; DNS rebinding is therefore a limitation,
299
299
  not a guarantee that a network firewall can be omitted.
300
+ - New page and worker targets are paused at the DevTools boundary until their
301
+ request guard is installed. HTTP(S) and normalized WS(S) requests receive
302
+ the same policy checks; `about:blank` is allowed, data/blob URLs are limited
303
+ to non-frame subresources, and file, browser-internal, extension, and
304
+ unknown schemes are rejected.
300
305
  - Upload and PDF destinations must stay within configured file roots after
301
306
  realpath and symlink checks. Download paths and generated files are bounded.
302
307
  - Page JavaScript is disabled by default. It is available only when the full
@@ -349,6 +354,33 @@ confirmation. `browser_wait_for_human` pauses for an operator to complete a
349
354
  visible sign-in or challenge, and `browser_close_session` closes the one
350
355
  native browser session by its explicit session identifier.
351
356
 
357
+ Actions that leave a usable page—navigation, click, input, select, scroll, key,
358
+ back, forward, and reload—accept optional `includeSnapshot: true`. The action
359
+ result then includes one bounded trailing snapshot with current refs and a DOM
360
+ revision. A snapshot failure is reported as `snapshot: null` with a bounded
361
+ `snapshotError`; the completed mutation remains a success. `browser_batch`
362
+ accepts the same option at the top level and captures only one snapshot after
363
+ the final action.
364
+
365
+ `browser_extract` returns `offset`, `nextOffset`, `hasMore`, and `revision`.
366
+ Use `browser_page_next` with the returned offset and revision; a stale revision
367
+ returns the retryable `STALE_PAGE_SLICE` error instead of silently overlapping
368
+ or skipping text. `browser_search_page` reports `totalMatches` and
369
+ `matchesTruncated`. Page slices, matches, evaluate output, network entries,
370
+ and research URLs are bounded, redacted, and marked as untrusted data.
371
+
372
+ Batch inputs accept canonical action names plus compatibility aliases such as
373
+ `key`, `select`, `back`, `forward`, `page_info`, `challenge`, `interactive`,
374
+ `frames`, `downloads`, `upload`, and `pdf`. Grouped cookie, storage, dialog,
375
+ network-log, and console-log operations are normalized before validation;
376
+ conflicting alias and canonical fields fail with their action index and field
377
+ names. A failed batch preserves bounded completed results and reports
378
+ `failedIndex`, `failedAction`, and `completedActions`.
379
+
380
+ If browser teardown times out or fails, later browser work returns the
381
+ retryable `BROWSER_RECOVERY_REQUIRED` error. Call `browser_close_session` to
382
+ retry cleanup; the recovery latch clears only after teardown is confirmed.
383
+
352
384
  `web_search` performs bounded DuckDuckGo retrieval. Search titles, URLs, and
353
385
  snippets are untrusted observations, not instructions or proof of claims. Its
354
386
  `maxResults` input is capped at 10, and `maxChars` (500–4,000 through the MCP
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smooth-operator-mcp",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "packageManager": "npm@10.9.8",
6
6
  "description": "A lightweight, production-grade MCP server for secure browser automation.",