@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 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 `/v1/rover/*` under this base. |
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 `/v1/rover/session/start` (shortcuts + greeting).
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 V1 Runtime Endpoints
160
+ ## Rover V2 Runtime Endpoints
160
161
 
161
- Browser runtime calls target `https://extensionrouter.rtrvr.ai/v1/rover/*`:
162
+ Browser runtime calls target `https://extensionrouter.rtrvr.ai/v2/rover/*`:
162
163
 
163
- - `POST /session/start`
164
- - `POST /session/refresh`
165
- - `POST /run/input`
166
- - `POST /run/control`
167
- - `POST /tab/event`
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 /run/input`.
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 /tab/event` stale/missing run is non-fatal (`decision='stale_run'`).
181
- - Cross-registrable navigation preflight is resilient: if `/tab/event` is unavailable, Rover falls back to local policy (in-scope targets follow `navigation.crossHostPolicy`, default `same_tab`; out-of-scope targets follow `externalNavigationPolicy`).
182
- - External intent routing: `/context/external` uses `read_context` (read/navigation-context prompts) or `act` (mutation prompts). Navigation-only external opens are represented by `/tab/event` + external placeholder tab handling.
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
- - Auto-resume only runs for validated handoff/reload contexts with a ready `rvrsess_*` token; otherwise resume is safely blocked and cleared.
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
- | `legacy_checkpoint_blocked` | `{ action, status }` | Legacy checkpoint browser path blocked in Rover V1 |
245
+ | `checkpoint_token_missing` | `{ action, status }` | Legacy checkpoint browser path blocked |
245
246
 
246
247
  ## Content Security Policy (CSP)
247
248