@ai-ecoverse/slicc-bios 1.48.1 → 1.48.3

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
@@ -17,7 +17,7 @@ The page shows six boot steps as they run:
17
17
 
18
18
  The kernel's root is the OPFS root, so any file a kernel process writes, such as `/home/x.html`, has a URL on seven's origin. The service worker serves only BIOS-managed code as live same-origin content:
19
19
 
20
- - `/os/` (the seed: the UI page and its modules and workers), `/node_modules/` (the base set: kernel, spectrum, slicc-cdp and the wasm packages), `/opt/agent/` (the agent and its workers) and `/opt/grammars/`;
20
+ - `/os/` (the seed: the UI page and its modules and workers), `/node_modules/` (the base set: kernel, spectrum, slicc-cdp and the wasm packages), and `/opt/agent/` (the agent and its workers);
21
21
  - the aliases `/auth/callback` (→ `/os/callback.html`, only on an origin of seven's own) and `/oauth/mcp-callback` (→ the agent's `dist/oauth/mcp-callback.html`), the node builtin stubs under `/__slicc/node/`, and `/os/manifest.json`, a redirect to the BIOS's `manifest.json`, so the manifest's relative icons and `start_url` resolve in the BIOS's folder;
22
22
  - bios's own files, in the BIOS's folder (`index.html`, `bios.js`, `bios.css`, `installer.js`, `sw.js`, `manifest.json`, and `sw/`, `seed/`, `packages/` and `icons/`), and `/fonts/`, which always come from the network, even when OPFS has a file of that name.
23
23
 
@@ -72,7 +72,7 @@ A kernel process can still write to `/os/` and `/node_modules/` (any process whi
72
72
  - **No restore loops:** seven stops restoring a path when restoring it failed, when it changes again within a minute of being restored, or when it changes three times in ten minutes. It keeps refusing the file, doesn't send tabs to the BIOS for it, and the BIOS leaves it as it is. The UI shows *Seven stopped restoring a file*: "Seven keeps finding <path> changed. It stopped restoring it and won’t run it. Something on this computer may be changing seven’s files." The list stays in `localStorage` (`slicc-bios.stopped`) until a BIOS run no longer reports it. Ten minutes after it was stopped, the next BIOS run tries again.
73
73
  - **Putting it back:** the BIOS's packages step downloads again every package that owns a changed file, and the seed step copies the seed again. Both say how many changed files they put back. The UI then shows a warning notice, *Seven’s files were changed*, naming the files, from `localStorage` (`slicc-bios.repaired`), since the COOP switch from the BIOS to `os/` doesn't keep `sessionStorage`.
74
74
  - **Not checked yet:**
75
- - `/opt/agent/` and `/opt/grammars/` are served unchecked until their pnpm-installed files get hashes too.
75
+ - `/opt/agent/` is served unchecked until its pnpm-installed files get hashes too.
76
76
  - The kernel reads wasm binaries and Emscripten glue from OPFS directly, not through the service worker, so this check doesn't cover them.
77
77
 
78
78
  ## UI
@@ -108,11 +108,11 @@ The kernel runs with users on (slicc-kernel ≥ 1.81.0): files have owners and m
108
108
  - **Folders** bios mounts (picked in the Files panel, remembered, or linked) belong to the first cone, so the agent can write them, and to root while users are off.
109
109
  - **Files from before users:** agents start on the new layout; nothing is moved. On the first boot with users on, bios runs `chmod -R go-rwx` as root, once, on what earlier versions left readable to everyone: `/home/.pi`, `/home/.slicc`, `/home/sprinkles`, `/home/.gelatiere`, `/home/.welcomed`, `/home/.welcome.json`, `/home/sessions`, `/home/.local` and `/scoops`. So no cone or scoop reads an old `mcp.json` with its tokens, and root still reads everything. The marker `var/lib/slicc/legacy-locked` keeps it from running again; cone and scoop homes and other files in `/home` aren't touched.
110
110
  - **The agent's `KernelSource`** (`os/users.js`) passes `connect({ user, agentId })`, `users` and `groups` to the kernel, only for agent users. It refuses root and any user but `cone`, `cone-<n>` and `scoop-<folder>`, requires the agentId to match the user exactly (`cone:cone`, `cone:cone-2`, `scoop:<folder>`), and allows groups only of cones and `sudo` only for cones. A cone is always added to `sudo`, even when the caller leaves it out, since sudo membership is what makes a cone (the vault's J2 rule). The tag is `{"kind":"agent","agentId":…}` as JSON, and the agent's root client carries `{"kind":"agent","agentId":"root"}`; a panel terminal's is `{"kind":"user","where":"terminal:<tab>"}`.
111
- - **Protected code paths:** under `'enforce'`, the kernel gets `protect: { paths: ['/node_modules', '/opt/agent', '/opt/grammars', '/opt/tailscale', '/opt/slicc', '/os'], writers: ['bios-installer'] }` (slicc-kernel ≥ 1.81.0). No process changes them, root included (`EROFS`; a cone sees `EACCES` first), and nothing mounts at, under or above them.
111
+ - **Protected code paths:** under `'enforce'`, the kernel gets `protect: { paths: ['/node_modules', '/opt/agent', '/opt/tailscale', '/opt/slicc', '/os'], writers: ['bios-installer'] }` (slicc-kernel ≥ 1.81.0). No process changes them, root included (`EROFS`; a cone sees `EACCES` first), and nothing mounts at, under or above them.
112
112
  - **bios's installs** (pnpm into the base set, `/opt/*` and `/opt/slicc/<project>`, and the pass that makes them readable) run as `kernel.run(argv, { cwd, tag: 'bios-installer', env })`. The env is clean: `HOME=/opt/slicc/.installer`, its own config and cache, the system `PNPM_HOME` and `PATH`, and an empty `NODE_OPTIONS`.
113
- - **pnpm runs with** `--ignore-scripts --ignore-pnpmfile --config.userconfig=/dev/null --config.store-dir=/opt/slicc/.store --config.verify-store-integrity=true`. No locked package in the base set, `/opt/agent`, `/opt/grammars`, `/opt/tailscale` or the data tools has an install script.
113
+ - **pnpm runs with** `--ignore-scripts --ignore-pnpmfile --config.userconfig=/dev/null --config.store-dir=/opt/slicc/.store --config.verify-store-integrity=true`. No locked package in the base set, `/opt/agent`, `/opt/tailscale` or the data tools has an install script.
114
114
  - **The base project** moves out of `/`: its `package.json`, `pnpm-lock.yaml` and `pnpm-workspace.yaml` are in `/opt/slicc/base`, written by the BIOS installer and the in-place update, and pnpm installs it with `--modules-dir=/node_modules` from there. So everything pnpm reads is inside a protected path, and a root process that writes `/package.json`, `/pnpm-lock.yaml`, `/.npmrc` or `/pnpm-workspace.yaml` changes nothing; bios removes those at every boot. A protected project without its own `pnpm-workspace.yaml` gets one, so pnpm's search for a workspace stops inside the tree. The service worker's resolver no longer reads a `package.json` at `/` for `browser` mappings.
