@rtrvr-ai/rover 2.0.1 → 2.0.2

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
@@ -1,6 +1,13 @@
1
1
  # @rtrvr-ai/rover
2
2
 
3
- Rover is a DOM-native embedded web agent that lives inside your website. Unlike traditional chat widgets that run in iframes, Rover reads the actual DOM and executes actions directly in the user's browser enabling real task completion, not just conversation.
3
+ **Turn any web interface into an AI agentwith one line of code.**
4
+
5
+ Rover is an open-source, DOM-native agent SDK that reads the real DOM,
6
+ plans actions, and executes them directly in the browser. Clicks, form fills,
7
+ navigation, data extraction — sub-second, no screenshots, no remote VMs.
8
+ Embed on websites, browser extensions, Electron apps, or any DOM environment.
9
+
10
+ [GitHub](https://github.com/rtrvr-ai/rover) · [Website](https://www.rtrvr.ai/rover) · [Docs](https://www.rtrvr.ai/rover/docs) · [Discord](https://rtrvr.ai/discord)
4
11
 
5
12
  ## Prerequisites
6
13
 
@@ -104,6 +111,8 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
104
111
 
105
112
  ## Configuration
106
113
 
114
+ ### Core
115
+
107
116
  | Option | Type | Default | Description |
108
117
  |---|---|---|---|
109
118
  | `siteId` | `string` | *required* | Site identifier |
@@ -120,45 +129,136 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
120
129
  | `allowActions` | `boolean` | `true` | Enable or disable action tools |
121
130
  | `openOnInit` | `boolean` | `false` | Open panel immediately on boot |
122
131
  | `sessionScope` | `'shared_site' \| 'tab'` | `'shared_site'` | Session sharing across tabs |
123
- | `taskRouting.mode` | `'auto' \| 'act' \| 'planner'` | `'act'` | Task routing strategy |
124
- | `taskRouting.plannerOnActError` | `boolean` | `true` | In `auto` mode, retry planner only when ACT does not produce a usable outcome |
125
- | `taskRouting.actHeuristicThreshold` | `number` | `5` (auto mode) | Auto-routing threshold |
132
+ | `workerUrl` | `string` | auto | Custom worker URL for self-hosting |
133
+ | `apiMode` | `boolean` | auto (`true` when `publicKey` or `sessionToken` exists) | Force API execution mode |
134
+
135
+ ### Timing
136
+
137
+ | Option | Type | Default | Description |
138
+ |---|---|---|---|
139
+ | `timing.navigationDelayMs` | `number` | `80` | Delay (ms) before same-tab navigation executes, allowing state persistence |
140
+ | `timing.actionTimeoutMs` | `number` | `30000` | Timeout (ms) for bridge RPC calls from the worker |
141
+ | `timing.domSettleDebounceMs` | `number` | `24` | Adaptive DOM settle debounce before a11y tree capture |
142
+ | `timing.domSettleMaxWaitMs` | `number` | `220` | Adaptive DOM settle max wait before a11y tree capture |
143
+ | `timing.domSettleRetries` | `number` | `0` | Adaptive DOM settle bounded retries before capture |
144
+ | `timing.sparseTreeRetryDelayMs` | `number` | `35` | Additional delay before sparse-tree retry capture |
145
+ | `timing.sparseTreeRetryMaxAttempts` | `number` | `1` | Number of sparse-tree retries when roots are too sparse |
146
+
147
+ ### Tab Indicators
148
+
149
+ | Option | Type | Default | Description |
150
+ |---|---|---|---|
151
+ | `ui.tabIndicator.titlePrefix` | `boolean` | `true` | Prepend "[Rover] " to document.title during task execution |
152
+ | `ui.tabIndicator.faviconBadge` | `boolean` | `false` | Overlay a colored dot on the favicon (opt-in due to CORS) |
153
+ | `ui.tabIndicator.widgetTabBar` | `boolean` | `true` | Show in-widget tab bar of agent-controlled tabs |
154
+
155
+ ### Tab Policy
156
+
157
+ | Option | Type | Default | Description |
158
+ |---|---|---|---|
159
+ | `tabPolicy.observerByDefault` | `boolean` | — | Start tabs in observer mode by default |
160
+ | `tabPolicy.actionLeaseMs` | `number` | — | Action lease duration in milliseconds |
161
+
162
+ ### Task Management
163
+
164
+ | Option | Type | Default | Description |
165
+ |---|---|---|---|
166
+ | `task.singleActiveScope` | `'host_session'` | — | Scope for single active task enforcement |
167
+ | `task.tabScope` | `'task_touched_only'` | — | Tab scope strategy |
168
+ | `task.maxConcurrentWorkers` | `number` | `2` | Maximum concurrent Web Workers (max: 3) |
169
+ | `task.maxQueuedTasks` | `number` | `5` | Maximum queued tasks waiting for a worker |
170
+ | `task.maxArchivedTasks` | `number` | `10` | Maximum archived (terminal) tasks to keep |
171
+ | `task.resume.mode` | `'crash_only'` | — | Resume behavior mode |
172
+ | `task.resume.ttlMs` | `number` | — | Resume TTL in milliseconds |
173
+ | `task.autoResumePolicy` | `'auto' \| 'confirm' \| 'never'` | `'confirm'` | Pending-run resume behavior: auto-resume immediately, require Resume/Cancel confirmation, or always cancel pending interrupted run. |
126
174
  | `task.followup.mode` | `'heuristic_same_window'` | `'heuristic_same_window'` | Heuristic follow-up chat-cue carryover mode |
127
175
  | `task.followup.ttlMs` | `number` | `120000` | Max age (ms) of prior completed/ended task eligible for follow-up chat cues |
128
176
  | `task.followup.minLexicalOverlap` | `number` | `0.18` | Minimum lexical overlap ratio to attach follow-up chat cues |
129
- | `task.autoResumePolicy` | `'auto' \| 'confirm' \| 'never'` | `'confirm'` | Pending-run resume behavior: auto-resume immediately, require Resume/Cancel confirmation, or always cancel pending interrupted run. |
177
+
178
+ ### Task Routing
179
+
180
+ | Option | Type | Default | Description |
181
+ |---|---|---|---|
182
+ | `taskRouting.mode` | `'auto' \| 'act' \| 'planner'` | `'act'` | Task routing strategy |
183
+ | `taskRouting.plannerOnActError` | `boolean` | `true` | In `auto` mode, retry planner only when ACT does not produce a usable outcome |
184
+ | `taskRouting.actHeuristicThreshold` | `number` | `5` (auto mode) | Auto-routing threshold |
185
+
186
+ ### Checkpointing
187
+
188
+ | Option | Type | Default | Description |
189
+ |---|---|---|---|
130
190
  | `checkpointing.enabled` | `boolean` | `true` | Cloud checkpoint sync is enabled by default in v1. Set to `false` to disable. |
131
191
  | `checkpointing.autoVisitorId` | `boolean` | `true` | Auto-generate visitor ID when needed |
132
192
  | `checkpointing.ttlHours` | `number` | `1` | Checkpoint TTL in hours |
133
193
  | `checkpointing.onStateChange` | `(payload) => void` | — | Checkpoint lifecycle updates (`active`, `paused_auth`) |
134
194
  | `checkpointing.onError` | `(payload) => void` | — | Checkpoint request error callback |
195
+
196
+ ### Telemetry
197
+
198
+ | Option | Type | Default | Description |
199
+ |---|---|---|---|
135
200
  | `telemetry.enabled` | `boolean` | `true` | Enable runtime telemetry batching |
136
201
  | `telemetry.sampleRate` | `number` | `1` | Sampling ratio (`1` = all events, `0.1` ≈ 10%) |
137
202
  | `telemetry.flushIntervalMs` | `number` | `12000` | Flush cadence for buffered telemetry events |
138
203
  | `telemetry.maxBatchSize` | `number` | `30` | Maximum number of telemetry events sent per flush request |
139
204
  | `telemetry.includePayloads` | `boolean` | `false` | Include richer per-event payload details (debug/tool context). Increases telemetry volume and may include sensitive runtime content. |
140
- | `apiMode` | `boolean` | auto (`true` when `publicKey` or `sessionToken` exists) | Force API execution mode |
141
- | `apiToolsConfig.mode` | `'allowlist' \| 'profile' \| 'none'` | `'none'` | API additional tool exposure mode |
142
- | `tools.web.enableExternalWebContext` | `boolean` | `false` | External tab cloud context fallback |
143
- | `tools.web.scrapeMode` | `'off' \| 'on_demand'` | `'off'` | On-demand external tab scrape mode |
144
- | `tools.web.allowDomains` | `string[]` | `[]` | External context allowlist |
145
- | `tools.web.denyDomains` | `string[]` | `[]` | External context denylist |
146
- | `tools.client` | `ClientToolDefinition[]` | `[]` | Runtime-registered client tools |
147
- | `workerUrl` | `string` | auto | Custom worker URL for self-hosting |
205
+
206
+ ### UI
207
+
208
+ | Option | Type | Default | Description |
209
+ |---|---|---|---|
148
210
  | `ui.agent.name` | `string` | `'Rover'` | Custom assistant name |
149
211
  | `ui.mascot.disabled` | `boolean` | `false` | Disable mascot video |
150
212
  | `ui.mascot.mp4Url` | `string` | default | Custom mascot MP4 URL |
151
213
  | `ui.mascot.webmUrl` | `string` | default | Custom mascot WebM URL |
152
214
  | `ui.muted` | `boolean` | `true` | Start with audio muted on first load; stored browser preference wins after the user toggles sound |
153
215
  | `ui.thoughtStyle` | `'concise_cards' \| 'minimal'` | `'concise_cards'` | Thought rendering style |
154
- | `ui.panel.resizable` | `boolean` | `true` | Panel resizable preference |
216
+ | `ui.panel.resizable` | `boolean` | `true` | Enables desktop freeform resizing plus phone/tablet snap-height resizing with per-device memory |
155
217
  | `ui.showTaskControls` | `boolean` | `true` | Show new/end task controls |
156
218
  | `ui.shortcuts` | `RoverShortcut[]` | `[]` | Suggested journeys (max 100 stored, max 12 rendered by default; lower site-key policy caps are enforced) |
157
219
  | `ui.greeting` | `{ text?, delay?, duration?, disabled? }` | — | Greeting bubble config (`{name}` token supported) |
220
+ | `ui.voice` | `{ enabled?: boolean; language?: string; autoStopMs?: number }` | — | Browser dictation for supported Chromium browsers. Rover fills the draft live, waits for post-speech silence before stopping, and the user still sends manually. |
221
+
222
+ ### Web Tools
223
+
224
+ | Option | Type | Default | Description |
225
+ |---|---|---|---|
226
+ | `apiToolsConfig.mode` | `'allowlist' \| 'profile' \| 'none'` | `'none'` | API additional tool exposure mode |
227
+ | `tools.web.enableExternalWebContext` | `boolean` | `false` | External tab cloud context fallback |
228
+ | `tools.web.scrapeMode` | `'off' \| 'on_demand'` | `'off'` | On-demand external tab scrape mode |
229
+ | `tools.web.allowDomains` | `string[]` | `[]` | External context allowlist |
230
+ | `tools.web.denyDomains` | `string[]` | `[]` | External context denylist |
231
+ | `tools.client` | `ClientToolDefinition[]` | `[]` | Runtime-registered client tools |
158
232
  | `pageConfig` | `RoverPageCaptureConfig` | — | Optional per-site page-capture overrides such as `disableAutoScroll`, settle timing, and sparse-tree retry settings |
159
233
 
160
- When a site key or session token is used, Rover fetches cloud site config via `/v2/rover/session/open` (shortcuts + greeting + pageConfig).
234
+ ### AI-Callable URLs (Deep Links)
235
+
236
+ Rover can be triggered via URL query parameters, turning any page into an AI-callable endpoint.
237
+
238
+ | Option | Type | Default | Description |
239
+ |---|---|---|---|
240
+ | `deepLink.enabled` | `boolean` | `false` | Enable URL-triggered Rover |
241
+ | `deepLink.promptParam` | `string` | `'rover'` | Query parameter for natural-language prompts |
242
+ | `deepLink.shortcutParam` | `string` | `'rover_shortcut'` | Query parameter for shortcut IDs |
243
+ | `deepLink.consume` | `boolean` | `true` | Strip deep link params from URL after reading |
244
+
245
+ **Prompt deep link** — pass a natural-language instruction:
246
+
247
+ ```
248
+ https://example.com?rover=book%20a%20flight
249
+ ```
250
+
251
+ **Shortcut deep link** — invoke a pre-defined flow by ID:
252
+
253
+ ```
254
+ https://example.com?rover_shortcut=checkout_flow
255
+ ```
256
+
257
+ For AI or CLI-triggered entrypoints, prefer exact shortcut IDs for repeatable flows.
258
+
259
+ When a site key or session token is used, Rover fetches cloud site config via `/v2/rover/session/open` (shortcuts + greeting + voice + pageConfig).
161
260
  If the same field exists in both cloud config and boot config, boot config wins.
261
+ `deepLink` is boot/runtime only and is not persisted in cloud site config.
162
262
 
163
263
  If you enable `tools.web.scrapeMode: 'on_demand'`, use a site key capability profile that includes cloud scrape support.
164
264
 
@@ -301,6 +401,9 @@ Load your self-hosted `embed.js` instead of the CDN version:
301
401
 
302
402
  ## Links
303
403
 
404
+ - [GitHub](https://github.com/rtrvr-ai/rover)
304
405
  - [Integration Guide](https://github.com/rtrvr-ai/rover/blob/main/docs/INTEGRATION.md)
305
406
  - [Rover Workspace](https://rover.rtrvr.ai/workspace) — generate site keys and install snippets
306
407
  - [Website](https://www.rtrvr.ai/rover)
408
+ - [Documentation](https://www.rtrvr.ai/rover/docs)
409
+ - [Discord](https://rtrvr.ai/discord)