@ai-ecoverse/slicc-bios 1.42.7 → 1.42.9

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
@@ -346,6 +346,14 @@ Programs in the kernel drive a browser over the Chrome DevTools Protocol: `playw
346
346
  - **Requests from protected documents:** a request whose URL, document, frame, initiator, `Referer` or `Origin` is protected never reaches the program. The guard continues its `Fetch` pause itself, drops its `Network` events, and refuses its bodies (`Network.getResponseBody`, `getRequestPostData`, `Fetch.getResponseBody` and the like). Bodies, `replayXHR` and `Fetch` replies for a request the guard hasn't seen are refused too. Extra-info events that come before their request wait up to 2 s for it, then are dropped.
347
347
  - **Flat sessions only:** `Target.attachToTarget` and `Target.setAutoAttach` need `flatten: true`. `Target.sendMessageToTarget`, `Target.attachToBrowserTarget` and `Target.exposeDevToolsProtocol` are refused, so no command can be tunnelled past the guard.
348
348
 
349
+ **Sign-in tabs are held for life (#754).** A sign-in popup shows its token or code in its URL and on the IdP's pages, and the guard can't scrub a page's own content. So the owner tab holds every sign-in tab from the moment it opens. A held tab is never listed, attached, auto-attached or reported to a program on any origin, until it closes. Its events, `urlFragment` included, never reach the program.
350
+ - **Seven's own sign-in:** the popup opens on `about:blank#slicc-sign-in-<nonce>`. bios asks the owner over the `slicc-held` BroadcastChannel to hold it. The owner finds that target by its marker URL on each browser host, the extension and slicc-node, holds it, and only then is the popup sent to the IdP. The owner answers `held` once it has held the tab on every listed host, `none` when no host is listed, and `unheld` otherwise, including when a listed host can't be opened. On `unheld`, on `none` while bios sees a host, or on no answer within 6 s while a host is connected, the sign-in stops before the IdP and says so; it never goes on unheld. On `none`, the sign-in goes on, and the owner keeps it as in flight for 11 minutes (in `localStorage`, `slicc-os.sign-in-flight`, so a reload keeps it). Before any program gets a browser connection, the owner sweeps every host: it holds sign-in tabs still on `about:blank`, and while a sign-in is in flight, every page a protected page opened. So a host that connects in the middle of a sign-in never sees its tab.
351
+ - **The guard decides by itself, too:** a page that a held tab opened is held, on any URL, and so are its own popups in turn, and so are the frames and workers of a held tab (`parentId`). A page seven (or another protected page) opened with opener access (`canAccessOpener`), or that is still on `about:blank`, is held the first time any guard sees it.
352
+ - **Other sign-in tabs:** a watcher in the owner tab holds every page that a protected page (seven or the vault) opened and that is still on `about:blank`, and a popup that a held tab opens, such as the IdP's own. **Through slicc-node** it connects when the owner boots and takes target events, so it holds an unmarked popup from its creation, before any program has connected. **Through slicc-extension** it only polls every 250 ms once a program or a sign-in needs the browser, and the extension reports no opener access, so only marked popups are held reliably there: an unmarked popup that leaves `about:blank` before the next poll can be missed, and a program could then list it, URL and fragment included (a known gap). Seven's own Adobe sign-in carries the marker. The agent's MCP OAuth and device-code popups carry it only from the slicc-agent release with #550, which isn't pinned yet.
353
+ - **Kept:** held tab ids are kept in `localStorage` (`slicc-os.held-targets`, the 32 most recently held or seen again), so a reload of the owner keeps them.
354
+ - **The watcher's connections:** on slicc-extension it connects only once a program or a sign-in needs the browser. On slicc-node it connects when the owner boots, so an owner boot takes slicc-node's browser from another page driving it through the same slicc-node (a known, functional only). If another page then takes it back, the watcher doesn't fight it, and reconnects when the next program connects. Before any program gets a browser connection, the owner sweeps every host; if that listing fails, the program gets no connection, and no host connection is opened for it.
355
+ - **A tab only lent seven's protection** is one that seven opened with no opener access, or that inherited it only from about:blank. It becomes drivable once it commits an ordinary `http:`, `https:` or `data:` page, whether the program saw it at creation or later. Real protected origins stay protected for life, a `blob:` of seven's origin included.
356
+
349
357
  A tab a program creates through the guard opens in the background, behind seven, unless it passes `background: false`. A program that needs seven to keep rendering should open tabs, the default, and not `newWindow`: even unfocused, a new window can cover seven's window, and Chrome then throttles seven ([slicc-extension#105](https://github.com/ai-ecoverse/slicc-extension/issues/105)).
350
358
 
351
359
  A program picks a host by adding `runtime=extension` or `runtime=proxy` to the query of the URL it opens (`playwright-cli --runtime proxy`). With no runtime, the extension goes first. The hook never derives a URL from the request: it reaches only the extension's page global and the proxy the page already checked.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-bios",
