@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 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
+ ```