@tridha643/hestia 1.0.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/NOTICES.md +10 -0
- package/README.md +194 -0
- package/dist/assets/portless/dist/chunk-SD2PIWJU.js +1030 -0
- package/dist/assets/portless/dist/cli.d.ts +1 -0
- package/dist/assets/portless/dist/cli.js +7231 -0
- package/dist/assets/portless/dist/index.d.ts +222 -0
- package/dist/assets/portless/dist/index.js +48 -0
- package/dist/assets/portless/hestia-hardening.patch +177 -0
- package/dist/assets/portless/package.json +63 -0
- package/dist/assets/portless/provenance.json +5 -0
- package/dist/cli.js +16396 -0
- package/dist/cli.js.map +146 -0
- package/dist/daemon.js +13785 -0
- package/dist/daemon.js.map +129 -0
- package/dist/proc-relay.js +117 -0
- package/dist/proc-relay.js.map +10 -0
- package/package.json +49 -0
- package/skills/hestia/SKILL.md +148 -0
package/NOTICES.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
Hestia bundles internal workspace code and vendored Hunk session-broker packages.
|
|
4
|
+
Their pinned provenance is documented in `packages/VENDORED.md` in the source
|
|
5
|
+
repository.
|
|
6
|
+
|
|
7
|
+
The npm artifact includes Portless 0.15.1 with Hestia's hardening patch. Its
|
|
8
|
+
source version and patch SHA-256 are recorded in
|
|
9
|
+
`dist/assets/portless/provenance.json` and verified during every distribution
|
|
10
|
+
build.
|
package/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Hestia
|
|
2
|
+
|
|
3
|
+
Hestia runs isolated development workloads for humans and coding agents in
|
|
4
|
+
parallel Git worktrees. It assigns collision-safe project identities,
|
|
5
|
+
ephemeral loopback ports, private Wrangler registries, recoverable state, and
|
|
6
|
+
ownership-verified local/public routing.
|
|
7
|
+
|
|
8
|
+
V1 supports macOS and requires Bun 1.3 or newer.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
bun add --global @tridha643/hestia
|
|
12
|
+
hestia version --json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`bunx @tridha643/hestia` is supported for one-off use.
|
|
16
|
+
|
|
17
|
+
## Ideal workflow
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
hestia discover --json
|
|
21
|
+
hestia doctor --json
|
|
22
|
+
hestia init --print
|
|
23
|
+
# Run a suggested init command only when configuration is needed:
|
|
24
|
+
hestia init endpoint dashboard web 3000/tcp http --scope repository --write
|
|
25
|
+
hestia up --json
|
|
26
|
+
hestia endpoint get dashboard --json
|
|
27
|
+
hestia logs web -f --json
|
|
28
|
+
hestia tui
|
|
29
|
+
hestia down
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Discovery is read-only. It reports the repository, branch, absolute worktree,
|
|
33
|
+
runnable workloads, candidates, bindings, configured endpoints, unresolved
|
|
34
|
+
decisions, conflicts, the source of each decision, and exact setup commands.
|
|
35
|
+
Package scripts and Dockerfile `EXPOSE` declarations are suggestions; Hestia
|
|
36
|
+
never executes them implicitly.
|
|
37
|
+
|
|
38
|
+
Initialization is proposal-first. Without `--write`, the complete TOML is
|
|
39
|
+
printed. A write requires an explicit scope, is locked, validated, atomic, and
|
|
40
|
+
never committed automatically.
|
|
41
|
+
|
|
42
|
+
## Configuration layers
|
|
43
|
+
|
|
44
|
+
Hestia resolves four layers, with conflicts reported explicitly:
|
|
45
|
+
|
|
46
|
+
1. Per-worktree runtime intent in `<worktree>/.hestia/`.
|
|
47
|
+
2. Machine-local repository overlay at
|
|
48
|
+
`~/.hestia/repositories/<repoId>.toml`.
|
|
49
|
+
3. Optional committed repository contract at `<repo>/hestia.toml`.
|
|
50
|
+
4. Automatic discovery.
|
|
51
|
+
|
|
52
|
+
`hestia.toml` is optional. Use repository scope when the definition should be
|
|
53
|
+
shared and reviewed. Use machine scope for personal aliases or non-portable
|
|
54
|
+
commands without dirtying Git. Hestia refuses startup unless `.hestia/` is
|
|
55
|
+
ignored; `doctor` prints the exact `.gitignore` remedy.
|
|
56
|
+
|
|
57
|
+
```toml
|
|
58
|
+
version = 1
|
|
59
|
+
|
|
60
|
+
[workloads.web]
|
|
61
|
+
source = "compose"
|
|
62
|
+
compose_service = "web"
|
|
63
|
+
|
|
64
|
+
[workloads.web.endpoints.dashboard]
|
|
65
|
+
binding = "3000/tcp"
|
|
66
|
+
kind = "http"
|
|
67
|
+
local = true
|
|
68
|
+
|
|
69
|
+
[workloads.consumer]
|
|
70
|
+
source = "proc"
|
|
71
|
+
command = ["bun", "run", "consume"]
|
|
72
|
+
port = "none"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Supported workload sources are `compose`, `dockerfile`, `proc`, and
|
|
76
|
+
`wrangler`. Complex Dockerfile networking, volumes, or dependencies require a
|
|
77
|
+
real Compose definition.
|
|
78
|
+
|
|
79
|
+
## Workloads, bindings, and endpoints
|
|
80
|
+
|
|
81
|
+
A workload is one lifecycle/logging unit. A binding is one owned socket, such
|
|
82
|
+
as `api:8080/tcp` or `dns:53/udp`. An endpoint gives a binding an alias and
|
|
83
|
+
protocol meaning:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
dashboard -> web:3000/tcp -> HTTP
|
|
87
|
+
metrics -> api:9090/tcp -> HTTP
|
|
88
|
+
db -> postgres:5432/tcp -> TCP
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Endpoint input resolves as exact alias, exact canonical selector, then unique
|
|
92
|
+
workload. A multi-port workload without a selector fails with
|
|
93
|
+
`service-port-ambiguous`.
|
|
94
|
+
|
|
95
|
+
Every binding receives a canonical variable such as
|
|
96
|
+
`HESTIA_API_9090_TCP_PORT`. A uniquely-bound workload also receives
|
|
97
|
+
`HESTIA_API_PORT`. Aliases receive `HESTIA_DASHBOARD_PORT` and, for HTTP,
|
|
98
|
+
`HESTIA_DASHBOARD_DIRECT_URL`. Normalized env-name collisions fail before
|
|
99
|
+
startup.
|
|
100
|
+
|
|
101
|
+
Auxiliary processes—connectors, quick tunnels, log relays, and daemon
|
|
102
|
+
helpers—are kept outside the user workload namespace.
|
|
103
|
+
|
|
104
|
+
## Isolation and recovery
|
|
105
|
+
|
|
106
|
+
Project names use `<repo20>-<branch30>-<hash10>`. The hash covers the exact
|
|
107
|
+
repository identity, branch, and canonical worktree path, preventing clone,
|
|
108
|
+
slug, and truncation collisions.
|
|
109
|
+
|
|
110
|
+
Compose is resolved through `docker compose config --format json`. Hestia
|
|
111
|
+
supports ordinary TCP/UDP mappings, profiles, dependencies, and
|
|
112
|
+
project-scoped resources. It rejects port ranges, host network/PID/IPC modes,
|
|
113
|
+
external networks/volumes, and explicit machine-global resource names before
|
|
114
|
+
creation. Selected services expand through transitive dependencies.
|
|
115
|
+
|
|
116
|
+
State and pidfiles are schema-versioned, validated, private, and atomically
|
|
117
|
+
published to both the worktree and `~/.hestia/stacks/<project>/`. Legacy
|
|
118
|
+
stacks remain inspectable and removable but cannot be restarted. Run `down`
|
|
119
|
+
before switching/deleting a branch. `down --project` retains label-only Docker
|
|
120
|
+
cleanup even when the mirror is corrupt or the worktree is gone.
|
|
121
|
+
|
|
122
|
+
Host processes run beneath a detached relay. Raw environment values are never
|
|
123
|
+
persisted; only a SHA-256 intent fingerprint is stored. Logs rotate at 25 MiB
|
|
124
|
+
with three archives, bounding each log family near 100 MiB.
|
|
125
|
+
|
|
126
|
+
## Local and public routing
|
|
127
|
+
|
|
128
|
+
Hestiad owns an HTTP/WebSocket gateway on a stable Unix socket below a
|
|
129
|
+
mode-0700 per-user runtime directory. Before every origin connection it
|
|
130
|
+
verifies the recorded process/container identity and current port ownership.
|
|
131
|
+
If an origin dies and another process recycles its port, the gateway returns
|
|
132
|
+
503 without sending that process any bytes.
|
|
133
|
+
|
|
134
|
+
Quick tunnels and Hestia-managed named rules target only this socket. Named
|
|
135
|
+
mode performs no DNS writes. Configure one wildcard CNAME before exposing:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
*.<zone> CNAME <tunnel-uuid>.cfargotunnel.com
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
An unresolved hostname returns `dns-route-required` with the exact wildcard
|
|
142
|
+
target. Named mode supports `--keep-host-header`; quick mode rejects it because
|
|
143
|
+
safe internal routing requires Hestia's authority. Imported static Cloudflare
|
|
144
|
+
rules remain read-only and outside Hestia's ownership guarantee. Public routes
|
|
145
|
+
are fail-closed but unauthenticated—use them only for development traffic.
|
|
146
|
+
|
|
147
|
+
## Fleet and operations
|
|
148
|
+
|
|
149
|
+
`hestia tui` always displays the invoking repository. The selected stack block
|
|
150
|
+
shows repository, branch, absolute worktree, and project in wide and narrow
|
|
151
|
+
layouts; selection updates immediately, and down confirmation repeats the
|
|
152
|
+
exact checkout identity. Workload selection drives logs and endpoint
|
|
153
|
+
selection drives copy/open.
|
|
154
|
+
|
|
155
|
+
Useful commands:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
hestia status --json
|
|
159
|
+
hestia env --json
|
|
160
|
+
hestia endpoint list --json
|
|
161
|
+
hestia endpoint get dashboard --json
|
|
162
|
+
hestia route add|disable|reset dashboard --json
|
|
163
|
+
hestia open dashboard --local
|
|
164
|
+
hestia stop consumer
|
|
165
|
+
hestia down --project <project>
|
|
166
|
+
hestia daemon status
|
|
167
|
+
hestia router status
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Individual Docker workloads are not stoppable; use `hestia down`. Named
|
|
171
|
+
volumes are retained unless `--destroy` is explicit. `doctor` is strictly
|
|
172
|
+
report-only.
|
|
173
|
+
|
|
174
|
+
## Development and release
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
bun install
|
|
178
|
+
bunx tsc --noEmit
|
|
179
|
+
bun test
|
|
180
|
+
bun run build
|
|
181
|
+
npm pack --dry-run
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
The public package contains bundled CLI, daemon, relay, TUI code, the agent
|
|
185
|
+
skill, and a checksummed hardened Portless payload. Internal Hestia and Hunk
|
|
186
|
+
workspaces are implementation details. Releases install and test the exact
|
|
187
|
+
tarball in an isolated Bun home, publish prereleases to `next`, then promote
|
|
188
|
+
that same artifact to `latest` with provenance and protected credentials.
|
|
189
|
+
|
|
190
|
+
Rollback:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
bun add --global @tridha643/hestia@<previous-version>
|
|
194
|
+
```
|