@ai-ecoverse/slicc-bios 1.20.0 → 1.21.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
|
@@ -172,7 +172,7 @@ The Files panel lists `/opt/grammars/node_modules` but doesn't scan it.
|
|
|
172
172
|
|
|
173
173
|
#### Optional packages
|
|
174
174
|
|
|
175
|
-
Below the system rows, Install / Update offers **Optional packages** (spectrum ≥ 1.42.0): tools that seven doesn't preinstall, each at the version the homescoop coordinator certified. The catalog is [`src/packages/optional/`](src/packages/optional/): `package.json` pins each package exactly, `package-lock.json` (made with `npm install --package-lock-only --ignore-scripts`, never installed) holds its integrity, and `catalog.json` gives its id, label, description, commands, tarball size and `requires`. A test keeps the three in step. Today it offers git, the GitHub CLI, OpenSSH, `slicc` (see [Sevens this kernel follows](#network)), Python, the Python data tools (numpy, pandas and matplotlib), Node.js (slicc-jsh's `node` and `jsh`), `sliccy:browser` for `.jsh` scripts, Ruby, Perl, Biome, the PDF tools (poppler), qpdf, rsync, screen, SQLite, dig, websocat, GnuPG and fnox.
|
|
175
|
+
Below the system rows, Install / Update offers **Optional packages** (spectrum ≥ 1.42.0): tools that seven doesn't preinstall, each at the version the homescoop coordinator certified. The catalog is [`src/packages/optional/`](src/packages/optional/): `package.json` pins each package exactly, `package-lock.json` (made with `npm install --package-lock-only --ignore-scripts`, never installed) holds its integrity, and `catalog.json` gives its id, label, description, commands, tarball size and `requires`. A test keeps the three in step. Today it offers git, the GitHub CLI, OpenSSH, `slicc` (see [Sevens this kernel follows](#network)), Python, the Python data tools (numpy, pandas and matplotlib), Node.js (slicc-jsh's `node` and `jsh`), `sliccy:browser` for `.jsh` scripts, Ruby, Perl, Biome, the PDF tools (poppler), qpdf, rsync, screen, SQLite, dig, websocat, ntfy, GnuPG and fnox.
|
|
176
176
|
|
|
177
177
|
- **Install** runs `pnpm add -g <package>@<version>` in the page's kernel, as a user would, under the Web Lock `slicc-optional`, so the commands work at once in every open shell. pnpm 12 gives each global add its own project under `$PNPM_HOME/global/v11/`; bios reads `PNPM_HOME` from the kernel's environment. Afterwards `os/packages.js` reads that project's `pnpm-lock.yaml`: every package in it, the one added and each dependency, must be a version in the catalog's lockfile or the base set's, with that integrity. homescoop pins `@ai-ecoverse/*` dependencies exactly (uv → Python, git → bash), so the catalog's lockfile names them all. Anything else, a dependency pnpm resolved to another version included, removes the package again and fails the row with *This version doesn't match the tested build*. An entry's `requires` (uv needs Python) are installed first. A package's kernel command always wins over the same package's Node `bin`. After each install and update, for every name that a package declares both in `slicc.commands` and in `bin`, bios removes the link that pnpm made in `$PNPM_HOME/bin`, but only when that link points into this package, so `mcpcat` runs `/usr/bin/mcpcat`, not a `#!/usr/bin/env node` script with no Node to run it. Another package's bins are never touched, and a package with only a `bin` keeps it. `/opt/user` (Your packages) isn't affected: its bins are not on `PATH`. A project entry also **updates** a required package that's older than the catalog's before it installs, since it runs on the catalog's version: the data tools override their own Python away, and their builds need the catalog's Python. A global add brings its own pinned dependencies, so it leaves an older required package as it is.
|
|
178
178
|
- **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 the catalog's offers **Update**, which adds the catalog's version; one at or above it offers **Remove**. bios never downgrades.
|
|
@@ -186,6 +186,7 @@ Below the system rows, Install / Update offers **Optional packages** (spectrum
|
|
|
186
186
|
- **How Python finds it:** bios writes `/opt/slicc/python/slicc-pydata.pth`, which lists each package's site-packages (from its `slicc.python.sitePackages`), next to a `sitecustomize.py` that adds that folder as a site directory. The page's kernel puts `/opt/slicc/python` on every process's `PYTHONPATH`, so `python3` imports the packages from any shell or agent, as any user. Python's own discovery only looks in its own project, so the `.pth` stays. A `.pth` that an earlier version wrote to `/root/.local` is moved there the next time the optional packages are listed. The kernel's environment reaches every process, whichever client or user starts it, `sudo` included. `python -I` and `python -E` ignore `PYTHONPATH`, so they don't see the data tools; that's a known gap.
|
|
187
187
|
- **State and Remove:** a receipt in `var/lib/slicc/optional/pydata/` records the installed version. **Remove** deletes the project, the `.pth` and the receipt. A project that `retired.json` lists still shows while it's installed, with only **Remove**.
|
|
188
188
|
- **Without Python:** if Python is removed while the data tools stay installed, the row warns that it needs Python (`warnings`, spectrum ≥ 1.49.1).
|
|
189
|
+
- **ntfy** (`@ai-ecoverse/wasi-ntfy`, homescoop#1003) is seven's webhook receiver. A webhook, a phone or another agent publishes to a topic, and `ntfy sub <topic> '<command>'` runs the command once per message, in order, with `$NTFY_MESSAGE`, `$NTFY_TITLE`, `$NTFY_ID` and `$NTFY_RAW` (the message's JSON line, `attachment.url` included). For example, `ntfy sub https://ntfy.sliccy.ai/github 'agent send cone --lick=webhook --source github "$NTFY_RAW"'` turns each message into one `webhook` lick, and a replay with `--since` delivers it once. The connection is outbound only, through the page's fetch, so a quiet stream relies on the 120 s body window ([Network](#network)) to outlast ntfy's 45 s keepalive. Keep the gateway's `tk_` token in the vault and pass it as `NTFY_TOKEN` or `--token`. The command runs as the user who started `ntfy sub`, with that user's privileges, and everything in a message (`$NTFY_*`) is untrusted input chosen by whoever can publish to the topic or post to its hook URL: quote it (`"$NTFY_MESSAGE"`) and never `eval` it. A command that runs `ntfy pub` again should `unset ${!NTFY_*}` first, or it publishes to the incoming message's topic. `ntfy.test.mjs` tests it against a local fake ntfy server, not ntfy.sh.
|
|
189
190
|
- **Login shells:** bios writes `/etc/profile.d/slicc.sh` at every boot, which puts `~/.local/share/gem/ruby/3.4.0/bin` on `PATH`, so a command from `gem install` runs by name in a login shell. It also makes sure `/etc/profile` runs `/etc/profile.d/*.sh`: it writes one if there's none, and adds that loop once, after the lines already there, to an `/etc/profile` that doesn't mention `/etc/profile.d/`.
|
|
190
191
|
- **The agent** reads the same catalog: bios writes it to `/etc/slicc/optional.json` at every boot (id, package, version, label, description, commands, requires).
|
|
191
192
|
|
package/package.json
CHANGED
package/src/packages/certs.json
CHANGED
|
@@ -344,6 +344,10 @@
|
|
|
344
344
|
"sha256": "134acd4ccc67ba48e98102e5a6b4ee995a21eb87b628e2b683b750437319a631",
|
|
345
345
|
"exception": "unverifiable build (homescoop#864): kept because gh is core; bump when its reproduce check or a CI-built gh is certified"
|
|
346
346
|
},
|
|
347
|
+
"@ai-ecoverse/wasi-ntfy@2.32.0-2": {
|
|
348
|
+
"integrity": "sha512-gPaK5pptREyvSsfnog3PqxDYAiZ9Qeo3S0llnB5UVzOeQTLT222SecJ5Xm7d6ldB2//3iILp3wxqV24TItpwMg==",
|
|
349
|
+
"sha256": "12267d1463082fd86f7315a41c3f1c905ba320496ae5078cc56487246f884a05"
|
|
350
|
+
},
|
|
347
351
|
"@ai-ecoverse/wasi-pnpm@12.9.1-8": {
|
|
348
352
|
"integrity": "sha512-/3LRssC7T2t9HovusS9neuDg5+FNMhf90MkECauL1vZI/6BsQSadLyopnzn3ifYvY0LDC+Q8Src22oGCE+x1QA==",
|
|
349
353
|
"sha256": "08136a9292ec7a04ebda5bc23fa7b84f85a635f13b19c9512f6ad83ddde60766"
|
|
@@ -135,6 +135,13 @@
|
|
|
135
135
|
"commands": ["websocat"],
|
|
136
136
|
"size": 1266828
|
|
137
137
|
},
|
|
138
|
+
"@ai-ecoverse/wasi-ntfy": {
|
|
139
|
+
"id": "ntfy",
|
|
140
|
+
"label": "ntfy",
|
|
141
|
+
"description": "Publishes and subscribes to notifications, and runs a command for every message: ntfy sub <topic> '<command>', with the message in $NTFY_MESSAGE and $NTFY_RAW. Works with ntfy.sh, any ntfy server and the tray's webhook gateway, ntfy.sliccy.ai.",
|
|
142
|
+
"commands": ["ntfy"],
|
|
143
|
+
"size": 4751117
|
|
144
|
+
},
|
|
138
145
|
"@ai-ecoverse/wasi-fnox": {
|
|
139
146
|
"id": "fnox",
|
|
140
147
|
"label": "fnox",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"@ai-ecoverse/wasi-dig": "0.1.0-2",
|
|
13
13
|
"@ai-ecoverse/wasi-fnox": "1.39.0-2",
|
|
14
14
|
"@ai-ecoverse/wasi-gh": "2.102.0-1",
|
|
15
|
+
"@ai-ecoverse/wasi-ntfy": "2.32.0-2",
|
|
15
16
|
"@ai-ecoverse/wasi-slicc": "1.41.0",
|
|
16
17
|
"@ai-ecoverse/wasix-gnupg": "2.4.9-11",
|
|
17
18
|
"@ai-ecoverse/wasix-openssh": "10.6.0-6",
|
|
@@ -95,6 +96,15 @@
|
|
|
95
96
|
"slicc-kernel": ">=1.30.0"
|
|
96
97
|
}
|
|
97
98
|
},
|
|
99
|
+
"node_modules/@ai-ecoverse/wasi-ntfy": {
|
|
100
|
+
"version": "2.32.0-2",
|
|
101
|
+
"resolved": "https://registry.npmjs.org/@ai-ecoverse/wasi-ntfy/-/wasi-ntfy-2.32.0-2.tgz",
|
|
102
|
+
"integrity": "sha512-gPaK5pptREyvSsfnog3PqxDYAiZ9Qeo3S0llnB5UVzOeQTLT222SecJ5Xm7d6ldB2//3iILp3wxqV24TItpwMg==",
|
|
103
|
+
"license": "Apache-2.0 OR GPL-2.0-only",
|
|
104
|
+
"engines": {
|
|
105
|
+
"slicc-kernel": ">=1.125.4"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
98
108
|
"node_modules/@ai-ecoverse/wasi-slicc": {
|
|
99
109
|
"version": "1.41.0",
|
|
100
110
|
"resolved": "https://registry.npmjs.org/@ai-ecoverse/wasi-slicc/-/wasi-slicc-1.41.0.tgz",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"@ai-ecoverse/wasi-dig": "0.1.0-2",
|
|
10
10
|
"@ai-ecoverse/wasi-fnox": "1.39.0-2",
|
|
11
11
|
"@ai-ecoverse/wasi-gh": "2.102.0-1",
|
|
12
|
+
"@ai-ecoverse/wasi-ntfy": "2.32.0-2",
|
|
12
13
|
"@ai-ecoverse/wasi-slicc": "1.41.0",
|
|
13
14
|
"@ai-ecoverse/wasix-gnupg": "2.4.9-11",
|
|
14
15
|
"@ai-ecoverse/wasix-openssh": "10.6.0-6",
|