@rtrvr-ai/rover 3.0.0 → 4.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 +291 -12
- package/dist/agentDiscovery.d.ts +304 -0
- package/dist/agentDiscovery.js +1040 -0
- package/dist/embed.js +3706 -1562
- package/dist/index.d.ts +18 -1
- package/dist/ownerInstall.d.ts +150 -0
- package/dist/ownerInstall.js +340 -0
- package/dist/previewBootstrap.d.ts +36 -0
- package/dist/previewBootstrap.js +273 -0
- package/dist/rolls-cli.mjs +312 -0
- package/dist/rover.js +3706 -1562
- package/dist/worker/rover-worker.js +11 -11
- package/package.json +23 -1
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ Embed on websites, browser extensions, Electron apps, or any DOM environment.
|
|
|
13
13
|
|
|
14
14
|
You need an rtrvr.ai account with available credits. Free accounts get 250 credits/month. [Sign up or manage your plan](https://www.rtrvr.ai/cloud?view=pricing).
|
|
15
15
|
|
|
16
|
+
Before you test Rover on arbitrary websites, get your site config from Workspace first. Hosted Preview is the only path that does not require Workspace config.
|
|
17
|
+
|
|
16
18
|
## Quick Start (Script Tag)
|
|
17
19
|
|
|
18
20
|
Add this snippet before `</body>` on any page:
|
|
@@ -59,6 +61,7 @@ Or use the single-tag shorthand with data attributes:
|
|
|
59
61
|
<script src="https://rover.rtrvr.ai/embed.js"
|
|
60
62
|
data-site-id="YOUR_SITE_ID"
|
|
61
63
|
data-public-key="pk_site_YOUR_PUBLIC_KEY"
|
|
64
|
+
data-session-token="rvrsess_YOUR_SHORT_LIVED_SESSION_TOKEN"
|
|
62
65
|
data-allowed-domains="yourdomain.com"
|
|
63
66
|
data-domain-scope-mode="registrable_domain">
|
|
64
67
|
</script>
|
|
@@ -66,12 +69,276 @@ Or use the single-tag shorthand with data attributes:
|
|
|
66
69
|
|
|
67
70
|
Use `data-domain-scope-mode="host_only"` to require exact host matches. Plain entries such as `example.com` become exact-host rules in `host_only` mode. In the default `registrable_domain` mode, plain entries match the apex host and its subdomains, while `*.example.com` matches subdomains only.
|
|
68
71
|
|
|
72
|
+
For temporary preview sessions, `data-session-token` can bootstrap Rover without a `publicKey`. If you also have a `sessionId`, add `data-session-id` for a stable runtime boundary.
|
|
73
|
+
|
|
69
74
|
Common patterns:
|
|
70
75
|
|
|
71
76
|
- `allowedDomains: ['example.com']` with `registrable_domain` allows `example.com` and all subdomains.
|
|
72
77
|
- `allowedDomains: ['*.example.com']` allows subdomains only, not the apex host.
|
|
73
78
|
- `allowedDomains: ['app.example.com']` with `registrable_domain` allows `app.example.com` and its subdomains, but not sibling hosts.
|
|
74
|
-
- `allowedDomains: ['example.com']` with `host_only` allows only the exact host `example.com
|
|
79
|
+
- `allowedDomains: ['example.com']` with `host_only` allows only the exact host `example.com`; sibling subdomains are blocked unless you explicitly list them.
|
|
80
|
+
|
|
81
|
+
## Preview Helpers
|
|
82
|
+
|
|
83
|
+
The SDK also exports generic helper utilities for live demos and previews:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import {
|
|
87
|
+
attachLaunch,
|
|
88
|
+
createRoverAgentCardJson,
|
|
89
|
+
createRoverAgentDiscoveryTags,
|
|
90
|
+
createRoverBookmarklet,
|
|
91
|
+
createRoverConsoleSnippet,
|
|
92
|
+
createRoverOwnerInstallBundle,
|
|
93
|
+
createRoverServiceDescLinkHeader,
|
|
94
|
+
createRoverScriptTagSnippet,
|
|
95
|
+
} from '@rtrvr-ai/rover';
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Use `createRoverConsoleSnippet(...)` and `createRoverBookmarklet(...)` to generate one-click bootstrap payloads, and `attachLaunch(...)` when you want to attach a pre-created launch from code.
|
|
99
|
+
|
|
100
|
+
Before you use any of these helpers on another website:
|
|
101
|
+
|
|
102
|
+
1. Open Rover Workspace.
|
|
103
|
+
2. Create or rotate a site key so Workspace reveals the full `pk_site_*` value.
|
|
104
|
+
3. Copy the **test config JSON** from Workspace.
|
|
105
|
+
4. Either paste that JSON into the Rover website's "Try on Other Sites" tool, or pass the same values into the SDK helpers below.
|
|
106
|
+
|
|
107
|
+
### Which helper to use
|
|
108
|
+
|
|
109
|
+
| Path | What you need | Best for | Persistence |
|
|
110
|
+
|---|---|---|---|
|
|
111
|
+
| Hosted Preview | Signed-in URL + prompt | Rover-managed demos | Temporary preview session |
|
|
112
|
+
| Preview Helper | Workspace test config JSON or hosted handoff | Multi-page desktop demos | Re-injects after reload/navigation |
|
|
113
|
+
| Console | Workspace test config JSON + generated snippet | Fast DevTools demos | Current page only |
|
|
114
|
+
| Bookmarklet | Workspace test config JSON + generated bookmarklet | Drag-and-click demos | Current page only |
|
|
115
|
+
| Production install | Workspace install snippet | Real site install | Persistent |
|
|
116
|
+
|
|
117
|
+
- `createRoverConsoleSnippet(...)`
|
|
118
|
+
Best for desktop demos, debugging, and screen-sharing when you can paste into DevTools.
|
|
119
|
+
- `createRoverBookmarklet(...)`
|
|
120
|
+
Best for quick one-click demos across many pages, with the same current-page limitations as manual injection.
|
|
121
|
+
- `createRoverScriptTagSnippet(...)`
|
|
122
|
+
Best for generating an actual snippet from known config values such as Workspace `siteId` and `publicKey`.
|
|
123
|
+
- `createRoverOwnerInstallBundle(...)`
|
|
124
|
+
Best for canonical owner-facing install output when you need a body-safe runtime snippet plus separate head discovery HTML, `rover-site.json`, `agent-card.json`, and optional `llms.txt`.
|
|
125
|
+
- `createRoverAgentCardJson(...)`, `createRoverAgentDiscoveryTags(...)`, `createRoverServiceDescLinkHeader(...)`
|
|
126
|
+
Best for publishing source-visible discovery metadata so arbitrary agents can find Rover skills before falling back to DOM automation.
|
|
127
|
+
- `attachLaunch(...)`
|
|
128
|
+
Best when you already created a launch elsewhere and want Rover to attach to it after boot.
|
|
129
|
+
|
|
130
|
+
### Example: console snippet from Workspace config
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { createRoverConsoleSnippet } from '@rtrvr-ai/rover';
|
|
134
|
+
|
|
135
|
+
const snippet = createRoverConsoleSnippet({
|
|
136
|
+
siteId: 'site_123',
|
|
137
|
+
publicKey: 'pk_site_123',
|
|
138
|
+
siteKeyId: 'key_123',
|
|
139
|
+
allowedDomains: ['example.com'],
|
|
140
|
+
domainScopeMode: 'registrable_domain',
|
|
141
|
+
apiBase: 'https://agent.rtrvr.ai',
|
|
142
|
+
openOnInit: true,
|
|
143
|
+
mode: 'full',
|
|
144
|
+
allowActions: true,
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Example: bookmarklet from Workspace config
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
import { createRoverBookmarklet } from '@rtrvr-ai/rover';
|
|
152
|
+
|
|
153
|
+
const bookmarklet = createRoverBookmarklet({
|
|
154
|
+
siteId: 'site_123',
|
|
155
|
+
publicKey: 'pk_site_123',
|
|
156
|
+
siteKeyId: 'key_123',
|
|
157
|
+
allowedDomains: ['example.com'],
|
|
158
|
+
domainScopeMode: 'registrable_domain',
|
|
159
|
+
apiBase: 'https://agent.rtrvr.ai',
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Example: production script-tag snippet from Workspace config
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
import { createRoverScriptTagSnippet } from '@rtrvr-ai/rover';
|
|
167
|
+
|
|
168
|
+
const snippet = createRoverScriptTagSnippet({
|
|
169
|
+
siteId: 'site_123',
|
|
170
|
+
publicKey: 'pk_site_123',
|
|
171
|
+
siteKeyId: 'key_123',
|
|
172
|
+
allowedDomains: ['example.com'],
|
|
173
|
+
domainScopeMode: 'registrable_domain',
|
|
174
|
+
apiBase: 'https://agent.rtrvr.ai',
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Example: canonical owner install bundle
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
import { createRoverOwnerInstallBundle } from '@rtrvr-ai/rover';
|
|
182
|
+
|
|
183
|
+
const bundle = createRoverOwnerInstallBundle({
|
|
184
|
+
bootConfig: {
|
|
185
|
+
siteId: 'site_123',
|
|
186
|
+
publicKey: 'pk_site_123',
|
|
187
|
+
siteKeyId: 'key_123',
|
|
188
|
+
allowedDomains: ['example.com'],
|
|
189
|
+
domainScopeMode: 'registrable_domain',
|
|
190
|
+
},
|
|
191
|
+
discovery: {
|
|
192
|
+
siteId: 'site_123',
|
|
193
|
+
siteUrl: 'https://example.com/',
|
|
194
|
+
siteName: 'Example Store',
|
|
195
|
+
roverSiteUrl: '/.well-known/rover-site.json',
|
|
196
|
+
agentCardUrl: '/.well-known/agent-card.json',
|
|
197
|
+
llmsUrl: '/llms.txt',
|
|
198
|
+
},
|
|
199
|
+
emitLlmsTxt: true,
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
bundle.bodyInstallHtml; // paste before </body>
|
|
203
|
+
bundle.headDiscoveryHtml; // place in <head> or managed head custom code
|
|
204
|
+
bundle.roverSiteJson; // publish at /.well-known/rover-site.json
|
|
205
|
+
bundle.agentCardJson; // publish at /.well-known/agent-card.json
|
|
206
|
+
bundle.serviceDescLinkHeader;
|
|
207
|
+
bundle.llmsTxt;
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Example: attach a pre-created launch
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
import { attachLaunch, boot } from '@rtrvr-ai/rover';
|
|
214
|
+
|
|
215
|
+
boot({
|
|
216
|
+
siteId: 'preview_site',
|
|
217
|
+
sessionToken: 'rvrsess_short_lived_token',
|
|
218
|
+
allowedDomains: ['example.com'],
|
|
219
|
+
domainScopeMode: 'host_only',
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
attachLaunch({
|
|
223
|
+
requestId: 'rl_123',
|
|
224
|
+
attachToken: 'attach_123',
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Two config sources
|
|
229
|
+
|
|
230
|
+
Use one of these sources for the helper functions above:
|
|
231
|
+
|
|
232
|
+
- **Workspace production config**
|
|
233
|
+
Persistent `siteId`, `publicKey`, optional `siteKeyId`, `allowedDomains`, and `domainScopeMode` from Rover Workspace.
|
|
234
|
+
- **Hosted preview config**
|
|
235
|
+
Short-lived preview/runtime values produced by Rover Instant Preview on the website or by your own preview service.
|
|
236
|
+
|
|
237
|
+
Get Workspace config from:
|
|
238
|
+
|
|
239
|
+
- [https://www.rtrvr.ai/rover/workspace](https://www.rtrvr.ai/rover/workspace)
|
|
240
|
+
- [https://rover.rtrvr.ai/workspace](https://rover.rtrvr.ai/workspace)
|
|
241
|
+
|
|
242
|
+
If you want the exact human walkthrough instead of jumping straight into code:
|
|
243
|
+
|
|
244
|
+
- website guide: [https://www.rtrvr.ai/rover/docs/try-on-other-sites](https://www.rtrvr.ai/rover/docs/try-on-other-sites)
|
|
245
|
+
- repo guide: [../../docs/TRY_ON_OTHER_SITES.md](../../docs/TRY_ON_OTHER_SITES.md)
|
|
246
|
+
- one-click helper path: use the website tool's `Open target with helper` action after pasting the Workspace config
|
|
247
|
+
|
|
248
|
+
If you want a public extension that can use either config source, see the Preview Helper app:
|
|
249
|
+
|
|
250
|
+
- [https://github.com/rtrvr-ai/rover/tree/main/apps/preview-helper](https://github.com/rtrvr-ai/rover/tree/main/apps/preview-helper)
|
|
251
|
+
- [https://www.rtrvr.ai/rover/docs/instant-preview-api](https://www.rtrvr.ai/rover/docs/instant-preview-api)
|
|
252
|
+
|
|
253
|
+
### Agent Discovery Publishing
|
|
254
|
+
|
|
255
|
+
Use the new discovery helpers when you want generic agents to see explicit Rover skills before they start clicking through the DOM:
|
|
256
|
+
|
|
257
|
+
```ts
|
|
258
|
+
import {
|
|
259
|
+
createRoverAgentCardJson,
|
|
260
|
+
createRoverAgentDiscoveryTags,
|
|
261
|
+
createRoverServiceDescLinkHeader,
|
|
262
|
+
} from '@rtrvr-ai/rover';
|
|
263
|
+
|
|
264
|
+
const agentCardJson = createRoverAgentCardJson({
|
|
265
|
+
siteUrl: 'https://example.com/',
|
|
266
|
+
siteName: 'Example Store',
|
|
267
|
+
shortcuts: [
|
|
268
|
+
{
|
|
269
|
+
id: 'start_checkout',
|
|
270
|
+
label: 'Start Checkout',
|
|
271
|
+
prompt: 'start checkout',
|
|
272
|
+
description: 'Launch the checkout flow directly.',
|
|
273
|
+
tags: ['checkout', 'commerce'],
|
|
274
|
+
examples: ['Start checkout for the current cart.'],
|
|
275
|
+
sideEffect: 'transactional',
|
|
276
|
+
requiresConfirmation: true,
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
const discoveryTags = createRoverAgentDiscoveryTags({
|
|
282
|
+
siteUrl: 'https://example.com/',
|
|
283
|
+
siteName: 'Example Store',
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
const linkHeader = createRoverServiceDescLinkHeader({
|
|
287
|
+
agentCardUrl: '/.well-known/agent-card.json',
|
|
288
|
+
llmsUrl: '/llms.txt',
|
|
289
|
+
});
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Recommended rollout:
|
|
293
|
+
|
|
294
|
+
1. Serve `roverSiteJson` at `/.well-known/rover-site.json`.
|
|
295
|
+
2. Serve `agentCardJson` at `/.well-known/agent-card.json`.
|
|
296
|
+
3. Add `discoveryTags` near the Rover snippet in page source.
|
|
297
|
+
4. Add the `Link` header generated by `createRoverServiceDescLinkHeader(...)`.
|
|
298
|
+
|
|
299
|
+
### Hosted preview handoff behavior
|
|
300
|
+
|
|
301
|
+
The open-source helper extension understands hosted preview handoff URLs that include:
|
|
302
|
+
|
|
303
|
+
- `rover_preview_id`
|
|
304
|
+
- `rover_preview_token`
|
|
305
|
+
- `rover_preview_api`
|
|
306
|
+
|
|
307
|
+
When those are present, the helper can fetch the short-lived preview config from the hosted Rover API and reconnect it across navigation.
|
|
308
|
+
|
|
309
|
+
### Security notes
|
|
310
|
+
|
|
311
|
+
- `pk_site_*` values are Workspace install credentials for a real site.
|
|
312
|
+
- `rvrsess_*` values are short-lived runtime session credentials.
|
|
313
|
+
- Preview tokens are demo credentials and should be treated as ephemeral.
|
|
314
|
+
- Do not treat preview tokens as a replacement for production Workspace site keys.
|
|
315
|
+
- Keep preview or helper injections scoped to the intended host with `allowedDomains` and the right `domainScopeMode`.
|
|
316
|
+
- Generic `publicKey` config is the normal Workspace path. `sessionToken` is the temporary preview/runtime path.
|
|
317
|
+
|
|
318
|
+
### Troubleshooting
|
|
319
|
+
|
|
320
|
+
- **`This API key is missing capability: roverEmbed`**
|
|
321
|
+
Your Workspace key is not embed-enabled. Rotate or create an embed-ready key, then rebuild the snippet or bookmarklet from the fresh test config JSON.
|
|
322
|
+
- **`React has blocked a javascript: URL`**
|
|
323
|
+
Delete any old Rover bookmarklet and recreate it from the latest Rover Live Test page. The bookmarklet must be dragged from Rover's dedicated drag control, not clicked on the Rover page itself.
|
|
324
|
+
- **Console or Bookmarklet worked once, then stopped**
|
|
325
|
+
Those are current-page-only methods. A full reload drops the injected JavaScript.
|
|
326
|
+
- **A site still blocks Rover after you generated valid output**
|
|
327
|
+
Some sites enforce strict CSP or reload aggressively. Use the Preview Helper or Hosted Preview instead.
|
|
328
|
+
- **`Open hosted shell` does nothing**
|
|
329
|
+
Hosted Preview should open Rover's dedicated hosted viewer route, not the launcher page.
|
|
330
|
+
|
|
331
|
+
### Hosted playground
|
|
332
|
+
|
|
333
|
+
If you want the full managed preview flow, including preview creation and Workspace handoff, use the hosted website:
|
|
334
|
+
|
|
335
|
+
- [https://www.rtrvr.ai/rover/instant-preview](https://www.rtrvr.ai/rover/instant-preview)
|
|
336
|
+
|
|
337
|
+
More architecture detail:
|
|
338
|
+
|
|
339
|
+
- [Instant Preview architecture](https://github.com/rtrvr-ai/rover/blob/main/docs/INSTANT_PREVIEW.md)
|
|
340
|
+
- [Hosted preview API docs](https://www.rtrvr.ai/rover/docs/instant-preview-api)
|
|
341
|
+
- [Hosted preview OpenAPI spec](https://raw.githubusercontent.com/rtrvr-ai/rtrvr-cloud-backend/main/docs/rover-instant-preview.openapi.yaml)
|
|
75
342
|
|
|
76
343
|
## npm Install
|
|
77
344
|
|
|
@@ -146,7 +413,7 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
146
413
|
| `visitor` | `{ name?: string; email?: string }` | — | Optional visitor profile for greeting personalization. Recommended flow is async updates via `identify(...)` after login/user hydration. |
|
|
147
414
|
| `apiBase` | `string` | `https://agent.rtrvr.ai` | Optional API base override. Rover uses `/v2/rover/*` under this base. |
|
|
148
415
|
| `allowedDomains` | `string[]` | `[]` | Hostnames or patterns where Rover may operate. In `registrable_domain`, plain `example.com` covers the apex host and subdomains. |
|
|
149
|
-
| `domainScopeMode` | `'registrable_domain' \| 'host_only'` | `'registrable_domain'` | How Rover interprets plain `allowedDomains` entries: `registrable_domain` = apex + subdomains, `host_only` = exact host only. |
|
|
416
|
+
| `domainScopeMode` | `'registrable_domain' \| 'host_only'` | `'registrable_domain'` | How Rover interprets plain `allowedDomains` entries: `registrable_domain` = apex + subdomains, `host_only` = exact host only unless you explicitly allow more hosts. |
|
|
150
417
|
| `externalNavigationPolicy` | `'open_new_tab_notice' \| 'block' \| 'allow'` | `'open_new_tab_notice'` | External navigation policy |
|
|
151
418
|
| `navigation.crossHostPolicy` | `'same_tab' \| 'open_new_tab'` | `'same_tab'` | In-scope cross-host navigation policy |
|
|
152
419
|
| `mode` | `'full' \| 'safe'` | `'full'` | Runtime mode |
|
|
@@ -235,11 +502,12 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
235
502
|
| `ui.mascot.disabled` | `boolean` | `false` | Disable mascot video |
|
|
236
503
|
| `ui.mascot.mp4Url` | `string` | default | Custom mascot MP4 URL |
|
|
237
504
|
| `ui.mascot.webmUrl` | `string` | default | Custom mascot WebM URL |
|
|
238
|
-
| `ui.
|
|
505
|
+
| `ui.mascot.soundEnabled` | `boolean` | `false` | Owner gate for mascot sound. Rover keeps mascot audio unavailable unless this is explicitly `true`. |
|
|
506
|
+
| `ui.muted` | `boolean` | `true` | Initial mute state only when mascot sound is enabled. Visitor preference is stored per Rover site after they toggle sound. |
|
|
239
507
|
| `ui.thoughtStyle` | `'concise_cards' \| 'minimal'` | `'concise_cards'` | Thought rendering style |
|
|
240
508
|
| `ui.panel.resizable` | `boolean` | `true` | Enables desktop freeform resizing plus phone/tablet snap-height resizing with per-device memory |
|
|
241
509
|
| `ui.showTaskControls` | `boolean` | `true` | Show new/end task controls |
|
|
242
|
-
| `ui.shortcuts` | `RoverShortcut[]` | `[]` | Suggested journeys (max 100 stored, max 12 rendered by default; lower site-key policy caps are enforced) |
|
|
510
|
+
| `ui.shortcuts` | `RoverShortcut[]` | `[]` | Suggested journeys (max 100 stored, max 12 rendered by default; lower site-key policy caps are enforced). Shortcuts can also publish agent-facing metadata such as `tags`, `examples`, `inputSchema`, `outputSchema`, `sideEffect`, and `requiresConfirmation`. |
|
|
243
511
|
| `ui.greeting` | `{ text?, delay?, duration?, disabled? }` | — | Greeting bubble config (`{name}` token supported) |
|
|
244
512
|
| `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. |
|
|
245
513
|
|
|
@@ -252,7 +520,8 @@ const RoverWidget = dynamic(() => import('./RoverWidget'), { ssr: false });
|
|
|
252
520
|
| `tools.web.scrapeMode` | `'off' \| 'on_demand'` | `'off'` | On-demand external tab scrape mode |
|
|
253
521
|
| `tools.web.allowDomains` | `string[]` | `[]` | External context allowlist |
|
|
254
522
|
| `tools.web.denyDomains` | `string[]` | `[]` | External context denylist |
|
|
255
|
-
| `tools.client` | `ClientToolDefinition[]` | `[]` | Runtime-registered client tools |
|
|
523
|
+
| `tools.client` | `ClientToolDefinition[]` | `[]` | Runtime-registered client tools. Tool definitions can include `title`, `outputSchema`, and `annotations` (`whenToUse`, `whyUse`, `examples`, `sideEffect`, `requiresConfirmation`) to improve model tool selection and discovery-card quality. |
|
|
524
|
+
| `agentDiscovery` | `{ enabled?, siteName?, description?, version?, siteUrl?, agentCardUrl?, roverSiteUrl?, llmsUrl?, hostSurfaceSelector?, preferExecution?, discoverySurface?, additionalSkills? }` | — | Optional overrides for Rover's generated discovery surfaces. `rover-site.json` is the authoritative rich profile, `agent-card.json` is the interop card, and `discoverySurface.beaconLabel` now feeds the visible seed/presence CTA text in production. Legacy `visibleCue` / `visibleCueLabel` remain compatibility inputs only. |
|
|
256
525
|
| `pageConfig` | `RoverPageCaptureConfig` | — | Optional per-site page-capture overrides such as `disableAutoScroll`, settle timing, and sparse-tree retry settings |
|
|
257
526
|
|
|
258
527
|
### AI-Callable URLs (Deep Links)
|
|
@@ -261,7 +530,7 @@ Rover can be triggered via URL query parameters, turning any page into an AI-cal
|
|
|
261
530
|
|
|
262
531
|
| Option | Type | Default | Description |
|
|
263
532
|
|---|---|---|---|
|
|
264
|
-
| `deepLink.enabled` | `boolean` | `false` |
|
|
533
|
+
| `deepLink.enabled` | `boolean` | derived from `siteConfig.aiAccess.enabled` when available, otherwise `false` | Advanced manual override for URL-triggered Rover |
|
|
265
534
|
| `deepLink.promptParam` | `string` | `'rover'` | Query parameter for natural-language prompts |
|
|
266
535
|
| `deepLink.shortcutParam` | `string` | `'rover_shortcut'` | Query parameter for shortcut IDs |
|
|
267
536
|
| `deepLink.consume` | `boolean` | `true` | Strip deep link params from URL after reading |
|
|
@@ -280,9 +549,9 @@ https://example.com?rover_shortcut=checkout_flow
|
|
|
280
549
|
|
|
281
550
|
For AI or CLI-triggered entrypoints, prefer exact shortcut IDs for repeatable flows.
|
|
282
551
|
|
|
283
|
-
When a site key or session token is used, Rover fetches cloud site config via `/v2/rover/session/open` (shortcuts +
|
|
552
|
+
When a site key or session token is used, Rover fetches cloud site config via `/v2/rover/session/open` (shortcuts + `businessType` + sparse `experience` overrides + legacy voice compatibility + `aiAccess` + `pageConfig`).
|
|
284
553
|
If the same field exists in both cloud config and boot config, boot config wins.
|
|
285
|
-
`
|
|
554
|
+
`siteConfig.aiAccess.enabled` is the canonical owner-facing launch switch persisted from Workspace/Webflow. `deepLink` stays boot/runtime only for advanced manual overrides such as custom param names, explicit enable/disable, or disabling URL param consumption.
|
|
286
555
|
|
|
287
556
|
If you enable `tools.web.scrapeMode: 'on_demand'`, use a site key capability profile that includes cloud scrape support.
|
|
288
557
|
|
|
@@ -303,13 +572,22 @@ The source-visible marker is optional but recommended:
|
|
|
303
572
|
<script type="application/agent+json">{"task":"https://agent.rtrvr.ai/v1/tasks"}</script>
|
|
304
573
|
```
|
|
305
574
|
|
|
575
|
+
For stronger pre-task discovery, publish `/.well-known/rover-site.json` as Rover's authoritative rich profile, publish `/.well-known/agent-card.json` as the interop card, add a `Link: </.well-known/agent-card.json>; rel="service-desc"` header, and include inline discovery tags generated by `createRoverAgentDiscoveryTags(...)`.
|
|
576
|
+
|
|
306
577
|
```http
|
|
307
578
|
POST https://agent.rtrvr.ai/v1/tasks
|
|
308
579
|
Content-Type: application/json
|
|
309
580
|
|
|
310
|
-
{
|
|
581
|
+
{
|
|
582
|
+
"url": "https://www.rtrvr.ai",
|
|
583
|
+
"goal": "Get me the latest blog post",
|
|
584
|
+
"capabilityId": "latest_blog_post",
|
|
585
|
+
"accept": { "modes": ["text", "json"] }
|
|
586
|
+
}
|
|
311
587
|
```
|
|
312
588
|
|
|
589
|
+
Compatibility aliases such as `{ "url": "...", "prompt": "..." }` and `{ "url": "...", "shortcutId": "..." }` still work, but the richer task envelope is the canonical contract.
|
|
590
|
+
|
|
313
591
|
Callers may also provide structured visiting-agent metadata:
|
|
314
592
|
|
|
315
593
|
```http
|
|
@@ -318,7 +596,7 @@ Content-Type: application/json
|
|
|
318
596
|
|
|
319
597
|
{
|
|
320
598
|
"url": "https://www.rtrvr.ai",
|
|
321
|
-
"
|
|
599
|
+
"goal": "Get me the latest blog post",
|
|
322
600
|
"agent": {
|
|
323
601
|
"key": "gpt-5.4-demo-agent",
|
|
324
602
|
"name": "GPT-5.4 Demo Agent",
|
|
@@ -358,13 +636,13 @@ Rover deep links like `?rover=` and `?rover_shortcut=` remain the simple browser
|
|
|
358
636
|
|
|
359
637
|
Rover normalizes visiting-agent attribution in this order:
|
|
360
638
|
|
|
361
|
-
1. verified signal
|
|
639
|
+
1. verified signed signal
|
|
362
640
|
2. explicit `agent` object on public task creation or handoffs
|
|
363
641
|
3. heuristic headers such as `User-Agent`, `Signature-Agent`, `Signature`, `Signature-Input`, and `X-RTRVR-Client-Id`
|
|
364
642
|
4. advanced local fallbacks such as RoverBook `identityResolver`
|
|
365
643
|
5. anonymous fallback
|
|
366
644
|
|
|
367
|
-
|
|
645
|
+
Trust tiers are `verified_signed`, `signed_directory_only`, `self_reported`, `heuristic`, and `anonymous`. Unsigned headers never escalate above `heuristic`.
|
|
368
646
|
|
|
369
647
|
### Cross-site workflows and handoffs
|
|
370
648
|
|
|
@@ -439,6 +717,7 @@ rover.send('Hello');
|
|
|
439
717
|
| `newTask(options?)` | Start a new task, clearing context |
|
|
440
718
|
| `endTask(options?)` | End the current task |
|
|
441
719
|
| `getState()` | Get current runtime state |
|
|
720
|
+
| `getAgentCard()` | Build the current Rover capability card from live shortcuts, client tools, and WebMCP metadata |
|
|
442
721
|
| `update(config)` | Update configuration without rebooting |
|
|
443
722
|
| `registerTool(def, handler)` | Register a client-side tool |
|
|
444
723
|
| `requestSigned(url, init?)` | Issue a fetch signed with the current Rover session token and site/session headers |
|