@ai-ecoverse/slicc-bios 1.11.2 → 1.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
@@ -81,8 +81,10 @@ The kernel runs with users on (slicc-kernel ≥ 1.81.0): files have owners and m
81
81
  - **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.
82
82
  - **Global packages** (`pnpm add -g` into `/usr/local/share/pnpm`) aren't protected and run untagged.
83
83
  - **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*.
84
- - **Sudo approvals:** the kernel's `approve` hook feeds `model.approvals`, spectrum's sudo dialog. It shows the resolved path and arguments, shell-quoted, the directory, the requester mapped from the tag, the target and *Always allow*. Every tab shows the request (`BroadcastChannel('slicc-approvals')`), and the first decision wins; the other tabs see *Answered in another tab*. *Always allow* is offered only for a command bios trusts to run the same way every time: the kernel's resolved path, whose real path and every directory above it are root's and not group- or other-writable (checked by a root `stat` when the request comes), that isn't a shell, interpreter or wrapper (`bash`, `python*`, `node`, `env`, `xargs`, `sudo`, `timeout`, `find -exec` and the like), doesn't write named files (`tee`, `cp`, `mv`, `chmod`, `dd`, `sed -i`, `tar -x`, `git`, `pnpm` and the like), whose operands are all absolute, inside none of `/tmp`, `/var/tmp`, `/home`, `/mnt`, `/scoops` and `/dev/shm`, and not user-writable (a file that isn't root's or is group- or other-writable, a directory above that is, or a missing path whose parent is), with no shell metacharacter in any argument, and which may not change the secret rules. Everything else gets *Allow once* only. A request that may change the secret rules never offers *Always allow* either. bios decides that at least as broadly as spectrum's dialog: it runs the dialog's own classifier (spectrum's exported `secretRules`; without it every command counts as one that may change them), its own path check (`/etc/fnox`, `/etc/slicc/secrets-policy.toml`, and for a command that isn't read-only `/`, `/etc`, `/etc/slicc`, a name with `fnox` or `secrets-policy`, a glob or `..`), and treats any `$`, backtick, quote or backslash in an argument, and any quoting or `cd` inside a `-c` script, as a possible change. For such a request bios sends `always: false`, and answers an `always` for it, from any tab, as `once`, so no `NOPASSWD` line is written for it.
84
+ - **Sudo approvals through the agent** (slicc-agent ≥ 5.9.0): while the agent runs, the kernel's `approve` hook hands each request to the agent's `owner.approve(req, { signal, where })`. It becomes a `sudo` item in the agent's approvals, which every owner device answers with the same powers: this tab, other tabs, and linked followers with or without Control, *Always allow* included where bios offered it. bios sets `req.always` from the checks below, and turns an *Always* it didn't offer into *Allow once*. A request from a follower's shell names that device (`where`, "on <device>"), and each linked device's agent port is opened with `owner.port({ device })`, so the item records which device answered. The tab hands its own approvals port to `createAgentModel(connection, { approvals })`, so `model.approvals` lists both sets. When the agent can't take a request (it rejects with `EAGAIN`: released, restarting or an older worker) or isn't running, bios's own dialog below asks instead.
85
+ - **Sudo approvals in bios's dialog:** the kernel's `approve` hook feeds `model.approvals`, spectrum's sudo dialog. It shows the resolved path and arguments, shell-quoted, the directory, the requester mapped from the tag, the target and *Always allow*. Every tab shows the request (`BroadcastChannel('slicc-approvals')`), and the first decision wins; the other tabs see *Answered in another tab*. *Always allow* is offered only for a command bios trusts to run the same way every time: the kernel's resolved path, whose real path and every directory above it are root's and not group- or other-writable (checked by a root `stat` when the request comes), that isn't a shell, interpreter or wrapper (`bash`, `python*`, `node`, `env`, `xargs`, `sudo`, `timeout`, `find -exec` and the like), doesn't write named files (`tee`, `cp`, `mv`, `chmod`, `dd`, `sed -i`, `tar -x`, `git`, `pnpm` and the like), whose operands are all absolute, inside none of `/tmp`, `/var/tmp`, `/home`, `/mnt`, `/scoops` and `/dev/shm`, and not user-writable (a file that isn't root's or is group- or other-writable, a directory above that is, or a missing path whose parent is), with no shell metacharacter in any argument, and which may not change the secret rules. Everything else gets *Allow once* only. A request that may change the secret rules never offers *Always allow* either. bios decides that at least as broadly as spectrum's dialog: it runs the dialog's own classifier (spectrum's exported `secretRules`; without it every command counts as one that may change them), its own path check (`/etc/fnox`, `/etc/slicc/secrets-policy.toml`, and for a command that isn't read-only `/`, `/etc`, `/etc/slicc`, a name with `fnox` or `secrets-policy`, a glob or `..`), and treats any `$`, backtick, quote or backslash in an argument, and any quoting or `cd` inside a `-c` script, as a possible change. For such a request bios sends `always: false`, and answers an `always` for it, from any tab, as `once`, so no `NOPASSWD` line is written for it.
85
86
  - **Denials:** denials under `'report'` and `'enforce'` go to `/var/log/slicc/denials.log`, one JSON line per distinct `(uid, tag, op, path, errno)` with its `count`, `first` and last `time`, plus `user`, `tag` (the process's tag, `null` for an untagged one) and `mode`. They're written within a quarter of a second, at every 100 distinct denials, and when the page is hidden (`visibilitychange`). When the page goes away (`pagehide`), the ones not yet written are kept in `localStorage` (`slicc.denials.spool.*`), and the next page writes them once its kernel is up. The log rotates to `denials.log.1` at 1 MiB. `slicc-denials` (in `/usr/local/bin`) sums up the log and its `.1`: the total and time span, then counts by tag kind (`agent`, `user`, `untagged`), op, errno and path prefix; `--json` prints the same as one object.
87
+ - **Schedules** (slicc-agent ≥ 5.9.0, slicc-kernel ≥ 1.110.0): each user's kernel crontab (`/var/spool/cron/crontabs/<user>`, `crontab -l`) holds them, and the kernel runs a due job as its user. A job that runs `agent send <target> '<message>'` comes back as a cron lick. The agent moves an older agent's `~/.slicc/crontab` lines into the file owner's crontab (as `# name: <name>` and `<schedule> agent send …`) and keeps the file as `~/.slicc/crontab.migrated`.
86
88
  - **Not a boundary:** the kernel's loopback (`<port>.kernel.localhost`) isn't one between users (N2). A server any user starts is reachable by every process and by seven's pages.
87
89
 
88
90
  ### Folder mounts
@@ -371,7 +373,7 @@ seven can also join a tailnet, with a patched build of Tailscale's wasm client (
371
373
  - **Identity:** one persistent DTLS certificate per hub origin (`RTCPeerConnection.generateCertificate`, ECDSA P-256 for a year, in the IndexedDB database `slicc-follow`), so the device and its access survive reloads. Unlinking deletes it.
372
374
  - **The link:** the follower answers as the link's node: its HELLO says `role: 'node'`, `kind: 'seven'`, caps `join` and `permissions`, and its tab as `node`, and it opens even stream ids. The owner treats a link as a follower because the hub said `slicc-seven/1`, and closes it if HELLO disagrees. A follower gets no `.slicc.internal` name, no exit, and none of the CLI kinds: the owner refuses `kernel`, `agent` and `browsers` from it with `EOPNOTSUPP`.
373
375
  - **View, Control and Terminal:** each follower certificate has three switches in Linked devices, off by default and kept with the device in `slicc-os.devices` (`setAccess` on the network port). Control and Terminal need View, so turning either on turns View on, and turning View off clears both. Without View a follower links but gets nothing: it shows as **Asks to follow**, with Allow, and its page says it waits for the owner. The owner's HELLO carries the current switches, and every change goes to the follower as `OPEN { kind: 'permissions', view, control, terminal }` on the control channel. Losing View resets the follower's open streams with `EACCES`, and so does losing Terminal for its terminals. For a CLI, the old **Allow remote control** is the same Control switch.
374
- - **Chat (`pi`):** with View, the follower opens `OPEN { kind: 'pi' }` and gets the owner's agent, the same replicated chat a follower tab has. The owner bridges the stream to `owner.port({ readOnly, pages: false })` with slicc-agent's `bridgePort` (agent ≥ 3.32.0), read-only unless the device has Control, and without `pages`, so a follower's agent can't drive the owner's panels. The follower builds its `AgentConnection` with `linkEndpoint` and `connectAgent`, and spectrum's agent model on top. The stream carries slicc-agent's frames: a `u32` length, a `u8` tag (data, hello or close) and the payload. Without Control, a send, steer or stop is refused by the owner's agent with `EACCES`, and the chat shows that it watches only. Changing Control resets the stream, so the follower reconnects with the new access, and losing View resets it with `EACCES`. The follower installs `/opt/agent` itself, for `page.js` and the agent model, in a kernel it starts only for that install. Linked devices shows *Watching* while a follower's chat is open.
376
+ - **Chat (`pi`):** with View, the follower opens `OPEN { kind: 'pi' }` and gets the owner's agent, the same replicated chat a follower tab has. The owner bridges the stream to `owner.port({ readOnly, pages: false, device })` with slicc-agent's `bridgePort` (agent ≥ 3.32.0; `device`, the link's id, from 5.9.0), read-only unless the device has Control, and without `pages`, so a follower's agent can't drive the owner's panels. The follower builds its `AgentConnection` with `linkEndpoint` and `connectAgent`, and spectrum's agent model on top. The stream carries slicc-agent's frames: a `u32` length, a `u8` tag (data, hello or close) and the payload. Without Control, a send, steer or stop is refused by the owner's agent with `EACCES`, and the chat shows that it watches only. Changing Control resets the stream, so the follower reconnects with the new access, and losing View resets it with `EACCES`. The follower installs `/opt/agent` itself, for `page.js` and the agent model, in a kernel it starts only for that install. Linked devices shows *Watching* while a follower's chat is open. A failed connection is tried again after 2 s, except when the owner runs another agent version: `connectAgent` then rejects with `EVERSION` (slicc-agent ≥ 5.5.2), and the follower shows the agent's sentence as bios's own warning (`follow:other-agent-version`, not dismissable) and makes no further attempt in that follow session.
375
377
  - **Terminals (`terminal`):** with View and Terminal, the follower's Terminal panel opens shells in the owner's kernel. Each one is `OPEN { kind: 'terminal', cols, rows, cwd? }`, and the owner runs `bash -i` there with its own terminals' prompt, as the same user its own terminals use (root today, so Terminal is a root shell on the owner's SLICC), and answers OPENED `{ pid }`. Both directions then carry records, each a `u32` length, a `u8` type and a payload: `0` terminal bytes, `1` a resize as `{ cols, rows }` JSON, `2` a signal name (`INT`, `TSTP`, `QUIT`, `HUP`), and, from the owner only, `3` the shell's exit status as a decimal string, just before END. A bad record or size resets the stream with `EPROTO` or `EINVAL`. The follower's END closes the shell, and the owner ends the stream when the shell exits. Linked devices shows *Terminal open* while one runs (`terminals`), and turning Terminal or View off resets every open shell with `EACCES`.
376
378
  - **Names:** both sides call themselves `SLICC on <platform>` (`navigator.userAgentData.platform`). When two show the same name, the first four hex digits of the certificate fingerprint are added.
377
379
  - **Sevens this kernel follows (the in-kernel `slicc`):** the optional `slicc` package (`@ai-ecoverse/wasi-slicc`, slicc-cli's client commands built for `wasip1`) runs `slicc <join-url> prompt|watch|abort` in seven's terminal against another seven's agent, as slicc-cli's README specifies in §1.4 and §5.16. The program never touches WebRTC, the hub or the join state: it reaches the page's **link facade** at `SLICC_LINK_URL` (`tcp://127.0.0.1:7400`), which `os/os.js` declares with `createKernel({ facades: { link: { port: 7400, hook } } })` (`os/facade.js`, slicc-kernel ≥ 1.90.0), and the page follows that seven's tray for it (`os/leaders.js`).
@@ -471,7 +473,7 @@ Limits:
471
473
 
472
474
  [`.github/workflows/canary.yml`](.github/workflows/canary.yml) answers "is bios main green with these candidate versions?" before anyone asks for a pin. It never pushes, pins or opens a PR: it reports.
473
475
 
474
- - **Triggers:** `workflow_dispatch` and `workflow_call` with `overrides`, a JSON list of `name@version` (`["@ai-ecoverse/slicc-kernel@1.81.0"]`), and optionally `runner`, `shards` (names from [`scripts/canary/shards.json`](scripts/canary/shards.json); ci.yml's `follow-chat`, `remote-pydata`, `users-agent-ui`, `packages-update-cdp`, `guard`, `k4-link` and `rest` by default, or `sweep` for just the base-set sweep and the certs check), `expect` and `bios-ref` (any branch or sha of slicc-bios: the shard jobs check it out and lay this ref's `scripts/canary`, and `sweep.test.mjs` if it has none, over it; a ref whose `pins.test.mjs` has no canary mode gets the candidates in its working copy of `certs.json` instead, and the report still lists them as candidates). A proof in `proofs.json` can name its own `ref` the same way. An hourly `schedule` checks npm's `latest` of every kernel, jsh, cdp, agent, `wasm-*`, `wasi-*`, `wasix-*` and `py-*` package that a `src/packages/**/package.json` pins, and runs once with every newer one as the overrides, only when that list differs from the last scheduled canary's (its inputs are kept in the Actions cache). A `pull_request` trigger, filtered to the canary's own files, runs the proof in [`scripts/canary/proofs.json`](scripts/canary/proofs.json) from one plan job, cancelling a superseded run: kernel 1.78.0 on the `sweep` shard must regress grep, sed, jq, xz, findutils, diffutils and patch with exit 70 (kernel #483). A second proof packs `@ai-ecoverse/slicc-cdp@1.26.2` with `npm pack`, uploads it from the plan job, and runs it as a candidate artifact on `packages-update-cdp` and `guard` with `repeat: 3`.
476
+ - **Triggers:** `workflow_dispatch` and `workflow_call` with `overrides`, a JSON list of `name@version` (`["@ai-ecoverse/slicc-kernel@1.81.0"]`), and optionally `runner`, `shards` (names from [`scripts/canary/shards.json`](scripts/canary/shards.json); ci.yml's `follow-chat`, `remote-pydata`, `users-agent-ui`, `packages-update-cdp`, `guard`, `guard-set-extension-prompt`, `guard-set-extension-lagging`, `guard-set-proxy-prompt`, `guard-set-proxy-lagging`, `k4-link`, `user-packages-keys-favicon` and `rest` by default; a shard's `env` in that file, such as `GUARD_VARIANTS`, is set for its tests, or `sweep` for just the base-set sweep and the certs check), `expect` and `bios-ref` (any branch or sha of slicc-bios: the shard jobs check it out and lay this ref's `scripts/canary`, and `sweep.test.mjs` if it has none, over it; a ref whose `pins.test.mjs` has no canary mode gets the candidates in its working copy of `certs.json` instead, and the report still lists them as candidates). A proof in `proofs.json` can name its own `ref` the same way. An hourly `schedule` checks npm's `latest` of every kernel, jsh, cdp, agent, `wasm-*`, `wasi-*`, `wasix-*` and `py-*` package that a `src/packages/**/package.json` pins, and runs once with every newer one as the overrides, only when that list differs from the last scheduled canary's (its inputs are kept in the Actions cache). A `pull_request` trigger, filtered to the canary's own files, runs the proof in [`scripts/canary/proofs.json`](scripts/canary/proofs.json) from one plan job, cancelling a superseded run: kernel 1.78.0 on the `sweep` shard must regress grep, sed, jq, xz, findutils, diffutils and patch with exit 70 (kernel #483). A second proof packs `@ai-ecoverse/slicc-cdp@1.26.2` with `npm pack`, uploads it from the plan job, and runs it as a candidate artifact on `packages-update-cdp` and `guard` with `repeat: 3`.
475
477
  - **A candidate from another repo's run:** `candidate-package` (the package it replaces, `@ai-ecoverse/slicc-cdp`), `candidate-artifact` (an artifact holding one `npm pack` tarball of it), `candidate-run` (the run that uploaded it), `candidate-sha256` and optionally `candidate-repo` (the caller's repository by default). Each shard job downloads the artifact with `github.token`, which under `workflow_call` is the caller's, so the caller's job needs `actions: read`. [`override-pins.mjs`](scripts/canary/override-pins.mjs) checks the tarball's sha256 before it reads anything and refuses a mismatch, then checks the tarball is that package with an exact version. It seeds the harness download cache with the bytes at the npm URL of that version, and rewrites the pins and locks through a local registry that serves npm's packuments with that version added, so an unpublished `x.y.z-pr.N.M` locks like a published one (npm's lock gets the registry URL back). Everything else stays a registry version. The report lists it as `candidate (artifact <run>/<name>, sha256 …)`.
476
478
  - **`repeat`** (1 to 10, default 1): each selected test file runs that many times with the candidates, and the files with a failure run that many times on main's pins. A test failing in every candidate run and no baseline run is a regression, one failing in every run of both is a failure on both, and anything mixed is flaky. Each row carries its counts, `candidate 2/3, baseline 0/3`.
477
479
  - **`result`**, a `workflow_call` output next to `ok`: the JSON summary (`ok`, `counts`, `regressions`, `both`, `flaky`, `failures`, `missingShards`, `unexplainedExits`, `candidates`, `overrides`, `repeat`) plus the `canary` artifact's name and URL.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-bios",
3
- "version": "1.11.2",
3
+ "version": "1.12.0",
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",
@@ -46,7 +46,7 @@
46
46
  "@ai-ecoverse/slicc-browsers": "1.7.6",
47
47
  "@ai-ecoverse/slicc-node": "2.5.1",
48
48
  "@ai-ecoverse/slicc-shared-web": "1.23.1",
49
- "@ai-ecoverse/slicc-spectrum": "1.77.0",
49
+ "@ai-ecoverse/slicc-spectrum": "1.84.2",
50
50
  "@ai-ecoverse/slicc-vault": "1.9.2",
51
51
  "@biomejs/biome": "2.5.15",
52
52
  "es-module-lexer": "3.0.3",
@@ -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": "5.0.3",
6
+ "@ai-ecoverse/slicc-agent": "6.0.1",
7
7
  "@ai-ecoverse/slicc-kernel": "1.113.0"
8
8
  }
9
9
  }
@@ -12,26 +12,26 @@ importers:
12
12
  .:
13
13
  dependencies:
14
14
  '@ai-ecoverse/slicc-agent':
15
- specifier: 5.0.3
16
- version: 5.0.3(@ai-ecoverse/slicc-kernel@1.113.0)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
15
+ specifier: 6.0.1
16
+ version: 6.0.1(@ai-ecoverse/slicc-kernel@1.113.0)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
17
17
  '@ai-ecoverse/slicc-kernel':
18
18
  specifier: 1.113.0
19
19
  version: 1.113.0
20
20
 
21
21
  packages:
22
22
 
23
- '@ai-ecoverse/slicc-agent@5.0.3':
24
- resolution: {integrity: sha512-5mQ7TbLZCfdRaS4YFJXamjLCyzD9DxsWAImD2EU4sl85VNhgeXe6axRiOBkY45tpeKHBWG/MQUV5Mi75llUJMg==}
23
+ '@ai-ecoverse/slicc-agent@6.0.1':
24
+ resolution: {integrity: sha512-CB2rbanCVqwE8gdgrTJQ/iIvt5nHBvav9BIITQKuAT92YnRhgrqYYJVgXazoC1zwGn10qc1rlWitrHdA2ajGsQ==}
25
25
  engines: {node: '>=24'}
26
26
  peerDependencies:
27
- '@ai-ecoverse/slicc-kernel': '>=1.90.0 <2'
28
- '@ai-ecoverse/slicc-spectrum': ^1.75.0
27
+ '@ai-ecoverse/slicc-kernel': '>=1.110.0 <2'
28
+ '@ai-ecoverse/slicc-spectrum': ^1.84.0
29
29
  peerDependenciesMeta:
30
30
  '@ai-ecoverse/slicc-spectrum':
31
31
  optional: true
32
32
 
33
- '@ai-ecoverse/slicc-browsers@1.7.1':
34
- resolution: {integrity: sha512-35vGFMbZrl33ZQ9/VgjwZDBXp0RP87mKY0hnIG31tW5Nt5hh+icdp+3Y/t1kypoENAre+jnVEDa9W/H+yK6zyA==}
33
+ '@ai-ecoverse/slicc-browsers@1.7.6':
34
+ resolution: {integrity: sha512-clzlvrVLjmWEiKXhuK/Lez7y3Dwmo+FJ8POUs5GYqLJy5u8cOAiXyliQlNUNOVkNx9EoPm0RVvdfFkSTgv/isg==}
35
35
  engines: {node: '>=24'}
36
36
 
37
37
  '@ai-ecoverse/slicc-kernel@1.113.0':
@@ -135,25 +135,25 @@ packages:
135
135
  resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
136
136
  engines: {node: '>=6.9.0'}
137
137
 
138
- '@earendil-works/chord@1.2.0':
139
- resolution: {integrity: sha512-Xh3M5B4D9YotOyBXyVbZ/5WfoUwP6Kt+TheCIDLxLCUx72UExuxZF//hNmIQGD13EkAHf2svKpXr/rCCT1gXTg==}
138
+ '@earendil-works/chord@1.3.0':
139
+ resolution: {integrity: sha512-qqYhjALZ193atpBzmmS+M5pHQoiI4Aynetc1jXpv+5O2crXH3Y8wbFEy33orU2nmFrlw1U36rsdgUjaW4b3m/w==}
140
140
  engines: {node: '>=22.19.0'}
141
141
 
142
- '@earendil-works/pi-ai@1.2.0':
143
- resolution: {integrity: sha512-U5/1zXqfV1on7/9sbez03tT4Ru49Lvfb4+zXSDK3DBKF5cRk6KxvAOTOY3HJ4jimlZth+rs7vbJqN6iBQAoNuQ==}
142
+ '@earendil-works/pi-ai@1.3.0':
143
+ resolution: {integrity: sha512-KaBI8x7q7sPoFUXICNGD9efHzDG+oRNwVvkA9jdIsSQWH1RjFssOlEGsbLtewUPPgCrvmz0l2KTgSLXTyj3acw==}
144
144
  engines: {node: '>=22.19.0'}
145
145
  hasBin: true
146
146
 
147
- '@earendil-works/pi-codemode@1.2.0':
148
- resolution: {integrity: sha512-UZF7IN0IIrf3bop2wTxrwoAakGctH6d3zdPwhPN+QHMECfoI5E6B6l6I17YGFZPj8cmGex6xX7mLCNJXRf7wsw==}
147
+ '@earendil-works/pi-codemode@1.3.0':
148
+ resolution: {integrity: sha512-2G9tmbsPhgzwfz7cmzJpbLSLqOx3eu22Gbzm+Wc3HqeZMjLQS4F3KfAabozVhv7uEjq3k2O1dZTHmhhWr2xbfQ==}
149
149
  engines: {node: '>=22.19.0'}
150
150
 
151
- '@earendil-works/pi-durable@1.2.0':
152
- resolution: {integrity: sha512-2kDyK7HVCTcxf3CTHkDR0rRGCUfIpoZr76fC6n/KZDu7hkDWR62anEujIkJ+8sKjtNpEM+zyKW3bi2NIEUyiCw==}
151
+ '@earendil-works/pi-durable@1.3.0':
152
+ resolution: {integrity: sha512-2aD0xead1LH0BBwUBxex28in/PpUJEwyaEiW/nLoTFUcZ/lDYEl6LHX6mGZKJG8tUHzERwJyysDgy0ruidt84w==}
153
153
  engines: {node: '>=22.19.0'}
154
154
 
155
- '@earendil-works/pi-mcp@1.2.0':
156
- resolution: {integrity: sha512-ertUv40rUBgssTzw2lIPlejjIBdhvdg4uw+whWCDJYKYHU+ldp1ezhbB0BzwpBfnwef6/YN+m6eKLscj+r3p7w==}
155
+ '@earendil-works/pi-mcp@1.3.0':
156
+ resolution: {integrity: sha512-lbktLplmdGamM2t460Q0ziNEfpUEHDTVNf79g/AialJ3XZ+SHgNqa/OJXRR+fU+GV/l+gBhRPcyP8XkQlv8Avw==}
157
157
  engines: {node: '>=22.19.0'}
158
158
 
159
159
  '@earendil-works/pi-telemetry@1.3.0':
@@ -324,16 +324,17 @@ packages:
324
324
 
325
325
  snapshots:
326
326
 
327
- '@ai-ecoverse/slicc-agent@5.0.3(@ai-ecoverse/slicc-kernel@1.113.0)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
327
+ '@ai-ecoverse/slicc-agent@6.0.1(@ai-ecoverse/slicc-kernel@1.113.0)(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
328
328
  dependencies:
329
- '@ai-ecoverse/slicc-browsers': 1.7.1
329
+ '@ai-ecoverse/slicc-browsers': 1.7.6
330
330
  '@ai-ecoverse/slicc-kernel': 1.113.0
331
331
  '@ai-ecoverse/slicc-vault': 1.9.1
332
- '@earendil-works/chord': 1.2.0
333
- '@earendil-works/pi-ai': 1.2.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
334
- '@earendil-works/pi-codemode': 1.2.0
335
- '@earendil-works/pi-durable': 1.2.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
336
- '@earendil-works/pi-mcp': 1.2.0
332
+ '@aws-sdk/middleware-websocket': 3.972.54
333
+ '@earendil-works/chord': 1.3.0
334
+ '@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)
335
+ '@earendil-works/pi-codemode': 1.3.0
336
+ '@earendil-works/pi-durable': 1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
337
+ '@earendil-works/pi-mcp': 1.3.0
337
338
  '@sqlite.org/sqlite-wasm': 3.53.4-build2
338
339
  typebox: 1.3.36
339
340
  transitivePeerDependencies:
@@ -346,7 +347,7 @@ snapshots:
346
347
  - ws
347
348
  - zod
348
349
 
349
- '@ai-ecoverse/slicc-browsers@1.7.1': {}
350
+ '@ai-ecoverse/slicc-browsers@1.7.6': {}
350
351
 
351
352
  '@ai-ecoverse/slicc-kernel@1.113.0': {}
352
353
 
@@ -541,11 +542,11 @@ snapshots:
541
542
 
542
543
  '@babel/runtime@7.29.7': {}
543
544
 
544
- '@earendil-works/chord@1.2.0':
545
+ '@earendil-works/chord@1.3.0':
545
546
  dependencies:
546
547
  typebox: 1.3.27
547
548
 
548
- '@earendil-works/pi-ai@1.2.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
549
+ '@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)':
549
550
  dependencies:
550
551
  '@anthropic-ai/sdk': 0.129.0
551
552
  '@aws-sdk/client-bedrock-runtime': 3.1127.0
@@ -566,15 +567,15 @@ snapshots:
566
567
  - ws
567
568
  - zod
568
569
 
569
- '@earendil-works/pi-codemode@1.2.0':
570
+ '@earendil-works/pi-codemode@1.3.0':
570
571
  dependencies:
571
572
  quickjs-wasi: 3.6.2
572
573
 
573
- '@earendil-works/pi-durable@1.2.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
574
+ '@earendil-works/pi-durable@1.3.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)':
574
575
  dependencies:
575
- '@earendil-works/chord': 1.2.0
576
- '@earendil-works/pi-ai': 1.2.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(ws@8.22.0)
577
- '@earendil-works/pi-codemode': 1.2.0
576
+ '@earendil-works/chord': 1.3.0
577
+ '@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)
578
+ '@earendil-works/pi-codemode': 1.3.0
578
579
  '@silvia-odwyer/photon': 0.3.3
579
580
  diff: 8.0.4
580
581
  typebox: 1.3.27
@@ -588,7 +589,7 @@ snapshots:
588
589
  - ws
589
590
  - zod
590
591
 
591
- '@earendil-works/pi-mcp@1.2.0':
592
+ '@earendil-works/pi-mcp@1.3.0':
592
593
  dependencies:
593
594
  cross-spawn: 7.0.6
594
595
 
@@ -87,6 +87,10 @@
87
87
  "integrity": "sha512-gBj/wHcDmRC0e4oSdgThodGLoCQWk3crEfAv/sOg1mH3MnBdEzUjIWArnvnH8m8dovz+MB2KC5Z20jXzJIcaZw==",
88
88
  "sha256": "713fba137c1a682039bca80268ce4e4005f29c4a0e1f1a537f51b4e22347821e"
89
89
  },
90
+ "@ai-ecoverse/slicc-cdp@1.26.2": {
91
+ "integrity": "sha512-YSmqvEOQMcwu3aQrPZ4W1XpHl+O7Sm4QE7MOtG4wnfjx8go2XakagTHrPiPE199GQ2QuQAJE+dluRNZn3bB4cg==",
92
+ "sha256": "67fa941ce0afe790b60ade22c0014658fb5d0ef993e35437c43144361f3f82b3"
93
+ },
90
94
  "@ai-ecoverse/slicc-clipboard@1.0.2": {
91
95
  "integrity": "sha512-p7b1h85qkiU0LKjNLCLiU7GVXjGigkyR2+VUCInM1cZo2yjLFxr7tGAOO09e6OG9nB7XKiQn3W88wb3s0gxy+g==",
92
96
  "sha256": "1bd73c6ae4c5c0dc149ba6a301e7615a78bf4b97ff88c5b0f6eb7d8e270588aa"
@@ -7,10 +7,10 @@
7
7
  "name": "slicc-bios-packages",
8
8
  "dependencies": {
9
9
  "@ai-ecoverse/slicc-browsers": "1.7.6",
10
- "@ai-ecoverse/slicc-cdp": "1.25.1",
10
+ "@ai-ecoverse/slicc-cdp": "1.26.2",
11
11
  "@ai-ecoverse/slicc-clipboard": "1.0.2",
12
12
  "@ai-ecoverse/slicc-kernel": "1.113.0",
13
- "@ai-ecoverse/slicc-spectrum": "1.77.0",
13
+ "@ai-ecoverse/slicc-spectrum": "1.84.2",
14
14
  "@ai-ecoverse/wasi-pnpm": "12.9.1-9",
15
15
  "@ai-ecoverse/wasi-ripgrep": "15.2.0-3",
16
16
  "@ai-ecoverse/wasm-bash": "5.3.0-18",
@@ -46,13 +46,16 @@
46
46
  }
47
47
  },
48
48
  "node_modules/@ai-ecoverse/slicc-cdp": {
49
- "version": "1.25.1",
50
- "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-cdp/-/slicc-cdp-1.25.1.tgz",
51
- "integrity": "sha512-gBj/wHcDmRC0e4oSdgThodGLoCQWk3crEfAv/sOg1mH3MnBdEzUjIWArnvnH8m8dovz+MB2KC5Z20jXzJIcaZw==",
49
+ "version": "1.26.2",
50
+ "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-cdp/-/slicc-cdp-1.26.2.tgz",
51
+ "integrity": "sha512-YSmqvEOQMcwu3aQrPZ4W1XpHl+O7Sm4QE7MOtG4wnfjx8go2XakagTHrPiPE199GQ2QuQAJE+dluRNZn3bB4cg==",
52
52
  "license": "Apache-2.0",
53
53
  "workspaces": [
54
54
  "packages/sliccy-browser"
55
55
  ],
56
+ "bin": {
57
+ "slicc-cdp": "src/cli.js"
58
+ },
56
59
  "engines": {
57
60
  "node": ">=24"
58
61
  }
@@ -77,9 +80,9 @@
77
80
  }
78
81
  },
79
82
  "node_modules/@ai-ecoverse/slicc-spectrum": {
80
- "version": "1.77.0",
81
- "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-spectrum/-/slicc-spectrum-1.77.0.tgz",
82
- "integrity": "sha512-2IDp53NpmNoqKqdIgtv3H+wEAEYCp3Z4GeNp0DFnzqx/PUiC9crEdKt9ce3a3NHNJKtcPeDGwr1lu7GLRfEWPg==",
83
+ "version": "1.84.2",
84
+ "resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-spectrum/-/slicc-spectrum-1.84.2.tgz",
85
+ "integrity": "sha512-7nSam2gjvT18jjpajcEn4Q7IqX0qTITU5G4ZrH1oipcgiOMmNmXTMeWOra1CAPL1+JZMHHQIIdYmh6nBCLAGlw==",
83
86
  "license": "Apache-2.0",
84
87
  "engines": {
85
88
  "node": ">=24"
@@ -4,10 +4,10 @@
4
4
  "description": "Packages the BIOS installs from npm into OPFS, pinned by package-lock.json and pnpm-lock.yaml",
5
5
  "dependencies": {
6
6
  "@ai-ecoverse/slicc-browsers": "1.7.6",
7
- "@ai-ecoverse/slicc-cdp": "1.25.1",
7
+ "@ai-ecoverse/slicc-cdp": "1.26.2",
8
8
  "@ai-ecoverse/slicc-clipboard": "1.0.2",
9
9
  "@ai-ecoverse/slicc-kernel": "1.113.0",
10
- "@ai-ecoverse/slicc-spectrum": "1.77.0",
10
+ "@ai-ecoverse/slicc-spectrum": "1.84.2",
11
11
  "@ai-ecoverse/wasi-pnpm": "12.9.1-9",
12
12
  "@ai-ecoverse/wasi-ripgrep": "15.2.0-3",
13
13
  "@ai-ecoverse/wasm-bash": "5.3.0-18",
@@ -12,8 +12,8 @@ importers:
12
12
  specifier: 1.7.6
13
13
  version: 1.7.6
14
14
  '@ai-ecoverse/slicc-cdp':
15
- specifier: 1.25.1
16
- version: 1.25.1
15
+ specifier: 1.26.2
16
+ version: 1.26.2
17
17
  '@ai-ecoverse/slicc-clipboard':
18
18
  specifier: 1.0.2
19
19
  version: 1.0.2
@@ -21,8 +21,8 @@ importers:
21
21
  specifier: 1.113.0
22
22
  version: 1.113.0
23
23
  '@ai-ecoverse/slicc-spectrum':
24
- specifier: 1.77.0
25
- version: 1.77.0
24
+ specifier: 1.84.2
25
+ version: 1.84.2
26
26
  '@ai-ecoverse/wasi-pnpm':
27
27
  specifier: 12.9.1-9
28
28
  version: 12.9.1-9
@@ -99,9 +99,10 @@ packages:
99
99
  resolution: {integrity: sha512-clzlvrVLjmWEiKXhuK/Lez7y3Dwmo+FJ8POUs5GYqLJy5u8cOAiXyliQlNUNOVkNx9EoPm0RVvdfFkSTgv/isg==}
100
100
  engines: {node: '>=24'}
101
101
 
102
- '@ai-ecoverse/slicc-cdp@1.25.1':
103
- resolution: {integrity: sha512-gBj/wHcDmRC0e4oSdgThodGLoCQWk3crEfAv/sOg1mH3MnBdEzUjIWArnvnH8m8dovz+MB2KC5Z20jXzJIcaZw==}
102
+ '@ai-ecoverse/slicc-cdp@1.26.2':
103
+ resolution: {integrity: sha512-YSmqvEOQMcwu3aQrPZ4W1XpHl+O7Sm4QE7MOtG4wnfjx8go2XakagTHrPiPE199GQ2QuQAJE+dluRNZn3bB4cg==}
104
104
  engines: {node: '>=24'}
105
+ hasBin: true
105
106
 
106
107
  '@ai-ecoverse/slicc-clipboard@1.0.2':
107
108
  resolution: {integrity: sha512-p7b1h85qkiU0LKjNLCLiU7GVXjGigkyR2+VUCInM1cZo2yjLFxr7tGAOO09e6OG9nB7XKiQn3W88wb3s0gxy+g==}
@@ -111,8 +112,8 @@ packages:
111
112
  resolution: {integrity: sha512-PGJvZUm/oQYuS9pbUxDIpBSCeyaW91wDN2yWPCZIv664WDWKsiCTeQ1c4i8xU4Bq7C66viFK6EzZhvvofQ6b3Q==}
112
113
  engines: {node: '>=24'}
113
114
 
114
- '@ai-ecoverse/slicc-spectrum@1.77.0':
115
- resolution: {integrity: sha512-2IDp53NpmNoqKqdIgtv3H+wEAEYCp3Z4GeNp0DFnzqx/PUiC9crEdKt9ce3a3NHNJKtcPeDGwr1lu7GLRfEWPg==}
115
+ '@ai-ecoverse/slicc-spectrum@1.84.2':
116
+ resolution: {integrity: sha512-7nSam2gjvT18jjpajcEn4Q7IqX0qTITU5G4ZrH1oipcgiOMmNmXTMeWOra1CAPL1+JZMHHQIIdYmh6nBCLAGlw==}
116
117
  engines: {node: '>=24'}
117
118
  peerDependencies:
118
119
  '@shikijs/langs': 4.5.0
@@ -201,13 +202,13 @@ snapshots:
201
202
 
202
203
  '@ai-ecoverse/slicc-browsers@1.7.6': {}
203
204
 
204
- '@ai-ecoverse/slicc-cdp@1.25.1': {}
205
+ '@ai-ecoverse/slicc-cdp@1.26.2': {}
205
206
 
206
207
  '@ai-ecoverse/slicc-clipboard@1.0.2': {}
207
208
 
208
209
  '@ai-ecoverse/slicc-kernel@1.113.0': {}
209
210
 
210
- '@ai-ecoverse/slicc-spectrum@1.77.0': {}
211
+ '@ai-ecoverse/slicc-spectrum@1.84.2': {}
211
212
 
212
213
  '@ai-ecoverse/wasi-pnpm@12.9.1-9': {}
213
214