115
- - **The user layers** for `/opt/agent` and `/opt/grammars` are off under `'enforce'`: users can't change those projects any more, and their state is in `/var/lib/slicc`, which the agent can write. They keep working under `'report'`. Your packages live in `/opt/user` instead, which isn't protected (see [Your packages](#your-packages)).
115
+ - **The user layer** for `/opt/agent` is off under `'enforce'`: users can't change that project any more, and its state is in `/var/lib/slicc`, which the agent can write. They keep working under `'report'`. Your packages live in `/opt/user` instead, which isn't protected (see [Your packages](#your-packages)).
116
116
  - **Under `'report'`** nothing is protected, since protection has no report mode of its own. Installs already run as tagged writers from `/opt/slicc/base` with the clean config, and bios watches the six trees through the kernel (`fs.watch`, recursive). Each change made through the page's kernel outside bios's own installs goes to `denials.log` as `op: 'protect'`, `errno: 'EROFS'`: a write that `'enforce'` would refuse. The watch doesn't say which process wrote, so these lines have no user and no tag. Changes made outside the page's kernel (bios's install kernels, the page itself) aren't seen.
117
117
  - **Global packages** (`pnpm add -g` into `/usr/local/share/pnpm`) aren't protected and run untagged.
118
118
  - **A remembered mount** (`slicc-os.mounts`) at, under or above a protected path is dropped at boot under `'enforce'`, with a notice, *A remembered folder wasn’t mounted*.
@@ -129,7 +129,7 @@ A local folder can be mounted into seven as on Linux ([#73](https://github.com/a
129
129
  - **From any shell**, the agent's `bash` included, `mount -t fsa none /mnt/x` (from `@ai-ecoverse/wasm-mount`) mounts an empty drive at once. The Files panel lists `/mnt/x` as waiting for a folder and offers **Insert folder…** (spectrum ≥ 1.32.0). The click opens the folder picker (`showDirectoryPicker`), and the folder goes in without a remount. `umount /mnt/x` ejects it; the folder itself is untouched.
130
130
  - **From the Files panel** (spectrum ≥ 1.27.0), **Mount a folder…** picks a folder and mounts it at `/mnt/<name>`, then selects it in the tree. A **Mounted** strip lists every folder mount, shell mounts included, each with **Eject**. The files port behind them has `mountFolder(path?)`, `mounts()`, `needsFolder()` and `eject(path)`. `needsFolder()` lists the mount points waiting for a folder, and `mountFolder(path)` inserts one there. The port emits `mounts` when either list changes, then `files`, then `file` for each path that went away, so a tab open on an ejected file notices.
131
131
  - **Remembered:** `hostfs` mounts, and `fsa` mounts where the profile allows it (see below), are kept in `localStorage` (`slicc-os.mounts`) and mounted again on the next load. The kernel keeps each folder's handle in IndexedDB, so a folder whose permission still holds comes back at once, and one that needs permission again waits in the Files panel, where **Insert folder…** asks for it.
132
- - **Off the record, failing safe:** Chrome 153 crashes the browser when a folder handle goes through IndexedDB in an off-the-record profile (Incognito, or a CDP browser context such as the test harness's), as soon as an `fsa` mount touches the kernel's handle store. The page remembers folders only with positive evidence that the profile isn't off the record: `navigator.storage.persisted()` is granted and the storage quota is at least twice the JavaScript heap limit. Otherwise it gives the kernel `media: false` (slicc-kernel ≥ 1.18.0): folder handles stay in memory and the kernel never opens its `:media` database, while POSIX metadata and the kernel's TLS CA still persist, shared with seven's other kernels. It also neither remembers nor remounts `fsa` mounts then. The kernels seven starts to install the agent and the grammars never mount folders, so they always get `media: false`. In that session mode a folder is asked for again after a reload. Chrome grants persistent storage by engagement, so ordinary profiles can start in session mode too: **Insert folder…** also calls `navigator.storage.persist()`, and when that is granted and the quota check passes, the session switches to remembered. Folders inserted before the switch are asked for once more after the next reload, after which their handles are kept. `document.documentElement.dataset.folders` says which mode is on: `remembered` or `session`.
132
+ - **Off the record, failing safe:** Chrome 153 crashes the browser when a folder handle goes through IndexedDB in an off-the-record profile (Incognito, or a CDP browser context such as the test harness's), as soon as an `fsa` mount touches the kernel's handle store. The page remembers folders only with positive evidence that the profile isn't off the record: `navigator.storage.persisted()` is granted and the storage quota is at least twice the JavaScript heap limit. Otherwise it gives the kernel `media: false` (slicc-kernel ≥ 1.18.0): folder handles stay in memory and the kernel never opens its `:media` database, while POSIX metadata and the kernel's TLS CA still persist, shared with seven's other kernels. It also neither remembers nor remounts `fsa` mounts then. The kernels seven starts to install the agent never mount folders, so they always get `media: false`. In that session mode a folder is asked for again after a reload. Chrome grants persistent storage by engagement, so ordinary profiles can start in session mode too: **Insert folder…** also calls `navigator.storage.persist()`, and when that is granted and the quota check passes, the session switches to remembered. Folders inserted before the switch are asked for once more after the next reload, after which their handles are kept. `document.documentElement.dataset.folders` says which mode is on: `remembered` or `session`.
133
133
  - **Host folders:** with a local proxy that exports folders (`npx @ai-ecoverse/slicc-node --mount <path>[:<name>][:ro]`, or slicc-swift), `mount -t hostfs <name> /mnt/h` mounts one with no picker. The page asks the proxy for a token scoped to that folder (`POST /api/hostfs/grant` with the proxy key); the kernel gets only the token, and neither the key nor the token shows up in `/proc/mounts`. A name that is neither exported by the proxy (`POST /api/hostfs/mounts`) nor a linked CLI's folder (`<device>/<name>`) is refused at once (exit 32, permission denied), with or without a proxy.
134
134
  - **Deleted but open files:** the kernel keeps a file that a program still has open after it's deleted in `.slicc-unlinked/` at the mount's root until it's closed (slicc-kernel ≥ 1.37.1). In a mounted folder that directory is visible on the host, so a repository there may want it in `.gitignore`.
135
135
  - **Owners** (slicc-kernel ≥ 1.61.0): every mount bios makes, a folder picked in the Files panel and each remembered mount it mounts again, gets its owner as `uid=` and `gid=` from one function, `owned()` in `os/mounts.js`. While the kernel's users are off, that's root (`uid=0,gid=0`), and `/proc/mounts` shows it. When agents run as their own users, it gives the user's ids, so their programs see the folder as their own.
@@ -138,9 +138,11 @@ A local folder can be mounted into seven as on Linux ([#73](https://github.com/a
138
138
 
139
139
  ### Agent
140
140
 
141
- [slicc-agent](https://github.com/ai-ecoverse/slicc-agent) and its dependencies (about 100 packages, most of them provider SDKs) aren't part of the first boot either. They are a separate pnpm project, [`src/packages/agent/`](src/packages/agent/), installed like the grammars, so the BIOS boots as fast as without an agent. slicc-agent takes `@ai-ecoverse/slicc-kernel` as a peer, so the project pins the same kernel as the base set, and a test keeps the two pins equal. Its `pnpm-workspace.yaml` overrides `@google/genai` and `esbuild` to nothing (`'-'`): a Bedrock turn never loads them, and dropping them and their trees takes `/opt/agent` from 99 packages to 58. Seven's pnpm reads overrides only from the workspace file, so the installer copies it into `/opt/agent` next to the lockfile:
141
+ [slicc-agent](https://github.com/ai-ecoverse/slicc-agent) and its dependencies (about 100 packages, most of them provider SDKs) aren't part of the first boot either. They are a separate pnpm project, [`src/packages/agent/`](src/packages/agent/), deployed next to the BIOS's lockfiles and installed in the background, so the BIOS boots as fast as without an agent. slicc-agent takes `@ai-ecoverse/slicc-kernel` as a peer, so the project pins the same kernel as the base set, and a test keeps the two pins equal. Its `pnpm-workspace.yaml` overrides `@google/genai` and `esbuild` to nothing (`'-'`): a Bedrock turn never loads them, and dropping them and their trees takes `/opt/agent` from 99 packages to 58. Seven's pnpm reads overrides only from the workspace file, so the installer copies it into `/opt/agent` next to the lockfile:
142
142
 
143
- 1. **After every update check,** `os/agent.js` compares the deployed `packages/agent/pnpm-lock.yaml` with `var/lib/slicc/agent/pnpm-lock.yaml`. If they differ, it writes the manifest (merged with the user's layer, see [Your packages](#your-packages)) and lockfile to `/opt/agent` and runs `pnpm install --frozen-lockfile --trust-lockfile` there under its own Web Lock, `slicc-agent-install`. The **Agent** row of [Install / Update](#install--update) shows pnpm's progress: *Downloading n of m* while pnpm fetches packages (reused from its store or downloaded), then *Linking n of m* once it starts adding them, because pnpm adds nothing until the fetching is done. While pnpm downloads a large tarball it prints `Downloading <package>: <done>/<total>` about once a second, and its count line can stay at `resolved 1` all that time. bios keeps the latest of those lines for each package, in pnpm's decimal units (`B`, `kB`, `MB`, `GB`), and sends their sums as the progress's `bytes: { done, total }` while any are downloading (slicc-spectrum#445 fills the bar by them). Downloads stay counted after their lines leave the log window. The grammars, Tailscale and the optional catalog share this. Only once pnpm succeeds does it record the lockfile. A failed install shows the error, pnpm's log and **Retry**, and the next check tries again.
143
+ 1. **After every update check,** `os/agent.js` compares the deployed `packages/agent/pnpm-lock.yaml` with `var/lib/slicc/agent/pnpm-lock.yaml`. If they differ, it writes the manifest (merged with the user's layer, see [Your packages](#your-packages)) and lockfile to `/opt/agent` and runs `pnpm install --frozen-lockfile --trust-lockfile` there under its own Web Lock, `slicc-agent-install`. The **Agent** row of [Install / Update](#install--update) shows pnpm's progress: *Downloading n of m* while pnpm fetches packages (reused from its store or downloaded), then *Linking n of m* once it starts adding them, because pnpm adds nothing until the fetching is done. While pnpm downloads a large tarball it prints `Downloading <package>: <done>/<total>` about once a second, and its count line can stay at `resolved 1` all that time. bios keeps the latest of those lines for each package, in pnpm's decimal units (`B`, `kB`, `MB`, `GB`), and sends their sums as the progress's `bytes: { done, total }` while any are downloading (slicc-spectrum#445 fills the bar by them). Downloads stay counted after their lines leave the log window. Tailscale and the optional catalog share this. Only once pnpm succeeds does it record the lockfile. A failed install shows the error, pnpm's log and **Retry**, and the next check tries again.
144
+
145
+ It runs in the page's own kernel, like the Tailscale install and the pass that makes the trees readable, never in a second kernel on the same OPFS root. A second kernel on one root makes both pay for keeping their files in step (slicc-kernel ≥ 1.119.0 made a cold agent install about 3× slower that way). Every bios pnpm run, these installs and the optional packages' `pnpm add -g` and `remove -g`, also takes the Web Lock `slicc-pnpm-store`, so only one pnpm uses the store at a time, in this tab or another.
144
146
  2. **Once it's installed,** the page imports `page.js` and `spectrum/index.js` from `/opt/agent/node_modules/@ai-ecoverse/slicc-agent/dist/`. `startAgent` takes the Web Lock `slicc-agent`, starts `agent-worker.js` from there as a module worker and hands it a port to the page's kernel, so the agent's `bash`, `read`, `write` and `edit` run on the same kernel and files as the terminal. The page swaps in `createAgentModel()` when the worker connects. On later loads the agent starts at once, before any network check, so chat works offline. If another tab owns the agent, this tab has terminals and files only.
145
147
  3. **The conversation** is kept in SQLite in OPFS (`/.slicc/agent/`).
146
148
 
@@ -189,21 +191,15 @@ A hidden owner is fine. In R1, 30 minutes in the background throttled only the o
189
191
  - `localBoard()`, the switchboard of a tab alone, and `createTabs()`, the tabs port.
190
192
  - **`os/present.js`** attaches a tab to the owner whenever the owner changes. It gives the follower an `os` port and mirrors the owner's updates over it. The owner tab attaches to its own agent the same way.
191
193
 
192
- ### Grammars
193
-
194
- Spectrum bundles 16 syntax languages; the rest come from `@shikijs/langs` and `@shikijs/themes` (725 and 135 files). They aren't part of the first boot. They're a separate pnpm project, [`src/packages/grammars/`](src/packages/grammars/), deployed next to the BIOS's lockfiles:
195
-
196
- 1. **Until they're installed,** the UI loads grammars from jsDelivr.
197
- 2. **After every update check,** `os/grammars.js` compares the deployed `packages/grammars/pnpm-lock.yaml` with `var/lib/slicc/grammars/pnpm-lock.yaml`. If they differ, it writes the manifest (merged with the user's layer, see [Your packages](#your-packages)) and lockfile to `/opt/grammars` and runs `pnpm install --frozen-lockfile --trust-lockfile` there, under its own Web Lock, `slicc-grammars`, so a long install never holds up the BIOS in another tab. Only once pnpm succeeds does it record the lockfile.
194
+ ### Code highlighting
198
195
 
199
- It runs in the page's own kernel, like the agent and Tailscale installs and the pass that makes them readable, never in a second kernel on the same OPFS root. A second kernel on one root makes both pay for keeping their files in step (slicc-kernel ≥ 1.119.0 made a cold agent install about 3× slower that way). Every bios pnpm run, these installs and the optional packages' `pnpm add -g` and `remove -g`, also takes the Web Lock `slicc-pnpm-store`, so only one pnpm uses the store at a time, in this tab or another.
200
- 3. **Once they're installed,** `grammarBase` points at `/opt/grammars/node_modules/@shikijs/`. On later loads the page sets it as soon as the recorded lockfile is there, before any network check, so highlighting works offline. If pnpm fails, the page stays on jsDelivr, the **Syntax grammars** row shows the error with **Retry**, and the next check tries again.
196
+ Spectrum (≥ 1.105.0) highlights code with [`@pierre/highlights`](https://diffs.com/highlights), whose lexers are one WebAssembly module inside spectrum's own `dist/`, in the base set. So highlighting works offline from the first boot, and nothing loads from a CDN. Files in a language it doesn't know (about 80 are known) show as plain text.
201
197
 
202
- The Files panel lists `/opt/grammars/node_modules` but doesn't scan it.
198
+ Before that, seven installed `@shikijs/langs` and `@shikijs/themes` as a pnpm project of its own in `/opt/grammars` and pointed spectrum's `grammarBase` at it. Spectrum no longer reads it, so bios no longer installs it. On a profile from before, which still has the old receipt `var/lib/slicc/grammars/pnpm-lock.yaml`, an update check removes `/opt/grammars` and then `var/lib/slicc/grammars`. Without the receipt bios leaves both paths alone, since `/opt/grammars` is an ordinary path now.
203
199
 
204
200
  ### Install / Update
205
201
 
206
- `os/updates.js` is spectrum's `UpdatesPort` (`model.updates`, spectrum ≥ 1.27.0), with one row per component: **Agent** (`/opt/agent`), **Kernel** (`slicc-kernel`), **UI** (`slicc-spectrum`), **BIOS packages** (the other root packages) and **Syntax grammars**. Each row shows its version, when it was last checked, pnpm's download or link count while it installs, and pnpm's output under *Install log*. A component that isn't installed yet is *Waiting* (`queued`, spectrum ≥ 1.29.0) until its install starts. A failed row leads with one sentence on what failed and what to do, and keeps pnpm's output in the log. `ready()` is false at every boot until the agent's model is in place, or until the check finds no agent to start. While it is false, spectrum opens the Install / Update panel, so it shows while the agent installs or loads; while an installed agent starts, its row reads *Starting* (`starting`, spectrum ≥ 1.37.0). It closes once the agent is up without failures, and a new failure opens it again. An installed agent that doesn't start fails its row with **Retry**. Background updates show in the header. Each row's actions go back to the installers: **Retry** runs that installer again, **Restart agent** restarts the agent worker and **Reload** reloads through the BIOS.
202
+ `os/updates.js` is spectrum's `UpdatesPort` (`model.updates`, spectrum ≥ 1.27.0), with one row per component: **Agent** (`/opt/agent`), **Kernel** (`slicc-kernel`), **UI** (`slicc-spectrum`), **BIOS packages** (the other root packages) and **Tailscale** (`/opt/tailscale`). Each row shows its version, when it was last checked, pnpm's download or link count while it installs, and pnpm's output under *Install log*. A component that isn't installed yet is *Waiting* (`queued`, spectrum ≥ 1.29.0) until its install starts. A failed row leads with one sentence on what failed and what to do, and keeps pnpm's output in the log. `ready()` is false at every boot until the agent's model is in place, or until the check finds no agent to start. While it is false, spectrum opens the Install / Update panel, so it shows while the agent installs or loads; while an installed agent starts, its row reads *Starting* (`starting`, spectrum ≥ 1.37.0). It closes once the agent is up without failures, and a new failure opens it again. An installed agent that doesn't start fails its row with **Retry**. Background updates show in the header. Each row's actions go back to the installers: **Retry** runs that installer again, **Restart agent** restarts the agent worker and **Reload** reloads through the BIOS.
207
203
 
208
204
  #### No agent older than the profile
209
205
 
@@ -254,7 +250,7 @@ Today it offers git, the GitHub CLI, OpenSSH, `slicc` (see [Sevens this kernel f
254
250
  - **State** comes from pnpm's global projects, not from a list of bios's own, so a package installed by hand shows as installed with its version. One older than npm's offered version offers **Update**, which adds that version; one at or above it offers **Remove**. bios never downgrades.
255
251
  - **A user's own installs:** bios also reads each user's own pnpm global (`/home/<user>/.local/share/pnpm/global/v11`, a `pnpm add -g` as `cone`), as root and read-only, straight from the files: it runs no pnpm as the user for that, and with kernel users off it reads none. Each row lists its installs (`installs`, slicc-spectrum#475): the panel's copy as `{ version, where: '/usr/local/share/pnpm', manager: 'panel' }` and each user's as `{ version, where: '/home/<user>/.local/share/pnpm', user, manager: 'pnpm' }`. The version and state follow the panel's copy, or else the user's newest. A row with any install never offers **Install**, and only a panel copy offers **Remove**; a row with only user installs offers **Update** when it's older than npm's offered version, and nothing otherwise. That **Update** runs `pnpm add -g` as each user whose copy is older, with their uid, gid, `HOME`, `PNPM_HOME` and `PATH` in their home, with `--ignore-scripts`, `--ignore-pnpmfile`, the store's integrity check and no release-age wait (the catalog's version is certified), never as root and never with the system's environment, so the files stay theirs and no system copy appears. Their lockfile then passes the same check as a panel install; if it doesn't, bios puts the user's version back and the row says so. bios never touches a user's own bins. A requirement counts only in its own scope: the panel's copy for a panel install or a project, so one only a user has is installed for the system first, and that user's own global, or the panel's, for that user's copy (*Needs …*). The Remove question counts every copy that needs it, a user's included, and the move from the old root global moves a system copy even when a user has the package. The panel's own Install, Update and Remove work on its copy as before, whatever a user has.
256
252
  - **Remove** runs `pnpm remove -g <package>`. It asks first only when another installed entry needs it (*Remove Node.js (jsh)? Browser for jsh scripts needs it and stops working until Node.js (jsh) is back.*, accent); otherwise it doesn't ask, since pnpm's global projects hold no user data and the package can be installed again. A cancelled confirm changes nothing.
257
- - **Readable by everyone:** after every pnpm install of `/opt/agent`, `/opt/grammars` and an optional project in `/opt/slicc`, bios makes that tree readable by everyone, as root: one `find` selects the files without `a+r`, the executables without `a+x` and the directories without `a+x`, and runs `chmod a+rX` on only those, so a tree of 15,000 entries with one `0600` file pays for one walk and one `chmod`, not 15,000. pnpm writes some files `0600`, such as `node_modules/.pnpm-workspace-state-v1.json`, and with kernel users every user must be able to read seven's installed packages. An install from before this runs the same pass once at its next check, marked by `var/lib/slicc/<project>/readable`.
253
+ - **Readable by everyone:** after every pnpm install of `/opt/agent` and an optional project in `/opt/slicc`, bios makes that tree readable by everyone, as root: one `find` selects the files without `a+r`, the executables without `a+x` and the directories without `a+x`, and runs `chmod a+rX` on only those, so a tree of 15,000 entries with one `0600` file pays for one walk and one `chmod`, not 15,000. pnpm writes some files `0600`, such as `node_modules/.pnpm-workspace-state-v1.json`, and with kernel users every user must be able to read seven's installed packages. An install from before this runs the same pass once at its next check, marked by `var/lib/slicc/<project>/readable`.
258
254
  - **Failures** lead with one sentence and keep pnpm's output, starting with the package and version, under *Install log*, with **Retry**.
259
255
  - **Withdrawn and kept as exceptions** (homescoop#858/#859, #864): uv, esbuild, tsc and buf are withdrawn until attested rebuilds. They're retired rows (*No longer offered*, with Remove for an earlier install), and their certs lines are gone. Instead, use `pip` for uv's work for now (uv returns as `@ai-ecoverse/wasi-uv`, Astral's uv, once that's certified), and install esbuild and typescript straight from npm with `pnpm add -g`; buf has no stand-in. **git** and **gh** stay as recorded supply-chain exceptions until their attested rebuilds: their `certs.json` entries carry an `exception` field, which `pins.test.mjs` lists, and any other uncertified pin still fails it.
260
256
  - **Python data tools on Python 3.15:** the catalog's Python is the highest wasix-python 3.15.0-N (its `range` is `3.15.0`, its `abi` cp315; 3.15.0-3 today), and the data tools are homescoop's attested cp315 builds for it: py-numpy 2.5.4-2, py-pandas 3.0.6-3, py-matplotlib 3.11.2-13 and py-scipy 1.18.1-3, with contourpy, kiwisolver, pillow 13.0.0-2 and their pure dependencies, one copy each. The pure ones (dateutil, six, tzdata, cycler and the rest) are homescoop's version-neutral builds (homescoop#1283): their site-packages folder is `lib/python3/site-packages` and they ship no bytecode, so one build serves any Python 3. seven never mixes builds for two Pythons: the py-* move in one PR, Renovate groups them so (`renovate.json`), and the PR that moves them to another ABI moves Python's `range` and `abi` too. The project's version is 2026.10.21, so an install of the 3.14 data tools (2026.10.19 and earlier), or of the first 3.15 builds (2026.10.20), shows as outdated, with **Update**, which moves Python first and then the project; nothing built for 3.14 stays in `/opt/slicc/pydata`, and the `.pth` lists only 3.15 site-packages.
@@ -285,12 +281,12 @@ A package dropped from the catalog is listed in `src/packages/optional/retired.j
285
281
  - **Adding a package:** the human, whose panel terminals are root, runs `cd /opt/user && pnpm add <package>`. A cone runs `cd /opt/user && sudo pnpm add <package>`, which asks the human and offers only *Allow once*, since pnpm writes files. The panel has no field to add one.
286
282
  - **bios's own pnpm runs there** (installing what the manifest lists but `node_modules` lacks, and **Remove**) in the page's kernel as root, untagged, since it isn't a protected writer, under the Web Lock `slicc-user-packages`. It runs with `--ignore-scripts --ignore-pnpmfile --config.userconfig=/dev/null` and a clean environment: `HOME=/var/lib/slicc/user/home`, its own config and cache, root's `PNPM_HOME` and its store, the system `PATH` and an empty `NODE_OPTIONS`. Afterwards it runs `chmod -R u=rwX,go=rX /opt/user`, so nothing there is group- or other-writable. The project has its own `pnpm-workspace.yaml`, so pnpm's search for a workspace stops there.
287
283
  - **The rows:** every dependency in `/opt/user/package.json` is a row under **Your packages** (`pin: { base: null, range, project: '/opt/user' }`) with its version, its `bin` commands and **Remove**, which runs `pnpm remove <package>` there. A package that isn't installed, because the install failed or hasn't run yet, shows the error with **Retry** and **Remove**. A name the base set ships in `/node_modules` gets the warning "Seven ships its own <name> and ignores this one."
288
- - **The move from `/opt/agent`:** at every update check, before the agent and the grammars are installed, bios adds every addition in `/opt/agent`'s layer (below) to `/opt/user/package.json` with its spec and field, unless `/opt/user` lists that name already, takes it out of the layer, which installs `/opt/agent` again without it, and installs it in `/opt/user`. So an addition an older seven left in `/opt/agent` moves once, also under `'enforce'`, where the layers are off. Additions to `/opt/grammars` stay there, since the grammars are served only from `/opt/grammars`.
289
- - **Pins under `'enforce'`:** protect seals `/opt/agent` and `/opt/grammars`, so at that check bios drops every pin in their layers, and the grammar additions, and posts one notice, *Your pinned versions were removed* (*Your pinned versions and added grammar packages were removed* when grammar packages went too): "Seven now uses the versions it ships for the agent and its tools. To add your own packages, use /opt/user (Install / Update › Your packages)." Under `'off'` and `'report'` pins work as below.
284
+ - **The move from `/opt/agent`:** at every update check, before the agent is installed, bios adds every addition in `/opt/agent`'s layer (below) to `/opt/user/package.json` with its spec and field, unless `/opt/user` lists that name already, takes it out of the layer, which installs `/opt/agent` again without it, and installs it in `/opt/user`. So an addition an older seven left in `/opt/agent` moves once, also under `'enforce'`, where the layers are off.
285
+ - **Pins under `'enforce'`:** protect seals `/opt/agent`, so at that check bios drops every pin in its layer and posts one notice, *Your pinned versions were removed*: "Seven now uses the versions it ships for the agent and its tools. To add your own packages, use /opt/user (Install / Update › Your packages)." Under `'off'` and `'report'` pins work as below.
290
286
 
291
287
  The Files panel lists `/opt/user/node_modules` but doesn't scan it.
292
288
 
293
- Under `'off'` and `'report'`, `/opt/agent` and `/opt/grammars` are ordinary pnpm projects too, and what the user (or the agent) changes in them with `pnpm upgrade` or `pnpm remove` survives seven's updates as a pin; an addition to `/opt/agent` moves to `/opt/user`. The deployment owns the **base manifest**, its `package.json`; the user's changes are a **user layer** on top of it, and `os/layer.js` merges the two before it runs pnpm (D15).
289
+ Under `'off'` and `'report'`, `/opt/agent` is an ordinary pnpm project too, and what the user (or the agent) changes in them with `pnpm upgrade` or `pnpm remove` survives seven's updates as a pin; an addition to `/opt/agent` moves to `/opt/user`. The deployment owns the **base manifest**, its `package.json`; the user's changes are a **user layer** on top of it, and `os/layer.js` merges the two before it runs pnpm (D15).
294
290
 
295
291
  - **Detection:** at every update check (boot, the tab becoming visible, every 15 minutes, Retry), bios reads the project's `package.json` and, only when it changed since the last check, compares it with the base it last installed (`var/lib/slicc/<project>/package.json`). A name the base doesn't have is an **addition**; a base name with another spec is a **pin**. Nothing runs pnpm when only the user changed the project, since the user's pnpm already installed it. A base package the user removed is put back.
296
292
  - **The layer file** is `var/lib/slicc/<project>/user.json`:
@@ -307,7 +303,7 @@ Under `'off'` and `'report'`, `/opt/agent` and `/opt/grammars` are ordinary pnpm
307
303
  - **Who wins:** a pin wins over the base until the user unpins it. A pin made *ahead* of the base (an upgrade) drops by itself once the deployment's version reaches or passes it, so the user follows the base again; a pin made *behind* it (a rollback) stays. Range, tag and URL pins never drop by themselves. An addition the base later adopts becomes part of the base.
308
304
  - **Certified packages:** a package the base set provides (slicc-kernel, slicc-cdp, wasi-pnpm, spectrum, the `wasm-*` tools) can't be pinned or added in these projects; `/opt/agent`'s kernel has to equal the base set's. bios undoes such a change at the next check and posts a notice naming the base set's version, read from the deployment. After a layered install, every gated package in the project's lockfile (see [Certified packages](#certified-packages)) must be the shipped one or listed in `packages/certs.json` with that integrity.
309
305
  - **Failures:** if the layered install fails or fails that check, bios installs the base again, frozen, and keeps the layer with its error. The rows show it with **Retry**; a new deployment tries again too.
310
- - **The panel** lists the layers under **Your packages** too (spectrum ≥ 1.55.0: `origin: 'user'` and `pin: { base, range, project }` on each row, `base` null for an addition), below Optional packages and only when there is one: *Pinned* rows show the user's version next to the one seven ships and offer **Unpin**, *Added* rows (grammar additions) offer **Remove**. Both edit `user.json` and the project's `package.json` under the project's Web Lock and install again; unpinning everything restores the deployed lockfile byte for byte. An `/opt/agent` change under a running agent offers **Restart agent**, as any agent update does.
306
+ - **The panel** lists the layers under **Your packages** too (spectrum ≥ 1.55.0: `origin: 'user'` and `pin: { base, range, project }` on each row, `base` null for an addition), below Optional packages and only when there is one: *Pinned* rows show the user's version next to the one seven ships and offer **Unpin**, which edits `user.json` and the project's `package.json` under the project's Web Lock and install again; unpinning everything restores the deployed lockfile byte for byte. An `/opt/agent` change under a running agent offers **Restart agent**, as any agent update does.
311
307
  - **Limits:** only the project's dependencies are layered. A changed lockfile alone (a transitive `pnpm update`) and edits to `pnpm-workspace.yaml` (overrides) are replaced by the deployment's at the next update. The root project and `/opt/tailscale` hold only certified packages and have no layer; `pnpm add -g` is the place for the user's own tools, and bios never rewrites it.
312
308
 
313
309
  Packages are served unbundled, exactly as npm publishes them, so `pnpm upgrade <package>` updates one of them in place. Browsers refuse bare specifiers, and an import map would only cover documents, so the service worker rewrites the imports of every script it serves from OPFS, for pages and workers alike:
@@ -418,7 +414,7 @@ seven can also join a tailnet, with a patched build of Tailscale's wasm client (
418
414
  `document.documentElement.dataset.tailscale` shows the backend state, or `off`. While an exit node is in use, the panel's Connection block reports `route: 'tailnet'` (spectrum ≥ 1.41.0), with health `ok` and a note that this computer's own services still go through the base route. Without one, it reports the base route.
419
415
  - **Joining:** **Sign in to Tailscale** opens Tailscale's login in a new tab. Or paste an auth key into the panel's field. A key is held in memory for that one login and is never stored, put in a URL or logged. An auth key in the fragment is dropped with a warning. The integration test hands its key to the page in `globalThis.sliccTailscaleAuthKey` through an init script, and the page takes it once and deletes it. The tailnet object is exposed as `globalThis.sliccTailscale` only when an init script sets `globalThis.sliccTailscaleDebug`, as the integration test does.
420
416
  - **Nothing inbound:** the node runs with shields up, so tailnet peers can't open connections to it. The build has no peerapi server, and the page listens on nothing. Peers can't reach the kernel's services, `*.kernel.localhost` or the CDP facade.
421
- - **Where the wasm comes from:** shown as **Tailscale (/opt/tailscale)** in [Install / Update](#install--update). [`@ai-ecoverse/wasm-tailscale`](https://www.npmjs.com/package/@ai-ecoverse/wasm-tailscale) (built in [ai-ecoverse/wasm-tailscale](https://github.com/ai-ecoverse/wasm-tailscale), certified, 1.104.1-11, which drops hop-by-hop headers (Proxy-Authorization, Proxy-Authenticate, TE and any header named in Connection) before a request reaches a tailnet server through `ipn.fetch` or `ipn.websocket` (wasm-tailscale#12), handles oversized text (#10), and no longer drops unread messages silently when a WebSocket closes (#11)) is a pnpm project of its own, [`src/packages/tailscale/`](src/packages/tailscale/), installed like the grammars, never at boot. The first time Tailscale is turned on, `os/tailscale.js` writes the deployed manifest and lockfile to `/opt/tailscale` and runs `pnpm install --frozen-lockfile --trust-lockfile` there under the Web Lock `slicc-tailscale`. The panel shows the download progress. The lockfile is recorded in `var/lib/slicc/tailscale/pnpm-lock.yaml`, so later starts skip the install, and a new deployed lockfile installs the new version on the next start. The page then reads `main.wasm` and `wasm_exec.js` through the kernel. A host folder mounted at `/mnt/tailscale`, or a folder named in the stored setting's `from`, (`npx @ai-ecoverse/slicc-node --mount <dist>:tailscale:ro`, then `mount -t hostfs tailscale /mnt/tailscale`) wins over the package, for trying a local build.
417
+ - **Where the wasm comes from:** shown as **Tailscale (/opt/tailscale)** in [Install / Update](#install--update). [`@ai-ecoverse/wasm-tailscale`](https://www.npmjs.com/package/@ai-ecoverse/wasm-tailscale) (built in [ai-ecoverse/wasm-tailscale](https://github.com/ai-ecoverse/wasm-tailscale), certified, 1.104.1-11, which drops hop-by-hop headers (Proxy-Authorization, Proxy-Authenticate, TE and any header named in Connection) before a request reaches a tailnet server through `ipn.fetch` or `ipn.websocket` (wasm-tailscale#12), handles oversized text (#10), and no longer drops unread messages silently when a WebSocket closes (#11)) is a pnpm project of its own, [`src/packages/tailscale/`](src/packages/tailscale/), installed like the agent, never at boot. The first time Tailscale is turned on, `os/tailscale.js` writes the deployed manifest and lockfile to `/opt/tailscale` and runs `pnpm install --frozen-lockfile --trust-lockfile` there under the Web Lock `slicc-tailscale`. The panel shows the download progress. The lockfile is recorded in `var/lib/slicc/tailscale/pnpm-lock.yaml`, so later starts skip the install, and a new deployed lockfile installs the new version on the next start. The page then reads `main.wasm` and `wasm_exec.js` through the kernel. A host folder mounted at `/mnt/tailscale`, or a folder named in the stored setting's `from`, (`npx @ai-ecoverse/slicc-node --mount <dist>:tailscale:ro`, then `mount -t hostfs tailscale /mnt/tailscale`) wins over the package, for trying a local build.
422
418
  - **Routing:** the kernel keeps the transport [picked above](#network), and Tailscale is layered over it. While an exit node is in use, every request goes through the tailnet, except what [never goes out](#network) (loopback keeps `host.slicc.internal` on the local proxy). Without one, only tailnet addresses (`100.64.0.0/10`, `fd7a:115c:a1e0::/48`) and MagicDNS names go there.
423
419
  - **Exits:** `os/exits.js` routes traffic over any number of exits: Tailscale, and linked devices.
424
420
  - **Linked devices:** `os/link.js` links a `slicc` CLI to the page over WebRTC, as one exit per link. It speaks the [slicc link protocol](https://github.com/ai-ecoverse/slicc-cli): slicc-node's tunnel frames over data channels, with one channel per stream and a 256 KiB credit window per stream and direction.
@@ -616,7 +612,7 @@ Seven certifies a gated package (slicc-kernel, slicc-cdp, slicc-audio, slicc-cap
616
612
 
617
613
  [`renovate.json`](renovate.json) bumps every `@ai-ecoverse/*` pin in the base set (`src/packages/package.json`) and `/opt/agent` (`src/packages/agent/package.json`), with their npm and pnpm lockfiles. The optional catalog pins nothing, so it needs no bumps; the Python data tools' project (`src/packages/optional/projects/pydata`) is pinned by hand, from the dependency dashboard.
618
614
 
619
- - **PRs:** homescoop's packages (`wasi-*`, `wasix-*`, `wasm-*`, `py-*`, `wasi-pnpm` included) come as one PR a day, between 00:00 and 06:00 UTC. The kernel (its base-set and `/opt/agent` pins together), slicc-cdp, slicc-agent and slicc-spectrum each get their own PR, and so does every other package. The grammars and Tailscale projects stay on the dependency dashboard.
615
+ - **PRs:** homescoop's packages (`wasi-*`, `wasix-*`, `wasm-*`, `py-*`, `wasi-pnpm` included) come as one PR a day, between 00:00 and 06:00 UTC. The kernel (its base-set and `/opt/agent` pins together), slicc-cdp, slicc-agent and slicc-spectrum each get their own PR, and so does every other package. The Tailscale project stays on the dependency dashboard.
620
616
  - **Automerge once CI is green:** Renovate turns on auto-merge, so a PR goes through the merge queue once its required checks, `ci / integration` and `ci / review`, are green (see [CI](#ci)). No bot writes to a Renovate branch: the shipped lockfiles are part of what seven certifies, so a certified pin needs no `certs.json` line.
621
617
  - **Known breaks** are `packageRules` with `allowedVersions`, each with its reason and issue in `description`. Today the only one is wasi-pnpm skipping the deprecated 12.9.1-11 and 12.9.1-12 (homescoop#1128). wasm-bash's hold below 5.3.0-20 went with the pin of kernel 1.135.2, which has slicc-kernel#1146. bash 5.3.0-20 and later count as certified only with kernel 1.130.2 or later (homescoop#1230), and -21 declares `engines.slicc-kernel >=1.130.2`. `test/integration/renovate.test.mjs` checks the config, the gate and the queue in plain node.
622
618
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-bios",
3
- "version": "1.48.1",
3
+ "version": "1.48.3",
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",
@@ -50,10 +50,10 @@
50
50
  "devDependencies": {
51
51
  "@ai-ecoverse/slicc": "1.49.25",
52
52
  "@ai-ecoverse/slicc-browsers": "1.18.14",
53
- "@ai-ecoverse/slicc-cdp": "1.41.20",
53
+ "@ai-ecoverse/slicc-cdp": "1.42.2",
54
54
  "@ai-ecoverse/slicc-node": "2.5.1",
55
55
  "@ai-ecoverse/slicc-shared-web": "2.13.2",
56
- "@ai-ecoverse/slicc-spectrum": "1.104.1",
56
+ "@ai-ecoverse/slicc-spectrum": "1.107.2",
57
57
  "@ai-ecoverse/slicc-vault": "1.17.0",
58
58
  "@biomejs/biome": "2.5.15",
59
59
  "aws4fetch": "1.0.20",
@@ -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.7",
6
+ "@ai-ecoverse/slicc-agent": "7.8.8",
7
7
  "@ai-ecoverse/slicc-kernel": "1.167.4"
8
8
  }
9
9
  }
@@ -14,8 +14,8 @@ importers:
14
14
  .:
15
15
  dependencies:
16
16
  '@ai-ecoverse/slicc-agent':
17
- specifier: 7.8.7
18
- version: 7.8.7(@ai-ecoverse/slicc-kernel@1.167.4)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
17
+ specifier: 7.8.8
18
+ version: 7.8.8(@ai-ecoverse/slicc-kernel@1.167.4)(@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.167.4
21
21
  version: 1.167.4
@@ -25,8 +25,8 @@ packages:
25
25
  '@ai-ecoverse/jerk-oauth@1.3.0':
26
26
  resolution: {integrity: sha512-dbCU1KgYns8lP8IUCWbvCxQxCFSiVxuEYViu4CcnxphcrL9gltTvPdBpQOfAduU80GQTU3H4CMjGwuCo6EGNhg==}
27
27
 
28
- '@ai-ecoverse/slicc-agent@7.8.7':
29
- resolution: {integrity: sha512-AQhba1SK6dkbftC3/BviBrf7JVzEvkQeHc7FWfzwgdr3bipWHIZa7Bh0W8NsAEsJIVMK34WPOHdQzofharOi2g==}
28
+ '@ai-ecoverse/slicc-agent@7.8.8':
29
+ resolution: {integrity: sha512-6MOpHEY3ljdTkVPbO4jZNiX1tPoAVQaP2ngChY61LL1ElKl/B5fWYzwj+ikUjjZ4taQI921PaBHqnOJ2Vx1olg==}
30
30
  engines: {node: '>=24'}
31
31
  peerDependencies:
32
32
  '@ai-ecoverse/slicc-kernel': '>=1.110.0 <2'
@@ -35,8 +35,8 @@ packages:
35
35
  '@ai-ecoverse/slicc-spectrum':
36
36
  optional: true
37
37
 
38
- '@ai-ecoverse/slicc-browsers@1.18.14':
39
- resolution: {integrity: sha512-BJAYu1tPJETsQFJEWdCyxWYU5oYaRwMdH1u4sJMvtBLVegkoRrEo5ruEAbIfzx63OJryzTylVYQ8FPVSVomxNA==}
38
+ '@ai-ecoverse/slicc-browsers@1.18.15':
39
+ resolution: {integrity: sha512-wdihEFKgVCU9xjL7D/lJeMveGBosqwqDXzJNh0Y4mo6XNAXRehY9lpq1XpFx+Pt4jCPzEZwYfjChPLC1MdXu+g==}
40
40
  engines: {node: '>=24'}
41
41
 
42
42
  '@ai-ecoverse/slicc-kernel@1.167.4':
@@ -355,9 +355,9 @@ snapshots:
355
355
 
356
356
  '@ai-ecoverse/jerk-oauth@1.3.0': {}
357
357
 
358
- '@ai-ecoverse/slicc-agent@7.8.7(@ai-ecoverse/slicc-kernel@1.167.4)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
358
+ '@ai-ecoverse/slicc-agent@7.8.8(@ai-ecoverse/slicc-kernel@1.167.4)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
359
359
  dependencies:
360
- '@ai-ecoverse/slicc-browsers': 1.18.14
360
+ '@ai-ecoverse/slicc-browsers': 1.18.15
361
361
  '@ai-ecoverse/slicc-kernel': 1.167.4
362
362
  '@ai-ecoverse/slicc-vault': 1.17.0
363
363
  '@aws-sdk/middleware-websocket': 3.972.54
@@ -380,7 +380,7 @@ snapshots:
380
380
  - ws
381
381
  - zod
382
382
 
383
- '@ai-ecoverse/slicc-browsers@1.18.14': {}
383
+ '@ai-ecoverse/slicc-browsers@1.18.15': {}
384
384
 
385
385
  '@ai-ecoverse/slicc-kernel@1.167.4': {}
386
386
 
@@ -9,10 +9,10 @@
9
9
  "@ai-ecoverse/slicc-audio": "1.1.2",
10
10
  "@ai-ecoverse/slicc-browsers": "1.18.14",
11
11
  "@ai-ecoverse/slicc-capture": "1.4.1",
12
- "@ai-ecoverse/slicc-cdp": "1.41.20",
12
+ "@ai-ecoverse/slicc-cdp": "1.42.2",
13
13
  "@ai-ecoverse/slicc-clipboard": "1.1.1",
14
14
  "@ai-ecoverse/slicc-kernel": "1.167.4",
15
- "@ai-ecoverse/slicc-spectrum": "1.104.1",
15
+ "@ai-ecoverse/slicc-spectrum": "1.107.2",
16
16
  "@ai-ecoverse/wasi-fnox": "1.40.0-1",
17
17
  "@ai-ecoverse/wasi-pnpm": "12.9.1-21",
18
18
  "@ai-ecoverse/wasi-ripgrep": "15.2.0-5",
@@ -81,9 +81,9 @@
81
81
  }
82
82
  },
83
83
  "node_modules/@ai-ecoverse/slicc-cdp": {
84
- "version": "1.41.20",
85
- "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-cdp/-/slicc-cdp-1.41.20.tgz",
86
- "integrity": "sha512-gStUfQJD/p9nXDbPWV75hCHqz1AbCGAvESIzAswVB2N/HH3IOHSaXJoN0/0YSSbxcfd4wlCuiOaE61N5Q3aeeQ==",
84
+ "version": "1.42.2",
85
+ "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-cdp/-/slicc-cdp-1.42.2.tgz",
86
+ "integrity": "sha512-1dRpeDcSNAv8qYTGCo0Y+hXDSILOO7mnB7hudfaw+rvhyCUei4E5XsdMFV1sVrlTxNOYmqQRNJyQEfc3LkOPMg==",
87
87
  "license": "Apache-2.0",
88
88
  "workspaces": [
89
89
  "packages/sliccy-browser"
@@ -195,24 +195,12 @@
195
195
  }
196
196
  },
197
197
  "node_modules/@ai-ecoverse/slicc-spectrum": {
198
- "version": "1.104.1",
199
- "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-spectrum/-/slicc-spectrum-1.104.1.tgz",
200
- "integrity": "sha512-/NNo3NmWc8l4+fcVKlynOKzRFbi2N/1H1w8Hkn4N8B51UgjvAW+Y3oykgp0kePQPb11zjithkKmZjC22CdXMkw==",
198
+ "version": "1.107.2",
199
+ "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-spectrum/-/slicc-spectrum-1.107.2.tgz",
200
+ "integrity": "sha512-zN4kW/Ss8X9sAbszs2uwv1dO4UpSfqWutd8Sc4BD3EfmUekYJcPSsqVuKzlkhPtIBlWDVpQu/pgLDYPzQ3r+PA==",
201
201
  "license": "Apache-2.0",
202
202
  "engines": {
203
203
  "node": ">=24"
204
- },
205
- "peerDependencies": {
206
- "@shikijs/langs": "4.5.0",
207
- "@shikijs/themes": "4.5.0"
208
- },
209
- "peerDependenciesMeta": {
210
- "@shikijs/langs": {
211
- "optional": true
212
- },
213
- "@shikijs/themes": {
214
- "optional": true
215
- }
216
204
  }
217
205
  },
218
206
  "node_modules/@ai-ecoverse/wasi-fnox": {
@@ -6,10 +6,10 @@
6
6
  "@ai-ecoverse/slicc-audio": "1.1.2",
7
7
  "@ai-ecoverse/slicc-browsers": "1.18.14",
8
8
  "@ai-ecoverse/slicc-capture": "1.4.1",
9
- "@ai-ecoverse/slicc-cdp": "1.41.20",
9
+ "@ai-ecoverse/slicc-cdp": "1.42.2",
10
10
  "@ai-ecoverse/slicc-clipboard": "1.1.1",
11
11
  "@ai-ecoverse/slicc-kernel": "1.167.4",
12
- "@ai-ecoverse/slicc-spectrum": "1.104.1",
12
+ "@ai-ecoverse/slicc-spectrum": "1.107.2",
13
13
  "@ai-ecoverse/wasi-fnox": "1.40.0-1",
14
14
  "@ai-ecoverse/wasi-pnpm": "12.9.1-21",
15
15
  "@ai-ecoverse/wasi-ripgrep": "15.2.0-5",
@@ -18,8 +18,8 @@ importers:
18
18
  specifier: 1.4.1
19
19
  version: 1.4.1
20
20
  '@ai-ecoverse/slicc-cdp':
21
- specifier: 1.41.20
22
- version: 1.41.20
21
+ specifier: 1.42.2
22
+ version: 1.42.2
23
23
  '@ai-ecoverse/slicc-clipboard':
24
24
  specifier: 1.1.1
25
25
  version: 1.1.1
@@ -27,8 +27,8 @@ importers:
27
27
  specifier: 1.167.4
28
28
  version: 1.167.4
29
29
  '@ai-ecoverse/slicc-spectrum':
30
- specifier: 1.104.1
31
- version: 1.104.1
30
+ specifier: 1.107.2
31
+ version: 1.107.2
32
32
  '@ai-ecoverse/wasi-fnox':
33
33
  specifier: 1.40.0-1
34
34
  version: 1.40.0-1
@@ -118,8 +118,8 @@ packages:
118
118
  engines: {node: '>=24', slicc-kernel: '>=1.153.0'}
119
119
  hasBin: true
120
120
 
121
- '@ai-ecoverse/slicc-cdp@1.41.20':
122
- resolution: {integrity: sha512-gStUfQJD/p9nXDbPWV75hCHqz1AbCGAvESIzAswVB2N/HH3IOHSaXJoN0/0YSSbxcfd4wlCuiOaE61N5Q3aeeQ==}
121
+ '@ai-ecoverse/slicc-cdp@1.42.2':
122
+ resolution: {integrity: sha512-1dRpeDcSNAv8qYTGCo0Y+hXDSILOO7mnB7hudfaw+rvhyCUei4E5XsdMFV1sVrlTxNOYmqQRNJyQEfc3LkOPMg==}
123
123
  engines: {node: '>=24'}
124
124
  hasBin: true
125
125
 
@@ -175,17 +175,9 @@ packages:
175
175
  webgpu:
176
176
  optional: true
177
177
 
178
- '@ai-ecoverse/slicc-spectrum@1.104.1':
179
- resolution: {integrity: sha512-/NNo3NmWc8l4+fcVKlynOKzRFbi2N/1H1w8Hkn4N8B51UgjvAW+Y3oykgp0kePQPb11zjithkKmZjC22CdXMkw==}
178
+ '@ai-ecoverse/slicc-spectrum@1.107.2':
179
+ resolution: {integrity: sha512-zN4kW/Ss8X9sAbszs2uwv1dO4UpSfqWutd8Sc4BD3EfmUekYJcPSsqVuKzlkhPtIBlWDVpQu/pgLDYPzQ3r+PA==}
180
180
  engines: {node: '>=24'}
181
- peerDependencies:
182
- '@shikijs/langs': 4.5.0
183
- '@shikijs/themes': 4.5.0
184
- peerDependenciesMeta:
185
- '@shikijs/langs':
186
- optional: true
187
- '@shikijs/themes':
188
- optional: true
189
181
 
190
182
  '@ai-ecoverse/wasi-fnox@1.40.0-1':
191
183
  resolution: {integrity: sha512-/1c/ueKiqih0NfgQdQ96Re/LKYQx6vWz31Od7V3YWAgvAxGr9+BBfWhseM/VP7+bUzSPw0ZmD+CqAQ/vJhihog==}
@@ -393,7 +385,7 @@ snapshots:
393
385
 
394
386
  '@ai-ecoverse/slicc-capture@1.4.1': {}
395
387
 
396
- '@ai-ecoverse/slicc-cdp@1.41.20': {}
388
+ '@ai-ecoverse/slicc-cdp@1.42.2': {}
397
389
 
398
390
  '@ai-ecoverse/slicc-clipboard@1.1.1': {}
399
391
 
@@ -415,7 +407,7 @@ snapshots:
415
407
  - utf-8-validate
416
408
  optional: true
417
409
 
418
- '@ai-ecoverse/slicc-spectrum@1.104.1': {}
410
+ '@ai-ecoverse/slicc-spectrum@1.107.2': {}
419
411
 
420
412
  '@ai-ecoverse/wasi-fnox@1.40.0-1': {}
421
413