@ivoryheart/herdr-world 0.1.1 → 0.2.0-rc.2
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/LICENSE +1 -0
- package/README.md +167 -28
- package/bin/herdr-world.mjs +66 -0
- package/package.json +18 -22
- package/THIRD_PARTY_NOTICES.md +0 -61
- package/UPSTREAM.md +0 -65
- package/bin/herdr-world +0 -133
- package/docs/world-assets.md +0 -51
- package/lib/bridges/linux-x64/herdr-world-bridge +0 -0
- package/lib/bridges/macos-arm64/herdr-world-bridge +0 -0
- package/lib/bridges/macos-x64/herdr-world-bridge +0 -0
- package/lib/herdr-world-launcher.sh +0 -533
- package/share/herdr-world/web/assets/BufferResource-TmONtVkO.js +0 -311
- package/share/herdr-world/web/assets/CanvasPool-C4EP4giG.js +0 -1
- package/share/herdr-world/web/assets/GraphTheme-DdAfatoM.js +0 -1
- package/share/herdr-world/web/assets/NoteMarkdownPreview-Crh3odMO.js +0 -29
- package/share/herdr-world/web/assets/SpacesSurface-KQpjWcgW.js +0 -1
- package/share/herdr-world/web/assets/WorldSurface-4GHZpnMP.js +0 -369
- package/share/herdr-world/web/assets/WorldThemeStage-Da7LFwo3.js +0 -1
- package/share/herdr-world/web/assets/__vite-browser-external-2447137e-BvRk9kiK.js +0 -0
- package/share/herdr-world/web/assets/browserAll-B258yZD2.js +0 -1
- package/share/herdr-world/web/assets/chunk-QTnfLwEv.js +0 -1
- package/share/herdr-world/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/share/herdr-world/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/share/herdr-world/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/share/herdr-world/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/share/herdr-world/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/share/herdr-world/web/assets/getBatchSamplersUniformGroup-D-hqfegN.js +0 -1
- package/share/herdr-world/web/assets/ghostty-web-CMdhZEut.js +0 -13
- package/share/herdr-world/web/assets/index-B8V-qiZs.js +0 -18
- package/share/herdr-world/web/assets/index-DSq8fuVk.css +0 -1
- package/share/herdr-world/web/assets/init-BCuNUfJx.js +0 -1
- package/share/herdr-world/web/assets/jsx-runtime-BWRPWl8p.js +0 -1
- package/share/herdr-world/web/assets/localUniformBit-BnogyqF-.js +0 -264
- package/share/herdr-world/web/assets/web-Bev77txP.js +0 -1
- package/share/herdr-world/web/assets/web-CCyAvF9M.js +0 -1
- package/share/herdr-world/web/assets/webworkerAll-B5q9qlVj.js +0 -1
- package/share/herdr-world/web/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 +0 -0
- package/share/herdr-world/web/fonts/OFL.txt +0 -93
- package/share/herdr-world/web/herdr-logo-180.png +0 -0
- package/share/herdr-world/web/herdr-logo-192.png +0 -0
- package/share/herdr-world/web/herdr-logo-512.png +0 -0
- package/share/herdr-world/web/herdr-logo-maskable-192.png +0 -0
- package/share/herdr-world/web/herdr-logo-maskable-512.png +0 -0
- package/share/herdr-world/web/herdr-logo.svg +0 -6
- package/share/herdr-world/web/index.html +0 -25
- package/share/herdr-world/web/legal/Apache-2.0.txt +0 -190
- package/share/herdr-world/web/legal/LICENSE.txt +0 -22
- package/share/herdr-world/web/legal/PixiJS-MIT.txt +0 -21
- package/share/herdr-world/web/legal/THIRD_PARTY_NOTICES.md +0 -61
- package/share/herdr-world/web/legal/UPSTREAM.md +0 -65
- package/share/herdr-world/web/legal/manifest.json +0 -33
- package/share/herdr-world/web/legal/npm-licenses.txt +0 -1381
- package/share/herdr-world/web/legal/world-assets.md +0 -51
- package/share/herdr-world/web/manifest.json +0 -42
- package/share/herdr-world/web/world/LICENSE-PixiJS.txt +0 -21
- package/share/herdr-world/web/world/characters/1-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/10-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/11-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/12-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/2-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/3-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/4-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/5-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/6-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/7-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/8-D-1.png +0 -0
- package/share/herdr-world/web/world/characters/9-D-1.png +0 -0
- package/third_party/dependencies/README.md +0 -22
- package/third_party/dependencies/cargo-licenses.html +0 -7696
- package/third_party/dependencies/npm-licenses.txt +0 -1381
- package/third_party/licenses/Apache-2.0.txt +0 -190
- package/third_party/licenses/PixiJS-MIT.txt +0 -21
- package/vendor/herdr-compat/VENDOR-MANIFEST.toml +0 -186
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,42 +1,181 @@
|
|
|
1
1
|
# Herdr World
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
create a workspace, or start a process.
|
|
102
|
+
## Quick start
|
|
18
103
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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.
|
|
4
|
-
"description": "
|
|
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.2",
|
|
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
|
-
"
|
|
18
|
-
"
|
|
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.2",
|
|
18
|
+
"@ivoryheart/herdr-world-linux-arm64": "0.2.0-rc.2",
|
|
19
|
+
"@ivoryheart/herdr-world-darwin-x64": "0.2.0-rc.2",
|
|
20
|
+
"@ivoryheart/herdr-world-darwin-arm64": "0.2.0-rc.2",
|
|
21
|
+
"@ivoryheart/herdr-world-windows-x64": "0.2.0-rc.2",
|
|
22
|
+
"@ivoryheart/herdr-world-windows-arm64": "0.2.0-rc.2"
|
|
19
23
|
},
|
|
20
|
-
"homepage": "https://ivoryheart.github.io/herdr-world/",
|
|
21
24
|
"files": [
|
|
22
|
-
"bin
|
|
23
|
-
"
|
|
24
|
-
"
|
|
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"
|
package/THIRD_PARTY_NOTICES.md
DELETED
|
@@ -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
|
-
}
|
package/docs/world-assets.md
DELETED
|
@@ -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.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|