smooth-operator-mcp 3.0.1 → 3.0.4

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
@@ -3,24 +3,25 @@
3
3
  ## Interactive wizard (directly to your harness)
4
4
 
5
5
  `smooth-operator install <harness>` is interactive by default — it asks exactly 3
6
- curated questions (browser mode/profile, browser executable, and
7
- security/data-directory settings) with recommended defaults in brackets.
6
+ curated questions (profile ownership, headed/headless display, and browser
7
+ executable) with recommended defaults in brackets.
8
8
  Omitting `<harness>` is allowed too: on a TTY the installer prompts for the
9
9
  target first (default `opencode`), while piped or CI environments print usage
10
10
  and exit instead. Use `smooth-operator install opencode --yes` to skip prompts
11
11
  and use recommended defaults. The wizard normalizes and validates its choices
12
12
  before saving them to `~/.smooth-operator/config.json` (0600, bounded,
13
13
  owner-only, and symlink-safe). Managed mode owns one private persistent profile;
14
- connect mode attaches to an operator-owned browser and does not own or close
15
- its profile/process. Personal-Chrome mode derives `browserUrl` after launching
14
+ connect mode launches a dedicated debugging profile and does not touch an
15
+ operator's daily browser profile. Personal-Chrome mode derives `browserUrl` after launching
16
16
  the helper on port 9222; it is not a separate prompt.
17
17
 
18
18
  ### Personal Chrome (connect) helper
19
19
 
20
20
  When you pick “connected browser” (mode `connect`), the wizard finds Chromium via
21
21
  `discovery.ts`, launches a dedicated debugging profile under
22
- `~/.smooth-operator/personal-chrome` with port `9222`, and polls the loopback
23
- endpoint until it is live. On success it writes
22
+ `~/.smooth-operator/personal-chrome` with port `9222`, and probes the loopback
23
+ endpoint until a valid DevTools version response is live (33 attempts within a
24
+ default 10-second deadline). On success it writes
24
25
  `SMOOTH_OPERATOR_BROWSER_MODE=connect` and
25
26
  `SMOOTH_OPERATOR_BROWSER_URL=http://127.0.0.1:9222` for you. This does not
26
27
  attach to or take ownership of an operator's daily browser profile. No manual
@@ -147,7 +147,9 @@ smooth-operator
147
147
  ```
148
148
 
149
149
  Remote mode is rejected unless the token is at least 32 characters. Do not
150
- use a token from a shell history, checked-in file, or shared log. A reverse
150
+ use a token from a shell history, checked-in file, or shared log. POST requests
151
+ must declare `Content-Type: application/json`; unsupported media types are
152
+ rejected before their body is read. A reverse
151
153
  proxy can add TLS and network access controls, but it does not replace the
152
154
  application token, Host/Origin allowlists, or request-size limit. Allowed host
153
155
  and origin values are hostnames without a scheme; browser preflight requests
@@ -357,8 +359,9 @@ are always applied, with explicit opt-ins where documented:
357
359
  the same policy checks; `about:blank` is allowed, data/blob URLs are limited
358
360
  to non-frame subresources, and file, browser-internal, extension, and
359
361
  unknown schemes are rejected.
360
- - Upload and PDF destinations must stay within configured file roots after
361
- realpath and symlink checks. Download paths and generated files are bounded.
362
+ - Upload and PDF destinations must stay within configured directory roots after
363
+ realpath and symlink checks; an existing regular file cannot be configured as
364
+ a root. Download paths and generated files are bounded.
362
365
  - Page JavaScript is available in the native profile by default and can be
363
366
  disabled with `SMOOTH_OPERATOR_ALLOW_EVAL=false`; when enabled, page code can
364
367
  observe and mutate page state with the browser's privileges.
@@ -409,13 +412,16 @@ disabled explicitly with `SMOOTH_OPERATOR_ALLOW_EVAL=false`.
409
412
  `browser_evaluate` is page JavaScript and is available by default (set
410
413
  `SMOOTH_OPERATOR_ALLOW_EVAL=false` when it is not wanted). `browser_exec`
411
414
  accepts only a JSON array of validated browser actions; it is not a shell,
412
- Python, or arbitrary code runner. Destructive batch actions require explicit
415
+ Python, or arbitrary code runner. Its explicit `evaluate` action still follows
416
+ the page-evaluation policy. Destructive batch actions require explicit
413
417
  confirmation. `browser_wait_for_human` pauses for an operator to complete a
414
418
  visible sign-in or challenge. `browser_solve_challenge` is an internal
415
419
  connected-AI observe/act/verify loop: it returns bounded evidence and is
416
420
  successful only when a fresh final classification explicitly reports the
417
- challenge absent. `browser_close_session` closes the one native browser session
418
- by its explicit session identifier.
421
+ challenge absent; present and exhausted cycles report the remaining attempt
422
+ budget and `automation_exhausted` is the final non-success state.
423
+ `browser_close_session`
424
+ closes the one native browser session by its explicit session identifier.
419
425
 
420
426
  Actions that leave a usable page—navigation, click, input, select, scroll, key,
421
427
  back, forward, and reload—accept optional `includeSnapshot: true`. The action
@@ -470,8 +476,9 @@ The server publishes read-only resources:
470
476
  Resource output is bounded and follows the same redaction and policy rules as
471
477
  tool output. The capabilities resource also reports the native defaults and
472
478
  effective feature flags for local browser tools, page evaluation, stealth, and
473
- behavioral timing, plus whether challenge success requires an explicit absent
474
- classification.
479
+ behavioral timing. Its challenge metadata includes the default and maximum
480
+ connected-AI attempt budgets and states that success requires an explicit
481
+ absent classification.
475
482
 
476
483
  ### Prompts
477
484
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smooth-operator-mcp",
3
- "version": "3.0.1",
3
+ "version": "3.0.4",
4
4
  "type": "module",
5
5
  "packageManager": "npm@12.0.2",
6
6
  "description": "A lightweight, production-grade MCP server for secure browser automation.",