home-hosted 0.7.0 → 0.7.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.
- package/AGENTS.md +8 -1
- package/README.md +4 -3
- package/dist/cli.js +16 -16
- package/dist/cli.js.map +1 -1
- package/docs/UI_CREATION.md +4 -2
- package/package.json +1 -1
- package/uis/stock/dist/ui.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -21,7 +21,8 @@ seed entry, or a path that names one.
|
|
|
21
21
|
```sh
|
|
22
22
|
pnpm run up|down|restart|status # detached; `down` asks /_hh/shutdown, signals are the fallback
|
|
23
23
|
pnpm run start # up --foreground (systemd, docker, a foreground shell)
|
|
24
|
-
pnpm dev # tsx-watch panel :
|
|
24
|
+
pnpm dev # tsx-watch panel :6000 + the stock UI's Vite :6001 (proxies /api), state in .dev-state/
|
|
25
|
+
pnpm dev --ui noc-console # the same, for another UI; --port/--ui-port override
|
|
25
26
|
pnpm run build # dist/cli.js + the stock UI (uis/stock/dist)
|
|
26
27
|
pnpm run build:uis # every UI under uis/, zipped into uis/dist/ (release assets)
|
|
27
28
|
pnpm run quickcheck # eslint + tsc + vue-tsc for every UI under uis/
|
|
@@ -36,6 +37,12 @@ pnpm run media # regenerate docs/media (mockups, both served
|
|
|
36
37
|
|
|
37
38
|
The published bin is `home-hosted`, with an `hh` alias: both names run the same CLI.
|
|
38
39
|
|
|
40
|
+
**Dev servers and test instances stay in the 6xxx range** — panel 6000, UI 6001, test-spawned panels
|
|
41
|
+
6100+ (`pnpm dev` takes `--ui`/`--port`/`--ui-port`, or `HHOSTED_DEV_PANEL_PORT` /
|
|
42
|
+
`HHOSTED_DEV_UI_PORT`). Never assume 3999 is free: an installed panel or another dev instance may hold
|
|
43
|
+
it, and the CLI's port preflight runs *before* its config guard, so a busy default port turns config
|
|
44
|
+
tests red for the wrong reason.
|
|
45
|
+
|
|
39
46
|
Releases are dispatched from `.github/workflows/release.yml` with a version (and a `dry-run` switch
|
|
40
47
|
that stops before pushing). It verifies the version, lints/types/tests, builds the CLI plus the stock
|
|
41
48
|
UI and every UI zip, lets changelogen write the changelog, bump `package.json`, commit and tag
|
package/README.md
CHANGED
|
@@ -605,9 +605,10 @@ scripts/ builds, typechecks, media capture, release helpers
|
|
|
605
605
|
test/ the vitest suite
|
|
606
606
|
```
|
|
607
607
|
|
|
608
|
-
`pnpm dev` runs the panel with `tsx watch` plus
|
|
609
|
-
|
|
610
|
-
|
|
608
|
+
`pnpm dev` runs the panel with `tsx watch` plus one UI's dev server on the 6xxx range — panel `6000`,
|
|
609
|
+
UI `6001` (`pnpm dev --ui noc-console`), state in `.dev-state/` — so a dev instance never fights an
|
|
610
|
+
installed panel's 3999. `pnpm build` produces `dist/` and `uis/stock/dist/`; `pnpm quickcheck` is lint
|
|
611
|
+
plus types; `pnpm test` is vitest; `pnpm run media` regenerates the GIF above.
|
|
611
612
|
|
|
612
613
|
<details>
|
|
613
614
|
<summary><b>📚 Which doc do I need?</b></summary>
|
package/dist/cli.js
CHANGED
|
@@ -13029,22 +13029,6 @@ async function runControlPlane(options) {
|
|
|
13029
13029
|
const hub = new EventHub();
|
|
13030
13030
|
let app;
|
|
13031
13031
|
const token = newToken();
|
|
13032
|
-
const controlServer = new ControlServer({
|
|
13033
|
-
fetch: (request) => {
|
|
13034
|
-
if (!app) throw new Error("the control app is not ready yet");
|
|
13035
|
-
return app.fetch(request);
|
|
13036
|
-
},
|
|
13037
|
-
trustProxy: () => settings.control.auth.trustProxy,
|
|
13038
|
-
tls: () => settings.control.tls.enabled ? tls.load() : null
|
|
13039
|
-
}, {
|
|
13040
|
-
host: settings.control.host,
|
|
13041
|
-
port: settings.control.port,
|
|
13042
|
-
tls: settings.control.tls.enabled
|
|
13043
|
-
});
|
|
13044
|
-
if (!auth.passwordSet) {
|
|
13045
|
-
auth.ensureDefaultPassword("hh");
|
|
13046
|
-
logger.warn(`no password was set — created the default "hh"; change it in Global Settings → Authentication`);
|
|
13047
|
-
}
|
|
13048
13032
|
const configured = settings.control;
|
|
13049
13033
|
const intendedHost = options.host === void 0 ? configured.host : parseBind(options.host);
|
|
13050
13034
|
if (intendedHost === null) {
|
|
@@ -13059,6 +13043,22 @@ async function runControlPlane(options) {
|
|
|
13059
13043
|
logger.error(`invalid control port: ${String(options.port)}`);
|
|
13060
13044
|
process.exit(1);
|
|
13061
13045
|
}
|
|
13046
|
+
const controlServer = new ControlServer({
|
|
13047
|
+
fetch: (request) => {
|
|
13048
|
+
if (!app) throw new Error("the control app is not ready yet");
|
|
13049
|
+
return app.fetch(request);
|
|
13050
|
+
},
|
|
13051
|
+
trustProxy: () => settings.control.auth.trustProxy,
|
|
13052
|
+
tls: () => settings.control.tls.enabled ? tls.load() : null
|
|
13053
|
+
}, {
|
|
13054
|
+
host: intended.host,
|
|
13055
|
+
port: intended.port,
|
|
13056
|
+
tls: settings.control.tls.enabled
|
|
13057
|
+
});
|
|
13058
|
+
if (!auth.passwordSet) {
|
|
13059
|
+
auth.ensureDefaultPassword("hh");
|
|
13060
|
+
logger.warn(`no password was set — created the default "hh"; change it in Global Settings → Authentication`);
|
|
13061
|
+
}
|
|
13062
13062
|
const exposure = checkExposure({
|
|
13063
13063
|
...configured,
|
|
13064
13064
|
host: intended.host
|