@ai-ecoverse/slicc-bios 1.51.21 → 1.51.24
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
|
@@ -397,7 +397,9 @@ The choice is in `document.documentElement.dataset.transport`: `extension` or `p
|
|
|
397
397
|
|
|
398
398
|
Programs in the kernel drive a browser over the Chrome DevTools Protocol: `playwright-cli` and `curlwright` ([slicc-cdp](https://github.com/ai-ecoverse/slicc-cdp), in the base set) or anything else that reads `SLICC_CDP_URL`. The kernel's facade on `127.0.0.1:9222` takes connections only from programs inside the kernel. `playwright-cli route`, `route-list` and `unroute` (slicc-cdp ≥ 1.10.0) fulfil or change a tab's requests through `Fetch` on that tab's session while a command runs. A pattern that names a protected host is refused, and a request to a protected origin is never routed. slicc-cdp ≥ 1.11.2 keeps the protected origins out of reach on its own side too: `tab-list` leaves protected tabs out, a command that names one with `--tab` exits 1, `open` and `goto` refuse protected URLs, and a tab it touches can't load a protected document (a script, link, meta refresh or redirect into one gets Chrome's error page). It hands each one to the `cdp` hook that `os/cdp.js` gives `createKernel`, and the hook connects it to a host:
|
|
399
399
|
|
|
400
|
-
1. **[slicc-extension](https://github.com/ai-ecoverse/slicc-extension):**
|
|
400
|
+
1. **[slicc-extension](https://github.com/ai-ecoverse/slicc-extension):** browser automation through the extension requires **7.10.0 or later**. When a supported extension defines `sliccExtension.cdp`, its `chrome.debugger` bridge drives the Chrome that seven runs in. Every program connection shares the page's one extension port. The hook gives each connection only the answers to its own commands and the events of the sessions it attached, and on close it detaches every session the connection attached.
|
|
401
|
+
|
|
402
|
+
An older extension, or one that cannot report a supported release version, refuses browser automation with `slicc: refused: Update slicc-extension to use browser automation in seven. Reload this tab after updating.` Fetch and sign-in remain available.
|
|
401
403
|
|
|
402
404
|
**Seven's own pages and the vault are out of reach.** Every connection, whether through the extension or a linked browser, goes through a guard (`guardProtected` in `os/guard.js`), so no program in the kernel can drive, read or close a protected tab. What is protected comes from [slicc-browsers](https://github.com/ai-ecoverse/slicc-browsers#protected-origins)' `protectedOrigins` (in the base set): every `sliccy.ai` host, the vault (`vault.sliccy.ai`), `blob:`, `filesystem:` and `view-source:` URLs by the URL inside them, and `devtools:`, plus seven's own origin. A blank popup or frame (`about:blank`, `about:srcdoc`) is protected when its opener is protected or unknown, or when it was protected before. Seven's own pages can show files from OPFS that the user or the agent wrote, and the vault holds the user's secrets.
|
|
403
405
|
- **Hidden targets:** `Target.getTargets` and the target events leave protected targets out.
|
|
@@ -408,7 +410,7 @@ Programs in the kernel drive a browser over the Chrome DevTools Protocol: `playw
|
|
|
408
410
|
- **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.
|
|
409
411
|
- **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.
|
|
410
412
|
|
|
411
|
-
- **Known limit:** extensions that refuse `Target.setAutoAttach`
|
|
413
|
+
- **Known limit:** extensions that refuse `Target.setAutoAttach` leave an ordinary page with a cross-site iframe locked for paint, DOM, CSS, accessibility and input. The guard fails closed when it cannot place the child.
|
|
412
414
|
|
|
413
415
|
**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.
|
|
414
416
|
- **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 (slicc-extension), 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.
|
|
@@ -420,7 +422,7 @@ Programs in the kernel drive a browser over the Chrome DevTools Protocol: `playw
|
|
|
420
422
|
|
|
421
423
|
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)).
|
|
422
424
|
|
|
423
|
-
A program picks a host by adding `runtime=extension`, or a linked browser's `<device>/<browser>`, to the query of the URL it opens (`playwright-cli --runtime extension`). With no runtime,
|
|
425
|
+
A program picks a host by adding `runtime=extension`, or a linked browser's `<device>/<browser>`, to the query of the URL it opens (`playwright-cli --runtime extension`). With no runtime, a supported extension goes first, then a linked browser. If an installed extension is unsupported, automatic selection refuses with the update-and-reload message rather than silently using a linked browser; update the extension or name the linked browser explicitly with `--runtime <device>/<browser>`. The hook never derives a URL from the request: it reaches only the extension's page global and the linked browsers.
|
|
424
426
|
|
|
425
427
|
**No consent dialog.** A connection goes straight through once the hook has found a host; seven doesn't ask first. The once-per-session confirm from #138 was removed by Lars's decision W10. The Network panel shows the host in its browser automation line (`browser` on the network port, from `browserVia`): through the extension, through a linked browser, or not available.
|
|
426
428
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-bios",
|
|
3
|
-
"version": "1.51.
|
|
3
|
+
"version": "1.51.24",
|
|
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",
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@ai-ecoverse/slicc": "1.49.33",
|
|
53
53
|
"@ai-ecoverse/slicc-browsers": "1.18.21",
|
|
54
|
-
"@ai-ecoverse/slicc-cdp": "1.42.
|
|
54
|
+
"@ai-ecoverse/slicc-cdp": "1.42.10",
|
|
55
55
|
"@ai-ecoverse/slicc-shared-web": "2.13.7",
|
|
56
56
|
"@ai-ecoverse/slicc-spectrum": "1.107.2",
|
|
57
|
-
"@ai-ecoverse/slicc-vault": "1.17.
|
|
57
|
+
"@ai-ecoverse/slicc-vault": "1.17.2",
|
|
58
58
|
"@biomejs/biome": "2.6.2",
|
|
59
59
|
"aws4fetch": "1.0.20",
|
|
60
60
|
"es-module-lexer": "3.0.4",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"description": "SLICC's agent, which the UI installs with pnpm in the background into /opt/agent in OPFS",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@ai-ecoverse/slicc-agent": "7.8.
|
|
6
|
+
"@ai-ecoverse/slicc-agent": "7.8.15",
|
|
7
7
|
"@ai-ecoverse/slicc-kernel": "1.170.1"
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -14,19 +14,19 @@ importers:
|
|
|
14
14
|
.:
|
|
15
15
|
dependencies:
|
|
16
16
|
'@ai-ecoverse/slicc-agent':
|
|
17
|
-
specifier: 7.8.
|
|
18
|
-
version: 7.8.
|
|
17
|
+
specifier: 7.8.15
|
|
18
|
+
version: 7.8.15(@ai-ecoverse/slicc-kernel@1.170.1)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
|
|
19
19
|
'@ai-ecoverse/slicc-kernel':
|
|
20
20
|
specifier: 1.170.1
|
|
21
21
|
version: 1.170.1
|
|
22
22
|
|
|
23
23
|
packages:
|
|
24
24
|
|
|
25
|
-
'@ai-ecoverse/jerk-oauth@1.3.
|
|
26
|
-
resolution: {integrity: sha512-
|
|
25
|
+
'@ai-ecoverse/jerk-oauth@1.3.2':
|
|
26
|
+
resolution: {integrity: sha512-BLDMsojkewl82/05mQoEdWpGg4YT04KWVWcpb0TLTKIUcjfJ98GUi7vAE9Q2eDAFAlDlzpRXDCr1dSxqwiJazQ==}
|
|
27
27
|
|
|
28
|
-
'@ai-ecoverse/slicc-agent@7.8.
|
|
29
|
-
resolution: {integrity: sha512-
|
|
28
|
+
'@ai-ecoverse/slicc-agent@7.8.15':
|
|
29
|
+
resolution: {integrity: sha512-ogLqsyasVb/b7p4FA+i4W9X1UJ82S5qm/2cyPelLWTWPMMpkU0tZppjWYxnOJyoV4uKT1aFUpLfDfTJtezB2MQ==}
|
|
30
30
|
engines: {node: '>=24'}
|
|
31
31
|
peerDependencies:
|
|
32
32
|
'@ai-ecoverse/slicc-kernel': '>=1.110.0 <2'
|
|
@@ -47,8 +47,8 @@ packages:
|
|
|
47
47
|
resolution: {integrity: sha512-HZ5qVnVez4B2UTP+UrHbYg6GnHJjpT09byt/HHJ8Y0IRk13q5Oj8rFFCme+R0T5h42ZlmwaNVI+n77VtSaCtuA==}
|
|
48
48
|
engines: {node: '>=24'}
|
|
49
49
|
|
|
50
|
-
'@ai-ecoverse/slicc-vault@1.17.
|
|
51
|
-
resolution: {integrity: sha512-
|
|
50
|
+
'@ai-ecoverse/slicc-vault@1.17.2':
|
|
51
|
+
resolution: {integrity: sha512-Zu0YooQmW/Fhieqz73vmPdzKfplPU1Ar88WIRC7/rMNTd1lut3JLywoTKgq0MI4I/G6a2n55D8r03rm5fGgv3A==}
|
|
52
52
|
engines: {node: '>=24'}
|
|
53
53
|
|
|
54
54
|
'@anthropic-ai/sdk@0.129.0':
|
|
@@ -331,8 +331,8 @@ packages:
|
|
|
331
331
|
typebox@1.3.27:
|
|
332
332
|
resolution: {integrity: sha512-zu+jc1pcy4UiNThxikUr36f0Rybk9PEeCg/NE6adeWr/SKsdNO4EzZHYRDlv2YCVAfj3Odq3dESSo/jNyoBXzA==}
|
|
333
333
|
|
|
334
|
-
typebox@1.4.
|
|
335
|
-
resolution: {integrity: sha512-
|
|
334
|
+
typebox@1.4.3:
|
|
335
|
+
resolution: {integrity: sha512-u3nyf7ZciAv1GOijVpI0TDt9At5wmEi7lSHSlRrnjuThv1DcB7fgGBqqrz+fGZ54jAfTpOOX0JXwxSIg3pnxQA==}
|
|
336
336
|
|
|
337
337
|
which@2.0.2:
|
|
338
338
|
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
|
@@ -353,13 +353,13 @@ packages:
|
|
|
353
353
|
|
|
354
354
|
snapshots:
|
|
355
355
|
|
|
356
|
-
'@ai-ecoverse/jerk-oauth@1.3.
|
|
356
|
+
'@ai-ecoverse/jerk-oauth@1.3.2': {}
|
|
357
357
|
|
|
358
|
-
'@ai-ecoverse/slicc-agent@7.8.
|
|
358
|
+
'@ai-ecoverse/slicc-agent@7.8.15(@ai-ecoverse/slicc-kernel@1.170.1)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
|
|
359
359
|
dependencies:
|
|
360
360
|
'@ai-ecoverse/slicc-browsers': 1.18.21
|
|
361
361
|
'@ai-ecoverse/slicc-kernel': 1.170.1
|
|
362
|
-
'@ai-ecoverse/slicc-vault': 1.17.
|
|
362
|
+
'@ai-ecoverse/slicc-vault': 1.17.2
|
|
363
363
|
'@aws-sdk/middleware-websocket': 3.972.54
|
|
364
364
|
'@earendil-works/chord': 1.4.0
|
|
365
365
|
'@earendil-works/pi-ai': 1.4.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
|
|
@@ -368,7 +368,7 @@ snapshots:
|
|
|
368
368
|
'@earendil-works/pi-mcp': 1.4.0
|
|
369
369
|
'@earendil-works/pi-telemetry': 1.4.0
|
|
370
370
|
'@sqlite.org/sqlite-wasm': 3.53.4-build2
|
|
371
|
-
typebox: 1.4.
|
|
371
|
+
typebox: 1.4.3
|
|
372
372
|
transitivePeerDependencies:
|
|
373
373
|
- '@aws-sdk/credential-provider-node'
|
|
374
374
|
- '@modelcontextprotocol/sdk'
|
|
@@ -386,9 +386,9 @@ snapshots:
|
|
|
386
386
|
|
|
387
387
|
'@ai-ecoverse/slicc-scrub@1.1.0': {}
|
|
388
388
|
|
|
389
|
-
'@ai-ecoverse/slicc-vault@1.17.
|
|
389
|
+
'@ai-ecoverse/slicc-vault@1.17.2':
|
|
390
390
|
dependencies:
|
|
391
|
-
'@ai-ecoverse/jerk-oauth': 1.3.
|
|
391
|
+
'@ai-ecoverse/jerk-oauth': 1.3.2
|
|
392
392
|
'@ai-ecoverse/slicc-scrub': 1.1.0
|
|
393
393
|
|
|
394
394
|
'@anthropic-ai/sdk@0.129.0':
|
|
@@ -766,7 +766,7 @@ snapshots:
|
|
|
766
766
|
|
|
767
767
|
typebox@1.3.27: {}
|
|
768
768
|
|
|
769
|
-
typebox@1.4.
|
|
769
|
+
typebox@1.4.3: {}
|
|
770
770
|
|
|
771
771
|
which@2.0.2:
|
|
772
772
|
dependencies:
|