@zerwiz/ymir 0.1.11 → 0.1.13
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/CHANGELOG.md +53 -0
- package/README.md +27 -0
- package/bin/app-lib.sh +11 -1
- package/bin/design-icon.sh +14 -11
- package/package.json +2 -2
- package/scripts/start.sh +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,57 @@
|
|
|
1
1
|
|
|
2
|
+
## 2026-09-17 — 0.1.13: the re-voiced seat arrives, and the packages are listed
|
|
3
|
+
|
|
4
|
+
- **`@zerwiz/sessrumnir` 0.1.9** — the seat that says Sessrúmnir and "Brokk is working", with the fork`s name gone from its source, its bundles, its installer and its package identity. Pinned so a fresh install receives it.
|
|
5
|
+
- **The README lists every package** on npm, and why the smithy is `@zerwiz/smidja-factory`.
|
|
6
|
+
|
|
7
|
+
## 2026-09-17 — the README lists the packages, and the pin moves to the re-voiced seat
|
|
8
|
+
|
|
9
|
+
- **The README says what is on npm.** Five packages serve — `@zerwiz/ymir` (the
|
|
10
|
+
distro) and the four surfaces it depends on — and the section says so with a
|
|
11
|
+
table, plus the one line that matters to a reader: *why the smithy is not
|
|
12
|
+
`@zerwiz/smiddja`*. That name was accepted twice and served never (package
|
|
13
|
+
document 404, website 403, republish refused as already published); it was
|
|
14
|
+
renamed to `@zerwiz/smidja-factory`, which resolves.
|
|
15
|
+
- **The distro's pin moves to `@zerwiz/sessrumnir@0.1.9`** — the seat that speaks
|
|
16
|
+
its own name rather than the fork's. A fresh install was still receiving the
|
|
17
|
+
old voice through the `0.1.8-alpha` pin.
|
|
18
|
+
- **`@zerwiz/ymir@0.1.13`** is the packet that carries them.
|
|
19
|
+
|
|
20
|
+
## 2026-09-17 — 0.1.12: the icons reach the live tree, and a missing surface is a failure
|
|
21
|
+
|
|
22
|
+
- **The launcher entries name the door** (`Exec=ymir hlidskjalf`, …) instead of an absolute path into whichever tree minted them — the fault that made every icon do nothing.
|
|
23
|
+
- **All three npm shapes resolve**: a clone (`apps/<app>`), a nested package, and a **sibling** package (`<prefix>/lib/node_modules/@zerwiz/<app>`), which is where a global install puts a dependency it hoists out of the distro.
|
|
24
|
+
- **@zerwiz/sessrumnir pinned exact** — a prerelease range resolved in one prefix and was skipped in another.
|
|
25
|
+
- **A missing surface is a FAILURE with the remedy**, never "skipped".
|
|
26
|
+
|
|
27
|
+
## 2026-09-17 — the icons reach the live tree, and a missing surface is a failure
|
|
28
|
+
|
|
29
|
+
The Allfather clicked the launcher icons and nothing happened. Both faults were
|
|
30
|
+
mine, and both are the same mistake wearing different clothes: **something named a
|
|
31
|
+
path where it should have named a door.**
|
|
32
|
+
|
|
33
|
+
- **The entry launched a temp directory.** Every `.desktop` file carried
|
|
34
|
+
`Exec=bash <the tree that minted it>/scripts/electron.sh …` — and I had minted
|
|
35
|
+
from `/tmp/opencode/…` while testing, so every icon on his launcher pointed into
|
|
36
|
+
a scratch tree. Entries now name the **door**: `Exec=ymir hlidskjalf`, resolved
|
|
37
|
+
from PATH, so a click reaches whichever install is live. A launcher entry must
|
|
38
|
+
outlive the tree that wrote it.
|
|
39
|
+
- **The fourth surface was missing and the raise shrugged.** `Sessrúmnir — skipped
|
|
40
|
+
(the sessrumnir surface is not present)` and the raise carried on. It was a
|
|
41
|
+
**sibling**: npm put it at `<prefix>/lib/node_modules/@zerwiz/sessrumnir`, beside
|
|
42
|
+
ymir, not inside it. The resolver knew a clone (`apps/<app>`) and a nested
|
|
43
|
+
package (`<pkg>/node_modules/@zerwiz/<app>`) but not that third shape — which is
|
|
44
|
+
the one a **global** install uses when it hoists a dependency out of the distro.
|
|
45
|
+
All three are resolved now, and a surface that is absent is a **FAILURE with the
|
|
46
|
+
exact remedy**, never a shrug.
|
|
47
|
+
- **A dependency must resolve every time.** `@zerwiz/sessrumnir` was declared as a
|
|
48
|
+
prerelease range (`^0.1.8-alpha`): npm resolved it in one prefix and skipped it
|
|
49
|
+
in another. Pinned to the exact version.
|
|
50
|
+
|
|
51
|
+
Verified from his own install (`~/.npm-global`): Hlidskjalf `:3888`, Óðrerir
|
|
52
|
+
`:4322`, the board `:8437`, the gate API `:3889` (401 — up, auth enforced), Nornir
|
|
53
|
+
cron started, Bifrost and the well up, and the launcher entries naming the doors.
|
|
54
|
+
|
|
2
55
|
## 2026-09-17 — 0.1.11: four surfaces, their marks, and a door that mends
|
|
3
56
|
|
|
4
57
|
- **All four surfaces rise from one npm install** — Hlidskjalf `:3888`, Óðrerir
|
package/README.md
CHANGED
|
@@ -700,6 +700,33 @@ when the work will take a while, tells you plainly:
|
|
|
700
700
|
Your patience is noted, and it is earned.
|
|
701
701
|
```
|
|
702
702
|
|
|
703
|
+
### The packages — what is on npm
|
|
704
|
+
|
|
705
|
+
Six names were published; five serve. The distro **depends on the four
|
|
706
|
+
surfaces**, so one command brings the whole platform — and each can be installed
|
|
707
|
+
alone if you want only that hall.
|
|
708
|
+
|
|
709
|
+
```
|
|
710
|
+
packages[5]{package,what,live}:
|
|
711
|
+
"@zerwiz/ymir","the distro — the runtime, the doors, the installer, the plan","0.1.12"
|
|
712
|
+
"@zerwiz/hlidskjalf","the high seat — the control plane, the gate and the landing","0.1.0"
|
|
713
|
+
"@zerwiz/odrerir","the live hall — the board on :4322","0.1.0"
|
|
714
|
+
"@zerwiz/smidja-factory","the smithy — the agent factory, its skills and the visualizer on :8437","0.1.1"
|
|
715
|
+
"@zerwiz/sessrumnir","the seat-hall — the desktop where you speak with Brokk","0.1.9"
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
```bash
|
|
719
|
+
npm install -g @zerwiz/ymir # the distro AND the four surfaces (dependencies)
|
|
720
|
+
npm install -g @zerwiz/hlidskjalf # or one hall on its own
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
**Why the smithy's name is not `@zerwiz/smidja`.** It was published under that
|
|
724
|
+
name and the registry accepted it twice — `0.1.0`, then `0.1.1` — while serving
|
|
725
|
+
neither: the package document answered 404, the website 403, and a republish was
|
|
726
|
+
refused as *already published*. The name was retired and the smithy ships as
|
|
727
|
+
**`@zerwiz/smidja-factory`**, which resolves. A second look before publishing
|
|
728
|
+
costs less than explaining a name that never worked.
|
|
729
|
+
|
|
703
730
|
### Both shapes — a clone and a package are one tree
|
|
704
731
|
|
|
705
732
|
Ymir runs the same whether you **cloned** it or **installed** it from npm. The
|
package/bin/app-lib.sh
CHANGED
|
@@ -38,7 +38,17 @@ app_dir() { # <surface> <result-var> — a clone's apps/<x>, else the package
|
|
|
38
38
|
_apd_root="${YMIR_ROOT_DIR:-}"
|
|
39
39
|
if [ -z "$_apd_root" ]; then _apd_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"; fi
|
|
40
40
|
_apd_pkg="$(app_pkg "$_apd_surface")"
|
|
41
|
-
|
|
41
|
+
# Three shapes, and npm uses the third more than anyone expects:
|
|
42
|
+
# a clone apps/<surface>
|
|
43
|
+
# a nested package <pkg>/node_modules/@zerwiz/<package>
|
|
44
|
+
# a SIBLING package <prefix>/lib/node_modules/@zerwiz/<package> — beside ymir,
|
|
45
|
+
# where a global install puts a dependency it hoists out
|
|
46
|
+
# (the sibling is found through dirname, so no parent-climbing path is written)
|
|
47
|
+
for _apd_c in \
|
|
48
|
+
"$_apd_root/apps/$_apd_surface" \
|
|
49
|
+
"$_apd_root/node_modules/@zerwiz/$_apd_pkg" \
|
|
50
|
+
"$(dirname "$_apd_root")/$_apd_pkg"
|
|
51
|
+
do
|
|
42
52
|
[ -d "$_apd_c" ] && { printf -v "$_apd_rv" '%s' "$_apd_c"; return 0; }
|
|
43
53
|
done
|
|
44
54
|
printf -v "$_apd_rv" '%s' ""
|
package/bin/design-icon.sh
CHANGED
|
@@ -43,11 +43,11 @@ ACTION="${1:-list}"; shift || true
|
|
|
43
43
|
# dir|glyph|tint|says|icon-name|exec|wm-class
|
|
44
44
|
# FIVE UI surfaces, FIVE DIFFERENT glyphs — no app borrows another's rune.
|
|
45
45
|
APPS=(
|
|
46
|
-
"apps/hlidskjalf|ehwaz|#c9973f|the seat — Hlidskjalf, the high seat of the control plane|ymir-hlidskjalf|
|
|
47
|
-
"apps/hlidskjalf-mobile|raidho|#c9973f|the road — the seat carried, Hlidskjalf on a phone|ymir-hlidskjalf-mobile|
|
|
48
|
-
"apps/odrerir|ansuz|#c9973f|the mead — Óðrerir, the Live Hall (Odin's breath, inspiration)|ymir-odrerir|
|
|
49
|
-
"apps/sessrumnir|othala|#c9973f|the hall — Sessrúmnir, the seat that holds the cloth|ymir-sessrumnir|
|
|
50
|
-
"apps/smidja-factory/apps/visualizer|kaunan|#f59e0b|the torch — the forge's eye, Smíðja's trace|ymir-smidja|
|
|
46
|
+
"apps/hlidskjalf|ehwaz|#c9973f|the seat — Hlidskjalf, the high seat of the control plane|ymir-hlidskjalf|ymir hlidskjalf|ymir-hlidskjalf|Ymir · Hlidskjalf"
|
|
47
|
+
"apps/hlidskjalf-mobile|raidho|#c9973f|the road — the seat carried, Hlidskjalf on a phone|ymir-hlidskjalf-mobile|ymir hlidskjalf|ymir-hlidskjalf-mobile|Ymir · Hlidskjalf Mobile"
|
|
48
|
+
"apps/odrerir|ansuz|#c9973f|the mead — Óðrerir, the Live Hall (Odin's breath, inspiration)|ymir-odrerir|ymir odrerir|ymir-odrerir|Ymir · Óðrerir"
|
|
49
|
+
"apps/sessrumnir|othala|#c9973f|the hall — Sessrúmnir, the seat that holds the cloth|ymir-sessrumnir|ymir sessrumnir|ymir-sessrumnir|Ymir · Sessrúmnir"
|
|
50
|
+
"apps/smidja-factory/apps/visualizer|kaunan|#f59e0b|the torch — the forge's eye, Smíðja's trace|ymir-smidja|ymir smidja|ymir-smidja|Ymir · Smíðja"
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
list() {
|
|
@@ -115,11 +115,11 @@ icons_dir="$data_home/icons/hicolor/scalable/apps"
|
|
|
115
115
|
apps_dir="$data_home/applications"
|
|
116
116
|
# app | entry name | Exec | StartupWMClass
|
|
117
117
|
ENTRIES=(
|
|
118
|
-
"hlidskjalf|Ymir · Hlidskjalf|
|
|
119
|
-
"odrerir|Ymir · Óðrerir|
|
|
120
|
-
"sessrumnir|Ymir · Sessrúmnir|
|
|
121
|
-
"visualizer|Ymir · Smíðja|
|
|
122
|
-
"hlidskjalf-mobile|Ymir · Hlidskjalf Mobile|
|
|
118
|
+
"hlidskjalf|Ymir · Hlidskjalf|ymir hlidskjalf|ymir-hlidskjalf"
|
|
119
|
+
"odrerir|Ymir · Óðrerir|ymir odrerir|ymir-odrerir"
|
|
120
|
+
"sessrumnir|Ymir · Sessrúmnir|ymir sessrumnir|ymir-sessrumnir"
|
|
121
|
+
"visualizer|Ymir · Smíðja|ymir smidja|ymir-smidja"
|
|
122
|
+
"hlidskjalf-mobile|Ymir · Hlidskjalf Mobile|ymir hlidskjalf|ymir-hlidskjalf-mobile"
|
|
123
123
|
)
|
|
124
124
|
install_all() {
|
|
125
125
|
# A phone app gets an icon for its own bundle, never a desktop entry.
|
|
@@ -149,7 +149,10 @@ install_all() {
|
|
|
149
149
|
printf '[Desktop Entry]\nType=Application\nVersion=1.0\n'
|
|
150
150
|
printf 'Name=%s\n' "$display"
|
|
151
151
|
printf 'Comment=%s\n' "$says"
|
|
152
|
-
|
|
152
|
+
# The door, never a path: a launcher entry outlives the tree that wrote it,
|
|
153
|
+
# and `ymir <door>` reaches whichever install is live. (The CLI is on PATH
|
|
154
|
+
# from npm's global bin, and from bin/ in a clone — ymir.js is a bin entry.)
|
|
155
|
+
printf 'Exec=%s\n' "$exec"
|
|
153
156
|
printf 'Icon=%s\n' "$iconname"
|
|
154
157
|
printf 'Terminal=false\nCategories=Development;Utility;\n'
|
|
155
158
|
printf 'StartupWMClass=%s\nStartupNotify=true\n' "$klass"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerwiz/ymir",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Ymir \u2014 the single-tenant agent operating system. Omarchy-first, host-aware, self-healing.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/zerwiz/ymir",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"optionalDependencies": {
|
|
63
63
|
"@zerwiz/hlidskjalf": "^0.1.0",
|
|
64
64
|
"@zerwiz/odrerir": "^0.1.0",
|
|
65
|
-
"@zerwiz/sessrumnir": "
|
|
65
|
+
"@zerwiz/sessrumnir": "0.1.9",
|
|
66
66
|
"@zerwiz/smidja-factory": "^0.1.0"
|
|
67
67
|
}
|
|
68
68
|
}
|
package/scripts/start.sh
CHANGED
|
@@ -108,7 +108,8 @@ if [ -x "$ROOT/bin/sessrumnir.sh" ]; then
|
|
|
108
108
|
echo "Sessrúmnir — the seat-hall did not rise (run: bin/sessrumnir.sh start)" >&2
|
|
109
109
|
fi
|
|
110
110
|
else
|
|
111
|
-
echo "Sessrúmnir —
|
|
111
|
+
echo "Sessrúmnir — NOT raised: the sessrumnir surface is missing from this install" >&2
|
|
112
|
+
echo "help: npm i -g @zerwiz/ymir (it is a dependency), or from a clone: bin/sessrumnir-ensure.sh install" >&2
|
|
112
113
|
fi
|
|
113
114
|
fi
|
|
114
115
|
|
|
@@ -256,7 +257,8 @@ if [ -n "$HALL_DIR" ] && [ -d "$HALL_DIR" ]; then
|
|
|
256
257
|
fi
|
|
257
258
|
fi
|
|
258
259
|
else
|
|
259
|
-
echo "Óðrerir —
|
|
260
|
+
echo "Óðrerir — NOT raised: the odrerir surface is missing from this install" >&2
|
|
261
|
+
echo "help: npm i -g @zerwiz/ymir (it is a dependency)" >&2
|
|
260
262
|
fi
|
|
261
263
|
|
|
262
264
|
cd "$APP"
|