@ai-ecoverse/slicc-bios 1.44.4 → 1.44.6
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
|
@@ -21,6 +21,8 @@ The kernel's root is the OPFS root, so any file a kernel process writes, such as
|
|
|
21
21
|
|
|
22
22
|
The live content also carries `Content-Security-Policy: frame-ancestors 'self'` and `X-Frame-Options: SAMEORIGIN`, so only seven's own pages can frame it. That leaves no clickjacking and no framed captures of seven by another site. The hosting sends the same headers for the files it serves itself (sliccy-ai#22).
|
|
23
23
|
|
|
24
|
+
Seven's documents are never kept in the back/forward cache. The service worker sends every HTML document it serves from OPFS (seven's own pages and sandboxed files alike), and the BIOS page when it's a document navigation, with `Permissions-Policy: unload=(self)` and `Cache-Control: no-store`. The BIOS page, `/os/` (`os/start.js`, which stays import-free so an uncontrolled `/os/` still reaches the BIOS) and the guest page (`os/join.js`) each keep an `unload` listener, and Chrome doesn't cache a page with one (`UnloadHandlerExistsInMainFrame`). As a belt, a page that is restored anyway (`pageshow` with `persisted`) reloads itself. `no-store` alone doesn't keep a page out of the cache on current Chrome, which restores no-store pages unless cookies change. `bfcache.test.mjs` goes back to `/os/` from another page and fails with *BFCache exclusion lost: only the guard protects seven now* if Chrome restores it or stops naming the unload handler.
|
|
25
|
+
|
|
24
26
|
Every other OPFS file is served sandboxed: `Content-Security-Policy: sandbox allow-scripts allow-forms allow-popups allow-modals; frame-ancestors 'self'` (without `allow-same-origin`), `X-Content-Type-Options: nosniff`, `Cross-Origin-Resource-Policy: same-origin`, and no COOP or COEP. An HTML page there still renders and runs its scripts, but in an opaque origin, with no access to seven's IndexedDB, `localStorage`, OPFS or keys. JavaScript and TypeScript files there are served as `text/plain` and wasm as `application/octet-stream`, and a request for a script, a worker or a worklet there gets a 403, so none of seven's pages can import, run or instantiate them. Bare imports are resolved only in the live paths. Kernel symlinks live in the kernel's metadata, not in OPFS, so the service worker never follows one. The kernel itself reads binaries from OPFS directly, not through the service worker.
|
|
25
27
|
|
|
26
28
|
### Next to SLICC 6 (`www.sliccy.ai/7`)
|
|
@@ -370,7 +372,7 @@ Programs in the kernel drive a browser over the Chrome DevTools Protocol: `playw
|
|
|
370
372
|
**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.
|
|
371
373
|
- **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.
|
|
372
374
|
- **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.
|
|
373
|
-
- **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
|
|
375
|
+
- **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 from slicc-agent 6.19.15 (#550), which seven pins: they ask on `slicc-held` and navigate only on `held` or `none`, so on both hosts they are held before they leave `about:blank`, and with no holder answering the agent's sign-in fails.
|
|
374
376
|
- **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.
|
|
375
377
|
- **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.
|
|
376
378
|
- **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.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-bios",
|
|
3
|
-
"version": "1.44.
|
|
3
|
+
"version": "1.44.6",
|
|
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",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@ai-ecoverse/slicc-node": "2.5.1",
|
|
49
49
|
"@ai-ecoverse/slicc-shared-web": "2.12.1",
|
|
50
50
|
"@ai-ecoverse/slicc-spectrum": "1.104.1",
|
|
51
|
-
"@ai-ecoverse/slicc-vault": "1.
|
|
51
|
+
"@ai-ecoverse/slicc-vault": "1.17.0",
|
|
52
52
|
"@biomejs/biome": "2.5.15",
|
|
53
53
|
"aws4fetch": "1.0.20",
|
|
54
54
|
"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": "6.
|
|
6
|
+
"@ai-ecoverse/slicc-agent": "6.19.15",
|
|
7
7
|
"@ai-ecoverse/slicc-kernel": "1.160.3"
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -14,16 +14,19 @@ importers:
|
|
|
14
14
|
.:
|
|
15
15
|
dependencies:
|
|
16
16
|
'@ai-ecoverse/slicc-agent':
|
|
17
|
-
specifier: 6.
|
|
18
|
-
version: 6.
|
|
17
|
+
specifier: 6.19.15
|
|
18
|
+
version: 6.19.15(@ai-ecoverse/slicc-kernel@1.160.3)(@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.160.3
|
|
21
21
|
version: 1.160.3
|
|
22
22
|
|
|
23
23
|
packages:
|
|
24
24
|
|
|
25
|
-
'@ai-ecoverse/
|
|
26
|
-
resolution: {integrity: sha512-
|
|
25
|
+
'@ai-ecoverse/jerk-oauth@1.2.2':
|
|
26
|
+
resolution: {integrity: sha512-Sen/HPtSrvwUG4qJ72/x3QOuX0oVkYM/0PgpPkmaQhMaiXmOsKTnSzNyNWhbcsMgoCS5QTD0mkh8POOAaj2dXg==}
|
|
27
|
+
|
|
28
|
+
'@ai-ecoverse/slicc-agent@6.19.15':
|
|
29
|
+
resolution: {integrity: sha512-kGBEcUqrqcf/KMKZre7myhHWMFIER9iVm25kHxS1/gZ2e5SmMrjqUZWoSXnhw+/5g/Myjb0LncCe+1WoQe0U3A==}
|
|
27
30
|
engines: {node: '>=24'}
|
|
28
31
|
peerDependencies:
|
|
29
32
|
'@ai-ecoverse/slicc-kernel': '>=1.110.0 <2'
|
|
@@ -32,16 +35,20 @@ packages:
|
|
|
32
35
|
'@ai-ecoverse/slicc-spectrum':
|
|
33
36
|
optional: true
|
|
34
37
|
|
|
35
|
-
'@ai-ecoverse/slicc-browsers@1.
|
|
36
|
-
resolution: {integrity: sha512-
|
|
38
|
+
'@ai-ecoverse/slicc-browsers@1.18.7':
|
|
39
|
+
resolution: {integrity: sha512-rStBLMAR6a/WkvVr12auMtZ4ofEqIa/PARv8QvHucLBYH+Ubgoj1BPChwRfSwWC537kv+3cc1YwaMSEm3fhPFg==}
|
|
37
40
|
engines: {node: '>=24'}
|
|
38
41
|
|
|
39
42
|
'@ai-ecoverse/slicc-kernel@1.160.3':
|
|
40
43
|
resolution: {integrity: sha512-PC9VCRpT68N8CNwbvhEAI7ypiQQ7a53c6u+CZ+ppWvC9dmyjDIRk4CCMkqpoeW8jVMMRBkOsPrDrW4Vp9xkK+g==}
|
|
41
44
|
engines: {node: '>=26'}
|
|
42
45
|
|
|
43
|
-
'@ai-ecoverse/slicc-
|
|
44
|
-
resolution: {integrity: sha512-
|
|
46
|
+
'@ai-ecoverse/slicc-scrub@1.0.0':
|
|
47
|
+
resolution: {integrity: sha512-Z7maJhs0YmsbdcnVdLZocZrzA2x/iGp1in/+sZ4NBHy8BCZim0nvky3jRCcpCPoqceAreQt7ynfezCqkkeR/VQ==}
|
|
48
|
+
engines: {node: '>=24'}
|
|
49
|
+
|
|
50
|
+
'@ai-ecoverse/slicc-vault@1.15.4':
|
|
51
|
+
resolution: {integrity: sha512-XH41wPIotEir4VGjmwHiKawr/PoJB15NOTKn46Hdv4vgkvHk3Xj77e5/VJVUf99TIOMLEyLYKx1PbTG3KfR9NQ==}
|
|
45
52
|
engines: {node: '>=24'}
|
|
46
53
|
|
|
47
54
|
'@anthropic-ai/sdk@0.129.0':
|
|
@@ -346,11 +353,13 @@ packages:
|
|
|
346
353
|
|
|
347
354
|
snapshots:
|
|
348
355
|
|
|
349
|
-
'@ai-ecoverse/
|
|
356
|
+
'@ai-ecoverse/jerk-oauth@1.2.2': {}
|
|
357
|
+
|
|
358
|
+
'@ai-ecoverse/slicc-agent@6.19.15(@ai-ecoverse/slicc-kernel@1.160.3)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
|
|
350
359
|
dependencies:
|
|
351
|
-
'@ai-ecoverse/slicc-browsers': 1.
|
|
360
|
+
'@ai-ecoverse/slicc-browsers': 1.18.7
|
|
352
361
|
'@ai-ecoverse/slicc-kernel': 1.160.3
|
|
353
|
-
'@ai-ecoverse/slicc-vault': 1.15.
|
|
362
|
+
'@ai-ecoverse/slicc-vault': 1.15.4
|
|
354
363
|
'@aws-sdk/middleware-websocket': 3.972.54
|
|
355
364
|
'@earendil-works/chord': 1.3.0
|
|
356
365
|
'@earendil-works/pi-ai': 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
|
|
@@ -370,11 +379,16 @@ snapshots:
|
|
|
370
379
|
- ws
|
|
371
380
|
- zod
|
|
372
381
|
|
|
373
|
-
'@ai-ecoverse/slicc-browsers@1.
|
|
382
|
+
'@ai-ecoverse/slicc-browsers@1.18.7': {}
|
|
374
383
|
|
|
375
384
|
'@ai-ecoverse/slicc-kernel@1.160.3': {}
|
|
376
385
|
|
|
377
|
-
'@ai-ecoverse/slicc-
|
|
386
|
+
'@ai-ecoverse/slicc-scrub@1.0.0': {}
|
|
387
|
+
|
|
388
|
+
'@ai-ecoverse/slicc-vault@1.15.4':
|
|
389
|
+
dependencies:
|
|
390
|
+
'@ai-ecoverse/jerk-oauth': 1.2.2
|
|
391
|
+
'@ai-ecoverse/slicc-scrub': 1.0.0
|
|
378
392
|
|
|
379
393
|
'@anthropic-ai/sdk@0.129.0':
|
|
380
394
|
dependencies:
|