3
- "version": "1.42.7",
3
+ "version": "1.42.9",
4
4
  "description": "Slim loader that boots SLICC into OPFS and serves the UI from there",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -43,16 +43,16 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "@ai-ecoverse/slicc": "1.49.3",
46
- "@ai-ecoverse/slicc-browsers": "1.18.7",
46
+ "@ai-ecoverse/slicc-browsers": "1.18.12",
47
47
  "@ai-ecoverse/slicc-cdp": "1.41.4",
48
48
  "@ai-ecoverse/slicc-node": "2.5.1",
49
- "@ai-ecoverse/slicc-shared-web": "2.12.0",
49
+ "@ai-ecoverse/slicc-shared-web": "2.12.1",
50
50
  "@ai-ecoverse/slicc-spectrum": "1.104.1",
51
51
  "@ai-ecoverse/slicc-vault": "1.16.4",
52
52
  "@biomejs/biome": "2.5.15",
53
53
  "es-module-lexer": "3.0.4",
54
- "fake-indexeddb": "6.2.5",
55
- "lefthook": "2.2.1",
54
+ "fake-indexeddb": "6.2.6",
55
+ "lefthook": "2.2.2",
56
56
  "modern-tar": "0.8.6",
57
57
  "monocart-coverage-reports": "2.13.2",
58
58
  "semantic-release": "25.0.9",
@@ -6,7 +6,7 @@
6
6
  "": {
7
7
  "name": "slicc-bios-packages",
8
8
  "dependencies": {
9
- "@ai-ecoverse/slicc-browsers": "1.18.1",
9
+ "@ai-ecoverse/slicc-browsers": "1.18.12",
10
10
  "@ai-ecoverse/slicc-cdp": "1.41.4",
11
11
  "@ai-ecoverse/slicc-clipboard": "1.1.1",
12
12
  "@ai-ecoverse/slicc-kernel": "1.159.4",
@@ -38,9 +38,9 @@
38
38
  }
39
39
  },
40
40
  "node_modules/@ai-ecoverse/slicc-browsers": {
41
- "version": "1.18.1",
42
- "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-browsers/-/slicc-browsers-1.18.1.tgz",
43
- "integrity": "sha512-D5C6nZlDnLhnFwPUc7sYKSvzFLJLgl++DNSit/Pq4IHTC/gsDQd7aQuQmseWyJcR23ma/nQRAezPie2D+A3oHQ==",
41
+ "version": "1.18.12",
42
+ "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-browsers/-/slicc-browsers-1.18.12.tgz",
43
+ "integrity": "sha512-zAa68AbuzW435nuINYyNstXai1EsofC1Qx8F5DkNOibTiRu3APEnG20hQ+kKzRlkXMnwwwhfAgk1HH07gjEGnw==",
44
44
  "license": "Apache-2.0",
45
45
  "engines": {
46
46
  "node": ">=24"
@@ -3,7 +3,7 @@
3
3
  "private": true,
4
4
  "description": "Packages the BIOS installs from npm into OPFS, pinned by package-lock.json and pnpm-lock.yaml",
5
5
  "dependencies": {
6
- "@ai-ecoverse/slicc-browsers": "1.18.1",
6
+ "@ai-ecoverse/slicc-browsers": "1.18.12",
7
7
  "@ai-ecoverse/slicc-cdp": "1.41.4",
8
8
  "@ai-ecoverse/slicc-clipboard": "1.1.1",
9
9
  "@ai-ecoverse/slicc-kernel": "1.159.4",
@@ -9,8 +9,8 @@ importers:
9
9
  .:
10
10
  dependencies:
11
11
  '@ai-ecoverse/slicc-browsers':
12
- specifier: 1.18.1
13
- version: 1.18.1
12
+ specifier: 1.18.12
13
+ version: 1.18.12
14
14
  '@ai-ecoverse/slicc-cdp':
15
15
  specifier: 1.41.4
16
16
  version: 1.41.4
@@ -98,8 +98,8 @@ importers:
98
98
 
99
99
  packages:
100
100
 
101
- '@ai-ecoverse/slicc-browsers@1.18.1':
102
- resolution: {integrity: sha512-D5C6nZlDnLhnFwPUc7sYKSvzFLJLgl++DNSit/Pq4IHTC/gsDQd7aQuQmseWyJcR23ma/nQRAezPie2D+A3oHQ==}
101
+ '@ai-ecoverse/slicc-browsers@1.18.12':
102
+ resolution: {integrity: sha512-zAa68AbuzW435nuINYyNstXai1EsofC1Qx8F5DkNOibTiRu3APEnG20hQ+kKzRlkXMnwwwhfAgk1HH07gjEGnw==}
103
103
  engines: {node: '>=24'}
104
104
 
105
105
  '@ai-ecoverse/slicc-cdp@1.41.4':
@@ -215,7 +215,7 @@ packages:
215
215
 
216
216
  snapshots:
217
217
 
218
- '@ai-ecoverse/slicc-browsers@1.18.1': {}
218
+ '@ai-ecoverse/slicc-browsers@1.18.12': {}
219
219
 
220
220
  '@ai-ecoverse/slicc-cdp@1.41.4': {}
221
221