@ivoryheart/herdr-world 0.1.0 → 0.2.0-rc.1

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.
Files changed (75) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +167 -28
  3. package/bin/herdr-world.mjs +66 -0
  4. package/package.json +18 -22
  5. package/THIRD_PARTY_NOTICES.md +0 -61
  6. package/UPSTREAM.md +0 -65
  7. package/bin/herdr-world +0 -133
  8. package/docs/world-assets.md +0 -51
  9. package/lib/bridges/linux-x64/herdr-world-bridge +0 -0
  10. package/lib/bridges/macos-arm64/herdr-world-bridge +0 -0
  11. package/lib/bridges/macos-x64/herdr-world-bridge +0 -0
  12. package/lib/herdr-world-launcher.sh +0 -533
  13. package/share/herdr-world/web/assets/BufferResource-TmONtVkO.js +0 -311
  14. package/share/herdr-world/web/assets/CanvasPool-C4EP4giG.js +0 -1
  15. package/share/herdr-world/web/assets/FederatedEventTarget-CkoT1sfc.js +0 -1
  16. package/share/herdr-world/web/assets/FilterSystem-Cc8XEqAi.js +0 -173
  17. package/share/herdr-world/web/assets/NoteMarkdownPreview-kY-nDOxM.js +0 -29
  18. package/share/herdr-world/web/assets/SpacesSurface-KQpjWcgW.js +0 -1
  19. package/share/herdr-world/web/assets/WebGLRenderer-CH0L4JQe.js +0 -1
  20. package/share/herdr-world/web/assets/WebGPURenderer-DLQebYcV.js +0 -1
  21. package/share/herdr-world/web/assets/WorldSurface-FBkCkOSB.js +0 -197
  22. package/share/herdr-world/web/assets/__vite-browser-external-2447137e-BvRk9kiK.js +0 -0
  23. package/share/herdr-world/web/assets/browserAll-B8-kqmYE.js +0 -1
  24. package/share/herdr-world/web/assets/chunk-QTnfLwEv.js +0 -1
  25. package/share/herdr-world/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  26. package/share/herdr-world/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  27. package/share/herdr-world/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  28. package/share/herdr-world/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  29. package/share/herdr-world/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  30. package/share/herdr-world/web/assets/getBatchSamplersUniformGroup-D-hqfegN.js +0 -1
  31. package/share/herdr-world/web/assets/ghostty-web-teHzIxkb.js +0 -13
  32. package/share/herdr-world/web/assets/index-Bkp5BPZN.js +0 -17
  33. package/share/herdr-world/web/assets/index-Cuh3insr.css +0 -1
  34. package/share/herdr-world/web/assets/init-DeL9YIMj.js +0 -1
  35. package/share/herdr-world/web/assets/localUniformBit-BnogyqF-.js +0 -264
  36. package/share/herdr-world/web/assets/web-DjpqhiRY.js +0 -1
  37. package/share/herdr-world/web/assets/web-aFNZ0VSZ.js +0 -1
  38. package/share/herdr-world/web/assets/webworkerAll-BFZtmp1G.js +0 -1
  39. package/share/herdr-world/web/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 +0 -0
  40. package/share/herdr-world/web/fonts/OFL.txt +0 -93
  41. package/share/herdr-world/web/herdr-logo-180.png +0 -0
  42. package/share/herdr-world/web/herdr-logo-192.png +0 -0
  43. package/share/herdr-world/web/herdr-logo-512.png +0 -0
  44. package/share/herdr-world/web/herdr-logo-maskable-192.png +0 -0
  45. package/share/herdr-world/web/herdr-logo-maskable-512.png +0 -0
  46. package/share/herdr-world/web/herdr-logo.svg +0 -6
  47. package/share/herdr-world/web/index.html +0 -24
  48. package/share/herdr-world/web/legal/Apache-2.0.txt +0 -190
  49. package/share/herdr-world/web/legal/LICENSE.txt +0 -22
  50. package/share/herdr-world/web/legal/PixiJS-MIT.txt +0 -21
  51. package/share/herdr-world/web/legal/THIRD_PARTY_NOTICES.md +0 -61
  52. package/share/herdr-world/web/legal/UPSTREAM.md +0 -65
  53. package/share/herdr-world/web/legal/manifest.json +0 -33
  54. package/share/herdr-world/web/legal/npm-licenses.txt +0 -1381
  55. package/share/herdr-world/web/legal/world-assets.md +0 -51
  56. package/share/herdr-world/web/manifest.json +0 -42
  57. package/share/herdr-world/web/world/LICENSE-PixiJS.txt +0 -21
  58. package/share/herdr-world/web/world/characters/1-D-1.png +0 -0
  59. package/share/herdr-world/web/world/characters/10-D-1.png +0 -0
  60. package/share/herdr-world/web/world/characters/11-D-1.png +0 -0
  61. package/share/herdr-world/web/world/characters/12-D-1.png +0 -0
  62. package/share/herdr-world/web/world/characters/2-D-1.png +0 -0
  63. package/share/herdr-world/web/world/characters/3-D-1.png +0 -0
  64. package/share/herdr-world/web/world/characters/4-D-1.png +0 -0
  65. package/share/herdr-world/web/world/characters/5-D-1.png +0 -0
  66. package/share/herdr-world/web/world/characters/6-D-1.png +0 -0
  67. package/share/herdr-world/web/world/characters/7-D-1.png +0 -0
  68. package/share/herdr-world/web/world/characters/8-D-1.png +0 -0
  69. package/share/herdr-world/web/world/characters/9-D-1.png +0 -0
  70. package/third_party/dependencies/README.md +0 -22
  71. package/third_party/dependencies/cargo-licenses.html +0 -7696
  72. package/third_party/dependencies/npm-licenses.txt +0 -1381
  73. package/third_party/licenses/Apache-2.0.txt +0 -190
  74. package/third_party/licenses/PixiJS-MIT.txt +0 -21
  75. package/vendor/herdr-compat/VENDOR-MANIFEST.toml +0 -186
