getobsrv 0.10.0 → 0.12.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
@@ -90,6 +90,24 @@ sit in half a window, and for agent captures. The native pane stays loaded while
90
90
  hidden, so the URL bar, back/forward and link clicks keep working exactly as
91
91
  they do side by side.
92
92
 
93
+ ### Tabs
94
+
95
+ The strip above the URL bar holds several independent sessions at once. A tab is
96
+ its own URL, its own screen preset and panel profile, its own view mode and pan,
97
+ and its own page state — so the same page on a 1366×768 laptop and on a budget
98
+ Android sit in two tabs and you flip between them without either one reloading.
99
+
100
+ `Cmd+T` opens a tab, `Cmd+W` closes one, `Cmd+1`–`Cmd+8` select by position and
101
+ `Cmd+9` selects the last. Closing the last tab leaves a fresh blank one rather
102
+ than closing the window. Tabs come back on relaunch — their URLs, their screens
103
+ and which one was in front.
104
+
105
+ Every tab is two Chromium renderers (a native pane and an offscreen 1x surface),
106
+ so the count is capped: 12 by default, settable from 2 to 32 in Settings. At the
107
+ cap the new-tab button dims and says why. Background tabs stay loaded and keep
108
+ their scroll position, but stop rasterising until you return to them — the cost
109
+ of a background tab is memory, not GPU.
110
+
93
111
  ## Agent & CI use
94
112
 
95
113
  The same rendering pipeline runs headless — no window, JSON on stdout, humans
@@ -144,6 +162,15 @@ navigates unless you pass `url`, so the scroll survives the shutter. A live
144
162
  `navigated` field says which happened — and navigating is a fresh load, which
145
163
  starts at the top of the page.
146
164
 
165
+ **Tabs and the agent.** `obsrv_drive` and a live `obsrv_snap` act on the tab
166
+ that is in front, resolved per command rather than fixed when the drive starts —
167
+ a command that quietly succeeded on a tab you could not see would not surface
168
+ until the drive ended. Both report `tabId` and `tabIndex`, so an agent that
169
+ cares can compare them across calls and notice you switched tabs under it. While
170
+ Agent control is on, the driven tab carries a neutral rule on its leading edge
171
+ that brightens for ~3 s on each command, so it is visible which session is being
172
+ driven. An agent cannot open, close or switch tabs; that stays yours.
173
+
147
174
  A headless `snap` returns `settled: true` when the page went paint-quiet and
148
175
  every pixel painted. `settled: false` is still a usable capture, not a
149
176
  failure — a page that kept animating, or one whose repaint never completed,
@@ -220,3 +247,10 @@ belongs to an unrelated package.
220
247
  hides its scroller in a shadow root has no escape hatch.
221
248
  - Frame delivery has no renderer-side backpressure mailbox (see plan header); at 30 fps
222
249
  with dirty rects it has not been needed.
250
+ - Tabs are a first cut. They cannot be reordered, dragged out into another window, or
251
+ reopened after closing (no `Cmd+Shift+T`), and there is no tab overflow menu — a strip
252
+ longer than the window scrolls. An agent can only reach the tab in front: there is no
253
+ way to name another tab in `obsrv_drive`, and no way for an agent to open, close or
254
+ switch tabs at all. The URL bar's visited-URL suggestions are one window-wide list
255
+ rather than one per tab (back/forward *are* per tab), and a restored tab comes back at
256
+ the top of its page — the scroll position is not persisted.
package/out/main/cli.js CHANGED
@@ -3,7 +3,7 @@ const electron = require("electron");
3
3
  const node_fs = require("node:fs");
4
4
  const node_os = require("node:os");
5
5
  const node_path = require("node:path");
6
- const targetSource = require("./targetSource-CbJwfugi.js");
6
+ const targetSource = require("./targetSource-DlsHc-Ri.js");
7
7
  function boxDownsample(src, factor) {
8
8
  if (!Number.isInteger(factor) || factor < 1) throw new RangeError("factor must be an integer >= 1");
9
9
  const width = Math.floor(src.width / factor);