@rtrvr-ai/rover 1.3.3 → 2.0.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/README.md +19 -18
- package/dist/embed.js +360 -58
- package/dist/index.d.ts +38 -2
- package/dist/rover.js +1671 -24808
- package/dist/worker/rover-worker.js +18 -7412
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
105
105
|
| `sessionToken` | `string` | — | Optional short-lived Rover session token (`rvrsess_*`). |
|
|
106
106
|
| `siteKeyId` | `string` | — | Site key ID from Workspace |
|
|
107
107
|
| `visitor` | `{ name?: string; email?: string }` | — | Optional visitor profile for greeting personalization. Recommended flow is async updates via `identify(...)` after login/user hydration. |
|
|
108
|
-
| `apiBase` | `string` | `https://extensionrouter.rtrvr.ai` | Optional API base override. Rover uses `/
|
|
108
|
+
| `apiBase` | `string` | `https://extensionrouter.rtrvr.ai` | Optional API base override. Rover uses `/v2/rover/*` under this base. |
|
|
109
109
|
| `allowedDomains` | `string[]` | `[]` | Hostnames where Rover may operate |
|
|
110
110
|
| `domainScopeMode` | `'registrable_domain' \| 'host_only'` | `'registrable_domain'` | Domain matching strategy |
|
|
111
111
|
| `externalNavigationPolicy` | `'open_new_tab_notice' \| 'block' \| 'allow'` | `'open_new_tab_notice'` | External navigation policy |
|
|
@@ -120,6 +120,7 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
120
120
|
| `task.followup.mode` | `'heuristic_same_window'` | `'heuristic_same_window'` | Heuristic follow-up chat-cue carryover mode |
|
|
121
121
|
| `task.followup.ttlMs` | `number` | `120000` | Max age (ms) of prior completed/ended task eligible for follow-up chat cues |
|
|
122
122
|
| `task.followup.minLexicalOverlap` | `number` | `0.18` | Minimum lexical overlap ratio to attach follow-up chat cues |
|
|
123
|
+
| `task.autoResumePolicy` | `'auto' \| 'confirm' \| 'never'` | `'confirm'` | Pending-run resume behavior: auto-resume immediately, require Resume/Cancel confirmation, or always cancel pending interrupted run. |
|
|
123
124
|
| `checkpointing.enabled` | `boolean` | `true` | Cloud checkpoint sync is enabled by default in v1. Set to `false` to disable. |
|
|
124
125
|
| `checkpointing.autoVisitorId` | `boolean` | `true` | Auto-generate visitor ID when needed |
|
|
125
126
|
| `checkpointing.ttlHours` | `number` | `1` | Checkpoint TTL in hours |
|
|
@@ -149,41 +150,41 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
149
150
|
| `ui.shortcuts` | `RoverShortcut[]` | `[]` | Suggested journeys (max 100 stored, max 12 rendered by default; lower site-key policy caps are enforced) |
|
|
150
151
|
| `ui.greeting` | `{ text?, delay?, duration?, disabled? }` | — | Greeting bubble config (`{name}` token supported) |
|
|
151
152
|
|
|
152
|
-
When a site key or session token is used, Rover fetches cloud site config via `/
|
|
153
|
+
When a site key or session token is used, Rover fetches cloud site config via `/v2/rover/session/open` (shortcuts + greeting).
|
|
153
154
|
If the same field exists in both cloud config and boot config, boot config wins.
|
|
154
155
|
|
|
155
156
|
If you enable `tools.web.scrapeMode: 'on_demand'`, use a site key capability profile that includes cloud scrape support.
|
|
156
157
|
|
|
157
158
|
See [full configuration reference](https://github.com/rtrvr-ai/rover/blob/main/docs/INTEGRATION.md#configuration-reference).
|
|
158
159
|
|
|
159
|
-
## Rover
|
|
160
|
+
## Rover V2 Runtime Endpoints
|
|
160
161
|
|
|
161
|
-
Browser runtime calls target `https://extensionrouter.rtrvr.ai/
|
|
162
|
+
Browser runtime calls target `https://extensionrouter.rtrvr.ai/v2/rover/*`:
|
|
162
163
|
|
|
163
|
-
- `POST /session/
|
|
164
|
-
- `POST /
|
|
165
|
-
- `
|
|
166
|
-
- `
|
|
167
|
-
- `POST /
|
|
168
|
-
- `GET /events` (SSE)
|
|
169
|
-
- `GET /session/projection`
|
|
170
|
-
- `POST /session/snapshot`
|
|
164
|
+
- `POST /session/open`
|
|
165
|
+
- `POST /command` (`RUN_INPUT`, `RUN_CONTROL`, `TAB_EVENT`, `ASK_USER_ANSWER`)
|
|
166
|
+
- `GET /stream` (SSE)
|
|
167
|
+
- `GET /state`
|
|
168
|
+
- `POST /snapshot`
|
|
171
169
|
- `POST /context/external`
|
|
172
170
|
- `POST /telemetry/ingest`
|
|
173
171
|
|
|
174
172
|
Runtime contract notes:
|
|
175
173
|
|
|
176
174
|
- Server is authoritative (`sessionId + runId + epoch + seq`).
|
|
177
|
-
- `taskRouting.mode` maps to `requestedMode` in `POST /
|
|
175
|
+
- `taskRouting.mode` maps to `requestedMode` in `POST /command` payloads with `type='RUN_INPUT'`.
|
|
178
176
|
- `plannerOnActError` applies only in `auto` mode and only when ACT has no usable outcome.
|
|
179
177
|
- Typed conflicts: `stale_seq`, `stale_epoch`, `active_run_exists`.
|
|
180
|
-
- `POST /
|
|
181
|
-
- Cross-registrable navigation preflight is resilient: if
|
|
182
|
-
- External intent routing: `/context/external` uses `read_context` (read/navigation-context prompts) or `act` (mutation prompts). Navigation-only external opens are represented by
|
|
178
|
+
- `POST /command` stale/missing run is non-fatal for tab navigation decisions (`decision='stale_run'`).
|
|
179
|
+
- Cross-registrable navigation preflight is resilient: if command-tab decision checks are unavailable, Rover falls back to local policy (in-scope targets follow `navigation.crossHostPolicy`, default `same_tab`; out-of-scope targets follow `externalNavigationPolicy`).
|
|
180
|
+
- External intent routing: `/context/external` uses `read_context` (read/navigation-context prompts) or `act` (mutation prompts). Navigation-only external opens are represented by `POST /command` with `type='TAB_EVENT'` plus external placeholder tab handling.
|
|
183
181
|
- Any normal user send starts a fresh task boundary (fresh `prevSteps`, fresh run-scoped tab order/scope).
|
|
184
182
|
- `ask_user` answer submissions are the only continuation path and keep the same task boundary.
|
|
185
183
|
- `task.followup` is operative heuristic carryover for chat cues only (`user` + `model` summary pair); it never carries previous task state/tab scope.
|
|
186
|
-
-
|
|
184
|
+
- `task.autoResumePolicy` is enforced at runtime: `auto` resumes, `confirm` shows explicit Resume/Cancel suggestion, `never` cancels pending resume.
|
|
185
|
+
- Resume blocked/declined/never paths terminalize the local task to `cancelled`, clear local running indicators, and schedule backend cancel repair (`RUN_CONTROL cancel`) unless a live remote controller owns that run.
|
|
186
|
+
- Server projection never re-adopts locally ignored run IDs; ignored projected active runs trigger cancel repair retry.
|
|
187
|
+
- Same-domain/subdomain continuity is preserved when a live controller tab owns the active run; reopening tabs stay observer-safe and do not force-cancel that run.
|
|
187
188
|
- Runtime does not use legacy browser checkpoint routes (`roverSessionCheckpointGet/Upsert`).
|
|
188
189
|
|
|
189
190
|
## API Methods
|
|
@@ -241,7 +242,7 @@ rover.on('error', (err) => console.error(err));
|
|
|
241
242
|
| `checkpoint_error` | `{ action, code?, message, ... }` | Checkpoint request failure details |
|
|
242
243
|
| `tab_event_conflict_retry` | `{ runId, conflict?, ... }` | One stale seq/epoch tab-event conflict was recovered by silent retry |
|
|
243
244
|
| `tab_event_conflict_exhausted` | `{ runId, conflict?, ... }` | Tab-event stale conflict retry exhausted (non-fatal; projection sync follows) |
|
|
244
|
-
| `
|
|
245
|
+
| `checkpoint_token_missing` | `{ action, status }` | Legacy checkpoint browser path blocked |
|
|
245
246
|
|
|
246
247
|
## Content Security Policy (CSP)
|
|
247
248
|
|