@ai-ecoverse/slicc-bios 1.48.3 → 1.49.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
|
@@ -339,14 +339,14 @@ Programs ask seven's page for what only a page can do through the kernel's `/dev
|
|
|
339
339
|
- **Gestures:** a request from a terminal tag (`{ kind: 'user', where: 'terminal:…' }`) in a tab that has just had a keystroke or click (`navigator.userActivation.isActive`) goes ahead at once. Any other request, the agent's always, waits for seven's own prompt: Cancel, or 60 s without an answer, refuses it with `EACCES`, and a signal or closed request withdraws the prompt. A session (its uid and tags) has at most one prompt up: another request from it meanwhile is refused with `EACCES`, `another request is waiting for you`. After a Cancel or a timeout the session rests for 10 s: its requests are refused with the dismissed text and no prompt, unless they come typed in an active tab. Withdrawing or timing out the prompt gives focus back to what had it.
|
|
340
340
|
- **`open.url`** (`{"kind":"open.url","url":"…"}`, an empty reply) opens the URL in a new tab with `noopener,noreferrer`; `background` is ignored. Refusals, all `EACCES`, with this first line: `that isn't a URL`; `seven opens only http and https URLs` (`javascript:`, `data:`, `blob:`, `file:` and the rest); `seven doesn't open its own pages or the vault for a program` (the guard's protected origins: seven's own origin, `*.sliccy.ai` and the vault); `the request to open the page was dismissed`; `nobody answered the request to open the page within 60 s`. For example: `printf '{"kind":"open.url","url":"%s"}\n' "$url" | cat > /dev/embedder`.
|
|
341
341
|
- **Tool modules** (capture, audio) export the kernel's hook object `{ kinds, handle }`. `plugged(hook, prompts, extra)` wraps one: only kinds seven lists and gives a prompt for reach it, and its `handle` runs only after seven's gesture check, with the request plus seven's `extra`. A module is a pinned, gated dependency in the base set, since it runs as seven.
|
|
342
|
-
- **`capture.screen`** (`screencapture`, `@ai-ecoverse/slicc-capture/page`): the same gesture check as `open.url`, with the prompt "Capture the screen?". The prompt's action is Choose, and Chrome's picker comes next. The module captures only through seven's `request.display(constraints)`, which calls `getDisplayMedia` with `audio: false
|
|
342
|
+
- **`capture.screen`** (`screencapture`, `@ai-ecoverse/slicc-capture/page`): the same gesture check as `open.url`, with the prompt "Capture the screen?". The prompt's action is Choose, and Chrome's picker comes next. The module captures only through seven's `request.display(constraints)`, which calls `getDisplayMedia` with `audio: false` unless a video request has `system: true` (`-A`), when it asks for `audio: true` and the prompt names "your screen and its sound"; Chrome's picker still lets the user decide whether to share sound. `selfBrowserSurface: 'exclude'`, `surfaceSwitching: 'exclude'` and `preferCurrentTab: false` always apply. A video request with `microphone: true` (`-g`) or a device ID (`-G`) also names the microphone in the same prompt, with "for up to N seconds" when `duration` is positive. It follows the same rule as `audio.record`: a command typed in an active tab can proceed, but the agent is always asked. Cancel opens neither device. Only after that check does seven supply a guarded `request.userMedia` for the default or exact named microphone, with no camera request. When the picked surface's capture handle is seven's or the vault's (`slicc-vault`; every seven page sets `setCaptureHandleConfig({ handle: 'slicc-seven', exposeOrigin: true })` for its own origin, first thing at boot), or its origin is protected, seven stops every track and refuses with `EACCES`, `seven doesn't capture its own pages or the vault`. For a tab, seven waits up to 1 s for a handle that arrives after the capture starts. A tab whose handle is still missing, or any surface Chrome doesn't name as a window or a screen, is refused too (`seven can't tell this tab isn't its own or the vault's (it sets no capture handle), so it doesn't capture it; share a window or the screen`): Chrome hides handles in off-the-record profiles, and an older vault sets none, so a missing handle can't prove the tab is safe. That costs every ordinary tab that sets no capture handle, which is most of them; share a window or the screen to capture one. A captured tab that navigates to a page without a handle is stopped the same way. Seven watches for handle changes from the moment the capture starts, so a change during that wait isn't lost. The same holds while the capture is live: when the captured tab's handle changes to seven's, a protected one or none (`capturehandlechange`), seven stops every track, ends the module's capture and refuses, even if a frame was already taken. A cross-origin navigation clears the handle first, so a tab that navigates to seven is usually refused with the missing-handle text. A window or a whole screen that shows seven, and a protected page that sets no capture handle, are the user's choice in the picker. The vault's top-level pages set `slicc-vault` for seven's production origins (slicc-vault ≥ 1.17.0), so they're refused too. A local seven gets no handle from vault-preview. A page that paints before it sets its capture handle can land in a frame taken in that moment, before seven sees the handle. The dismissed texts are `the request to capture the screen was dismissed` and `nobody answered the request to capture the screen within 60 s`.
|
|
343
343
|
- **`clipboard.write`** (`{"kind":"clipboard.write","type":"image/png"}`, the bytes as the body, an empty reply; `screencapture -c`): `src/seed/clipboard.js` writes one `ClipboardItem` of `image/png`, `text/plain` or `text/html`, with `/dev/clipboard`'s focus rule and refusal text. Other types are `ENOTSUP`. The body is read up to 16 MB; beyond that seven cancels the rest and fails with `EIO`, `seven copies at most 16 MB to the clipboard`.
|
|
344
344
|
- **Audio** (`afplay`, `chime`, `say`, `hear`, `@ai-ecoverse/slicc-audio/page`; kinds `audio.play`, `audio.say`, `audio.voices`, `audio.record`, `audio.transcribe`):
|
|
345
345
|
- **Sound and speech:** `audio.play` ("Play a sound?") and `audio.say` ("Speak aloud?") get the same gesture check as `open.url`.
|
|
346
346
|
- **The microphone:** `audio.record`, and every `audio.transcribe` except a probe or a `whisper` one that sends its own audio, ask "Use the microphone?" on every request, unless the request comes typed in an active tab. When the request carries a positive `seconds`, the prompt says how long ("…record from your microphone for up to 5 seconds"). The agent is always asked. The browser's microphone permission lasts per origin after the first grant, so it isn't the gate; seven's prompt is. Cancel leaves the microphone unopened.
|
|
347
347
|
- **No prompt:** `audio.voices`; `audio.say` status and warm-up; `audio.transcribe` status, warm-up and supported-language probes; and a `whisper` transcribe of bytes the program sends. Listing microphones (`audio.record` with `devices`) asks like any recording. For `whisper`, seven reads the start of the request's body to see whether it carries audio. Web Speech (`webspeech`) always listens to the microphone and ignores any bytes, so it's always asked, and so is an unknown or missing engine.
|
|
348
348
|
- **Stopping:** an abort (a signal, or the program closing the request) stops a recording at once.
|
|
349
|
-
- **ortllama:** slicc-audio's optional `@ai-ecoverse/slicc-ortllama` isn't in the base set, because the BIOS installer skips lock entries marked `optional` and the in-place base update runs `pnpm install --no-optional`. So `afplay`, `chime` and the Web Speech engines work. The kokoro and whisper engines fail with `
|
|
349
|
+
- **ortllama:** slicc-audio's optional `@ai-ecoverse/slicc-ortllama` isn't in the base set, because the BIOS installer skips lock entries marked `optional` and the in-place base update runs `pnpm install --no-optional`. So `afplay`, `chime` and the Web Speech engines work. The kokoro and whisper engines fail with `no server at http://11435.kernel.localhost (pnpm add -g @ai-ecoverse/slicc-ortllama, then ortllama serve --detach)` until an ortllama server runs in the kernel.
|
|
350
350
|
- Kinds seven doesn't list (`open.file`, `open.download`, `open.reveal`, `clipboard.read`) are `ENOTSUP` before the page sees them.
|
|
351
351
|
|
|
352
352
|
## Network
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"": {
|
|
7
7
|
"name": "slicc-bios-packages",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@ai-ecoverse/slicc-audio": "1.1.
|
|
9
|
+
"@ai-ecoverse/slicc-audio": "1.1.6",
|
|
10
10
|
"@ai-ecoverse/slicc-browsers": "1.18.14",
|
|
11
11
|
"@ai-ecoverse/slicc-capture": "1.4.1",
|
|
12
12
|
"@ai-ecoverse/slicc-cdp": "1.42.2",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
"node_modules/@ai-ecoverse/slicc-audio": {
|
|
43
|
-
"version": "1.1.
|
|
44
|
-
"resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-audio/-/slicc-audio-1.1.
|
|
45
|
-
"integrity": "sha512-
|
|
43
|
+
"version": "1.1.6",
|
|
44
|
+
"resolved": "https://registry.npmjs.org/@ai-ecoverse/slicc-audio/-/slicc-audio-1.1.6.tgz",
|
|
45
|
+
"integrity": "sha512-C3isgqwWA0ItGlZAhbi51zzRYKV3d23VHhGNBM6LzDh8Kikd3j7zdcjkzZOydK3JGfOJ22c1mQWjAm/o1wZo0A==",
|
|
46
46
|
"license": "Apache-2.0",
|
|
47
47
|
"bin": {
|
|
48
48
|
"scchime": "host/scchime.mjs",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"description": "Packages the BIOS installs from npm into OPFS, pinned by package-lock.json and pnpm-lock.yaml",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@ai-ecoverse/slicc-audio": "1.1.
|
|
6
|
+
"@ai-ecoverse/slicc-audio": "1.1.6",
|
|
7
7
|
"@ai-ecoverse/slicc-browsers": "1.18.14",
|
|
8
8
|
"@ai-ecoverse/slicc-capture": "1.4.1",
|
|
9
9
|
"@ai-ecoverse/slicc-cdp": "1.42.2",
|
|
@@ -9,8 +9,8 @@ importers:
|
|
|
9
9
|
.:
|
|
10
10
|
dependencies:
|
|
11
11
|
'@ai-ecoverse/slicc-audio':
|
|
12
|
-
specifier: 1.1.
|
|
13
|
-
version: 1.1.
|
|
12
|
+
specifier: 1.1.6
|
|
13
|
+
version: 1.1.6
|
|
14
14
|
'@ai-ecoverse/slicc-browsers':
|
|
15
15
|
specifier: 1.18.14
|
|
16
16
|
version: 1.18.14
|
|
@@ -104,8 +104,8 @@ importers:
|
|
|
104
104
|
|
|
105
105
|
packages:
|
|
106
106
|
|
|
107
|
-
'@ai-ecoverse/slicc-audio@1.1.
|
|
108
|
-
resolution: {integrity: sha512-
|
|
107
|
+
'@ai-ecoverse/slicc-audio@1.1.6':
|
|
108
|
+
resolution: {integrity: sha512-C3isgqwWA0ItGlZAhbi51zzRYKV3d23VHhGNBM6LzDh8Kikd3j7zdcjkzZOydK3JGfOJ22c1mQWjAm/o1wZo0A==}
|
|
109
109
|
engines: {node: '>=24', slicc-kernel: '>=1.153.0'}
|
|
110
110
|
hasBin: true
|
|
111
111
|
|
|
@@ -362,7 +362,7 @@ packages:
|
|
|
362
362
|
|
|
363
363
|
snapshots:
|
|
364
364
|
|
|
365
|
-
'@ai-ecoverse/slicc-audio@1.1.
|
|
365
|
+
'@ai-ecoverse/slicc-audio@1.1.6':
|
|
366
366
|
optionalDependencies:
|
|
367
367
|
'@ai-ecoverse/slicc-ortllama': 1.28.0
|
|
368
368
|
transitivePeerDependencies:
|