package/LICENSE CHANGED
@@ -1,5 +1,6 @@
1
1
  MIT License
2
2
 
3
+ Copyright (c) 2026 Arthur
3
4
  Copyright (c) 2026 Kevin
4
5
  Copyright (c) 2026 IvoryHeart contributors
5
6
 
package/README.md CHANGED
@@ -1,42 +1,181 @@
1
1
  # Herdr World
2
2
 
3
- Herdr World is a browser and mobile client for monitoring and controlling Herdr agents.
3
+ <p align="center">
4
+ <img src="./web/public/herdr-world-logo.svg" alt="Herdr World ram mark" width="128" />
5
+ </p>
4
6
 
5
- ## Install
7
+ A **visual control plane** for [Herdr](https://herdr.dev). Connect local and SSH
8
+ hosts, select one host at a time in Office, Tree, Graph, or Spaces, and open its
9
+ qualified terminals, files, changes, and agent history on desktop or mobile.
10
+ **Requires a running Herdr server.**
6
11
 
7
- ```bash
8
- npm install --global @ivoryheart/herdr-world
9
- herdr-world
10
- ```
12
+ ## Screenshots
13
+
14
+ ### Desktop
15
+
16
+ [![Office view showing the selected Herdr host and its agents][desktop-office]][desktop-office]
17
+
18
+ Office shows the selected host's agent state at a glance. Tree and Graph expose
19
+ the same qualified runtime, while Spaces keeps Herdr's full terminal and
20
+ repository workflow one click away. Switch the host selector to replace the
21
+ whole view; World keeps other managed connections observed in the background.
22
+
23
+ <!-- markdownlint-disable MD033 -->
24
+
25
+ <table width="100%">
26
+ <thead>
27
+ <tr>
28
+ <th width="33.33%" align="center">Tree</th>
29
+ <th width="33.33%" align="center">Graph</th>
30
+ <th width="33.33%" align="center">Spaces</th>
31
+ </tr>
32
+ </thead>
33
+ <tbody>
34
+ <tr>
35
+ <td width="33.33%" align="center" valign="top">
36
+ <a href="./docs/images/herdr-world-desktop-tree.png"><img src="./docs/images/herdr-world-desktop-tree.png" alt="Tree view of hosts, spaces, and agents" width="100%" /></a>
37
+ </td>
38
+ <td width="33.33%" align="center" valign="top">
39
+ <a href="./docs/images/herdr-world-desktop-graph.png"><img src="./docs/images/herdr-world-desktop-graph.png" alt="Graph view of hosts, spaces, and agents" width="100%" /></a>
40
+ </td>
41
+ <td width="33.33%" align="center" valign="top">
42
+ <a href="./docs/images/herdr-world-desktop-spaces.png"><img src="./docs/images/herdr-world-desktop-spaces.png" alt="Spaces terminal workspace" width="100%" /></a>
43
+ </td>
44
+ </tr>
45
+ </tbody>
46
+ </table>
47
+
48
+ The same Inspector can move with an agent while preserving its exact terminal
49
+ and repository context. Files and agent history are first-class views, not a
50
+ handoff to a separate application.
51
+
52
+ <table width="100%">
53
+ <thead>
54
+ <tr>
55
+ <th width="50%" align="center">Files</th>
56
+ <th width="50%" align="center">Agent history</th>
57
+ </tr>
58
+ </thead>
59
+ <tbody>
60
+ <tr>
61
+ <td width="50%" align="center" valign="top">
62
+ <a href="./docs/images/herdr-world-desktop-files.png"><img src="./docs/images/herdr-world-desktop-files.png" alt="Office Inspector browsing files for the selected agent" width="100%" /></a>
63
+ </td>
64
+ <td width="50%" align="center" valign="top">
65
+ <a href="./docs/images/herdr-world-desktop-history.png"><img src="./docs/images/herdr-world-desktop-history.png" alt="Office Inspector showing the selected agent's session history" width="100%" /></a>
66
+ </td>
67
+ </tr>
68
+ </tbody>
69
+ </table>
70
+
71
+ ### Mobile
72
+
73
+ <table width="100%">
74
+ <thead>
75
+ <tr>
76
+ <th width="33.33%" align="center">Office</th>
77
+ <th width="33.33%" align="center">Tree</th>
78
+ <th width="33.33%" align="center">Spaces</th>
79
+ </tr>
80
+ </thead>
81
+ <tbody>
82
+ <tr>
83
+ <td width="33.33%" align="center" valign="top">
84
+ <a href="./docs/images/herdr-world-mobile-office.png"><img src="./docs/images/herdr-world-mobile-office.png" alt="Mobile Office view" width="100%" /></a>
85
+ </td>
86
+ <td width="33.33%" align="center" valign="top">
87
+ <a href="./docs/images/herdr-world-mobile-tree.png"><img src="./docs/images/herdr-world-mobile-tree.png" alt="Mobile Tree view" width="100%" /></a>
88
+ </td>
89
+ <td width="33.33%" align="center" valign="top">
90
+ <a href="./docs/images/herdr-world-mobile-spaces.png"><img src="./docs/images/herdr-world-mobile-spaces.png" alt="Mobile Spaces terminal" width="100%" /></a>
91
+ </td>
92
+ </tr>
93
+ </tbody>
94
+ </table>
95
+
96
+ <!-- markdownlint-enable MD033 -->
97
+
98
+ Click any screenshot to open the full-resolution image.
11
99
 
12
- The package contains the tested Linux x64, macOS ARM64, and macOS x64 bridge binaries and the
13
- bundled web application. It requires Node.js 22.14.0 or newer and Linux glibc 2.34 or newer.
14
- Windows, Linux ARM64, musl Linux, and unknown libc environments are not supported.
100
+ [desktop-office]: ./docs/images/herdr-world-desktop-office.png
15
101
 
16
- Package installation only installs files. It does not download or build native code, install Herdr,
17
- create a workspace, or start a process.
102
+ ## Quick start
18
103
 
19
- Herdr World still requires a running Herdr 0.8.2 or newer session using terminal protocol 20. Start
20
- Herdr from the directory containing the work it should manage, then run `herdr-world`. Use
21
- `herdr-world --help` for bridge options. The bridge binds to loopback by default; Host, Origin, and
22
- Content Security Policy checks are request protections, not user authentication.
104
+ 1. Install and start [Herdr](https://herdr.dev), or let Herdr World install and
105
+ start it later with `herdr-world herdr setup`.
106
+ 2. On Linux or macOS, install Herdr World with the standalone installer:
23
107
 
24
- The package includes the complete application legal notices and dependency inventories. The exact
25
- source release and package checksums are recorded in the corresponding GitHub release workflow.
108
+ ```bash
109
+ # Empty selects latest; use X.Y.Z (no v prefix) to pin a Herdr World version.
110
+ curl -fsSL \
111
+ https://github.com/IvoryHeart/herdr-world/releases/latest/download/install-herdr-world.sh \
112
+ | HERDR_WORLD_VERSION= sh
113
+ ```
26
114
 
27
- ## Using Herdr's plugin
115
+ For 0.2.0 and newer releases, Homebrew (`brew install IvoryHeart/tap/herdr-world`)
116
+ and npm (`npm install --global @ivoryheart/herdr-world`) are alternative channels.
117
+ npm requires Node.js 22.14.0 or newer and downloads only the binary for the
118
+ current platform. On Windows, use npm or download the matching x64 or ARM64
119
+ archive from the [latest release](https://github.com/IvoryHeart/herdr-world/releases/latest).
120
+ 3. On Linux/macOS standalone installs, add `~/.local/bin` to `PATH`. Run
121
+ `herdr-world` (or `herdr-world.exe` from an extracted Windows archive) and open
122
+ the printed URL.
28
123
 
29
- The Herdr plugin is installed from the Herdr World GitHub repository, not from this npm package:
124
+ Use the connection selector to add local sockets or an SSH destination. One World
125
+ service owns every connection; each browser selects one operational host and stays
126
+ on the same World origin. Office, Tree, Graph, visible counts, and search follow
127
+ that selected host until simultaneous active-host interaction is supported.
128
+
129
+ See [deployment](./docs/DEPLOYMENT.md) for checksums, profiles, authentication,
130
+ updates, and services.
131
+
132
+ ## Install as a PWA
133
+
134
+ **PWA installation is recommended for daily use:** a separate app window without
135
+ browser tabs or the address bar. Open and authenticate with Herdr World, then install:
136
+
137
+ - **iPhone/iPad Safari:** Share -> Add to Home Screen.
138
+ - **macOS Safari 17+:** File -> Add to Dock.
139
+ - **Chrome/Edge:** browser menu -> Install app.
140
+
141
+ The process must stay running and reachable. **PWA mode is not offline access.**
142
+
143
+ ## Documentation
144
+
145
+ - [Website](https://ivoryheart.github.io/herdr-world/) and
146
+ [hands-on tutorial](https://ivoryheart.github.io/herdr-world/tutorial/)
147
+ ([Markdown](./docs/TUTORIAL.md)): local work, mobile, and private remote access.
148
+ - [Features and shortcuts](./FEATURES.md)
149
+ - [Deployment](./docs/DEPLOYMENT.md): installation, configuration, services, builds.
150
+ - [Architecture](./docs/ARCHITECTURE.md): system contracts.
151
+ - [Repository knowledge map](./docs/knowledge-map.md) and
152
+ [foundation source guide](./docs/foundation-guide.md): contracts, module owners,
153
+ request paths, and focused tests for contributors and agents.
154
+ - [Development](./docs/development.md), [packaging](./docs/packaging.md), and
155
+ [release process](./docs/release.md).
156
+ - [Security](./SECURITY.md) and [contributing](./CONTRIBUTING.md).
157
+
158
+ ## Development
159
+
160
+ Use Bun 1.4.1 or newer and a running Herdr server:
30
161
 
31
162
  ```bash
32
- herdr plugin install IvoryHeart/herdr-world --ref vX.Y.Z
163
+ bun install --frozen-lockfile
164
+ # Run in separate terminals:
165
+ bun run dev:server
166
+ bun run dev:web
33
167
  ```
34
168
 
35
- It installs the exact matching npm payload privately inside Herdr's managed plugin checkout and
36
- supervises its bridge for the invoking Herdr session. The plugin requires Node.js 22.14.0 or newer
37
- and npm at installation and runtime; it does not use this package's global installation or a
38
- Homebrew installation. Installation does not start the bridge immediately. Herdr's startup hook
39
- starts it on the next server restore; invoke the plugin's `open` or `start` action for an already
40
- running server. See the repository [plugin documentation](https://github.com/IvoryHeart/herdr-world#herdr-plugin)
41
- for configuration, lifecycle actions, startup and failure behavior, security, and the standalone
42
- distribution relationship.
169
+ Open <http://localhost:5173>. See [CONTRIBUTING.md](./CONTRIBUTING.md) for checks
170
+ and pull requests.
171
+
172
+ ## Security
173
+
174
+ Herdr World controls terminals and modifies real files. Keep the default loopback
175
+ binding; read [SECURITY.md](./SECURITY.md) before allowing another device access.
176
+
177
+ ## License
178
+
179
+ Code: [MIT](./LICENSE). Bundled dependencies, fonts and brand assets retain their
180
+ original terms; see [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md) and the
181
+ generated [dependency licence texts](./DEPENDENCY_LICENSES.md).
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { readFileSync } from "node:fs";
4
+ import { constants } from "node:os";
5
+ import { dirname, join } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+
8
+ const platform = process.platform === "win32" ? "windows" : process.platform;
9
+ const id = `${platform}-${process.arch}`;
10
+ const supported = new Set([
11
+ "linux-x64",
12
+ "linux-arm64",
13
+ "darwin-x64",
14
+ "darwin-arm64",
15
+ "windows-x64",
16
+ "windows-arm64",
17
+ ]);
18
+ if (!supported.has(id)) {
19
+ console.error(`Herdr World has no release binary for ${id}`);
20
+ process.exit(1);
21
+ }
22
+ if (
23
+ platform === "linux" &&
24
+ !process.report?.getReport()?.header.glibcVersionRuntime
25
+ ) {
26
+ console.error("Herdr World requires glibc on Linux");
27
+ process.exit(1);
28
+ }
29
+
30
+ const packageName = `@ivoryheart/herdr-world-${id}`;
31
+ let binary;
32
+ try {
33
+ const packageJson = fileURLToPath(
34
+ import.meta.resolve(`${packageName}/package.json`),
35
+ );
36
+ const platformVersion = JSON.parse(readFileSync(packageJson, "utf8")).version;
37
+ const launcherVersion = JSON.parse(
38
+ readFileSync(new URL("../package.json", import.meta.url), "utf8"),
39
+ ).version;
40
+ if (platformVersion !== launcherVersion) {
41
+ throw new Error("platform package version differs from the launcher");
42
+ }
43
+ binary = join(
44
+ dirname(packageJson),
45
+ "bin",
46
+ platform === "windows" ? "herdr-world.exe" : "herdr-world",
47
+ );
48
+ } catch (error) {
49
+ console.error(
50
+ `Cannot use ${packageName}: ${error.message}. Reinstall with npm optional dependencies enabled.`,
51
+ );
52
+ process.exit(1);
53
+ }
54
+
55
+ const child = spawn(binary, process.argv.slice(2), { stdio: "inherit" });
56
+ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) {
57
+ process.on(signal, () => child.kill(signal));
58
+ }
59
+ child.on("error", (error) => {
60
+ console.error(`Could not start Herdr World: ${error.message}`);
61
+ process.exitCode = 1;
62
+ });
63
+ child.on("exit", (code, signal) => {
64
+ process.exitCode =
65
+ code ?? (signal ? 128 + (constants.signals[signal] ?? 1) : 1);
66
+ });
package/package.json CHANGED
@@ -1,34 +1,30 @@
1
1
  {
2
2
  "name": "@ivoryheart/herdr-world",
3
- "version": "0.1.0",
4
- "description": "Browser and mobile client for monitoring and controlling Herdr agents.",
5
- "type": "module",
6
- "bin": {
7
- "herdr-world": "bin/herdr-world"
8
- },
9
- "engines": {
10
- "node": ">=22.14.0"
11
- },
3
+ "version": "0.2.0-rc.1",
4
+ "description": "Herdr World: Visualize and control your agents in Office and Graph across multiple hosts.",
12
5
  "license": "MIT",
13
6
  "repository": {
14
7
  "type": "git",
15
8
  "url": "git+https://github.com/IvoryHeart/herdr-world.git"
16
9
  },
17
- "bugs": {
18
- "url": "https://github.com/IvoryHeart/herdr-world/issues"
10
+ "engines": {
11
+ "node": ">=22.14.0"
12
+ },
13
+ "bin": {
14
+ "herdr-world": "bin/herdr-world.mjs"
15
+ },
16
+ "optionalDependencies": {
17
+ "@ivoryheart/herdr-world-linux-x64": "0.2.0-rc.1",
18
+ "@ivoryheart/herdr-world-linux-arm64": "0.2.0-rc.1",
19
+ "@ivoryheart/herdr-world-darwin-x64": "0.2.0-rc.1",
20
+ "@ivoryheart/herdr-world-darwin-arm64": "0.2.0-rc.1",
21
+ "@ivoryheart/herdr-world-windows-x64": "0.2.0-rc.1",
22
+ "@ivoryheart/herdr-world-windows-arm64": "0.2.0-rc.1"
19
23
  },
20
- "homepage": "https://ivoryheart.github.io/herdr-world/",
21
24
  "files": [
22
- "bin/herdr-world",
23
- "lib/herdr-world-launcher.sh",
24
- "lib/bridges",
25
- "share/herdr-world/web",
26
- "docs",
27
- "vendor",
28
- "third_party",
29
- "LICENSE",
30
- "THIRD_PARTY_NOTICES.md",
31
- "UPSTREAM.md"
25
+ "bin",
26
+ "README.md",
27
+ "LICENSE"
32
28
  ],
33
29
  "publishConfig": {
34
30
  "access": "public"
@@ -1,61 +0,0 @@
1
- # Third-party notices
2
-
3
- Herdr World contains code and assets from the projects below. The repository
4
- history, lockfiles, and referenced manifests provide the exact version record.
5
-
6
- ## Herdr Web
7
-
8
- Herdr World is derived from
9
- [`kcosr/herdr-web`](https://github.com/kcosr/herdr-web), licensed under the MIT
10
- License, Copyright (c) 2026 Kevin. The retained MIT terms are in the repository
11
- [`LICENSE`](LICENSE). The current synchronized revision is recorded in
12
- [`UPSTREAM.md`](UPSTREAM.md).
13
-
14
- ## Herdr compatibility source
15
-
16
- `vendor/herdr-compat` contains copied or adapted source from
17
- [`herdrdev/herdr`](https://github.com/herdrdev/herdr) v0.8.2 at commit
18
- `9eb521456ac0d19d3ab3d9d7cea3cca10baa8a4c`, licensed under Apache-2.0.
19
- The exact source paths, hashes, and local dispositions are recorded in
20
- [`vendor/herdr-compat/VENDOR-MANIFEST.toml`](vendor/herdr-compat/VENDOR-MANIFEST.toml).
21
- The license text is retained in
22
- [`third_party/licenses/Apache-2.0.txt`](third_party/licenses/Apache-2.0.txt).
23
-
24
- ## Claw-Empire character assets and Office adaptations
25
-
26
- The character sprites in `web/public/world/characters` are copied from
27
- [`GreenSheep01201/claw-empire`](https://github.com/GreenSheep01201/claw-empire)
28
- at commit `66a24ea7df2435ef897c48c147deb7ec572c01c2`, licensed under
29
- Apache-2.0, Copyright 2026 GreenSheep01201 (seowongil@gmail.com).
30
-
31
- The Office geometry and drawing TypeScript files are modified adaptations of
32
- the historical sources identified by hash in [`docs/world-assets.md`](docs/world-assets.md).
33
- Herdr World's TypeScript port and subsequent modifications are documented
34
- there as modified material. The Apache-2.0 text is retained in
35
- [`third_party/licenses/Apache-2.0.txt`](third_party/licenses/Apache-2.0.txt).
36
-
37
- ## PixiJS
38
-
39
- World rendering uses PixiJS 8.3.4, licensed under the MIT License, Copyright
40
- (c) 2013-2023 Mathew Groves and Chad Engler. Its license is retained in
41
- [`third_party/licenses/PixiJS-MIT.txt`](third_party/licenses/PixiJS-MIT.txt)
42
- and alongside the shipped World assets.
43
-
44
- ## JetBrains Mono Nerd Font
45
-
46
- The terminal includes `JetBrainsMonoNerdFontMono-Regular.woff2` as a fallback
47
- for box-drawing, symbol, and private-use glyphs. The font is licensed under the
48
- SIL Open Font License 1.1, Copyright 2020 The JetBrains Mono Project Authors.
49
- The copyright notice and full license are retained in
50
- [`web/public/fonts/OFL.txt`](web/public/fonts/OFL.txt) and shipped alongside
51
- the font.
52
-
53
- ## Other dependencies
54
-
55
- JavaScript and Rust dependency versions are pinned by `package-lock.json`,
56
- `web/package-lock.json`, `bridge/Cargo.lock`, and
57
- `vendor/herdr-compat/Cargo.lock`. The complete production npm and planned
58
- desktop Cargo closures, their selected licences, copyright notices, and full
59
- licence texts are checked in under
60
- [`third_party/dependencies`](third_party/dependencies). Release assembly fails
61
- when those generated inventories drift from the resolved dependency graphs.
package/UPSTREAM.md DELETED
@@ -1,65 +0,0 @@
1
- # Upstreams
2
-
3
- Herdr World is derived from
4
- [`kcosr/herdr-web`](https://github.com/kcosr/herdr-web) and runs against
5
- [`herdrdev/herdr`](https://github.com/herdrdev/herdr).
6
-
7
- The Git remotes are:
8
-
9
- ```text
10
- origin git@github.com:IvoryHeart/herdr-world.git
11
- upstream git@github.com:kcosr/herdr-web.git
12
- ```
13
-
14
- Current synchronization points:
15
-
16
- - Herdr Web: `4384c884da418ea3f3fb75954da5347b2e12f063`
17
- (`v0.5.0` plus the JetBrains Mono Nerd Font fallback merged in upstream PR #74)
18
- - Herdr compatibility: Herdr `v0.8.2`, commit
19
- `9eb521456ac0d19d3ab3d9d7cea3cca10baa8a4c`, terminal protocol `20`
20
-
21
- The 2026-08-30 Herdr audit also reviewed `master` at
22
- `4a3b04f59ba3b7d8a15cea187b23e1e80c343b0c`. No stable release newer than
23
- `v0.8.2` exists at that point. `master` advertises terminal protocol `21` and
24
- contains unreleased API additions, so those sources are not vendored or
25
- admitted by the protocol-20 bridge. The stable compatibility reference above
26
- remains unchanged until a release is available for a complete refresh and
27
- stock-daemon validation.
28
-
29
- Git history is the detailed synchronization record, and the Herdr Web commit
30
- above is a merge ancestor of this repository. `CHANGELOG.md` repeats only the
31
- per-release baseline correlation; it does not copy the upstream release history
32
- or maintain a separate adoption ledger.
33
-
34
- ## Release Lineage Convention
35
-
36
- Herdr World and Herdr Web keep independent release identities and changelogs. A World version does
37
- not imply a matching Web version, and a Web version is never added as a World changelog section.
38
- Each World release instead records one exact Web baseline: the descriptive upstream version or
39
- marker together with the full synchronization commit from this file. The release helper renders
40
- that correlation as "Herdr Web baseline: Derived from …" and release validation requires it to
41
- match the synchronization point at the tagged commit.
42
-
43
- Use these terms consistently:
44
-
45
- - **Derived from** describes Herdr Web source synchronized into this repository and then changed
46
- downstream.
47
- - **Compatible with** describes the external Herdr release and terminal protocol accepted by the
48
- bridge.
49
- - **Depends on** is reserved for a package or runtime dependency that remains independently
50
- installed and resolved; it does not describe copied or synchronized Web source.
51
-
52
- Record World-owned changes under the current World `Unreleased` section. An adopted upstream
53
- change may be mentioned when it changes the World product, with its upstream attribution and World
54
- integration PR, but do not reproduce the upstream release notes. Update this file's synchronization
55
- point before preparing a World release; the prepared changelog correlation is generated from it.
56
-
57
- To update:
58
-
59
- ```bash
60
- git fetch upstream
61
- git merge upstream/main
62
- ```
63
-
64
- Keep World implementation in its World-owned directories and resolve only the
65
- small integration seams when an upstream change touches them.
package/bin/herdr-world DELETED
@@ -1,133 +0,0 @@
1
- #!/usr/bin/env node
2
- import { spawn } from "node:child_process";
3
- import { realpathSync } from "node:fs";
4
- import { fileURLToPath } from "node:url";
5
- import { dirname, join, resolve } from "node:path";
6
-
7
- export const SUPPORTED_PLATFORMS = {
8
- "linux-x64": "linux-x64",
9
- "darwin-arm64": "macos-arm64",
10
- "darwin-x64": "macos-x64",
11
- };
12
-
13
- export function parseGlibcVersion(value) {
14
- const match = typeof value === "string" ? value.match(/^(\d+)\.(\d+)$/) : null;
15
- return match ? { major: Number(match[1]), minor: Number(match[2]) } : null;
16
- }
17
-
18
- function compareVersions(left, right) {
19
- if (left.major !== right.major) return left.major - right.major;
20
- return left.minor - right.minor;
21
- }
22
-
23
- export function selectBridge({
24
- platform = process.platform,
25
- arch = process.arch,
26
- report = process.report,
27
- } = {}) {
28
- const key = `${platform}-${arch}`;
29
- const target = SUPPORTED_PLATFORMS[key];
30
- if (!target) {
31
- throw new Error(`Herdr World does not support this platform or architecture: ${key}`);
32
- }
33
-
34
- if (platform !== "linux") return target;
35
-
36
- const glibcValue = report?.getReport?.().header?.glibcVersionRuntime;
37
- if (typeof glibcValue !== "string") {
38
- throw new Error("Herdr World requires a detectable glibc runtime on Linux; musl or unknown libc is unsupported");
39
- }
40
- const glibc = parseGlibcVersion(glibcValue);
41
- if (!glibc) {
42
- throw new Error(`Herdr World could not parse the Linux glibc version: ${glibcValue}`);
43
- }
44
- if (compareVersions(glibc, { major: 2, minor: 34 }) < 0) {
45
- throw new Error(`Herdr World requires glibc 2.34 or newer; found ${glibcValue}`);
46
- }
47
- return target;
48
- }
49
-
50
- export function packageHelp() {
51
- return `Usage: herdr-world [OPTIONS]
52
- herdr-world task-summary [TEXT] [--ttl-ms N] [--pane ID] [--session NAME]
53
- herdr-world task-summary --clear [--pane ID] [--session NAME]
54
-
55
- Starts the Herdr World browser bridge for the selected Herdr session.
56
-
57
- The task-summary command reports bounded, expiring harness metadata for the
58
- current Herdr pane without starting the browser bridge.
59
-
60
- Options are forwarded to the bridge:
61
- --host HOST Bind address (loopback by default)
62
- --port PORT HTTP port (8787 by default)
63
- --session NAME Select a named Herdr session
64
- --no-herdr-setup Disable interactive Herdr setup
65
- -h, --help Show this help without starting Herdr or a bridge
66
-
67
- The bridge requires Herdr 0.8.2 or newer with terminal protocol 20.
68
- `;
69
- }
70
-
71
- export function isHelpRequest(args) {
72
- return args.includes("-h") || args.includes("--help");
73
- }
74
-
75
- export function runPackageLauncher(args = process.argv.slice(2), {
76
- platform = process.platform,
77
- arch = process.arch,
78
- report = process.report,
79
- packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."),
80
- } = {}) {
81
- if (isHelpRequest(args)) {
82
- process.stdout.write(packageHelp());
83
- return null;
84
- }
85
-
86
- const target = selectBridge({ platform, arch, report });
87
- const bridge = join(packageRoot, "lib", "bridges", target, "herdr-world-bridge");
88
- const launcher = join(packageRoot, "lib", "herdr-world-launcher.sh");
89
- const staticDir = join(packageRoot, "share", "herdr-world", "web");
90
- const child = spawn("/bin/bash", [launcher, ...args], {
91
- env: {
92
- ...process.env,
93
- HERDR_WORLD_BRIDGE_BIN: bridge,
94
- HERDR_WORLD_STATIC_DIR: staticDir,
95
- },
96
- stdio: "inherit",
97
- });
98
-
99
- const signalHandlers = new Map();
100
- for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) {
101
- const handler = () => child.kill(signal);
102
- signalHandlers.set(signal, handler);
103
- process.on(signal, handler);
104
- }
105
- child.once("error", (error) => {
106
- console.error(`could not start Herdr World: ${error.message}`);
107
- process.exitCode = 1;
108
- });
109
- child.once("exit", (code, signal) => {
110
- if (signal) {
111
- for (const [forwardedSignal, handler] of signalHandlers) {
112
- process.removeListener(forwardedSignal, handler);
113
- }
114
- process.kill(process.pid, signal);
115
- } else {
116
- process.exitCode = code ?? 1;
117
- }
118
- });
119
- return child;
120
- }
121
-
122
- if (
123
- process.argv[1] &&
124
- realpathSync(resolve(process.argv[1])) === realpathSync(fileURLToPath(import.meta.url))
125
- ) {
126
- try {
127
- const result = runPackageLauncher();
128
- if (!result) process.exit(0);
129
- } catch (error) {
130
- console.error(error.message);
131
- process.exit(1);
132
- }
133
- }
@@ -1,51 +0,0 @@
1
- # Pixel Office asset provenance
2
-
3
- The Herdr World Pixel Office port uses character assets traceable to the
4
- Claw-Empire repository at revision
5
- `66a24ea7df2435ef897c48c147deb7ec572c01c2`, under `public/sprites/`. The
6
- tracked PNGs are byte-identical to those source files. That source carries the
7
- Apache License 2.0 and the copyright notice `Copyright 2026 GreenSheep01201
8
- (seowongil@gmail.com)`. Herdr World has no build or runtime dependency on the
9
- reference workspace. The copied character sprites now live under
10
- `web/public/world/characters/`.
11
-
12
- The reference workspace is historical provenance only; contributors do not
13
- need to clone or start another repository to build, test, or run Herdr World.
14
- The release notice bundle MUST include the Apache-2.0 license and this
15
- attribution. The adapted TypeScript geometry/drawing files are modified files
16
- and MUST carry a prominent modification notice as required by Apache-2.0
17
- Section 4(b); the provenance manifest will identify the exact source hashes,
18
- copied-file hashes, and notices.
19
-
20
- The historical reference Office directory was untracked in the source
21
- checkout at port time, so that local directory has no source commit to cite.
22
- The immutable Extension 001 approval commit authorizing this port is
23
- `7be916e3c4713582c72665cd787ef0300658ea26`. The Claw-Empire revision and
24
- these SHA-256 values identify the exact copied assets:
25
-
26
- | Asset | SHA-256 |
27
- | --- | --- |
28
- | `1-D-1.png` | `97e11be5369a5865f9e0a7b1657af23fd5d7f4b244fb94010ebb7e9e66a3e004` |
29
- | `2-D-1.png` | `f3053d7f6bc2959ad375b1cfd23eb9fb1e34e7329ba837fd7518268459d0a83d` |
30
- | `3-D-1.png` | `eb8cb07677ec3ff81a43e019990b288ca3b858309fe51b2d5b52ccf3f8b855f5` |
31
- | `4-D-1.png` | `23dab1383ef8f98af148885e5f01c25063ce0e7b6d0ae6a255c5bdb83dae01f2` |
32
- | `5-D-1.png` | `32d8159b707fc64447fc6ab27a6a00ba2ddf318627fada114d43d5aef9c93fa9` |
33
- | `6-D-1.png` | `7ae5935cf9f454f0ea8ee099111fde50da5055a50a7b05c53a98e5eb914b3739` |
34
- | `7-D-1.png` | `4fb4bcf9046c66f7e4630edf636deb6d076a062e195c9dfb44caf713e9e46dcf` |
35
- | `8-D-1.png` | `63d8d576aff2f9973d38d24c0d0ca87498af8880c1326aceaa0c644c5df03d66` |
36
- | `9-D-1.png` | `1fc674238ce13ae382c07189d4422780e47bdd1417bf468bb492786cf211f4bf` |
37
- | `10-D-1.png` | `c4d22e7ccec30505873469a2e1cef76cf8435be84d71d3f201d84147de8f5738` |
38
- | `11-D-1.png` | `6e2c79f2fdb5afe8fd8c1537ba550a8ada9d301e4b493e4a528dbb37d3d4a549` |
39
- | `12-D-1.png` | `334595aa69f05095faa88227413dcddd6d1a2f177fbaeb625bd78f8dc7bcef34` |
40
-
41
- The geometry and drawing behavior are TypeScript adaptations of `office-geometry.js`,
42
- `office-drawing.js`, and the rendering portions of `office-scene.js`; their source hashes at port
43
- time were respectively:
44
-
45
- - `6ab54a94369e8695c3bac2cf94ac76bab62613563382e4a712944ff0ff70e028`
46
- - `56edfdd364ace64663e4a98c931d15d2ef5bfcb725acee8d8791e88f974fd210`
47
- - `f4975a6e840506a003f39153dfa6e32830d311624402980a1884ecb5351a1e3f`
48
-
49
- PixiJS `8.3.4` is pinned as an npm dependency. Its MIT license is retained at
50
- `web/public/world/LICENSE-PixiJS.txt`. The Claw-Empire Apache-2.0 license is a
51
- release requirement and is not inferred from PixiJS or any neighboring asset.