@tridha643/hestia 1.0.1 → 1.1.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/dist/cli.js +1247 -135
- package/dist/cli.js.map +19 -17
- package/dist/daemon.js +889 -108
- package/dist/daemon.js.map +16 -14
- package/package.json +1 -1
- package/skills/hestia/SKILL.md +61 -0
package/dist/cli.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/visit.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/log.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/errors.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/public-api.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js", "../packages/core/src/types.ts", "../packages/core/src/naming.ts", "../packages/core/src/index.ts", "../packages/engine/src/config.ts", "../packages/engine/src/git.ts", "../packages/engine/src/atomic-json-file.ts", "../packages/engine/src/proc/pidfile.ts", "../packages/engine/src/state.ts", "../packages/engine/src/wrangler/discover.ts", "../packages/engine/src/compose/override.ts", "../packages/engine/src/repository-config.ts", "../packages/engine/src/discovery.ts", "../packages/engine/src/endpoint-resolution.ts", "../packages/engine/src/compose/cli.ts", "../packages/engine/src/proc/lock.ts", "../packages/engine/src/proc/ports.ts", "../packages/engine/src/proc/shutdown.ts", "../packages/engine/src/proc/resolver.ts", "../packages/engine/src/proc/supervisor.ts", "../packages/engine/src/router/router-config.ts", "../packages/engine/src/daemon/slots.ts", "../packages/engine/src/daemon/client.ts", "../packages/engine/src/daemon/launchd.ts", "../packages/engine/src/daemon/routes.ts", "../packages/engine/src/daemon/ensure.ts", "../packages/engine/src/router/portless-payload.ts", "../packages/engine/src/router/portless-adapter.ts", "../packages/engine/src/router/local-http-router.ts", "../packages/engine/src/wrangler/adapter.ts", "../packages/engine/src/wrangler/verify.ts", "../packages/engine/src/tunnel/cloudflared.ts", "../packages/engine/src/tunnel/ingress.ts", "../packages/engine/src/tunnel/verify.ts", "../packages/engine/src/tunnel/registry.ts", "../packages/engine/src/logs/log-line-bounds.ts", "../packages/engine/src/logs/compose.ts", "../packages/engine/src/logs/tail.ts", "../packages/engine/src/logs/stream.ts", "../packages/engine/src/doctor.ts", "../packages/engine/src/daemon/fleet-monitor.ts", "../packages/engine/src/init-config.ts", "../packages/engine/src/index.ts", "../packages/tui/src/log-reconnect-deduper.ts", "../packages/tui/src/fleet-source.ts", "../packages/tui/src/fleet-controller.ts", "../packages/tui/src/terminal-text.ts", "../packages/tui/src/fleet-theme.ts", "../node_modules/.bun/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../node_modules/.bun/strip-ansi@7.1.2/node_modules/strip-ansi/index.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup-data.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/utilities.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/index.js", "../node_modules/.bun/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs", "../node_modules/.bun/string-width@7.2.0/node_modules/string-width/index.js", "../packages/tui/src/fleet-text.ts", "../packages/tui/src/components/StackSidebar.tsx", "../packages/tui/src/components/ServicePane.tsx", "../packages/tui/src/components/LogPane.tsx", "../packages/tui/src/components/FleetModal.tsx", "../packages/tui/src/FleetApp.tsx", "../packages/tui/src/job-control.ts", "../packages/tui/src/runtime.tsx", "../packages/tui/src/index.ts", "../packages/cli/src/index.ts"],
|
|
3
|
+
"sources": ["../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/visit.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/log.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/errors.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/public-api.js", "../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js", "../packages/core/src/types.ts", "../packages/core/src/naming.ts", "../packages/core/src/index.ts", "../packages/engine/src/config.ts", "../packages/engine/src/git.ts", "../packages/engine/src/atomic-json-file.ts", "../packages/engine/src/proc/pidfile.ts", "../packages/engine/src/state.ts", "../packages/engine/src/wrangler/discover.ts", "../packages/engine/src/compose/override.ts", "../packages/engine/src/repository-config.ts", "../packages/engine/src/discovery.ts", "../packages/engine/src/endpoint-resolution.ts", "../packages/engine/src/compose/cli.ts", "../packages/engine/src/proc/lock.ts", "../packages/engine/src/proc/ports.ts", "../packages/engine/src/proc/shutdown.ts", "../packages/engine/src/proc/resolver.ts", "../packages/engine/src/proc/supervisor.ts", "../packages/engine/src/router/router-config.ts", "../packages/engine/src/daemon/slots.ts", "../packages/engine/src/daemon/client.ts", "../packages/engine/src/daemon/launchd.ts", "../packages/engine/src/daemon/routes.ts", "../packages/engine/src/daemon/ensure.ts", "../packages/engine/src/router/portless-payload.ts", "../packages/engine/src/router/portless-adapter.ts", "../packages/engine/src/tunnel/shared.ts", "../packages/engine/src/router/local-http-router.ts", "../packages/engine/src/wrangler/adapter.ts", "../packages/engine/src/wrangler/verify.ts", "../packages/engine/src/tunnel/cloudflared.ts", "../packages/engine/src/tunnel/ingress.ts", "../packages/engine/src/tunnel/verify.ts", "../packages/engine/src/tunnel/registry.ts", "../packages/engine/src/logs/log-line-bounds.ts", "../packages/engine/src/logs/compose.ts", "../packages/engine/src/logs/tail.ts", "../packages/engine/src/logs/stream.ts", "../packages/engine/src/daemon/shared-arbiter.ts", "../packages/engine/src/doctor.ts", "../packages/engine/src/daemon/fleet-monitor.ts", "../packages/engine/src/init-config.ts", "../packages/engine/src/index.ts", "../packages/tui/src/log-reconnect-deduper.ts", "../packages/tui/src/fleet-source.ts", "../packages/tui/src/fleet-controller.ts", "../packages/tui/src/terminal-text.ts", "../packages/tui/src/fleet-theme.ts", "../node_modules/.bun/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../node_modules/.bun/strip-ansi@7.1.2/node_modules/strip-ansi/index.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup-data.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/utilities.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup.js", "../node_modules/.bun/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/index.js", "../node_modules/.bun/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs", "../node_modules/.bun/string-width@7.2.0/node_modules/string-width/index.js", "../packages/tui/src/fleet-text.ts", "../packages/tui/src/components/StackSidebar.tsx", "../packages/tui/src/components/ServicePane.tsx", "../packages/tui/src/components/LogPane.tsx", "../packages/tui/src/components/FleetModal.tsx", "../packages/tui/src/FleetApp.tsx", "../packages/tui/src/job-control.ts", "../packages/tui/src/runtime.tsx", "../packages/tui/src/index.ts", "../packages/cli/src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n",
|
|
6
6
|
"'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n",
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
"'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n",
|
|
75
75
|
"'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n",
|
|
76
76
|
"'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n",
|
|
77
|
-
"// Shared types + the engine seam. Fixed once here so the MVP CLI (now) and a\n// future daemon (later) both drive the same IsolationEngine without a rewrite.\n\nexport type ServiceBackend = \"docker\" | \"proc\" | \"wrangler\" | \"tunnel\";\nexport type ServiceState =\n | \"pending\"\n | \"starting\"\n | \"healthy\"\n | \"unhealthy\"\n | \"stopped\"\n | \"exited\";\nexport type StackState =\n | \"queued\"\n | \"starting\"\n | \"up\"\n | \"degraded\"\n | \"stopping\"\n | \"stopped\";\n\n/** Stable identity for one physical git repository, shared by all its worktrees. */\nexport type RepoId = string & { readonly __repoId: unique symbol };\n\n/** Current on-disk state schema. Bump only with an explicit compatibility policy. */\nexport const STATE_SCHEMA_VERSION = 1 as const;\n\n/** Complete repository-scoped stack identity carried through daemon admission. */\nexport interface StackIdentity {\n project: string;\n repoId: RepoId;\n repo: string;\n branch: string;\n worktree: string;\n}\n\nexport interface Endpoint {\n /** Logical name, e.g. the service name. */\n name: string;\n host: string;\n port: number;\n url?: string;\n /** Stable Hestia-managed HTTPS URL for a selected HTTP service. */\n localUrl?: string;\n /** Deterministic local hostname reserved before its optional route activates. */\n reservedName?: string;\n /**\n * Public URL once the service is exposed through a cloudflare tunnel\n * (named: https://<hostname>; quick: the *.trycloudflare.com URL).\n * Enriches the existing endpoint entry — never a second same-name entry.\n */\n publicUrl?: string;\n /** User-facing endpoint alias; defaults to name on legacy records. */\n alias?: string;\n /** Owning workload name. */\n workload?: string;\n /** Canonical target/protocol selector, e.g. 3000/tcp or main/tcp. */\n binding?: string;\n kind?: \"http\" | \"tcp\" | \"udp\";\n /** Portable or machine-local default route intent from configuration. */\n local?: boolean;\n}\n\n/** One concrete published socket owned by a workload. */\nexport interface PortBinding {\n id: string;\n target: string;\n protocol: \"tcp\" | \"udp\";\n publishedPort: number;\n}\n\n/** Sticky per-worktree request to publish one service through the local HTTPS router. */\nexport interface LocalRouteIntent {\n service: string;\n selector?: string;\n alias?: string;\n}\n\nexport interface ServiceRecord {\n name: string;\n backend: ServiceBackend;\n state: ServiceState;\n /** Container-side port that was published (docker backend). */\n containerPort?: number;\n /** Host port where the service is reachable (docker-assigned or proc bind-probed). */\n publishedPort?: number;\n containerId?: string;\n /** proc/wrangler backends: supervised process identity. */\n pid?: number;\n /** Process group id (== pid: detached spawn makes the child its own group leader). */\n pgid?: number;\n /** Verbatim `ps -o lstart=` output captured post-spawn — the PID-reuse guard. */\n startTime?: string;\n /** wrangler backend: probed inspector port injected via --inspector-port. */\n inspectorPort?: number;\n /** proc/wrangler backends: stdout+stderr log file. */\n logPath?: string;\n /** wrangler backend: the wrangler config this worker was started from. */\n configPath?: string;\n /** tunnel backend (quick mode): the stack service this tunnel fronts. */\n originService?: string;\n /** tunnel backend: endpoint alias independently selected from the workload. */\n originEndpoint?: string;\n /** Every published socket; legacy scalar port fields mirror a unique binding. */\n bindings?: PortBinding[];\n}\n\n/** Spec for a supervised host process (`hestia run` / the wrangler adapter). */\nexport interface ProcSpec {\n /** Required, deterministic identity within the stack. */\n name: string;\n /** Command argv. `{port}` tokens are substituted; `{{port}}` escapes a literal. */\n argv: string[];\n /** Working directory relative to the worktree root (default: the root). */\n cwd?: string;\n /** Extra env — highest precedence, agent intent always wins. */\n env?: Record<string, string>;\n /** \"auto\" (default): bind-probe a port, inject PORT + tokens. \"none\": skip. */\n port?: \"auto\" | \"none\";\n /** Shutdown signal for the process group. Default \"term\"; wrangler uses \"int\". */\n signal?: \"term\" | \"int\";\n readyTimeoutMs?: number;\n /** Prefix the spawn with the repo's varlock resolver (composition, not integration). */\n varlock?: boolean;\n backend?: \"proc\" | \"wrangler\" | \"tunnel\";\n /** wrangler backend metadata carried into the ServiceRecord. */\n inspectorPort?: number;\n configPath?: string;\n /** tunnel backend (quick mode): the stack service this tunnel fronts. */\n originService?: string;\n originEndpoint?: string;\n}\n\n/** One public hostname → local origin rule owned by a stack (named mode). */\nexport interface TunnelExposure {\n /** Stack service this rule fronts. */\n service: string;\n /** User-facing endpoint name used for URL/env projection and gateway authority. */\n alias?: string;\n /** Exact target/protocol binding; absent only on legacy single-port records. */\n binding?: string;\n /** Single-label public hostname under the zone, e.g. tri-salem-slack.modem.codes. */\n hostname: string;\n /** Origin port the rule pointed at when last generated — rotation detector. */\n originPort: number;\n /** Forward the public hostname as Host instead of rewriting to the origin. */\n keepHostHeader?: boolean;\n}\n\n/**\n * A stack's adoption of the (machine-global) named tunnel. The tunnel itself\n * is never created or deleted by hestia — it adopts an existing one by name,\n * and every mutating cloudflared call targets `uuid`, never the name.\n */\nexport interface TunnelRef {\n name: string;\n uuid: string;\n zone: string;\n credFile: string;\n exposures: TunnelExposure[];\n}\n\n/**\n * Identity of the CLI process holding a stack's admission slot while its\n * first services start (provisional `state: \"starting\"` records). A dead\n * holder (pid+lstart mismatch) is how the daemon sweep frees slots leaked by\n * a CLI crash mid-`up` — the same identity scheme as pidfiles.\n */\nexport interface StackStarter {\n pid: number;\n startTime: string;\n}\n\nexport interface StackRecord {\n /** Missing only on legacy records, which are inspection/down-only. */\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n /** Deterministic compose project name, e.g. \"modem-salem\". */\n project: string;\n /** Added in daemon protocol v2; absent only on legacy mirrors. */\n repoId?: RepoId;\n repo: string;\n branch: string;\n worktree: string;\n state: StackState;\n /** Present only on provisional (state: \"starting\") records. */\n starter?: StackStarter;\n services: ServiceRecord[];\n /** Hestia helpers never occupy the user workload namespace. */\n auxiliary?: ServiceRecord[];\n /** Resolved env block agents consume (DATABASE_URL, etc.). */\n env: Record<string, string>;\n endpoints: Endpoint[];\n /** Explicit CLI route selections; repository defaults remain in machine config. */\n localRoutes?: LocalRouteIntent[];\n disabledLocalRoutes?: LocalRouteIntent[];\n createdAt: string;\n /**\n * Absent on procs-only stacks (a compose file is not required to `run`).\n * When present, `down` uses them; the ~/.hestia mirror keeps copies so\n * teardown works even if the worktree is deleted.\n */\n composeFile?: string;\n overrideFile?: string;\n /** Sticky named-tunnel adoption + this stack's public ingress rules. */\n tunnel?: TunnelRef;\n}\n\nexport interface ExposeOptions {\n /** Named tunnel to adopt. Sticky: persisted, later calls may omit it. */\n tunnel?: string;\n /** Zone for public hostnames (default: inferred from the base rules). */\n zone?: string;\n /** Keep the public hostname as Host (default rewrites to 127.0.0.1:<port>). */\n keepHostHeader?: boolean;\n /** Proceed despite foreign connectors on the tunnel (replica risk). */\n force?: boolean;\n /** Re-point an existing DNS record hestia has no ledger memory of. */\n overwriteDns?: boolean;\n readyTimeoutMs?: number;\n}\n\n/** Daemon admission knobs shared by `up` and `run`. */\nexport interface AdmitOptions {\n /** ms to wait in the daemon's FIFO queue at the cap. Default 0 = fail fast. */\n wait?: number;\n /** Skip daemon ensure + admission entirely — capless escape hatch. */\n noDaemon?: boolean;\n}\n\nexport interface UpOptions extends AdmitOptions {\n /** Restrict to a subset of the configured services. */\n services?: string[];\n /** Auto-discover wrangler configs and supervise `wrangler dev` per config.\n * `true` = all discovered; string[] filters by path substring or worker name. */\n workers?: boolean | string[];\n /** Allow workers whose config declares `remote: true` bindings. */\n allowRemote?: boolean;\n /** Skip the foreign-process (global dev registry) preflight. */\n force?: boolean;\n /** Disable the automatic varlock env-resolution wrapper for workers. */\n noVarlock?: boolean;\n}\n\nexport interface DownOptions {\n /** Also remove named volumes (data loss). Default keeps them. */\n destroy?: boolean;\n /** Refuse teardown if this named project has since been recreated. */\n expectedStack?: Pick<StackRecord, \"repoId\" | \"worktree\" | \"createdAt\">;\n}\n\n/** hestiad `/health` view (broker health merged with hestia's capabilities). */\nexport interface DaemonHealth {\n ok: boolean;\n pid: number;\n protocolVersion: number;\n maxStacks: number;\n live: number;\n queued: number;\n startedAt: string;\n /** Unprivileged loopback port receiving traffic from the Portless TLS proxy. */\n routerPort: number;\n /** Stable ownership-verifying public ingress socket. */\n gatewaySocket: string;\n /** e.g. an invalid HESTIA_MAX_STACKS that fell back to the default. */\n warnings: string[];\n}\n\n/** hestiad `/hestia/state` view — feeds `daemon status`, doctor, the future TUI. */\nexport interface DaemonStateView {\n maxStacks: number;\n /** Projects with ≥1 live non-tunnel service (derived from mirrors). */\n live: string[];\n /** Granted-but-not-yet-live projects (persisted reservations). */\n reserved: string[];\n /** FIFO of projects waiting for a slot. */\n queued: string[];\n warnings: string[];\n}\n\n/** Fleet-observed lifecycle, including daemon-only reservation and unknown states. */\nexport type FleetStackPhase =\n | \"queued\"\n | \"reserved\"\n | \"starting\"\n | \"up\"\n | \"degraded\"\n | \"stopped\"\n | \"unknown\";\n\n/** Sanitized endpoint data safe to expose to an authenticated local TUI. */\nexport interface FleetEndpointView {\n name: string;\n workload?: string;\n binding?: string;\n kind?: \"http\" | \"tcp\" | \"udp\";\n host: string;\n port: number;\n url?: string;\n localUrl?: string;\n publicUrl?: string;\n}\n\n/** Sanitized service observation; process identities and filesystem paths are omitted. */\nexport interface FleetServiceView {\n name: string;\n backend: ServiceBackend;\n state: ServiceState | \"unknown\";\n publishedPort?: number;\n endpoint?: FleetEndpointView;\n endpoints?: FleetEndpointView[];\n}\n\n/** One Hestia-managed stack in a repository-scoped Fleet snapshot. */\nexport interface FleetStackView extends StackIdentity {\n phase: FleetStackPhase;\n services: FleetServiceView[];\n createdAt?: string;\n warning?: string;\n}\n\n/** Machine-wide cap counts shown alongside one repository's managed stacks. */\nexport interface FleetCapacityView {\n maxStacks: number;\n live: number;\n reserved: number;\n queued: number;\n}\n\n/** Full-state Fleet projection; clients replace prior state rather than applying patches. */\nexport interface FleetSnapshot {\n repoId: RepoId;\n observedAt: string;\n capacity: FleetCapacityView;\n stacks: FleetStackView[];\n warnings: string[];\n}\n\n/** NDJSON full-state frame emitted when the semantic Fleet snapshot changes. */\nexport interface FleetSnapshotEnvelope {\n type: \"snapshot\";\n sequence: number;\n snapshot: FleetSnapshot;\n}\n\n/** NDJSON liveness frame emitted while a Fleet subscription is otherwise idle. */\nexport interface FleetHeartbeatEnvelope {\n type: \"heartbeat\";\n sequence: number;\n at: string;\n}\n\n/** Every frame accepted by the daemon Fleet stream. */\nexport type FleetEnvelope = FleetSnapshotEnvelope | FleetHeartbeatEnvelope;\n\n/** One arrival-ordered log line; application ANSI bytes are preserved verbatim. */\nexport interface LogLine {\n project: string;\n service: string;\n source: ServiceBackend;\n /** One line without its trailing newline; application ANSI is not sanitized. */\n text: string;\n /** True when Hestia synthesized this notice instead of reading application output. */\n meta?: boolean;\n /** True when Hestia bounded an oversized source line before delivery. */\n truncated?: boolean;\n /** Reserved for a future source timestamp; unset while ordering is arrival-only. */\n at?: string;\n}\n\n/** Selection and cancellation controls for the pull-based stack log stream. */\nexport interface LogsOptions {\n /** Service names to stream; defaults to every service in the stack record. */\n services?: string[];\n /** Keep streaming new output after the initial backfill. Default false. */\n follow?: boolean;\n /** Initial lines per source. Default 50; zero disables backfill. */\n tail?: number;\n /** Cooperative cancellation in addition to AsyncIterator.return(). */\n signal?: AbortSignal;\n}\n\nexport interface EngineHooks {\n onServiceState?(project: string, service: string, state: ServiceState): void;\n onEndpoint?(project: string, endpoint: Endpoint): void;\n}\n\n/**\n * The stable contract. The MVP implements up/down/status for the docker\n * compose backend; the rest are reserved for later efforts (proc/wrangler\n * backends, the daemon, the TUI) and throw NotImplemented until then.\n */\nexport interface IsolationEngine {\n up(worktree: string, opts?: UpOptions): Promise<StackRecord>;\n down(worktree: string, opts?: DownOptions): Promise<void>;\n status(worktree: string): Promise<StackRecord | null>;\n /** Supervise a host process as part of this worktree's stack. */\n run(worktree: string, spec: ProcSpec, admit?: AdmitOptions): Promise<StackRecord>;\n /** Stop one supervised proc. Idempotent: unknown/dead names succeed. */\n stopService(worktree: string, name: string): Promise<void>;\n /** Add sticky local HTTPS route intent for services in this worktree. */\n addLocalRoutes(worktree: string, services: string[]): Promise<StackRecord>;\n /** Remove sticky local HTTPS route intent for services in this worktree. */\n removeLocalRoutes(worktree: string, services: string[]): Promise<StackRecord>;\n /** Mask repository or machine route defaults for this worktree. */\n disableLocalRoutes?(worktree: string, services: string[]): Promise<StackRecord>;\n /** Remove the per-worktree override and reveal configured defaults. */\n resetLocalRoutes?(worktree: string, services: string[]): Promise<StackRecord>;\n /** Publish running stack services through a cloudflare tunnel. */\n expose(\n worktree: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord>;\n /** Tear down by project name from the ~/.hestia mirror — works with the worktree gone. */\n downProject?(project: string, opts?: DownOptions): Promise<void>;\n /** Pull an arrival-ordered stream of docker and supervised-process log lines. */\n logs?(worktree: string, opts?: LogsOptions): AsyncIterable<LogLine>;\n /** Pull logs by mirrored project name after its worktree has been deleted. */\n logsProject?(project: string, opts?: LogsOptions): AsyncIterable<LogLine>;\n\n // Reserved — declared so later work slots in without changing callers.\n restartService?(worktree: string, service: string): Promise<void>;\n adopt?(record: StackRecord): Promise<void>;\n probe?(worktree: string): Promise<ServiceRecord[]>;\n discoverOrphans?(): Promise<StackRecord[]>;\n}\n\nexport class NotImplemented extends Error {\n constructor(what: string) {\n super(`${what} is not implemented in the MVP`);\n this.name = \"NotImplemented\";\n }\n}\n\n/**\n * Codes are the stable CLI contract (`--json` emits `{error: {code, message}}`).\n * Compose: config-missing · compose-failed · service-exited · ready-timeout.\n * Proc: lock-timeout · port-allocation-failed · proc-spawn-failed ·\n * proc-ready-timeout · proc-exited · name-conflict · ownership-tool-missing ·\n * varlock-missing. Wrangler: no-workers-found · wrangler-missing ·\n * worktree-busy · remote-binding-blocked · registry-leak.\n * Tunnel: cloudflared-missing · tunnel-not-found · tunnel-auth-missing ·\n * tunnel-busy · tunnel-ready-timeout · dns-route-failed · dns-record-conflict ·\n * hostname-conflict · service-not-found.\n * Logs: no-stack · service-not-found.\n * Daemon: stack-limit · daemon-start-failed · daemon-unreachable.\n * Router: router-setup-required · router-privilege-required ·\n * router-port-busy · router-version-unsupported · router-unreachable ·\n * route-origin-unavailable.\n */\nexport class HestiaError extends Error {\n code: string;\n details?: Record<string, unknown>;\n constructor(code: string, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = \"HestiaError\";\n this.code = code;\n this.details = details;\n }\n}\n",
|
|
77
|
+
"// Shared types + the engine seam. Fixed once here so the MVP CLI (now) and a\n// future daemon (later) both drive the same IsolationEngine without a rewrite.\n\nexport type ServiceBackend = \"docker\" | \"proc\" | \"wrangler\" | \"tunnel\";\nexport type ServiceState =\n | \"pending\"\n | \"starting\"\n | \"healthy\"\n | \"unhealthy\"\n | \"stopped\"\n | \"exited\";\nexport type StackState =\n | \"queued\"\n | \"starting\"\n | \"up\"\n | \"degraded\"\n | \"stopping\"\n | \"stopped\";\n\n/** Stable identity for one physical git repository, shared by all its worktrees. */\nexport type RepoId = string & { readonly __repoId: unique symbol };\n\n/** Current on-disk state schema. Bump only with an explicit compatibility policy. */\nexport const STATE_SCHEMA_VERSION = 1 as const;\n\n/** Complete repository-scoped stack identity carried through daemon admission. */\nexport interface StackIdentity {\n project: string;\n repoId: RepoId;\n repo: string;\n branch: string;\n worktree: string;\n}\n\nexport interface Endpoint {\n /** Logical name, e.g. the service name. */\n name: string;\n host: string;\n port: number;\n url?: string;\n /** Stable Hestia-managed HTTPS URL for a selected HTTP service. */\n localUrl?: string;\n /** Deterministic local hostname reserved before its optional route activates. */\n reservedName?: string;\n /**\n * Public URL once the service is exposed through a cloudflare tunnel\n * (named: https://<hostname>; quick: the *.trycloudflare.com URL).\n * Enriches the existing endpoint entry — never a second same-name entry.\n */\n publicUrl?: string;\n /** User-facing endpoint alias; defaults to name on legacy records. */\n alias?: string;\n /** Owning workload name. */\n workload?: string;\n /** Canonical target/protocol selector, e.g. 3000/tcp or main/tcp. */\n binding?: string;\n kind?: \"http\" | \"tcp\" | \"udp\";\n /** Portable or machine-local default route intent from configuration. */\n local?: boolean;\n}\n\n/** One concrete published socket owned by a workload. */\nexport interface PortBinding {\n id: string;\n target: string;\n protocol: \"tcp\" | \"udp\";\n publishedPort: number;\n}\n\n/** Sticky per-worktree request to publish one service through the local HTTPS router. */\nexport interface LocalRouteIntent {\n service: string;\n selector?: string;\n alias?: string;\n}\n\nexport interface ServiceRecord {\n name: string;\n backend: ServiceBackend;\n state: ServiceState;\n /** Container-side port that was published (docker backend). */\n containerPort?: number;\n /** Host port where the service is reachable (docker-assigned or proc bind-probed). */\n publishedPort?: number;\n containerId?: string;\n /** proc/wrangler backends: supervised process identity. */\n pid?: number;\n /** Process group id (== pid: detached spawn makes the child its own group leader). */\n pgid?: number;\n /** Verbatim `ps -o lstart=` output captured post-spawn — the PID-reuse guard. */\n startTime?: string;\n /** wrangler backend: probed inspector port injected via --inspector-port. */\n inspectorPort?: number;\n /** proc/wrangler backends: stdout+stderr log file. */\n logPath?: string;\n /** wrangler backend: the wrangler config this worker was started from. */\n configPath?: string;\n /** tunnel backend (quick mode): the stack service this tunnel fronts. */\n originService?: string;\n /** tunnel backend: endpoint alias independently selected from the workload. */\n originEndpoint?: string;\n /** Every published socket; legacy scalar port fields mirror a unique binding. */\n bindings?: PortBinding[];\n}\n\n/** Spec for a supervised host process (`hestia run` / the wrangler adapter). */\nexport interface ProcSpec {\n /** Required, deterministic identity within the stack. */\n name: string;\n /** Command argv. `{port}` tokens are substituted; `{{port}}` escapes a literal. */\n argv: string[];\n /** Working directory relative to the worktree root (default: the root). */\n cwd?: string;\n /** Extra env — highest precedence, agent intent always wins. */\n env?: Record<string, string>;\n /** \"auto\" (default): bind-probe a port, inject PORT + tokens. \"none\": skip. */\n port?: \"auto\" | \"none\";\n /** Shutdown signal for the process group. Default \"term\"; wrangler uses \"int\". */\n signal?: \"term\" | \"int\";\n readyTimeoutMs?: number;\n /** Prefix the spawn with the repo's varlock resolver (composition, not integration). */\n varlock?: boolean;\n backend?: \"proc\" | \"wrangler\" | \"tunnel\";\n /** wrangler backend metadata carried into the ServiceRecord. */\n inspectorPort?: number;\n configPath?: string;\n /** tunnel backend (quick mode): the stack service this tunnel fronts. */\n originService?: string;\n originEndpoint?: string;\n}\n\n/** One public hostname → local origin rule owned by a stack (named mode). */\nexport interface TunnelExposure {\n /** Stack service this rule fronts. */\n service: string;\n /** User-facing endpoint name used for URL/env projection and gateway authority. */\n alias?: string;\n /** Exact target/protocol binding; absent only on legacy single-port records. */\n binding?: string;\n /** Single-label public hostname under the zone, e.g. tri-salem-slack.modem.codes. */\n hostname: string;\n /** Origin port the rule pointed at when last generated — rotation detector. */\n originPort: number;\n /** Forward the public hostname as Host instead of rewriting to the origin. */\n keepHostHeader?: boolean;\n}\n\n/**\n * A stack's adoption of the (machine-global) named tunnel. The tunnel itself\n * is never created or deleted by hestia — it adopts an existing one by name,\n * and every mutating cloudflared call targets `uuid`, never the name.\n */\nexport interface TunnelRef {\n name: string;\n uuid: string;\n zone: string;\n credFile: string;\n exposures: TunnelExposure[];\n}\n\n/** The stack currently holding one shared hostname (exclusive claim). */\nexport interface SharedHolder {\n project: string;\n worktree: string;\n /** Endpoint alias inside the holder's stack that serves the hostname. */\n service: string;\n at: string;\n}\n\n/**\n * One queued claim awaiting the holder's consent (or a release). Queue\n * entries are DURABLE — persisted inside the shared record so positions\n * survive daemon restarts and CLI disconnects; an entry leaves the queue\n * only by grant, explicit cancel, or its stack dying.\n */\nexport interface SharedClaimWaiter {\n project: string;\n worktree: string;\n at: string;\n /** The holder explicitly denied this waiter; it stays queued until release. */\n denied?: boolean;\n}\n\n/**\n * A machine-owned stable public hostname (e.g. tri-slack.modem.codes) that is\n * claimed by at most one worktree at a time. Unlike TunnelExposure hostnames\n * (branch-scoped, stack-owned), a shared hostname outlives every stack: its\n * cloudflared ingress rule is static and holder switches are pure hestiad\n * route-table updates — no connector restart, no DNS write.\n */\nexport interface SharedHostnameRecord {\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n /** Machine-unique opaque handle (a DNS label by grammar, but never used as\n * one): the record's file key and the CLI's name for claim/release. */\n name: string;\n /** Full public hostname — any user-controlled FQDN on any zone, not derived\n * from `name`. Multiple handles may share one hostname iff their `path`\n * differ; the connector routes the whole hostname to hestiad regardless. */\n hostname: string;\n /**\n * Optional URL path prefix this handle owns on `hostname` (normalized:\n * leading slash, no trailing slash, e.g. `/webhooks/slack`). Absent = the\n * whole hostname. Routing is longest-prefix at segment boundaries in the\n * hestiad router; cloudflared never sees the path (one host → one rule).\n */\n path?: string;\n /** Adopted named tunnel this hostname rides (uuid — never the name). */\n tunnelUuid: string;\n /** The hostname's zone (parent of its first label); default-derivation hint. */\n zone: string;\n /** Endpoint alias contract: claimants must expose this alias. */\n service: string;\n holder?: SharedHolder;\n /** Durable consent FIFO; absent and empty are equivalent. */\n queue?: SharedClaimWaiter[];\n createdAt: string;\n}\n\n/** Outcome of a claim request against the daemon's consent FIFO. */\nexport interface SharedClaimResult {\n granted: boolean;\n holder?: SharedHolder;\n queued: SharedClaimWaiter[];\n}\n\n/**\n * Identity of the CLI process holding a stack's admission slot while its\n * first services start (provisional `state: \"starting\"` records). A dead\n * holder (pid+lstart mismatch) is how the daemon sweep frees slots leaked by\n * a CLI crash mid-`up` — the same identity scheme as pidfiles.\n */\nexport interface StackStarter {\n pid: number;\n startTime: string;\n}\n\nexport interface StackRecord {\n /** Missing only on legacy records, which are inspection/down-only. */\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n /** Deterministic compose project name, e.g. \"modem-salem\". */\n project: string;\n /** Added in daemon protocol v2; absent only on legacy mirrors. */\n repoId?: RepoId;\n repo: string;\n branch: string;\n worktree: string;\n state: StackState;\n /** Present only on provisional (state: \"starting\") records. */\n starter?: StackStarter;\n services: ServiceRecord[];\n /** Hestia helpers never occupy the user workload namespace. */\n auxiliary?: ServiceRecord[];\n /** Resolved env block agents consume (DATABASE_URL, etc.). */\n env: Record<string, string>;\n endpoints: Endpoint[];\n /** Explicit CLI route selections; repository defaults remain in machine config. */\n localRoutes?: LocalRouteIntent[];\n disabledLocalRoutes?: LocalRouteIntent[];\n createdAt: string;\n /**\n * Absent on procs-only stacks (a compose file is not required to `run`).\n * When present, `down` uses them; the ~/.hestia mirror keeps copies so\n * teardown works even if the worktree is deleted.\n */\n composeFile?: string;\n overrideFile?: string;\n /** Sticky named-tunnel adoption + this stack's public ingress rules. */\n tunnel?: TunnelRef;\n}\n\nexport interface ExposeOptions {\n /** Named tunnel to adopt. Sticky: persisted, later calls may omit it. */\n tunnel?: string;\n /** Zone for public hostnames (default: inferred from the base rules). */\n zone?: string;\n /** Keep the public hostname as Host (default rewrites to 127.0.0.1:<port>). */\n keepHostHeader?: boolean;\n /** Proceed despite foreign connectors on the tunnel (replica risk). */\n force?: boolean;\n /** Re-point an existing DNS record hestia has no ledger memory of. */\n overwriteDns?: boolean;\n /** Declare + claim a machine-owned shared hostname (named tunnels only). */\n shared?: string;\n /**\n * Full public hostname for `--shared` — any FQDN the user controls, on any\n * zone. Default when omitted: `<shared>.<zone>` (derived, v1 behavior).\n */\n hostname?: string;\n /**\n * URL path prefix the shared handle owns (e.g. `/webhooks/slack`). Lets\n * several handles share ONE hostname, routed by longest prefix. Absent = the\n * whole hostname.\n */\n path?: string;\n readyTimeoutMs?: number;\n}\n\n/** Daemon admission knobs shared by `up` and `run`. */\nexport interface AdmitOptions {\n /** ms to wait in the daemon's FIFO queue at the cap. Default 0 = fail fast. */\n wait?: number;\n /** Skip daemon ensure + admission entirely — capless escape hatch. */\n noDaemon?: boolean;\n}\n\nexport interface UpOptions extends AdmitOptions {\n /** Restrict to a subset of the configured services. */\n services?: string[];\n /** Auto-discover wrangler configs and supervise `wrangler dev` per config.\n * `true` = all discovered; string[] filters by path substring or worker name. */\n workers?: boolean | string[];\n /** Allow workers whose config declares `remote: true` bindings. */\n allowRemote?: boolean;\n /** Skip the foreign-process (global dev registry) preflight. */\n force?: boolean;\n /** Disable the automatic varlock env-resolution wrapper for workers. */\n noVarlock?: boolean;\n}\n\nexport interface DownOptions {\n /** Also remove named volumes (data loss). Default keeps them. */\n destroy?: boolean;\n /** Refuse teardown if this named project has since been recreated. */\n expectedStack?: Pick<StackRecord, \"repoId\" | \"worktree\" | \"createdAt\">;\n}\n\n/** hestiad `/health` view (broker health merged with hestia's capabilities). */\nexport interface DaemonHealth {\n ok: boolean;\n pid: number;\n protocolVersion: number;\n maxStacks: number;\n live: number;\n queued: number;\n startedAt: string;\n /** Unprivileged loopback port receiving traffic from the Portless TLS proxy. */\n routerPort: number;\n /** Stable ownership-verifying public ingress socket. */\n gatewaySocket: string;\n /** e.g. an invalid HESTIA_MAX_STACKS that fell back to the default. */\n warnings: string[];\n}\n\n/** hestiad `/hestia/state` view — feeds `daemon status`, doctor, the future TUI. */\nexport interface DaemonStateView {\n maxStacks: number;\n /** Projects with ≥1 live non-tunnel service (derived from mirrors). */\n live: string[];\n /** Granted-but-not-yet-live projects (persisted reservations). */\n reserved: string[];\n /** FIFO of projects waiting for a slot. */\n queued: string[];\n warnings: string[];\n}\n\n/** Fleet-observed lifecycle, including daemon-only reservation and unknown states. */\nexport type FleetStackPhase =\n | \"queued\"\n | \"reserved\"\n | \"starting\"\n | \"up\"\n | \"degraded\"\n | \"stopped\"\n | \"unknown\";\n\n/** Sanitized endpoint data safe to expose to an authenticated local TUI. */\nexport interface FleetEndpointView {\n name: string;\n workload?: string;\n binding?: string;\n kind?: \"http\" | \"tcp\" | \"udp\";\n host: string;\n port: number;\n url?: string;\n localUrl?: string;\n publicUrl?: string;\n}\n\n/** Sanitized service observation; process identities and filesystem paths are omitted. */\nexport interface FleetServiceView {\n name: string;\n backend: ServiceBackend;\n state: ServiceState | \"unknown\";\n publishedPort?: number;\n endpoint?: FleetEndpointView;\n endpoints?: FleetEndpointView[];\n}\n\n/** One Hestia-managed stack in a repository-scoped Fleet snapshot. */\nexport interface FleetStackView extends StackIdentity {\n phase: FleetStackPhase;\n services: FleetServiceView[];\n createdAt?: string;\n warning?: string;\n}\n\n/** Machine-wide cap counts shown alongside one repository's managed stacks. */\nexport interface FleetCapacityView {\n maxStacks: number;\n live: number;\n reserved: number;\n queued: number;\n}\n\n/** One queued claim on a shared hostname, as projected into a Fleet snapshot. */\nexport interface FleetSharedWaiterView {\n project: string;\n worktree: string;\n denied?: boolean;\n /** The waiter belongs to a stack in the snapshot's repository. */\n mine: boolean;\n}\n\n/**\n * One machine-owned shared hostname projected for the Fleet TUI: its current\n * holder and durable FIFO queue, with `mine` flags marking rows that belong to\n * a stack in this repository so the TUI can offer the right claim/arbitrate keys.\n */\nexport interface FleetSharedView {\n name: string;\n hostname: string;\n path?: string;\n url: string;\n holder?: { project: string; worktree: string; mine: boolean };\n queue: FleetSharedWaiterView[];\n}\n\n/** Full-state Fleet projection; clients replace prior state rather than applying patches. */\nexport interface FleetSnapshot {\n repoId: RepoId;\n observedAt: string;\n capacity: FleetCapacityView;\n stacks: FleetStackView[];\n /** Machine-global shared hostnames (all of them), with repo-scoped `mine` flags. */\n shared: FleetSharedView[];\n warnings: string[];\n}\n\n/** NDJSON full-state frame emitted when the semantic Fleet snapshot changes. */\nexport interface FleetSnapshotEnvelope {\n type: \"snapshot\";\n sequence: number;\n snapshot: FleetSnapshot;\n}\n\n/** NDJSON liveness frame emitted while a Fleet subscription is otherwise idle. */\nexport interface FleetHeartbeatEnvelope {\n type: \"heartbeat\";\n sequence: number;\n at: string;\n}\n\n/** Every frame accepted by the daemon Fleet stream. */\nexport type FleetEnvelope = FleetSnapshotEnvelope | FleetHeartbeatEnvelope;\n\n/** One arrival-ordered log line; application ANSI bytes are preserved verbatim. */\nexport interface LogLine {\n project: string;\n service: string;\n source: ServiceBackend;\n /** One line without its trailing newline; application ANSI is not sanitized. */\n text: string;\n /** True when Hestia synthesized this notice instead of reading application output. */\n meta?: boolean;\n /** True when Hestia bounded an oversized source line before delivery. */\n truncated?: boolean;\n /** Reserved for a future source timestamp; unset while ordering is arrival-only. */\n at?: string;\n}\n\n/** Selection and cancellation controls for the pull-based stack log stream. */\nexport interface LogsOptions {\n /** Service names to stream; defaults to every service in the stack record. */\n services?: string[];\n /** Keep streaming new output after the initial backfill. Default false. */\n follow?: boolean;\n /** Initial lines per source. Default 50; zero disables backfill. */\n tail?: number;\n /** Cooperative cancellation in addition to AsyncIterator.return(). */\n signal?: AbortSignal;\n}\n\nexport interface EngineHooks {\n onServiceState?(project: string, service: string, state: ServiceState): void;\n onEndpoint?(project: string, endpoint: Endpoint): void;\n}\n\n/**\n * The stable contract. The MVP implements up/down/status for the docker\n * compose backend; the rest are reserved for later efforts (proc/wrangler\n * backends, the daemon, the TUI) and throw NotImplemented until then.\n */\nexport interface IsolationEngine {\n up(worktree: string, opts?: UpOptions): Promise<StackRecord>;\n down(worktree: string, opts?: DownOptions): Promise<void>;\n status(worktree: string): Promise<StackRecord | null>;\n /** Supervise a host process as part of this worktree's stack. */\n run(worktree: string, spec: ProcSpec, admit?: AdmitOptions): Promise<StackRecord>;\n /** Stop one supervised proc. Idempotent: unknown/dead names succeed. */\n stopService(worktree: string, name: string): Promise<void>;\n /** Add sticky local HTTPS route intent for services in this worktree. */\n addLocalRoutes(worktree: string, services: string[]): Promise<StackRecord>;\n /** Remove sticky local HTTPS route intent for services in this worktree. */\n removeLocalRoutes(worktree: string, services: string[]): Promise<StackRecord>;\n /** Mask repository or machine route defaults for this worktree. */\n disableLocalRoutes?(worktree: string, services: string[]): Promise<StackRecord>;\n /** Remove the per-worktree override and reveal configured defaults. */\n resetLocalRoutes?(worktree: string, services: string[]): Promise<StackRecord>;\n /** Publish running stack services through a cloudflare tunnel. */\n expose(\n worktree: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord>;\n /** Tear down by project name from the ~/.hestia mirror — works with the worktree gone. */\n downProject?(project: string, opts?: DownOptions): Promise<void>;\n /** Pull an arrival-ordered stream of docker and supervised-process log lines. */\n logs?(worktree: string, opts?: LogsOptions): AsyncIterable<LogLine>;\n /** Pull logs by mirrored project name after its worktree has been deleted. */\n logsProject?(project: string, opts?: LogsOptions): AsyncIterable<LogLine>;\n\n // Reserved — declared so later work slots in without changing callers.\n restartService?(worktree: string, service: string): Promise<void>;\n adopt?(record: StackRecord): Promise<void>;\n probe?(worktree: string): Promise<ServiceRecord[]>;\n discoverOrphans?(): Promise<StackRecord[]>;\n}\n\nexport class NotImplemented extends Error {\n constructor(what: string) {\n super(`${what} is not implemented in the MVP`);\n this.name = \"NotImplemented\";\n }\n}\n\n/**\n * Codes are the stable CLI contract (`--json` emits `{error: {code, message}}`).\n * Compose: config-missing · compose-failed · service-exited · ready-timeout.\n * Proc: lock-timeout · port-allocation-failed · proc-spawn-failed ·\n * proc-ready-timeout · proc-exited · name-conflict · ownership-tool-missing ·\n * varlock-missing. Wrangler: no-workers-found · wrangler-missing ·\n * worktree-busy · remote-binding-blocked · registry-leak.\n * Tunnel: cloudflared-missing · tunnel-not-found · tunnel-auth-missing ·\n * tunnel-busy · tunnel-ready-timeout · dns-route-failed · dns-record-conflict ·\n * hostname-conflict · service-not-found.\n * Shared hostnames: shared-not-found · shared-held · shared-conflict ·\n * shared-not-holder · shared-requires-named-tunnel.\n * Logs: no-stack · service-not-found.\n * Daemon: stack-limit · daemon-start-failed · daemon-unreachable.\n * Router: router-setup-required · router-privilege-required ·\n * router-port-busy · router-version-unsupported · router-unreachable ·\n * route-origin-unavailable.\n * Upgrade: upgrade-failed.\n */\nexport class HestiaError extends Error {\n code: string;\n details?: Record<string, unknown>;\n constructor(code: string, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = \"HestiaError\";\n this.code = code;\n this.details = details;\n }\n}\n",
|
|
78
78
|
"import { createHash } from \"node:crypto\";\n\nconst REPO_MAX = 20;\nconst BRANCH_MAX = 30;\n\n/**\n * Lowercase, collapse any run of non-[a-z0-9] to a single \"-\", trim \"-\", and\n * guarantee a leading alphanumeric (compose project + DNS label requirement).\n * `feat/foo_bar` -> `feat-foo-bar`.\n */\nexport function slug(input: string): string {\n let s = input\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (s === \"\" || !/^[a-z0-9]/.test(s)) s = `x${s}`;\n return s;\n}\n\nfunction routeHash(worktreePath: string, branch: string): string {\n return createHash(\"sha256\")\n .update(`${worktreePath}\\0${branch}`)\n .digest(\"hex\")\n .slice(0, 6);\n}\n\nfunction dnsServiceLabel(service: string): string {\n const full = slug(service);\n if (full.length <= 50) return full;\n const hash = createHash(\"sha256\").update(service).digest(\"hex\").slice(0, 6);\n return `${full.slice(0, 43)}-${hash}`;\n}\n\n/** Build collision-safe service, branch, and repository labels for local URLs. */\nexport function localRouteLabels(\n service: string,\n repo: string,\n branch: string,\n worktreePath: string,\n): { service: string; branch: string; repo: string } {\n const repoFull = slug(repo);\n const branchFull = slug(branch);\n const repoLabel = repoFull.slice(0, REPO_MAX);\n let branchLabel = branchFull.slice(0, BRANCH_MAX);\n if (repoLabel !== repoFull || branchLabel !== branchFull) {\n branchLabel = `${branchLabel}-${routeHash(worktreePath, branch)}`;\n }\n return { service: dnsServiceLabel(service), branch: branchLabel, repo: repoLabel };\n}\n\n/**\n * Collision-safe compose project identity. The readable prefix is bounded,\n * while the hash always covers the exact repository identity, branch, and\n * canonical worktree path. Always hashing is intentional: distinct clones,\n * normalized branch slugs, and short names must not collide either.\n */\nexport function projectName(\n repoId: string,\n repo: string,\n branch: string,\n worktreePath: string,\n): string {\n const repoFull = slug(repo);\n const branchFull = slug(branch);\n const repoPart = repoFull.slice(0, REPO_MAX);\n const branchPart = branchFull.slice(0, BRANCH_MAX);\n const hash = createHash(\"sha256\")\n .update(repoId)\n .update(\"\\0\")\n .update(branch)\n .update(\"\\0\")\n .update(worktreePath)\n .digest(\"hex\")\n .slice(0, 10);\n return `${repoPart}-${branchPart}-${hash}`;\n}\n\nexport const LABELS = {\n stack: \"dev.hestia.stack\",\n repo: \"dev.hestia.repo\",\n branch: \"dev.hestia.branch\",\n worktree: \"dev.hestia.worktree\",\n} as const;\n",
|
|
79
79
|
"export * from \"./types.ts\";\nexport * from \"./naming.ts\";\n",
|
|
80
80
|
"import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { HestiaError } from \"@hestia/core\";\n\nexport interface StackConfig {\n /** Absolute path to the repo's compose file. */\n composeFile: string;\n /** All services declared in the compose file. */\n services: string[];\n}\n\nconst COMPOSE_FILES = [\n \"docker-compose.yml\",\n \"docker-compose.yaml\",\n \"compose.yml\",\n \"compose.yaml\",\n];\n\nfunction firstExisting(root: string, names: string[]): string | undefined {\n for (const n of names) {\n const p = join(root, n);\n if (existsSync(p)) return p;\n }\n return undefined;\n}\n\nfunction serviceNames(composeFile: string): string[] {\n const doc = parseYaml(readFileSync(composeFile, \"utf8\")) as {\n services?: Record<string, unknown>;\n } | null;\n return Object.keys(doc?.services ?? {});\n}\n\n/**\n * Single interface: zero-config. Detect the repo's compose file and read its\n * services. hestia never requires a config file of its own — the caller reads\n * the ephemeral ports back from `up` and wires whatever URLs it needs.\n */\nexport function loadConfig(worktreeRoot: string): StackConfig {\n const cfg = tryLoadConfig(worktreeRoot);\n if (cfg === null) {\n throw new HestiaError(\n \"config-missing\",\n `no compose file found in ${worktreeRoot}`,\n );\n }\n return cfg;\n}\n\n/** Procs-only stacks are legal — a missing compose file is not an error here. */\nexport function tryLoadConfig(worktreeRoot: string): StackConfig | null {\n const composeFile = firstExisting(worktreeRoot, COMPOSE_FILES);\n if (composeFile === undefined) return null;\n return { composeFile, services: serviceNames(composeFile) };\n}\n",
|
|
81
81
|
"import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { basename, dirname, isAbsolute, resolve } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { realpathSync } from \"node:fs\";\nimport type { RepoId } from \"@hestia/core\";\n\nconst pexec = promisify(execFile);\n\nexport interface RepoInfo {\n repo: string;\n repoId: RepoId;\n branch: string;\n worktreeRoot: string;\n}\n\n/** Hash a canonical git common directory into the stable repository ID used by Fleet. */\nexport function createRepoId(commonDirectory: string): RepoId {\n let canonical = resolve(commonDirectory);\n try {\n canonical = realpathSync.native(canonical);\n } catch {\n // Non-git fallback paths may not exist yet; the resolved path is still stable.\n }\n return `repo-${createHash(\"sha256\").update(canonical).digest(\"hex\").slice(0, 16)}` as RepoId;\n}\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await pexec(\"git\", args, { cwd, timeout: 10_000 });\n return stdout.trim();\n}\n\n/**\n * Resolve (repo, branch, worktreeRoot) for a worktree. `repo` is derived from\n * the *common* git dir so every worktree of one repo shares a repo name; only\n * the branch differs. Falls back to the directory name if not a git repo.\n */\nexport async function getRepoInfo(cwd: string): Promise<RepoInfo> {\n try {\n const worktreeRoot = await git(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n let branch = await git(cwd, [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]);\n if (branch === \"HEAD\" || branch === \"\") {\n // detached — use the short SHA so the name is still stable & unique\n branch = await git(cwd, [\"rev-parse\", \"--short\", \"HEAD\"]);\n }\n let commonDir = await git(cwd, [\"rev-parse\", \"--git-common-dir\"]);\n // Git reports --git-common-dir relative to the caller's cwd, not relative\n // to the worktree root. Resolving against cwd keeps nested invocations on\n // the same repository identity as root-level invocations.\n if (!isAbsolute(commonDir)) commonDir = resolve(cwd, commonDir);\n // commonDir is \".../<repo>/.git\" -> repo = basename(dirname(commonDir))\n const repo =\n basename(commonDir) === \".git\"\n ? basename(dirname(commonDir))\n : basename(worktreeRoot);\n return { repo, repoId: createRepoId(commonDir), branch, worktreeRoot };\n } catch {\n const worktreeRoot = resolve(cwd);\n return {\n repo: basename(worktreeRoot),\n repoId: createRepoId(worktreeRoot),\n branch: \"nobranch\",\n worktreeRoot,\n };\n }\n}\n",
|
|
82
|
-
"import {\n chmodSync,\n closeSync,\n fsyncSync,\n mkdirSync,\n openSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\n/** Publish a JSON file atomically so readers observe either the old or complete new value. */\nexport function writeAtomicJsonFile(\n path: string,\n value: unknown,\n options: { mode?: number; pretty?: boolean } = {},\n): void {\n mkdirSync(dirname(path), { recursive: true });\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const mode = options.mode ?? 0o600;\n const fd = openSync(temporaryPath, \"wx\", mode);\n try {\n writeFileSync(fd, JSON.stringify(value, null, options.pretty === false ? 0 : 2));\n fsyncSync(fd);\n } catch (error) {\n closeSync(fd);\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n closeSync(fd);\n try {\n chmodSync(temporaryPath, mode);\n renameSync(temporaryPath, path);\n } catch (error) {\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n}\n\n/** Atomically publish private UTF-8 text (TOML, YAML, or other generated config). */\nexport function writeAtomicTextFile(path: string, source: string, mode = 0o600): void {\n mkdirSync(dirname(path), { recursive: true });\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const fd = openSync(temporaryPath, \"wx\", mode);\n try {\n writeFileSync(fd, source);\n fsyncSync(fd);\n } catch (error) {\n closeSync(fd);\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n closeSync(fd);\n try {\n chmodSync(temporaryPath, mode);\n renameSync(temporaryPath, path);\n } catch (error) {\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n}\n",
|
|
82
|
+
"import {\n chmodSync,\n closeSync,\n fsyncSync,\n mkdirSync,\n openSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\n/**\n * fsync the directory holding `path` so the preceding rename is itself durable.\n * A crash after `rename` but before the parent's metadata reaches disk can\n * otherwise resurrect the old name (or lose the file) even though the file\n * bytes were fsync'd — the classic atomic-write gap. Best-effort: some\n * platforms reject O_RDONLY dir fsync (EINVAL/EISDIR/EPERM), which is\n * harmless, so failures here are swallowed rather than failing the write.\n */\nfunction fsyncDir(path: string): void {\n let fd: number;\n try {\n fd = openSync(dirname(path), \"r\");\n } catch {\n return;\n }\n try {\n fsyncSync(fd);\n } catch {\n // Directory fsync unsupported on this fs — the rename already happened.\n } finally {\n closeSync(fd);\n }\n}\n\n/** Publish a JSON file atomically so readers observe either the old or complete new value. */\nexport function writeAtomicJsonFile(\n path: string,\n value: unknown,\n options: { mode?: number; pretty?: boolean } = {},\n): void {\n mkdirSync(dirname(path), { recursive: true });\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const mode = options.mode ?? 0o600;\n const fd = openSync(temporaryPath, \"wx\", mode);\n try {\n writeFileSync(fd, JSON.stringify(value, null, options.pretty === false ? 0 : 2));\n fsyncSync(fd);\n } catch (error) {\n closeSync(fd);\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n closeSync(fd);\n try {\n chmodSync(temporaryPath, mode);\n renameSync(temporaryPath, path);\n } catch (error) {\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n fsyncDir(path);\n}\n\n/** Atomically publish private UTF-8 text (TOML, YAML, or other generated config). */\nexport function writeAtomicTextFile(path: string, source: string, mode = 0o600): void {\n mkdirSync(dirname(path), { recursive: true });\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n const fd = openSync(temporaryPath, \"wx\", mode);\n try {\n writeFileSync(fd, source);\n fsyncSync(fd);\n } catch (error) {\n closeSync(fd);\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n closeSync(fd);\n try {\n chmodSync(temporaryPath, mode);\n renameSync(temporaryPath, path);\n } catch (error) {\n rmSync(temporaryPath, { force: true });\n throw error;\n }\n fsyncDir(path);\n}\n",
|
|
83
83
|
"import {\n existsSync,\n readFileSync,\n readdirSync,\n rmSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { execFileSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { HestiaError, STATE_SCHEMA_VERSION, type ProcSpec } from \"@hestia/core\";\nimport { writeAtomicJsonFile } from \"../atomic-json-file.ts\";\n\n/** On-disk record for one supervised proc: `<worktree>/.hestia/procs/<name>.json`. */\nexport interface Pidfile {\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n name: string;\n pid: number;\n /** == pid: detached spawn makes the child its own process-group leader. */\n pgid: number;\n /** Verbatim `ps -o lstart=` output — compared string-equal as the PID-reuse guard. */\n startTime: string;\n /** SHA-256 of spawn intent; raw argv environment values are never persisted. */\n specFingerprint: string;\n /** Legacy-only fields accepted for inspection/teardown, never written by v1. */\n argv?: string[];\n env?: Record<string, string>;\n port?: number;\n inspectorPort?: number;\n logPath: string;\n signal: \"term\" | \"int\";\n backend: \"proc\" | \"wrangler\" | \"tunnel\";\n configPath?: string;\n /**\n * Descendant snapshot taken at ready time. Wrapper runners (varlock) start\n * their child in a NEW process group, so teardown must know every group in\n * the tree — and if the root dies first, these identities (pid + verbatim\n * start time) let orphan groups be killed without pid-reuse risk.\n */\n children?: Array<{ pid: number; pgid: number; startTime: string }>;\n}\n\nexport function procsDir(worktreeRoot: string): string {\n return join(worktreeRoot, \".hestia\", \"procs\");\n}\n\nexport function pidfilePath(worktreeRoot: string, name: string): string {\n return join(procsDir(worktreeRoot), `${name}.json`);\n}\n\nexport function writePidfile(worktreeRoot: string, pf: Pidfile): void {\n pf.schemaVersion = STATE_SCHEMA_VERSION;\n delete pf.argv;\n delete pf.env;\n writeAtomicJsonFile(pidfilePath(worktreeRoot, pf.name), pf);\n}\n\nfunction parsePidfile(source: string, path: string): Pidfile {\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch (error) {\n throw new HestiaError(\"state-corrupt\", `invalid pidfile ${path}: ${(error as Error).message}`, { path });\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new HestiaError(\"state-corrupt\", `invalid pidfile ${path}: expected an object`, { path });\n }\n const pidfile = value as Record<string, unknown>;\n if (pidfile.schemaVersion !== undefined && pidfile.schemaVersion !== STATE_SCHEMA_VERSION) {\n throw new HestiaError(\"state-corrupt\", `invalid pidfile ${path}: unsupported schemaVersion`, { path });\n }\n if (typeof pidfile.name !== \"string\" || !Number.isInteger(pidfile.pid) ||\n typeof pidfile.startTime !== \"string\" || typeof pidfile.logPath !== \"string\") {\n throw new HestiaError(\"state-corrupt\", `invalid pidfile ${path}: missing process identity`, { path });\n }\n if (pidfile.schemaVersion === STATE_SCHEMA_VERSION && typeof pidfile.specFingerprint !== \"string\") {\n throw new HestiaError(\"state-corrupt\", `invalid pidfile ${path}: missing specFingerprint`, { path });\n }\n return pidfile as unknown as Pidfile;\n}\n\nexport function readPidfile(\n worktreeRoot: string,\n name: string,\n): Pidfile | null {\n const p = pidfilePath(worktreeRoot, name);\n if (!existsSync(p)) return null;\n return parsePidfile(readFileSync(p, \"utf8\"), p);\n}\n\nexport function removePidfile(worktreeRoot: string, name: string): void {\n rmSync(pidfilePath(worktreeRoot, name), { force: true });\n}\n\nexport function listPidfiles(dir: string): Pidfile[] {\n if (!existsSync(dir)) return [];\n return readdirSync(dir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => {\n const path = join(dir, f);\n return parsePidfile(readFileSync(path, \"utf8\"), path);\n });\n}\n\n/** Stable spawn-intent hash used for idempotent replacement without persisting secrets. */\nexport function procSpecFingerprint(spec: ProcSpec): string {\n const env = Object.entries(spec.env ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const canonical = JSON.stringify({\n argv: spec.argv,\n cwd: spec.cwd ?? \".\",\n env,\n port: spec.port ?? \"auto\",\n signal: spec.signal ?? \"term\",\n backend: spec.backend ?? \"proc\",\n resolver: spec.varlock ? \"varlock\" : \"direct\",\n inspectorPort: spec.inspectorPort ?? null,\n configPath: spec.configPath ?? null,\n originService: spec.originService ?? null,\n originEndpoint: spec.originEndpoint ?? null,\n });\n return createHash(\"sha256\").update(canonical).digest(\"hex\");\n}\n\n/**\n * Verbatim process start time, or null if the pid is gone. Captured once\n * post-spawn and re-read on every liveness check; both reads run on the same\n * host so the platform's `lstart` format never has to be parsed.\n */\nfunction readProcessStartTime(\n pid: number,\n env: NodeJS.ProcessEnv,\n): string | null {\n try {\n const out = execFileSync(\"ps\", [\"-o\", \"lstart=\", \"-p\", String(pid)], {\n encoding: \"utf8\",\n env,\n }).trim();\n return out === \"\" ? null : out;\n } catch {\n return null;\n }\n}\n\nexport function startTimeOf(pid: number): string | null {\n // BSD ps localizes lstart. Daemons launched from a TUI and later inspected\n // from a shell can otherwise render the same instant differently, defeating\n // the verbatim identity guard and allowing duplicate supervisors.\n return readProcessStartTime(pid, { ...process.env, LC_ALL: \"C\", LANG: \"C\" });\n}\n\nlet installedProcessLocales: string[] | undefined;\nconst legacyStartTimeMatches = new Map<string, boolean>();\nconst legacyMacosProcessLocales = [\n \"en_US.UTF-8\",\n \"fr_FR.UTF-8\",\n \"de_DE.UTF-8\",\n \"es_ES.UTF-8\",\n \"it_IT.UTF-8\",\n \"pt_BR.UTF-8\",\n \"ja_JP.UTF-8\",\n \"ko_KR.UTF-8\",\n \"zh_CN.UTF-8\",\n];\n\nfunction processLocales(): string[] {\n if (installedProcessLocales !== undefined) return installedProcessLocales;\n try {\n const output = execFileSync(\"locale\", [\"-a\"], { encoding: \"utf8\" });\n installedProcessLocales = [...new Set([\n process.env.LC_ALL,\n process.env.LC_TIME,\n process.env.LANG,\n \"C\",\n ...legacyMacosProcessLocales,\n ...output.split(\"\\n\"),\n ].filter((locale): locale is string => locale !== undefined && locale !== \"\"))];\n } catch {\n installedProcessLocales = [\"C\"];\n }\n return installedProcessLocales;\n}\n\nfunction normalizedLocaleText(value: string): string {\n return value.normalize(\"NFKD\").replace(/\\p{M}/gu, \"\").toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction plausibleProcessLocales(\n canonicalStartTime: string,\n recordedStartTime: string,\n): string[] {\n const date = new Date(canonicalStartTime);\n const recorded = normalizedLocaleText(recordedStartTime);\n const preferred = [process.env.LC_ALL, process.env.LC_TIME, process.env.LANG, \"C\"];\n const legacyMacosLocales = new Set(legacyMacosProcessLocales);\n if (Number.isNaN(date.getTime())) {\n return [...new Set(preferred.filter((locale): locale is string => locale !== undefined))];\n }\n const plausible = processLocales().filter((locale) => {\n // BSD ps abbreviations do not always match Intl (for example French\n // `jul` versus `juil.`). The bounded migration list is cheap to try, and\n // safety still comes from exact reproduction of the full lstart string.\n if (preferred.includes(locale) || legacyMacosLocales.has(locale)) return true;\n try {\n const languageTag = locale.replace(/\\..*$/, \"\").replace(/@.*$/, \"\").replaceAll(\"_\", \"-\");\n const parts = new Intl.DateTimeFormat(languageTag, {\n weekday: \"short\",\n month: \"short\",\n }).formatToParts(date);\n const words = parts\n .filter((part) => part.type === \"weekday\" || part.type === \"month\")\n .map((part) => normalizedLocaleText(part.value))\n .filter(Boolean);\n return words.length === 2 && words.every((word) => recorded.includes(word));\n } catch {\n return false;\n }\n });\n return [...new Set(plausible)];\n}\n\nfunction legacyLocalizedStartTimeMatches(\n pid: number,\n canonicalStartTime: string,\n recordedStartTime: string,\n): boolean {\n const cacheKey = `${pid}\\0${canonicalStartTime}\\0${recordedStartTime}`;\n const cached = legacyStartTimeMatches.get(cacheKey);\n if (cached !== undefined) return cached;\n let matched = false;\n for (const locale of plausibleProcessLocales(canonicalStartTime, recordedStartTime)) {\n const localized = readProcessStartTime(pid, {\n ...process.env,\n LC_ALL: locale,\n LANG: locale,\n });\n if (localized !== null && processStartTimeMatches(localized, recordedStartTime)) {\n matched = true;\n break;\n }\n }\n if (legacyStartTimeMatches.size >= 512) {\n const oldest = legacyStartTimeMatches.keys().next().value;\n if (oldest !== undefined) legacyStartTimeMatches.delete(oldest);\n }\n legacyStartTimeMatches.set(cacheKey, matched);\n return matched;\n}\n\nfunction processStartTimeMatches(current: string, recorded: string): boolean {\n if (current === recorded) return true;\n // Pre-normalization pidfiles can contain the same BSD lstart fields in a\n // locale-dependent order (`Sat 11 Jul` instead of `Sat Jul 11`). Preserve\n // upgrade safety without accepting a different instant: every complete\n // token must still match, and future writes always use the canonical form.\n const currentTokens = current.split(/\\s+/);\n const recordedTokens = recorded.split(/\\s+/);\n if (currentTokens.length !== 5 || recordedTokens.length !== 5) return false;\n return currentTokens.toSorted().join(\"\\0\") === recordedTokens.toSorted().join(\"\\0\");\n}\n\n/** Live means: pid exists AND it is still the same process we spawned. */\nexport function isLive(pf: Pick<Pidfile, \"pid\" | \"startTime\">): boolean {\n try {\n process.kill(pf.pid, 0);\n } catch {\n return false;\n }\n const current = startTimeOf(pf.pid);\n if (current !== null && processStartTimeMatches(current, pf.startTime)) return true;\n return current !== null &&\n legacyLocalizedStartTimeMatches(pf.pid, current, pf.startTime);\n}\n",
|
|
84
84
|
"import {\n chmodSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { HestiaError, STATE_SCHEMA_VERSION, type StackRecord } from \"@hestia/core\";\nimport { procsDir, type Pidfile } from \"./proc/pidfile.ts\";\nimport { writeAtomicJsonFile } from \"./atomic-json-file.ts\";\n\nconst STATE_FILE = \"stack.json\";\n\n/**\n * Machine-global hestia root (mirrors, tunnel singleton, daemon). Evaluated at\n * call time so tests can point a spawned CLI/daemon at a temp dir via\n * HESTIA_HOME — cap accounting is machine-global, so the daemon e2e must not\n * see (or pollute) the real ~/.hestia.\n */\nexport function hestiaHome(): string {\n return process.env.HESTIA_HOME ?? join(homedir(), \".hestia\");\n}\n\nexport function hestiaDir(worktreeRoot: string): string {\n return join(worktreeRoot, \".hestia\");\n}\n\nfunction statePath(worktreeRoot: string): string {\n return join(hestiaDir(worktreeRoot), STATE_FILE);\n}\n\nexport function mirrorDir(project: string): string {\n return join(hestiaHome(), \"stacks\", project);\n}\n\nexport function mirrorProcsDir(project: string): string {\n return join(mirrorDir(project), \"procs\");\n}\n\nexport function ensureDir(dir: string): void {\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n chmodSync(dir, 0o700);\n}\n\nfunction corruptState(path: string, reason: string): HestiaError {\n return new HestiaError(\n \"state-corrupt\",\n `invalid Hestia state at ${path}: ${reason}; recover with hestia down --project <project>`,\n { path, recovery: \"hestia down --project <project>\" },\n );\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) &&\n Object.values(value).every((entry) => typeof entry === \"string\");\n}\n\n/** Parse persisted stack state without trusting a JSON cast. */\nexport function parseStackRecord(source: string, path: string): StackRecord {\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch (error) {\n throw corruptState(path, `malformed JSON (${(error as Error).message})`);\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw corruptState(path, \"expected an object\");\n }\n const record = value as Record<string, unknown>;\n if (record.schemaVersion !== undefined && record.schemaVersion !== STATE_SCHEMA_VERSION) {\n throw corruptState(path, `unsupported schemaVersion ${String(record.schemaVersion)}`);\n }\n for (const key of [\"project\", \"repo\", \"branch\", \"worktree\", \"state\", \"createdAt\"] as const) {\n if (typeof record[key] !== \"string\" || record[key] === \"\") {\n throw corruptState(path, `expected non-empty ${key}`);\n }\n }\n if (!Array.isArray(record.services) || !Array.isArray(record.endpoints)) {\n throw corruptState(path, \"services and endpoints must be arrays\");\n }\n if (!isStringRecord(record.env)) throw corruptState(path, \"env must contain only string values\");\n return record as unknown as StackRecord;\n}\n\n/** Reject mutation of legacy state while preserving inspection and teardown. */\nexport function assertMutableStackRecord(record: StackRecord, path: string): void {\n if (record.schemaVersion !== STATE_SCHEMA_VERSION) {\n throw new HestiaError(\n \"migration-required\",\n `legacy Hestia state at ${path} is inspection/down-only; run hestia down before starting it again`,\n { path, recovery: `hestia down --project ${record.project}` },\n );\n }\n}\n\n/**\n * Persist state in the worktree and mirror FULL COPIES (stack.json + every\n * pidfile) to ~/.hestia, so `down --project` can kill procs and tear down\n * containers after the worktree itself has been deleted.\n */\nexport function writeState(worktreeRoot: string, record: StackRecord): void {\n assertMutableStackRecord(record, statePath(worktreeRoot));\n ensureDir(hestiaDir(worktreeRoot));\n writeAtomicJsonFile(statePath(worktreeRoot), record);\n const mdir = mirrorDir(record.project);\n ensureDir(mdir);\n writeAtomicJsonFile(join(mdir, STATE_FILE), record);\n syncMirrorPidfiles(worktreeRoot, record.project);\n}\n\n/** Refresh the mirror's pidfile copies from the worktree (full replace). */\nexport function syncMirrorPidfiles(\n worktreeRoot: string,\n project: string,\n): void {\n const src = procsDir(worktreeRoot);\n const dst = mirrorProcsDir(project);\n rmSync(dst, { recursive: true, force: true });\n if (!existsSync(src)) return;\n ensureDir(dst);\n for (const f of readdirSync(src)) {\n copyFileSync(join(src, f), join(dst, f));\n }\n}\n\n/** Copy one pidfile into the mirror immediately (pre-ready crash safety). */\nexport function mirrorPidfile(project: string, pf: Pidfile): void {\n const dst = mirrorProcsDir(project);\n ensureDir(dst);\n writeAtomicJsonFile(join(dst, `${pf.name}.json`), pf);\n}\n\nexport function readState(worktreeRoot: string): StackRecord | null {\n const p = statePath(worktreeRoot);\n if (!existsSync(p)) return null;\n const record = parseStackRecord(readFileSync(p, \"utf8\"), p);\n chmodSync(p, 0o600);\n return record;\n}\n\nexport function readMirrorState(project: string): StackRecord | null {\n const p = join(mirrorDir(project), STATE_FILE);\n if (!existsSync(p)) return null;\n const record = parseStackRecord(readFileSync(p, \"utf8\"), p);\n chmodSync(p, 0o600);\n return record;\n}\n\nexport function clearState(worktreeRoot: string, project: string): void {\n const p = statePath(worktreeRoot);\n if (existsSync(p)) rmSync(p);\n const mdir = mirrorDir(project);\n if (existsSync(mdir)) rmSync(mdir, { recursive: true, force: true });\n}\n",
|
|
85
85
|
"import { readFileSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\n\nexport interface WorkerConfig {\n /** Absolute path to the wrangler config. */\n configPath: string;\n /** Top-level worker name; null when absent (redirected/inherited configs). */\n name: string | null;\n /** `remote: true` appears anywhere in the config — conservatively includes\n * env.* blocks, since `wrangler dev -c` runs the top-level env but a remote\n * binding anywhere signals real-Cloudflare traffic worth an explicit opt-in. */\n hasRemote: boolean;\n}\n\nconst SKIP_DIRS = new Set([\"node_modules\", \".git\", \".hestia\"]);\n\n/**\n * Strip JSONC down to JSON: // and /* *\\/ comments plus trailing commas,\n * tracked through string literals so URLs and quoted braces survive.\n */\nexport function stripJsonc(text: string): string {\n let out = \"\";\n let i = 0;\n let inString = false;\n while (i < text.length) {\n const c = text[i]!;\n if (inString) {\n out += c;\n if (c === \"\\\\\") {\n out += text[i + 1] ?? \"\";\n i += 2;\n continue;\n }\n if (c === '\"') inString = false;\n i++;\n continue;\n }\n if (c === '\"') {\n inString = true;\n out += c;\n i++;\n continue;\n }\n if (c === \"/\" && text[i + 1] === \"/\") {\n while (i < text.length && text[i] !== \"\\n\") i++;\n continue;\n }\n if (c === \"/\" && text[i + 1] === \"*\") {\n i += 2;\n while (i < text.length && !(text[i] === \"*\" && text[i + 1] === \"/\")) i++;\n i += 2;\n continue;\n }\n out += c;\n i++;\n }\n\n // Comments must be gone before trailing-comma detection: current modem\n // configs legitimately place explanatory comments between the final comma\n // and closing bracket. A second string-aware pass handles that JSONC shape.\n let json = \"\";\n inString = false;\n for (i = 0; i < out.length; i++) {\n const c = out[i]!;\n if (inString) {\n json += c;\n if (c === \"\\\\\") json += out[++i] ?? \"\";\n else if (c === '\"') inString = false;\n continue;\n }\n if (c === '\"') {\n inString = true;\n json += c;\n continue;\n }\n if (c === \",\") {\n let next = i + 1;\n while (next < out.length && /\\s/.test(out[next]!)) next++;\n if (out[next] === \"}\" || out[next] === \"]\") continue;\n }\n json += c;\n }\n return json;\n}\n\nfunction parseName(configPath: string, text: string): string | null {\n if (configPath.endsWith(\".toml\")) {\n // top-level only: stop at the first [section] header\n const topLevel = text.split(/^\\s*\\[/m)[0]!;\n const m = topLevel.match(/^\\s*name\\s*=\\s*\"([^\"]+)\"/m);\n return m ? m[1]! : null;\n }\n try {\n const doc = JSON.parse(stripJsonc(text)) as { name?: unknown };\n return typeof doc.name === \"string\" ? doc.name : null;\n } catch {\n return null;\n }\n}\n\nfunction detectRemote(configPath: string, text: string): boolean {\n return configPath.endsWith(\".toml\")\n ? /^\\s*remote\\s*=\\s*true/m.test(text)\n : /\"remote\"\\s*:\\s*true/.test(text);\n}\n\n/** All wrangler configs in the worktree, skipping vendored/hidden trees. */\nexport function discoverWorkers(worktreeRoot: string): WorkerConfig[] {\n const glob = new Bun.Glob(\"**/wrangler.{jsonc,json,toml}\");\n const configs: WorkerConfig[] = [];\n for (const rel of glob.scanSync({ cwd: worktreeRoot, onlyFiles: true })) {\n if (rel.split(\"/\").some((part) => SKIP_DIRS.has(part))) continue;\n const configPath = join(worktreeRoot, rel);\n const text = readFileSync(configPath, \"utf8\");\n configs.push({\n configPath,\n name: parseName(configPath, text),\n hasRemote: detectRemote(configPath, text),\n });\n }\n configs.sort((a, b) => a.configPath.localeCompare(b.configPath));\n return configs;\n}\n\n/** `--workers a,b` filter: match by worker name or path substring. */\nexport function filterWorkers(\n configs: WorkerConfig[],\n worktreeRoot: string,\n filter: string[],\n): WorkerConfig[] {\n if (filter.length === 0) return configs;\n return configs.filter((c) => {\n const rel = relative(worktreeRoot, c.configPath);\n return filter.some((f) => c.name === f || rel.includes(f));\n });\n}\n",
|
|
@@ -95,30 +95,32 @@
|
|
|
95
95
|
"import { appendFileSync, closeSync, existsSync, mkdirSync, openSync } from \"node:fs\";\nimport { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { HestiaError, type ProcSpec, type ServiceRecord } from \"@hestia/core\";\nimport { allocatePort, inspectPort, processTree } from \"./ports.ts\";\nimport {\n type Pidfile,\n isLive,\n removePidfile,\n procSpecFingerprint,\n startTimeOf,\n writePidfile,\n} from \"./pidfile.ts\";\nimport { stopProcTree } from \"./shutdown.ts\";\nimport { requireVarlock, wrapWithVarlock } from \"./resolver.ts\";\n\nconst READY_TIMEOUT_MS = 60_000;\nconst NO_PORT_GRACE_MS = 2_000;\nconst POLL_MS = 300;\nconst MAX_ATTEMPTS = 3;\nconst PROC_RESTART_SENTINEL = \"--- hestia: proc restarted (port stolen) ---\\n\";\nconst RELAY_SPEC_ENV = \"HESTIA_PROC_RELAY_SPEC\";\nconst PROC_RELAY_ENTRYPOINT = existsSync(join(import.meta.dir, \"proc-relay.js\"))\n ? join(import.meta.dir, \"proc-relay.js\")\n : join(import.meta.dir, \"proc-relay.ts\");\n\nexport function envKey(name: string): string {\n return name.toUpperCase().replace(/[^A-Z0-9]+/g, \"_\");\n}\n\nconst PORT_TOKEN = \"{port}\";\nconst ESCAPED = \"{{port}}\";\n// round-trip placeholder for escaped braces; NUL cannot appear in argv text\nconst SENTINEL = \"\\u0000\";\n\nexport function substitutePort(argv: string[], port: number): string[] {\n return argv.map((a) =>\n a\n .replaceAll(ESCAPED, SENTINEL)\n .replaceAll(PORT_TOKEN, String(port))\n .replaceAll(SENTINEL, PORT_TOKEN),\n );\n}\n\nexport interface ProcStartResult {\n record: ServiceRecord;\n pidfile: Pidfile;\n /** Set for ready-timeout: the proc is left running for inspection. */\n error?: HestiaError;\n}\n\nfunction validateName(name: string): void {\n if (!/^[a-z0-9][a-z0-9_-]*$/i.test(name)) {\n throw new HestiaError(\n \"name-conflict\",\n `invalid proc name \"${name}\" (use letters, digits, - and _)`,\n );\n }\n}\n\nfunction spawnOnce(\n argv: string[],\n cwd: string,\n env: Record<string, string | undefined>,\n logPath: string,\n attempt: number,\n): Promise<number> {\n closeSync(openProcAttemptLog(logPath, attempt));\n const relaySpec = Buffer.from(JSON.stringify({ argv, cwd, env, logPath })).toString(\"base64\");\n const relayFd = openSync(logPath, \"a\", 0o600);\n return new Promise((resolve, reject) => {\n // The relay is the supervised process-group root. It keeps target env in\n // memory, captures both streams, and bounds the log family by rotation.\n const child = spawn(process.execPath, [PROC_RELAY_ENTRYPOINT], {\n cwd,\n env: { ...process.env, [RELAY_SPEC_ENV]: relaySpec },\n detached: true,\n stdio: [\"ignore\", relayFd, relayFd],\n });\n child.once(\"error\", (err) => {\n closeSync(relayFd);\n reject(\n new HestiaError(\n \"proc-spawn-failed\",\n `failed to spawn ${argv[0]}: ${err.message}`,\n ),\n );\n });\n child.once(\"spawn\", () => {\n closeSync(relayFd);\n child.unref();\n resolve(child.pid!);\n });\n });\n}\n\n/** Open a fresh first-attempt proc log or append a visible port-steal retry sentinel. */\nexport function openProcAttemptLog(logPath: string, attempt: number): number {\n if (attempt > 1) appendFileSync(logPath, PROC_RESTART_SENTINEL);\n return openSync(logPath, attempt > 1 ? \"a\" : \"w\");\n}\n\n/**\n * Spawn + supervise one host process until it proves ready (see inspectPort\n * for the ownership oracle). Retries only on definitive evidence of a stolen\n * port; a silent timeout never retries — the proc is left running and the\n * error tells the caller where the logs are.\n */\nexport async function startProc(\n worktreeRoot: string,\n spec: ProcSpec,\n stackEnv: Record<string, string>,\n mirrorPidfile?: (pf: Pidfile) => void,\n): Promise<ProcStartResult> {\n validateName(spec.name);\n const logsDir = join(worktreeRoot, \".hestia\", \"logs\");\n mkdirSync(logsDir, { recursive: true });\n const logPath = join(logsDir, `${spec.name}.log`);\n const cwd = spec.cwd ? join(worktreeRoot, spec.cwd) : worktreeRoot;\n const wantPort = spec.port !== \"none\";\n const readyTimeoutMs = spec.readyTimeoutMs ?? READY_TIMEOUT_MS;\n const varlockBin = spec.varlock ? requireVarlock(worktreeRoot) : null;\n\n let lastFailure = \"\";\n for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {\n const port = wantPort ? await allocatePort() : undefined;\n let argv = port === undefined ? spec.argv : substitutePort(spec.argv, port);\n if (varlockBin !== null) argv = wrapWithVarlock(varlockBin, argv);\n\n const env: Record<string, string | undefined> = {\n ...process.env,\n ...stackEnv,\n ...(port !== undefined\n ? { PORT: String(port), [`HESTIA_${envKey(spec.name)}_PORT`]: String(port) }\n : {}),\n ...spec.env,\n };\n\n const pid = await spawnOnce(argv, cwd, env, logPath, attempt);\n const startTime = startTimeOf(pid) ?? \"\";\n const pf: Pidfile = {\n schemaVersion: 1,\n name: spec.name,\n pid,\n pgid: pid,\n startTime,\n specFingerprint: procSpecFingerprint(spec),\n port,\n inspectorPort: spec.inspectorPort,\n logPath,\n signal: spec.signal ?? \"term\",\n backend: spec.backend ?? \"proc\",\n configPath: spec.configPath,\n };\n // Written (and mirrored) before the ready wait so a crashed CLI still\n // leaves enough on disk for `down` to clean up.\n writePidfile(worktreeRoot, pf);\n mirrorPidfile?.(pf);\n\n const outcome = await waitUntilReady(pf, port, readyTimeoutMs);\n const record: ServiceRecord = {\n name: spec.name,\n backend: pf.backend,\n state: \"healthy\",\n publishedPort: port,\n pid,\n pgid: pid,\n startTime,\n inspectorPort: spec.inspectorPort,\n logPath,\n configPath: spec.configPath,\n originService: spec.originService,\n originEndpoint: spec.originEndpoint,\n };\n\n switch (outcome.kind) {\n case \"ready\": {\n // Descendant snapshot for teardown: wrapper runners (varlock) start\n // their child in a new process group, so record every subtree\n // identity while it can still be walked exactly.\n pf.children = processTree(pid)\n .filter((r) => r.pid !== pid)\n .map((r) => ({\n pid: r.pid,\n pgid: r.pgid,\n startTime: startTimeOf(r.pid) ?? \"\",\n }))\n .filter((c) => c.startTime !== \"\");\n writePidfile(worktreeRoot, pf);\n mirrorPidfile?.(pf);\n return { record, pidfile: pf };\n }\n case \"exited\":\n removePidfile(worktreeRoot, spec.name);\n throw new HestiaError(\n \"proc-exited\",\n `\"${spec.name}\" exited before becoming ready — logs: ${logPath}`,\n );\n case \"stolen\":\n // Definitive: a process outside our group owns the assigned port —\n // the exact condition that makes next/vite auto-increment. Kill the\n // group (it may be serving on the wrong port) and try a fresh port.\n lastFailure = `port ${port} taken by pid ${outcome.byPid}`;\n await stopProcTree(pf, 2_000);\n removePidfile(worktreeRoot, spec.name);\n continue;\n case \"timeout\": {\n record.state = \"unhealthy\";\n const bound =\n outcome.memberPorts.length > 0\n ? `it is listening on port(s) ${outcome.memberPorts.join(\", \")} instead`\n : `it never opened a listening socket (if it isn't a server, use --no-port)`;\n return {\n record,\n pidfile: pf,\n error: new HestiaError(\n \"proc-ready-timeout\",\n `\"${spec.name}\" did not listen on port ${port} within ` +\n `${Math.round(readyTimeoutMs / 1000)}s — ${bound}; left running, logs: ${logPath}`,\n ),\n };\n }\n }\n }\n throw new HestiaError(\n \"port-allocation-failed\",\n `could not hold a port for \"${spec.name}\" after ${MAX_ATTEMPTS} attempts (${lastFailure})`,\n );\n}\n\ntype ReadyOutcome =\n | { kind: \"ready\" }\n | { kind: \"exited\" }\n | { kind: \"stolen\"; byPid: number }\n | { kind: \"timeout\"; memberPorts: number[] };\n\nasync function waitUntilReady(\n pf: Pidfile,\n port: number | undefined,\n timeoutMs: number,\n): Promise<ReadyOutcome> {\n const deadline = Date.now() + timeoutMs;\n\n if (port === undefined) {\n // No port contract — alive after a short grace is the whole check.\n await new Promise((r) => setTimeout(r, NO_PORT_GRACE_MS));\n return isLive(pf) ? { kind: \"ready\" } : { kind: \"exited\" };\n }\n\n let memberPorts: number[] = [];\n while (Date.now() < deadline) {\n if (!isLive(pf)) return { kind: \"exited\" };\n const view = await inspectPort(pf.pgid, port);\n memberPorts = view.memberPorts;\n if (view.ownerIsMember) return { kind: \"ready\" };\n if (view.owner !== undefined) {\n return { kind: \"stolen\", byPid: view.owner.pid };\n }\n await new Promise((r) => setTimeout(r, POLL_MS));\n }\n return { kind: \"timeout\", memberPorts };\n}\n",
|
|
96
96
|
"import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { slug, type RepoId, type StackRecord } from \"@hestia/core\";\nimport { hestiaHome } from \"../state.ts\";\nimport { writeAtomicTextFile } from \"../atomic-json-file.ts\";\nimport { HestiaError } from \"@hestia/core\";\n\nexport const DEFAULT_LOCAL_HOSTNAME_TEMPLATE = \"{alias}.{branch}.{repo}.localhost\";\n\nexport interface RouterRepositoryConfig {\n name?: string;\n services: string[];\n}\n\nexport interface HestiaRouterConfig {\n hostnameTemplate: string;\n repositories: Partial<Record<RepoId, RouterRepositoryConfig>>;\n}\n\nexport interface HestiaMachineConfig {\n version: 1;\n maxStacks?: number;\n router: HestiaRouterConfig;\n}\n\nexport interface HestiaConfigReadResult {\n config: HestiaMachineConfig;\n warnings: string[];\n valid: boolean;\n path: string;\n}\n\n/** Return the canonical machine-local TOML configuration path. */\nexport function hestiaConfigTomlPath(): string {\n return join(hestiaHome(), \"config.toml\");\n}\n\n/** Explicitly migrate the legacy maxStacks JSON into strict machine TOML. */\nexport function migrateHestiaMachineConfig(): { migrated: boolean; from: string; to: string } {\n const from = join(hestiaHome(), \"config.json\");\n const to = hestiaConfigTomlPath();\n if (existsSync(to)) return { migrated: false, from, to };\n if (!existsSync(from)) throw new HestiaError(\"config-missing\", `legacy config not found at ${from}`);\n let value: unknown;\n try {\n value = JSON.parse(readFileSync(from, \"utf8\"));\n } catch (error) {\n throw new HestiaError(\"config-invalid\", `invalid ${from}: ${(error as Error).message}`);\n }\n const maxStacks = (value as { maxStacks?: unknown })?.maxStacks;\n if (!Number.isInteger(maxStacks) || (maxStacks as number) <= 0) {\n throw new HestiaError(\"config-invalid\", `${from}.maxStacks must be a positive integer`);\n }\n writeAtomicTextFile(\n to,\n `version = 1\\nmax_stacks = ${maxStacks}\\n\\n[router]\\nhostname_template = ${JSON.stringify(DEFAULT_LOCAL_HOSTNAME_TEMPLATE)}\\n`,\n );\n readHestiaMachineConfig(to);\n return { migrated: true, from, to };\n}\n\nfunction emptyMachineConfig(): HestiaMachineConfig {\n return {\n version: 1,\n router: {\n hostnameTemplate: DEFAULT_LOCAL_HOSTNAME_TEMPLATE,\n repositories: {},\n },\n };\n}\n\nfunction assertKnownKeys(table: Record<string, unknown>, allowed: string[], path: string): void {\n const allowedKeys = new Set(allowed);\n const unknown = Object.keys(table).find((key) => !allowedKeys.has(key));\n if (unknown !== undefined) throw new Error(`${path} has unknown key ${JSON.stringify(unknown)}`);\n}\n\nfunction validateHostnameTemplate(value: unknown): string {\n const template = value === undefined ? DEFAULT_LOCAL_HOSTNAME_TEMPLATE : value;\n if (typeof template !== \"string\") throw new Error(\"router.hostname_template must be a string\");\n for (const token of [\"{branch}\", \"{repo}\"]) {\n if (!template.includes(token)) throw new Error(`router.hostname_template must contain ${token}`);\n }\n if (![\"{alias}\", \"{workload}\", \"{service}\"].some((token) => template.includes(token))) {\n throw new Error(\"router.hostname_template must contain {alias}, {workload}, or legacy {service}\");\n }\n if (!template.endsWith(\".localhost\")) {\n throw new Error(\"router.hostname_template must end in .localhost\");\n }\n const unknown = template.match(/\\{[^}]+\\}/g)?.filter(\n (token) => ![\"{alias}\", \"{workload}\", \"{service}\", \"{branch}\", \"{repo}\"].includes(token),\n );\n if (unknown?.length) throw new Error(`router.hostname_template has unknown token ${unknown[0]}`);\n const worstCase = template.replaceAll(/\\{(?:alias|workload|service|branch|repo)\\}/g, \"x\".repeat(63));\n if (worstCase.length > 253) {\n throw new Error(\"router.hostname_template can exceed the 253-character DNS hostname limit\");\n }\n return template;\n}\n\nfunction localHostnameLabel(value: string): string {\n const normalized = slug(value);\n const normalizationIsLossy = value !== normalized;\n if (!normalizationIsLossy && normalized.length <= 63) return normalized;\n const hash = createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 6);\n return `${normalized.slice(0, Math.min(56, normalized.length))}-${hash}`;\n}\n\n/** Stable lookup key for one stack-local service route. */\nexport function localRouteKey(record: Pick<StackRecord, \"project\">, service: string): string {\n return `${record.project}\\0${service}`;\n}\n\nfunction identityDisambiguatedHostname(hostname: string, record: StackRecord): string {\n const labels = hostname.split(\".\");\n const first = labels[0] ?? \"service\";\n const identity = `${record.repoId ?? record.repo}\\0${record.worktree}`;\n const hash = createHash(\"sha256\").update(identity).digest(\"hex\").slice(0, 6);\n labels[0] = `${first.slice(0, Math.min(56, first.length))}-${hash}`;\n return labels.join(\".\");\n}\n\nfunction parseRepositoryConfigs(value: unknown): HestiaRouterConfig[\"repositories\"] {\n if (value === undefined) return {};\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(\"router.repositories must be a table\");\n }\n const repositories: HestiaRouterConfig[\"repositories\"] = {};\n for (const [repoId, raw] of Object.entries(value)) {\n if (!/^repo-[a-f0-9]{16}$/.test(repoId)) {\n throw new Error(`router.repositories key ${JSON.stringify(repoId)} is not a RepoId`);\n }\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new Error(`router.repositories.${repoId} must be a table`);\n }\n const table = raw as Record<string, unknown>;\n assertKnownKeys(table, [\"name\", \"services\"], `router.repositories.${repoId}`);\n if (!Array.isArray(table.services) || !table.services.every(\n (service) => typeof service === \"string\" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(service),\n )) {\n throw new Error(`router.repositories.${repoId}.services must be an array of service names`);\n }\n if (table.name !== undefined && typeof table.name !== \"string\") {\n throw new Error(`router.repositories.${repoId}.name must be a string`);\n }\n repositories[repoId as RepoId] = {\n name: table.name as string | undefined,\n services: [...new Set(table.services as string[])],\n };\n }\n return repositories;\n}\n\n/** Strictly parse machine TOML; invalid router defaults are disabled with warnings. */\nexport function readHestiaMachineConfig(path = hestiaConfigTomlPath()): HestiaConfigReadResult {\n const fallback = emptyMachineConfig();\n if (!existsSync(path)) return { config: fallback, warnings: [], valid: true, path };\n try {\n const raw = Bun.TOML.parse(readFileSync(path, \"utf8\")) as Record<string, unknown>;\n assertKnownKeys(raw, [\"version\", \"max_stacks\", \"router\"], \"config\");\n if (raw.version !== 1) throw new Error(\"version must equal 1\");\n const maxStacks = raw.max_stacks;\n if (maxStacks !== undefined && (!Number.isInteger(maxStacks) || (maxStacks as number) <= 0)) {\n throw new Error(\"max_stacks must be a positive integer\");\n }\n const router = raw.router;\n const config = { ...fallback, maxStacks: maxStacks as number | undefined };\n try {\n if (router !== undefined && (typeof router !== \"object\" || router === null || Array.isArray(router))) {\n throw new Error(\"router must be a table\");\n }\n const routerTable = (router ?? {}) as Record<string, unknown>;\n assertKnownKeys(routerTable, [\"hostname_template\", \"repositories\"], \"router\");\n config.router = {\n hostnameTemplate: validateHostnameTemplate(routerTable.hostname_template),\n repositories: parseRepositoryConfigs(routerTable.repositories),\n };\n } catch (error) {\n return {\n config,\n warnings: [`invalid router section in ${path}: ${(error as Error).message} — configured routes disabled`],\n valid: false,\n path,\n };\n }\n return {\n config,\n warnings: [],\n valid: true,\n path,\n };\n } catch (error) {\n return {\n config: fallback,\n warnings: [`invalid ${path}: ${(error as Error).message} — configured routes disabled`],\n valid: false,\n path,\n };\n }\n}\n\n/** Return repository-default services selected in machine-local config. */\nexport function configuredLocalRouteServices(\n repoId: RepoId | undefined,\n config = readHestiaMachineConfig().config,\n): string[] {\n if (repoId === undefined) return [];\n return config.router.repositories[repoId]?.services ?? [];\n}\n\n/** Union per-worktree CLI intent with repository-default local route services. */\nexport function effectiveLocalRouteServices(\n record: StackRecord,\n config = readHestiaMachineConfig().config,\n): string[] {\n return effectiveLocalRoutes(record, config).map((route) => route.name);\n}\n\nexport interface EffectiveLocalRoute {\n name: string;\n service: string;\n selector?: string;\n}\n\n/** Resolve explicit aliases plus machine defaults into route targets. */\nexport function effectiveLocalRoutes(\n record: StackRecord,\n config = readHestiaMachineConfig().config,\n): EffectiveLocalRoute[] {\n const routes = new Map<string, EffectiveLocalRoute>();\n for (const service of configuredLocalRouteServices(record.repoId, config)) {\n routes.set(service, { name: service, service });\n }\n for (const endpoint of record.endpoints) {\n if (endpoint.local !== true) continue;\n routes.set(endpoint.alias ?? endpoint.name, {\n name: endpoint.alias ?? endpoint.name,\n service: endpoint.workload ?? endpoint.name,\n selector: endpoint.binding,\n });\n }\n for (const intent of record.localRoutes ?? []) {\n const name = intent.alias ?? intent.service;\n routes.set(name, { name, service: intent.service, selector: intent.selector });\n }\n for (const disabled of record.disabledLocalRoutes ?? []) {\n routes.delete(disabled.alias ?? disabled.service);\n }\n return [...routes.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\n/** Render one collision-safe local hostname from a validated template. */\nexport function localRouteHostname(\n record: Pick<StackRecord, \"repoId\" | \"repo\" | \"branch\" | \"worktree\">,\n alias: string,\n config = readHestiaMachineConfig().config,\n workload = alias,\n): string {\n const repositoryName = record.repoId === undefined\n ? record.repo\n : config.router.repositories[record.repoId]?.name ?? record.repo;\n const expanded = config.router.hostnameTemplate\n .replaceAll(\"{alias}\", alias)\n .replaceAll(\"{workload}\", workload)\n .replaceAll(\"{service}\", alias)\n .replaceAll(\"{branch}\", record.branch)\n .replaceAll(\"{repo}\", repositoryName);\n const hostname = expanded.split(\".\").map((label) => localHostnameLabel(label)).join(\".\");\n if (hostname.length > 253) throw new Error(\"expanded local route hostname exceeds 253 characters\");\n return hostname;\n}\n\n/** Resolve hostnames with stable identity hashes so later stacks can never rename them. */\nexport function resolveLocalRouteHostnames(\n records: StackRecord[],\n config = readHestiaMachineConfig().config,\n): Map<string, string> {\n const candidates: Array<{ key: string; hostname: string; record: StackRecord }> = [];\n for (const record of records) {\n const routes = new Map<string, string>(\n effectiveLocalRoutes(record, config).map((route) => [route.name, route.service]),\n );\n for (const endpoint of record.endpoints) {\n if (!routes.has(endpoint.name)) routes.set(endpoint.name, endpoint.workload ?? endpoint.name);\n }\n for (const [service, workload] of routes) {\n candidates.push({\n key: localRouteKey(record, service),\n hostname: localRouteHostname(record, service, config, workload),\n record,\n });\n }\n }\n return new Map(candidates.map((candidate) => [\n candidate.key,\n identityDisambiguatedHostname(candidate.hostname, candidate.record),\n ]));\n}\n",
|
|
97
97
|
"import {\n chmodSync,\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n} from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { LABELS, STATE_SCHEMA_VERSION, type StackIdentity, type StackRecord } from \"@hestia/core\";\nimport { hestiaHome, mirrorProcsDir, parseStackRecord } from \"../state.ts\";\nimport { isLive, listPidfiles } from \"../proc/pidfile.ts\";\nimport { writeAtomicJsonFile } from \"../atomic-json-file.ts\";\nimport { hestiaConfigTomlPath, readHestiaMachineConfig } from \"../router/router-config.ts\";\n\n/**\n * Admission slots for the machine-wide stack cap. Truth is DERIVED, never\n * owned: occupancy is recomputed from the stack mirrors (live services,\n * provisional starting-records) plus small reservation files that bridge the\n * moment between a grant and the granted CLI's first state write. A daemon\n * crash therefore never corrupts accounting — a restart re-derives everything.\n */\n\nexport const DEFAULT_MAX_STACKS = 5;\n/** Backstop only — the provisional record takes over within seconds of a grant. */\nconst RESERVATION_TTL_MS = 60_000;\nconst DOCKER_PROBE_TIMEOUT_MS = 5_000;\n\nexport function daemonDir(): string {\n return join(hestiaHome(), \"daemon\");\n}\n\nfunction reservationsDir(): string {\n return join(daemonDir(), \"reservations\");\n}\n\n/** Persisted grant bridging daemon admission to the first stack mirror write. */\nexport interface StackReservation {\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n project: string;\n identity?: StackIdentity;\n /** Holder identity — a dead holder frees the reservation before the TTL. */\n pid: number;\n startTime: string;\n at: number;\n}\n\n/**\n * Strictly parse the cap. Invalid values (non-integer, zero, negative) fall\n * back to the default WITH a warning — a deny-all daemon caused by a typo'd\n * env var is indistinguishable from a bug.\n */\nexport function resolveMaxStacks(): { maxStacks: number; warnings: string[] } {\n const warnings: string[] = [];\n const fromEnv = process.env.HESTIA_MAX_STACKS;\n if (fromEnv !== undefined) {\n const n = Number(fromEnv);\n if (Number.isInteger(n) && n > 0) return { maxStacks: n, warnings };\n warnings.push(\n `invalid HESTIA_MAX_STACKS=${JSON.stringify(fromEnv)} — using default ${DEFAULT_MAX_STACKS}`,\n );\n return { maxStacks: DEFAULT_MAX_STACKS, warnings };\n }\n const toml = readHestiaMachineConfig();\n warnings.push(...toml.warnings);\n if (toml.config.maxStacks !== undefined) {\n return { maxStacks: toml.config.maxStacks, warnings };\n }\n const configPath = join(hestiaHome(), \"config.json\");\n if (existsSync(configPath)) {\n try {\n const cfg = JSON.parse(readFileSync(configPath, \"utf8\")) as {\n maxStacks?: unknown;\n };\n if (cfg.maxStacks !== undefined) {\n if (Number.isInteger(cfg.maxStacks) && (cfg.maxStacks as number) > 0) {\n warnings.push(`legacy ${configPath} is in use — migrate maxStacks to max_stacks in ${hestiaConfigTomlPath()}`);\n return { maxStacks: cfg.maxStacks as number, warnings };\n }\n warnings.push(\n `invalid maxStacks in ${configPath} — using default ${DEFAULT_MAX_STACKS}`,\n );\n }\n } catch {\n warnings.push(`unreadable ${configPath} — using default ${DEFAULT_MAX_STACKS}`);\n }\n }\n return { maxStacks: DEFAULT_MAX_STACKS, warnings };\n}\n\n/**\n * \"live\" | \"dead\" from a clean docker answer; null when docker itself erred\n * or timed out — the caller must treat null as unknown, never as dead\n * (a restarting Docker Desktop must not free slots).\n */\nexport type DockerProbe = (project: string) => Promise<\"live\" | \"dead\" | null>;\n\nexport const dockerProbe: DockerProbe = (project) =>\n new Promise((resolve) => {\n execFile(\n \"docker\",\n [\"ps\", \"-q\", \"--filter\", `label=${LABELS.stack}=${project}`],\n { timeout: DOCKER_PROBE_TIMEOUT_MS },\n (err, stdout) => {\n if (err) resolve(null);\n else resolve(stdout.trim() === \"\" ? \"dead\" : \"live\");\n },\n );\n });\n\nexport interface Occupancy {\n /** Projects occupying a slot: live services or a starting-record with a live holder. */\n live: string[];\n /** Reservation files not yet backed by any mirror record. */\n reserved: string[];\n warnings: string[];\n}\n\nexport class SlotLedger {\n /** Sticky last-known docker liveness per project — survives probe errors. */\n #lastDockerLive = new Map<string, boolean>();\n\n constructor(private readonly probe: DockerProbe = dockerProbe) {}\n\n /** Record the acquiring CLI's identity so its crash frees the reservation early. */\n reserveFor(\n identity: StackIdentity | string,\n holder: { pid: number; startTime: string },\n ): void {\n const project = typeof identity === \"string\" ? identity : identity.project;\n const reservation: StackReservation = {\n schemaVersion: STATE_SCHEMA_VERSION,\n project,\n identity: typeof identity === \"string\" ? undefined : identity,\n ...holder,\n at: Date.now(),\n };\n mkdirSync(reservationsDir(), { recursive: true, mode: 0o700 });\n chmodSync(reservationsDir(), 0o700);\n writeAtomicJsonFile(join(reservationsDir(), project), reservation, { pretty: false });\n }\n\n release(project: string): void {\n rmSync(join(reservationsDir(), project), { force: true });\n }\n\n /** Read current reservation identities without probing Docker or taking admission locks. */\n reservationSnapshot(): StackReservation[] {\n const dir = reservationsDir();\n if (!existsSync(dir)) return [];\n const out: StackReservation[] = [];\n for (const f of readdirSync(dir)) {\n if (f.endsWith(\".tmp\")) {\n rmSync(join(dir, f), { force: true });\n continue;\n }\n try {\n const reservation = JSON.parse(readFileSync(join(dir, f), \"utf8\")) as StackReservation;\n if (reservation.schemaVersion !== STATE_SCHEMA_VERSION) {\n throw new Error(\"legacy or unsupported reservation schema\");\n }\n if (reservation.project !== f) throw new Error(\"reservation filename mismatch\");\n out.push(reservation);\n } catch {\n rmSync(join(dir, f), { force: true });\n }\n }\n return out.sort((left, right) => left.at - right.at || left.project.localeCompare(right.project));\n }\n\n /**\n * Drop reservations that are no longer bridging anything: the project has a\n * mirror record now (the record carries occupancy from here), the holder\n * died, or the TTL backstop expired.\n */\n expireStale(hasRecord: (project: string) => boolean): void {\n for (const r of this.reservationSnapshot()) {\n const holderDead = r.startTime !== \"\" && !isLive({ pid: r.pid, startTime: r.startTime });\n const expired = Date.now() - r.at > RESERVATION_TTL_MS;\n if (hasRecord(r.project) || holderDead || expired) this.release(r.project);\n }\n }\n\n /**\n * One project's slot occupancy from its mirror. Quick-tunnel procs never\n * count — they outlive their origins and hold no real dev-stack resources.\n */\n async projectOccupies(project: string, record: StackRecord): Promise<boolean> {\n // Live services first — a partially-started stack (crashed mid-`up`, still\n // marked \"starting\") with running workers holds real resources regardless\n // of its starter's fate.\n const procLive = listPidfiles(mirrorProcsDir(project)).some(\n (pf) => pf.backend !== \"tunnel\" && isLive(pf),\n );\n if (procLive) return true;\n // Provisional grant: occupies while the CLI holding it is alive. A dead\n // starter still falls through to the docker probe — containers may have\n // come up before the crash.\n if (\n record.state === \"starting\" &&\n record.starter !== undefined &&\n isLive(record.starter)\n ) {\n return true;\n }\n if (!record.services.some((s) => s.backend === \"docker\")) return false;\n const probed = await this.probe(project);\n if (probed === null) {\n // Docker erred/timed out — sticky: keep the last clean answer, default\n // to LIVE for never-probed projects (holding a slot too long is safe;\n // freeing one that's actually running is a cap breach).\n return this.#lastDockerLive.get(project) ?? true;\n }\n const live = probed === \"live\";\n this.#lastDockerLive.set(project, live);\n return live;\n }\n\n async occupancy(): Promise<Occupancy> {\n const warnings: string[] = [];\n const live: string[] = [];\n const stacksDir = join(hestiaHome(), \"stacks\");\n const recorded = new Set<string>();\n if (existsSync(stacksDir)) {\n for (const project of readdirSync(stacksDir)) {\n const p = join(stacksDir, project, \"stack.json\");\n if (!existsSync(p)) continue;\n let record: StackRecord;\n try {\n record = parseStackRecord(readFileSync(p, \"utf8\"), p);\n } catch {\n warnings.push(`unreadable mirror for ${project}`);\n continue;\n }\n recorded.add(project);\n if (await this.projectOccupies(project, record)) live.push(project);\n }\n }\n this.expireStale((project) => recorded.has(project));\n const reserved = this.reservationSnapshot()\n .map((r) => r.project)\n .filter((p) => !live.includes(p));\n return { live, reserved, warnings };\n }\n}\n",
|
|
98
|
-
"import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n HestiaError,\n type DaemonHealth,\n type DaemonStateView,\n type FleetEnvelope,\n type LogLine,\n type RepoId,\n type StackIdentity,\n STATE_SCHEMA_VERSION,\n} from \"@hestia/core\";\nimport { isLive, readPidfile, startTimeOf } from \"../proc/pidfile.ts\";\nimport type { AcquireResult } from \"./routes.ts\";\nimport { daemonDir } from \"./slots.ts\";\n\n/** Discovery metadata the daemon writes next to its pidfile. */\nexport interface DaemonJson {\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n pid: number;\n port: number;\n protocolVersion: number;\n startedAt: string;\n /** Per-daemon bearer token; absent only on legacy protocol-v1 discovery files. */\n token?: string;\n /** Unprivileged Hestia local-router port behind Portless. */\n routerPort?: number;\n gatewaySocket?: string;\n}\n\nconst DAEMON_PIDFILE_NAME = \"hestiad\";\n\nexport function daemonJsonPath(): string {\n return join(daemonDir(), \"daemon.json\");\n}\n\nexport function readDaemonJson(): DaemonJson | null {\n const p = daemonJsonPath();\n if (!existsSync(p)) return null;\n try {\n const value = JSON.parse(readFileSync(p, \"utf8\")) as Partial<DaemonJson>;\n if (\n value.schemaVersion !== STATE_SCHEMA_VERSION ||\n !Number.isInteger(value.pid) ||\n !Number.isInteger(value.port) ||\n !Number.isInteger(value.protocolVersion) ||\n typeof value.startedAt !== \"string\"\n ) return null;\n return value as DaemonJson;\n } catch {\n return null;\n }\n}\n\n/** Authorization headers for the daemon currently published on this port. */\nexport function daemonAuthHeaders(port: number): Record<string, string> {\n const discovery = readDaemonJson();\n const pidfile = readPidfile(daemonDir(), DAEMON_PIDFILE_NAME);\n return discovery?.port === port &&\n discovery.token !== undefined &&\n pidfile?.pid === discovery.pid &&\n isLive(pidfile)\n ? { authorization: `Bearer ${discovery.token}` }\n : {};\n}\n\nasync function get<T>(port: number, path: string, timeoutMs: number): Promise<T | null> {\n try {\n const res = await fetch(`http://127.0.0.1:${port}${path}`, {\n signal: AbortSignal.timeout(timeoutMs),\n headers: daemonAuthHeaders(port),\n });\n if (!res.ok) return null;\n return (await res.json()) as T;\n } catch {\n return null;\n }\n}\n\nexport async function fetchHealth(port: number, timeoutMs = 1_000): Promise<DaemonHealth | null> {\n const discovery = readDaemonJson();\n if (discovery?.port !== port) return null;\n const health = await get<DaemonHealth>(port, \"/hestia/health\", timeoutMs);\n return health?.pid === discovery.pid ? health : null;\n}\n\nexport function fetchState(port: number, timeoutMs = 2_000): Promise<DaemonStateView | null> {\n return get<DaemonStateView>(port, \"/hestia/state\", timeoutMs);\n}\n\n/** Ask hestiad to reload route intent and reconcile its Portless aliases now. */\nexport async function reconcileDaemonLocalRoutes(port: number): Promise<void> {\n try {\n const response = await fetch(`http://127.0.0.1:${port}/hestia/router/reconcile`, {\n method: \"POST\",\n headers: daemonAuthHeaders(port),\n signal: AbortSignal.timeout(3_000),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n } catch (error) {\n throw new HestiaError(\n \"router-unreachable\",\n `Router reconcile: could not reach hestiad on 127.0.0.1:${port}: ${(error as Error).message}`,\n );\n }\n}\n\nconst MAX_NDJSON_FRAME_BYTES = 1024 * 1024;\n\nasync function* streamDaemonNdjson<T>(\n port: number,\n path: string,\n signal?: AbortSignal,\n): AsyncGenerator<T> {\n const response = await fetch(`http://127.0.0.1:${port}${path}`, {\n headers: daemonAuthHeaders(port),\n signal,\n });\n if (!response.ok || response.body === null) {\n throw new HestiaError(\n \"daemon-unreachable\",\n `hestiad stream ${path} failed with HTTP ${response.status}`,\n );\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n for (;;) {\n const result = await reader.read();\n if (result.done) break;\n pending += decoder.decode(result.value, { stream: true });\n if (Buffer.byteLength(pending) > MAX_NDJSON_FRAME_BYTES && !pending.includes(\"\\n\")) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n const lines = pending.split(\"\\n\");\n pending = lines.pop() ?? \"\";\n for (const line of lines) {\n if (line === \"\") continue;\n if (Buffer.byteLength(line) > MAX_NDJSON_FRAME_BYTES) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n yield JSON.parse(line) as T;\n }\n }\n pending += decoder.decode();\n if (pending.trim() !== \"\") {\n if (Buffer.byteLength(pending) > MAX_NDJSON_FRAME_BYTES) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n yield JSON.parse(pending) as T;\n }\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n\n/** Subscribe to authenticated full-state Fleet snapshots and daemon heartbeats. */\nexport function streamDaemonFleet(\n port: number,\n repoId: RepoId,\n signal?: AbortSignal,\n): AsyncIterable<FleetEnvelope> {\n return streamDaemonNdjson<FleetEnvelope>(\n port,\n `/hestia/fleet?repoId=${encodeURIComponent(repoId)}`,\n signal,\n );\n}\n\n/** Follow one selected service through the daemon's bounded Phase 5 log adapter. */\nexport function streamDaemonServiceLogs(\n port: number,\n project: string,\n service: string,\n tail = 50,\n signal?: AbortSignal,\n): AsyncIterable<LogLine> {\n const query = new URLSearchParams({ project, service, tail: String(tail) });\n return streamDaemonNdjson<LogLine>(port, `/hestia/logs?${query}`, signal);\n}\n\n/**\n * Request a slot. `waitMs > 0` long-polls the daemon-side FIFO queue; the\n * fetch timeout is padded so the daemon's own waiter timeout answers first.\n */\nexport async function acquireSlot(\n port: number,\n identity: StackIdentity,\n waitMs: number,\n): Promise<AcquireResult> {\n try {\n const res = await fetch(`http://127.0.0.1:${port}/hestia/acquire`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify({\n identity,\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n waitMs,\n }),\n signal: AbortSignal.timeout(waitMs + 5_000),\n });\n if (!res.ok) {\n throw new HestiaError(\"daemon-unreachable\", `daemon rejected acquire: HTTP ${res.status}`);\n }\n return (await res.json()) as AcquireResult;\n } catch (err) {\n if (err instanceof HestiaError) throw err;\n throw new HestiaError(\n \"daemon-unreachable\",\n `could not reach hestiad on 127.0.0.1:${port}: ${(err as Error).message}`,\n );\n }\n}\n\n/** Best-effort: a gone daemon self-heals on its next sweep — never fail a down. */\nexport async function releaseSlot(port: number, project: string): Promise<void> {\n try {\n await fetch(`http://127.0.0.1:${port}/hestia/release`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify({ project }),\n signal: AbortSignal.timeout(2_000),\n });\n } catch {\n // sweep reconciles\n }\n}\n",
|
|
98
|
+
"import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n HestiaError,\n type DaemonHealth,\n type DaemonStateView,\n type FleetEnvelope,\n type LogLine,\n type RepoId,\n type SharedClaimResult,\n type StackIdentity,\n STATE_SCHEMA_VERSION,\n} from \"@hestia/core\";\nimport { isLive, readPidfile, startTimeOf } from \"../proc/pidfile.ts\";\nimport type { AcquireResult } from \"./routes.ts\";\nimport { daemonDir } from \"./slots.ts\";\n\n/** Discovery metadata the daemon writes next to its pidfile. */\nexport interface DaemonJson {\n schemaVersion?: typeof STATE_SCHEMA_VERSION;\n pid: number;\n port: number;\n protocolVersion: number;\n startedAt: string;\n /** Per-daemon bearer token; absent only on legacy protocol-v1 discovery files. */\n token?: string;\n /** Unprivileged Hestia local-router port behind Portless. */\n routerPort?: number;\n gatewaySocket?: string;\n}\n\nconst DAEMON_PIDFILE_NAME = \"hestiad\";\n\nexport function daemonJsonPath(): string {\n return join(daemonDir(), \"daemon.json\");\n}\n\nexport function readDaemonJson(): DaemonJson | null {\n const p = daemonJsonPath();\n if (!existsSync(p)) return null;\n try {\n const value = JSON.parse(readFileSync(p, \"utf8\")) as Partial<DaemonJson>;\n if (\n value.schemaVersion !== STATE_SCHEMA_VERSION ||\n !Number.isInteger(value.pid) ||\n !Number.isInteger(value.port) ||\n !Number.isInteger(value.protocolVersion) ||\n typeof value.startedAt !== \"string\"\n ) return null;\n return value as DaemonJson;\n } catch {\n return null;\n }\n}\n\n/** Authorization headers for the daemon currently published on this port. */\nexport function daemonAuthHeaders(port: number): Record<string, string> {\n const discovery = readDaemonJson();\n const pidfile = readPidfile(daemonDir(), DAEMON_PIDFILE_NAME);\n return discovery?.port === port &&\n discovery.token !== undefined &&\n pidfile?.pid === discovery.pid &&\n isLive(pidfile)\n ? { authorization: `Bearer ${discovery.token}` }\n : {};\n}\n\nasync function get<T>(port: number, path: string, timeoutMs: number): Promise<T | null> {\n try {\n const res = await fetch(`http://127.0.0.1:${port}${path}`, {\n signal: AbortSignal.timeout(timeoutMs),\n headers: daemonAuthHeaders(port),\n });\n if (!res.ok) return null;\n return (await res.json()) as T;\n } catch {\n return null;\n }\n}\n\nexport async function fetchHealth(port: number, timeoutMs = 1_000): Promise<DaemonHealth | null> {\n const discovery = readDaemonJson();\n if (discovery?.port !== port) return null;\n const health = await get<DaemonHealth>(port, \"/hestia/health\", timeoutMs);\n return health?.pid === discovery.pid ? health : null;\n}\n\nexport function fetchState(port: number, timeoutMs = 2_000): Promise<DaemonStateView | null> {\n return get<DaemonStateView>(port, \"/hestia/state\", timeoutMs);\n}\n\n/** Ask hestiad to reload route intent and reconcile its Portless aliases now. */\nexport async function reconcileDaemonLocalRoutes(port: number): Promise<void> {\n try {\n const response = await fetch(`http://127.0.0.1:${port}/hestia/router/reconcile`, {\n method: \"POST\",\n headers: daemonAuthHeaders(port),\n signal: AbortSignal.timeout(3_000),\n });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n } catch (error) {\n throw new HestiaError(\n \"router-unreachable\",\n `Router reconcile: could not reach hestiad on 127.0.0.1:${port}: ${(error as Error).message}`,\n );\n }\n}\n\nconst MAX_NDJSON_FRAME_BYTES = 1024 * 1024;\n\nasync function* streamDaemonNdjson<T>(\n port: number,\n path: string,\n signal?: AbortSignal,\n): AsyncGenerator<T> {\n const response = await fetch(`http://127.0.0.1:${port}${path}`, {\n headers: daemonAuthHeaders(port),\n signal,\n });\n if (!response.ok || response.body === null) {\n throw new HestiaError(\n \"daemon-unreachable\",\n `hestiad stream ${path} failed with HTTP ${response.status}`,\n );\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n try {\n for (;;) {\n const result = await reader.read();\n if (result.done) break;\n pending += decoder.decode(result.value, { stream: true });\n if (Buffer.byteLength(pending) > MAX_NDJSON_FRAME_BYTES && !pending.includes(\"\\n\")) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n const lines = pending.split(\"\\n\");\n pending = lines.pop() ?? \"\";\n for (const line of lines) {\n if (line === \"\") continue;\n if (Buffer.byteLength(line) > MAX_NDJSON_FRAME_BYTES) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n yield JSON.parse(line) as T;\n }\n }\n pending += decoder.decode();\n if (pending.trim() !== \"\") {\n if (Buffer.byteLength(pending) > MAX_NDJSON_FRAME_BYTES) {\n throw new HestiaError(\"daemon-unreachable\", \"hestiad NDJSON frame exceeds 1 MiB\");\n }\n yield JSON.parse(pending) as T;\n }\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n\n/** Subscribe to authenticated full-state Fleet snapshots and daemon heartbeats. */\nexport function streamDaemonFleet(\n port: number,\n repoId: RepoId,\n signal?: AbortSignal,\n): AsyncIterable<FleetEnvelope> {\n return streamDaemonNdjson<FleetEnvelope>(\n port,\n `/hestia/fleet?repoId=${encodeURIComponent(repoId)}`,\n signal,\n );\n}\n\n/** Follow one selected service through the daemon's bounded Phase 5 log adapter. */\nexport function streamDaemonServiceLogs(\n port: number,\n project: string,\n service: string,\n tail = 50,\n signal?: AbortSignal,\n): AsyncIterable<LogLine> {\n const query = new URLSearchParams({ project, service, tail: String(tail) });\n return streamDaemonNdjson<LogLine>(port, `/hestia/logs?${query}`, signal);\n}\n\n/**\n * Request a slot. `waitMs > 0` long-polls the daemon-side FIFO queue; the\n * fetch timeout is padded so the daemon's own waiter timeout answers first.\n */\nexport async function acquireSlot(\n port: number,\n identity: StackIdentity,\n waitMs: number,\n): Promise<AcquireResult> {\n try {\n const res = await fetch(`http://127.0.0.1:${port}/hestia/acquire`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify({\n identity,\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n waitMs,\n }),\n signal: AbortSignal.timeout(waitMs + 5_000),\n });\n if (!res.ok) {\n throw new HestiaError(\"daemon-unreachable\", `daemon rejected acquire: HTTP ${res.status}`);\n }\n return (await res.json()) as AcquireResult;\n } catch (err) {\n if (err instanceof HestiaError) throw err;\n throw new HestiaError(\n \"daemon-unreachable\",\n `could not reach hestiad on 127.0.0.1:${port}: ${(err as Error).message}`,\n );\n }\n}\n\n/** Best-effort: a gone daemon self-heals on its next sweep — never fail a down. */\nexport async function releaseSlot(port: number, project: string): Promise<void> {\n try {\n await fetch(`http://127.0.0.1:${port}/hestia/release`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify({ project }),\n signal: AbortSignal.timeout(2_000),\n });\n } catch {\n // sweep reconciles\n }\n}\n\n/**\n * Arbitrated shared-hostname verbs. The daemon is the single writer for\n * holder/queue transitions; the durable record files carry the state, so a\n * daemon restart preserves queue positions.\n */\nexport async function sharedVerb(\n port: number,\n verb: \"claim\" | \"allow\" | \"deny\" | \"release\" | \"cancel\",\n body: { name: string; project: string; worktree?: string; waitMs?: number },\n): Promise<SharedClaimResult> {\n const timeoutMs = (body.waitMs ?? 0) + 5_000;\n let response: Response;\n try {\n response = await fetch(`http://127.0.0.1:${port}/hestia/shared/${verb}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(timeoutMs),\n });\n } catch (error) {\n throw new HestiaError(\n \"daemon-unreachable\",\n `could not reach hestiad on 127.0.0.1:${port}: ${(error as Error).message}`,\n );\n }\n const payload = (await response.json().catch(() => ({}))) as\n Partial<SharedClaimResult> & { error?: string; code?: string };\n if (!response.ok) {\n throw new HestiaError(\n payload.code ?? \"daemon-unreachable\",\n payload.error ?? `daemon rejected shared ${verb}: HTTP ${response.status}`,\n );\n }\n return {\n granted: payload.granted === true,\n holder: payload.holder,\n queued: payload.queued ?? [],\n };\n}\n\n/** Best-effort auto-release on down/stop; the sweep is the fallback. */\nexport async function releaseSharedForProject(\n port: number,\n project: string,\n service?: string,\n): Promise<void> {\n try {\n await fetch(`http://127.0.0.1:${port}/hestia/shared/release-project`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...daemonAuthHeaders(port) },\n body: JSON.stringify({ project, service }),\n signal: AbortSignal.timeout(2_000),\n });\n } catch {\n // sweep reconciles\n }\n}\n",
|
|
99
99
|
"import { existsSync, mkdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { hestiaHome } from \"../state.ts\";\nimport { HestiaError } from \"@hestia/core\";\nimport { writeAtomicTextFile } from \"../atomic-json-file.ts\";\n\nexport const LAUNCHD_LABEL = \"dev.hestia.daemon\";\n\n/** HESTIA_LAUNCHD_DIR overrides for tests — they must never touch the real LaunchAgents. */\nexport function launchAgentsDir(): string {\n return process.env.HESTIA_LAUNCHD_DIR ?? join(homedir(), \"Library\", \"LaunchAgents\");\n}\n\nexport function plistPath(): string {\n return join(launchAgentsDir(), `${LAUNCHD_LABEL}.plist`);\n}\n\nexport function daemonMainPath(): string {\n const bundled = join(dirname(fileURLToPath(import.meta.url)), \"daemon.js\");\n if (existsSync(bundled)) return bundled;\n return fileURLToPath(new URL(\"./main.ts\", import.meta.url));\n}\n\nfunction xml(v: string): string {\n return v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n}\n\nexport interface PlistInput {\n bunPath: string;\n mainPath: string;\n /** Full PATH baked in — gui LaunchAgents inherit only /usr/bin:/bin:/usr/sbin:/sbin,\n * which has neither cloudflared nor docker, so revival would ENOENT without this. */\n path: string;\n logPath: string;\n hestiaHome?: string;\n}\n\nexport function generatePlist(input: PlistInput): string {\n const env: string[] = [\n ` <key>PATH</key><string>${xml(input.path)}</string>`,\n ];\n if (input.hestiaHome !== undefined) {\n env.push(` <key>HESTIA_HOME</key><string>${xml(input.hestiaHome)}</string>`);\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n <dict>\n <key>Label</key><string>${LAUNCHD_LABEL}</string>\n <key>ProgramArguments</key>\n <array>\n <string>${xml(input.bunPath)}</string>\n <string>run</string>\n <string>${xml(input.mainPath)}</string>\n </array>\n <key>RunAtLoad</key><true/>\n <!-- SuccessfulExit:false — respawn crashes only. Plain 'true' would respawn\n the single-instance guard's exit-0 forever and make 'daemon stop' a lie. -->\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key><false/>\n </dict>\n <key>EnvironmentVariables</key>\n <dict>\n${env.join(\"\\n\")}\n </dict>\n <key>StandardOutPath</key><string>${xml(input.logPath)}</string>\n <key>StandardErrorPath</key><string>${xml(input.logPath)}</string>\n </dict>\n</plist>\n`;\n}\n\n/** The plist input for THIS checkout + environment, with tool-resolution warnings. */\nexport function currentPlistInput(): { input: PlistInput; warnings: string[] } {\n const warnings: string[] = [];\n const path = process.env.PATH ?? \"/usr/bin:/bin:/usr/sbin:/sbin\";\n for (const tool of [\"cloudflared\", \"docker\"]) {\n if (Bun.which(tool) === null) {\n warnings.push(\n `${tool} not found in PATH — the daemon won't be able to run it after a reboot ` +\n `(install it, then re-run \\`hestia daemon install\\`)`,\n );\n }\n }\n return {\n input: {\n bunPath: process.execPath,\n mainPath: daemonMainPath(),\n path,\n logPath: join(hestiaHome(), \"daemon\", \"launchd.log\"),\n hestiaHome: process.env.HESTIA_HOME,\n },\n warnings,\n };\n}\n\nfunction domain(): string {\n return `gui/${process.getuid?.() ?? 501}`;\n}\n\nfunction launchctl(...args: string[]): { ok: boolean; output: string } {\n try {\n const output = execFileSync(\"launchctl\", args, { encoding: \"utf8\", stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n return { ok: true, output };\n } catch (err) {\n return { ok: false, output: (err as { stderr?: string }).stderr ?? String(err) };\n }\n}\n\n/** Whether launchd currently manages the label (decides stop's bootout-vs-kill). */\nexport function isBootstrapped(): boolean {\n if (process.platform !== \"darwin\") return false;\n return launchctl(\"print\", `${domain()}/${LAUNCHD_LABEL}`).ok;\n}\n\n/**\n * Whether the bootstrapped agent manages the CURRENT hestia home. launchd is\n * machine-global but HESTIA_HOME is not — a CLI under a test/temp home must\n * never bootout or kickstart the real agent (found live: a HESTIA_HOME=tmp\n * e2e's `daemon stop` booted the user's real agent out).\n */\nexport function launchdManagesThisHome(): boolean {\n if (!isBootstrapped()) return false;\n try {\n const content = readFileSync(plistPath(), \"utf8\");\n const home = /<key>HESTIA_HOME<\\/key><string>([^<]*)<\\/string>/.exec(content)?.[1];\n return home === process.env.HESTIA_HOME || (home === undefined && process.env.HESTIA_HOME === undefined);\n } catch {\n return false;\n }\n}\n\nexport function kickstart(): { ok: boolean; output: string } {\n return launchctl(\"kickstart\", \"-k\", `${domain()}/${LAUNCHD_LABEL}`);\n}\n\nexport interface InstallResult {\n plist: string;\n /** Set when the plist was actually written + bootstrapped. */\n installedAt?: string;\n warnings: string[];\n}\n\n/**\n * Write + bootstrap the LaunchAgent (macOS). `print` renders the plist and\n * instructions without touching the system — also the non-darwin behavior.\n */\nexport function installLaunchd(opts?: { print?: boolean }): InstallResult {\n const { input, warnings } = currentPlistInput();\n const plist = generatePlist(input);\n if (opts?.print === true || process.platform !== \"darwin\") {\n if (process.platform !== \"darwin\") {\n warnings.push(\n \"launchd is macOS-only — wire the equivalent (systemd user unit) yourself: \" +\n `run \\`${input.bunPath} run ${input.mainPath}\\` at login with the printed PATH`,\n );\n }\n return { plist, warnings };\n }\n mkdirSync(launchAgentsDir(), { recursive: true });\n mkdirSync(dirname(input.logPath), { recursive: true });\n const target = plistPath();\n const previous = existsSync(target) ? readFileSync(target, \"utf8\") : null;\n const previouslyBootstrapped = isBootstrapped();\n const rollback = (): void => {\n launchctl(\"bootout\", `${domain()}/${LAUNCHD_LABEL}`);\n if (previous === null) rmSync(target, { force: true });\n else writeAtomicTextFile(target, previous);\n if (previouslyBootstrapped && previous !== null) {\n launchctl(\"bootstrap\", domain(), target);\n launchctl(\"kickstart\", \"-k\", `${domain()}/${LAUNCHD_LABEL}`);\n }\n };\n // Re-install must supersede a live agent: boot it out first (ignore \"not loaded\").\n launchctl(\"bootout\", `${domain()}/${LAUNCHD_LABEL}`);\n writeAtomicTextFile(target, plist);\n const boot = launchctl(\"bootstrap\", domain(), target);\n if (!boot.ok) {\n rollback();\n throw new HestiaError(\n \"launchd-install-failed\",\n `launchctl bootstrap failed and the previous agent was restored: ${boot.output.trim()}`,\n );\n }\n const started = kickstart();\n if (!started.ok) {\n rollback();\n throw new HestiaError(\n \"launchd-install-failed\",\n `launchctl kickstart failed and the previous agent was restored: ${started.output.trim()}`,\n );\n }\n return { plist, installedAt: target, warnings };\n}\n\nexport function uninstallLaunchd(): { removed: boolean; warnings: string[] } {\n const warnings: string[] = [];\n if (process.platform !== \"darwin\") return { removed: false, warnings };\n const out = launchctl(\"bootout\", `${domain()}/${LAUNCHD_LABEL}`);\n if (!out.ok && !out.output.includes(\"No such process\")) {\n warnings.push(`launchctl bootout: ${out.output.trim()}`);\n }\n const target = plistPath();\n const existed = existsSync(target);\n rmSync(target, { force: true });\n return { removed: existed, warnings };\n}\n",
|
|
100
|
-
"import {\n type DaemonHealth,\n type DaemonStateView,\n type FleetEnvelope,\n type LogLine,\n type LogsOptions,\n type RepoId,\n type StackIdentity,\n} from \"@hestia/core\";\nimport { readRequestTextWithLimit } from \"@hunk/session-broker-core\";\nimport { readMirrorState } from \"../state.ts\";\nimport { FleetMonitor } from \"./fleet-monitor.ts\";\nimport { SlotLedger, resolveMaxStacks } from \"./slots.ts\";\n\nexport const HESTIAD_PROTOCOL_VERSION = 5;\nconst MAX_JSON_BODY_BYTES = 16 * 1024;\nconst MAX_LOG_STREAMS = 16;\nconst MAX_LOG_TAIL = 200;\n\nexport interface AcquireResult {\n granted: boolean;\n /** Projects currently holding slots — the stack-limit error payload. */\n live: string[];\n}\n\ninterface Holder {\n pid: number;\n startTime: string;\n}\n\ninterface Waiter {\n identity: StackIdentity;\n holder: Holder;\n resolve(result: AcquireResult): void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nfunction admissionIdentity(identity: StackIdentity | string): StackIdentity {\n if (typeof identity !== \"string\") return identity;\n return {\n project: identity,\n repoId: \"repo-0000000000000000\" as RepoId,\n repo: \"legacy\",\n branch: identity,\n worktree: `/legacy/${identity}`,\n };\n}\n\n/** Machine-wide FIFO admission whose expensive occupancy probes never serve Fleet readers. */\nexport class Admission {\n #queue: Waiter[] = [];\n #cachedState: DaemonStateView = {\n maxStacks: resolveMaxStacks().maxStacks,\n live: [],\n reserved: [],\n queued: [],\n warnings: resolveMaxStacks().warnings,\n };\n #mutex: Promise<unknown> = Promise.resolve();\n\n constructor(readonly ledger: SlotLedger) {}\n\n #locked<T>(fn: () => Promise<T>): Promise<T> {\n const next = this.#mutex.then(fn, fn);\n this.#mutex = next.catch(() => {});\n return next;\n }\n\n async acquire(\n input: StackIdentity | string,\n holder: Holder,\n waitMs: number,\n ): Promise<AcquireResult> {\n const identity = admissionIdentity(input);\n const first = await this.#locked(() => this.#try(identity, holder));\n if (first.granted || waitMs <= 0) return first;\n return new Promise<AcquireResult>((resolve) => {\n const waiter: Waiter = {\n identity,\n holder,\n resolve,\n timer: setTimeout(() => {\n this.#queue = this.#queue.filter((candidate) => candidate !== waiter);\n resolve({ granted: false, live: first.live });\n }, waitMs),\n };\n this.#queue.push(waiter);\n });\n }\n\n /** Remove a waiter whose long-polling CLI disconnected. */\n forget(identity: StackIdentity, holder: Holder): void {\n this.#queue = this.#queue.filter((waiter) => {\n const match =\n waiter.identity.project === identity.project &&\n waiter.identity.repoId === identity.repoId &&\n waiter.holder.pid === holder.pid &&\n waiter.holder.startTime === holder.startTime;\n if (match) clearTimeout(waiter.timer);\n return !match;\n });\n }\n\n release(project: string): Promise<void> {\n return this.#locked(async () => {\n this.ledger.release(project);\n await this.#pump();\n });\n }\n\n /** Re-derive occupancy and grant whatever now fits. Called by the sweep. */\n pump(): Promise<void> {\n return this.#locked(() => this.#pump());\n }\n\n /** Copy queue identities synchronously without entering the occupancy mutex. */\n queuedIdentitySnapshot(): StackIdentity[] {\n return this.#queue.map((waiter) => ({ ...waiter.identity }));\n }\n\n /** Project-only queue view retained for daemon status and compatibility. */\n queuedProjects(): string[] {\n return this.queuedIdentitySnapshot().map((identity) => identity.project);\n }\n\n /** Constant-time cached view for liveness checks; never probes Docker or mutates reservations. */\n healthSnapshot(): DaemonStateView {\n return {\n ...this.#cachedState,\n live: [...this.#cachedState.live],\n reserved: [...this.#cachedState.reserved],\n queued: this.queuedProjects(),\n warnings: [...this.#cachedState.warnings],\n };\n }\n\n #cache(occupancy: Awaited<ReturnType<SlotLedger[\"occupancy\"]>>): void {\n const { maxStacks, warnings } = resolveMaxStacks();\n this.#cachedState = {\n maxStacks,\n live: [...occupancy.live],\n reserved: [...occupancy.reserved],\n queued: this.queuedProjects(),\n warnings: [...warnings, ...occupancy.warnings],\n };\n }\n\n async #try(identity: StackIdentity, holder: Holder): Promise<AcquireResult> {\n const { maxStacks } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n if (\n occupancy.live.includes(identity.project) ||\n occupancy.reserved.includes(identity.project)\n ) {\n return { granted: true, live: occupancy.live };\n }\n if (occupancy.live.length + occupancy.reserved.length < maxStacks) {\n this.ledger.reserveFor(identity, holder);\n return { granted: true, live: occupancy.live };\n }\n return { granted: false, live: occupancy.live };\n }\n\n async #pump(): Promise<void> {\n if (this.#queue.length === 0) return;\n const { maxStacks } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n let used = occupancy.live.length + occupancy.reserved.length;\n const granted: Waiter[] = [];\n for (const waiter of this.#queue) {\n if (\n occupancy.live.includes(waiter.identity.project) ||\n occupancy.reserved.includes(waiter.identity.project)\n ) {\n granted.push(waiter);\n }\n }\n for (const waiter of this.#queue) {\n if (granted.includes(waiter)) continue;\n if (used >= maxStacks) break;\n this.ledger.reserveFor(waiter.identity, waiter.holder);\n used += 1;\n granted.push(waiter);\n }\n if (granted.length === 0) return;\n this.#queue = this.#queue.filter((waiter) => !granted.includes(waiter));\n for (const waiter of granted) {\n clearTimeout(waiter.timer);\n waiter.resolve({ granted: true, live: occupancy.live });\n }\n }\n\n /** Legacy daemon status view; probes run outside the admission mutex. */\n async stateView(): Promise<DaemonStateView> {\n const { maxStacks, warnings } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n return {\n maxStacks,\n live: occupancy.live,\n reserved: occupancy.reserved,\n queued: this.queuedProjects(),\n warnings: [...warnings, ...occupancy.warnings],\n };\n }\n}\n\nexport interface DaemonRouteDependencies {\n token: string;\n fleet: FleetMonitor;\n routerPort: number;\n gatewaySocket: string;\n refreshLocalRoutes(): Promise<void>;\n logsProject(project: string, options: LogsOptions): AsyncIterable<LogLine>;\n}\n\nfunction json(body: unknown, status = 200): Response {\n return Response.json(body, { status });\n}\n\nfunction authorized(request: Request, token: string): boolean {\n return request.headers.get(\"authorization\") === `Bearer ${token}`;\n}\n\nfunction isProject(value: unknown): value is string {\n return typeof value === \"string\" && /^[a-z0-9][a-z0-9-]{0,99}$/.test(value);\n}\n\nfunction isRepoId(value: unknown): value is RepoId {\n return typeof value === \"string\" && /^repo-[a-f0-9]{16}$/.test(value);\n}\n\nfunction isService(value: unknown): value is string {\n return typeof value === \"string\" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(value);\n}\n\nfunction isStackIdentity(value: unknown): value is StackIdentity {\n if (typeof value !== \"object\" || value === null) return false;\n const identity = value as Partial<StackIdentity>;\n return (\n isProject(identity.project) &&\n isRepoId(identity.repoId) &&\n typeof identity.repo === \"string\" && identity.repo.length > 0 && identity.repo.length <= 256 &&\n typeof identity.branch === \"string\" && identity.branch.length > 0 && identity.branch.length <= 512 &&\n typeof identity.worktree === \"string\" && identity.worktree.startsWith(\"/\") && identity.worktree.length <= 4096\n );\n}\n\nasync function parseJsonBody<T>(request: Request): Promise<T> {\n if (!request.headers.get(\"content-type\")?.toLowerCase().startsWith(\"application/json\")) {\n throw new Error(\"content-type must be application/json\");\n }\n const declaredLength = Number(request.headers.get(\"content-length\") ?? \"0\");\n if (Number.isFinite(declaredLength) && declaredLength > MAX_JSON_BODY_BYTES) {\n throw new Error(\"request body exceeds 16 KiB\");\n }\n const source = await readRequestTextWithLimit(request, MAX_JSON_BODY_BYTES);\n return JSON.parse(source) as T;\n}\n\nfunction ndjsonResponse<T>(\n request: Request,\n createSource: (signal: AbortSignal) => AsyncIterable<T>,\n finished?: () => void,\n): Response {\n const encoder = new TextEncoder();\n const controller = new AbortController();\n let iterator: AsyncIterator<T> | undefined;\n let cleaned = false;\n const cleanup = async () => {\n if (cleaned) return;\n cleaned = true;\n controller.abort();\n request.signal.removeEventListener(\"abort\", abort);\n await iterator?.return?.();\n finished?.();\n };\n const abort = () => void cleanup();\n request.signal.addEventListener(\"abort\", abort, { once: true });\n const body = new ReadableStream<Uint8Array>({\n async pull(streamController) {\n try {\n iterator ??= createSource(controller.signal)[Symbol.asyncIterator]();\n const result = await iterator.next();\n if (result.done) {\n await cleanup();\n streamController.close();\n return;\n }\n streamController.enqueue(encoder.encode(`${JSON.stringify(result.value)}\\n`));\n } catch (error) {\n await cleanup();\n streamController.error(error);\n }\n },\n async cancel() {\n await cleanup();\n },\n });\n return new Response(body, {\n headers: {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n },\n });\n}\n\n/** Authenticated hestiad HTTP routes layered before the vendored broker router. */\nexport function createRoutes(\n admission: Admission,\n startedAt: string,\n dependencies: DaemonRouteDependencies,\n): (request: Request) => Promise<Response | undefined> | Response | undefined {\n let activeLogStreams = 0;\n return async (request) => {\n const url = new URL(request.url);\n if (!url.pathname.startsWith(\"/hestia/\")) return undefined;\n if (!authorized(request, dependencies.token)) return json({ error: \"unauthorized\" }, 401);\n\n if (url.pathname === \"/hestia/health\" && request.method === \"GET\") {\n const state = admission.healthSnapshot();\n const health: DaemonHealth = {\n ok: true,\n pid: process.pid,\n protocolVersion: HESTIAD_PROTOCOL_VERSION,\n maxStacks: state.maxStacks,\n live: state.live.length,\n queued: state.queued.length,\n startedAt,\n routerPort: dependencies.routerPort,\n gatewaySocket: dependencies.gatewaySocket,\n warnings: state.warnings,\n };\n return json(health);\n }\n\n if (url.pathname === \"/hestia/state\" && request.method === \"GET\") {\n return json(await admission.stateView());\n }\n\n if (url.pathname === \"/hestia/router/reconcile\" && request.method === \"POST\") {\n await dependencies.refreshLocalRoutes();\n return json({ ok: true, routerPort: dependencies.routerPort });\n }\n\n if (url.pathname === \"/hestia/fleet\" && request.method === \"GET\") {\n const repoId = url.searchParams.get(\"repoId\");\n if (!isRepoId(repoId)) return json({ error: \"repoId is invalid\" }, 400);\n return ndjsonResponse<FleetEnvelope>(request, (signal) =>\n dependencies.fleet.subscribe(repoId, signal),\n );\n }\n\n if (url.pathname === \"/hestia/logs\" && request.method === \"GET\") {\n const project = url.searchParams.get(\"project\");\n const service = url.searchParams.get(\"service\");\n const tailSource = url.searchParams.get(\"tail\") ?? \"50\";\n const tail = Number(tailSource);\n if (!isProject(project)) return json({ error: \"project is invalid\" }, 400);\n if (!isService(service)) return json({ error: \"service is invalid\" }, 400);\n if (!Number.isInteger(tail) || tail < 0 || tail > MAX_LOG_TAIL) {\n return json({ error: `tail must be an integer from 0 to ${MAX_LOG_TAIL}` }, 400);\n }\n const record = readMirrorState(project);\n if (record === null) return json({ error: `no mirror for project ${project}` }, 404);\n if (!record.services.some((candidate) => candidate.name === service)) {\n return json({ error: `service ${service} is not in project ${project}` }, 404);\n }\n if (activeLogStreams >= MAX_LOG_STREAMS) {\n return json({ error: \"too many active log streams\" }, 429);\n }\n activeLogStreams += 1;\n return ndjsonResponse<LogLine>(\n request,\n (signal) => dependencies.logsProject(project, {\n services: [service],\n follow: true,\n tail,\n signal,\n }),\n () => { activeLogStreams -= 1; },\n );\n }\n\n if (url.pathname === \"/hestia/acquire\" && request.method === \"POST\") {\n let body: { identity?: unknown; pid?: unknown; startTime?: unknown; waitMs?: unknown };\n try {\n body = await parseJsonBody(request);\n } catch (error) {\n return json({ error: `invalid JSON body: ${(error as Error).message}` }, 400);\n }\n if (!isStackIdentity(body.identity)) return json({ error: \"identity is invalid\" }, 400);\n const holder = {\n pid: typeof body.pid === \"number\" && Number.isInteger(body.pid) ? body.pid : 0,\n startTime: typeof body.startTime === \"string\" && body.startTime.length <= 128\n ? body.startTime\n : \"\",\n };\n const waitMs = typeof body.waitMs === \"number\" && Number.isFinite(body.waitMs) && body.waitMs > 0\n ? Math.min(body.waitMs, 24 * 60 * 60 * 1_000)\n : 0;\n const onAbort = () => admission.forget(body.identity as StackIdentity, holder);\n request.signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n return json(await admission.acquire(body.identity, holder, waitMs));\n } finally {\n request.signal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n if (url.pathname === \"/hestia/release\" && request.method === \"POST\") {\n let body: { project?: unknown };\n try {\n body = await parseJsonBody(request);\n } catch (error) {\n return json({ error: `invalid JSON body: ${(error as Error).message}` }, 400);\n }\n if (!isProject(body.project)) return json({ error: \"project is invalid\" }, 400);\n await admission.release(body.project);\n return json({ ok: true });\n }\n\n return json({ error: `unknown route ${url.pathname}` }, 404);\n };\n}\n",
|
|
100
|
+
"import {\n type DaemonHealth,\n type DaemonStateView,\n type FleetEnvelope,\n type LogLine,\n type LogsOptions,\n type RepoId,\n type StackIdentity,\n} from \"@hestia/core\";\nimport { readRequestTextWithLimit } from \"@hunk/session-broker-core\";\nimport { HestiaError } from \"@hestia/core\";\nimport { readMirrorState } from \"../state.ts\";\nimport { FleetMonitor } from \"./fleet-monitor.ts\";\nimport { SharedArbiter } from \"./shared-arbiter.ts\";\nimport { SlotLedger, resolveMaxStacks } from \"./slots.ts\";\n\nexport const HESTIAD_PROTOCOL_VERSION = 5;\nconst MAX_JSON_BODY_BYTES = 16 * 1024;\nconst MAX_LOG_STREAMS = 16;\nconst MAX_LOG_TAIL = 200;\n\nexport interface AcquireResult {\n granted: boolean;\n /** Projects currently holding slots — the stack-limit error payload. */\n live: string[];\n}\n\ninterface Holder {\n pid: number;\n startTime: string;\n}\n\ninterface Waiter {\n identity: StackIdentity;\n holder: Holder;\n resolve(result: AcquireResult): void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nfunction admissionIdentity(identity: StackIdentity | string): StackIdentity {\n if (typeof identity !== \"string\") return identity;\n return {\n project: identity,\n repoId: \"repo-0000000000000000\" as RepoId,\n repo: \"legacy\",\n branch: identity,\n worktree: `/legacy/${identity}`,\n };\n}\n\n/** Machine-wide FIFO admission whose expensive occupancy probes never serve Fleet readers. */\nexport class Admission {\n #queue: Waiter[] = [];\n #cachedState: DaemonStateView = {\n maxStacks: resolveMaxStacks().maxStacks,\n live: [],\n reserved: [],\n queued: [],\n warnings: resolveMaxStacks().warnings,\n };\n #mutex: Promise<unknown> = Promise.resolve();\n\n constructor(readonly ledger: SlotLedger) {}\n\n #locked<T>(fn: () => Promise<T>): Promise<T> {\n const next = this.#mutex.then(fn, fn);\n this.#mutex = next.catch(() => {});\n return next;\n }\n\n async acquire(\n input: StackIdentity | string,\n holder: Holder,\n waitMs: number,\n ): Promise<AcquireResult> {\n const identity = admissionIdentity(input);\n const first = await this.#locked(() => this.#try(identity, holder));\n if (first.granted || waitMs <= 0) return first;\n return new Promise<AcquireResult>((resolve) => {\n const waiter: Waiter = {\n identity,\n holder,\n resolve,\n timer: setTimeout(() => {\n this.#queue = this.#queue.filter((candidate) => candidate !== waiter);\n resolve({ granted: false, live: first.live });\n }, waitMs),\n };\n this.#queue.push(waiter);\n });\n }\n\n /** Remove a waiter whose long-polling CLI disconnected. */\n forget(identity: StackIdentity, holder: Holder): void {\n this.#queue = this.#queue.filter((waiter) => {\n const match =\n waiter.identity.project === identity.project &&\n waiter.identity.repoId === identity.repoId &&\n waiter.holder.pid === holder.pid &&\n waiter.holder.startTime === holder.startTime;\n if (match) clearTimeout(waiter.timer);\n return !match;\n });\n }\n\n release(project: string): Promise<void> {\n return this.#locked(async () => {\n this.ledger.release(project);\n await this.#pump();\n });\n }\n\n /** Re-derive occupancy and grant whatever now fits. Called by the sweep. */\n pump(): Promise<void> {\n return this.#locked(() => this.#pump());\n }\n\n /** Copy queue identities synchronously without entering the occupancy mutex. */\n queuedIdentitySnapshot(): StackIdentity[] {\n return this.#queue.map((waiter) => ({ ...waiter.identity }));\n }\n\n /** Project-only queue view retained for daemon status and compatibility. */\n queuedProjects(): string[] {\n return this.queuedIdentitySnapshot().map((identity) => identity.project);\n }\n\n /** Constant-time cached view for liveness checks; never probes Docker or mutates reservations. */\n healthSnapshot(): DaemonStateView {\n return {\n ...this.#cachedState,\n live: [...this.#cachedState.live],\n reserved: [...this.#cachedState.reserved],\n queued: this.queuedProjects(),\n warnings: [...this.#cachedState.warnings],\n };\n }\n\n #cache(occupancy: Awaited<ReturnType<SlotLedger[\"occupancy\"]>>): void {\n const { maxStacks, warnings } = resolveMaxStacks();\n this.#cachedState = {\n maxStacks,\n live: [...occupancy.live],\n reserved: [...occupancy.reserved],\n queued: this.queuedProjects(),\n warnings: [...warnings, ...occupancy.warnings],\n };\n }\n\n async #try(identity: StackIdentity, holder: Holder): Promise<AcquireResult> {\n const { maxStacks } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n if (\n occupancy.live.includes(identity.project) ||\n occupancy.reserved.includes(identity.project)\n ) {\n return { granted: true, live: occupancy.live };\n }\n if (occupancy.live.length + occupancy.reserved.length < maxStacks) {\n this.ledger.reserveFor(identity, holder);\n return { granted: true, live: occupancy.live };\n }\n return { granted: false, live: occupancy.live };\n }\n\n async #pump(): Promise<void> {\n if (this.#queue.length === 0) return;\n const { maxStacks } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n let used = occupancy.live.length + occupancy.reserved.length;\n const granted: Waiter[] = [];\n for (const waiter of this.#queue) {\n if (\n occupancy.live.includes(waiter.identity.project) ||\n occupancy.reserved.includes(waiter.identity.project)\n ) {\n granted.push(waiter);\n }\n }\n for (const waiter of this.#queue) {\n if (granted.includes(waiter)) continue;\n if (used >= maxStacks) break;\n this.ledger.reserveFor(waiter.identity, waiter.holder);\n used += 1;\n granted.push(waiter);\n }\n if (granted.length === 0) return;\n this.#queue = this.#queue.filter((waiter) => !granted.includes(waiter));\n for (const waiter of granted) {\n clearTimeout(waiter.timer);\n waiter.resolve({ granted: true, live: occupancy.live });\n }\n }\n\n /** Legacy daemon status view; probes run outside the admission mutex. */\n async stateView(): Promise<DaemonStateView> {\n const { maxStacks, warnings } = resolveMaxStacks();\n const occupancy = await this.ledger.occupancy();\n this.#cache(occupancy);\n return {\n maxStacks,\n live: occupancy.live,\n reserved: occupancy.reserved,\n queued: this.queuedProjects(),\n warnings: [...warnings, ...occupancy.warnings],\n };\n }\n}\n\nexport interface DaemonRouteDependencies {\n token: string;\n fleet: FleetMonitor;\n routerPort: number;\n gatewaySocket: string;\n shared: SharedArbiter;\n refreshLocalRoutes(): Promise<void>;\n logsProject(project: string, options: LogsOptions): AsyncIterable<LogLine>;\n}\n\nfunction json(body: unknown, status = 200): Response {\n return Response.json(body, { status });\n}\n\nfunction authorized(request: Request, token: string): boolean {\n return request.headers.get(\"authorization\") === `Bearer ${token}`;\n}\n\nfunction isProject(value: unknown): value is string {\n return typeof value === \"string\" && /^[a-z0-9][a-z0-9-]{0,99}$/.test(value);\n}\n\nfunction isRepoId(value: unknown): value is RepoId {\n return typeof value === \"string\" && /^repo-[a-f0-9]{16}$/.test(value);\n}\n\nfunction isService(value: unknown): value is string {\n return typeof value === \"string\" && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(value);\n}\n\nfunction isStackIdentity(value: unknown): value is StackIdentity {\n if (typeof value !== \"object\" || value === null) return false;\n const identity = value as Partial<StackIdentity>;\n return (\n isProject(identity.project) &&\n isRepoId(identity.repoId) &&\n typeof identity.repo === \"string\" && identity.repo.length > 0 && identity.repo.length <= 256 &&\n typeof identity.branch === \"string\" && identity.branch.length > 0 && identity.branch.length <= 512 &&\n typeof identity.worktree === \"string\" && identity.worktree.startsWith(\"/\") && identity.worktree.length <= 4096\n );\n}\n\nasync function parseJsonBody<T>(request: Request): Promise<T> {\n if (!request.headers.get(\"content-type\")?.toLowerCase().startsWith(\"application/json\")) {\n throw new Error(\"content-type must be application/json\");\n }\n const declaredLength = Number(request.headers.get(\"content-length\") ?? \"0\");\n if (Number.isFinite(declaredLength) && declaredLength > MAX_JSON_BODY_BYTES) {\n throw new Error(\"request body exceeds 16 KiB\");\n }\n const source = await readRequestTextWithLimit(request, MAX_JSON_BODY_BYTES);\n return JSON.parse(source) as T;\n}\n\nfunction ndjsonResponse<T>(\n request: Request,\n createSource: (signal: AbortSignal) => AsyncIterable<T>,\n finished?: () => void,\n): Response {\n const encoder = new TextEncoder();\n const controller = new AbortController();\n let iterator: AsyncIterator<T> | undefined;\n let cleaned = false;\n const cleanup = async () => {\n if (cleaned) return;\n cleaned = true;\n controller.abort();\n request.signal.removeEventListener(\"abort\", abort);\n await iterator?.return?.();\n finished?.();\n };\n const abort = () => void cleanup();\n request.signal.addEventListener(\"abort\", abort, { once: true });\n const body = new ReadableStream<Uint8Array>({\n async pull(streamController) {\n try {\n iterator ??= createSource(controller.signal)[Symbol.asyncIterator]();\n const result = await iterator.next();\n if (result.done) {\n await cleanup();\n streamController.close();\n return;\n }\n streamController.enqueue(encoder.encode(`${JSON.stringify(result.value)}\\n`));\n } catch (error) {\n await cleanup();\n streamController.error(error);\n }\n },\n async cancel() {\n await cleanup();\n },\n });\n return new Response(body, {\n headers: {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n },\n });\n}\n\n/** Authenticated hestiad HTTP routes layered before the vendored broker router. */\nexport function createRoutes(\n admission: Admission,\n startedAt: string,\n dependencies: DaemonRouteDependencies,\n): (request: Request) => Promise<Response | undefined> | Response | undefined {\n let activeLogStreams = 0;\n return async (request) => {\n const url = new URL(request.url);\n if (!url.pathname.startsWith(\"/hestia/\")) return undefined;\n if (!authorized(request, dependencies.token)) return json({ error: \"unauthorized\" }, 401);\n\n if (url.pathname === \"/hestia/health\" && request.method === \"GET\") {\n const state = admission.healthSnapshot();\n const health: DaemonHealth = {\n ok: true,\n pid: process.pid,\n protocolVersion: HESTIAD_PROTOCOL_VERSION,\n maxStacks: state.maxStacks,\n live: state.live.length,\n queued: state.queued.length,\n startedAt,\n routerPort: dependencies.routerPort,\n gatewaySocket: dependencies.gatewaySocket,\n warnings: state.warnings,\n };\n return json(health);\n }\n\n if (url.pathname === \"/hestia/state\" && request.method === \"GET\") {\n return json(await admission.stateView());\n }\n\n if (url.pathname === \"/hestia/router/reconcile\" && request.method === \"POST\") {\n await dependencies.refreshLocalRoutes();\n return json({ ok: true, routerPort: dependencies.routerPort });\n }\n\n if (url.pathname === \"/hestia/fleet\" && request.method === \"GET\") {\n const repoId = url.searchParams.get(\"repoId\");\n if (!isRepoId(repoId)) return json({ error: \"repoId is invalid\" }, 400);\n return ndjsonResponse<FleetEnvelope>(request, (signal) =>\n dependencies.fleet.subscribe(repoId, signal),\n );\n }\n\n if (url.pathname === \"/hestia/logs\" && request.method === \"GET\") {\n const project = url.searchParams.get(\"project\");\n const service = url.searchParams.get(\"service\");\n const tailSource = url.searchParams.get(\"tail\") ?? \"50\";\n const tail = Number(tailSource);\n if (!isProject(project)) return json({ error: \"project is invalid\" }, 400);\n if (!isService(service)) return json({ error: \"service is invalid\" }, 400);\n if (!Number.isInteger(tail) || tail < 0 || tail > MAX_LOG_TAIL) {\n return json({ error: `tail must be an integer from 0 to ${MAX_LOG_TAIL}` }, 400);\n }\n const record = readMirrorState(project);\n if (record === null) return json({ error: `no mirror for project ${project}` }, 404);\n if (!record.services.some((candidate) => candidate.name === service)) {\n return json({ error: `service ${service} is not in project ${project}` }, 404);\n }\n if (activeLogStreams >= MAX_LOG_STREAMS) {\n return json({ error: \"too many active log streams\" }, 429);\n }\n activeLogStreams += 1;\n return ndjsonResponse<LogLine>(\n request,\n (signal) => dependencies.logsProject(project, {\n services: [service],\n follow: true,\n tail,\n signal,\n }),\n () => { activeLogStreams -= 1; },\n );\n }\n\n if (url.pathname === \"/hestia/acquire\" && request.method === \"POST\") {\n let body: { identity?: unknown; pid?: unknown; startTime?: unknown; waitMs?: unknown };\n try {\n body = await parseJsonBody(request);\n } catch (error) {\n return json({ error: `invalid JSON body: ${(error as Error).message}` }, 400);\n }\n if (!isStackIdentity(body.identity)) return json({ error: \"identity is invalid\" }, 400);\n const holder = {\n pid: typeof body.pid === \"number\" && Number.isInteger(body.pid) ? body.pid : 0,\n startTime: typeof body.startTime === \"string\" && body.startTime.length <= 128\n ? body.startTime\n : \"\",\n };\n const waitMs = typeof body.waitMs === \"number\" && Number.isFinite(body.waitMs) && body.waitMs > 0\n ? Math.min(body.waitMs, 24 * 60 * 60 * 1_000)\n : 0;\n const onAbort = () => admission.forget(body.identity as StackIdentity, holder);\n request.signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n return json(await admission.acquire(body.identity, holder, waitMs));\n } finally {\n request.signal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n if (url.pathname === \"/hestia/release\" && request.method === \"POST\") {\n let body: { project?: unknown };\n try {\n body = await parseJsonBody(request);\n } catch (error) {\n return json({ error: `invalid JSON body: ${(error as Error).message}` }, 400);\n }\n if (!isProject(body.project)) return json({ error: \"project is invalid\" }, 400);\n await admission.release(body.project);\n return json({ ok: true });\n }\n\n if (url.pathname.startsWith(\"/hestia/shared/\") && request.method === \"POST\") {\n let body: {\n name?: unknown; project?: unknown; worktree?: unknown;\n service?: unknown; waitMs?: unknown;\n };\n try {\n body = await parseJsonBody(request);\n } catch (error) {\n return json({ error: `invalid JSON body: ${(error as Error).message}` }, 400);\n }\n const verb = url.pathname.slice(\"/hestia/shared/\".length);\n if (!isProject(body.project)) return json({ error: \"project is invalid\" }, 400);\n const project = body.project;\n try {\n if (verb === \"release-project\") {\n const service = body.service === undefined\n ? undefined\n : isService(body.service) ? body.service : null;\n if (service === null) return json({ error: \"service is invalid\" }, 400);\n await dependencies.shared.releaseProject(project, service);\n return json({ ok: true });\n }\n if (!isSharedName(body.name)) return json({ error: \"name is invalid\" }, 400);\n const name = body.name;\n if (verb === \"claim\") {\n if (typeof body.worktree !== \"string\" || !body.worktree.startsWith(\"/\") || body.worktree.length > 4096) {\n return json({ error: \"worktree is invalid\" }, 400);\n }\n const waitMs = typeof body.waitMs === \"number\" && Number.isFinite(body.waitMs) && body.waitMs > 0\n ? Math.min(body.waitMs, 24 * 60 * 60 * 1_000)\n : 0;\n return json(await dependencies.shared.request(\n name,\n { project, worktree: body.worktree },\n waitMs,\n ));\n }\n if (verb === \"allow\") return json(await dependencies.shared.allow(name, project));\n if (verb === \"deny\") return json(await dependencies.shared.deny(name, project));\n if (verb === \"release\") return json(await dependencies.shared.release(name, project));\n if (verb === \"cancel\") return json(await dependencies.shared.cancel(name, project));\n } catch (error) {\n if (error instanceof HestiaError) {\n return json(\n { error: error.message, code: error.code },\n error.code === \"shared-not-found\" ? 404 : 409,\n );\n }\n return json({ error: (error as Error).message }, 500);\n }\n return json({ error: `unknown route ${url.pathname}` }, 404);\n }\n\n return json({ error: `unknown route ${url.pathname}` }, 404);\n };\n}\n\nfunction isSharedName(value: unknown): value is string {\n return typeof value === \"string\" && /^[a-z0-9][a-z0-9-]{0,62}$/.test(value);\n}\n",
|
|
101
101
|
"import { closeSync, openSync } from \"node:fs\";\nimport { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { HestiaError, type DaemonHealth } from \"@hestia/core\";\nimport { withLock } from \"../proc/lock.ts\";\nimport { isLive, readPidfile } from \"../proc/pidfile.ts\";\nimport { ensureDir } from \"../state.ts\";\nimport { fetchHealth, readDaemonJson } from \"./client.ts\";\nimport { daemonMainPath, kickstart, launchdManagesThisHome } from \"./launchd.ts\";\nimport { HESTIAD_PROTOCOL_VERSION } from \"./routes.ts\";\nimport { daemonDir } from \"./slots.ts\";\n\nconst START_TIMEOUT_MS = 5_000;\nconst POLL_MS = 100;\nconst PIDFILE_NAME = \"hestiad\";\n\nexport interface DaemonHandle {\n port: number;\n health: DaemonHealth;\n}\n\nasync function healthy(): Promise<DaemonHandle | null> {\n const j = readDaemonJson();\n if (j === null) return null;\n const health = await fetchHealth(j.port);\n if (health === null) return null;\n return { port: j.port, health };\n}\n\nfunction spawnDaemon(): void {\n const root = daemonDir();\n ensureDir(root);\n const fd = openSync(join(root, \"daemon.log\"), \"a\");\n // Same detached-spawn shape as the proc supervisor (node:child_process —\n // Bun.spawn has no `detached`); the daemon manages its own pidfile.\n const child = spawn(process.execPath, [\"run\", daemonMainPath()], {\n detached: true,\n stdio: [\"ignore\", fd, fd],\n env: process.env,\n });\n child.once(\"error\", () => closeSync(fd));\n child.once(\"spawn\", () => {\n closeSync(fd);\n child.unref();\n });\n}\n\n/** SIGTERM the live daemon by pidfile identity and wait for it to die. */\nexport async function stopDaemonProcess(timeoutMs = 5_000): Promise<boolean> {\n const pf = readPidfile(daemonDir(), PIDFILE_NAME);\n if (pf === null || !isLive(pf)) return false;\n try {\n process.kill(pf.pid, \"SIGTERM\");\n } catch {\n return false;\n }\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n if (!isLive(pf)) return true;\n await new Promise((r) => setTimeout(r, POLL_MS));\n }\n try {\n process.kill(pf.pid, \"SIGKILL\");\n } catch {}\n return true;\n}\n\n/**\n * Make sure a protocol-compatible hestiad is serving; spawn or restart one if\n * not. Launchd-managed daemons are restarted through launchd (`kickstart -k`)\n * — killing them directly would just race KeepAlive.\n */\nexport async function ensureDaemon(): Promise<DaemonHandle> {\n const current = await healthy();\n if (current !== null && current.health.protocolVersion === HESTIAD_PROTOCOL_VERSION) {\n return current;\n }\n\n if (current !== null) {\n // Live but wrong protocol — restart it our way or launchd's way.\n if (launchdManagesThisHome()) kickstart();\n else {\n await stopDaemonProcess();\n spawnDaemon();\n }\n const restarted = await pollHealthy();\n if (restarted !== null) return restarted;\n throw new HestiaError(\n \"daemon-start-failed\",\n `hestiad restart after a protocol mismatch did not come up within ${START_TIMEOUT_MS / 1000}s`,\n );\n }\n\n // Discovery can identify the exact live daemon even when its HTTP surface\n // is wedged. Restart that identity before spawning; otherwise main.ts's\n // single-instance guard correctly rejects the newcomer and ensure times out.\n const discovery = readDaemonJson();\n const discoveredPidfile = readPidfile(daemonDir(), PIDFILE_NAME);\n if (\n discovery !== null &&\n discoveredPidfile?.pid === discovery.pid &&\n isLive(discoveredPidfile)\n ) {\n if (launchdManagesThisHome()) kickstart();\n else {\n await stopDaemonProcess();\n spawnDaemon();\n }\n const restarted = await pollHealthy();\n if (restarted !== null) return restarted;\n throw new HestiaError(\n \"daemon-start-failed\",\n `live but unhealthy hestiad ${discovery.pid} did not recover within ${START_TIMEOUT_MS / 1000}s`,\n );\n }\n\n // Not reachable — serialize the spawn decision so parallel agents fork at\n // most a couple of candidates (main.ts's own guard picks the single winner).\n // The lock covers ONLY check+spawn: main.ts takes the same lock to start\n // serving, so polling inside it would deadlock the startup we're waiting on.\n const raced = await withLock(daemonDir(), async () => {\n const h = await healthy();\n if (h !== null) return h;\n spawnDaemon();\n return null;\n });\n if (raced !== null) return raced;\n const started = await pollHealthy();\n if (started !== null) return started;\n throw new HestiaError(\n \"daemon-start-failed\",\n `hestiad did not come up within ${START_TIMEOUT_MS / 1000}s — ` +\n `logs: ${join(daemonDir(), \"daemon.log\")}`,\n );\n}\n\nasync function pollHealthy(): Promise<DaemonHandle | null> {\n const deadline = Date.now() + START_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const h = await healthy();\n if (h !== null && h.health.protocolVersion === HESTIAD_PROTOCOL_VERSION) return h;\n await new Promise((r) => setTimeout(r, POLL_MS));\n }\n return null;\n}\n",
|
|
102
102
|
"/** Exact upstream Portless version bundled into the Hestia router payload. */\nexport const HESTIA_PORTLESS_VERSION = \"0.15.1\";\n\n/** SHA-256 of the exact Hestia hardening patch bundled into Portless. */\nexport const HESTIA_PORTLESS_PATCH_SHA256 = \"9ca94ca771ce502769a2c7cbe3bb4fe8d54dc847ff9f7e3e2b34abf728618690\";\n\nexport interface PortlessPayloadProvenance {\n package: \"portless\";\n version: string;\n patchSha256: string;\n}\n\n/** Build the deterministic provenance record copied into every router payload. */\nexport function expectedPortlessPayloadProvenance(): PortlessPayloadProvenance {\n return {\n package: \"portless\",\n version: HESTIA_PORTLESS_VERSION,\n patchSha256: HESTIA_PORTLESS_PATCH_SHA256,\n };\n}\n\n/** Check whether unknown provenance matches this exact Hestia source release. */\nexport function portlessPayloadProvenanceIsCurrent(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const provenance = value as Record<string, unknown>;\n return provenance.package === \"portless\" &&\n provenance.version === HESTIA_PORTLESS_VERSION &&\n provenance.patchSha256 === HESTIA_PORTLESS_PATCH_SHA256;\n}\n",
|
|
103
103
|
"import { execFile, spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync, rmSync, statSync } from \"node:fs\";\nimport { promisify } from \"node:util\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createConnection } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport { HestiaError } from \"@hestia/core\";\nimport { ensureDir, hestiaHome } from \"../state.ts\";\nimport { startTimeOf } from \"../proc/pidfile.ts\";\nimport { writeAtomicJsonFile } from \"../atomic-json-file.ts\";\nimport { ensureDaemon } from \"../daemon/ensure.ts\";\nimport { withLock } from \"../proc/lock.ts\";\nimport {\n HESTIA_PORTLESS_VERSION,\n expectedPortlessPayloadProvenance,\n portlessPayloadProvenanceIsCurrent,\n} from \"./portless-payload.ts\";\n\nconst pexec = promisify(execFile);\nexport { HESTIA_PORTLESS_VERSION };\nconst PORTLESS_LAUNCHD_PLIST = \"/Library/LaunchDaemons/sh.portless.proxy.plist\";\nconst HESTIA_ROUTER_INSTALL_DIR = \"/Library/Application Support/Hestia/router\";\nconst HESTIA_ROUTER_STAGED_DIR = \"/Library/Application Support/Hestia/router.next\";\nconst HESTIA_ROUTER_PREVIOUS_DIR = \"/Library/Application Support/Hestia/router.previous\";\nconst HESTIA_ROUTER_BUN = join(HESTIA_ROUTER_INSTALL_DIR, \"bun\");\nconst HESTIA_ROUTER_PORTLESS = join(HESTIA_ROUTER_INSTALL_DIR, \"portless\");\nconst HESTIA_ROUTER_CLI = join(HESTIA_ROUTER_PORTLESS, \"dist\", \"cli.js\");\nconst HESTIA_ROUTER_RUNTIME_STATE_DIR = join(HESTIA_ROUTER_INSTALL_DIR, \"state\");\n\n/** Root-owned runtime state used by the privileged Portless LaunchDaemon. */\nexport function hestiaPortlessStateDir(): string {\n return HESTIA_ROUTER_RUNTIME_STATE_DIR;\n}\n\n/** User-owned, read-only-to-Portless alias projection written by hestiad. */\nexport function hestiaPortlessAliasesPath(): string {\n return join(hestiaHome(), \"router\", \"portless\", \"aliases.json\");\n}\n\nfunction portlessCliPath(): string {\n const moduleDirectory = dirname(fileURLToPath(import.meta.url));\n const bundled = join(moduleDirectory, \"assets\", \"portless\", \"dist\", \"cli.js\");\n if (existsSync(bundled) && portlessPayloadRootIsCurrent(dirname(dirname(bundled)))) return bundled;\n const workspaceBuild = join(moduleDirectory, \"..\", \"..\", \"..\", \"..\", \"dist\", \"assets\", \"portless\", \"dist\", \"cli.js\");\n if (existsSync(workspaceBuild) && portlessPayloadRootIsCurrent(dirname(dirname(workspaceBuild)))) {\n return workspaceBuild;\n }\n throw new HestiaError(\n \"router-version-unsupported\",\n \"current hardened Portless payload is unavailable; run bun run build and retry\",\n );\n}\n\nfunction portlessPayloadRootIsCurrent(root: string): boolean {\n try {\n return portlessPayloadProvenanceIsCurrent(\n JSON.parse(readFileSync(join(root, \"provenance.json\"), \"utf8\")),\n );\n } catch {\n return false;\n }\n}\n\nfunction installedPortlessPayloadIsCurrent(): boolean {\n return portlessPayloadRootIsCurrent(HESTIA_ROUTER_PORTLESS);\n}\n\nfunction xmlEscape(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\")\n .replaceAll('\"', \""\").replaceAll(\"'\", \"'\");\n}\n\nfunction portlessServiceOwnership(): \"absent\" | \"hestia\" | \"foreign\" {\n if (process.platform !== \"darwin\" || !existsSync(PORTLESS_LAUNCHD_PLIST)) return \"absent\";\n try {\n const plist = readFileSync(PORTLESS_LAUNCHD_PLIST, \"utf8\");\n const stateEntry = `<key>PORTLESS_STATE_DIR</key>\\n <string>${xmlEscape(hestiaPortlessStateDir())}</string>`;\n const aliasesEntry = `<key>HESTIA_PORTLESS_ROUTES_PATH</key>\\n <string>${xmlEscape(hestiaPortlessAliasesPath())}</string>`;\n const rootStateEntry = \"<key>HESTIA_PORTLESS_ROOT_STATE</key>\\n <string>1</string>\";\n const routesUidEntry = `<key>HESTIA_PORTLESS_ROUTES_UID</key>\\n <string>${process.getuid?.() ?? 0}</string>`;\n const hardenedPayload = plist.includes(`<string>${xmlEscape(HESTIA_ROUTER_BUN)}</string>`) &&\n plist.includes(`<string>${xmlEscape(HESTIA_ROUTER_CLI)}</string>`);\n const payloadSecure = [HESTIA_ROUTER_BUN, HESTIA_ROUTER_CLI].every((path) => {\n const stat = statSync(path);\n return stat.uid === 0 && (stat.mode & 0o022) === 0;\n });\n return plist.includes(stateEntry) && plist.includes(aliasesEntry) && plist.includes(rootStateEntry) &&\n plist.includes(routesUidEntry) &&\n hardenedPayload && payloadSecure\n ? \"hestia\"\n : \"foreign\";\n } catch {\n return \"foreign\";\n }\n}\n\nfunction requireHestiaServiceOwnership(action: \"install\" | \"uninstall\"): \"absent\" | \"hestia\" {\n if (process.platform !== \"darwin\") {\n throw new HestiaError(\n \"router-version-unsupported\",\n `Router ${action}: the first privileged installer supports macOS only`,\n );\n }\n const ownership = portlessServiceOwnership();\n if (ownership === \"foreign\") {\n throw new HestiaError(\n \"router-version-unsupported\",\n `Router ${action}: the machine-global Portless service belongs to another installation; Hestia will not modify it`,\n );\n }\n return ownership;\n}\n\n/** Reconcile every Hestia-owned Portless alias to the current daemon router port. */\nexport function reconcilePortlessAliases(hostnames: string[], routerPort: number): void {\n const daemonStartTime = startTimeOf(process.pid);\n if (daemonStartTime === null) {\n throw new Error(`cannot capture hestiad process identity for PID ${process.pid}`);\n }\n writeAtomicJsonFile(hestiaPortlessAliasesPath(), hostnames.map((hostname) => ({\n hostname,\n port: routerPort,\n pid: process.pid,\n startTime: daemonStartTime,\n })));\n}\n\nexport interface HestiaRouterStatus {\n installed: boolean;\n running: boolean;\n trusted: boolean;\n version: string;\n port: number;\n stateDir: string;\n}\n\n/** Inspect Hestia's isolated Portless service without prompting or mutating it. */\nexport async function readHestiaRouterStatus(): Promise<HestiaRouterStatus> {\n const stateDir = hestiaPortlessStateDir();\n const portFile = join(stateDir, \"proxy.port\");\n const port = existsSync(portFile) ? Number(readFileSync(portFile, \"utf8\").trim()) : 443;\n let running = false;\n try {\n const response = await fetch(`https://127.0.0.1:${port}`, {\n signal: AbortSignal.timeout(500),\n tls: { rejectUnauthorized: false },\n } as RequestInit);\n running = response.headers.get(\"x-portless\") === \"1\";\n } catch {\n try {\n const response = await fetch(`http://127.0.0.1:${port}`, {\n signal: AbortSignal.timeout(500),\n });\n running = response.headers.get(\"x-portless\") === \"1\";\n } catch {}\n }\n return {\n installed: portlessServiceOwnership() === \"hestia\",\n running,\n trusted: await hestiaPortlessCaIsTrusted(),\n version: HESTIA_PORTLESS_VERSION,\n port: Number.isInteger(port) && port > 0 ? port : 443,\n stateDir,\n };\n}\n\nasync function hestiaPortlessCaIsTrusted(): Promise<boolean> {\n const caPath = join(hestiaPortlessStateDir(), \"ca.pem\");\n if (!existsSync(caPath)) return false;\n try {\n const { stdout } = await pexec(\n \"openssl\",\n [\"x509\", \"-in\", caPath, \"-noout\", \"-fingerprint\", \"-sha1\"],\n { timeout: 10_000 },\n );\n const fingerprint = stdout.replace(/^.*=/, \"\").replaceAll(\":\", \"\").trim().toLowerCase();\n const systemKeychain = \"/Library/Keychains/System.keychain\";\n if (await keychainHasFingerprint(systemKeychain, fingerprint)) return true;\n const { stdout: loginOutput } = await pexec(\n \"security\",\n [\"default-keychain\", \"-d\", \"user\"],\n { timeout: 10_000 },\n );\n const loginKeychain = loginOutput.trim().replace(/^\"|\"$/g, \"\");\n return loginKeychain !== \"\" && await keychainHasFingerprint(loginKeychain, fingerprint);\n } catch {\n return false;\n }\n}\n\nasync function runRootCommand(command: string, args: string[], interactive: boolean, optional = false): Promise<void> {\n if (interactive) {\n const result = spawnSync(\"sudo\", [command, ...args], { stdio: \"inherit\", timeout: 60_000 });\n if (!optional && (result.error !== undefined || result.status !== 0)) {\n throw result.error ?? new Error(`${command} exited ${result.status}`);\n }\n return;\n }\n try {\n await pexec(\"sudo\", [\"-n\", command, ...args], { timeout: 60_000 });\n } catch (error) {\n if (!optional) throw error;\n }\n}\n\nasync function prepareHardenedPortlessPayloadAt(\n installDir: string,\n interactive: boolean,\n): Promise<void> {\n const packageRoot = dirname(dirname(portlessCliPath()));\n const portlessDir = join(installDir, \"portless\");\n const bunPath = join(installDir, \"bun\");\n const provenanceSource = join(dirname(hestiaPortlessAliasesPath()), \"payload-provenance.json\");\n ensureDir(dirname(provenanceSource));\n writeAtomicJsonFile(provenanceSource, expectedPortlessPayloadProvenance());\n await runRootCommand(\"mkdir\", [\"-p\", installDir], interactive);\n await runRootCommand(\"rm\", [\"-rf\", portlessDir], interactive);\n await runRootCommand(\"ditto\", [packageRoot, portlessDir], interactive);\n await runRootCommand(\"cp\", [provenanceSource, join(portlessDir, \"provenance.json\")], interactive);\n await runRootCommand(\"cp\", [process.execPath, bunPath], interactive);\n await runRootCommand(\"chown\", [\"-R\", \"root:wheel\", installDir], interactive);\n await runRootCommand(\"chmod\", [\"-R\", \"go-w\", installDir], interactive);\n rmSync(provenanceSource, { force: true });\n}\n\nasync function prepareHardenedPortlessPayload(interactive: boolean): Promise<void> {\n await prepareHardenedPortlessPayloadAt(HESTIA_ROUTER_INSTALL_DIR, interactive);\n}\n\nasync function runHardenedPortlessService(\n action: \"install\" | \"uninstall\",\n interactive: boolean,\n): Promise<void> {\n await runRootCommand(\"env\", [\n `PORTLESS_STATE_DIR=${hestiaPortlessStateDir()}`,\n \"PORTLESS_SYNC_HOSTS=0\",\n `HESTIA_PORTLESS_ROUTES_PATH=${hestiaPortlessAliasesPath()}`,\n \"HESTIA_PORTLESS_ROOT_STATE=1\",\n `HESTIA_PORTLESS_ROUTES_UID=${process.getuid?.() ?? 0}`,\n HESTIA_ROUTER_BUN,\n HESTIA_ROUTER_CLI,\n \"service\",\n action,\n ], interactive);\n}\n\nasync function rollbackHardenedPortlessInstall(interactive: boolean): Promise<void> {\n await runRootCommand(\"launchctl\", [\"bootout\", \"system\", PORTLESS_LAUNCHD_PLIST], interactive, true);\n await runRootCommand(\"rm\", [\"-f\", PORTLESS_LAUNCHD_PLIST], interactive, true);\n try {\n await removeHestiaPortlessCa(interactive);\n } catch {}\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_INSTALL_DIR], interactive, true);\n rmSync(dirname(hestiaPortlessAliasesPath()), { recursive: true, force: true });\n}\n\nasync function trustHestiaPortlessCa(interactive: boolean): Promise<void> {\n await runRootCommand(\"env\", [\n `PORTLESS_STATE_DIR=${hestiaPortlessStateDir()}`,\n \"PORTLESS_SYNC_HOSTS=0\",\n HESTIA_ROUTER_BUN,\n HESTIA_ROUTER_CLI,\n \"trust\",\n ], interactive);\n}\n\nasync function keychainHasFingerprint(keychain: string, fingerprint: string): Promise<boolean> {\n try {\n const { stdout } = await pexec(\"security\", [\"find-certificate\", \"-Z\", \"-a\", keychain], {\n timeout: 10_000,\n });\n return stdout.replaceAll(/[^a-fA-F0-9]/g, \"\").toLowerCase().includes(fingerprint);\n } catch {\n return false;\n }\n}\n\nasync function removeHestiaPortlessCa(interactive: boolean): Promise<void> {\n const stateDir = hestiaPortlessStateDir();\n const caPath = join(stateDir, \"ca.pem\");\n if (!existsSync(caPath)) return;\n const { stdout } = await pexec(\"openssl\", [\"x509\", \"-in\", caPath, \"-noout\", \"-fingerprint\", \"-sha1\"], {\n timeout: 10_000,\n });\n const fingerprint = stdout.replace(/^.*=/, \"\").replaceAll(\":\", \"\").trim().toLowerCase();\n const systemKeychain = \"/Library/Keychains/System.keychain\";\n try {\n const { stdout: loginOutput } = await pexec(\"security\", [\"default-keychain\", \"-d\", \"user\"], {\n timeout: 10_000,\n });\n const loginKeychain = loginOutput.trim().replace(/^\"|\"$/g, \"\");\n if (loginKeychain && await keychainHasFingerprint(loginKeychain, fingerprint)) {\n await pexec(\"security\", [\"delete-certificate\", \"-Z\", fingerprint, loginKeychain], { timeout: 30_000 });\n }\n } catch (error) {\n throw new Error(`could not remove Hestia CA from the login keychain: ${(error as Error).message}`);\n }\n if (await keychainHasFingerprint(systemKeychain, fingerprint)) {\n const args = [\"security\", \"delete-certificate\", \"-Z\", fingerprint, systemKeychain];\n if (interactive) {\n const result = spawnSync(\"sudo\", args, { stdio: \"inherit\", timeout: 60_000 });\n if (result.error !== undefined || result.status !== 0) {\n throw result.error ?? new Error(`security delete-certificate exited ${result.status}`);\n }\n } else {\n await pexec(\"sudo\", [\"-n\", ...args], { timeout: 60_000 });\n }\n }\n}\n\nfunction requireNonInteractivePrivilege(): void {\n if (process.platform === \"win32\" || process.getuid?.() === 0) return;\n const result = spawnSync(\"sudo\", [\"-n\", \"true\"], {\n stdio: \"ignore\",\n timeout: 2_000,\n });\n if (result.status !== 0) {\n throw new HestiaError(\n \"router-privilege-required\",\n \"Router install: trusted HTTPS setup requires an administrator action\",\n { command: \"hestia router install --interactive\", requiresTTY: true },\n );\n }\n}\n\nasync function loopbackPortIsBusy(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = createConnection({ host: \"127.0.0.1\", port });\n const finish = (busy: boolean) => {\n socket.destroy();\n resolve(busy);\n };\n socket.setTimeout(500, () => finish(false));\n socket.once(\"connect\", () => finish(true));\n socket.once(\"error\", () => finish(false));\n });\n}\n\nasync function waitForInstalledHestiaRouter(timeoutMs = 10_000): Promise<HestiaRouterStatus> {\n const deadline = Date.now() + timeoutMs;\n let status = await readHestiaRouterStatus();\n while (Date.now() < deadline && !(status.installed && status.running && status.trusted)) {\n await new Promise((resolve) => setTimeout(resolve, 200));\n status = await readHestiaRouterStatus();\n }\n if (!(status.installed && status.running && status.trusted)) {\n throw new HestiaError(\n \"router-unreachable\",\n \"Router install did not produce a running, trusted, Hestia-owned service\",\n );\n }\n return status;\n}\n\nasync function waitForRunningHestiaRouter(timeoutMs = 10_000): Promise<HestiaRouterStatus> {\n const deadline = Date.now() + timeoutMs;\n let status = await readHestiaRouterStatus();\n while (Date.now() < deadline && !(status.installed && status.running)) {\n await new Promise((resolve) => setTimeout(resolve, 200));\n status = await readHestiaRouterStatus();\n }\n if (!(status.installed && status.running)) {\n throw new HestiaError(\n \"router-unreachable\",\n \"Router payload upgrade did not produce a running, Hestia-owned service\",\n );\n }\n return status;\n}\n\nasync function returnWithCurrentDaemon(status: HestiaRouterStatus): Promise<HestiaRouterStatus> {\n await ensureDaemon();\n return status;\n}\n\nasync function upgradeHardenedPortlessPayloadUnlocked(\n interactive: boolean,\n): Promise<HestiaRouterStatus> {\n const stagedPortless = join(HESTIA_ROUTER_STAGED_DIR, \"portless\");\n const stagedBun = join(HESTIA_ROUTER_STAGED_DIR, \"bun\");\n const previousPortless = join(HESTIA_ROUTER_PREVIOUS_DIR, \"portless\");\n const previousBun = join(HESTIA_ROUTER_PREVIOUS_DIR, \"bun\");\n let preservePrevious = false;\n try {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_STAGED_DIR, HESTIA_ROUTER_PREVIOUS_DIR], interactive);\n await prepareHardenedPortlessPayloadAt(HESTIA_ROUTER_STAGED_DIR, interactive);\n await runRootCommand(\"mkdir\", [\"-p\", HESTIA_ROUTER_PREVIOUS_DIR], interactive);\n await runRootCommand(\"ditto\", [HESTIA_ROUTER_PORTLESS, previousPortless], interactive);\n await runRootCommand(\"cp\", [HESTIA_ROUTER_BUN, previousBun], interactive);\n await runHardenedPortlessService(\"uninstall\", interactive);\n try {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_PORTLESS], interactive);\n await runRootCommand(\"ditto\", [stagedPortless, HESTIA_ROUTER_PORTLESS], interactive);\n await runRootCommand(\"cp\", [stagedBun, HESTIA_ROUTER_BUN], interactive);\n await runRootCommand(\"chown\", [\"-R\", \"root:wheel\", HESTIA_ROUTER_INSTALL_DIR], interactive);\n await runRootCommand(\"chmod\", [\"-R\", \"go-w\", HESTIA_ROUTER_INSTALL_DIR], interactive);\n await runHardenedPortlessService(\"install\", interactive);\n return await waitForRunningHestiaRouter();\n } catch (upgradeError) {\n await runHardenedPortlessService(\"uninstall\", interactive).catch(() => {});\n try {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_PORTLESS], interactive);\n await runRootCommand(\"ditto\", [previousPortless, HESTIA_ROUTER_PORTLESS], interactive);\n await runRootCommand(\"cp\", [previousBun, HESTIA_ROUTER_BUN], interactive);\n await runRootCommand(\"chown\", [\"-R\", \"root:wheel\", HESTIA_ROUTER_INSTALL_DIR], interactive);\n await runRootCommand(\"chmod\", [\"-R\", \"go-w\", HESTIA_ROUTER_INSTALL_DIR], interactive);\n await runHardenedPortlessService(\"install\", interactive);\n await waitForRunningHestiaRouter();\n } catch (restoreError) {\n preservePrevious = true;\n throw new Error(\n `new payload failed (${(upgradeError as Error).message}); previous payload restore failed ` +\n `(${(restoreError as Error).message})`,\n );\n }\n throw upgradeError;\n }\n } finally {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_STAGED_DIR], interactive, true);\n if (!preservePrevious) {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_PREVIOUS_DIR], interactive, true);\n }\n }\n}\n\nasync function upgradeHardenedPortlessPayload(\n interactive: boolean,\n): Promise<HestiaRouterStatus> {\n const uid = process.getuid?.() ?? 501;\n const lockRoot = join(tmpdir(), `hestia-${uid}`, \"router-payload-upgrade\");\n return withLock(\n lockRoot,\n () => upgradeHardenedPortlessPayloadUnlocked(interactive),\n 120_000,\n );\n}\n\n/** Install the trusted Portless service; non-interactive mode never waits for sudo. */\nexport async function installHestiaRouter(interactive: boolean): Promise<HestiaRouterStatus> {\n const ownership = requireHestiaServiceOwnership(\"install\");\n const existing = await readHestiaRouterStatus();\n const payloadCurrent = ownership === \"hestia\" && installedPortlessPayloadIsCurrent();\n if (ownership === \"hestia\" && existing.running && existing.trusted && payloadCurrent) {\n return returnWithCurrentDaemon(existing);\n }\n if (ownership === \"hestia\" && existing.running && !payloadCurrent) {\n if (interactive && !process.stdin.isTTY) {\n throw new HestiaError(\"router-privilege-required\", \"Router install: --interactive requires a TTY\");\n }\n if (!interactive) requireNonInteractivePrivilege();\n try {\n let upgraded = await upgradeHardenedPortlessPayload(interactive);\n if (!upgraded.trusted) {\n await trustHestiaPortlessCa(interactive);\n upgraded = await waitForInstalledHestiaRouter();\n }\n return returnWithCurrentDaemon(upgraded);\n } catch (error) {\n const detail = (error as { stderr?: string; message?: string }).stderr ?? (error as Error).message;\n throw new HestiaError(\"router-unreachable\", `Router payload upgrade failed: ${detail.trim()}`);\n }\n }\n if (ownership === \"hestia\" && existing.running) {\n if (interactive && !process.stdin.isTTY) {\n throw new HestiaError(\"router-privilege-required\", \"Router install: --interactive requires a TTY\");\n }\n if (!interactive) requireNonInteractivePrivilege();\n try {\n await trustHestiaPortlessCa(interactive);\n } catch (error) {\n throw new HestiaError(\"router-unreachable\", `Router trust failed: ${(error as Error).message}`);\n }\n const trusted = await readHestiaRouterStatus();\n if (!trusted.trusted) throw new HestiaError(\"router-unreachable\", \"Router trust failed: CA remains untrusted\");\n return returnWithCurrentDaemon(trusted);\n }\n if (await loopbackPortIsBusy(443)) {\n throw new HestiaError(\"router-port-busy\", \"Router install: port 443 is already owned by another process\");\n }\n if (interactive) {\n if (!process.stdin.isTTY) {\n throw new HestiaError(\"router-privilege-required\", \"Router install: --interactive requires a TTY\");\n }\n } else {\n requireNonInteractivePrivilege();\n }\n ensureDir(dirname(hestiaPortlessAliasesPath()));\n if (!existsSync(hestiaPortlessAliasesPath())) {\n writeAtomicJsonFile(hestiaPortlessAliasesPath(), []);\n }\n try {\n // Bootstrap only from the already root-owned payload. There is never a\n // root LaunchDaemon whose ProgramArguments reference workspace files.\n await prepareHardenedPortlessPayload(interactive);\n await runHardenedPortlessService(\"install\", interactive);\n } catch (error) {\n await rollbackHardenedPortlessInstall(interactive);\n const detail = (error as { stderr?: string; message?: string }).stderr ?? (error as Error).message;\n if (/address already in use|port 443|EADDRINUSE/i.test(detail)) {\n throw new HestiaError(\"router-port-busy\", \"Router install: port 443 is already owned by another process\");\n }\n throw new HestiaError(\"router-unreachable\", `Router install failed: ${detail.trim()}`);\n }\n return returnWithCurrentDaemon(await waitForInstalledHestiaRouter());\n}\n\n/** Uninstall the Hestia-owned Portless service; non-interactive mode never waits for sudo. */\nexport async function uninstallHestiaRouter(interactive: boolean): Promise<HestiaRouterStatus> {\n const ownership = requireHestiaServiceOwnership(\"uninstall\");\n if (ownership === \"absent\" && !existsSync(hestiaPortlessAliasesPath())) {\n return readHestiaRouterStatus();\n }\n if (interactive && !process.stdin.isTTY) {\n throw new HestiaError(\"router-privilege-required\", \"Router uninstall: --interactive requires a TTY\");\n }\n if (!interactive) requireNonInteractivePrivilege();\n try {\n if (ownership === \"hestia\") {\n await runHardenedPortlessService(\"uninstall\", interactive);\n }\n await removeHestiaPortlessCa(interactive);\n if (ownership === \"hestia\") {\n await runRootCommand(\"rm\", [\"-rf\", HESTIA_ROUTER_INSTALL_DIR], interactive);\n }\n rmSync(dirname(hestiaPortlessAliasesPath()), { recursive: true, force: true });\n } catch (error) {\n const detail = (error as { stderr?: string; message?: string }).stderr ?? (error as Error).message;\n throw new HestiaError(\"router-unreachable\", `Router uninstall failed: ${detail.trim()}`);\n }\n return readHestiaRouterStatus();\n}\n",
|
|
104
|
-
"import { execFile } from \"node:child_process\";\nimport { Agent, createServer, request as httpRequest, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { createConnection, createServer as createNetServer, type Socket } from \"node:net\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { chmodSync, lstatSync, mkdirSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { slug, type ServiceRecord, type StackRecord } from \"@hestia/core\";\nimport { isLive } from \"../proc/pidfile.ts\";\nimport { inspectPort } from \"../proc/ports.ts\";\nimport { hestiaHome, parseStackRecord } from \"../state.ts\";\nimport {\n effectiveLocalRouteServices,\n effectiveLocalRoutes,\n localRouteKey,\n localRouteHostname,\n readHestiaMachineConfig,\n resolveLocalRouteHostnames,\n type HestiaMachineConfig,\n} from \"./router-config.ts\";\nimport { reconcilePortlessAliases } from \"./portless-adapter.ts\";\n\nconst pexec = promisify(execFile);\nconst ROUTE_REFRESH_MS = 1_000;\nconst MAX_MIRROR_BYTES = 2 * 1024 * 1024;\nconst MAX_REQUEST_HEADER_BYTES = 64 * 1024;\nconst HOP_BY_HOP_HEADERS = new Set([\n \"connection\", \"keep-alive\", \"proxy-authenticate\", \"proxy-authorization\",\n \"te\", \"trailer\", \"transfer-encoding\", \"upgrade\",\n]);\n\ninterface LocalRouterTarget {\n hostname: string;\n project: string;\n service?: ServiceRecord;\n agent?: Agent;\n}\n\nclass OriginOwnershipError extends Error {}\n\nexport function readRouterStackRecords(): StackRecord[] {\n const stacksDir = join(hestiaHome(), \"stacks\");\n if (!existsSync(stacksDir)) return [];\n const records: StackRecord[] = [];\n for (const project of readdirSync(stacksDir).sort()) {\n const path = join(stacksDir, project, \"stack.json\");\n try {\n const source = readFileSync(path);\n if (source.byteLength > MAX_MIRROR_BYTES) continue;\n const record = parseStackRecord(source.toString(\"utf8\"), path);\n if (record.project === project) records.push(record);\n } catch {}\n }\n return records;\n}\n\n/** Resolve one route against all mirrored peers so collision hashes stay consistent. */\nexport function resolvedLocalRouteHostname(\n record: StackRecord,\n service: string,\n config: HestiaMachineConfig = readHestiaMachineConfig().config,\n): string {\n const records = readRouterStackRecords().filter((candidate) => candidate.project !== record.project);\n records.push(record);\n return resolveLocalRouteHostnames(records, config).get(localRouteKey(record, service)) ??\n localRouteHostname(record, service, config);\n}\n\nfunction parseRouteAuthority(authority: string | undefined): string | null {\n const match = authority?.trim().match(/^([a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::([0-9]{1,5}))?$/i);\n if (match === null || match === undefined) return null;\n const hostname = match[1]!.toLowerCase();\n const port = match[2] === undefined ? undefined : Number(match[2]);\n if (hostname.includes(\"..\") || hostname.split(\".\").some((label) => label.length > 63)) return null;\n if (port !== undefined && (port < 1 || port > 65_535)) return null;\n return hostname;\n}\n\nfunction connectionHeaderTokens(value: string | string[] | undefined): Set<string> {\n const values = Array.isArray(value) ? value : value === undefined ? [] : [value];\n return new Set(values.flatMap((entry) => entry.split(\",\"))\n .map((token) => token.trim().toLowerCase())\n .filter((token) => /^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(token)));\n}\n\nfunction forwardedHeaders(request: IncomingMessage, originPort: number): IncomingMessage[\"headers\"] {\n const headers = { ...request.headers };\n const connectionNames = connectionHeaderTokens(request.headers.connection);\n for (const name of Object.keys(headers)) {\n if (HOP_BY_HOP_HEADERS.has(name) || connectionNames.has(name) || name.startsWith(\"x-forwarded-\")) {\n delete headers[name];\n }\n }\n const incomingHost = request.headers.host ?? \"\";\n // Dev origins commonly reject unknown hosts. Connect and present loopback to the\n // origin while preserving the stable user-facing hostname in X-Forwarded-Host.\n headers.host = `127.0.0.1:${originPort}`;\n delete headers[\"x-forwarded-host\"];\n delete headers[\"x-forwarded-proto\"];\n delete headers[\"x-forwarded-for\"];\n headers[\"x-forwarded-host\"] = incomingHost;\n headers[\"x-forwarded-proto\"] = \"https\";\n const remote = request.socket.remoteAddress;\n if (remote) headers[\"x-forwarded-for\"] = remote;\n return headers;\n}\n\nasync function verifyDockerRouteTarget(target: LocalRouterTarget, port: number): Promise<boolean> {\n try {\n const service = target.service!;\n const args = [\n \"ps\", \"--no-trunc\", \"--format\", \"{{.ID}}\\t{{.Ports}}\",\n \"--filter\", `label=dev.hestia.stack=${target.project}`,\n \"--filter\", `label=com.docker.compose.service=${service.name}`,\n ];\n const { stdout } = await pexec(\"docker\", args, { timeout: 2_000 });\n return stdout.split(\"\\n\").some((line) => {\n const [id, ports = \"\"] = line.split(\"\\t\");\n const identityMatches = service.containerId === undefined || id?.startsWith(service.containerId);\n return identityMatches && new RegExp(`(?:127\\\\.0\\\\.0\\\\.1|0\\\\.0\\\\.0\\\\.0):${port}->`).test(ports);\n });\n } catch {\n return false;\n }\n}\n\nasync function verifyLocalRouterTarget(target: LocalRouterTarget): Promise<number | null> {\n const service = target.service;\n const port = service?.publishedPort;\n if (service === undefined || port === undefined || service.backend === \"tunnel\") return null;\n if (service.backend === \"docker\") {\n return await verifyDockerRouteTarget(target, port) ? port : null;\n }\n if (service.pid === undefined || service.startTime === undefined) return null;\n if (!isLive({ pid: service.pid, startTime: service.startTime })) return null;\n try {\n return (await inspectPort(service.pid, port)).ownerIsMember ? port : null;\n } catch {\n return null;\n }\n}\n\n/** Verify one persisted service still owns its direct loopback origin. */\nexport async function verifyStackServiceOrigin(\n record: StackRecord,\n service: ServiceRecord,\n publishedPort = service.publishedPort,\n): Promise<boolean> {\n return await verifyLocalRouterTarget({\n hostname: \"\",\n project: record.project,\n service: { ...service, publishedPort },\n }) !== null;\n}\n\nfunction targetIdentity(target: LocalRouterTarget): string {\n const service = target.service;\n return [target.project, service?.name, service?.backend, service?.publishedPort,\n service?.pid, service?.startTime, service?.containerId].join(\"\\0\");\n}\n\nfunction verifiedOriginAgent(target: LocalRouterTarget, port: number): Agent {\n if (target.agent !== undefined) return target.agent;\n const agent = new Agent({ keepAlive: true, maxSockets: 32 });\n agent.createConnection = ((\n _options: unknown,\n callback: (error: Error | null, socket?: Socket) => void,\n ) => {\n let settled = false;\n const finish = (error: Error | null, socket?: Socket) => {\n if (settled) return;\n settled = true;\n callback(error, socket);\n };\n const socket = createConnection({ host: \"127.0.0.1\", port });\n socket.once(\"connect\", () => {\n // No request bytes are written until the Agent receives this callback.\n // Verify after connect so a recycled listener cannot win the gap between\n // ownership inspection and socket establishment.\n void verifyLocalRouterTarget(target).then((verifiedPort) => {\n if (verifiedPort !== port) {\n socket.destroy();\n finish(new OriginOwnershipError(\"route origin ownership changed\"));\n return;\n }\n finish(null, socket);\n }).catch((error) => {\n socket.destroy();\n finish(error as Error);\n });\n });\n socket.once(\"error\", (error) => finish(error));\n return undefined;\n }) as typeof agent.createConnection;\n target.agent = agent;\n return agent;\n}\n\nexport function internalEndpointAuthority(project: string, service: string): string {\n const serviceLabel = slug(service).slice(0, 32);\n const hash = createHash(\"sha256\").update(`${project}\\0${service}`).digest(\"hex\").slice(0, 10);\n return `${serviceLabel}-${hash}.hestia.internal`;\n}\n\nexport function publicGatewaySocketPath(): string {\n const uid = process.getuid?.() ?? 501;\n const homeHash = createHash(\"sha256\").update(hestiaHome()).digest(\"hex\").slice(0, 12);\n return join(tmpdir(), `hestia-${uid}`, homeHash, \"origin.sock\");\n}\n\nfunction prepareGatewaySocket(path: string): void {\n const uid = process.getuid?.();\n const directories = [join(tmpdir(), `hestia-${uid ?? 501}`), join(tmpdir(), `hestia-${uid ?? 501}`, createHash(\"sha256\").update(hestiaHome()).digest(\"hex\").slice(0, 12))];\n for (const directory of directories) {\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n const stat = lstatSync(directory);\n if (!stat.isDirectory() || stat.isSymbolicLink() || (uid !== undefined && stat.uid !== uid)) {\n throw new Error(`unsafe Hestia gateway runtime directory ${directory}`);\n }\n chmodSync(directory, 0o700);\n }\n if (!existsSync(path)) return;\n const stat = lstatSync(path);\n if (stat.isSymbolicLink() || !stat.isSocket() || (uid !== undefined && stat.uid !== uid)) {\n throw new Error(`refusing unsafe existing Hestia gateway socket ${path}`);\n }\n rmSync(path);\n}\n\nfunction sendRouterResponse(response: ServerResponse, status: number, message: string): void {\n response.writeHead(status, { \"content-type\": \"text/plain; charset=utf-8\", \"x-hestia-router\": \"1\" });\n response.end(`${message}\\n`);\n}\n\n/** Hestiad-owned loopback HTTP and WebSocket router for stable local URLs. */\nexport class HestiaLocalHttpRouter {\n readonly #server = createServer((request, response) => void this.#proxyHttp(request, response));\n readonly #frontServer = createNetServer((socket) => this.#acceptFrontSocket(socket));\n readonly #unixServer = createNetServer((socket) => this.#acceptFrontSocket(socket));\n #targets = new Map<string, LocalRouterTarget>();\n #timer?: ReturnType<typeof setInterval>;\n\n async start(): Promise<number> {\n await new Promise<void>((resolve, reject) => {\n this.#server.once(\"error\", reject);\n this.#server.listen(0, \"127.0.0.1\", () => {\n this.#server.off(\"error\", reject);\n resolve();\n });\n });\n prepareGatewaySocket(this.socketPath);\n await new Promise<void>((resolve, reject) => {\n this.#unixServer.once(\"error\", reject);\n this.#unixServer.listen(this.socketPath, () => {\n this.#unixServer.off(\"error\", reject);\n chmodSync(this.socketPath, 0o600);\n resolve();\n });\n });\n await new Promise<void>((resolve, reject) => {\n this.#frontServer.once(\"error\", reject);\n this.#frontServer.listen(0, \"127.0.0.1\", () => {\n this.#frontServer.off(\"error\", reject);\n resolve();\n });\n });\n await this.refreshRoutes();\n this.#timer = setInterval(() => void this.refreshRoutes().catch((error) => {\n console.error(`router: periodic route refresh failed: ${(error as Error).message}`);\n }), ROUTE_REFRESH_MS);\n this.#timer.unref?.();\n return this.port;\n }\n\n get port(): number {\n const address = this.#frontServer.address();\n return typeof address === \"object\" && address !== null ? address.port : 0;\n }\n\n get socketPath(): string {\n return publicGatewaySocketPath();\n }\n\n /** Rebuild route targets from mirrors plus machine TOML and reconcile Portless aliases. */\n async refreshRoutes(): Promise<void> {\n const configResult = readHestiaMachineConfig();\n const targets = new Map<string, LocalRouterTarget>();\n const records = readRouterStackRecords();\n const hostnames = resolveLocalRouteHostnames(records, configResult.config);\n for (const record of records) {\n for (const route of effectiveLocalRoutes(record, configResult.config)) {\n const hostname = hostnames.get(localRouteKey(record, route.name));\n if (hostname === undefined) continue;\n const originalService = record.services.find((service) => service.name === route.service);\n const selectedBinding = route.selector === undefined\n ? undefined\n : originalService?.bindings?.find(\n (binding) => `${binding.target}/${binding.protocol}` === route.selector,\n );\n const candidate: LocalRouterTarget = {\n hostname,\n project: record.project,\n service: originalService === undefined\n ? undefined\n : { ...originalService, publishedPort: selectedBinding?.publishedPort ?? originalService.publishedPort },\n };\n const previous = this.#targets.get(hostname);\n targets.set(hostname, previous !== undefined && targetIdentity(previous) === targetIdentity(candidate)\n ? previous\n : candidate);\n }\n for (const endpoint of record.endpoints) {\n const service = record.services.find((candidate) =>\n candidate.name === (endpoint.workload ?? endpoint.name));\n const binding = service?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === endpoint.binding);\n const publishedPort = binding?.publishedPort ?? service?.publishedPort;\n if (service === undefined || service.backend === \"tunnel\" || publishedPort === undefined) continue;\n const authority = internalEndpointAuthority(record.project, endpoint.alias ?? endpoint.name);\n targets.set(authority, {\n hostname: authority,\n project: record.project,\n service: { ...service, publishedPort },\n });\n if (endpoint.publicUrl !== undefined) {\n try {\n const publicUrl = new URL(endpoint.publicUrl);\n if (publicUrl.protocol === \"https:\" || publicUrl.protocol === \"http:\") {\n targets.set(publicUrl.hostname.toLowerCase(), {\n hostname: publicUrl.hostname.toLowerCase(),\n project: record.project,\n service: { ...service, publishedPort },\n });\n }\n } catch {\n // Stack parsing validates structure, not URL syntax. Ignore a\n // malformed legacy public URL instead of disabling all routes.\n }\n }\n }\n for (const exposure of record.tunnel?.exposures ?? []) {\n const originalService = record.services.find((service) => service.name === exposure.service);\n const selectedBinding = originalService?.bindings?.find((binding) =>\n `${binding.target}/${binding.protocol}` === exposure.binding);\n const hostnames = exposure.keepHostHeader\n ? [exposure.hostname]\n : [\n exposure.hostname,\n internalEndpointAuthority(record.project, exposure.alias ?? exposure.service),\n ];\n for (const hostname of hostnames) {\n targets.set(hostname, {\n hostname,\n project: record.project,\n service: originalService === undefined ? undefined : {\n ...originalService,\n publishedPort: selectedBinding?.publishedPort ?? originalService.publishedPort,\n },\n });\n }\n }\n }\n reconcilePortlessAliases(\n [...targets.keys()].filter((hostname) => hostname.endsWith(\".localhost\")),\n this.port,\n );\n for (const [hostname, target] of this.#targets) {\n if (targets.get(hostname) !== target) target.agent?.destroy();\n }\n this.#targets = targets;\n }\n\n stop(): void {\n if (this.#timer) clearInterval(this.#timer);\n try {\n reconcilePortlessAliases([], this.port);\n } catch (error) {\n console.error(`router: alias cleanup failed: ${(error as Error).message}`);\n }\n for (const target of this.#targets.values()) target.agent?.destroy();\n this.#frontServer.close();\n this.#unixServer.close();\n rmSync(this.socketPath, { force: true });\n this.#server.close();\n }\n\n #acceptFrontSocket(socket: Socket): void {\n let buffered = Buffer.alloc(0);\n const onData = (chunk: Buffer) => {\n buffered = Buffer.concat([buffered, chunk]);\n if (buffered.length > MAX_REQUEST_HEADER_BYTES) {\n socket.end(\"HTTP/1.1 431 Request Header Fields Too Large\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n const boundary = buffered.indexOf(\"\\r\\n\\r\\n\");\n if (boundary < 0) return;\n socket.pause();\n socket.off(\"data\", onData);\n const header = buffered.subarray(0, boundary + 4).toString(\"latin1\");\n if (/\\r\\nupgrade:\\s*websocket\\s*\\r\\n/i.test(header)) {\n void this.#proxyWebSocket(socket, header, buffered.subarray(boundary + 4));\n } else {\n this.#proxyFrontHttp(socket, buffered);\n }\n };\n socket.on(\"data\", onData);\n }\n\n #proxyFrontHttp(socket: Socket, buffered: Buffer): void {\n const address = this.#server.address();\n const port = typeof address === \"object\" && address !== null ? address.port : 0;\n const internal = createConnection({ host: \"127.0.0.1\", port });\n internal.once(\"connect\", () => {\n internal.write(buffered);\n socket.pipe(internal).pipe(socket);\n socket.resume();\n });\n internal.once(\"error\", () => socket.end(\"HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\n\\r\\n\"));\n socket.once(\"error\", () => internal.destroy());\n }\n\n async #proxyHttp(request: IncomingMessage, response: ServerResponse): Promise<void> {\n const hostname = parseRouteAuthority(request.headers.host);\n if (hostname === null) return sendRouterResponse(response, 400, \"Malformed Host authority\");\n const target = this.#targets.get(hostname);\n if (target === undefined) return sendRouterResponse(response, 404, \"Hestia route not found\");\n const port = target.service?.publishedPort;\n if (port === undefined) return sendRouterResponse(response, 503, \"Hestia route origin unavailable\");\n if (await verifyLocalRouterTarget(target) !== port) {\n return sendRouterResponse(response, 503, \"Hestia route origin unavailable\");\n }\n const proxy = httpRequest({\n hostname: \"127.0.0.1\",\n port,\n method: request.method,\n path: request.url,\n headers: forwardedHeaders(request, port),\n agent: verifiedOriginAgent(target, port),\n }, (origin) => {\n const headers = { ...origin.headers };\n for (const name of HOP_BY_HOP_HEADERS) delete headers[name];\n response.writeHead(origin.statusCode ?? 502, headers);\n origin.on(\"error\", () => response.destroy());\n origin.on(\"aborted\", () => response.destroy());\n response.on(\"error\", () => origin.destroy());\n origin.pipe(response);\n });\n proxy.on(\"error\", (error) => {\n if (!response.headersSent) {\n const ownershipFailure = error instanceof OriginOwnershipError;\n sendRouterResponse(\n response,\n ownershipFailure ? 503 : 502,\n ownershipFailure ? \"Hestia route origin unavailable\" : \"Hestia route origin failed\",\n );\n }\n else response.destroy();\n });\n request.pipe(proxy);\n }\n\n async #proxyWebSocket(socket: Socket, header: string, head: Buffer): Promise<void> {\n const hostHeaders = [...header.matchAll(/\\r\\nhost:\\s*([^\\r\\n]+)/gi)];\n const incomingHost = hostHeaders.length === 1 ? hostHeaders[0]![1]!.trim() : undefined;\n const host = parseRouteAuthority(incomingHost);\n if (host === null) {\n socket.end(\"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n const target = this.#targets.get(host);\n const port = target?.service?.publishedPort;\n if (target === undefined || port === undefined) {\n socket.end(`HTTP/1.1 ${target === undefined ? \"404 Not Found\" : \"503 Service Unavailable\"}\\r\\n\\r\\n`);\n return;\n }\n const rawHeaderLines = header.slice(0, -4).split(\"\\r\\n\");\n const connectionValues = rawHeaderLines.slice(1)\n .filter((line) => /^connection:/i.test(line))\n .map((line) => line.slice(line.indexOf(\":\") + 1));\n const connectionNames = connectionHeaderTokens(connectionValues);\n const retainedHeaders = rawHeaderLines.slice(1).filter((line) => {\n const separator = line.indexOf(\":\");\n if (separator < 1) return false;\n const name = line.slice(0, separator).trim().toLowerCase();\n return name !== \"host\" && !HOP_BY_HOP_HEADERS.has(name) &&\n !connectionNames.has(name) && !name.startsWith(\"x-forwarded-\");\n });\n const rewrittenHeader = [\n rawHeaderLines[0]!,\n ...retainedHeaders,\n `Host: 127.0.0.1:${port}`,\n \"Connection: Upgrade\",\n \"Upgrade: websocket\",\n `X-Forwarded-Host: ${incomingHost}`,\n \"X-Forwarded-Proto: https\",\n `X-Forwarded-For: ${socket.remoteAddress ?? \"127.0.0.1\"}`,\n \"\",\n \"\",\n ].join(\"\\r\\n\");\n const originSocket = createConnection({ host: \"127.0.0.1\", port });\n originSocket.once(\"connect\", async () => {\n const verifiedPort = await verifyLocalRouterTarget(target);\n if (verifiedPort !== port) {\n originSocket.destroy();\n socket.end(\"HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n\");\n return;\n }\n socket.pipe(originSocket).pipe(socket);\n originSocket.write(rewrittenHeader, \"latin1\");\n if (head.length) originSocket.write(head);\n socket.resume();\n });\n originSocket.once(\"error\", () => {\n if (!socket.destroyed) socket.end(\"HTTP/1.1 502 Bad Gateway\\r\\n\\r\\n\");\n });\n socket.once(\"error\", () => originSocket.destroy());\n }\n}\n",
|
|
104
|
+
"import { existsSync, readFileSync, readdirSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n HestiaError,\n STATE_SCHEMA_VERSION,\n type SharedClaimWaiter,\n type SharedHolder,\n type SharedHostnameRecord,\n} from \"@hestia/core\";\nimport { hestiaHome } from \"../state.ts\";\nimport { withLock } from \"../proc/lock.ts\";\nimport { writeAtomicJsonFile } from \"../atomic-json-file.ts\";\n\n/**\n * The machine-owned shared-hostname store: one JSON file per stable public\n * hostname under ~/.hestia/shared/. Unlike TunnelExposure hostnames these\n * outlive every stack — the cloudflared rule is static and holder switches\n * are hestiad route-table updates, so the files are the only durable truth.\n *\n * Lock discipline: every mutation serializes on the shared root's own lock\n * (`withSharedLock`), and that lock NEVER nests inside the worktree or global\n * tunnel locks — callers mutate shared state before or after those sections.\n */\n\nconst NAME_RE = /^[a-z0-9][a-z0-9-]{0,62}$/;\nconst LABEL_RE = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n/** Path prefix chars: pchar-ish, no query/fragment, no whitespace. */\nconst PATH_SEGMENT_RE = /^[A-Za-z0-9._~!$&'()*+,;=:@%-]+$/;\n\nexport function sharedRoot(): string {\n return join(hestiaHome(), \"shared\");\n}\n\nfunction sharedPath(name: string): string {\n return join(sharedRoot(), `${name}.json`);\n}\n\nexport function assertSharedName(name: string): void {\n if (!NAME_RE.test(name)) {\n throw new HestiaError(\n \"usage\",\n `shared hostname handle ${JSON.stringify(name)} must be a DNS label: ` +\n `lowercase alphanumerics and hyphens, at most 63 characters`,\n );\n }\n}\n\n/**\n * A shared hostname may be ANY FQDN the user controls (not derived from the\n * handle). Validate it as a lowercased multi-label DNS name so a typo can't\n * mint an ingress rule that shadows a real one.\n */\nexport function assertSharedHostnameFqdn(hostname: string): void {\n const labels = hostname.split(\".\");\n const valid =\n hostname.length <= 253 &&\n hostname === hostname.toLowerCase() &&\n labels.length >= 2 &&\n labels.every((label) => LABEL_RE.test(label));\n if (!valid) {\n throw new HestiaError(\n \"usage\",\n `shared hostname ${JSON.stringify(hostname)} must be a fully-qualified ` +\n `lowercase domain (e.g. slack.acme.com)`,\n );\n }\n}\n\n/**\n * Normalize a path prefix to `/seg[/seg…]` (leading slash, no trailing slash)\n * or `undefined` for the whole-hostname route. Rejects query/fragment,\n * whitespace, and `..` traversal. `/` and `\"\"` normalize to `undefined`.\n */\nexport function normalizeSharedPath(input: string | undefined): string | undefined {\n if (input === undefined) return undefined;\n const trimmed = input.trim();\n // Empty segments (leading/trailing/repeated slashes) collapse like any router;\n // only genuine junk — traversal, query, fragment, whitespace — is rejected.\n const segments = trimmed.split(\"/\").filter((segment) => segment !== \"\");\n for (const segment of segments) {\n if (segment === \".\" || segment === \"..\" || !PATH_SEGMENT_RE.test(segment)) {\n throw new HestiaError(\n \"usage\",\n `shared hostname path ${JSON.stringify(input)} must be a URL path prefix ` +\n `like /webhooks/slack (no query, fragment, or \"..\" segments)`,\n );\n }\n }\n if (segments.length === 0) return undefined;\n return `/${segments.join(\"/\")}`;\n}\n\n/**\n * Longest-prefix path match at segment boundaries: `/slack` matches `/slack`\n * and `/slack/events` but never `/slackbot`. `undefined` (whole-host) matches\n * everything. Used by both the router hot path and the declare uniqueness test.\n */\nexport function sharedPathMatches(prefix: string | undefined, requestPath: string): boolean {\n if (prefix === undefined) return true;\n return requestPath === prefix || requestPath.startsWith(`${prefix}/`);\n}\n\nexport function withSharedLock<T>(fn: () => Promise<T>): Promise<T> {\n return withLock(sharedRoot(), fn);\n}\n\nfunction parseShared(source: string): SharedHostnameRecord | null {\n let value: Partial<SharedHostnameRecord>;\n try {\n value = JSON.parse(source) as Partial<SharedHostnameRecord>;\n } catch {\n return null;\n }\n if (\n value.schemaVersion !== STATE_SCHEMA_VERSION ||\n typeof value.name !== \"string\" || !NAME_RE.test(value.name) ||\n typeof value.hostname !== \"string\" || value.hostname.length === 0 ||\n typeof value.tunnelUuid !== \"string\" || value.tunnelUuid.length === 0 ||\n typeof value.zone !== \"string\" || value.zone.length === 0 ||\n typeof value.service !== \"string\" || value.service.length === 0 ||\n typeof value.createdAt !== \"string\"\n ) return null;\n if (value.path !== undefined && (typeof value.path !== \"string\" || !value.path.startsWith(\"/\"))) {\n return null;\n }\n if (value.holder !== undefined) {\n const holder = value.holder as Partial<SharedHolder>;\n if (\n typeof holder.project !== \"string\" ||\n typeof holder.worktree !== \"string\" ||\n typeof holder.service !== \"string\" ||\n typeof holder.at !== \"string\"\n ) return null;\n }\n if (value.queue !== undefined) {\n if (!Array.isArray(value.queue)) return null;\n for (const entry of value.queue as Array<Partial<SharedClaimWaiter>>) {\n if (\n typeof entry !== \"object\" || entry === null ||\n typeof entry.project !== \"string\" ||\n typeof entry.worktree !== \"string\" ||\n typeof entry.at !== \"string\"\n ) return null;\n }\n }\n return value as SharedHostnameRecord;\n}\n\nexport function readSharedHostname(name: string): SharedHostnameRecord | null {\n const p = sharedPath(name);\n if (!existsSync(p)) return null;\n try {\n return parseShared(readFileSync(p, \"utf8\"));\n } catch {\n return null;\n }\n}\n\n/** Tolerant read-all — an unreadable record disables itself, never the set. */\nexport function listSharedHostnames(): SharedHostnameRecord[] {\n const root = sharedRoot();\n if (!existsSync(root)) return [];\n const records: SharedHostnameRecord[] = [];\n for (const entry of readdirSync(root).sort()) {\n if (!entry.endsWith(\".json\")) continue;\n const record = readSharedHostname(entry.slice(0, -\".json\".length));\n if (record !== null && `${record.name}.json` === entry) records.push(record);\n }\n return records;\n}\n\n/**\n * Declare (or re-declare) one shared hostname. Idempotent when the existing\n * record already points at the same hostname and tunnel; a mismatch is a\n * conflict — silently re-pointing a stable URL is exactly the misdelivery\n * shared hostnames exist to prevent.\n */\nexport async function declareSharedHostname(\n record: Omit<SharedHostnameRecord, \"schemaVersion\" | \"createdAt\" | \"holder\">,\n): Promise<SharedHostnameRecord> {\n assertSharedName(record.name);\n assertSharedHostnameFqdn(record.hostname);\n const path = normalizeSharedPath(record.path);\n return withSharedLock(async () => {\n // (hostname, path) must be unique across handles: two handles may share a\n // hostname only when their paths differ (that IS path-based routing), but\n // an identical (hostname, path) pair is the ambiguous first-match the\n // router could never resolve deterministically.\n const collision = listSharedHostnames().find(\n (candidate) =>\n candidate.name !== record.name &&\n candidate.hostname === record.hostname &&\n (candidate.path ?? undefined) === (path ?? undefined),\n );\n if (collision !== undefined) {\n throw new HestiaError(\n \"shared-conflict\",\n `${record.hostname}${path ?? \"\"} is already declared as shared hostname ` +\n `\"${collision.name}\" — pick a distinct path or handle`,\n );\n }\n const existing = readSharedHostname(record.name);\n if (existing !== null) {\n if (\n existing.hostname !== record.hostname ||\n existing.tunnelUuid !== record.tunnelUuid ||\n (existing.path ?? undefined) !== (path ?? undefined)\n ) {\n throw new HestiaError(\n \"shared-conflict\",\n `shared hostname \"${record.name}\" already declared as ${existing.hostname}` +\n `${existing.path ?? \"\"} on tunnel ${existing.tunnelUuid} — release and remove it before re-pointing`,\n );\n }\n // Re-declare refreshes the service contract but never the holder.\n const merged: SharedHostnameRecord = { ...existing, service: record.service, zone: record.zone };\n writeAtomicJsonFile(sharedPath(record.name), merged);\n return merged;\n }\n const fresh: SharedHostnameRecord = {\n schemaVersion: STATE_SCHEMA_VERSION,\n ...record,\n createdAt: new Date().toISOString(),\n };\n // Persist the NORMALIZED path (or omit it) — never the caller's raw input.\n if (path === undefined) delete fresh.path;\n else fresh.path = path;\n writeAtomicJsonFile(sharedPath(record.name), fresh);\n return fresh;\n });\n}\n\n/**\n * Read-modify-write one record atomically under the shared lock. `mutate`\n * returns the next record (holder AND durable queue live in the same file, so\n * grant-and-dequeue is one atomic write). Returns null for an unknown name.\n */\nexport async function updateSharedHostname(\n name: string,\n mutate: (record: SharedHostnameRecord) => SharedHostnameRecord,\n): Promise<SharedHostnameRecord | null> {\n return withSharedLock(async () => {\n const existing = readSharedHostname(name);\n if (existing === null) return null;\n const next = mutate(structuredClone(existing));\n if (next.queue !== undefined && next.queue.length === 0) delete next.queue;\n if (next.holder === undefined) delete next.holder;\n writeAtomicJsonFile(sharedPath(name), next);\n return next;\n });\n}\n\n/** Set or clear the holder. Returns the updated record (null: unknown name). */\nexport async function setSharedHolder(\n name: string,\n holder: SharedHolder | undefined,\n): Promise<SharedHostnameRecord | null> {\n return updateSharedHostname(name, (record) => ({ ...record, holder }));\n}\n\n/** Remove a shared hostname declaration entirely (unclaimed only). */\nexport async function removeSharedHostname(name: string): Promise<void> {\n await withSharedLock(async () => {\n const existing = readSharedHostname(name);\n if (existing === null) return;\n if (existing.holder !== undefined) {\n throw new HestiaError(\n \"shared-held\",\n `shared hostname \"${name}\" is held by ${existing.holder.project} — release it first`,\n );\n }\n rmSync(sharedPath(name), { force: true });\n });\n}\n",
|
|
105
|
+
"import { execFile } from \"node:child_process\";\nimport { Agent, createServer, request as httpRequest, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { createConnection, createServer as createNetServer, type Socket } from \"node:net\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { chmodSync, lstatSync, mkdirSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { slug, type ServiceRecord, type StackRecord } from \"@hestia/core\";\nimport { isLive } from \"../proc/pidfile.ts\";\nimport { inspectPort } from \"../proc/ports.ts\";\nimport { hestiaHome, parseStackRecord } from \"../state.ts\";\nimport {\n effectiveLocalRouteServices,\n effectiveLocalRoutes,\n localRouteKey,\n localRouteHostname,\n readHestiaMachineConfig,\n resolveLocalRouteHostnames,\n type HestiaMachineConfig,\n} from \"./router-config.ts\";\nimport { reconcilePortlessAliases } from \"./portless-adapter.ts\";\nimport { listSharedHostnames, sharedPathMatches } from \"../tunnel/shared.ts\";\n\nconst pexec = promisify(execFile);\nconst ROUTE_REFRESH_MS = 1_000;\nconst MAX_MIRROR_BYTES = 2 * 1024 * 1024;\nconst MAX_REQUEST_HEADER_BYTES = 64 * 1024;\nconst HOP_BY_HOP_HEADERS = new Set([\n \"connection\", \"keep-alive\", \"proxy-authenticate\", \"proxy-authorization\",\n \"te\", \"trailer\", \"transfer-encoding\", \"upgrade\",\n]);\n\ninterface LocalRouterTarget {\n hostname: string;\n project: string;\n service?: ServiceRecord;\n agent?: Agent;\n}\n\n/**\n * One path-scoped route on a shared hostname. `path` undefined = the whole\n * hostname. `claimed` distinguishes an unclaimed handle (503 \"claim it\") from a\n * held-but-down origin (503 \"unavailable\"); `target` is present only when the\n * holder resolves to a routable live service.\n */\ninterface SharedRouteEntry {\n path?: string;\n name: string;\n claimed: boolean;\n target?: LocalRouterTarget;\n}\n\n/** Pathname of a request target, query/fragment stripped, defaulting to \"/\". */\nfunction pathnameOf(target: string | undefined): string {\n if (target === undefined || target.length === 0) return \"/\";\n const cut = target.search(/[?#]/);\n const path = cut < 0 ? target : target.slice(0, cut);\n return path.startsWith(\"/\") ? path : \"/\";\n}\n\nclass OriginOwnershipError extends Error {}\n\nexport function readRouterStackRecords(): StackRecord[] {\n const stacksDir = join(hestiaHome(), \"stacks\");\n if (!existsSync(stacksDir)) return [];\n const records: StackRecord[] = [];\n for (const project of readdirSync(stacksDir).sort()) {\n const path = join(stacksDir, project, \"stack.json\");\n try {\n const source = readFileSync(path);\n if (source.byteLength > MAX_MIRROR_BYTES) continue;\n const record = parseStackRecord(source.toString(\"utf8\"), path);\n if (record.project === project) records.push(record);\n } catch {}\n }\n return records;\n}\n\n/** Resolve one route against all mirrored peers so collision hashes stay consistent. */\nexport function resolvedLocalRouteHostname(\n record: StackRecord,\n service: string,\n config: HestiaMachineConfig = readHestiaMachineConfig().config,\n): string {\n const records = readRouterStackRecords().filter((candidate) => candidate.project !== record.project);\n records.push(record);\n return resolveLocalRouteHostnames(records, config).get(localRouteKey(record, service)) ??\n localRouteHostname(record, service, config);\n}\n\nfunction parseRouteAuthority(authority: string | undefined): string | null {\n const match = authority?.trim().match(/^([a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::([0-9]{1,5}))?$/i);\n if (match === null || match === undefined) return null;\n const hostname = match[1]!.toLowerCase();\n const port = match[2] === undefined ? undefined : Number(match[2]);\n if (hostname.includes(\"..\") || hostname.split(\".\").some((label) => label.length > 63)) return null;\n if (port !== undefined && (port < 1 || port > 65_535)) return null;\n return hostname;\n}\n\nfunction connectionHeaderTokens(value: string | string[] | undefined): Set<string> {\n const values = Array.isArray(value) ? value : value === undefined ? [] : [value];\n return new Set(values.flatMap((entry) => entry.split(\",\"))\n .map((token) => token.trim().toLowerCase())\n .filter((token) => /^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(token)));\n}\n\nfunction forwardedHeaders(request: IncomingMessage, originPort: number): IncomingMessage[\"headers\"] {\n const headers = { ...request.headers };\n const connectionNames = connectionHeaderTokens(request.headers.connection);\n for (const name of Object.keys(headers)) {\n if (HOP_BY_HOP_HEADERS.has(name) || connectionNames.has(name) || name.startsWith(\"x-forwarded-\")) {\n delete headers[name];\n }\n }\n const incomingHost = request.headers.host ?? \"\";\n // Dev origins commonly reject unknown hosts. Connect and present loopback to the\n // origin while preserving the stable user-facing hostname in X-Forwarded-Host.\n headers.host = `127.0.0.1:${originPort}`;\n delete headers[\"x-forwarded-host\"];\n delete headers[\"x-forwarded-proto\"];\n delete headers[\"x-forwarded-for\"];\n headers[\"x-forwarded-host\"] = incomingHost;\n headers[\"x-forwarded-proto\"] = \"https\";\n const remote = request.socket.remoteAddress;\n if (remote) headers[\"x-forwarded-for\"] = remote;\n return headers;\n}\n\nasync function verifyDockerRouteTarget(target: LocalRouterTarget, port: number): Promise<boolean> {\n try {\n const service = target.service!;\n const args = [\n \"ps\", \"--no-trunc\", \"--format\", \"{{.ID}}\\t{{.Ports}}\",\n \"--filter\", `label=dev.hestia.stack=${target.project}`,\n \"--filter\", `label=com.docker.compose.service=${service.name}`,\n ];\n const { stdout } = await pexec(\"docker\", args, { timeout: 2_000 });\n return stdout.split(\"\\n\").some((line) => {\n const [id, ports = \"\"] = line.split(\"\\t\");\n const identityMatches = service.containerId === undefined || id?.startsWith(service.containerId);\n return identityMatches && new RegExp(`(?:127\\\\.0\\\\.0\\\\.1|0\\\\.0\\\\.0\\\\.0):${port}->`).test(ports);\n });\n } catch {\n return false;\n }\n}\n\nasync function verifyLocalRouterTarget(target: LocalRouterTarget): Promise<number | null> {\n const service = target.service;\n const port = service?.publishedPort;\n if (service === undefined || port === undefined || service.backend === \"tunnel\") return null;\n if (service.backend === \"docker\") {\n return await verifyDockerRouteTarget(target, port) ? port : null;\n }\n if (service.pid === undefined || service.startTime === undefined) return null;\n if (!isLive({ pid: service.pid, startTime: service.startTime })) return null;\n try {\n return (await inspectPort(service.pid, port)).ownerIsMember ? port : null;\n } catch {\n return null;\n }\n}\n\n/** Verify one persisted service still owns its direct loopback origin. */\nexport async function verifyStackServiceOrigin(\n record: StackRecord,\n service: ServiceRecord,\n publishedPort = service.publishedPort,\n): Promise<boolean> {\n return await verifyLocalRouterTarget({\n hostname: \"\",\n project: record.project,\n service: { ...service, publishedPort },\n }) !== null;\n}\n\nfunction targetIdentity(target: LocalRouterTarget): string {\n const service = target.service;\n return [target.project, service?.name, service?.backend, service?.publishedPort,\n service?.pid, service?.startTime, service?.containerId].join(\"\\0\");\n}\n\nfunction verifiedOriginAgent(target: LocalRouterTarget, port: number): Agent {\n if (target.agent !== undefined) return target.agent;\n const agent = new Agent({ keepAlive: true, maxSockets: 32 });\n agent.createConnection = ((\n _options: unknown,\n callback: (error: Error | null, socket?: Socket) => void,\n ) => {\n let settled = false;\n const finish = (error: Error | null, socket?: Socket) => {\n if (settled) return;\n settled = true;\n callback(error, socket);\n };\n const socket = createConnection({ host: \"127.0.0.1\", port });\n socket.once(\"connect\", () => {\n // No request bytes are written until the Agent receives this callback.\n // Verify after connect so a recycled listener cannot win the gap between\n // ownership inspection and socket establishment.\n void verifyLocalRouterTarget(target).then((verifiedPort) => {\n if (verifiedPort !== port) {\n socket.destroy();\n finish(new OriginOwnershipError(\"route origin ownership changed\"));\n return;\n }\n finish(null, socket);\n }).catch((error) => {\n socket.destroy();\n finish(error as Error);\n });\n });\n socket.once(\"error\", (error) => finish(error));\n return undefined;\n }) as typeof agent.createConnection;\n target.agent = agent;\n return agent;\n}\n\nexport function internalEndpointAuthority(project: string, service: string): string {\n const serviceLabel = slug(service).slice(0, 32);\n const hash = createHash(\"sha256\").update(`${project}\\0${service}`).digest(\"hex\").slice(0, 10);\n return `${serviceLabel}-${hash}.hestia.internal`;\n}\n\nexport function publicGatewaySocketPath(): string {\n const uid = process.getuid?.() ?? 501;\n const homeHash = createHash(\"sha256\").update(hestiaHome()).digest(\"hex\").slice(0, 12);\n return join(tmpdir(), `hestia-${uid}`, homeHash, \"origin.sock\");\n}\n\nfunction prepareGatewaySocket(path: string): void {\n const uid = process.getuid?.();\n const directories = [join(tmpdir(), `hestia-${uid ?? 501}`), join(tmpdir(), `hestia-${uid ?? 501}`, createHash(\"sha256\").update(hestiaHome()).digest(\"hex\").slice(0, 12))];\n for (const directory of directories) {\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n const stat = lstatSync(directory);\n if (!stat.isDirectory() || stat.isSymbolicLink() || (uid !== undefined && stat.uid !== uid)) {\n throw new Error(`unsafe Hestia gateway runtime directory ${directory}`);\n }\n chmodSync(directory, 0o700);\n }\n if (!existsSync(path)) return;\n const stat = lstatSync(path);\n if (stat.isSymbolicLink() || !stat.isSocket() || (uid !== undefined && stat.uid !== uid)) {\n throw new Error(`refusing unsafe existing Hestia gateway socket ${path}`);\n }\n rmSync(path);\n}\n\nfunction sendRouterResponse(response: ServerResponse, status: number, message: string): void {\n response.writeHead(status, { \"content-type\": \"text/plain; charset=utf-8\", \"x-hestia-router\": \"1\" });\n response.end(`${message}\\n`);\n}\n\n/** Hestiad-owned loopback HTTP and WebSocket router for stable local URLs. */\nexport class HestiaLocalHttpRouter {\n readonly #server = createServer((request, response) => void this.#proxyHttp(request, response));\n readonly #frontServer = createNetServer((socket) => this.#acceptFrontSocket(socket));\n readonly #unixServer = createNetServer((socket) => this.#acceptFrontSocket(socket));\n #targets = new Map<string, LocalRouterTarget>();\n /**\n * Shared hostnames → their path-scoped routes (most-specific path first).\n * A shared hostname is served ONLY from here, never `#targets`, so per-branch\n * publicUrl projections can't shadow a path route. Empty list is impossible —\n * a hostname appears only if at least one handle declares it.\n */\n #sharedRoutes = new Map<string, SharedRouteEntry[]>();\n #timer?: ReturnType<typeof setInterval>;\n\n async start(): Promise<number> {\n await new Promise<void>((resolve, reject) => {\n this.#server.once(\"error\", reject);\n this.#server.listen(0, \"127.0.0.1\", () => {\n this.#server.off(\"error\", reject);\n resolve();\n });\n });\n prepareGatewaySocket(this.socketPath);\n await new Promise<void>((resolve, reject) => {\n this.#unixServer.once(\"error\", reject);\n this.#unixServer.listen(this.socketPath, () => {\n this.#unixServer.off(\"error\", reject);\n chmodSync(this.socketPath, 0o600);\n resolve();\n });\n });\n await new Promise<void>((resolve, reject) => {\n this.#frontServer.once(\"error\", reject);\n this.#frontServer.listen(0, \"127.0.0.1\", () => {\n this.#frontServer.off(\"error\", reject);\n resolve();\n });\n });\n await this.refreshRoutes();\n this.#timer = setInterval(() => void this.refreshRoutes().catch((error) => {\n console.error(`router: periodic route refresh failed: ${(error as Error).message}`);\n }), ROUTE_REFRESH_MS);\n this.#timer.unref?.();\n return this.port;\n }\n\n get port(): number {\n const address = this.#frontServer.address();\n return typeof address === \"object\" && address !== null ? address.port : 0;\n }\n\n get socketPath(): string {\n return publicGatewaySocketPath();\n }\n\n /** Rebuild route targets from mirrors plus machine TOML and reconcile Portless aliases. */\n async refreshRoutes(): Promise<void> {\n const configResult = readHestiaMachineConfig();\n const targets = new Map<string, LocalRouterTarget>();\n const records = readRouterStackRecords();\n const hostnames = resolveLocalRouteHostnames(records, configResult.config);\n for (const record of records) {\n for (const route of effectiveLocalRoutes(record, configResult.config)) {\n const hostname = hostnames.get(localRouteKey(record, route.name));\n if (hostname === undefined) continue;\n const originalService = record.services.find((service) => service.name === route.service);\n const selectedBinding = route.selector === undefined\n ? undefined\n : originalService?.bindings?.find(\n (binding) => `${binding.target}/${binding.protocol}` === route.selector,\n );\n const candidate: LocalRouterTarget = {\n hostname,\n project: record.project,\n service: originalService === undefined\n ? undefined\n : { ...originalService, publishedPort: selectedBinding?.publishedPort ?? originalService.publishedPort },\n };\n const previous = this.#targets.get(hostname);\n targets.set(hostname, previous !== undefined && targetIdentity(previous) === targetIdentity(candidate)\n ? previous\n : candidate);\n }\n for (const endpoint of record.endpoints) {\n const service = record.services.find((candidate) =>\n candidate.name === (endpoint.workload ?? endpoint.name));\n const binding = service?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === endpoint.binding);\n const publishedPort = binding?.publishedPort ?? service?.publishedPort;\n if (service === undefined || service.backend === \"tunnel\" || publishedPort === undefined) continue;\n const authority = internalEndpointAuthority(record.project, endpoint.alias ?? endpoint.name);\n targets.set(authority, {\n hostname: authority,\n project: record.project,\n service: { ...service, publishedPort },\n });\n if (endpoint.publicUrl !== undefined) {\n try {\n const publicUrl = new URL(endpoint.publicUrl);\n if (publicUrl.protocol === \"https:\" || publicUrl.protocol === \"http:\") {\n targets.set(publicUrl.hostname.toLowerCase(), {\n hostname: publicUrl.hostname.toLowerCase(),\n project: record.project,\n service: { ...service, publishedPort },\n });\n }\n } catch {\n // Stack parsing validates structure, not URL syntax. Ignore a\n // malformed legacy public URL instead of disabling all routes.\n }\n }\n }\n for (const exposure of record.tunnel?.exposures ?? []) {\n const originalService = record.services.find((service) => service.name === exposure.service);\n const selectedBinding = originalService?.bindings?.find((binding) =>\n `${binding.target}/${binding.protocol}` === exposure.binding);\n const hostnames = exposure.keepHostHeader\n ? [exposure.hostname]\n : [\n exposure.hostname,\n internalEndpointAuthority(record.project, exposure.alias ?? exposure.service),\n ];\n for (const hostname of hostnames) {\n targets.set(hostname, {\n hostname,\n project: record.project,\n service: originalService === undefined ? undefined : {\n ...originalService,\n publishedPort: selectedBinding?.publishedPort ?? originalService.publishedPort,\n },\n });\n }\n }\n }\n // Shared hostnames are served ONLY from #sharedRoutes (path-scoped), never\n // #targets — so a former holder's stale publicUrl projection can't shadow a\n // path route. A hostname may carry several path-scoped handles.\n const sharedRoutes = new Map<string, SharedRouteEntry[]>();\n for (const shared of listSharedHostnames()) {\n const hostname = shared.hostname.toLowerCase();\n targets.delete(hostname);\n const holder = shared.holder;\n let target: LocalRouterTarget | undefined;\n if (holder !== undefined) {\n const stack = records.find((record) => record.project === holder.project);\n const endpoint = stack?.endpoints.find(\n (candidate) => (candidate.alias ?? candidate.name) === holder.service,\n );\n const service = stack?.services.find(\n (candidate) => candidate.name === (endpoint?.workload ?? endpoint?.name),\n );\n const binding = service?.bindings?.find(\n (candidate) => `${candidate.target}/${candidate.protocol}` === endpoint?.binding,\n );\n const publishedPort = binding?.publishedPort ?? service?.publishedPort;\n const candidate: LocalRouterTarget = {\n hostname,\n project: holder.project,\n // Holder without a resolvable live origin keeps a target so requests\n // answer 503 \"origin unavailable\" instead of 404 — the claim is real,\n // the stack is just down (it re-`up`s straight back into service).\n service: service === undefined || service.backend === \"tunnel\" || publishedPort === undefined\n ? undefined\n : { ...service, publishedPort },\n };\n // Reuse the prior entry's target object (and its keep-alive agent) when\n // nothing material changed, so long-lived connections aren't churned.\n const previous = this.#sharedRoutes.get(hostname)?.find((entry) => entry.name === shared.name)?.target;\n target = previous !== undefined && targetIdentity(previous) === targetIdentity(candidate)\n ? previous\n : candidate;\n }\n const list = sharedRoutes.get(hostname) ?? [];\n list.push({ path: shared.path, name: shared.name, claimed: holder !== undefined, target });\n sharedRoutes.set(hostname, list);\n }\n // Most-specific path first; the whole-host route (undefined) matches last.\n for (const list of sharedRoutes.values()) {\n list.sort((left, right) => (right.path?.length ?? -1) - (left.path?.length ?? -1));\n }\n reconcilePortlessAliases(\n [...targets.keys()].filter((hostname) => hostname.endsWith(\".localhost\")),\n this.port,\n );\n // Destroy keep-alive agents whose target object is no longer retained in\n // either the direct-target map or the shared-route table.\n const retained = new Set<LocalRouterTarget>(targets.values());\n for (const list of sharedRoutes.values()) {\n for (const entry of list) if (entry.target !== undefined) retained.add(entry.target);\n }\n const priorTargets: LocalRouterTarget[] = [...this.#targets.values()];\n for (const list of this.#sharedRoutes.values()) {\n for (const entry of list) if (entry.target !== undefined) priorTargets.push(entry.target);\n }\n for (const target of priorTargets) {\n if (!retained.has(target)) target.agent?.destroy();\n }\n this.#targets = targets;\n this.#sharedRoutes = sharedRoutes;\n }\n\n stop(): void {\n if (this.#timer) clearInterval(this.#timer);\n try {\n reconcilePortlessAliases([], this.port);\n } catch (error) {\n console.error(`router: alias cleanup failed: ${(error as Error).message}`);\n }\n for (const target of this.#targets.values()) target.agent?.destroy();\n this.#frontServer.close();\n this.#unixServer.close();\n rmSync(this.socketPath, { force: true });\n this.#server.close();\n }\n\n #acceptFrontSocket(socket: Socket): void {\n let buffered = Buffer.alloc(0);\n const onData = (chunk: Buffer) => {\n buffered = Buffer.concat([buffered, chunk]);\n if (buffered.length > MAX_REQUEST_HEADER_BYTES) {\n socket.end(\"HTTP/1.1 431 Request Header Fields Too Large\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n const boundary = buffered.indexOf(\"\\r\\n\\r\\n\");\n if (boundary < 0) return;\n socket.pause();\n socket.off(\"data\", onData);\n const header = buffered.subarray(0, boundary + 4).toString(\"latin1\");\n if (/\\r\\nupgrade:\\s*websocket\\s*\\r\\n/i.test(header)) {\n void this.#proxyWebSocket(socket, header, buffered.subarray(boundary + 4));\n } else {\n this.#proxyFrontHttp(socket, buffered);\n }\n };\n socket.on(\"data\", onData);\n }\n\n #proxyFrontHttp(socket: Socket, buffered: Buffer): void {\n const address = this.#server.address();\n const port = typeof address === \"object\" && address !== null ? address.port : 0;\n const internal = createConnection({ host: \"127.0.0.1\", port });\n internal.once(\"connect\", () => {\n internal.write(buffered);\n socket.pipe(internal).pipe(socket);\n socket.resume();\n });\n internal.once(\"error\", () => socket.end(\"HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\n\\r\\n\"));\n socket.once(\"error\", () => internal.destroy());\n }\n\n /**\n * Resolve a request to its origin target, or a terminal status to send.\n * Shared hostnames route by longest path prefix (a hostname present in\n * `#sharedRoutes` is served ONLY from there); everything else is a direct\n * `#targets` lookup.\n */\n #matchTarget(hostname: string, requestPath: string):\n | { target: LocalRouterTarget }\n | { status: number; message: string } {\n const routes = this.#sharedRoutes.get(hostname);\n if (routes !== undefined) {\n const entry = routes.find((candidate) => sharedPathMatches(candidate.path, requestPath));\n if (entry === undefined) return { status: 404, message: \"Hestia route not found\" };\n if (!entry.claimed) {\n return {\n status: 503,\n message: `Shared hostname unclaimed — run \\`hestia claim ${entry.name}\\` in the worktree that should receive this traffic`,\n };\n }\n if (entry.target?.service?.publishedPort === undefined) {\n return { status: 503, message: \"Hestia route origin unavailable\" };\n }\n return { target: entry.target };\n }\n const target = this.#targets.get(hostname);\n if (target === undefined) return { status: 404, message: \"Hestia route not found\" };\n if (target.service?.publishedPort === undefined) {\n return { status: 503, message: \"Hestia route origin unavailable\" };\n }\n return { target };\n }\n\n async #proxyHttp(request: IncomingMessage, response: ServerResponse): Promise<void> {\n const hostname = parseRouteAuthority(request.headers.host);\n if (hostname === null) return sendRouterResponse(response, 400, \"Malformed Host authority\");\n const match = this.#matchTarget(hostname, pathnameOf(request.url));\n if (\"status\" in match) return sendRouterResponse(response, match.status, match.message);\n const target = match.target;\n const port = target.service!.publishedPort!;\n if (await verifyLocalRouterTarget(target) !== port) {\n return sendRouterResponse(response, 503, \"Hestia route origin unavailable\");\n }\n const proxy = httpRequest({\n hostname: \"127.0.0.1\",\n port,\n method: request.method,\n path: request.url,\n headers: forwardedHeaders(request, port),\n agent: verifiedOriginAgent(target, port),\n }, (origin) => {\n const headers = { ...origin.headers };\n for (const name of HOP_BY_HOP_HEADERS) delete headers[name];\n response.writeHead(origin.statusCode ?? 502, headers);\n origin.on(\"error\", () => response.destroy());\n origin.on(\"aborted\", () => response.destroy());\n response.on(\"error\", () => origin.destroy());\n origin.pipe(response);\n });\n proxy.on(\"error\", (error) => {\n if (!response.headersSent) {\n const ownershipFailure = error instanceof OriginOwnershipError;\n sendRouterResponse(\n response,\n ownershipFailure ? 503 : 502,\n ownershipFailure ? \"Hestia route origin unavailable\" : \"Hestia route origin failed\",\n );\n }\n else response.destroy();\n });\n request.pipe(proxy);\n }\n\n async #proxyWebSocket(socket: Socket, header: string, head: Buffer): Promise<void> {\n const hostHeaders = [...header.matchAll(/\\r\\nhost:\\s*([^\\r\\n]+)/gi)];\n const incomingHost = hostHeaders.length === 1 ? hostHeaders[0]![1]!.trim() : undefined;\n const host = parseRouteAuthority(incomingHost);\n if (host === null) {\n socket.end(\"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n const rawHeaderLines = header.slice(0, -4).split(\"\\r\\n\");\n // Request-target from the start line (\"GET /path HTTP/1.1\") for path routing.\n const requestPath = pathnameOf(rawHeaderLines[0]?.split(\" \")[1]);\n const match = this.#matchTarget(host, requestPath);\n if (\"status\" in match) {\n const reason = match.status === 404 ? \"404 Not Found\" : \"503 Service Unavailable\";\n socket.end(`HTTP/1.1 ${reason}\\r\\n\\r\\n`);\n return;\n }\n const target = match.target;\n const port = target.service!.publishedPort!;\n const connectionValues = rawHeaderLines.slice(1)\n .filter((line) => /^connection:/i.test(line))\n .map((line) => line.slice(line.indexOf(\":\") + 1));\n const connectionNames = connectionHeaderTokens(connectionValues);\n const retainedHeaders = rawHeaderLines.slice(1).filter((line) => {\n const separator = line.indexOf(\":\");\n if (separator < 1) return false;\n const name = line.slice(0, separator).trim().toLowerCase();\n return name !== \"host\" && !HOP_BY_HOP_HEADERS.has(name) &&\n !connectionNames.has(name) && !name.startsWith(\"x-forwarded-\");\n });\n const rewrittenHeader = [\n rawHeaderLines[0]!,\n ...retainedHeaders,\n `Host: 127.0.0.1:${port}`,\n \"Connection: Upgrade\",\n \"Upgrade: websocket\",\n `X-Forwarded-Host: ${incomingHost}`,\n \"X-Forwarded-Proto: https\",\n `X-Forwarded-For: ${socket.remoteAddress ?? \"127.0.0.1\"}`,\n \"\",\n \"\",\n ].join(\"\\r\\n\");\n const originSocket = createConnection({ host: \"127.0.0.1\", port });\n originSocket.once(\"connect\", async () => {\n const verifiedPort = await verifyLocalRouterTarget(target);\n if (verifiedPort !== port) {\n originSocket.destroy();\n socket.end(\"HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n\");\n return;\n }\n socket.pipe(originSocket).pipe(socket);\n originSocket.write(rewrittenHeader, \"latin1\");\n if (head.length) originSocket.write(head);\n socket.resume();\n });\n originSocket.once(\"error\", () => {\n if (!socket.destroyed) socket.end(\"HTTP/1.1 502 Bad Gateway\\r\\n\\r\\n\");\n });\n socket.once(\"error\", () => originSocket.destroy());\n }\n}\n",
|
|
105
106
|
"import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\nimport { connect } from \"node:net\";\nimport { HestiaError, type ProcSpec } from \"@hestia/core\";\nimport { allocatePort } from \"../proc/ports.ts\";\nimport { discoverWorkers, filterWorkers, type WorkerConfig } from \"./discover.ts\";\n\n/** Per-worktree private dev registry — the isolation mechanism itself. */\nexport function privateRegistryDir(worktreeRoot: string): string {\n return join(worktreeRoot, \".hestia\", \"wrangler-registry\");\n}\n\n/** Where an unwrapped wrangler/miniflare would register (and read bindings). */\nexport function globalRegistryDir(): string {\n return (\n process.env.WRANGLER_REGISTRY_PATH ??\n join(homedir(), \".wrangler\", \"config\", \"registry\")\n );\n}\n\nconst HEARTBEAT_FRESH_MS = 60_000;\n\nfunction tcpConnectable(address: string, timeoutMs = 500): Promise<boolean> {\n const [host, portStr] = address.split(\":\");\n const port = Number(portStr);\n if (!host || !Number.isFinite(port)) return Promise.resolve(false);\n return new Promise((resolve) => {\n const sock = connect({ host, port, timeout: timeoutMs });\n sock.once(\"connect\", () => {\n sock.destroy();\n resolve(true);\n });\n const dead = () => {\n sock.destroy();\n resolve(false);\n };\n sock.once(\"error\", dead);\n sock.once(\"timeout\", dead);\n });\n}\n\n/**\n * Refuse to start a worker whose name is already live in the GLOBAL registry —\n * that's a manual `pnpm dev` (or another tool) in some worktree of this repo,\n * and running both means fighting over `.wrangler/state` (SQLITE_BUSY).\n * Registry entries carry no pid; liveness = heartbeat-fresh mtime, else a\n * connectable debug address.\n */\nexport async function preflightForeignSessions(\n workers: WorkerConfig[],\n): Promise<void> {\n const dir = globalRegistryDir();\n if (!existsSync(dir)) return;\n for (const w of workers) {\n if (w.name === null) continue;\n const entryPath = join(dir, w.name);\n if (!existsSync(entryPath)) continue;\n const freshMs = Date.now() - statSync(entryPath).mtimeMs;\n let live = freshMs < HEARTBEAT_FRESH_MS;\n if (!live) {\n try {\n const entry = JSON.parse(readFileSync(entryPath, \"utf8\")) as {\n debugPortAddress?: string;\n };\n live = entry.debugPortAddress\n ? await tcpConnectable(entry.debugPortAddress)\n : false;\n } catch {\n live = false;\n }\n }\n if (live) {\n throw new HestiaError(\n \"worktree-busy\",\n `worker \"${w.name}\" is already registered in the global dev registry ` +\n `(${entryPath}) by a live non-hestia session — stop it or pass --force`,\n );\n }\n }\n}\n\nexport interface WorkerPlan {\n specs: ProcSpec[];\n warnings: string[];\n}\n\nexport interface WorkerPlanOptions {\n filter: string[];\n allowRemote: boolean;\n force: boolean;\n varlock: boolean;\n}\n\n/**\n * Keep Wrangler resources local unless the config explicitly declares a\n * remote binding and the caller has acknowledged it with --allow-remote.\n * Wrangler can otherwise create remote proxies for bindings such as AI even\n * when its general `--remote` option defaults to false.\n */\nexport function wranglerResourceModeArgs(\n worker: Pick<WorkerConfig, \"hasRemote\">,\n allowRemote: boolean,\n): string[] {\n return worker.hasRemote && allowRemote ? [] : [\"--local\"];\n}\n\n/** Discover, gate, and turn wrangler configs into supervised ProcSpecs. */\nexport async function planWorkers(\n worktreeRoot: string,\n opts: WorkerPlanOptions,\n): Promise<WorkerPlan> {\n const all = discoverWorkers(worktreeRoot);\n const matched = filterWorkers(all, worktreeRoot, opts.filter);\n if (matched.length === 0) {\n throw new HestiaError(\n \"no-workers-found\",\n opts.filter.length > 0\n ? `no wrangler configs match --workers=${opts.filter.join(\",\")}`\n : `no wrangler.{jsonc,json,toml} found in ${worktreeRoot}`,\n );\n }\n\n // Per-config resolution: pnpm workspaces (modem) link each app's deps into\n // <app>/node_modules/.bin, NOT the workspace root — walk from the config's\n // dir up to the worktree root and take the nearest local wrangler. Never a\n // global install.\n const wranglerBinFor = (configPath: string): string | null => {\n let dir = dirname(configPath);\n for (;;) {\n const candidate = join(dir, \"node_modules\", \".bin\", \"wrangler\");\n if (existsSync(candidate)) return candidate;\n if (dir === worktreeRoot) return null;\n const parent = dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n };\n\n const warnings: string[] = [];\n const named: WorkerConfig[] = [];\n for (const w of matched) {\n const rel = relative(worktreeRoot, w.configPath);\n if (w.name === null) {\n warnings.push(`skipping ${rel}: no top-level \"name\" in config`);\n continue;\n }\n if (w.hasRemote && !opts.allowRemote) {\n throw new HestiaError(\n \"remote-binding-blocked\",\n `${rel} declares remote bindings (talks to real Cloudflare resources) — ` +\n `pass --allow-remote to permit`,\n );\n }\n named.push(w);\n }\n if (named.length === 0) {\n throw new HestiaError(\n \"no-workers-found\",\n `all matched wrangler configs were skipped (no top-level name)`,\n );\n }\n\n if (!opts.force) await preflightForeignSessions(named);\n\n const registry = privateRegistryDir(worktreeRoot);\n const specs: ProcSpec[] = [];\n for (const w of named) {\n const bin = wranglerBinFor(w.configPath);\n if (bin === null) {\n throw new HestiaError(\n \"wrangler-missing\",\n `no local wrangler for ${relative(worktreeRoot, w.configPath)} ` +\n `(searched node_modules/.bin from the config dir up to the worktree ` +\n `root) — hestia never uses a global install`,\n );\n }\n const inspectorPort = await allocatePort();\n specs.push({\n name: w.name!,\n // wrangler binary invoked directly — modem's package dev scripts use\n // `env -i` and pin inspector ports, so they must be bypassed.\n argv: [\n bin,\n \"dev\",\n ...wranglerResourceModeArgs(w, opts.allowRemote),\n \"-c\",\n w.configPath,\n \"--port\",\n \"{port}\",\n \"--inspector-port\",\n String(inspectorPort),\n ],\n env: {\n // both: wrangler reads WRANGLER_REGISTRY_PATH, the vite-plugin path\n // reads MINIFLARE_REGISTRY_PATH\n WRANGLER_REGISTRY_PATH: registry,\n MINIFLARE_REGISTRY_PATH: registry,\n },\n port: \"auto\",\n signal: \"int\",\n varlock: opts.varlock,\n backend: \"wrangler\",\n inspectorPort,\n configPath: w.configPath,\n });\n }\n return { specs, warnings };\n}\n",
|
|
106
107
|
"import { existsSync, readdirSync } from \"node:fs\";\nimport { HestiaError } from \"@hestia/core\";\nimport { globalRegistryDir } from \"./adapter.ts\";\n\nfunction namesIn(dir: string): Set<string> {\n if (!existsSync(dir)) return new Set();\n return new Set(readdirSync(dir));\n}\n\nexport function snapshotGlobalRegistry(): Set<string> {\n return namesIn(globalRegistryDir());\n}\n\n/**\n * The isolation assertion: every worker we started must appear in the PRIVATE\n * registry — that proves the redirect env vars took effect in the child. If a\n * name never shows up there, the worker registered somewhere else (or the\n * wrangler version stopped honoring the env var): a real leak, fail hard.\n */\nexport async function verifyPrivateRegistry(\n privateDir: string,\n workerNames: string[],\n timeoutMs = 10_000,\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n let missing: string[] = workerNames;\n while (Date.now() < deadline) {\n const present = namesIn(privateDir);\n missing = workerNames.filter((n) => !present.has(n));\n if (missing.length === 0) return;\n await new Promise((r) => setTimeout(r, 250));\n }\n throw new HestiaError(\n \"registry-leak\",\n `worker(s) ${missing.join(\", \")} never registered in the private registry ` +\n `(${privateDir}) — the WRANGLER_REGISTRY_PATH/MINIFLARE_REGISTRY_PATH ` +\n `redirect did not take effect`,\n );\n}\n\n/**\n * Advisory only: a global-registry gain of one of our names DURING our up is\n * probably a manual session in another worktree of the same repo (same repo →\n * same worker names). Entries carry no pid, so it cannot be attributed —\n * never fail on it, just surface it.\n */\nexport function globalGainWarnings(\n before: Set<string>,\n ourNames: string[],\n): string[] {\n const after = snapshotGlobalRegistry();\n return ourNames\n .filter((n) => after.has(n) && !before.has(n))\n .map(\n (n) =>\n `global dev registry gained \"${n}\" while this stack started — ` +\n `likely a non-hestia dev session in another worktree; hestia's own ` +\n `workers are isolated in the private registry`,\n );\n}\n",
|
|
107
108
|
"import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { HestiaError } from \"@hestia/core\";\n\nconst pexec = promisify(execFile);\n\n/**\n * Wrapper around the user's cloudflared binary. Hestia ADOPTS an existing\n * named tunnel — it never runs `tunnel create` or `tunnel delete`, and every\n * mutating call after adoption targets the tunnel's UUID, never its name, so\n * a teammate's same-prefixed tunnel on the shared account can never be hit.\n */\n\nexport const BIN = \"cloudflared\";\n\n/** ~/.cloudflared (cert.pem + per-uuid credential JSONs). Test seam via env. */\nexport function cloudflaredHome(): string {\n return process.env.HESTIA_CLOUDFLARED_HOME ?? join(homedir(), \".cloudflared\");\n}\n\nexport function certPath(): string {\n return process.env.TUNNEL_ORIGIN_CERT ?? join(cloudflaredHome(), \"cert.pem\");\n}\n\n/** Credentials JSON written by the user's own `cloudflared tunnel create`. */\nexport function credFilePath(uuid: string): string {\n return process.env.TUNNEL_CRED_FILE ?? join(cloudflaredHome(), `${uuid}.json`);\n}\n\nasync function run(args: string[], timeoutMs = 30_000): Promise<string> {\n try {\n const { stdout } = await pexec(BIN, args, { timeout: timeoutMs });\n return stdout;\n } catch (err) {\n const e = err as NodeJS.ErrnoException & { stderr?: string };\n if (e.code === \"ENOENT\") {\n throw new HestiaError(\n \"cloudflared-missing\",\n \"cloudflared not found on PATH (brew install cloudflared)\",\n );\n }\n throw err;\n }\n}\n\nexport interface TunnelListEntry {\n id: string;\n name: string;\n /**\n * Live EDGE-CONNECTION records, flattened across connectors — one healthy\n * connector holds ~4 of these. Non-empty means someone is running this\n * tunnel; the length is NOT a connector count (use countConnectors).\n */\n connections: Array<{ id?: string; origin_ip?: string; colo_name?: string }>;\n}\n\n/** `tunnel list -o json`, parsed tolerantly across cloudflared versions. */\nexport async function listTunnels(): Promise<TunnelListEntry[]> {\n const out = await run([\"tunnel\", \"list\", \"-o\", \"json\"]);\n const parsed = JSON.parse(out) as Array<Record<string, unknown>>;\n return parsed.map((t) => ({\n id: String(t.id ?? \"\"),\n name: String(t.name ?? \"\"),\n connections: Array.isArray(t.connections)\n ? (t.connections as TunnelListEntry[\"connections\"])\n : [],\n }));\n}\n\n/**\n * Count CONNECTORS registered on a tunnel. `tunnel info -o json` nests edge\n * connections under one `conns[]` entry per connector, so its top-level\n * length is the replica count `tunnel list` cannot provide.\n */\nexport async function countConnectors(uuid: string): Promise<number> {\n const out = await run([\"tunnel\", \"info\", \"-o\", \"json\", uuid]);\n const parsed = JSON.parse(out) as { conns?: unknown };\n return Array.isArray(parsed.conns) ? parsed.conns.length : 0;\n}\n\n/** Resolve an adopted tunnel by name; requires its credentials JSON locally. */\nexport async function adoptTunnel(\n name: string,\n): Promise<{ uuid: string; credFile: string; connections: number }> {\n const entry = (await listTunnels()).find((t) => t.name === name);\n if (entry === undefined) {\n throw new HestiaError(\n \"tunnel-not-found\",\n `no tunnel named \"${name}\" on this account — create it once with ` +\n `\\`cloudflared tunnel create ${name}\\``,\n );\n }\n const credFile = credFilePath(entry.id);\n if (!existsSync(credFile)) {\n throw new HestiaError(\n \"tunnel-auth-missing\",\n `credentials for tunnel \"${name}\" not found at ${credFile} — ` +\n `run \\`cloudflared tunnel create\\` on this machine or copy the JSON`,\n );\n }\n return { uuid: entry.id, credFile, connections: entry.connections.length };\n}\n\n/**\n * Route a hostname to the adopted tunnel (CNAME → <uuid>.cfargotunnel.com).\n * Plain by default; `overwrite` re-points an existing record — only pass it\n * when the caller has established the record is hestia's own (ledger hit or\n * explicit --overwrite-dns), never to silently capture a foreign name.\n */\nexport async function routeDns(\n uuid: string,\n hostname: string,\n overwrite: boolean,\n): Promise<void> {\n if (!existsSync(certPath())) {\n throw new HestiaError(\n \"tunnel-auth-missing\",\n `routing DNS needs ${certPath()} — run \\`cloudflared tunnel login\\``,\n );\n }\n const args = [\"tunnel\", \"route\", \"dns\"];\n if (overwrite) args.push(\"--overwrite-dns\");\n args.push(uuid, hostname);\n try {\n await run(args);\n } catch (err) {\n if (err instanceof HestiaError) throw err;\n const msg = (err as { stderr?: string; message?: string }).stderr ?? \"\";\n const text = `${msg} ${(err as Error).message ?? \"\"}`;\n if (/already exists|existing (DNS )?record/i.test(text)) {\n throw new HestiaError(\n \"dns-record-conflict\",\n `a DNS record for ${hostname} already exists and hestia has no ` +\n `memory of creating it — if it is from a previous hestia run, ` +\n `re-run with --overwrite-dns; if not, pick another name (records ` +\n `in the shared zone are never overwritten silently)`,\n );\n }\n throw new HestiaError(\n \"dns-route-failed\",\n `cloudflared tunnel route dns ${hostname} failed: ${(err as Error).message}`,\n );\n }\n}\n",
|
|
108
|
-
"import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { HestiaError, slug, type TunnelExposure } from \"@hestia/core\";\nimport { cloudflaredHome } from \"./cloudflared.ts\";\nimport {\n internalEndpointAuthority,\n publicGatewaySocketPath,\n} from \"../router/local-http-router.ts\";\n\n/**\n * Pure ingress logic for the unified tunnel: hostname derivation, import of\n * the user's static rules, and merged-config generation. The merged config is\n * DERIVED state — base rules re-read from the user's file and dynamic rules\n * re-read from stack mirrors on every regen — never hand-maintained.\n */\n\nexport interface IngressRule {\n hostname?: string;\n path?: string;\n service: string;\n originRequest?: Record<string, unknown>;\n}\n\n/** Max DNS label length; longer derived names get a stable hash suffix. */\nconst LABEL_MAX = 63;\nconst HASH_LEN = 6;\n\n/**\n * `<tunnel>-<branch>-<svc>` as one DNS label under the zone (single-label:\n * universal SSL only covers one level). Deterministic; over-budget labels are\n * truncated with a hash of the full form so two long names can't collide.\n */\nexport function hostnameFor(\n tunnelName: string,\n branch: string,\n service: string,\n zone: string,\n): string {\n const label = `${slug(tunnelName)}-${slug(branch)}-${slug(service)}`;\n if (label.length <= LABEL_MAX) return `${label}.${zone}`;\n const hash = createHash(\"sha256\").update(label).digest(\"hex\").slice(0, HASH_LEN);\n const keep = label.slice(0, LABEL_MAX - HASH_LEN - 1).replace(/-+$/, \"\");\n return `${keep}-${hash}.${zone}`;\n}\n\n/** The zone is the hostname minus its first label. */\nexport function zoneOf(hostname: string): string | undefined {\n const dot = hostname.indexOf(\".\");\n return dot > 0 ? hostname.slice(dot + 1) : undefined;\n}\n\n/** Infer the zone from imported base rules (their common suffix), if any. */\nexport function inferZone(baseRules: IngressRule[]): string | undefined {\n const zones = new Set(\n baseRules\n .map((r) => (r.hostname !== undefined ? zoneOf(r.hostname) : undefined))\n .filter((z): z is string => z !== undefined),\n );\n return zones.size === 1 ? [...zones][0] : undefined;\n}\n\n/**\n * Import the user's static ingress rules for the adopted tunnel from\n * ~/.cloudflared/config.yml (verbatim, minus the catch-all — we append our\n * own). The user's file is read-only to hestia. Returns [] when the file is\n * absent or describes a different tunnel.\n */\nexport function importBaseRules(uuid: string, name: string): IngressRule[] {\n const p = join(cloudflaredHome(), \"config.yml\");\n if (!existsSync(p)) return [];\n let parsed: { tunnel?: unknown; ingress?: unknown };\n try {\n parsed = parseYaml(readFileSync(p, \"utf8\")) as typeof parsed;\n } catch {\n return [];\n }\n const declared = String(parsed.tunnel ?? \"\");\n if (declared !== uuid && declared !== name) return [];\n if (!Array.isArray(parsed.ingress)) return [];\n return (parsed.ingress as IngressRule[]).filter(\n (r) => r.hostname !== undefined || r.path !== undefined,\n );\n}\n\nexport interface DynamicRule extends TunnelExposure {\n project: string;\n}\n\n/**\n * Base rules first (the user's primary worktree), then
|
|
109
|
+
"import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { HestiaError, slug, type TunnelExposure } from \"@hestia/core\";\nimport { cloudflaredHome } from \"./cloudflared.ts\";\nimport {\n internalEndpointAuthority,\n publicGatewaySocketPath,\n} from \"../router/local-http-router.ts\";\n\n/**\n * Pure ingress logic for the unified tunnel: hostname derivation, import of\n * the user's static rules, and merged-config generation. The merged config is\n * DERIVED state — base rules re-read from the user's file and dynamic rules\n * re-read from stack mirrors on every regen — never hand-maintained.\n */\n\nexport interface IngressRule {\n hostname?: string;\n path?: string;\n service: string;\n originRequest?: Record<string, unknown>;\n}\n\n/** Max DNS label length; longer derived names get a stable hash suffix. */\nconst LABEL_MAX = 63;\nconst HASH_LEN = 6;\n\n/**\n * `<tunnel>-<branch>-<svc>` as one DNS label under the zone (single-label:\n * universal SSL only covers one level). Deterministic; over-budget labels are\n * truncated with a hash of the full form so two long names can't collide.\n */\nexport function hostnameFor(\n tunnelName: string,\n branch: string,\n service: string,\n zone: string,\n): string {\n const label = `${slug(tunnelName)}-${slug(branch)}-${slug(service)}`;\n if (label.length <= LABEL_MAX) return `${label}.${zone}`;\n const hash = createHash(\"sha256\").update(label).digest(\"hex\").slice(0, HASH_LEN);\n const keep = label.slice(0, LABEL_MAX - HASH_LEN - 1).replace(/-+$/, \"\");\n return `${keep}-${hash}.${zone}`;\n}\n\n/** The zone is the hostname minus its first label. */\nexport function zoneOf(hostname: string): string | undefined {\n const dot = hostname.indexOf(\".\");\n return dot > 0 ? hostname.slice(dot + 1) : undefined;\n}\n\n/** Infer the zone from imported base rules (their common suffix), if any. */\nexport function inferZone(baseRules: IngressRule[]): string | undefined {\n const zones = new Set(\n baseRules\n .map((r) => (r.hostname !== undefined ? zoneOf(r.hostname) : undefined))\n .filter((z): z is string => z !== undefined),\n );\n return zones.size === 1 ? [...zones][0] : undefined;\n}\n\n/**\n * Import the user's static ingress rules for the adopted tunnel from\n * ~/.cloudflared/config.yml (verbatim, minus the catch-all — we append our\n * own). The user's file is read-only to hestia. Returns [] when the file is\n * absent or describes a different tunnel.\n */\nexport function importBaseRules(uuid: string, name: string): IngressRule[] {\n const p = join(cloudflaredHome(), \"config.yml\");\n if (!existsSync(p)) return [];\n let parsed: { tunnel?: unknown; ingress?: unknown };\n try {\n parsed = parseYaml(readFileSync(p, \"utf8\")) as typeof parsed;\n } catch {\n return [];\n }\n const declared = String(parsed.tunnel ?? \"\");\n if (declared !== uuid && declared !== name) return [];\n if (!Array.isArray(parsed.ingress)) return [];\n return (parsed.ingress as IngressRule[]).filter(\n (r) => r.hostname !== undefined || r.path !== undefined,\n );\n}\n\nexport interface DynamicRule extends TunnelExposure {\n project: string;\n}\n\n/** One machine-owned stable hostname whose per-request routing hestiad decides. */\nexport interface SharedRule {\n name: string;\n hostname: string;\n}\n\n/**\n * Base rules first (the user's primary worktree), then machine-owned shared\n * hostnames, then per-worktree dynamic rules, then the mandatory catch-all.\n * Dynamic rules rewrite Host to the project's internal authority by default —\n * vite/next dev servers reject foreign Hosts (allowedHosts / allowedDevOrigins)\n * — unless the exposure opted out. Shared rules NEVER rewrite: the public\n * hostname must reach the gateway verbatim because the hestiad route table —\n * not this config — picks the claiming worktree, which is why holder switches\n * need no connector restart (cloudflared origin_proxy.go only sets Host when\n * httpHostHeader is configured).\n */\nexport function generateMergedConfig(opts: {\n uuid: string;\n credFile: string;\n baseRules: IngressRule[];\n dynamicRules: DynamicRule[];\n sharedRules?: SharedRule[];\n}): string {\n assertDisjoint(opts.baseRules, opts.dynamicRules, opts.sharedRules ?? []);\n // One ingress rule per UNIQUE shared hostname: multiple path-scoped handles\n // on the same hostname all route the whole hostname to the gateway, where\n // the hestiad router splits by path. So declaring a second path on an\n // existing shared hostname needs no connector restart (the rule already\n // exists) — the same invariant as holder switches.\n const sharedHostnames = [...new Set((opts.sharedRules ?? []).map((s) => s.hostname))];\n const shared: IngressRule[] = sharedHostnames.map((hostname) => ({\n hostname,\n service: `unix:${publicGatewaySocketPath()}`,\n }));\n const dynamic: IngressRule[] = opts.dynamicRules.map((d) => ({\n hostname: d.hostname,\n service: `unix:${publicGatewaySocketPath()}`,\n ...(d.keepHostHeader\n ? {}\n : { originRequest: { httpHostHeader: internalEndpointAuthority(d.project, d.alias ?? d.service) } }),\n }));\n return stringifyYaml({\n tunnel: opts.uuid,\n \"credentials-file\": opts.credFile,\n ingress: [\n ...opts.baseRules,\n ...shared,\n ...dynamic,\n { service: \"http_status:404\" },\n ],\n });\n}\n\n/**\n * Every hostname must map to exactly one rule — cloudflared ingress is\n * first-match-wins, so a duplicate silently serves the wrong worktree (the\n * exact misdelivery hestia exists to kill).\n */\nfunction assertDisjoint(base: IngressRule[], dynamic: DynamicRule[], shared: SharedRule[]): void {\n const seen = new Map<string, string>();\n for (const r of base) {\n if (r.hostname !== undefined) seen.set(r.hostname, \"the user's static rules\");\n }\n // Shared handles may legitimately repeat a hostname (path-based routing), so\n // conflict-check each unique shared hostname once, against base only — the\n // (hostname, path) uniqueness that keeps sibling handles distinct is enforced\n // by the store at declare time, not here.\n const sharedByHost = new Map<string, string>();\n for (const s of shared) {\n if (!sharedByHost.has(s.hostname)) sharedByHost.set(s.hostname, s.name);\n }\n for (const [hostname, name] of sharedByHost) {\n const holder = seen.get(hostname);\n if (holder !== undefined) {\n throw new HestiaError(\n \"hostname-conflict\",\n `shared hostname ${hostname} (\"${name}\") is already claimed by ${holder}`,\n );\n }\n seen.set(hostname, `shared hostname \"${name}\"`);\n }\n for (const d of dynamic) {\n const holder = seen.get(d.hostname);\n if (holder !== undefined) {\n throw new HestiaError(\n \"hostname-conflict\",\n `hostname ${d.hostname} (service \"${d.service}\" of ${d.project}) ` +\n `is already claimed by ${holder}`,\n );\n }\n seen.set(d.hostname, `project ${d.project}`);\n }\n}\n",
|
|
109
110
|
"/**\n * Runtime verification against cloudflared's metrics endpoint (loopback only):\n * /ready returns 200 + {readyConnections} once the connector holds an edge\n * connection; /quicktunnel returns {\"hostname\":\"…trycloudflare.com\"} for quick\n * tunnels (empty hostname on named tunnels).\n */\n\nconst POLL_MS = 300;\n\nasync function get(port: number, path: string): Promise<Response | null> {\n try {\n return await fetch(`http://127.0.0.1:${port}${path}`, {\n signal: AbortSignal.timeout(2_000),\n });\n } catch {\n return null;\n }\n}\n\n/** True once /ready reports ≥1 edge connection within the timeout. */\nexport async function pollReady(\n metricsPort: number,\n timeoutMs: number,\n): Promise<boolean> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const res = await get(metricsPort, \"/ready\");\n if (res !== null && res.ok) return true;\n await new Promise((r) => setTimeout(r, POLL_MS));\n }\n return false;\n}\n\n/** One-shot /ready check (status refresh). */\nexport async function isReady(metricsPort: number): Promise<boolean> {\n const res = await get(metricsPort, \"/ready\");\n return res !== null && res.ok;\n}\n\n/** Poll /quicktunnel until the assigned *.trycloudflare.com URL appears. */\nexport async function quickTunnelUrl(\n metricsPort: number,\n timeoutMs: number,\n): Promise<string | null> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const res = await get(metricsPort, \"/quicktunnel\");\n if (res !== null && res.ok) {\n try {\n const body = (await res.json()) as { hostname?: string };\n if (body.hostname !== undefined && body.hostname !== \"\") {\n return `https://${body.hostname}`;\n }\n } catch {\n // not JSON yet — keep polling\n }\n }\n await new Promise((r) => setTimeout(r, POLL_MS));\n }\n return null;\n}\n",
|
|
110
|
-
"import {\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { HestiaError, STATE_SCHEMA_VERSION, type StackRecord, type TunnelRef } from \"@hestia/core\";\nimport { hestiaHome, parseStackRecord } from \"../state.ts\";\nimport { withLock } from \"../proc/lock.ts\";\nimport { credFilePath } from \"./cloudflared.ts\";\nimport { startProc } from \"../proc/supervisor.ts\";\nimport { isLive, readPidfile, removePidfile } from \"../proc/pidfile.ts\";\nimport { stopProcTree } from \"../proc/shutdown.ts\";\nimport {\n type DynamicRule,\n generateMergedConfig,\n importBaseRules,\n} from \"./ingress.ts\";\nimport { pollReady } from \"./verify.ts\";\nimport { writeAtomicJsonFile, writeAtomicTextFile } from \"../atomic-json-file.ts\";\n\n/**\n * The machine-global unified-tunnel singleton: ONE connector process per\n * adopted tunnel, serving a merged ingress (the user's static rules + every\n * worktree's exposures). One connector is the whole point — multiple\n * connectors on one tunnel are HA replicas that Cloudflare load-balances\n * nondeterministically across worktrees.\n *\n * The tunnel dir doubles as a \"worktree root\" for the shipped proc machinery\n * (startProc/pidfile/lock all key off `<root>/.hestia/...`), so the connector\n * gets tree supervision, lstart identity, and crash-safe pidfiles for free.\n */\n\nexport const CONNECTOR = \"connector\";\nconst READY_TIMEOUT_MS = 30_000;\n\nexport function tunnelDir(uuid: string): string {\n return join(hestiaHome(), \"tunnel\", uuid);\n}\n\nfunction configPath(uuid: string): string {\n return join(tunnelDir(uuid), \"config.yml\");\n}\n\n/** Marker that hestia has successfully run this tunnel's connector before. */\nfunction adoptedMarker(uuid: string): string {\n return join(tunnelDir(uuid), \"adopted.json\");\n}\n\n/**\n * Whether hestia has ever run this tunnel's connector. Gates the takeover\n * preflight: once adopted, live connections on the tunnel are (presumed)\n * hestia's own connector, not a foreign replica.\n */\nexport function isAdopted(uuid: string): boolean {\n return existsSync(adoptedMarker(uuid));\n}\n\nexport interface AdoptedRef {\n uuid: string;\n name: string;\n credFile: string;\n /** True when a legacy `{at}`-only marker was rebuilt from conventions/mirrors. */\n reconstructed: boolean;\n}\n\n/**\n * Read the adopted-tunnel ref for connector revival with no live CLI context.\n * Markers written before the ref was persisted (legacy `{at}`-only) are\n * reconstructed: uuid = the dir name, credFile by ~/.cloudflared convention,\n * name from any stack mirror pinned to this uuid (falls back to the uuid —\n * base-rule import matches by uuid too, so only name-keyed user configs\n * degrade, and callers can warn via `reconstructed`). The marker heals itself:\n * every successful reconcile rewrites it enriched.\n */\nexport function readAdopted(uuid: string): AdoptedRef | null {\n const p = adoptedMarker(uuid);\n if (!existsSync(p)) return null;\n let marker: { schemaVersion?: number; name?: string; credFile?: string };\n try {\n marker = JSON.parse(readFileSync(p, \"utf8\")) as typeof marker;\n } catch {\n marker = {};\n }\n if (\n marker.schemaVersion === STATE_SCHEMA_VERSION &&\n typeof marker.name === \"string\" &&\n typeof marker.credFile === \"string\"\n ) {\n return { uuid, name: marker.name, credFile: marker.credFile, reconstructed: false };\n }\n let name: string | undefined;\n const stacksDir = join(hestiaHome(), \"stacks\");\n if (existsSync(stacksDir)) {\n for (const project of readdirSync(stacksDir)) {\n const sp = join(stacksDir, project, \"stack.json\");\n if (!existsSync(sp)) continue;\n try {\n const record = parseStackRecord(readFileSync(sp, \"utf8\"), sp);\n if (record.tunnel?.uuid === uuid) {\n name = record.tunnel.name;\n break;\n }\n } catch {\n // unreadable mirror — keep scanning\n }\n }\n }\n return {\n uuid,\n name: name ?? uuid,\n credFile: marker.credFile ?? credFilePath(uuid),\n reconstructed: true,\n };\n}\n\n/** Every tunnel uuid this machine has adopted (daemon supervision set). */\nexport function listAdopted(): string[] {\n const root = join(hestiaHome(), \"tunnel\");\n if (!existsSync(root)) return [];\n return readdirSync(root).filter((uuid) => isAdopted(uuid));\n}\n\n/** Hostnames hestia has route-dns'ed — the ledger that makes re-routing a no-op. */\nfunction ledgerPath(uuid: string): string {\n return join(tunnelDir(uuid), \"hostnames.json\");\n}\n\nexport function ledgerHas(uuid: string, hostname: string): boolean {\n const p = ledgerPath(uuid);\n if (!existsSync(p)) return false;\n try {\n return (JSON.parse(readFileSync(p, \"utf8\")) as string[]).includes(hostname);\n } catch {\n return false;\n }\n}\n\nexport function ledgerAdd(uuid: string, hostname: string): void {\n mkdirSync(tunnelDir(uuid), { recursive: true });\n const p = ledgerPath(uuid);\n const cur = existsSync(p)\n ? (JSON.parse(readFileSync(p, \"utf8\")) as string[])\n : [];\n if (!cur.includes(hostname)) {\n writeAtomicJsonFile(p, [...cur, hostname]);\n }\n}\n\n/**\n * Every worktree's exposures for this tunnel, read from the stack mirrors —\n * the same mirrors `down --project` uses, so rules follow stack lifecycle\n * even after a worktree directory is deleted. Exposures whose service no\n * longer exists in the stack are dropped (the hostname 404s at the catch-all\n * instead of pointing at a recycled port).\n */\nexport function collectDynamicRules(uuid: string): {\n rules: DynamicRule[];\n dropped: Array<{ project: string; service: string; hostname: string }>;\n} {\n const stacksDir = join(hestiaHome(), \"stacks\");\n const rules: DynamicRule[] = [];\n const dropped: Array<{ project: string; service: string; hostname: string }> = [];\n if (!existsSync(stacksDir)) return { rules, dropped };\n for (const project of readdirSync(stacksDir)) {\n const p = join(stacksDir, project, \"stack.json\");\n if (!existsSync(p)) continue;\n let record: StackRecord;\n try {\n record = parseStackRecord(readFileSync(p, \"utf8\"), p);\n } catch {\n continue;\n }\n if (record.tunnel?.uuid !== uuid) continue;\n for (const exp of record.tunnel.exposures) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (svc === undefined || publishedPort === undefined) {\n dropped.push({ project, service: exp.service, hostname: exp.hostname });\n continue;\n }\n // The stack's own regen hooks keep originPort current; the live record\n // is still authoritative in case this regen races a restart.\n rules.push({ ...exp, originPort: publishedPort, project });\n }\n }\n return { rules, dropped };\n}\n\nexport interface ReconcileOutcome {\n /** Connector was (re)started this call — the \"blip\". */\n restarted: boolean;\n /** Metrics port of the live connector, when one is running. */\n metricsPort?: number;\n ready: boolean;\n warnings: string[];\n error?: HestiaError;\n}\n\n/**\n * Converge the connector on the merged ingress derived from disk. Idempotent:\n * unchanged config + live connector = no-op. Serialized machine-wide by the\n * tunnel dir's lock; callers must NOT hold it (lock order: worktree → global).\n */\nexport async function reconcileTunnel(\n ref: Pick<TunnelRef, \"uuid\" | \"name\" | \"credFile\">,\n opts?: { force?: boolean; readyTimeoutMs?: number },\n): Promise<ReconcileOutcome> {\n const dir = tunnelDir(ref.uuid);\n mkdirSync(dir, { recursive: true });\n\n return withLock(dir, async () => {\n const warnings: string[] = [];\n const baseRules = importBaseRules(ref.uuid, ref.name);\n const { rules, dropped } = collectDynamicRules(ref.uuid);\n for (const d of dropped) {\n warnings.push(\n `exposure ${d.hostname} dropped — service \"${d.service}\" of ` +\n `${d.project} is not running (hostname now 404s)`,\n );\n }\n\n const cfgPath = configPath(ref.uuid);\n const nextConfig = generateMergedConfig({\n uuid: ref.uuid,\n credFile: ref.credFile,\n baseRules,\n dynamicRules: rules,\n });\n\n const pf = readPidfile(dir, CONNECTOR);\n const live = pf !== null && isLive(pf);\n const currentConfig = existsSync(cfgPath)\n ? readFileSync(cfgPath, \"utf8\")\n : null;\n\n if (live && currentConfig === nextConfig) {\n return { restarted: false, metricsPort: pf.port, ready: true, warnings };\n }\n\n // Nothing to serve and nothing imported: stop rather than run a 404-only\n // connector (first adoption with no exposures never gets here — expose\n // writes its records before reconciling).\n if (baseRules.length === 0 && rules.length === 0) {\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(dir, CONNECTOR);\n }\n return { restarted: false, ready: false, warnings };\n }\n\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(dir, CONNECTOR);\n }\n writeAtomicTextFile(cfgPath, nextConfig);\n\n const result = await startProc(\n dir,\n {\n name: CONNECTOR,\n argv: [\n \"cloudflared\",\n \"tunnel\",\n \"--config\",\n cfgPath,\n \"--metrics\",\n \"127.0.0.1:{port}\",\n \"--grace-period\",\n \"5s\",\n \"--no-autoupdate\",\n \"run\",\n ref.uuid,\n ],\n port: \"auto\",\n backend: \"tunnel\",\n readyTimeoutMs: opts?.readyTimeoutMs ?? READY_TIMEOUT_MS,\n },\n {},\n );\n if (result.error !== undefined) {\n // metrics port never bound — connector is misbehaving; surface as\n // tunnel-ready-timeout but leave it running for inspection.\n return {\n restarted: true,\n metricsPort: result.record.publishedPort,\n ready: false,\n warnings,\n error: new HestiaError(\n \"tunnel-ready-timeout\",\n `connector did not bind its metrics port — logs: ${result.record.logPath}`,\n ),\n };\n }\n\n // Enriched so revival (daemon duties) can rebuild the ref with zero live\n // stacks; also heals legacy `{at}`-only markers on their first reconcile.\n writeAtomicJsonFile(\n adoptedMarker(ref.uuid),\n {\n schemaVersion: STATE_SCHEMA_VERSION,\n at: new Date().toISOString(),\n uuid: ref.uuid,\n name: ref.name,\n credFile: ref.credFile,\n },\n );\n\n const metricsPort = result.record.publishedPort!;\n const ready = await pollReady(\n metricsPort,\n opts?.readyTimeoutMs ?? READY_TIMEOUT_MS,\n );\n return {\n restarted: true,\n metricsPort,\n ready,\n warnings,\n error: ready\n ? undefined\n : new HestiaError(\n \"tunnel-ready-timeout\",\n `connector is running but reported no edge connection in time ` +\n `(offline?) — left running, it will keep retrying; logs: ` +\n `${result.record.logPath}`,\n ),\n };\n });\n}\n\n/** Live connector view for `status`: pidfile identity + one-shot /ready. */\nexport function connectorPidfile(uuid: string) {\n return readPidfile(tunnelDir(uuid), CONNECTOR);\n}\n",
|
|
111
|
+
"import {\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { HestiaError, STATE_SCHEMA_VERSION, type StackRecord, type TunnelRef } from \"@hestia/core\";\nimport { hestiaHome, parseStackRecord } from \"../state.ts\";\nimport { withLock } from \"../proc/lock.ts\";\nimport { credFilePath } from \"./cloudflared.ts\";\nimport { startProc } from \"../proc/supervisor.ts\";\nimport { isLive, readPidfile, removePidfile } from \"../proc/pidfile.ts\";\nimport { stopProcTree } from \"../proc/shutdown.ts\";\nimport {\n type DynamicRule,\n type SharedRule,\n generateMergedConfig,\n importBaseRules,\n} from \"./ingress.ts\";\nimport { listSharedHostnames } from \"./shared.ts\";\nimport { pollReady } from \"./verify.ts\";\nimport { writeAtomicJsonFile, writeAtomicTextFile } from \"../atomic-json-file.ts\";\n\n/**\n * The machine-global unified-tunnel singleton: ONE connector process per\n * adopted tunnel, serving a merged ingress (the user's static rules + every\n * worktree's exposures). One connector is the whole point — multiple\n * connectors on one tunnel are HA replicas that Cloudflare load-balances\n * nondeterministically across worktrees.\n *\n * The tunnel dir doubles as a \"worktree root\" for the shipped proc machinery\n * (startProc/pidfile/lock all key off `<root>/.hestia/...`), so the connector\n * gets tree supervision, lstart identity, and crash-safe pidfiles for free.\n */\n\nexport const CONNECTOR = \"connector\";\nconst READY_TIMEOUT_MS = 30_000;\n\nexport function tunnelDir(uuid: string): string {\n return join(hestiaHome(), \"tunnel\", uuid);\n}\n\nfunction configPath(uuid: string): string {\n return join(tunnelDir(uuid), \"config.yml\");\n}\n\n/** Marker that hestia has successfully run this tunnel's connector before. */\nfunction adoptedMarker(uuid: string): string {\n return join(tunnelDir(uuid), \"adopted.json\");\n}\n\n/**\n * Whether hestia has ever run this tunnel's connector. Gates the takeover\n * preflight: once adopted, live connections on the tunnel are (presumed)\n * hestia's own connector, not a foreign replica.\n */\nexport function isAdopted(uuid: string): boolean {\n return existsSync(adoptedMarker(uuid));\n}\n\nexport interface AdoptedRef {\n uuid: string;\n name: string;\n credFile: string;\n /** True when a legacy `{at}`-only marker was rebuilt from conventions/mirrors. */\n reconstructed: boolean;\n}\n\n/**\n * Read the adopted-tunnel ref for connector revival with no live CLI context.\n * Markers written before the ref was persisted (legacy `{at}`-only) are\n * reconstructed: uuid = the dir name, credFile by ~/.cloudflared convention,\n * name from any stack mirror pinned to this uuid (falls back to the uuid —\n * base-rule import matches by uuid too, so only name-keyed user configs\n * degrade, and callers can warn via `reconstructed`). The marker heals itself:\n * every successful reconcile rewrites it enriched.\n */\nexport function readAdopted(uuid: string): AdoptedRef | null {\n const p = adoptedMarker(uuid);\n if (!existsSync(p)) return null;\n let marker: { schemaVersion?: number; name?: string; credFile?: string };\n try {\n marker = JSON.parse(readFileSync(p, \"utf8\")) as typeof marker;\n } catch {\n marker = {};\n }\n if (\n marker.schemaVersion === STATE_SCHEMA_VERSION &&\n typeof marker.name === \"string\" &&\n typeof marker.credFile === \"string\"\n ) {\n return { uuid, name: marker.name, credFile: marker.credFile, reconstructed: false };\n }\n let name: string | undefined;\n const stacksDir = join(hestiaHome(), \"stacks\");\n if (existsSync(stacksDir)) {\n for (const project of readdirSync(stacksDir)) {\n const sp = join(stacksDir, project, \"stack.json\");\n if (!existsSync(sp)) continue;\n try {\n const record = parseStackRecord(readFileSync(sp, \"utf8\"), sp);\n if (record.tunnel?.uuid === uuid) {\n name = record.tunnel.name;\n break;\n }\n } catch {\n // unreadable mirror — keep scanning\n }\n }\n }\n return {\n uuid,\n name: name ?? uuid,\n credFile: marker.credFile ?? credFilePath(uuid),\n reconstructed: true,\n };\n}\n\n/** Every tunnel uuid this machine has adopted (daemon supervision set). */\nexport function listAdopted(): string[] {\n const root = join(hestiaHome(), \"tunnel\");\n if (!existsSync(root)) return [];\n return readdirSync(root).filter((uuid) => isAdopted(uuid));\n}\n\n/** Hostnames hestia has route-dns'ed — the ledger that makes re-routing a no-op. */\nfunction ledgerPath(uuid: string): string {\n return join(tunnelDir(uuid), \"hostnames.json\");\n}\n\nexport function ledgerHas(uuid: string, hostname: string): boolean {\n const p = ledgerPath(uuid);\n if (!existsSync(p)) return false;\n try {\n return (JSON.parse(readFileSync(p, \"utf8\")) as string[]).includes(hostname);\n } catch {\n return false;\n }\n}\n\nexport function ledgerAdd(uuid: string, hostname: string): void {\n mkdirSync(tunnelDir(uuid), { recursive: true });\n const p = ledgerPath(uuid);\n const cur = existsSync(p)\n ? (JSON.parse(readFileSync(p, \"utf8\")) as string[])\n : [];\n if (!cur.includes(hostname)) {\n writeAtomicJsonFile(p, [...cur, hostname]);\n }\n}\n\n/**\n * Every worktree's exposures for this tunnel, read from the stack mirrors —\n * the same mirrors `down --project` uses, so rules follow stack lifecycle\n * even after a worktree directory is deleted. Exposures whose service no\n * longer exists in the stack are dropped (the hostname 404s at the catch-all\n * instead of pointing at a recycled port).\n */\nexport function collectDynamicRules(uuid: string): {\n rules: DynamicRule[];\n dropped: Array<{ project: string; service: string; hostname: string }>;\n} {\n const stacksDir = join(hestiaHome(), \"stacks\");\n const rules: DynamicRule[] = [];\n const dropped: Array<{ project: string; service: string; hostname: string }> = [];\n if (!existsSync(stacksDir)) return { rules, dropped };\n for (const project of readdirSync(stacksDir)) {\n const p = join(stacksDir, project, \"stack.json\");\n if (!existsSync(p)) continue;\n let record: StackRecord;\n try {\n record = parseStackRecord(readFileSync(p, \"utf8\"), p);\n } catch {\n continue;\n }\n if (record.tunnel?.uuid !== uuid) continue;\n for (const exp of record.tunnel.exposures) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (svc === undefined || publishedPort === undefined) {\n dropped.push({ project, service: exp.service, hostname: exp.hostname });\n continue;\n }\n // The stack's own regen hooks keep originPort current; the live record\n // is still authoritative in case this regen races a restart.\n rules.push({ ...exp, originPort: publishedPort, project });\n }\n }\n return { rules, dropped };\n}\n\nexport interface ReconcileOutcome {\n /** Connector was (re)started this call — the \"blip\". */\n restarted: boolean;\n /** Metrics port of the live connector, when one is running. */\n metricsPort?: number;\n ready: boolean;\n warnings: string[];\n error?: HestiaError;\n}\n\n/**\n * Converge the connector on the merged ingress derived from disk. Idempotent:\n * unchanged config + live connector = no-op. Serialized machine-wide by the\n * tunnel dir's lock; callers must NOT hold it (lock order: worktree → global).\n */\nexport async function reconcileTunnel(\n ref: Pick<TunnelRef, \"uuid\" | \"name\" | \"credFile\">,\n opts?: { force?: boolean; readyTimeoutMs?: number },\n): Promise<ReconcileOutcome> {\n const dir = tunnelDir(ref.uuid);\n mkdirSync(dir, { recursive: true });\n\n return withLock(dir, async () => {\n const warnings: string[] = [];\n const baseRules = importBaseRules(ref.uuid, ref.name);\n const { rules, dropped } = collectDynamicRules(ref.uuid);\n for (const d of dropped) {\n warnings.push(\n `exposure ${d.hostname} dropped — service \"${d.service}\" of ` +\n `${d.project} is not running (hostname now 404s)`,\n );\n }\n // Shared rules are holder-independent: claims switch inside hestiad's\n // route table, so this config — and the connector — never notices.\n const sharedRules: SharedRule[] = listSharedHostnames()\n .filter((record) => record.tunnelUuid === ref.uuid)\n .map((record) => ({ name: record.name, hostname: record.hostname }));\n\n const cfgPath = configPath(ref.uuid);\n const nextConfig = generateMergedConfig({\n uuid: ref.uuid,\n credFile: ref.credFile,\n baseRules,\n dynamicRules: rules,\n sharedRules,\n });\n\n const pf = readPidfile(dir, CONNECTOR);\n const live = pf !== null && isLive(pf);\n const currentConfig = existsSync(cfgPath)\n ? readFileSync(cfgPath, \"utf8\")\n : null;\n\n if (live && currentConfig === nextConfig) {\n return { restarted: false, metricsPort: pf.port, ready: true, warnings };\n }\n\n // Nothing to serve and nothing imported: stop rather than run a 404-only\n // connector (first adoption with no exposures never gets here — expose\n // writes its records before reconciling). A shared hostname alone keeps\n // the connector up: its stable URL must answer even with zero live stacks.\n if (baseRules.length === 0 && rules.length === 0 && sharedRules.length === 0) {\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(dir, CONNECTOR);\n }\n return { restarted: false, ready: false, warnings };\n }\n\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(dir, CONNECTOR);\n }\n writeAtomicTextFile(cfgPath, nextConfig);\n\n const result = await startProc(\n dir,\n {\n name: CONNECTOR,\n argv: [\n \"cloudflared\",\n \"tunnel\",\n \"--config\",\n cfgPath,\n \"--metrics\",\n \"127.0.0.1:{port}\",\n \"--grace-period\",\n \"5s\",\n \"--no-autoupdate\",\n \"run\",\n ref.uuid,\n ],\n port: \"auto\",\n backend: \"tunnel\",\n readyTimeoutMs: opts?.readyTimeoutMs ?? READY_TIMEOUT_MS,\n },\n {},\n );\n if (result.error !== undefined) {\n // metrics port never bound — connector is misbehaving; surface as\n // tunnel-ready-timeout but leave it running for inspection.\n return {\n restarted: true,\n metricsPort: result.record.publishedPort,\n ready: false,\n warnings,\n error: new HestiaError(\n \"tunnel-ready-timeout\",\n `connector did not bind its metrics port — logs: ${result.record.logPath}`,\n ),\n };\n }\n\n // Enriched so revival (daemon duties) can rebuild the ref with zero live\n // stacks; also heals legacy `{at}`-only markers on their first reconcile.\n writeAtomicJsonFile(\n adoptedMarker(ref.uuid),\n {\n schemaVersion: STATE_SCHEMA_VERSION,\n at: new Date().toISOString(),\n uuid: ref.uuid,\n name: ref.name,\n credFile: ref.credFile,\n },\n );\n\n const metricsPort = result.record.publishedPort!;\n const ready = await pollReady(\n metricsPort,\n opts?.readyTimeoutMs ?? READY_TIMEOUT_MS,\n );\n return {\n restarted: true,\n metricsPort,\n ready,\n warnings,\n error: ready\n ? undefined\n : new HestiaError(\n \"tunnel-ready-timeout\",\n `connector is running but reported no edge connection in time ` +\n `(offline?) — left running, it will keep retrying; logs: ` +\n `${result.record.logPath}`,\n ),\n };\n });\n}\n\n/** Live connector view for `status`: pidfile identity + one-shot /ready. */\nexport function connectorPidfile(uuid: string) {\n return readPidfile(tunnelDir(uuid), CONNECTOR);\n}\n",
|
|
111
112
|
"export const MAX_LOG_LINE_BYTES = 64 * 1024;\nexport const LOG_LINE_TRUNCATION_MARKER = \"… [hestia: line truncated]\";\n\nexport interface BoundedLogText {\n text: string;\n truncated?: true;\n}\n\nfunction utf8Prefix(text: string, maxBytes: number): string {\n const source = Buffer.from(text);\n if (source.byteLength <= maxBytes) return text;\n let bounded = source.subarray(0, maxBytes).toString(\"utf8\");\n if (bounded.endsWith(\"�\")) bounded = bounded.slice(0, -1);\n return bounded;\n}\n\n/** Bound one complete application log line to the daemon-safe byte ceiling. */\nexport function boundLogLine(text: string): BoundedLogText {\n if (Buffer.byteLength(text) <= MAX_LOG_LINE_BYTES) return { text };\n const payloadBytes = MAX_LOG_LINE_BYTES - Buffer.byteLength(LOG_LINE_TRUNCATION_MARKER);\n return {\n text: utf8Prefix(text, payloadBytes) + LOG_LINE_TRUNCATION_MARKER,\n truncated: true,\n };\n}\n\n/** Incrementally split log chunks without retaining an unbounded unterminated line. */\nexport class BoundedLogLineAccumulator {\n #pending = \"\";\n #truncated = false;\n\n push(chunk: string): BoundedLogText[] {\n const parts = chunk.split(\"\\n\");\n const complete: BoundedLogText[] = [];\n for (let index = 0; index < parts.length; index += 1) {\n this.#append(parts[index]!);\n if (index < parts.length - 1) complete.push(this.#finish());\n }\n return complete;\n }\n\n flush(): BoundedLogText | null {\n if (this.#pending === \"\" && !this.#truncated) return null;\n return this.#finish();\n }\n\n /** Restore an unterminated backfill line before following appended bytes. */\n seed(line: BoundedLogText): void {\n this.#pending = line.truncated\n ? line.text.slice(0, -LOG_LINE_TRUNCATION_MARKER.length)\n : line.text;\n this.#truncated = line.truncated === true;\n }\n\n reset(): void {\n this.#pending = \"\";\n this.#truncated = false;\n }\n\n #append(text: string): void {\n if (this.#truncated) return;\n const combined = this.#pending + text;\n if (Buffer.byteLength(combined) <= MAX_LOG_LINE_BYTES) {\n this.#pending = combined;\n return;\n }\n const payloadBytes = MAX_LOG_LINE_BYTES - Buffer.byteLength(LOG_LINE_TRUNCATION_MARKER);\n this.#pending = utf8Prefix(combined, payloadBytes);\n this.#truncated = true;\n }\n\n #finish(): BoundedLogText {\n const result: BoundedLogText = this.#truncated\n ? { text: this.#pending + LOG_LINE_TRUNCATION_MARKER, truncated: true }\n : { text: this.#pending };\n this.reset();\n return result;\n }\n}\n",
|
|
112
113
|
"import { spawn } from \"node:child_process\";\nimport { BoundedLogLineAccumulator } from \"./log-line-bounds.ts\";\n\nexport type ComposeLogEvent =\n | { kind: \"line\"; text: string; truncated?: true }\n | { kind: \"meta\"; text: string };\n\nexport interface ComposeLogOptions {\n follow?: boolean;\n tail?: number;\n signal?: AbortSignal;\n}\n\n/** Stream one compose service incrementally without requiring compose files or a cwd. */\nexport async function* composeLogLines(\n project: string,\n service: string,\n options: ComposeLogOptions = {},\n): AsyncGenerator<ComposeLogEvent> {\n const args = [\n \"compose\",\n \"-p\",\n project,\n \"logs\",\n \"--no-color\",\n \"--no-log-prefix\",\n \"--tail\",\n String(Math.max(0, options.tail ?? 50)),\n ];\n if (options.follow) args.push(\"--follow\");\n args.push(service);\n\n const child = spawn(\"docker\", args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n const completion = new Promise<number | null>((resolve) => child.once(\"close\", resolve));\n let stderr = \"\";\n let spawnErrorMessage: string | undefined;\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", (chunk: string) => {\n stderr = (stderr + chunk).slice(-4096);\n });\n child.once(\"error\", (error) => {\n spawnErrorMessage = error.message;\n });\n const abort = () => child.kill(\"SIGTERM\");\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n\n try {\n const accumulator = new BoundedLogLineAccumulator();\n child.stdout.setEncoding(\"utf8\");\n for await (const chunk of child.stdout) {\n for (const line of accumulator.push(chunk as string)) {\n yield { kind: \"line\", ...line };\n }\n }\n const pending = accumulator.flush();\n if (pending !== null) yield { kind: \"line\", ...pending };\n const exitCode = await completion;\n if (spawnErrorMessage !== undefined) {\n yield { kind: \"meta\", text: `docker logs unavailable: ${spawnErrorMessage}` };\n } else if (exitCode !== 0 && !options.signal?.aborted) {\n const detail = stderr.trim().split(\"\\n\").at(-1) ?? `exit ${exitCode}`;\n yield { kind: \"meta\", text: `docker logs failed: ${detail}` };\n } else if (options.follow && !options.signal?.aborted) {\n yield { kind: \"meta\", text: \"docker log stream ended\" };\n }\n } finally {\n options.signal?.removeEventListener(\"abort\", abort);\n if (child.exitCode === null) child.kill(\"SIGTERM\");\n }\n}\n",
|
|
113
114
|
"import {\n closeSync,\n openSync,\n readSync,\n statSync,\n type Stats,\n} from \"node:fs\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { BoundedLogLineAccumulator, boundLogLine, type BoundedLogText } from \"./log-line-bounds.ts\";\n\nconst BACKFILL_CHUNK_BYTES = 64 * 1024;\nconst MAX_BACKFILL_SCAN_BYTES = 4 * 1024 * 1024;\nconst FORWARD_CHUNK_BYTES = 64 * 1024;\nconst LOG_POLL_MS = 200;\n\nexport type TailEvent =\n | { kind: \"line\"; text: string; truncated?: true }\n | { kind: \"reset\" }\n | { kind: \"gone\" }\n | { kind: \"absent\" };\n\nexport interface TailFileOptions {\n follow?: boolean;\n tail?: number;\n signal?: AbortSignal;\n}\n\nfunction statOrNull(path: string): Stats | null {\n try {\n return statSync(path);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n }\n}\n\nfunction readLastLineEventsBeforeOffset(\n path: string,\n count: number,\n endOffset: number,\n): BoundedLogText[] {\n if (count <= 0 || endOffset <= 0) return [];\n const fd = openSync(path, \"r\");\n try {\n let cursor = endOffset;\n let bytes = Buffer.alloc(0);\n let newlineCount = 0;\n const scanFloor = Math.max(0, endOffset - MAX_BACKFILL_SCAN_BYTES);\n while (cursor > scanFloor && newlineCount <= count) {\n const length = Math.min(BACKFILL_CHUNK_BYTES, cursor - scanFloor);\n cursor -= length;\n const chunk = Buffer.allocUnsafe(length);\n const read = readSync(fd, chunk, 0, length, cursor);\n const actual = chunk.subarray(0, read);\n newlineCount += actual.reduce((n, byte) => n + (byte === 10 ? 1 : 0), 0);\n bytes = Buffer.concat([actual, bytes]);\n }\n const lines = bytes.toString(\"utf8\").split(\"\\n\");\n if (lines.at(-1) === \"\") lines.pop();\n return lines.slice(-count).map(boundLogLine);\n } finally {\n closeSync(fd);\n }\n}\n\n/** Read the last complete or unterminated lines from a file in backward chunks. */\nexport function readLastLines(path: string, count: number): string[] {\n const stat = statOrNull(path);\n if (stat === null) return [];\n return readLastLineEventsBeforeOffset(path, count, stat.size).map((line) => line.text);\n}\n\nfunction waitForLogPoll(signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(done, LOG_POLL_MS);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n\nfunction sameFile(left: Stats, right: Stats): boolean {\n return left.ino === right.ino && left.dev === right.dev;\n}\n\n/** Tail one proc log with ordered backfill, reset detection, and polling cancellation. */\nexport async function* tailFile(\n path: string,\n options: TailFileOptions = {},\n): AsyncGenerator<TailEvent> {\n const follow = options.follow ?? false;\n const tail = Math.max(0, options.tail ?? 50);\n let identity = statOrNull(path);\n let existed = identity !== null;\n let offset = identity?.size ?? 0;\n const accumulator = new BoundedLogLineAccumulator();\n let decoder = new StringDecoder(\"utf8\");\n\n if (identity === null) {\n yield { kind: \"absent\" };\n if (!follow) return;\n } else {\n // Snapshot the forward cursor first. Backfill can then finish completely\n // before follow reads anything appended after this point.\n const backfill = readLastLineEventsBeforeOffset(path, tail, offset);\n if (follow && offset > 0) {\n const fd = openSync(path, \"r\");\n try {\n const lastByte = Buffer.allocUnsafe(1);\n readSync(fd, lastByte, 0, 1, offset - 1);\n if (lastByte[0] !== 10) {\n const partial = backfill.pop();\n if (partial !== undefined) accumulator.seed(partial);\n }\n } finally {\n closeSync(fd);\n }\n }\n for (const line of backfill) {\n yield { kind: \"line\", ...line };\n }\n if (!follow) return;\n }\n\n while (!options.signal?.aborted) {\n const current = statOrNull(path);\n if (current === null) {\n if (existed) {\n const decoded = decoder.end();\n if (decoded !== \"\") accumulator.push(decoded);\n const pending = accumulator.flush();\n if (pending !== null) yield { kind: \"line\", ...pending };\n yield { kind: \"gone\" };\n return;\n }\n await waitForLogPoll(options.signal);\n continue;\n }\n\n if (identity === null) {\n identity = current;\n existed = true;\n offset = 0;\n } else if (!sameFile(identity, current) || current.size < offset) {\n identity = current;\n offset = 0;\n accumulator.reset();\n decoder = new StringDecoder(\"utf8\");\n yield { kind: \"reset\" };\n }\n\n if (current.size > offset) {\n const fd = openSync(path, \"r\");\n try {\n while (offset < current.size) {\n const length = Math.min(FORWARD_CHUNK_BYTES, current.size - offset);\n const chunk = Buffer.allocUnsafe(length);\n const read = readSync(fd, chunk, 0, length, offset);\n if (read <= 0) break;\n offset += read;\n for (const line of accumulator.push(decoder.write(chunk.subarray(0, read)))) {\n yield { kind: \"line\", ...line };\n }\n }\n } finally {\n closeSync(fd);\n }\n }\n await waitForLogPoll(options.signal);\n }\n}\n",
|
|
114
115
|
"import {\n HestiaError,\n type LogLine,\n type LogsOptions,\n type ServiceRecord,\n type StackRecord,\n} from \"@hestia/core\";\nimport { composeLogLines } from \"./compose.ts\";\nimport { tailFile, type TailEvent } from \"./tail.ts\";\n\nexport interface LogMergeQueueItem {\n line?: LogLine;\n done?: true;\n}\n\n/** Bounded arrival-order queue whose blocked log producers wake on abort or close. */\nexport class BoundedLogMergeQueue {\n readonly #items: LogMergeQueueItem[] = [];\n readonly #waiters: Array<(item: LogMergeQueueItem) => void> = [];\n readonly #capacityWaiters: Array<() => void> = [];\n #closed = false;\n\n constructor(readonly capacity = 256) {}\n\n async push(item: LogMergeQueueItem, signal?: AbortSignal): Promise<boolean> {\n while (!this.#closed && !signal?.aborted && this.#items.length >= this.capacity) {\n await new Promise<void>((resolve) => {\n const done = () => {\n signal?.removeEventListener(\"abort\", done);\n resolve();\n };\n this.#capacityWaiters.push(done);\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n }\n if (this.#closed || signal?.aborted) return false;\n const waiter = this.#waiters.shift();\n if (waiter !== undefined) waiter(item);\n else this.#items.push(item);\n return true;\n }\n\n next(): Promise<LogMergeQueueItem> {\n const item = this.#items.shift();\n if (item !== undefined) {\n this.#capacityWaiters.shift()?.();\n return Promise.resolve(item);\n }\n if (this.#closed) return Promise.resolve({ done: true });\n return new Promise((resolve) => this.#waiters.push(resolve));\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n for (const wake of this.#capacityWaiters.splice(0)) wake();\n for (const waiter of this.#waiters.splice(0)) waiter({ done: true });\n }\n}\n\nfunction metaLine(record: StackRecord, service: ServiceRecord, text: string): LogLine {\n return { project: record.project, service: service.name, source: service.backend, text, meta: true };\n}\n\nfunction mapTailEvent(\n record: StackRecord,\n service: ServiceRecord,\n event: TailEvent,\n follow: boolean,\n): LogLine {\n switch (event.kind) {\n case \"line\":\n return {\n project: record.project,\n service: service.name,\n source: service.backend,\n text: event.text,\n truncated: event.truncated,\n };\n case \"reset\":\n return metaLine(record, service, \"log reset — proc restarted\");\n case \"gone\":\n return metaLine(record, service, \"log file removed (worktree deleted?)\");\n case \"absent\":\n return metaLine(record, service, follow ? \"waiting for log file\" : \"log file unavailable\");\n }\n}\n\nfunction selectLogServices(record: StackRecord, requested?: string[]): ServiceRecord[] {\n if (requested === undefined || requested.length === 0) return record.services;\n const selected: ServiceRecord[] = [];\n for (const name of requested) {\n const service = record.services.find((candidate) => candidate.name === name);\n if (service === undefined) {\n throw new HestiaError(\"service-not-found\", `service \"${name}\" is not in stack \"${record.project}\"`);\n }\n if (!selected.includes(service)) selected.push(service);\n }\n return selected;\n}\n\n/** Merge every selected stack source by arrival order and tear all sources down on return. */\nexport async function* streamStackLogs(\n record: StackRecord,\n options: LogsOptions = {},\n): AsyncGenerator<LogLine> {\n const services = selectLogServices(record, options.services);\n if (services.length === 0 || options.signal?.aborted) return;\n const controller = new AbortController();\n const queue = new BoundedLogMergeQueue();\n const abort = () => {\n controller.abort();\n queue.close();\n };\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n let active = services.length;\n\n const pumps = services.map(async (service) => {\n try {\n if (service.backend === \"docker\") {\n for await (const event of composeLogLines(record.project, service.name, {\n follow: options.follow,\n tail: options.tail,\n signal: controller.signal,\n })) {\n await queue.push({\n line:\n event.kind === \"line\"\n ? {\n project: record.project,\n service: service.name,\n source: service.backend,\n text: event.text,\n truncated: event.truncated,\n }\n : metaLine(record, service, event.text),\n }, controller.signal);\n }\n } else if (service.logPath === undefined) {\n await queue.push({ line: metaLine(record, service, \"log path unavailable\") }, controller.signal);\n } else {\n for await (const event of tailFile(service.logPath, {\n follow: options.follow,\n tail: options.tail,\n signal: controller.signal,\n })) {\n await queue.push(\n { line: mapTailEvent(record, service, event, options.follow ?? false) },\n controller.signal,\n );\n }\n }\n } catch (error) {\n await queue.push(\n { line: metaLine(record, service, `log source unreadable: ${(error as Error).message}`) },\n controller.signal,\n );\n } finally {\n active -= 1;\n if (active === 0) await queue.push({ done: true }, controller.signal);\n }\n });\n\n try {\n while (true) {\n const item = await queue.next();\n if (item.done) break;\n if (item.line !== undefined) yield item.line;\n }\n } finally {\n controller.abort();\n queue.close();\n options.signal?.removeEventListener(\"abort\", abort);\n await Promise.allSettled(pumps);\n }\n}\n",
|
|
115
|
-
"import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\nimport { LABELS, type StackRecord } from \"@hestia/core\";\nimport { getRepoInfo } from \"./git.ts\";\nimport { tryLoadConfig } from \"./config.ts\";\nimport { hestiaDir, hestiaHome, parseStackRecord, readState } from \"./state.ts\";\nimport { isLive, listPidfiles, procsDir } from \"./proc/pidfile.ts\";\nimport { detectVarlock } from \"./proc/resolver.ts\";\nimport { discoverWorkers } from \"./wrangler/discover.ts\";\nimport { connectorPidfile, listAdopted, readAdopted } from \"./tunnel/registry.ts\";\nimport { countConnectors } from \"./tunnel/cloudflared.ts\";\nimport { isReady } from \"./tunnel/verify.ts\";\nimport { fetchHealth, readDaemonJson } from \"./daemon/client.ts\";\nimport { HESTIAD_PROTOCOL_VERSION } from \"./daemon/routes.ts\";\nimport { plistPath } from \"./daemon/launchd.ts\";\nimport { readHestiaMachineConfig } from \"./router/router-config.ts\";\nimport { readHestiaRouterStatus } from \"./router/portless-adapter.ts\";\nimport { readRouterStackRecords } from \"./router/local-http-router.ts\";\n\n/**\n * `hestia doctor` — report-only, never mutates. Doctor is the tool you reach\n * for when things are broken, so it must not hang on a wedged docker socket\n * or an offline Cloudflare call: every check is individually time-bounded and\n * they all run concurrently. A timed-out check reports `unknown` and never\n * fails the run; only `error` rows set the exit code.\n */\n\nexport interface DoctorRow {\n check: string;\n level: \"ok\" | \"warn\" | \"error\" | \"unknown\";\n detail: string;\n}\n\nconst CHECK_TIMEOUT_MS = 5_000;\n\nfunction row(check: string, level: DoctorRow[\"level\"], detail: string): DoctorRow {\n return { check, level, detail };\n}\n\nasync function bounded(\n check: string,\n fn: () => Promise<DoctorRow[]>,\n timeoutMs = CHECK_TIMEOUT_MS,\n): Promise<DoctorRow[]> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<DoctorRow[]>((resolve) => {\n timer = setTimeout(() => resolve([row(check, \"unknown\", \"timed out\")]), timeoutMs);\n });\n try {\n return await Promise.race([fn(), timeout]);\n } catch (err) {\n return [row(check, \"unknown\", `check failed: ${(err as Error).message}`)];\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction exec(\n cmd: string,\n args: string[],\n timeoutMs = CHECK_TIMEOUT_MS - 500,\n): Promise<{ ok: boolean; stdout: string; message: string }> {\n return new Promise((resolve) => {\n execFile(cmd, args, { timeout: timeoutMs, encoding: \"utf8\" }, (err, stdout, stderr) => {\n resolve({\n ok: err === null,\n stdout: stdout ?? \"\",\n message: err !== null ? (stderr || err.message).trim().split(\"\\n\")[0]! : \"\",\n });\n });\n });\n}\n\ninterface RepoCtx {\n worktreeRoot: string;\n record: StackRecord | null;\n hasCompose: boolean;\n}\n\nasync function envChecks(ctx: RepoCtx | null): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n if (ctx?.hasCompose) {\n if (Bun.which(\"docker\") === null) {\n rows.push(row(\"docker\", \"error\", \"compose file present but docker is not on PATH\"));\n } else {\n const v = await exec(\"docker\", [\"version\", \"--format\", \"{{.Server.Version}}\"]);\n rows.push(\n v.ok\n ? row(\"docker\", \"ok\", `daemon ${v.stdout.trim()}`)\n : row(\"docker\", \"error\", `docker daemon unreachable: ${v.message}`),\n );\n }\n }\n if (ctx !== null) {\n const ignored = await exec(\"git\", [\"-C\", ctx.worktreeRoot, \"check-ignore\", \"-q\", \".hestia/\"]);\n rows.push(\n ignored.ok\n ? row(\"state-ignore\", \"ok\", \".hestia/ is ignored\")\n : row(\n \"state-ignore\",\n \"error\",\n `add the exact line \".hestia/\" to ${join(ctx.worktreeRoot, \".gitignore\")}`,\n ),\n );\n const schema = existsSync(join(ctx.worktreeRoot, \".env.schema\"));\n if (schema) {\n rows.push(\n detectVarlock(ctx.worktreeRoot) !== null\n ? row(\"varlock\", \"ok\", \"local varlock found — worker env composition active\")\n : row(\"varlock\", \"warn\", \".env.schema present but no local varlock (bun install?)\"),\n );\n }\n const workers = discoverWorkers(ctx.worktreeRoot);\n if (workers.length > 0) {\n // same resolution as the adapter: nearest node_modules/.bin/wrangler\n // walking up from each config dir (pnpm links per-package, not root)\n const missing = workers.filter((w) => {\n let dir = dirname(w.configPath);\n for (;;) {\n if (existsSync(join(dir, \"node_modules\", \".bin\", \"wrangler\"))) return false;\n if (dir === ctx.worktreeRoot || dirname(dir) === dir) return true;\n dir = dirname(dir);\n }\n });\n rows.push(\n missing.length === 0\n ? row(\"wrangler\", \"ok\", `${workers.length} config(s), local binary reachable for all`)\n : row(\n \"wrangler\",\n \"error\",\n `${missing.length}/${workers.length} config(s) have no local wrangler binary (install deps)`,\n ),\n );\n }\n }\n if (listAdopted().length > 0 && Bun.which(\"cloudflared\") === null) {\n rows.push(row(\"cloudflared\", \"error\", \"tunnel adopted but cloudflared is not on PATH\"));\n }\n return rows;\n}\n\nasync function repoChecks(ctx: RepoCtx): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n rows.push(\n ctx.hasCompose\n ? row(\"compose-file\", \"ok\", tryLoadConfig(ctx.worktreeRoot)!.composeFile)\n : row(\"compose-file\", \"warn\", \"none found — compose backend unavailable (run/workers still work)\"),\n );\n const ignored = await exec(\"git\", [\"-C\", ctx.worktreeRoot, \"check-ignore\", \"-q\", \".hestia\"]);\n rows.push(\n ignored.ok\n ? row(\"gitignore\", \"ok\", \".hestia is gitignored\")\n : row(\"gitignore\", \"warn\", \".hestia is NOT gitignored — stack state would be committed\"),\n );\n return rows;\n}\n\nasync function stateChecks(ctx: RepoCtx): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const { record, worktreeRoot } = ctx;\n if (record === null) {\n rows.push(row(\"stack\", \"ok\", \"no stack in this worktree\"));\n return rows;\n }\n // proc/wrangler liveness straight from pidfiles; docker via one label query\n const pidfiles = new Map(listPidfiles(procsDir(worktreeRoot)).map((pf) => [pf.name, pf]));\n for (const svc of record.services) {\n if (svc.backend === \"docker\") continue;\n const pf = pidfiles.get(svc.name);\n const live = pf !== undefined && isLive(pf);\n if (!live && svc.state === \"healthy\") {\n rows.push(row(`service:${svc.name}`, \"warn\", \"recorded healthy but the process is dead\"));\n }\n }\n if (record.services.some((s) => s.backend === \"docker\") && Bun.which(\"docker\") !== null) {\n const ps = await exec(\"docker\", [\n \"ps\",\n \"--filter\",\n `label=${LABELS.stack}=${record.project}`,\n \"--format\",\n \"{{.Names}}\",\n ]);\n if (ps.ok && ps.stdout.trim() === \"\") {\n rows.push(row(\"containers\", \"warn\", \"recorded compose services but no containers running\"));\n }\n }\n // exposure port drift = live cross-worktree leak (the OS recycles ports)\n for (const exp of record.tunnel?.exposures ?? []) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (publishedPort !== undefined && publishedPort !== exp.originPort) {\n rows.push(\n row(\n `exposure:${exp.service}`,\n \"error\",\n `ingress rule points at port ${exp.originPort} but the service owns ` +\n `${publishedPort} — a recycled port serves ANOTHER worktree; ` +\n `run any hestia command to resync, this should not persist`,\n ),\n );\n }\n }\n const lockPath = join(hestiaDir(worktreeRoot), \"lock\");\n if (existsSync(lockPath)) {\n try {\n const holder = JSON.parse(readFileSync(lockPath, \"utf8\")) as {\n pid: number;\n startTime: string;\n };\n if (!isLive(holder)) {\n rows.push(row(\"lock\", \"warn\", \"stale worktree lock (dead holder) — auto-broken on next command\"));\n }\n } catch {\n rows.push(row(\"lock\", \"warn\", \"unreadable worktree lock file\"));\n }\n }\n const mirror = join(hestiaHome(), \"stacks\", record.project, \"stack.json\");\n if (!existsSync(mirror)) {\n rows.push(row(\"mirror\", \"warn\", \"no ~/.hestia mirror — `down --project` would not work after worktree deletion\"));\n }\n return rows;\n}\n\n/** Machine-wide checks: orphan mirrors + labeled containers with no mirror. */\nasync function machineChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const stacksDir = join(hestiaHome(), \"stacks\");\n const mirrored = new Set<string>();\n if (existsSync(stacksDir)) {\n for (const project of readdirSync(stacksDir)) {\n const p = join(stacksDir, project, \"stack.json\");\n if (!existsSync(p)) continue;\n mirrored.add(project);\n try {\n const rec = parseStackRecord(readFileSync(p, \"utf8\"), p);\n if (!existsSync(rec.worktree)) {\n rows.push(\n row(\n `orphan-mirror:${project}`,\n \"warn\",\n `worktree ${rec.worktree} is gone — \\`hestia down --project ${project}\\` to clean up`,\n ),\n );\n }\n } catch {\n rows.push(row(`mirror:${project}`, \"warn\", \"unreadable mirror stack.json\"));\n }\n }\n }\n if (Bun.which(\"docker\") !== null) {\n const ps = await exec(\"docker\", [\n \"ps\",\n \"--format\",\n `{{.Label \"${LABELS.stack}\"}}`,\n ]);\n if (ps.ok) {\n const labeled = new Set(ps.stdout.split(\"\\n\").map((l) => l.trim()).filter(Boolean));\n for (const project of labeled) {\n if (!mirrored.has(project)) {\n rows.push(\n row(\n `unmirrored-containers:${project}`,\n \"error\",\n `hestia-labeled containers with no mirror (crash before state write?) — ` +\n `\\`hestia down --project ${project}\\` to reclaim`,\n ),\n );\n }\n }\n }\n }\n return rows;\n}\n\nasync function tunnelChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const adopted = listAdopted();\n if (adopted.length === 0) return rows;\n for (const uuid of adopted) {\n const ref = readAdopted(uuid);\n const label = `tunnel:${ref?.name ?? uuid}`;\n const pf = connectorPidfile(uuid);\n const live = pf !== null && isLive(pf);\n if (!live) {\n rows.push(row(label, \"warn\", \"connector not running — the daemon (or the next hestia command) revives it\"));\n } else if (pf.port !== undefined) {\n rows.push(\n (await isReady(pf.port))\n ? row(label, \"ok\", \"connector live with an edge connection\")\n : row(label, \"warn\", \"connector running but no edge connection yet\"),\n );\n }\n let connectors: number | null;\n try {\n connectors = await countConnectors(uuid);\n } catch {\n connectors = null; // offline / no cert — degrade below\n }\n if (connectors === null) {\n rows.push(row(`${label}:connectors`, \"unknown\", \"cloudflare unreachable — cannot count connectors\"));\n } else {\n const expected = live ? 1 : 0;\n if (connectors > expected) {\n rows.push(\n row(\n `${label}:connectors`,\n \"error\",\n `${connectors} connector(s) registered but hestia runs ${expected} — a foreign ` +\n `replica cross-wires worktrees; stop the other cloudflared`,\n ),\n );\n }\n }\n }\n return rows;\n}\n\nasync function daemonChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const j = readDaemonJson();\n const health = j !== null ? await fetchHealth(j.port) : null;\n if (health === null) {\n rows.push(row(\"daemon\", \"warn\", \"hestiad not running — starts on the next up/run (cap + supervision paused)\"));\n } else if (health.protocolVersion !== HESTIAD_PROTOCOL_VERSION) {\n rows.push(\n row(\n \"daemon\",\n \"warn\",\n `protocol v${health.protocolVersion} != CLI v${HESTIAD_PROTOCOL_VERSION} — restarts on next up/run`,\n ),\n );\n } else {\n rows.push(\n row(\"daemon\", \"ok\", `pid ${health.pid}, ${health.live}/${health.maxStacks} stacks, ${health.queued} queued`),\n );\n for (const w of health.warnings) rows.push(row(\"daemon-config\", \"warn\", w));\n }\n const plist = plistPath();\n if (existsSync(plist)) {\n const content = readFileSync(plist, \"utf8\");\n const args = [...content.matchAll(/<string>([^<]+)<\\/string>/g)].map((m) => m[1]!);\n const paths = args.filter((a) => a.startsWith(\"/\") && !a.includes(\":\"));\n const missing = paths.filter((p) => !existsSync(p));\n rows.push(\n missing.length === 0\n ? row(\"launchd\", \"ok\", `installed (${plist})`)\n : row(\"launchd\", \"error\", `plist references missing paths: ${missing.join(\", \")} — re-run \\`hestia daemon install\\``),\n );\n }\n return rows;\n}\n\nasync function localRouterChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const config = readHestiaMachineConfig();\n rows.push(\n config.valid\n ? row(\"config-toml\", \"ok\", config.path)\n : row(\"config-toml\", \"warn\", config.warnings.join(\"; \")),\n );\n const configuredRoutes = Object.values(config.config.router.repositories)\n .reduce((count, repository) => count + (repository?.services.length ?? 0), 0) +\n readRouterStackRecords().reduce((count, record) => count + (record.localRoutes?.length ?? 0), 0);\n const router = await readHestiaRouterStatus();\n if (!router.installed) {\n rows.push(row(\n \"local-router\",\n configuredRoutes > 0 ? \"warn\" : \"ok\",\n configuredRoutes > 0\n ? \"configured routes exist but the HTTPS router is not installed — run `hestia router install --interactive`\"\n : \"not installed (optional; direct ports remain available)\",\n ));\n } else {\n const usable = router.running && router.trusted;\n rows.push(row(\n \"local-router\",\n usable ? \"ok\" : \"warn\",\n usable\n ? `Portless ${router.version} serving on port ${router.port}`\n : router.running\n ? `Portless ${router.version} is running but its CA is not trusted — run \\`hestia router install --interactive\\``\n : `Portless ${router.version} installed but not reachable on port ${router.port}`,\n ));\n }\n return rows;\n}\n\nexport async function doctor(cwd: string): Promise<DoctorRow[]> {\n let ctx: RepoCtx | null = null;\n let repoRow: DoctorRow;\n try {\n const { worktreeRoot } = await getRepoInfo(cwd);\n ctx = {\n worktreeRoot,\n record: readState(worktreeRoot),\n hasCompose: tryLoadConfig(worktreeRoot) !== null,\n };\n repoRow = row(\"worktree\", \"ok\", worktreeRoot);\n } catch (err) {\n repoRow = row(\"worktree\", \"warn\", `not a git worktree (${(err as Error).message}) — repo/state checks skipped`);\n }\n\n const sections = await Promise.all([\n bounded(\"env\", () => envChecks(ctx)),\n ctx !== null ? bounded(\"repo\", () => repoChecks(ctx)) : Promise.resolve([]),\n ctx !== null ? bounded(\"state\", () => stateChecks(ctx)) : Promise.resolve([]),\n bounded(\"machine\", () => machineChecks()),\n bounded(\"tunnel\", () => tunnelChecks()),\n bounded(\"daemon\", () => daemonChecks()),\n bounded(\"local-router\", () => localRouterChecks()),\n ]);\n return [repoRow, ...sections.flat()];\n}\n",
|
|
116
|
-
"import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n LABELS,\n projectName,\n type FleetEnvelope,\n type FleetServiceView,\n type FleetSnapshot,\n type FleetStackPhase,\n type FleetStackView,\n type RepoId,\n type ServiceRecord,\n type StackIdentity,\n type StackRecord,\n} from \"@hestia/core\";\nimport { getRepoInfo } from \"../git.ts\";\nimport { allListeners, processTree, type Listener } from \"../proc/ports.ts\";\nimport { isLive, listPidfiles } from \"../proc/pidfile.ts\";\nimport { hestiaHome, mirrorProcsDir, parseStackRecord } from \"../state.ts\";\nimport {\n effectiveLocalRouteServices,\n readHestiaMachineConfig,\n type HestiaMachineConfig,\n} from \"../router/router-config.ts\";\nimport { resolvedLocalRouteHostname } from \"../router/local-http-router.ts\";\nimport { readHestiaRouterStatus } from \"../router/portless-adapter.ts\";\nimport { resolveMaxStacks, type SlotLedger, type StackReservation } from \"./slots.ts\";\n\nconst pexec = promisify(execFile);\nconst DEFAULT_REFRESH_MS = 1_000;\nconst DEFAULT_HEARTBEAT_MS = 15_000;\nconst MAX_MIRROR_BYTES = 2 * 1024 * 1024;\n\n/** Minimal admission view used by Fleet without entering the admission mutex. */\nexport interface FleetAdmissionSource {\n ledger: SlotLedger;\n queuedIdentitySnapshot(): StackIdentity[];\n}\n\ninterface ManagedMirrorResult {\n records: StackRecord[];\n warnings: string[];\n}\n\ninterface DockerServiceSnapshot {\n services: Map<string, Map<string, FleetServiceView[\"state\"]>> | null;\n warning?: string;\n}\n\nclass LatestFleetChannel {\n #pending: FleetEnvelope | undefined;\n #waiter: ((result: IteratorResult<FleetEnvelope>) => void) | undefined;\n #closed = false;\n\n push(frame: FleetEnvelope): void {\n if (this.#closed) return;\n const waiter = this.#waiter;\n if (waiter !== undefined) {\n this.#waiter = undefined;\n waiter({ value: frame, done: false });\n } else {\n if (this.#pending?.type === \"snapshot\" && frame.type === \"heartbeat\") return;\n this.#pending = frame;\n }\n }\n\n next(): Promise<IteratorResult<FleetEnvelope>> {\n if (this.#pending !== undefined) {\n const value = this.#pending;\n this.#pending = undefined;\n return Promise.resolve({ value, done: false });\n }\n if (this.#closed) return Promise.resolve({ value: undefined, done: true });\n return new Promise((resolve) => {\n this.#waiter = resolve;\n });\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#pending = undefined;\n this.#waiter?.({ value: undefined, done: true });\n this.#waiter = undefined;\n }\n}\n\nfunction readManagedMirrors(): ManagedMirrorResult {\n const records: StackRecord[] = [];\n const warnings: string[] = [];\n const stacksDirectory = join(hestiaHome(), \"stacks\");\n if (!existsSync(stacksDirectory)) return { records, warnings };\n for (const project of readdirSync(stacksDirectory).sort()) {\n const path = join(stacksDirectory, project, \"stack.json\");\n try {\n const source = readFileSync(path);\n if (source.byteLength > MAX_MIRROR_BYTES) {\n warnings.push(`Fleet mirror too large for ${project}`);\n continue;\n }\n const record = parseStackRecord(source.toString(\"utf8\"), path);\n if (record.project !== project) {\n warnings.push(`Fleet mirror project mismatch for ${project}`);\n continue;\n }\n records.push(record);\n } catch {\n warnings.push(`Fleet mirror unreadable for ${project}`);\n }\n }\n return { records, warnings };\n}\n\nasync function attributeLegacyRepoId(record: StackRecord): Promise<RepoId | null> {\n if (record.repoId !== undefined) return record.repoId;\n if (!existsSync(record.worktree)) return null;\n const info = await getRepoInfo(record.worktree);\n if (projectName(info.repoId, info.repo, info.branch, info.worktreeRoot) !== record.project) return null;\n return info.repoId;\n}\n\n/** Convert one bounded `docker ps` result into project/service health states. */\nexport function parseDockerFleetServices(\n stdout: string,\n): Map<string, Map<string, FleetServiceView[\"state\"]>> {\n const services = new Map<string, Map<string, FleetServiceView[\"state\"]>>();\n for (const line of stdout.split(\"\\n\")) {\n const [project, service, containerState, status] = line.trim().split(\"\\t\");\n if (!project || !service) continue;\n const projectServices = services.get(project) ??\n new Map<string, FleetServiceView[\"state\"]>();\n const healthy = containerState === \"running\" &&\n !/\\((?:unhealthy|health: starting)\\)/i.test(status ?? \"\");\n projectServices.set(service, healthy ? \"healthy\" : \"unhealthy\");\n services.set(project, projectServices);\n }\n return services;\n}\n\nasync function collectDockerServiceSnapshot(): Promise<DockerServiceSnapshot> {\n try {\n const { stdout } = await pexec(\n \"docker\",\n [\n \"ps\",\n \"--format\",\n `{{.Label \\\"${LABELS.stack}\\\"}}\\t{{.Label \\\"com.docker.compose.service\\\"}}\\t{{.State}}\\t{{.Status}}`,\n \"--filter\",\n `label=${LABELS.stack}`,\n ],\n { timeout: 5_000, maxBuffer: 4 * 1024 * 1024 },\n );\n return { services: parseDockerFleetServices(stdout) };\n } catch (error) {\n return {\n services: null,\n warning: `Fleet Docker probe unavailable: ${(error as Error).message}`,\n };\n }\n}\n\nasync function observeFleetService(\n record: StackRecord,\n service: ServiceRecord,\n docker: DockerServiceSnapshot,\n listeners: Listener[] | null,\n config: HestiaMachineConfig,\n localRouterUsable: boolean,\n): Promise<FleetServiceView> {\n let state: FleetServiceView[\"state\"];\n if (service.backend === \"docker\") {\n state = docker.services === null\n ? \"unknown\"\n : docker.services.get(record.project)?.get(service.name) ?? \"exited\";\n } else if (\n service.pid === undefined ||\n service.startTime === undefined ||\n !isLive({ pid: service.pid, startTime: service.startTime })\n ) {\n state = \"exited\";\n } else if (service.publishedPort === undefined) {\n state = \"healthy\";\n } else if (listeners === null) {\n state = \"unknown\";\n } else {\n const members = new Set(processTree(service.pid).map((member) => member.pid));\n const owner = listeners.find((listener) => listener.port === service.publishedPort);\n state = owner !== undefined && members.has(owner.pid) ? \"healthy\" : \"unhealthy\";\n }\n const endpointRecords = record.endpoints.filter(\n (candidate) => (candidate.workload ?? candidate.name) === service.name,\n );\n const locallyRouted = new Set(effectiveLocalRouteServices(record, config));\n const endpoints = endpointRecords.map((endpoint) => ({\n name: endpoint.name,\n workload: endpoint.workload,\n binding: endpoint.binding,\n kind: endpoint.kind,\n host: endpoint.host,\n port: endpoint.port,\n url: endpoint.url,\n localUrl: locallyRouted.has(endpoint.name) && localRouterUsable\n ? `https://${resolvedLocalRouteHostname(record, endpoint.name, config)}`\n : undefined,\n publicUrl: endpoint.publicUrl,\n }));\n return {\n name: service.name,\n backend: service.backend,\n state,\n publishedPort: service.publishedPort,\n endpoint: endpoints[0],\n endpoints,\n };\n}\n\nfunction deriveFleetPhase(record: StackRecord, services: FleetServiceView[]): FleetStackPhase {\n if (record.state === \"starting\" && record.starter !== undefined && isLive(record.starter)) {\n return \"starting\";\n }\n if (services.length === 0) return \"stopped\";\n if (services.every((service) => service.state === \"healthy\")) return \"up\";\n if (services.every((service) => service.state === \"exited\")) return \"stopped\";\n if (services.some((service) => service.state === \"unknown\")) return \"unknown\";\n return \"degraded\";\n}\n\nfunction syntheticFleetStack(identity: StackIdentity, phase: \"queued\" | \"reserved\"): FleetStackView {\n return { ...identity, phase, services: [] };\n}\n\nfunction reservationIdentity(\n reservation: StackReservation,\n records: StackRecord[],\n): StackIdentity | null {\n if (reservation.identity !== undefined) return reservation.identity;\n const record = records.find((candidate) => candidate.project === reservation.project);\n if (record?.repoId === undefined) return null;\n return {\n project: record.project,\n repoId: record.repoId,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n };\n}\n\n/** Collect one sanitized repository Fleet snapshot with a single machine-wide Docker query. */\nexport async function collectFleetSnapshot(\n repoId: RepoId,\n admission: FleetAdmissionSource,\n): Promise<FleetSnapshot> {\n const mirrorResult = readManagedMirrors();\n const machineConfig = readHestiaMachineConfig();\n const routerStatus = await readHestiaRouterStatus();\n const localRouterUsable = routerStatus.installed && routerStatus.running && routerStatus.trusted;\n const docker = await collectDockerServiceSnapshot();\n const warnings = [...mirrorResult.warnings, ...machineConfig.warnings];\n if (docker.warning !== undefined) warnings.push(docker.warning);\n const attributed: StackRecord[] = [];\n for (const record of mirrorResult.records) {\n const attributedRepoId = await attributeLegacyRepoId(record);\n if (attributedRepoId === null) {\n if (record.repoId === undefined) warnings.push(`Fleet excluded unattributed legacy mirror ${record.project}`);\n continue;\n }\n record.repoId = attributedRepoId;\n attributed.push(record);\n }\n\n let listeners: Listener[] | null = [];\n if (attributed.some((record) => record.services.some((service) =>\n service.backend !== \"docker\" && service.publishedPort !== undefined,\n ))) {\n try {\n listeners = await allListeners();\n } catch (error) {\n listeners = null;\n warnings.push(`Fleet port ownership probe unavailable: ${(error as Error).message}`);\n }\n }\n\n const liveMirroredProjects = new Set<string>();\n for (const record of attributed) {\n try {\n if (listPidfiles(mirrorProcsDir(record.project)).some(\n (pidfile) => pidfile.backend !== \"tunnel\" && isLive(pidfile),\n )) {\n liveMirroredProjects.add(record.project);\n }\n } catch {\n warnings.push(`Fleet pidfile mirror unreadable for ${record.project}`);\n }\n }\n\n const allStackViews: FleetStackView[] = [];\n for (const record of attributed) {\n const services = await Promise.all(\n record.services.map((service) => observeFleetService(\n record,\n service,\n docker,\n listeners,\n machineConfig.config,\n localRouterUsable,\n )),\n );\n const derivedPhase = deriveFleetPhase(record, services);\n allStackViews.push({\n project: record.project,\n repoId: record.repoId!,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n phase: derivedPhase === \"stopped\" && liveMirroredProjects.has(record.project)\n ? \"degraded\"\n : derivedPhase,\n services,\n createdAt: record.createdAt,\n });\n }\n const stackViews = allStackViews.filter((stack) => stack.repoId === repoId);\n\n const recordedProjects = new Set(stackViews.map((stack) => stack.project));\n const reservations = admission.ledger.reservationSnapshot();\n for (const reservation of reservations) {\n const identity = reservationIdentity(reservation, attributed);\n if (identity?.repoId === repoId) {\n const existing = stackViews.find((stack) => stack.project === identity.project);\n if (existing?.phase === \"stopped\") existing.phase = \"reserved\";\n else if (existing === undefined) {\n stackViews.push(syntheticFleetStack(identity, \"reserved\"));\n recordedProjects.add(identity.project);\n }\n }\n }\n const queued = admission.queuedIdentitySnapshot();\n for (const identity of queued) {\n if (identity.repoId === repoId) {\n const existing = stackViews.find((stack) => stack.project === identity.project);\n if (existing !== undefined && [\"stopped\", \"reserved\"].includes(existing.phase)) {\n existing.phase = \"queued\";\n } else if (existing === undefined) {\n stackViews.push(syntheticFleetStack(identity, \"queued\"));\n recordedProjects.add(identity.project);\n }\n }\n }\n\n stackViews.sort((left, right) => left.project.localeCompare(right.project));\n const slotBearingProjects = new Set<string>();\n for (const [index, record] of attributed.entries()) {\n const view = allStackViews[index];\n const observedNonTunnel = view?.services.some(\n (service) => service.backend !== \"tunnel\" && service.state !== \"exited\",\n ) ?? false;\n const liveStarter = record.state === \"starting\" &&\n record.starter !== undefined && isLive(record.starter);\n if (observedNonTunnel || liveStarter || liveMirroredProjects.has(record.project)) {\n slotBearingProjects.add(record.project);\n }\n }\n const live = allStackViews.filter((stack) =>\n slotBearingProjects.has(stack.project) &&\n ![\"queued\", \"reserved\", \"stopped\"].includes(stack.phase),\n ).length;\n const allRecordedProjects = new Set(attributed.map((record) => record.project));\n const unbackedReservations = reservations.filter(\n (reservation) => !allRecordedProjects.has(reservation.project),\n );\n const { maxStacks, warnings: capWarnings } = resolveMaxStacks();\n return {\n repoId,\n observedAt: new Date().toISOString(),\n capacity: {\n maxStacks,\n live,\n reserved: unbackedReservations.length,\n queued: queued.length,\n },\n stacks: stackViews,\n warnings: [...capWarnings, ...warnings].sort(),\n };\n}\n\nfunction semanticFleetSnapshot(snapshot: FleetSnapshot): string {\n return JSON.stringify({\n repoId: snapshot.repoId,\n capacity: snapshot.capacity,\n stacks: snapshot.stacks,\n warnings: snapshot.warnings,\n });\n}\n\n/** One overlap-guarded Fleet monitor shared by every daemon subscriber. */\nexport class FleetMonitor {\n readonly #subscribers = new Map<RepoId, Set<LatestFleetChannel>>();\n readonly #semantic = new Map<RepoId, string>();\n readonly #latest = new Map<RepoId, FleetSnapshot>();\n readonly #refreshTimer: ReturnType<typeof setInterval>;\n readonly #heartbeatTimer: ReturnType<typeof setInterval>;\n #refreshing = false;\n #dirty = false;\n #sequence = 0;\n\n constructor(\n readonly admission: FleetAdmissionSource,\n options: { refreshMs?: number; heartbeatMs?: number } = {},\n ) {\n this.#refreshTimer = setInterval(\n () => void this.refreshFleet(),\n options.refreshMs ?? DEFAULT_REFRESH_MS,\n );\n this.#heartbeatTimer = setInterval(\n () => this.#broadcastHeartbeat(),\n options.heartbeatMs ?? DEFAULT_HEARTBEAT_MS,\n );\n }\n\n /** Subscribe to full Fleet snapshots with latest-only backpressure. */\n subscribe(repoId: RepoId, signal?: AbortSignal): AsyncIterable<FleetEnvelope> {\n const channel = new LatestFleetChannel();\n const channels = this.#subscribers.get(repoId) ?? new Set<LatestFleetChannel>();\n channels.add(channel);\n this.#subscribers.set(repoId, channels);\n const latest = this.#latest.get(repoId);\n if (latest !== undefined) {\n channel.push({ type: \"snapshot\", sequence: ++this.#sequence, snapshot: latest });\n }\n void this.refreshFleet();\n const close = () => channel.close();\n signal?.addEventListener(\"abort\", close, { once: true });\n const monitor = this;\n return {\n async *[Symbol.asyncIterator]() {\n try {\n for (;;) {\n const result = await channel.next();\n if (result.done) return;\n yield result.value;\n }\n } finally {\n signal?.removeEventListener(\"abort\", close);\n channel.close();\n const active = monitor.#subscribers.get(repoId);\n active?.delete(channel);\n if (active?.size === 0) monitor.#subscribers.delete(repoId);\n }\n },\n };\n }\n\n /** Refresh every subscribed repository once; overlapping requests coalesce. */\n async refreshFleet(): Promise<void> {\n if (this.#subscribers.size === 0) return;\n if (this.#refreshing) {\n this.#dirty = true;\n return;\n }\n this.#refreshing = true;\n try {\n do {\n this.#dirty = false;\n for (const repoId of this.#subscribers.keys()) {\n const snapshot = await collectFleetSnapshot(repoId, this.admission);\n const semantic = semanticFleetSnapshot(snapshot);\n if (this.#semantic.get(repoId) === semantic) continue;\n this.#semantic.set(repoId, semantic);\n this.#latest.set(repoId, snapshot);\n const frame: FleetEnvelope = {\n type: \"snapshot\",\n sequence: ++this.#sequence,\n snapshot,\n };\n for (const channel of this.#subscribers.get(repoId) ?? []) channel.push(frame);\n }\n } while (this.#dirty);\n } finally {\n this.#refreshing = false;\n }\n }\n\n /** Stop Fleet polling and close every active subscription. */\n stop(): void {\n clearInterval(this.#refreshTimer);\n clearInterval(this.#heartbeatTimer);\n for (const channels of this.#subscribers.values()) {\n for (const channel of channels) channel.close();\n }\n this.#subscribers.clear();\n }\n\n #broadcastHeartbeat(): void {\n const frame: FleetEnvelope = {\n type: \"heartbeat\",\n sequence: ++this.#sequence,\n at: new Date().toISOString(),\n };\n for (const channels of this.#subscribers.values()) {\n for (const channel of channels) channel.push(frame);\n }\n }\n}\n",
|
|
116
|
+
"import {\n HestiaError,\n type SharedClaimResult,\n type SharedClaimWaiter,\n type SharedHostnameRecord,\n} from \"@hestia/core\";\nimport { readMirrorState } from \"../state.ts\";\nimport {\n listSharedHostnames,\n readSharedHostname,\n updateSharedHostname,\n} from \"../tunnel/shared.ts\";\n\n/**\n * Consent-based arbitration for shared hostnames. ALL authority lives in the\n * durable records (holder + FIFO queue in ~/.hestia/shared/<name>.json, one\n * atomic write per transition) — this class only serializes transitions and\n * holds the long-poll resolvers that wake a blocked `hestia claim --wait`.\n * A daemon restart therefore loses nothing but the open connections: queue\n * positions survive, and returning CLIs re-attach to their existing entry.\n *\n * Protocol (user-specified): a claim against a held name joins the queue;\n * the HOLDER arbitrates with allow (grant head) or deny (head stays queued);\n * release / down / stack death grants the head. Deny is \"not now\", never a\n * rejection — only grant, explicit cancel, or a dead stack dequeues.\n */\nexport class SharedArbiter {\n #mutex: Promise<unknown> = Promise.resolve();\n /** name\\0project → resolvers for CLIs long-polling that grant. */\n #polls = new Map<string, Array<{ resolve(result: SharedClaimResult): void; timer: ReturnType<typeof setTimeout> }>>();\n\n constructor(private readonly onChange?: () => void | Promise<void>) {}\n\n #locked<T>(fn: () => Promise<T>): Promise<T> {\n const next = this.#mutex.then(fn, fn);\n this.#mutex = next.catch(() => {});\n return next;\n }\n\n async #notify(): Promise<void> {\n try {\n await this.onChange?.();\n } catch {\n // The 1s route refresh is the safety net; a failed push is not fatal.\n }\n }\n\n #result(record: SharedHostnameRecord, granted: boolean): SharedClaimResult {\n return { granted, holder: record.holder, queued: [...(record.queue ?? [])] };\n }\n\n #wake(name: string, project: string, result: SharedClaimResult): void {\n const key = `${name}\\0${project}`;\n for (const poll of this.#polls.get(key) ?? []) {\n clearTimeout(poll.timer);\n poll.resolve(result);\n }\n this.#polls.delete(key);\n }\n\n /**\n * Grant the queue head, skipping waiters whose stack mirror has vanished\n * (downed while waiting). Clears the holder when the queue drains empty.\n */\n #grantNext(record: SharedHostnameRecord): SharedHostnameRecord {\n const queue = [...(record.queue ?? [])];\n for (;;) {\n const head = queue.shift();\n if (head === undefined) {\n const next = { ...record, queue: [] };\n delete next.holder;\n return next;\n }\n if (readMirrorState(head.project) === null) continue; // dead waiter — drop\n return {\n ...record,\n holder: {\n project: head.project,\n worktree: head.worktree,\n service: record.service,\n at: new Date().toISOString(),\n },\n queue,\n };\n }\n }\n\n /** Claim request. Grants immediately when unclaimed or already the holder. */\n async request(\n name: string,\n requester: { project: string; worktree: string },\n waitMs: number,\n ): Promise<SharedClaimResult> {\n const outcome = await this.#locked(async () => {\n let granted = false;\n const updated = await updateSharedHostname(name, (record) => {\n if (record.holder?.project === requester.project) {\n granted = true;\n return {\n ...record,\n holder: { ...record.holder, worktree: requester.worktree },\n queue: (record.queue ?? []).filter((waiter) => waiter.project !== requester.project),\n };\n }\n if (record.holder === undefined) {\n granted = true;\n return {\n ...record,\n holder: {\n project: requester.project,\n worktree: requester.worktree,\n service: record.service,\n at: new Date().toISOString(),\n },\n queue: (record.queue ?? []).filter((waiter) => waiter.project !== requester.project),\n };\n }\n const queue = [...(record.queue ?? [])];\n const existing = queue.find((waiter) => waiter.project === requester.project);\n if (existing !== undefined) existing.worktree = requester.worktree; // re-attach, keep position\n else queue.push({ project: requester.project, worktree: requester.worktree, at: new Date().toISOString() });\n return { ...record, queue };\n });\n if (updated === null) {\n throw new HestiaError(\"shared-not-found\", `no shared hostname \"${name}\" is declared`);\n }\n return { granted, record: updated };\n });\n if (outcome.granted) {\n await this.#notify();\n return this.#result(outcome.record, true);\n }\n if (waitMs <= 0) return this.#result(outcome.record, false);\n // Durable position + volatile long-poll: expiry answers the CLI but the\n // queue entry REMAINS — re-running `hestia claim` re-attaches to it.\n return new Promise<SharedClaimResult>((resolve) => {\n const key = `${name}\\0${requester.project}`;\n const polls = this.#polls.get(key) ?? [];\n const poll = {\n resolve,\n timer: setTimeout(() => {\n const remaining = (this.#polls.get(key) ?? []).filter((candidate) => candidate !== poll);\n if (remaining.length === 0) this.#polls.delete(key);\n else this.#polls.set(key, remaining);\n const record = readSharedHostname(name);\n resolve(record === null\n ? { granted: false, queued: [] }\n : this.#result(record, record.holder?.project === requester.project));\n }, waitMs),\n };\n polls.push(poll);\n this.#polls.set(key, polls);\n });\n }\n\n /** Drop the requester's durable queue entry (never touches the holder). */\n async cancel(name: string, project: string): Promise<SharedClaimResult> {\n const record = await this.#locked(() =>\n updateSharedHostname(name, (current) => ({\n ...current,\n queue: (current.queue ?? []).filter((waiter) => waiter.project !== project),\n })),\n );\n if (record === null) throw new HestiaError(\"shared-not-found\", `no shared hostname \"${name}\" is declared`);\n this.#wake(name, project, this.#result(record, false));\n return this.#result(record, false);\n }\n\n #assertHolder(record: SharedHostnameRecord, project: string, verb: string): void {\n if (record.holder?.project !== project) {\n throw new HestiaError(\n \"shared-not-holder\",\n record.holder === undefined\n ? `cannot ${verb} \"${record.name}\" — it is unclaimed`\n : `cannot ${verb} \"${record.name}\" — it is held by ${record.holder.project}, not ${project}`,\n );\n }\n }\n\n /** Holder consents: hand the hostname to the queue head (empty queue = release). */\n async allow(name: string, callerProject: string): Promise<SharedClaimResult> {\n const record = await this.#transfer(name, callerProject, \"allow\");\n return this.#result(record, false);\n }\n\n /** Holder declines the head request; the waiter stays durably queued. */\n async deny(name: string, callerProject: string): Promise<SharedClaimResult> {\n const record = await this.#locked(async () => {\n const current = readSharedHostname(name);\n if (current === null) throw new HestiaError(\"shared-not-found\", `no shared hostname \"${name}\" is declared`);\n this.#assertHolder(current, callerProject, \"deny\");\n const updated = await updateSharedHostname(name, (candidate) => {\n const queue = [...(candidate.queue ?? [])];\n if (queue.length > 0) queue[0] = { ...queue[0]!, denied: true };\n return { ...candidate, queue };\n });\n return updated!;\n });\n return this.#result(record, false);\n }\n\n /** Holder (or a force-path caller) releases; the queue head is granted. */\n async release(name: string, callerProject: string): Promise<SharedClaimResult> {\n const record = await this.#transfer(name, callerProject, \"release\");\n return this.#result(record, false);\n }\n\n async #transfer(name: string, callerProject: string, verb: string): Promise<SharedHostnameRecord> {\n const record = await this.#locked(async () => {\n const current = readSharedHostname(name);\n if (current === null) throw new HestiaError(\"shared-not-found\", `no shared hostname \"${name}\" is declared`);\n this.#assertHolder(current, callerProject, verb);\n return (await updateSharedHostname(name, (candidate) => this.#grantNext(candidate)))!;\n });\n if (record.holder !== undefined) {\n this.#wake(record.name, record.holder.project, this.#result(record, true));\n }\n await this.#notify();\n return record;\n }\n\n /**\n * Auto-release every shared hostname this project holds (down/stop hooks,\n * dead-stack sweep). `service` limits release to names whose contract alias\n * matches — `hestia stop web` must not release a hostname served by `api`.\n */\n async releaseProject(project: string, service?: string): Promise<void> {\n const held = listSharedHostnames().filter((record) =>\n record.holder?.project === project &&\n (service === undefined || record.service === service));\n let changed = false;\n for (const record of held) {\n const updated = await this.#locked(async () => {\n const current = readSharedHostname(record.name);\n if (current?.holder?.project !== project) return null;\n return await updateSharedHostname(record.name, (candidate) => this.#grantNext(candidate));\n });\n if (updated === null || updated === undefined) continue;\n changed = true;\n if (updated.holder !== undefined) {\n this.#wake(updated.name, updated.holder.project, this.#result(updated, true));\n }\n }\n if (changed) await this.#notify();\n }\n\n /**\n * Sweep duty: release holders whose stack is no longer occupying a slot\n * (crashed without a down) and prune queue entries with no mirror left.\n * `occupied` = the admission view's live ∪ reserved projects.\n */\n async sweep(occupied: ReadonlySet<string>): Promise<void> {\n let changed = false;\n for (const record of listSharedHostnames()) {\n const holderDead = record.holder !== undefined &&\n !occupied.has(record.holder.project) &&\n readMirrorState(record.holder.project) === null;\n const deadWaiters = (record.queue ?? []).filter(\n (waiter) => readMirrorState(waiter.project) === null,\n );\n if (!holderDead && deadWaiters.length === 0) continue;\n const updated = await this.#locked(() =>\n updateSharedHostname(record.name, (candidate) => {\n const pruned: SharedHostnameRecord = {\n ...candidate,\n queue: (candidate.queue ?? []).filter(\n (waiter) => readMirrorState(waiter.project) !== null,\n ),\n };\n const currentHolderDead = pruned.holder !== undefined &&\n !occupied.has(pruned.holder.project) &&\n readMirrorState(pruned.holder.project) === null;\n return currentHolderDead ? this.#grantNext(pruned) : pruned;\n }),\n );\n if (updated === null) continue;\n changed = true;\n if (updated.holder !== undefined && updated.holder.project !== record.holder?.project) {\n this.#wake(updated.name, updated.holder.project, this.#result(updated, true));\n }\n }\n if (changed) await this.#notify();\n }\n}\n",
|
|
117
|
+
"import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\nimport { LABELS, type StackRecord } from \"@hestia/core\";\nimport { getRepoInfo } from \"./git.ts\";\nimport { tryLoadConfig } from \"./config.ts\";\nimport { hestiaDir, hestiaHome, parseStackRecord, readMirrorState, readState } from \"./state.ts\";\nimport { listSharedHostnames } from \"./tunnel/shared.ts\";\nimport { isLive, listPidfiles, procsDir } from \"./proc/pidfile.ts\";\nimport { detectVarlock } from \"./proc/resolver.ts\";\nimport { discoverWorkers } from \"./wrangler/discover.ts\";\nimport { connectorPidfile, listAdopted, readAdopted } from \"./tunnel/registry.ts\";\nimport { countConnectors } from \"./tunnel/cloudflared.ts\";\nimport { isReady } from \"./tunnel/verify.ts\";\nimport { fetchHealth, readDaemonJson } from \"./daemon/client.ts\";\nimport { HESTIAD_PROTOCOL_VERSION } from \"./daemon/routes.ts\";\nimport { plistPath } from \"./daemon/launchd.ts\";\nimport { readHestiaMachineConfig } from \"./router/router-config.ts\";\nimport { readHestiaRouterStatus } from \"./router/portless-adapter.ts\";\nimport { readRouterStackRecords } from \"./router/local-http-router.ts\";\n\n/**\n * `hestia doctor` — report-only, never mutates. Doctor is the tool you reach\n * for when things are broken, so it must not hang on a wedged docker socket\n * or an offline Cloudflare call: every check is individually time-bounded and\n * they all run concurrently. A timed-out check reports `unknown` and never\n * fails the run; only `error` rows set the exit code.\n */\n\nexport interface DoctorRow {\n check: string;\n level: \"ok\" | \"warn\" | \"error\" | \"unknown\";\n detail: string;\n}\n\nconst CHECK_TIMEOUT_MS = 5_000;\n\nfunction row(check: string, level: DoctorRow[\"level\"], detail: string): DoctorRow {\n return { check, level, detail };\n}\n\nasync function bounded(\n check: string,\n fn: () => Promise<DoctorRow[]>,\n timeoutMs = CHECK_TIMEOUT_MS,\n): Promise<DoctorRow[]> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<DoctorRow[]>((resolve) => {\n timer = setTimeout(() => resolve([row(check, \"unknown\", \"timed out\")]), timeoutMs);\n });\n try {\n return await Promise.race([fn(), timeout]);\n } catch (err) {\n return [row(check, \"unknown\", `check failed: ${(err as Error).message}`)];\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction exec(\n cmd: string,\n args: string[],\n timeoutMs = CHECK_TIMEOUT_MS - 500,\n): Promise<{ ok: boolean; stdout: string; message: string }> {\n return new Promise((resolve) => {\n execFile(cmd, args, { timeout: timeoutMs, encoding: \"utf8\" }, (err, stdout, stderr) => {\n resolve({\n ok: err === null,\n stdout: stdout ?? \"\",\n message: err !== null ? (stderr || err.message).trim().split(\"\\n\")[0]! : \"\",\n });\n });\n });\n}\n\ninterface RepoCtx {\n worktreeRoot: string;\n record: StackRecord | null;\n hasCompose: boolean;\n}\n\nasync function envChecks(ctx: RepoCtx | null): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n if (ctx?.hasCompose) {\n if (Bun.which(\"docker\") === null) {\n rows.push(row(\"docker\", \"error\", \"compose file present but docker is not on PATH\"));\n } else {\n const v = await exec(\"docker\", [\"version\", \"--format\", \"{{.Server.Version}}\"]);\n rows.push(\n v.ok\n ? row(\"docker\", \"ok\", `daemon ${v.stdout.trim()}`)\n : row(\"docker\", \"error\", `docker daemon unreachable: ${v.message}`),\n );\n }\n }\n if (ctx !== null) {\n const ignored = await exec(\"git\", [\"-C\", ctx.worktreeRoot, \"check-ignore\", \"-q\", \".hestia/\"]);\n rows.push(\n ignored.ok\n ? row(\"state-ignore\", \"ok\", \".hestia/ is ignored\")\n : row(\n \"state-ignore\",\n \"error\",\n `add the exact line \".hestia/\" to ${join(ctx.worktreeRoot, \".gitignore\")}`,\n ),\n );\n const schema = existsSync(join(ctx.worktreeRoot, \".env.schema\"));\n if (schema) {\n rows.push(\n detectVarlock(ctx.worktreeRoot) !== null\n ? row(\"varlock\", \"ok\", \"local varlock found — worker env composition active\")\n : row(\"varlock\", \"warn\", \".env.schema present but no local varlock (bun install?)\"),\n );\n }\n const workers = discoverWorkers(ctx.worktreeRoot);\n if (workers.length > 0) {\n // same resolution as the adapter: nearest node_modules/.bin/wrangler\n // walking up from each config dir (pnpm links per-package, not root)\n const missing = workers.filter((w) => {\n let dir = dirname(w.configPath);\n for (;;) {\n if (existsSync(join(dir, \"node_modules\", \".bin\", \"wrangler\"))) return false;\n if (dir === ctx.worktreeRoot || dirname(dir) === dir) return true;\n dir = dirname(dir);\n }\n });\n rows.push(\n missing.length === 0\n ? row(\"wrangler\", \"ok\", `${workers.length} config(s), local binary reachable for all`)\n : row(\n \"wrangler\",\n \"error\",\n `${missing.length}/${workers.length} config(s) have no local wrangler binary (install deps)`,\n ),\n );\n }\n }\n if (listAdopted().length > 0 && Bun.which(\"cloudflared\") === null) {\n rows.push(row(\"cloudflared\", \"error\", \"tunnel adopted but cloudflared is not on PATH\"));\n }\n return rows;\n}\n\nasync function repoChecks(ctx: RepoCtx): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n rows.push(\n ctx.hasCompose\n ? row(\"compose-file\", \"ok\", tryLoadConfig(ctx.worktreeRoot)!.composeFile)\n : row(\"compose-file\", \"warn\", \"none found — compose backend unavailable (run/workers still work)\"),\n );\n const ignored = await exec(\"git\", [\"-C\", ctx.worktreeRoot, \"check-ignore\", \"-q\", \".hestia\"]);\n rows.push(\n ignored.ok\n ? row(\"gitignore\", \"ok\", \".hestia is gitignored\")\n : row(\"gitignore\", \"warn\", \".hestia is NOT gitignored — stack state would be committed\"),\n );\n return rows;\n}\n\nasync function stateChecks(ctx: RepoCtx): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const { record, worktreeRoot } = ctx;\n if (record === null) {\n rows.push(row(\"stack\", \"ok\", \"no stack in this worktree\"));\n return rows;\n }\n // proc/wrangler liveness straight from pidfiles; docker via one label query\n const pidfiles = new Map(listPidfiles(procsDir(worktreeRoot)).map((pf) => [pf.name, pf]));\n for (const svc of record.services) {\n if (svc.backend === \"docker\") continue;\n const pf = pidfiles.get(svc.name);\n const live = pf !== undefined && isLive(pf);\n if (!live && svc.state === \"healthy\") {\n rows.push(row(`service:${svc.name}`, \"warn\", \"recorded healthy but the process is dead\"));\n }\n }\n if (record.services.some((s) => s.backend === \"docker\") && Bun.which(\"docker\") !== null) {\n const ps = await exec(\"docker\", [\n \"ps\",\n \"--filter\",\n `label=${LABELS.stack}=${record.project}`,\n \"--format\",\n \"{{.Names}}\",\n ]);\n if (ps.ok && ps.stdout.trim() === \"\") {\n rows.push(row(\"containers\", \"warn\", \"recorded compose services but no containers running\"));\n }\n }\n // exposure port drift = live cross-worktree leak (the OS recycles ports)\n for (const exp of record.tunnel?.exposures ?? []) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (publishedPort !== undefined && publishedPort !== exp.originPort) {\n rows.push(\n row(\n `exposure:${exp.service}`,\n \"error\",\n `ingress rule points at port ${exp.originPort} but the service owns ` +\n `${publishedPort} — a recycled port serves ANOTHER worktree; ` +\n `run any hestia command to resync, this should not persist`,\n ),\n );\n }\n }\n const lockPath = join(hestiaDir(worktreeRoot), \"lock\");\n if (existsSync(lockPath)) {\n try {\n const holder = JSON.parse(readFileSync(lockPath, \"utf8\")) as {\n pid: number;\n startTime: string;\n };\n if (!isLive(holder)) {\n rows.push(row(\"lock\", \"warn\", \"stale worktree lock (dead holder) — auto-broken on next command\"));\n }\n } catch {\n rows.push(row(\"lock\", \"warn\", \"unreadable worktree lock file\"));\n }\n }\n const mirror = join(hestiaHome(), \"stacks\", record.project, \"stack.json\");\n if (!existsSync(mirror)) {\n rows.push(row(\"mirror\", \"warn\", \"no ~/.hestia mirror — `down --project` would not work after worktree deletion\"));\n }\n return rows;\n}\n\n/** Machine-wide checks: orphan mirrors + labeled containers with no mirror. */\nasync function machineChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const stacksDir = join(hestiaHome(), \"stacks\");\n const mirrored = new Set<string>();\n if (existsSync(stacksDir)) {\n for (const project of readdirSync(stacksDir)) {\n const p = join(stacksDir, project, \"stack.json\");\n if (!existsSync(p)) continue;\n mirrored.add(project);\n try {\n const rec = parseStackRecord(readFileSync(p, \"utf8\"), p);\n if (!existsSync(rec.worktree)) {\n rows.push(\n row(\n `orphan-mirror:${project}`,\n \"warn\",\n `worktree ${rec.worktree} is gone — \\`hestia down --project ${project}\\` to clean up`,\n ),\n );\n }\n } catch {\n rows.push(row(`mirror:${project}`, \"warn\", \"unreadable mirror stack.json\"));\n }\n }\n }\n if (Bun.which(\"docker\") !== null) {\n const ps = await exec(\"docker\", [\n \"ps\",\n \"--format\",\n `{{.Label \"${LABELS.stack}\"}}`,\n ]);\n if (ps.ok) {\n const labeled = new Set(ps.stdout.split(\"\\n\").map((l) => l.trim()).filter(Boolean));\n for (const project of labeled) {\n if (!mirrored.has(project)) {\n rows.push(\n row(\n `unmirrored-containers:${project}`,\n \"error\",\n `hestia-labeled containers with no mirror (crash before state write?) — ` +\n `\\`hestia down --project ${project}\\` to reclaim`,\n ),\n );\n }\n }\n }\n }\n return rows;\n}\n\nasync function tunnelChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const adopted = listAdopted();\n if (adopted.length === 0) return rows;\n for (const uuid of adopted) {\n const ref = readAdopted(uuid);\n const label = `tunnel:${ref?.name ?? uuid}`;\n const pf = connectorPidfile(uuid);\n const live = pf !== null && isLive(pf);\n if (!live) {\n rows.push(row(label, \"warn\", \"connector not running — the daemon (or the next hestia command) revives it\"));\n } else if (pf.port !== undefined) {\n rows.push(\n (await isReady(pf.port))\n ? row(label, \"ok\", \"connector live with an edge connection\")\n : row(label, \"warn\", \"connector running but no edge connection yet\"),\n );\n }\n let connectors: number | null;\n try {\n connectors = await countConnectors(uuid);\n } catch {\n connectors = null; // offline / no cert — degrade below\n }\n if (connectors === null) {\n rows.push(row(`${label}:connectors`, \"unknown\", \"cloudflare unreachable — cannot count connectors\"));\n } else {\n const expected = live ? 1 : 0;\n if (connectors > expected) {\n rows.push(\n row(\n `${label}:connectors`,\n \"error\",\n `${connectors} connector(s) registered but hestia runs ${expected} — a foreign ` +\n `replica cross-wires worktrees; stop the other cloudflared`,\n ),\n );\n }\n }\n }\n return rows;\n}\n\nasync function sharedHostnameChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n for (const shared of listSharedHostnames()) {\n const label = `shared:${shared.name}`;\n const url = `https://${shared.hostname}${shared.path ?? \"\"}`;\n const pending = (shared.queue ?? []).length;\n const queueSuffix = pending > 0 ? ` (${pending} queued)` : \"\";\n if (shared.holder === undefined) {\n rows.push(row(label, \"warn\", `${url} unclaimed — requests answer 503 until \\`hestia claim ${shared.name}\\`${queueSuffix}`));\n continue;\n }\n const mirror = readMirrorState(shared.holder.project);\n if (mirror === null) {\n rows.push(\n row(\n label,\n \"warn\",\n `held by ${shared.holder.project} but its stack mirror is gone — the daemon sweep auto-releases it${queueSuffix}`,\n ),\n );\n continue;\n }\n const endpoint = mirror.endpoints.find((candidate) => (candidate.alias ?? candidate.name) === shared.service);\n rows.push(\n endpoint === undefined\n ? row(label, \"warn\", `held by ${shared.holder.project} but endpoint \"${shared.service}\" is not running — requests answer 503${queueSuffix}`)\n : row(label, \"ok\", `${url} → ${shared.holder.project}${queueSuffix}`),\n );\n }\n return rows;\n}\n\nasync function daemonChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const j = readDaemonJson();\n const health = j !== null ? await fetchHealth(j.port) : null;\n if (health === null) {\n rows.push(row(\"daemon\", \"warn\", \"hestiad not running — starts on the next up/run (cap + supervision paused)\"));\n } else if (health.protocolVersion !== HESTIAD_PROTOCOL_VERSION) {\n rows.push(\n row(\n \"daemon\",\n \"warn\",\n `protocol v${health.protocolVersion} != CLI v${HESTIAD_PROTOCOL_VERSION} — restarts on next up/run`,\n ),\n );\n } else {\n rows.push(\n row(\"daemon\", \"ok\", `pid ${health.pid}, ${health.live}/${health.maxStacks} stacks, ${health.queued} queued`),\n );\n for (const w of health.warnings) rows.push(row(\"daemon-config\", \"warn\", w));\n }\n const plist = plistPath();\n if (existsSync(plist)) {\n const content = readFileSync(plist, \"utf8\");\n const args = [...content.matchAll(/<string>([^<]+)<\\/string>/g)].map((m) => m[1]!);\n const paths = args.filter((a) => a.startsWith(\"/\") && !a.includes(\":\"));\n const missing = paths.filter((p) => !existsSync(p));\n rows.push(\n missing.length === 0\n ? row(\"launchd\", \"ok\", `installed (${plist})`)\n : row(\"launchd\", \"error\", `plist references missing paths: ${missing.join(\", \")} — re-run \\`hestia daemon install\\``),\n );\n }\n return rows;\n}\n\nasync function localRouterChecks(): Promise<DoctorRow[]> {\n const rows: DoctorRow[] = [];\n const config = readHestiaMachineConfig();\n rows.push(\n config.valid\n ? row(\"config-toml\", \"ok\", config.path)\n : row(\"config-toml\", \"warn\", config.warnings.join(\"; \")),\n );\n const configuredRoutes = Object.values(config.config.router.repositories)\n .reduce((count, repository) => count + (repository?.services.length ?? 0), 0) +\n readRouterStackRecords().reduce((count, record) => count + (record.localRoutes?.length ?? 0), 0);\n const router = await readHestiaRouterStatus();\n if (!router.installed) {\n rows.push(row(\n \"local-router\",\n configuredRoutes > 0 ? \"warn\" : \"ok\",\n configuredRoutes > 0\n ? \"configured routes exist but the HTTPS router is not installed — run `hestia router install --interactive`\"\n : \"not installed (optional; direct ports remain available)\",\n ));\n } else {\n const usable = router.running && router.trusted;\n rows.push(row(\n \"local-router\",\n usable ? \"ok\" : \"warn\",\n usable\n ? `Portless ${router.version} serving on port ${router.port}`\n : router.running\n ? `Portless ${router.version} is running but its CA is not trusted — run \\`hestia router install --interactive\\``\n : `Portless ${router.version} installed but not reachable on port ${router.port}`,\n ));\n }\n return rows;\n}\n\nexport async function doctor(cwd: string): Promise<DoctorRow[]> {\n let ctx: RepoCtx | null = null;\n let repoRow: DoctorRow;\n try {\n const { worktreeRoot } = await getRepoInfo(cwd);\n ctx = {\n worktreeRoot,\n record: readState(worktreeRoot),\n hasCompose: tryLoadConfig(worktreeRoot) !== null,\n };\n repoRow = row(\"worktree\", \"ok\", worktreeRoot);\n } catch (err) {\n repoRow = row(\"worktree\", \"warn\", `not a git worktree (${(err as Error).message}) — repo/state checks skipped`);\n }\n\n const sections = await Promise.all([\n bounded(\"env\", () => envChecks(ctx)),\n ctx !== null ? bounded(\"repo\", () => repoChecks(ctx)) : Promise.resolve([]),\n ctx !== null ? bounded(\"state\", () => stateChecks(ctx)) : Promise.resolve([]),\n bounded(\"machine\", () => machineChecks()),\n bounded(\"tunnel\", () => tunnelChecks()),\n bounded(\"shared\", () => sharedHostnameChecks()),\n bounded(\"daemon\", () => daemonChecks()),\n bounded(\"local-router\", () => localRouterChecks()),\n ]);\n return [repoRow, ...sections.flat()];\n}\n",
|
|
118
|
+
"import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n LABELS,\n projectName,\n type FleetEnvelope,\n type FleetServiceView,\n type FleetSharedView,\n type FleetSnapshot,\n type FleetStackPhase,\n type FleetStackView,\n type RepoId,\n type ServiceRecord,\n type StackIdentity,\n type StackRecord,\n} from \"@hestia/core\";\nimport { getRepoInfo } from \"../git.ts\";\nimport { allListeners, processTree, type Listener } from \"../proc/ports.ts\";\nimport { isLive, listPidfiles } from \"../proc/pidfile.ts\";\nimport { hestiaHome, mirrorProcsDir, parseStackRecord } from \"../state.ts\";\nimport { listSharedHostnames } from \"../tunnel/shared.ts\";\nimport {\n effectiveLocalRouteServices,\n readHestiaMachineConfig,\n type HestiaMachineConfig,\n} from \"../router/router-config.ts\";\nimport { resolvedLocalRouteHostname } from \"../router/local-http-router.ts\";\nimport { readHestiaRouterStatus } from \"../router/portless-adapter.ts\";\nimport { resolveMaxStacks, type SlotLedger, type StackReservation } from \"./slots.ts\";\n\nconst pexec = promisify(execFile);\nconst DEFAULT_REFRESH_MS = 1_000;\nconst DEFAULT_HEARTBEAT_MS = 15_000;\nconst MAX_MIRROR_BYTES = 2 * 1024 * 1024;\n\n/** Minimal admission view used by Fleet without entering the admission mutex. */\nexport interface FleetAdmissionSource {\n ledger: SlotLedger;\n queuedIdentitySnapshot(): StackIdentity[];\n}\n\ninterface ManagedMirrorResult {\n records: StackRecord[];\n warnings: string[];\n}\n\ninterface DockerServiceSnapshot {\n services: Map<string, Map<string, FleetServiceView[\"state\"]>> | null;\n warning?: string;\n}\n\nclass LatestFleetChannel {\n #pending: FleetEnvelope | undefined;\n #waiter: ((result: IteratorResult<FleetEnvelope>) => void) | undefined;\n #closed = false;\n\n push(frame: FleetEnvelope): void {\n if (this.#closed) return;\n const waiter = this.#waiter;\n if (waiter !== undefined) {\n this.#waiter = undefined;\n waiter({ value: frame, done: false });\n } else {\n if (this.#pending?.type === \"snapshot\" && frame.type === \"heartbeat\") return;\n this.#pending = frame;\n }\n }\n\n next(): Promise<IteratorResult<FleetEnvelope>> {\n if (this.#pending !== undefined) {\n const value = this.#pending;\n this.#pending = undefined;\n return Promise.resolve({ value, done: false });\n }\n if (this.#closed) return Promise.resolve({ value: undefined, done: true });\n return new Promise((resolve) => {\n this.#waiter = resolve;\n });\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#pending = undefined;\n this.#waiter?.({ value: undefined, done: true });\n this.#waiter = undefined;\n }\n}\n\nfunction readManagedMirrors(): ManagedMirrorResult {\n const records: StackRecord[] = [];\n const warnings: string[] = [];\n const stacksDirectory = join(hestiaHome(), \"stacks\");\n if (!existsSync(stacksDirectory)) return { records, warnings };\n for (const project of readdirSync(stacksDirectory).sort()) {\n const path = join(stacksDirectory, project, \"stack.json\");\n try {\n const source = readFileSync(path);\n if (source.byteLength > MAX_MIRROR_BYTES) {\n warnings.push(`Fleet mirror too large for ${project}`);\n continue;\n }\n const record = parseStackRecord(source.toString(\"utf8\"), path);\n if (record.project !== project) {\n warnings.push(`Fleet mirror project mismatch for ${project}`);\n continue;\n }\n records.push(record);\n } catch {\n warnings.push(`Fleet mirror unreadable for ${project}`);\n }\n }\n return { records, warnings };\n}\n\nasync function attributeLegacyRepoId(record: StackRecord): Promise<RepoId | null> {\n if (record.repoId !== undefined) return record.repoId;\n if (!existsSync(record.worktree)) return null;\n const info = await getRepoInfo(record.worktree);\n if (projectName(info.repoId, info.repo, info.branch, info.worktreeRoot) !== record.project) return null;\n return info.repoId;\n}\n\n/** Convert one bounded `docker ps` result into project/service health states. */\nexport function parseDockerFleetServices(\n stdout: string,\n): Map<string, Map<string, FleetServiceView[\"state\"]>> {\n const services = new Map<string, Map<string, FleetServiceView[\"state\"]>>();\n for (const line of stdout.split(\"\\n\")) {\n const [project, service, containerState, status] = line.trim().split(\"\\t\");\n if (!project || !service) continue;\n const projectServices = services.get(project) ??\n new Map<string, FleetServiceView[\"state\"]>();\n const healthy = containerState === \"running\" &&\n !/\\((?:unhealthy|health: starting)\\)/i.test(status ?? \"\");\n projectServices.set(service, healthy ? \"healthy\" : \"unhealthy\");\n services.set(project, projectServices);\n }\n return services;\n}\n\nasync function collectDockerServiceSnapshot(): Promise<DockerServiceSnapshot> {\n try {\n const { stdout } = await pexec(\n \"docker\",\n [\n \"ps\",\n \"--format\",\n `{{.Label \\\"${LABELS.stack}\\\"}}\\t{{.Label \\\"com.docker.compose.service\\\"}}\\t{{.State}}\\t{{.Status}}`,\n \"--filter\",\n `label=${LABELS.stack}`,\n ],\n { timeout: 5_000, maxBuffer: 4 * 1024 * 1024 },\n );\n return { services: parseDockerFleetServices(stdout) };\n } catch (error) {\n return {\n services: null,\n warning: `Fleet Docker probe unavailable: ${(error as Error).message}`,\n };\n }\n}\n\nasync function observeFleetService(\n record: StackRecord,\n service: ServiceRecord,\n docker: DockerServiceSnapshot,\n listeners: Listener[] | null,\n config: HestiaMachineConfig,\n localRouterUsable: boolean,\n): Promise<FleetServiceView> {\n let state: FleetServiceView[\"state\"];\n if (service.backend === \"docker\") {\n state = docker.services === null\n ? \"unknown\"\n : docker.services.get(record.project)?.get(service.name) ?? \"exited\";\n } else if (\n service.pid === undefined ||\n service.startTime === undefined ||\n !isLive({ pid: service.pid, startTime: service.startTime })\n ) {\n state = \"exited\";\n } else if (service.publishedPort === undefined) {\n state = \"healthy\";\n } else if (listeners === null) {\n state = \"unknown\";\n } else {\n const members = new Set(processTree(service.pid).map((member) => member.pid));\n const owner = listeners.find((listener) => listener.port === service.publishedPort);\n state = owner !== undefined && members.has(owner.pid) ? \"healthy\" : \"unhealthy\";\n }\n const endpointRecords = record.endpoints.filter(\n (candidate) => (candidate.workload ?? candidate.name) === service.name,\n );\n const locallyRouted = new Set(effectiveLocalRouteServices(record, config));\n const endpoints = endpointRecords.map((endpoint) => ({\n name: endpoint.name,\n workload: endpoint.workload,\n binding: endpoint.binding,\n kind: endpoint.kind,\n host: endpoint.host,\n port: endpoint.port,\n url: endpoint.url,\n localUrl: locallyRouted.has(endpoint.name) && localRouterUsable\n ? `https://${resolvedLocalRouteHostname(record, endpoint.name, config)}`\n : undefined,\n publicUrl: endpoint.publicUrl,\n }));\n return {\n name: service.name,\n backend: service.backend,\n state,\n publishedPort: service.publishedPort,\n endpoint: endpoints[0],\n endpoints,\n };\n}\n\nfunction deriveFleetPhase(record: StackRecord, services: FleetServiceView[]): FleetStackPhase {\n if (record.state === \"starting\" && record.starter !== undefined && isLive(record.starter)) {\n return \"starting\";\n }\n if (services.length === 0) return \"stopped\";\n if (services.every((service) => service.state === \"healthy\")) return \"up\";\n if (services.every((service) => service.state === \"exited\")) return \"stopped\";\n if (services.some((service) => service.state === \"unknown\")) return \"unknown\";\n return \"degraded\";\n}\n\nfunction syntheticFleetStack(identity: StackIdentity, phase: \"queued\" | \"reserved\"): FleetStackView {\n return { ...identity, phase, services: [] };\n}\n\nfunction reservationIdentity(\n reservation: StackReservation,\n records: StackRecord[],\n): StackIdentity | null {\n if (reservation.identity !== undefined) return reservation.identity;\n const record = records.find((candidate) => candidate.project === reservation.project);\n if (record?.repoId === undefined) return null;\n return {\n project: record.project,\n repoId: record.repoId,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n };\n}\n\n/** Collect one sanitized repository Fleet snapshot with a single machine-wide Docker query. */\n/**\n * Project every machine-global shared hostname for the Fleet TUI. `mine` marks\n * holder/queue rows belonging to a stack in THIS repo, so the TUI knows which\n * claim/arbitrate keys to offer. Shared names are machine-wide (few), so all\n * are included regardless of repo — a worktree may want to claim any of them.\n */\nfunction collectFleetShared(repoProjects: Set<string>): FleetSharedView[] {\n return listSharedHostnames()\n .map((record) => ({\n name: record.name,\n hostname: record.hostname,\n ...(record.path === undefined ? {} : { path: record.path }),\n url: `https://${record.hostname}${record.path ?? \"\"}`,\n holder: record.holder === undefined\n ? undefined\n : {\n project: record.holder.project,\n worktree: record.holder.worktree,\n mine: repoProjects.has(record.holder.project),\n },\n queue: (record.queue ?? []).map((waiter) => ({\n project: waiter.project,\n worktree: waiter.worktree,\n ...(waiter.denied === true ? { denied: true } : {}),\n mine: repoProjects.has(waiter.project),\n })),\n }))\n .sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport async function collectFleetSnapshot(\n repoId: RepoId,\n admission: FleetAdmissionSource,\n): Promise<FleetSnapshot> {\n const mirrorResult = readManagedMirrors();\n const machineConfig = readHestiaMachineConfig();\n const routerStatus = await readHestiaRouterStatus();\n const localRouterUsable = routerStatus.installed && routerStatus.running && routerStatus.trusted;\n const docker = await collectDockerServiceSnapshot();\n const warnings = [...mirrorResult.warnings, ...machineConfig.warnings];\n if (docker.warning !== undefined) warnings.push(docker.warning);\n const attributed: StackRecord[] = [];\n for (const record of mirrorResult.records) {\n const attributedRepoId = await attributeLegacyRepoId(record);\n if (attributedRepoId === null) {\n if (record.repoId === undefined) warnings.push(`Fleet excluded unattributed legacy mirror ${record.project}`);\n continue;\n }\n record.repoId = attributedRepoId;\n attributed.push(record);\n }\n\n let listeners: Listener[] | null = [];\n if (attributed.some((record) => record.services.some((service) =>\n service.backend !== \"docker\" && service.publishedPort !== undefined,\n ))) {\n try {\n listeners = await allListeners();\n } catch (error) {\n listeners = null;\n warnings.push(`Fleet port ownership probe unavailable: ${(error as Error).message}`);\n }\n }\n\n const liveMirroredProjects = new Set<string>();\n for (const record of attributed) {\n try {\n if (listPidfiles(mirrorProcsDir(record.project)).some(\n (pidfile) => pidfile.backend !== \"tunnel\" && isLive(pidfile),\n )) {\n liveMirroredProjects.add(record.project);\n }\n } catch {\n warnings.push(`Fleet pidfile mirror unreadable for ${record.project}`);\n }\n }\n\n const allStackViews: FleetStackView[] = [];\n for (const record of attributed) {\n const services = await Promise.all(\n record.services.map((service) => observeFleetService(\n record,\n service,\n docker,\n listeners,\n machineConfig.config,\n localRouterUsable,\n )),\n );\n const derivedPhase = deriveFleetPhase(record, services);\n allStackViews.push({\n project: record.project,\n repoId: record.repoId!,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n phase: derivedPhase === \"stopped\" && liveMirroredProjects.has(record.project)\n ? \"degraded\"\n : derivedPhase,\n services,\n createdAt: record.createdAt,\n });\n }\n const stackViews = allStackViews.filter((stack) => stack.repoId === repoId);\n\n const recordedProjects = new Set(stackViews.map((stack) => stack.project));\n const reservations = admission.ledger.reservationSnapshot();\n for (const reservation of reservations) {\n const identity = reservationIdentity(reservation, attributed);\n if (identity?.repoId === repoId) {\n const existing = stackViews.find((stack) => stack.project === identity.project);\n if (existing?.phase === \"stopped\") existing.phase = \"reserved\";\n else if (existing === undefined) {\n stackViews.push(syntheticFleetStack(identity, \"reserved\"));\n recordedProjects.add(identity.project);\n }\n }\n }\n const queued = admission.queuedIdentitySnapshot();\n for (const identity of queued) {\n if (identity.repoId === repoId) {\n const existing = stackViews.find((stack) => stack.project === identity.project);\n if (existing !== undefined && [\"stopped\", \"reserved\"].includes(existing.phase)) {\n existing.phase = \"queued\";\n } else if (existing === undefined) {\n stackViews.push(syntheticFleetStack(identity, \"queued\"));\n recordedProjects.add(identity.project);\n }\n }\n }\n\n stackViews.sort((left, right) => left.project.localeCompare(right.project));\n const slotBearingProjects = new Set<string>();\n for (const [index, record] of attributed.entries()) {\n const view = allStackViews[index];\n const observedNonTunnel = view?.services.some(\n (service) => service.backend !== \"tunnel\" && service.state !== \"exited\",\n ) ?? false;\n const liveStarter = record.state === \"starting\" &&\n record.starter !== undefined && isLive(record.starter);\n if (observedNonTunnel || liveStarter || liveMirroredProjects.has(record.project)) {\n slotBearingProjects.add(record.project);\n }\n }\n const live = allStackViews.filter((stack) =>\n slotBearingProjects.has(stack.project) &&\n ![\"queued\", \"reserved\", \"stopped\"].includes(stack.phase),\n ).length;\n const allRecordedProjects = new Set(attributed.map((record) => record.project));\n const unbackedReservations = reservations.filter(\n (reservation) => !allRecordedProjects.has(reservation.project),\n );\n const { maxStacks, warnings: capWarnings } = resolveMaxStacks();\n const repoProjects = new Set(\n attributed.filter((record) => record.repoId === repoId).map((record) => record.project),\n );\n return {\n repoId,\n observedAt: new Date().toISOString(),\n capacity: {\n maxStacks,\n live,\n reserved: unbackedReservations.length,\n queued: queued.length,\n },\n stacks: stackViews,\n shared: collectFleetShared(repoProjects),\n warnings: [...capWarnings, ...warnings].sort(),\n };\n}\n\nfunction semanticFleetSnapshot(snapshot: FleetSnapshot): string {\n return JSON.stringify({\n repoId: snapshot.repoId,\n capacity: snapshot.capacity,\n stacks: snapshot.stacks,\n shared: snapshot.shared,\n warnings: snapshot.warnings,\n });\n}\n\n/** One overlap-guarded Fleet monitor shared by every daemon subscriber. */\nexport class FleetMonitor {\n readonly #subscribers = new Map<RepoId, Set<LatestFleetChannel>>();\n readonly #semantic = new Map<RepoId, string>();\n readonly #latest = new Map<RepoId, FleetSnapshot>();\n readonly #refreshTimer: ReturnType<typeof setInterval>;\n readonly #heartbeatTimer: ReturnType<typeof setInterval>;\n #refreshing = false;\n #dirty = false;\n #sequence = 0;\n\n constructor(\n readonly admission: FleetAdmissionSource,\n options: { refreshMs?: number; heartbeatMs?: number } = {},\n ) {\n this.#refreshTimer = setInterval(\n () => void this.refreshFleet(),\n options.refreshMs ?? DEFAULT_REFRESH_MS,\n );\n this.#heartbeatTimer = setInterval(\n () => this.#broadcastHeartbeat(),\n options.heartbeatMs ?? DEFAULT_HEARTBEAT_MS,\n );\n }\n\n /** Subscribe to full Fleet snapshots with latest-only backpressure. */\n subscribe(repoId: RepoId, signal?: AbortSignal): AsyncIterable<FleetEnvelope> {\n const channel = new LatestFleetChannel();\n const channels = this.#subscribers.get(repoId) ?? new Set<LatestFleetChannel>();\n channels.add(channel);\n this.#subscribers.set(repoId, channels);\n const latest = this.#latest.get(repoId);\n if (latest !== undefined) {\n channel.push({ type: \"snapshot\", sequence: ++this.#sequence, snapshot: latest });\n }\n void this.refreshFleet();\n const close = () => channel.close();\n signal?.addEventListener(\"abort\", close, { once: true });\n const monitor = this;\n return {\n async *[Symbol.asyncIterator]() {\n try {\n for (;;) {\n const result = await channel.next();\n if (result.done) return;\n yield result.value;\n }\n } finally {\n signal?.removeEventListener(\"abort\", close);\n channel.close();\n const active = monitor.#subscribers.get(repoId);\n active?.delete(channel);\n if (active?.size === 0) monitor.#subscribers.delete(repoId);\n }\n },\n };\n }\n\n /** Refresh every subscribed repository once; overlapping requests coalesce. */\n async refreshFleet(): Promise<void> {\n if (this.#subscribers.size === 0) return;\n if (this.#refreshing) {\n this.#dirty = true;\n return;\n }\n this.#refreshing = true;\n try {\n do {\n this.#dirty = false;\n for (const repoId of this.#subscribers.keys()) {\n const snapshot = await collectFleetSnapshot(repoId, this.admission);\n const semantic = semanticFleetSnapshot(snapshot);\n if (this.#semantic.get(repoId) === semantic) continue;\n this.#semantic.set(repoId, semantic);\n this.#latest.set(repoId, snapshot);\n const frame: FleetEnvelope = {\n type: \"snapshot\",\n sequence: ++this.#sequence,\n snapshot,\n };\n for (const channel of this.#subscribers.get(repoId) ?? []) channel.push(frame);\n }\n } while (this.#dirty);\n } finally {\n this.#refreshing = false;\n }\n }\n\n /** Stop Fleet polling and close every active subscription. */\n stop(): void {\n clearInterval(this.#refreshTimer);\n clearInterval(this.#heartbeatTimer);\n for (const channels of this.#subscribers.values()) {\n for (const channel of channels) channel.close();\n }\n this.#subscribers.clear();\n }\n\n #broadcastHeartbeat(): void {\n const frame: FleetEnvelope = {\n type: \"heartbeat\",\n sequence: ++this.#sequence,\n at: new Date().toISOString(),\n };\n for (const channels of this.#subscribers.values()) {\n for (const channel of channels) channel.push(frame);\n }\n }\n}\n",
|
|
117
119
|
"import { dirname, relative } from \"node:path\";\nimport { chmodSync, mkdirSync } from \"node:fs\";\nimport { HestiaError } from \"@hestia/core\";\nimport { writeAtomicTextFile } from \"./atomic-json-file.ts\";\nimport { discoverRepository, type DiscoveryReport } from \"./discovery.ts\";\nimport { getRepoInfo } from \"./git.ts\";\nimport { withLock } from \"./proc/lock.ts\";\nimport { hestiaHome } from \"./state.ts\";\nimport {\n machineRepositoryConfigPath,\n parseRepositoryWorkloadConfig,\n readConfigLayer,\n renderRepositoryWorkloadConfig,\n repositoryConfigPath,\n type ConfiguredWorkload,\n type EndpointKind,\n type WorkloadSource,\n} from \"./repository-config.ts\";\n\nexport type InitScope = \"repository\" | \"machine\";\n\nexport type InitRequest =\n | { kind: \"dockerfile\"; name: string; file?: string }\n | { kind: \"proc\"; name: string; command: string[]; port?: \"auto\" | \"none\" }\n | { kind: \"wrangler\"; name: string; file?: string }\n | { kind: \"endpoint\"; alias: string; workload: string; binding: string; endpointKind: EndpointKind };\n\nexport interface InitResult {\n path: string;\n scope: InitScope;\n written: boolean;\n proposed: string;\n discovery: DiscoveryReport;\n runnable: boolean;\n}\n\nfunction validateName(name: string, what: string): void {\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(name)) {\n throw new HestiaError(\"usage\", `${what} must use letters, digits, dot, dash, or underscore`);\n }\n}\n\nfunction inferredWorkload(report: DiscoveryReport, name: string): ConfiguredWorkload | null {\n const workload = [...report.runnableWorkloads, ...report.candidateWorkloads]\n .find((candidate) => candidate.name === name);\n if (workload === undefined) return null;\n return {\n source: workload.source,\n composeService: workload.source === \"compose\" ? workload.name : undefined,\n dockerfile: workload.source === \"dockerfile\" && workload.definitionPath !== undefined\n ? relative(report.repository.worktree, workload.definitionPath)\n : undefined,\n wranglerConfig: workload.source === \"wrangler\" && workload.definitionPath !== undefined\n ? relative(report.repository.worktree, workload.definitionPath)\n : undefined,\n endpoints: {},\n };\n}\n\nfunction applyRequest(\n report: DiscoveryReport,\n workloads: Record<string, ConfiguredWorkload>,\n request: InitRequest,\n): void {\n if (request.kind === \"endpoint\") {\n validateName(request.alias, \"endpoint alias\");\n validateName(request.workload, \"workload name\");\n if (!/^(?:main|[1-9][0-9]{0,4})\\/(?:tcp|udp)$/.test(request.binding)) {\n throw new HestiaError(\"usage\", \"endpoint binding must be main/tcp or <port>/tcp|udp\");\n }\n if (request.endpointKind === \"http\" && request.binding.endsWith(\"/udp\")) {\n throw new HestiaError(\"usage\", \"HTTP endpoints require a TCP binding\");\n }\n const workload = workloads[request.workload] ?? inferredWorkload(report, request.workload);\n if (workload === null) {\n throw new HestiaError(\"service-not-found\", `cannot configure endpoint for unknown workload ${request.workload}`);\n }\n workload.endpoints[request.alias] = {\n binding: request.binding,\n kind: request.endpointKind,\n local: request.endpointKind === \"http\",\n };\n workloads[request.workload] = workload;\n return;\n }\n\n validateName(request.name, \"workload name\");\n const source = request.kind as WorkloadSource;\n const existing = workloads[request.name];\n if (existing !== undefined && existing.source !== source) {\n throw new HestiaError(\n \"config-conflict\",\n `workload ${request.name} is already configured as ${existing.source}`,\n );\n }\n workloads[request.name] = {\n source,\n dockerfile: request.kind === \"dockerfile\" ? request.file ?? \"Dockerfile\" : undefined,\n command: request.kind === \"proc\" ? request.command : undefined,\n port: request.kind === \"proc\" ? request.port ?? \"auto\" : undefined,\n wranglerConfig: request.kind === \"wrangler\" ? request.file ?? \"wrangler.toml\" : undefined,\n endpoints: existing?.endpoints ?? {},\n };\n}\n\n/** Propose or explicitly write one validated repository/machine configuration edit. */\nexport async function initializeRepositoryConfig(\n cwd: string,\n request: InitRequest,\n scope: InitScope,\n write: boolean,\n): Promise<InitResult> {\n const repo = await getRepoInfo(cwd);\n const path = scope === \"repository\"\n ? repositoryConfigPath(repo.worktreeRoot)\n : machineRepositoryConfigPath(repo.repoId);\n const lockRoot = `${hestiaHome()}/config-locks/${repo.repoId}-${scope}`;\n return withLock(lockRoot, async () => {\n const before = await discoverRepository(repo.worktreeRoot);\n const layer = readConfigLayer(path);\n const config = {\n version: 1 as const,\n workloads: Object.fromEntries(\n Object.entries(layer.config.workloads).map(([name, workload]) => [\n name,\n { ...workload, command: workload.command?.slice(), endpoints: { ...workload.endpoints } },\n ]),\n ),\n };\n applyRequest(before, config.workloads, request);\n const proposed = renderRepositoryWorkloadConfig(config);\n parseRepositoryWorkloadConfig(proposed, path);\n if (write) {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n if (scope === \"machine\") chmodSync(dirname(path), 0o700);\n writeAtomicTextFile(path, proposed, 0o600);\n }\n const discovery = write ? await discoverRepository(repo.worktreeRoot) : before;\n return {\n path,\n scope,\n written: write,\n proposed,\n discovery,\n runnable: discovery.conflicts.length === 0 && discovery.runnableWorkloads.length > 0,\n };\n });\n}\n",
|
|
118
|
-
"import { existsSync, rmSync, writeFileSync } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { join, resolve } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { resolve4, resolve6, resolveCname } from \"node:dns/promises\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport {\n STATE_SCHEMA_VERSION,\n type AdmitOptions,\n type DownOptions,\n type Endpoint,\n type ExposeOptions,\n type IsolationEngine,\n type LogLine,\n type LogsOptions,\n type ProcSpec,\n type RepoId,\n type ServiceRecord,\n type StackIdentity,\n type StackRecord,\n type TunnelRef,\n type UpOptions,\n HestiaError,\n NotImplemented,\n projectName,\n} from \"@hestia/core\";\nimport { loadConfig, tryLoadConfig } from \"./config.ts\";\nimport { getRepoInfo, type RepoInfo } from \"./git.ts\";\nimport {\n assertDiscoveryRunnable,\n discoverRepository,\n resolveConfiguredWorkloads,\n} from \"./discovery.ts\";\nimport type { ConfiguredWorkload } from \"./repository-config.ts\";\nimport { resolveEndpointSelection } from \"./endpoint-resolution.ts\";\nimport { generateOverride } from \"./compose/override.ts\";\nimport {\n type ComposeCtx,\n composeConfig,\n composeDown,\n composePs,\n composeUp,\n publishedPortFor,\n resolveComposeModel,\n type ResolvedComposeModel,\n waitReady,\n} from \"./compose/cli.ts\";\nimport { writeAtomicTextFile } from \"./atomic-json-file.ts\";\nimport {\n clearState,\n ensureDir,\n hestiaDir,\n hestiaHome,\n mirrorDir,\n mirrorPidfile,\n mirrorProcsDir,\n readMirrorState,\n readState,\n assertMutableStackRecord,\n writeState,\n} from \"./state.ts\";\nimport { withLock } from \"./proc/lock.ts\";\nimport { envKey, startProc } from \"./proc/supervisor.ts\";\nimport {\n type Pidfile,\n isLive,\n listPidfiles,\n procsDir,\n procSpecFingerprint,\n readPidfile,\n removePidfile,\n startTimeOf,\n} from \"./proc/pidfile.ts\";\nimport { stopProcTree } from \"./proc/shutdown.ts\";\nimport { inspectPort } from \"./proc/ports.ts\";\nimport {\n internalEndpointAuthority,\n publicGatewaySocketPath,\n resolvedLocalRouteHostname,\n verifyStackServiceOrigin,\n} from \"./router/local-http-router.ts\";\nimport { detectVarlock } from \"./proc/resolver.ts\";\nimport { planWorkers, privateRegistryDir } from \"./wrangler/adapter.ts\";\nimport {\n globalGainWarnings,\n snapshotGlobalRegistry,\n verifyPrivateRegistry,\n} from \"./wrangler/verify.ts\";\nimport { adoptTunnel } from \"./tunnel/cloudflared.ts\";\nimport { hostnameFor, importBaseRules, inferZone } from \"./tunnel/ingress.ts\";\nimport {\n connectorPidfile,\n isAdopted,\n reconcileTunnel,\n} from \"./tunnel/registry.ts\";\nimport { isReady, quickTunnelUrl } from \"./tunnel/verify.ts\";\nimport { ensureDaemon } from \"./daemon/ensure.ts\";\nimport {\n acquireSlot,\n readDaemonJson,\n reconcileDaemonLocalRoutes,\n releaseSlot,\n} from \"./daemon/client.ts\";\nimport { streamStackLogs } from \"./logs/stream.ts\";\nimport {\n effectiveLocalRouteServices,\n readHestiaMachineConfig,\n} from \"./router/router-config.ts\";\nimport { readHestiaRouterStatus } from \"./router/portless-adapter.ts\";\n\nexport { dockerAvailable } from \"./compose/cli.ts\";\nexport * from \"./compose/override.ts\";\nexport { withLock } from \"./proc/lock.ts\";\nexport { substitutePort, envKey, openProcAttemptLog } from \"./proc/supervisor.ts\";\nexport { readLastLines, tailFile } from \"./logs/tail.ts\";\nexport { BoundedLogMergeQueue, streamStackLogs } from \"./logs/stream.ts\";\nexport { BoundedLogLineAccumulator, boundLogLine, MAX_LOG_LINE_BYTES } from \"./logs/log-line-bounds.ts\";\nexport * from \"./proc/ports.ts\";\nexport * from \"./proc/pidfile.ts\";\nexport * from \"./proc/resolver.ts\";\nexport * from \"./wrangler/discover.ts\";\nexport {\n privateRegistryDir,\n globalRegistryDir,\n planWorkers,\n wranglerResourceModeArgs,\n} from \"./wrangler/adapter.ts\";\nexport * from \"./tunnel/ingress.ts\";\nexport * from \"./tunnel/verify.ts\";\nexport {\n collectDynamicRules,\n connectorPidfile,\n ledgerAdd,\n ledgerHas,\n reconcileTunnel,\n tunnelDir,\n} from \"./tunnel/registry.ts\";\nexport { adoptTunnel, listTunnels, routeDns } from \"./tunnel/cloudflared.ts\";\nexport { hestiaHome } from \"./state.ts\";\nexport { type DoctorRow, doctor } from \"./doctor.ts\";\nexport {\n configuredLocalRouteServices,\n effectiveLocalRouteServices,\n hestiaConfigTomlPath,\n localRouteHostname,\n migrateHestiaMachineConfig,\n readHestiaMachineConfig,\n} from \"./router/router-config.ts\";\nexport {\n installHestiaRouter,\n readHestiaRouterStatus,\n uninstallHestiaRouter,\n} from \"./router/portless-adapter.ts\";\nexport { resolvedLocalRouteHostname } from \"./router/local-http-router.ts\";\nexport { daemonDir, resolveMaxStacks } from \"./daemon/slots.ts\";\nexport { HESTIAD_PROTOCOL_VERSION } from \"./daemon/routes.ts\";\nexport { FleetMonitor, collectFleetSnapshot } from \"./daemon/fleet-monitor.ts\";\nexport { ensureDaemon, stopDaemonProcess } from \"./daemon/ensure.ts\";\nexport {\n daemonAuthHeaders,\n fetchHealth,\n fetchState,\n reconcileDaemonLocalRoutes,\n readDaemonJson,\n streamDaemonFleet,\n streamDaemonServiceLogs,\n} from \"./daemon/client.ts\";\nexport { createRepoId, getRepoInfo } from \"./git.ts\";\nexport { writeAtomicJsonFile } from \"./atomic-json-file.ts\";\nexport * from \"./repository-config.ts\";\nexport * from \"./discovery.ts\";\nexport * from \"./init-config.ts\";\nexport * from \"./endpoint-resolution.ts\";\nexport {\n LAUNCHD_LABEL,\n installLaunchd,\n isBootstrapped,\n launchdManagesThisHome,\n plistPath,\n uninstallLaunchd,\n} from \"./daemon/launchd.ts\";\n\nconst OVERRIDE_FILE = \"compose.override.yml\";\nconst DOCKERFILE_COMPOSE_FILE = \"dockerfile.compose.yml\";\n\ninterface Prepared {\n ctx: ComposeCtx;\n services: string[];\n serviceBindings: Record<string, Array<{ target: number; protocol: \"tcp\" | \"udp\" }>>;\n composeFile: string;\n overridePath: string;\n}\n\nfunction composeUnsupported(message: string): never {\n throw new HestiaError(\"compose-unsupported\", message);\n}\n\nexport function validateResolvedComposeModel(model: ResolvedComposeModel, project: string): void {\n for (const [name, service] of Object.entries(model.services)) {\n if (service.network_mode === \"host\") composeUnsupported(`service ${name} uses host network mode`);\n if (service.pid === \"host\") composeUnsupported(`service ${name} uses host PID mode`);\n if (service.ipc === \"host\") composeUnsupported(`service ${name} uses host IPC mode`);\n for (const port of service.ports ?? []) {\n const target = typeof port.target === \"number\" ? port.target : Number(port.target);\n if (!Number.isInteger(target) || target < 1 || target > 65_535 || String(port.target).includes(\"-\")) {\n composeUnsupported(`service ${name} has unsupported port target ${String(port.target)} (ranges are not supported)`);\n }\n if (port.published?.includes(\"-\")) {\n composeUnsupported(`service ${name} has unsupported published port range ${port.published}`);\n }\n if (port.protocol !== undefined && port.protocol !== \"tcp\" && port.protocol !== \"udp\") {\n composeUnsupported(`service ${name} uses unsupported port protocol ${port.protocol}`);\n }\n }\n }\n for (const [kind, resources] of [\n [\"network\", model.networks],\n [\"volume\", model.volumes],\n ] as const) {\n for (const [key, resource] of Object.entries(resources ?? {})) {\n if (resource.external) composeUnsupported(`${kind} ${key} is external`);\n if (resource.name !== undefined && !resource.name.startsWith(`${project}_`)) {\n composeUnsupported(`${kind} ${key} has explicit machine-global name ${resource.name}`);\n }\n }\n }\n}\n\nexport function expandComposeDependencies(model: ResolvedComposeModel, requested?: string[]): string[] {\n const roots = requested ?? Object.keys(model.services);\n const expanded = new Set<string>();\n const visit = (name: string): void => {\n const service = model.services[name];\n if (service === undefined) {\n throw new HestiaError(\n \"service-not-found\",\n `compose service ${JSON.stringify(name)} is not defined (have: ${Object.keys(model.services).join(\", \")})`,\n );\n }\n if (expanded.has(name)) return;\n expanded.add(name);\n for (const dependency of Object.keys(service.depends_on ?? {})) visit(dependency);\n };\n for (const root of roots) visit(root);\n return [...expanded];\n}\n\nfunction assertNoEnvironmentKeyConflicts(\n workloads: Array<{ name: string; endpoints: Array<{ alias: string }> }>,\n): void {\n const owners = new Map<string, string>();\n for (const workload of workloads) {\n for (const owner of [workload.name, ...workload.endpoints.map((endpoint) => endpoint.alias)]) {\n const key = envKey(owner);\n const previous = owners.get(key);\n if (previous !== undefined && previous !== owner) {\n throw new HestiaError(\n \"env-key-conflict\",\n `${JSON.stringify(previous)} and ${JSON.stringify(owner)} both normalize to HESTIA_${key}`,\n { key: `HESTIA_${key}`, owners: [previous, owner] },\n );\n }\n owners.set(key, owner);\n }\n }\n}\n\nexport function applyConfiguredEndpoints(\n record: StackRecord,\n configuredWorkloads: Record<string, ConfiguredWorkload>,\n): void {\n for (const [workloadName, configured] of Object.entries(configuredWorkloads)) {\n const serviceName = configured.composeService ?? workloadName;\n const service = record.services.find((candidate) => candidate.name === serviceName);\n if (service === undefined) continue;\n for (const [alias, endpointConfig] of Object.entries(configured.endpoints)) {\n const [target, protocol] = endpointConfig.binding.split(\"/\") as [string, \"tcp\" | \"udp\"];\n const binding = service.bindings?.find((candidate) =>\n candidate.target === target && candidate.protocol === protocol\n );\n if (binding === undefined) {\n throw new HestiaError(\n \"endpoint-binding-not-found\",\n `endpoint ${alias} selects ${serviceName}:${endpointConfig.binding}, which is not published`,\n );\n }\n const directUrl = endpointConfig.kind === \"http\"\n ? `http://127.0.0.1:${binding.publishedPort}`\n : undefined;\n setEndpoint(record, {\n name: alias,\n alias,\n workload: serviceName,\n binding: endpointConfig.binding,\n kind: endpointConfig.kind,\n local: endpointConfig.local,\n host: \"127.0.0.1\",\n port: binding.publishedPort,\n url: directUrl,\n });\n record.env[`HESTIA_${envKey(alias)}_PORT`] = String(binding.publishedPort);\n if (directUrl !== undefined) record.env[`HESTIA_${envKey(alias)}_DIRECT_URL`] = directUrl;\n }\n }\n}\n\n/** Refuse to persist runtime state where Git could accidentally track it. */\nasync function assertHestiaStateIgnored(worktreeRoot: string): Promise<void> {\n try {\n await pexec(\"git\", [\"-C\", worktreeRoot, \"rev-parse\", \"--is-inside-work-tree\"], { timeout: 5_000 });\n } catch {\n return; // non-Git fallback mode has no index to protect\n }\n try {\n await pexec(\"git\", [\"-C\", worktreeRoot, \"check-ignore\", \"-q\", \".hestia/\"], { timeout: 5_000 });\n } catch {\n throw new HestiaError(\n \"state-not-ignored\",\n `.hestia is not ignored in ${worktreeRoot}; add the line \".hestia/\" to ${join(worktreeRoot, \".gitignore\")}`,\n { remedy: `.hestia/`, path: join(worktreeRoot, \".gitignore\") },\n );\n }\n}\n\n/** Resolve and validate Compose before atomically publishing its isolation override. */\nasync function prepareCompose(\n worktreeRoot: string,\n project: string,\n repo: string,\n branch: string,\n opts?: UpOptions,\n configuredBaseFile?: string,\n): Promise<Prepared> {\n const cfg = configuredBaseFile === undefined\n ? loadConfig(worktreeRoot)\n : { composeFile: configuredBaseFile, services: [] };\n const resolvedModel = await resolveComposeModel(project, cfg.composeFile, worktreeRoot);\n validateResolvedComposeModel(resolvedModel, project);\n const services = expandComposeDependencies(resolvedModel, opts?.services);\n const { yaml, serviceBindings } = generateOverride({\n userCompose: resolvedModel,\n project,\n repo,\n branch,\n worktree: worktreeRoot,\n services,\n });\n\n ensureDir(hestiaDir(worktreeRoot));\n const overridePath = join(hestiaDir(worktreeRoot), OVERRIDE_FILE);\n writeAtomicTextFile(overridePath, yaml);\n\n return {\n ctx: {\n project,\n baseFile: cfg.composeFile,\n overrideFile: overridePath,\n cwd: worktreeRoot,\n },\n services,\n serviceBindings,\n composeFile: cfg.composeFile,\n overridePath,\n };\n}\n\nfunction writeDockerfileComposeModel(\n worktreeRoot: string,\n workloads: Record<string, ConfiguredWorkload>,\n conventionalComposeFile?: string,\n): string | undefined {\n const dockerfiles = Object.entries(workloads).filter(([, workload]) => workload.source === \"dockerfile\");\n if (dockerfiles.length === 0) return conventionalComposeFile;\n const services = Object.fromEntries(dockerfiles.map(([name, workload]) => {\n const ports = [...new Set(Object.values(workload.endpoints).map((endpoint) => endpoint.binding))]\n .filter((binding) => !binding.startsWith(\"main/\"));\n return [name, {\n build: {\n context: worktreeRoot,\n dockerfile: workload.dockerfile ?? \"Dockerfile\",\n },\n ...(ports.length > 0 ? { ports } : {}),\n }];\n }));\n const model = {\n ...(conventionalComposeFile === undefined\n ? {}\n : { include: [{ path: conventionalComposeFile }] }),\n services,\n };\n const path = join(hestiaDir(worktreeRoot), DOCKERFILE_COMPOSE_FILE);\n writeAtomicTextFile(path, stringifyYaml(model));\n return path;\n}\n\nfunction freshRecord(\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n worktree: string,\n): StackRecord {\n return {\n schemaVersion: STATE_SCHEMA_VERSION,\n project,\n repoId,\n repo,\n branch,\n worktree,\n state: \"up\",\n services: [],\n env: {},\n endpoints: [],\n createdAt: new Date().toISOString(),\n };\n}\n\n/** Guard every stack mutation against legacy state and changed Git identity. */\nfunction assertCurrentStackIdentity(\n record: StackRecord,\n current: RepoInfo,\n): void {\n const path = join(hestiaDir(current.worktreeRoot), \"stack.json\");\n assertMutableStackRecord(record, path);\n const matches =\n record.repoId === current.repoId &&\n record.repo === current.repo &&\n record.branch === current.branch &&\n resolve(record.worktree) === resolve(current.worktreeRoot) &&\n record.project === projectName(\n current.repoId,\n current.repo,\n current.branch,\n current.worktreeRoot,\n );\n if (!matches) {\n throw new HestiaError(\n \"stack-identity-changed\",\n `this checkout no longer matches stack ${record.project}; run hestia down before starting or changing it`,\n {\n recorded: {\n repoId: record.repoId,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n },\n current,\n recovery: `hestia down --project ${record.project}`,\n },\n );\n }\n}\n\nfunction upsertService(record: StackRecord, svc: ServiceRecord): void {\n const i = record.services.findIndex((s) => s.name === svc.name);\n if (i >= 0) record.services[i] = svc;\n else record.services.push(svc);\n}\n\nfunction upsertAuxiliary(record: StackRecord, auxiliary: ServiceRecord): void {\n record.auxiliary ??= [];\n const index = record.auxiliary.findIndex((candidate) => candidate.name === auxiliary.name);\n if (index >= 0) record.auxiliary[index] = auxiliary;\n else record.auxiliary.push(auxiliary);\n}\n\nfunction setEndpoint(record: StackRecord, ep: Endpoint): void {\n const i = record.endpoints.findIndex((e) => e.name === ep.name);\n if (i >= 0) {\n const previous = record.endpoints[i]!;\n const portRotated = previous.port !== ep.port;\n const namedExposure = record.tunnel?.exposures.some((exposure) =>\n (exposure.alias ?? exposure.service) === ep.name) ?? false;\n if (portRotated && previous.publicUrl !== undefined && !namedExposure) {\n delete previous.publicUrl;\n delete record.env[urlKey(ep.name)];\n }\n record.endpoints[i] = { ...previous, ...ep };\n }\n else record.endpoints.push(ep);\n applyLocalRouteProjection(record);\n}\n\nfunction dropService(record: StackRecord, name: string): void {\n record.services = record.services.filter((s) => s.name !== name);\n record.endpoints = record.endpoints.filter((e) => e.name !== name);\n delete record.env[`HESTIA_${envKey(name)}_PORT`];\n delete record.env[directUrlKey(name)];\n delete record.env[localUrlKey(name)];\n}\n\nfunction persistStoppedService(record: StackRecord, name: string): void {\n const service = record.services.find((candidate) => candidate.name === name);\n if (service === undefined) return;\n service.state = \"stopped\";\n delete service.publishedPort;\n service.bindings = [];\n record.endpoints = record.endpoints.filter((endpoint) =>\n endpoint.name !== name && endpoint.workload !== name\n );\n for (const key of Object.keys(record.env)) {\n if (key.startsWith(`HESTIA_${envKey(name)}_`)) delete record.env[key];\n }\n}\n\nfunction recordProc(\n record: StackRecord,\n svc: ServiceRecord,\n): void {\n const recorded = svc.publishedPort === undefined ? svc : {\n ...svc,\n bindings: [{\n id: `${svc.name}:main/tcp`,\n target: \"main\",\n protocol: \"tcp\" as const,\n publishedPort: svc.publishedPort,\n }],\n };\n upsertService(record, recorded);\n if (svc.publishedPort !== undefined) {\n record.env[`HESTIA_${envKey(svc.name)}_MAIN_TCP_PORT`] = String(svc.publishedPort);\n record.env[`HESTIA_${envKey(svc.name)}_PORT`] = String(svc.publishedPort);\n setEndpoint(record, {\n name: svc.name,\n workload: svc.name,\n binding: \"main/tcp\",\n host: \"127.0.0.1\",\n port: svc.publishedPort,\n reservedName: `${svc.name}.${record.branch}.${record.repo}.localhost`,\n });\n }\n}\n\nfunction urlKey(name: string): string {\n return `HESTIA_${envKey(name)}_URL`;\n}\n\nfunction directUrlKey(name: string): string {\n return `HESTIA_${envKey(name)}_DIRECT_URL`;\n}\n\nfunction localUrlKey(name: string): string {\n return `HESTIA_${envKey(name)}_LOCAL_URL`;\n}\n\n/** Project direct and stable URL fields from explicit plus configured route intent. */\nfunction applyLocalRouteProjection(record: StackRecord): void {\n const config = readHestiaMachineConfig().config;\n const selected = new Set(effectiveLocalRouteServices(record, config));\n for (const endpoint of record.endpoints) {\n endpoint.reservedName = resolvedLocalRouteHostname(record, endpoint.name, config);\n const service = record.services.find(\n (candidate) => candidate.name === (endpoint.workload ?? endpoint.name),\n );\n const selectedBinding = endpoint.binding === undefined\n ? undefined\n : service?.bindings?.find(\n (binding) => `${binding.target}/${binding.protocol}` === endpoint.binding,\n );\n const publishedPort = selectedBinding?.publishedPort ?? service?.publishedPort;\n if (!selected.has(endpoint.name)) {\n // Explicit endpoint kind is a protocol declaration. Legacy untyped ports\n // remain raw until route intent declares HTTP.\n if (endpoint.kind === \"http\" && publishedPort !== undefined) {\n endpoint.url = `http://127.0.0.1:${publishedPort}`;\n record.env[directUrlKey(endpoint.name)] = endpoint.url;\n } else {\n delete endpoint.url;\n delete record.env[directUrlKey(endpoint.name)];\n }\n delete endpoint.localUrl;\n delete record.env[localUrlKey(endpoint.name)];\n continue;\n }\n if (service === undefined || publishedPort === undefined || service.backend === \"tunnel\") continue;\n endpoint.host = \"127.0.0.1\";\n endpoint.port = publishedPort;\n if (endpoint.kind !== undefined && endpoint.kind !== \"http\") {\n delete endpoint.url;\n delete endpoint.localUrl;\n delete record.env[directUrlKey(endpoint.name)];\n delete record.env[localUrlKey(endpoint.name)];\n continue;\n }\n endpoint.url = `http://127.0.0.1:${publishedPort}`;\n endpoint.localUrl = `https://${endpoint.reservedName}`;\n record.env[directUrlKey(endpoint.name)] = endpoint.url;\n record.env[localUrlKey(endpoint.name)] = endpoint.localUrl;\n }\n}\n\n/**\n * Re-point named-mode exposures at the services' CURRENT ports. Returns true\n * when the merged ingress derived from this record changed (a port rotated or\n * an origin stopped) — the caller must reconcile the global connector after\n * releasing the worktree lock, because an ingress rule aimed at a port this\n * stack no longer owns is a live cross-worktree misdelivery once the OS\n * recycles the port.\n */\nfunction syncExposures(record: StackRecord): boolean {\n const t = record.tunnel;\n if (t === undefined) return false;\n let changed = false;\n for (const exp of t.exposures) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (publishedPort === undefined) {\n changed = true; // origin gone — regen drops the rule (404, never a stale port)\n } else if (publishedPort !== exp.originPort) {\n exp.originPort = publishedPort;\n changed = true;\n }\n }\n return changed;\n}\n\nconst pexec = promisify(execFile);\n\nfunction matchesExpectedStack(\n record: StackRecord | null,\n expected: NonNullable<DownOptions[\"expectedStack\"]>,\n): boolean {\n return record !== null &&\n (record.repoId === undefined || record.repoId === expected.repoId) &&\n record.worktree === expected.worktree &&\n record.createdAt === expected.createdAt;\n}\n\nfunction projectMutationRoot(project: string): string {\n return join(hestiaHome(), \"project-locks\", project);\n}\n\nasync function assertNamedTunnelDns(hostname: string, tunnelUuid: string): Promise<void> {\n const expected = `${tunnelUuid}.cfargotunnel.com`;\n if (process.env.HESTIA_E2E_DNS_RESOLVED === \"1\") return;\n try {\n const records = (await resolveCname(hostname)).map((record) => record.replace(/\\.$/, \"\").toLowerCase());\n if (records.includes(expected.toLowerCase())) return;\n } catch {}\n // A cfargotunnel.com target only serves traffic when the record is proxied,\n // and Cloudflare flattens proxied CNAMEs: public DNS answers with edge\n // A/AAAA records and the target is unrecoverable. Any successful resolution\n // therefore means the wildcard exists; end-to-end routing is confirmed by\n // the connector verify step after start.\n try {\n if ((await resolve4(hostname)).length > 0) return;\n } catch {}\n try {\n if ((await resolve6(hostname)).length > 0) return;\n } catch {}\n throw new HestiaError(\n \"dns-route-required\",\n `${hostname} does not resolve through Hestia's adopted tunnel; configure wildcard CNAME *.${hostname.split(\".\").slice(1).join(\".\")} -> ${expected}`,\n { hostname, wildcardTarget: expected },\n );\n}\n\ninterface StartAdmissionGuard {\n createdAt: string;\n rollback(): Promise<void>;\n}\n\nexport class ComposeEngine implements IsolationEngine {\n /** Refresh daemon route state after a stack mutation; strict mode surfaces failures. */\n async #refreshLocalRoutes(strict = false): Promise<void> {\n try {\n const daemon = readDaemonJson();\n if (daemon !== null) await reconcileDaemonLocalRoutes(daemon.port);\n } catch (error) {\n if (strict) throw error;\n process.stderr.write(`warning: local router reconcile failed: ${(error as Error).message}\\n`);\n }\n }\n\n /** Stream this worktree's recorded services without taking its mutation lock. */\n async *logs(cwd: string, opts?: LogsOptions): AsyncGenerator<LogLine> {\n const { worktreeRoot } = await getRepoInfo(cwd);\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\"no-stack\", \"no stack for this worktree\");\n }\n yield* streamStackLogs(record, opts);\n }\n\n /** Stream a mirrored project without requiring its original worktree. */\n async *logsProject(project: string, opts?: LogsOptions): AsyncGenerator<LogLine> {\n const record = readMirrorState(project);\n if (record === null) {\n throw new HestiaError(\"no-stack\", `no mirror for project \"${project}\"`);\n }\n yield* streamStackLogs(record, opts);\n }\n\n /**\n * Best-effort convergence of the global connector after a stack mutation.\n * Failures degrade to warnings — `run`/`down` must not fail because the\n * tunnel blipped; `status` will show it unhealthy.\n */\n async #reconcileAdopted(t: TunnelRef | undefined): Promise<void> {\n if (t === undefined) return;\n try {\n const outcome = await reconcileTunnel(t);\n for (const w of outcome.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (outcome.error !== undefined) {\n process.stderr.write(`warning: ${outcome.error.message}\\n`);\n }\n } catch (err) {\n process.stderr.write(\n `warning: tunnel reconcile failed: ${(err as Error).message}\\n`,\n );\n }\n }\n\n /**\n * Machine-wide admission before any start: ensure hestiad, request a slot\n * (idempotent for already-live projects), and bridge the grant with a\n * provisional `starting` record so the slot survives a multi-minute cold\n * `compose up` and a CLI crash frees it (dead starter → sweep). Runs BEFORE\n * the worktree lock — never long-poll while holding it.\n * Returns a cleanup that rolls the provisional record back on failure.\n */\n async #admit(\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n worktreeRoot: string,\n opts?: AdmitOptions,\n ): Promise<StartAdmissionGuard> {\n const currentIdentity = { repo, repoId, branch, worktreeRoot };\n const existingRecord = readState(worktreeRoot);\n if (existingRecord !== null) assertCurrentStackIdentity(existingRecord, currentIdentity);\n let handle: Awaited<ReturnType<typeof ensureDaemon>> | null = null;\n if (opts?.noDaemon) {\n process.stderr.write(\n \"warning: --no-daemon skips the stack cap and daemon supervision\\n\",\n );\n } else {\n handle = await ensureDaemon();\n const identity: StackIdentity = {\n project,\n repoId,\n repo,\n branch,\n worktree: worktreeRoot,\n };\n const result = await acquireSlot(handle.port, identity, opts?.wait ?? 0);\n if (!result.granted) {\n const live = result.live.join(\", \");\n throw new HestiaError(\n \"stack-limit\",\n `stack cap reached (live: ${live}) — \\`hestia down\\` one, or retry with --wait`,\n );\n }\n }\n // Provisional record only when the project has no record at all — an\n // existing record already carries occupancy through its services.\n let provisional = false;\n let retainedEmpty = false;\n let previousState: StackRecord[\"state\"] | undefined;\n let previousStarter: StackRecord[\"starter\"];\n let createdAt = \"\";\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n let rec = readState(worktreeRoot);\n if (rec === null) {\n const rec = freshRecord(project, repoId, repo, branch, worktreeRoot);\n rec.state = \"starting\";\n rec.starter = {\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n };\n writeState(worktreeRoot, rec);\n provisional = true;\n createdAt = rec.createdAt;\n } else {\n assertCurrentStackIdentity(rec, currentIdentity);\n if (rec.services.length === 0) {\n retainedEmpty = true;\n provisional = true;\n previousState = rec.state;\n previousStarter = rec.starter;\n rec.state = \"starting\";\n rec.starter = {\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n };\n writeState(worktreeRoot, rec);\n }\n createdAt = rec.createdAt;\n }\n }));\n return { createdAt, rollback: async () => {\n // Failure rollback: drop the record only if it is still our untouched\n // provisional (a partially-started stack must stay visible for `down`).\n if (!provisional) return;\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const rec = readState(worktreeRoot);\n if (rec !== null && rec.state === \"starting\" && rec.services.length === 0 && rec.composeFile === undefined) {\n if (retainedEmpty) {\n rec.state = previousState ?? \"stopped\";\n rec.starter = previousStarter;\n writeState(worktreeRoot, rec);\n } else {\n clearState(worktreeRoot, project);\n }\n }\n }));\n if (handle !== null) await releaseSlot(handle.port, project);\n } };\n }\n\n async up(cwd: string, opts?: UpOptions): Promise<StackRecord> {\n const discovery = await discoverRepository(cwd);\n assertDiscoveryRunnable(discovery);\n assertNoEnvironmentKeyConflicts(\n [...discovery.runnableWorkloads, ...discovery.candidateWorkloads]\n .map((workload) => ({ name: workload.name, endpoints: workload.endpoints })),\n );\n const configured = await resolveConfiguredWorkloads(cwd);\n if (configured.conflicts.length > 0) {\n throw new HestiaError(\"config-conflict\", configured.conflicts.join(\"; \"));\n }\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n await assertHestiaStateIgnored(worktreeRoot);\n const project = projectName(repoId, repo, branch, worktreeRoot);\n let tunnelDirty = false;\n\n const admission = await this.#admit(project, repoId, repo, branch, worktreeRoot, opts);\n let done: StackRecord;\n try {\n done = await this.#upLocked(\n worktreeRoot,\n project,\n repoId,\n repo,\n branch,\n admission.createdAt,\n opts,\n configured.workloads,\n (d) => {\n tunnelDirty = d;\n },\n );\n } catch (err) {\n await admission.rollback();\n throw err;\n }\n if (tunnelDirty) await this.#reconcileAdopted(done.tunnel);\n await this.#refreshLocalRoutes();\n return done;\n }\n\n async #upLocked(\n worktreeRoot: string,\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n admittedCreatedAt: string,\n opts: UpOptions | undefined,\n configuredWorkloads: Record<string, ConfiguredWorkload>,\n setTunnelDirty: (d: boolean) => void,\n ): Promise<StackRecord> {\n return withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record?.createdAt !== admittedCreatedAt) {\n throw new HestiaError(\"worktree-busy\", \"stack was removed after admission; start cancelled\");\n }\n record.repoId ??= repoId;\n const conventionalCompose = tryLoadConfig(worktreeRoot);\n const composeBaseFile = writeDockerfileComposeModel(\n worktreeRoot,\n configuredWorkloads,\n conventionalCompose?.composeFile,\n );\n const hasCompose = composeBaseFile !== undefined;\n const configuredProcs = Object.entries(configuredWorkloads)\n .filter(([, workload]) => workload.source === \"proc\");\n const configuredWorkers = Object.entries(configuredWorkloads)\n .filter(([, workload]) => workload.source === \"wrangler\");\n if (!hasCompose && !opts?.workers && configuredProcs.length === 0 && configuredWorkers.length === 0) {\n // plain `up` still means \"compose up\" — procs arrive via `run`\n loadConfig(worktreeRoot); // throws config-missing\n }\n\n if (hasCompose) {\n const p = await prepareCompose(worktreeRoot, project, repo, branch, opts, composeBaseFile);\n await composeConfig(p.ctx);\n for (const serviceName of p.services) {\n const proc = record.services.find(\n (service) => service.name === serviceName && service.backend !== \"docker\",\n );\n if (proc !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `compose service \"${serviceName}\" collides with a running proc of the same name`,\n );\n }\n }\n // Publish teardown intent before Compose may create anything. A later\n // failure remains visible and `down` can always remove partial resources.\n record.composeFile = p.composeFile;\n record.overrideFile = p.overridePath;\n writeState(worktreeRoot, record);\n // The explicit list prevents unrelated profile services from starting;\n // transitive dependencies were expanded before override generation.\n let rows;\n try {\n await composeUp(p.ctx, p.services);\n rows = await waitReady(p.ctx, p.services);\n } catch (error) {\n record.state = \"degraded\";\n for (const serviceName of p.services) {\n upsertService(record, {\n name: serviceName,\n backend: \"docker\",\n state: \"unhealthy\",\n containerPort: p.serviceBindings[serviceName]?.[0]?.target,\n bindings: [],\n });\n }\n delete record.starter;\n writeState(worktreeRoot, record);\n throw error;\n }\n const byName = new Map(rows.map((r) => [r.Service, r]));\n\n for (const svc of p.services) {\n const row = byName.get(svc);\n const targetBindings = p.serviceBindings[svc] ?? [];\n const bindings = targetBindings.flatMap((binding) => {\n const publishedPort = publishedPortFor(row, binding.target, binding.protocol);\n return publishedPort === undefined ? [] : [{\n id: `${svc}:${binding.target}/${binding.protocol}`,\n target: String(binding.target),\n protocol: binding.protocol,\n publishedPort,\n }];\n });\n const canonical = bindings.length === 1 ? bindings[0]!.publishedPort : undefined;\n upsertService(record, {\n name: svc,\n backend: \"docker\",\n state: \"healthy\",\n containerPort: targetBindings[0]?.target,\n publishedPort: canonical,\n containerId: row?.ID,\n bindings,\n });\n for (const binding of bindings) {\n record.env[\n `HESTIA_${envKey(svc)}_${binding.target}_${binding.protocol.toUpperCase()}_PORT`\n ] = String(binding.publishedPort);\n }\n if (bindings.length === 1 && canonical !== undefined) {\n record.env[`HESTIA_${envKey(svc)}_PORT`] = String(canonical);\n setEndpoint(record, {\n name: svc,\n host: \"127.0.0.1\",\n port: canonical,\n workload: svc,\n binding: `${bindings[0]!.target}/${bindings[0]!.protocol}`,\n kind: bindings[0]!.protocol,\n reservedName: `${svc}.${branch}.${repo}.localhost`,\n });\n }\n }\n }\n\n for (const [name, workload] of configuredProcs) {\n const command = workload.command!;\n const configuredSpec: ProcSpec = {\n name,\n argv: command,\n port: workload.port ?? \"auto\",\n backend: \"proc\",\n };\n const clash = record.services.find((service) => service.name === name && service.backend === \"docker\");\n if (clash !== undefined) {\n throw new HestiaError(\"name-conflict\", `configured proc ${name} collides with a compose workload`);\n }\n const existing = readPidfile(worktreeRoot, name);\n if (existing !== null && isLive(existing)) {\n if (existing.specFingerprint === procSpecFingerprint(configuredSpec)) continue;\n persistStoppedService(record, name);\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n await stopProcTree(existing);\n removePidfile(worktreeRoot, name);\n } else if (existing !== null) {\n removePidfile(worktreeRoot, name);\n }\n const result = await startProc(\n worktreeRoot,\n configuredSpec,\n record.env,\n (pidfile) => mirrorPidfile(record.project, pidfile),\n );\n recordProc(record, result.record);\n writeState(worktreeRoot, record);\n if (result.error !== undefined) throw result.error;\n }\n\n if (opts?.workers || configuredWorkers.length > 0) {\n const configuredFilters = configuredWorkers.map(([name, workload]) => workload.wranglerConfig ?? name);\n const explicitFilters = Array.isArray(opts?.workers) ? opts.workers : [];\n await this.#upWorkers(worktreeRoot, record, {\n ...opts,\n workers: opts?.workers === true ? true : [...new Set([...explicitFilters, ...configuredFilters])],\n });\n }\n\n applyConfiguredEndpoints(record, configuredWorkloads);\n\n record.state = \"up\";\n delete record.starter; // no longer provisional — services carry the slot\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n return record;\n }));\n }\n\n /** Spawn one supervised `wrangler dev` per discovered config, in parallel. */\n async #upWorkers(\n worktreeRoot: string,\n record: StackRecord,\n opts: UpOptions,\n ): Promise<void> {\n const plan = await planWorkers(worktreeRoot, {\n filter: Array.isArray(opts.workers) ? opts.workers : [],\n allowRemote: opts.allowRemote ?? false,\n force: opts.force ?? false,\n varlock: !opts.noVarlock && detectVarlock(worktreeRoot) !== null,\n });\n for (const w of plan.warnings) process.stderr.write(`warning: ${w}\\n`);\n\n for (const spec of plan.specs) {\n const clash = record.services.find(\n (s) => s.name === spec.name && s.backend === \"docker\",\n );\n if (clash !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `worker \"${spec.name}\" collides with a compose service name`,\n );\n }\n }\n\n const globalBefore = snapshotGlobalRegistry();\n const results = await Promise.allSettled(\n plan.specs.map((spec) =>\n startProc(worktreeRoot, spec, record.env, (pf) =>\n mirrorPidfile(record.project, pf),\n ),\n ),\n );\n\n let firstError: unknown;\n const started: string[] = [];\n for (const [i, res] of results.entries()) {\n if (res.status === \"fulfilled\") {\n recordProc(record, res.value.record);\n if (res.value.error !== undefined) firstError ??= res.value.error;\n else started.push(plan.specs[i]!.name);\n } else {\n firstError ??= res.reason;\n }\n }\n // Persist what did start before surfacing any failure, so `down` cleans it.\n writeState(worktreeRoot, record);\n if (started.length > 0) {\n await verifyPrivateRegistry(privateRegistryDir(worktreeRoot), started);\n for (const w of globalGainWarnings(globalBefore, started)) {\n process.stderr.write(`warning: ${w}\\n`);\n }\n }\n if (firstError !== undefined) throw firstError;\n }\n\n async run(cwd: string, spec: ProcSpec, admit?: AdmitOptions): Promise<StackRecord> {\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n await assertHestiaStateIgnored(worktreeRoot);\n const project = projectName(repoId, repo, branch, worktreeRoot);\n let tunnelDirty = false;\n\n const admission = await this.#admit(project, repoId, repo, branch, worktreeRoot, admit);\n let done: StackRecord;\n try {\n done = await this.#runLocked(worktreeRoot, project, repoId, repo, branch, admission.createdAt, spec, (d) => {\n tunnelDirty = d;\n });\n } catch (err) {\n await admission.rollback();\n throw err;\n }\n if (tunnelDirty) await this.#reconcileAdopted(done.tunnel);\n await this.#refreshLocalRoutes();\n return done;\n }\n\n async #runLocked(\n worktreeRoot: string,\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n admittedCreatedAt: string,\n spec: ProcSpec,\n setTunnelDirty: (d: boolean) => void,\n ): Promise<StackRecord> {\n return withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record?.createdAt !== admittedCreatedAt) {\n throw new HestiaError(\"worktree-busy\", \"stack was removed after admission; start cancelled\");\n }\n record.repoId ??= repoId;\n\n const docker = record.services.find(\n (s) => s.name === spec.name && s.backend === \"docker\",\n );\n if (docker !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `\"${spec.name}\" is a compose service in this stack — pick another --name`,\n );\n }\n\n const existing = readPidfile(worktreeRoot, spec.name);\n if (existing !== null && isLive(existing)) {\n const sameCmd = existing.specFingerprint === procSpecFingerprint(spec);\n if (sameCmd) return record; // idempotent no-op: already running this\n persistStoppedService(record, spec.name);\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n await stopProcTree(existing); // replace: same name, different command\n removePidfile(worktreeRoot, spec.name);\n } else if (existing !== null) {\n removePidfile(worktreeRoot, spec.name); // stale (crashed/reused pid)\n }\n\n delete record.env[directUrlKey(spec.name)];\n const result = await startProc(worktreeRoot, spec, record.env, (pf) =>\n mirrorPidfile(record.project, pf),\n );\n recordProc(record, result.record);\n record.state = \"up\";\n delete record.starter; // no longer provisional — services carry the slot\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n if (result.error !== undefined) throw result.error;\n return record;\n }));\n }\n\n async stopService(cwd: string, name: string): Promise<void> {\n const currentIdentity = await getRepoInfo(cwd);\n const { repo, repoId, branch, worktreeRoot } = currentIdentity;\n let tunnel: TunnelRef | undefined;\n let tunnelDirty = false;\n const project = readState(worktreeRoot)?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record !== null) {\n assertCurrentStackIdentity(record, currentIdentity);\n if (record.services.some((service) => service.name === name && service.backend === \"docker\")) {\n throw new HestiaError(\n \"backend-not-stoppable\",\n `Docker workload ${name} cannot be stopped individually; use hestia down`,\n );\n }\n }\n const pf = readPidfile(worktreeRoot, name);\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(worktreeRoot, name);\n }\n if (record !== null) {\n const originAuxiliaries = (record.auxiliary ?? []).filter(\n (auxiliary) => auxiliary.originService === name,\n );\n for (const auxiliary of originAuxiliaries) {\n const auxiliaryPidfile = readPidfile(worktreeRoot, auxiliary.name);\n if (auxiliaryPidfile !== null && isLive(auxiliaryPidfile)) {\n await stopProcTree(auxiliaryPidfile);\n }\n removePidfile(worktreeRoot, auxiliary.name);\n }\n if (originAuxiliaries.length > 0) {\n const auxiliaryNames = new Set(originAuxiliaries.map((auxiliary) => auxiliary.name));\n record.auxiliary = (record.auxiliary ?? []).filter(\n (auxiliary) => !auxiliaryNames.has(auxiliary.name),\n );\n for (const auxiliary of originAuxiliaries) {\n const endpointName = auxiliary.originEndpoint ?? name;\n const endpoint = record.endpoints.find((candidate) => candidate.name === endpointName);\n if (endpoint !== undefined) delete endpoint.publicUrl;\n delete record.env[urlKey(endpointName)];\n }\n }\n // a quick tunnel going down takes its origin's public URL with it\n const stopped = record.services.find((s) => s.name === name);\n if (stopped?.originService !== undefined) {\n const endpointName = stopped.originEndpoint ?? stopped.originService;\n const ep = record.endpoints.find((e) => e.name === endpointName);\n if (ep !== undefined) delete ep.publicUrl;\n delete record.env[urlKey(endpointName)];\n }\n dropService(record, name);\n tunnel = record.tunnel;\n tunnelDirty = syncExposures(record);\n const hasStickyLocalRoutes = effectiveLocalRouteServices(record).length > 0;\n if (record.services.length === 0 && record.composeFile === undefined && !hasStickyLocalRoutes) {\n clearState(worktreeRoot, record.project);\n } else {\n writeState(worktreeRoot, record);\n }\n }\n }));\n if (tunnelDirty) await this.#reconcileAdopted(tunnel);\n await this.#refreshLocalRoutes();\n }\n\n async addLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n if (services.length === 0) throw new HestiaError(\"usage\", \"Route add: at least one service is required\");\n const daemon = await ensureDaemon();\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) throw new HestiaError(\"no-stack\", \"Route add: no stack for this worktree\");\n const record = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const current = readState(worktreeRoot);\n if (current === null) throw new HestiaError(\"no-stack\", \"Route add: no stack for this worktree\");\n assertCurrentStackIdentity(current, currentIdentity);\n const resolvedRoutes = services.map((input) => ({\n input,\n selection: resolveEndpointSelection(current, input),\n }));\n for (const { input, selection } of resolvedRoutes) {\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\n \"usage\",\n `Route add requires an HTTP endpoint; ${input} is ${selection.endpoint.kind}`,\n );\n }\n const service = current.services.find((candidate) => candidate.name === selection.workload);\n const binding = service?.bindings?.find(\n (candidate) => `${candidate.target}/${candidate.protocol}` === selection.binding,\n );\n const publishedPort = binding?.publishedPort ?? service?.publishedPort;\n if (service === undefined || publishedPort === undefined || service.backend === \"tunnel\") {\n throw new HestiaError(\n \"route-origin-unavailable\",\n `Route add: endpoint \"${input}\" is not running with a direct port`,\n );\n }\n if (!await verifyStackServiceOrigin(current, service, publishedPort)) {\n throw new HestiaError(\n \"route-origin-unavailable\",\n `Route add: endpoint \"${input}\" no longer owns its recorded direct port`,\n );\n }\n }\n current.localRoutes ??= [];\n for (const { selection } of resolvedRoutes) {\n const alias = selection.endpoint.name;\n current.disabledLocalRoutes = (current.disabledLocalRoutes ?? []).filter(\n (route) => (route.alias ?? route.service) !== alias,\n );\n const intent = { service: selection.workload, selector: selection.binding, alias };\n const existing = current.localRoutes.findIndex((route) => (route.alias ?? route.service) === alias);\n if (existing >= 0) current.localRoutes[existing] = intent;\n else current.localRoutes.push(intent);\n }\n current.localRoutes.sort((left, right) => (left.alias ?? left.service).localeCompare(right.alias ?? right.service));\n applyLocalRouteProjection(current);\n writeState(worktreeRoot, current);\n return current;\n }));\n await reconcileDaemonLocalRoutes(daemon.port);\n return record;\n }\n\n async removeLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.resetLocalRoutes(cwd, services);\n }\n\n async disableLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.#setLocalRouteOverride(cwd, services, \"disable\");\n }\n\n async resetLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.#setLocalRouteOverride(cwd, services, \"reset\");\n }\n\n async #setLocalRouteOverride(\n cwd: string,\n services: string[],\n mode: \"disable\" | \"reset\",\n ): Promise<StackRecord> {\n if (services.length === 0) throw new HestiaError(\"usage\", `Route ${mode}: at least one endpoint is required`);\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) throw new HestiaError(\"no-stack\", `Route ${mode}: no stack for this worktree`);\n const record = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const current = readState(worktreeRoot);\n if (current === null) throw new HestiaError(\"no-stack\", `Route ${mode}: no stack for this worktree`);\n assertCurrentStackIdentity(current, currentIdentity);\n const selections = services.map((input) => resolveEndpointSelection(current, input));\n const names = new Set(selections.map((selection) => selection.endpoint.name));\n current.localRoutes = (current.localRoutes ?? []).filter(\n (route) => !names.has(route.alias ?? route.service),\n );\n if (current.localRoutes.length === 0) delete current.localRoutes;\n current.disabledLocalRoutes = (current.disabledLocalRoutes ?? []).filter(\n (route) => !names.has(route.alias ?? route.service),\n );\n if (mode === \"disable\") {\n for (const selection of selections) {\n current.disabledLocalRoutes.push({\n service: selection.workload,\n selector: selection.binding,\n alias: selection.endpoint.name,\n });\n }\n }\n if (current.disabledLocalRoutes.length === 0) delete current.disabledLocalRoutes;\n applyLocalRouteProjection(current);\n if (\n current.services.length === 0 &&\n current.composeFile === undefined &&\n effectiveLocalRouteServices(current).length === 0\n ) {\n clearState(worktreeRoot, current.project);\n } else {\n writeState(worktreeRoot, current);\n }\n return current;\n }));\n await this.#refreshLocalRoutes();\n return record;\n }\n\n async down(cwd: string, opts?: DownOptions): Promise<void> {\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n let tunnel: TunnelRef | undefined;\n let initialRecord: StackRecord | null = null;\n try {\n initialRecord = readState(worktreeRoot);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n }\n const mutationProject = initialRecord?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(mutationProject), async () => {\n let record: StackRecord | null = null;\n try {\n record = readState(worktreeRoot);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n if (opts?.expectedStack !== undefined) {\n throw new HestiaError(\"worktree-busy\", \"cannot verify confirmed stack identity against corrupt state\");\n }\n }\n if (opts?.expectedStack !== undefined && !matchesExpectedStack(record, opts.expectedStack)) {\n throw new HestiaError(\"worktree-busy\", \"stack changed after down confirmation; retry\");\n }\n tunnel = record?.tunnel;\n\n // procs first — they depend on the containers, not vice-versa\n for (const pf of listPidfiles(procsDir(worktreeRoot))) {\n await stopProcTree(pf);\n removePidfile(worktreeRoot, pf.name);\n }\n rmSync(privateRegistryDir(worktreeRoot), { recursive: true, force: true });\n\n const composeFile = record?.composeFile ?? tryLoadConfig(worktreeRoot)?.composeFile;\n if (composeFile !== undefined) {\n const project =\n record?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n const overrideFile =\n record?.overrideFile ?? join(hestiaDir(worktreeRoot), OVERRIDE_FILE);\n if (existsSync(overrideFile)) {\n await composeDown(\n { project, baseFile: composeFile, overrideFile, cwd: worktreeRoot },\n opts?.destroy ?? false,\n );\n } else if (record?.composeFile !== undefined) {\n // Recorded compose services but the override is gone — tear down by\n // project label alone, same as the mirror path (needs no files).\n const rest = [\"compose\", \"-p\", project, \"down\", \"--remove-orphans\"];\n if (opts?.destroy) rest.push(\"-v\");\n await pexec(\"docker\", rest, { timeout: 180_000 });\n }\n // else: the repo has a compose file but this stack never composed\n // (procs-only `run` in a compose repo) — nothing docker-side to do.\n }\n\n const project = record?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n clearState(worktreeRoot, project);\n await this.#releaseAdmission(project);\n }));\n // mirror is gone → regen drops this stack's ingress rules; the connector\n // keeps serving the base rules and other worktrees\n await this.#reconcileAdopted(tunnel);\n await this.#refreshLocalRoutes();\n }\n\n /** Best-effort slot release — waiters get their grant now instead of at the next sweep. */\n async #releaseAdmission(project: string): Promise<void> {\n const j = readDaemonJson();\n if (j !== null) await releaseSlot(j.port, project);\n }\n\n /**\n * Teardown by project name from the ~/.hestia mirror — the worktree (and its\n * lock) may no longer exist. Containers go down by label via `compose -p`,\n * which needs no compose files.\n */\n async downProject(project: string, opts?: DownOptions): Promise<void> {\n if (!/^[a-z0-9][a-z0-9-]{0,99}$/.test(project)) {\n throw new HestiaError(\"usage\", `invalid project name ${JSON.stringify(project)}`);\n }\n let record: StackRecord | null = null;\n let mirrorCorrupt = false;\n try {\n record = readMirrorState(project);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n mirrorCorrupt = true;\n }\n const teardownFromMirror = async (): Promise<void> => {\n let fresh: StackRecord | null = null;\n try {\n fresh = readMirrorState(project);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n mirrorCorrupt = true;\n }\n if (mirrorCorrupt && opts?.expectedStack !== undefined) {\n throw new HestiaError(\"worktree-busy\", \"cannot verify confirmed stack identity against corrupt state\");\n }\n if (opts?.expectedStack !== undefined && !matchesExpectedStack(fresh, opts.expectedStack)) {\n throw new HestiaError(\"worktree-busy\", \"stack changed after down confirmation; retry\");\n }\n try {\n for (const pf of listPidfiles(mirrorProcsDir(project))) await stopProcTree(pf);\n } catch {\n // A corrupt pidfile is unsafe to signal. Continue with label-only\n // Docker cleanup and remove the corrupt mirror for manual proc audit.\n }\n try {\n const rest = [\"compose\", \"-p\", project, \"down\", \"--remove-orphans\"];\n if (opts?.destroy) rest.push(\"-v\");\n await pexec(\"docker\", rest, { timeout: 180_000 });\n } catch (err) {\n if (fresh?.composeFile !== undefined) {\n throw new HestiaError(\n \"compose-failed\",\n `docker compose -p ${project} down failed: ${(err as Error).message}`,\n );\n }\n }\n rmSync(mirrorDir(project), { recursive: true, force: true });\n };\n if (record !== null && existsSync(record.worktree)) {\n const info = await getRepoInfo(record.worktree);\n const identityMatches =\n resolve(info.worktreeRoot) === resolve(record.worktree) &&\n (record.repoId === undefined ? record.repo === info.repo : record.repoId === info.repoId);\n const localRecord = readState(record.worktree);\n if (identityMatches && localRecord?.project === record.project) {\n await this.down(record.worktree, opts);\n return;\n }\n if (identityMatches) {\n // A cleaned local .hestia directory still shares the worktree's\n // mutation lock with up/run, while teardown reads the surviving mirror.\n const usedMirror = await withLock(record.worktree, () =>\n withLock(projectMutationRoot(project), async () => {\n const current = readState(record.worktree);\n if (current?.project === project) return false;\n await teardownFromMirror();\n return true;\n })\n );\n if (!usedMirror) {\n await this.down(record.worktree, opts);\n return;\n }\n await this.#releaseAdmission(project);\n await this.#reconcileAdopted(record.tunnel);\n await this.#refreshLocalRoutes();\n return;\n }\n }\n\n // The mirror directory cannot host its own lock because successful\n // teardown removes it. Keep deleted-worktree serialization in a stable\n // project-lock directory outside the mirror being destroyed.\n const projectLockRoot = projectMutationRoot(project);\n await withLock(projectLockRoot, teardownFromMirror);\n await this.#releaseAdmission(project);\n await this.#reconcileAdopted(record?.tunnel);\n await this.#refreshLocalRoutes();\n }\n\n async expose(\n cwd: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n if (services.length === 0) {\n throw new HestiaError(\"usage\", \"expose requires at least one service name\");\n }\n // Mode pick: --tunnel wins, else the sticky adoption, else quick tunnels.\n const existingRecord = readState(worktreeRoot);\n if (existingRecord !== null) assertCurrentStackIdentity(existingRecord, currentIdentity);\n const tunnelName = opts?.tunnel ?? existingRecord?.tunnel?.name;\n if (tunnelName === undefined && opts?.keepHostHeader) {\n throw new HestiaError(\n \"usage\",\n \"--keep-host-header is not supported for quick tunnels because guarded routing requires Hestia's internal authority\",\n );\n }\n await ensureDaemon();\n await this.#refreshLocalRoutes(true);\n if (tunnelName === undefined) {\n return this.#exposeQuick(worktreeRoot, services, opts);\n }\n return this.#exposeNamed(worktreeRoot, services, tunnelName, opts);\n }\n\n /** One quick tunnel per service — zero-account, URL rotates per run. */\n async #exposeQuick(\n worktreeRoot: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n const exposed = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"no stack in this worktree — `hestia up`/`run` something first\",\n );\n }\n for (const input of services) {\n const selection = resolveEndpointSelection(record, input);\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `public tunnels require an HTTP endpoint; ${input} is ${selection.endpoint.kind}`);\n }\n const alias = selection.endpoint.alias ?? selection.endpoint.name;\n const authority = internalEndpointAuthority(record.project, alias);\n const name = `aux-quick-${createHash(\"sha256\").update(alias).digest(\"hex\").slice(0, 10)}`;\n const quickCfg = join(hestiaDir(worktreeRoot), `quick-${name}.yml`);\n // A hostname-less ingress entry matches every request and is therefore\n // cloudflared's required terminal catch-all. It must remain the only\n // rule; appending `http_status:404` would make this catch-all non-final.\n writeAtomicTextFile(\n quickCfg,\n `ingress:\\n - service: ${JSON.stringify(`unix:${publicGatewaySocketPath()}`)}\\n` +\n ` originRequest:\\n httpHostHeader: ${JSON.stringify(authority)}\\n`,\n );\n const argv = [\n \"cloudflared\",\n \"tunnel\",\n \"--config\",\n quickCfg,\n \"--metrics\",\n \"127.0.0.1:{port}\",\n \"--grace-period\",\n \"5s\",\n \"--no-autoupdate\",\n \"--url\",\n \"http://127.0.0.1:1\",\n ];\n const existing = readPidfile(worktreeRoot, name);\n let metricsPort: number | undefined;\n if (\n existing !== null &&\n isLive(existing) &&\n existing.specFingerprint === procSpecFingerprint({\n name,\n argv,\n port: \"auto\",\n backend: \"tunnel\",\n originService: selection.workload,\n originEndpoint: alias,\n readyTimeoutMs: opts?.readyTimeoutMs,\n })\n ) {\n metricsPort = existing.port; // idempotent: same origin, still live\n } else {\n if (existing !== null) {\n if (isLive(existing)) await stopProcTree(existing);\n removePidfile(worktreeRoot, name);\n }\n const result = await startProc(\n worktreeRoot,\n {\n name,\n argv,\n port: \"auto\",\n backend: \"tunnel\",\n originService: selection.workload,\n originEndpoint: alias,\n readyTimeoutMs: opts?.readyTimeoutMs,\n },\n record.env,\n (pf) => mirrorPidfile(record.project, pf),\n );\n // metrics port only — never a public surface, so no recordProc\n upsertAuxiliary(record, result.record);\n metricsPort = result.record.publishedPort;\n if (result.error !== undefined) {\n writeState(worktreeRoot, record);\n throw result.error;\n }\n }\n const url =\n metricsPort !== undefined\n ? await quickTunnelUrl(metricsPort, opts?.readyTimeoutMs ?? 30_000)\n : null;\n if (url === null) {\n writeState(worktreeRoot, record);\n throw new HestiaError(\n \"tunnel-ready-timeout\",\n `quick tunnel for \"${alias}\" reported no URL in time (offline?) — ` +\n `left running, logs: .hestia/logs/${name}.log`,\n );\n }\n const ep = record.endpoints.find((endpoint) => endpoint.name === selection.endpoint.name);\n if (ep !== undefined) ep.publicUrl = url;\n else {\n setEndpoint(record, {\n name: alias,\n alias,\n workload: selection.workload,\n binding: selection.binding,\n kind: \"http\",\n host: \"127.0.0.1\",\n port: selection.endpoint.port,\n publicUrl: url,\n });\n }\n record.env[urlKey(alias)] = url;\n }\n writeState(worktreeRoot, record);\n return record;\n }));\n await this.#refreshLocalRoutes(true);\n return exposed;\n }\n\n /**\n * Unified named mode: adopt the existing tunnel, record this stack's\n * exposures (intent first — crash-safe), route DNS outside any lock, then\n * converge the machine-global connector. Lock order: worktree → global.\n */\n async #exposeNamed(\n worktreeRoot: string,\n services: string[],\n tunnelName: string,\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n // network preflight — no locks held. Foreign connectors (the user's\n // manual `tunnel run`, a teammate's replica) make the edge load-balance\n // hostnames across worktrees; hestia never kills processes it didn't\n // spawn, so it refuses to become connector #2.\n const adopted = await adoptTunnel(tunnelName);\n if (adopted.connections > 0 && !isAdopted(adopted.uuid) && !opts?.force) {\n throw new HestiaError(\n \"tunnel-busy\",\n `tunnel \"${tunnelName}\" already has ${adopted.connections} live edge ` +\n `connection(s) from a foreign connector — stop the other cloudflared first (hestia's ` +\n `connector serves your static hostnames too), or pass --force to ` +\n `accept nondeterministic routing`,\n );\n }\n\n const preflightRecord = readState(worktreeRoot);\n if (preflightRecord === null) {\n throw new HestiaError(\"service-not-found\", \"stack disappeared while preparing exposure\");\n }\n const baseRules = importBaseRules(adopted.uuid, tunnelName);\n const zone = opts?.zone ?? preflightRecord.tunnel?.zone ?? inferZone(baseRules);\n if (zone === undefined) {\n throw new HestiaError(\"usage\", \"cannot infer a zone from the tunnel's existing rules — pass --zone\");\n }\n const preparedHostnames = new Map<string, { hostname: string; alias: string; workload: string; binding: string }>();\n for (const input of services) {\n const selection = resolveEndpointSelection(preflightRecord, input);\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `public tunnels require an HTTP endpoint; ${input} is ${selection.endpoint.kind}`);\n }\n const alias = selection.endpoint.alias ?? selection.endpoint.name;\n const hostname = hostnameFor(tunnelName, preflightRecord.branch, alias, zone);\n await assertNamedTunnelDns(hostname, adopted.uuid);\n preparedHostnames.set(input, {\n hostname,\n alias,\n workload: selection.workload,\n binding: selection.binding,\n });\n }\n\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"no stack in this worktree — `hestia up`/`run` something first\",\n );\n }\n const t: TunnelRef =\n record.tunnel !== undefined && record.tunnel.uuid === adopted.uuid\n ? record.tunnel\n : {\n name: tunnelName,\n uuid: adopted.uuid,\n zone,\n credFile: adopted.credFile,\n exposures: [],\n };\n t.name = tunnelName;\n t.zone = zone;\n t.credFile = adopted.credFile;\n record.tunnel = t;\n\n for (const input of services) {\n const prepared = preparedHostnames.get(input)!;\n const selection = resolveEndpointSelection(record, input);\n const exp = t.exposures.find((candidate) =>\n (candidate.alias ?? candidate.service) === prepared.alias);\n if (exp !== undefined) {\n exp.service = prepared.workload;\n exp.alias = prepared.alias;\n exp.binding = prepared.binding;\n exp.hostname = prepared.hostname;\n exp.originPort = selection.endpoint.port;\n exp.keepHostHeader = opts?.keepHostHeader;\n } else {\n t.exposures.push({\n service: prepared.workload,\n alias: prepared.alias,\n binding: prepared.binding,\n hostname: prepared.hostname,\n originPort: selection.endpoint.port,\n keepHostHeader: opts?.keepHostHeader,\n });\n }\n }\n // DNS was verified before intent publication; Hestia never mutates DNS.\n writeState(worktreeRoot, record);\n }));\n\n const outcome = await reconcileTunnel(\n { name: tunnelName, uuid: adopted.uuid, credFile: adopted.credFile },\n { force: opts?.force, readyTimeoutMs: opts?.readyTimeoutMs },\n );\n for (const w of outcome.warnings) process.stderr.write(`warning: ${w}\\n`);\n\n const final = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"stack disappeared while exposing (concurrent down?)\",\n );\n }\n for (const exp of record.tunnel?.exposures ?? []) {\n const url = `https://${exp.hostname}`;\n const alias = exp.alias ?? exp.service;\n const ep = record.endpoints.find((endpoint) => endpoint.name === alias);\n if (ep !== undefined) ep.publicUrl = url;\n else {\n setEndpoint(record, {\n name: alias,\n alias,\n workload: exp.service,\n binding: exp.binding,\n kind: \"http\",\n host: \"127.0.0.1\",\n port: exp.originPort,\n publicUrl: url,\n });\n }\n record.env[urlKey(alias)] = url;\n }\n writeState(worktreeRoot, record);\n return record;\n }));\n if (outcome.error !== undefined) throw outcome.error;\n await this.#refreshLocalRoutes(true);\n return final;\n }\n\n async status(cwd: string): Promise<StackRecord | null> {\n const { worktreeRoot } = await getRepoInfo(cwd);\n const record = readState(worktreeRoot);\n if (record === null) return null;\n\n let anyUp = false;\n\n // docker services: best-effort refresh of live health/ports\n if (record.composeFile !== undefined && record.overrideFile !== undefined) {\n try {\n const rows = await composePs({\n project: record.project,\n baseFile: record.composeFile,\n overrideFile: record.overrideFile,\n cwd: worktreeRoot,\n });\n const byName = new Map(rows.map((r) => [r.Service, r]));\n for (const svc of record.services) {\n if (svc.backend !== \"docker\") continue;\n const row = byName.get(svc.name);\n if (row === undefined) {\n svc.state = \"exited\";\n continue;\n }\n anyUp = true;\n svc.state =\n row.Health === \"healthy\" || row.State === \"running\"\n ? \"healthy\"\n : \"unhealthy\";\n const pub = publishedPortFor(row, svc.containerPort);\n if (pub !== undefined) {\n svc.publishedPort = pub;\n svc.containerId = row.ID ?? svc.containerId;\n const endpoint = record.endpoints.find((candidate) => candidate.name === svc.name);\n if (endpoint !== undefined) endpoint.port = pub;\n }\n }\n } catch {\n // docker unreachable — report last known state for docker services\n anyUp = record.services.some(\n (s) => s.backend === \"docker\" && s.state === \"healthy\",\n );\n }\n }\n\n // procs: live (pid + verbatim start-time) and still owning their port\n for (const svc of [...record.services, ...(record.auxiliary ?? [])]) {\n if (svc.backend === \"docker\") continue;\n const auxiliary = record.auxiliary?.includes(svc) ?? false;\n if (\n svc.pid === undefined ||\n !isLive({ pid: svc.pid, startTime: svc.startTime ?? \"\" })\n ) {\n svc.state = \"exited\";\n continue;\n }\n if (!auxiliary) anyUp = true;\n if (svc.publishedPort !== undefined) {\n try {\n const view = await inspectPort(svc.pid, svc.publishedPort);\n svc.state = view.ownerIsMember ? \"healthy\" : \"unhealthy\";\n } catch {\n svc.state = \"healthy\"; // ownership tool missing — alive is the best we know\n }\n } else {\n svc.state = \"healthy\";\n }\n const endpoint = record.endpoints.find((candidate) => candidate.name === svc.name);\n if (endpoint !== undefined && svc.publishedPort !== undefined) endpoint.port = svc.publishedPort;\n // quick tunnel that connected after its expose timed out: surface the URL\n if (\n svc.backend === \"tunnel\" &&\n svc.originService !== undefined &&\n svc.state === \"healthy\" &&\n svc.publishedPort !== undefined &&\n record.env[urlKey(svc.originEndpoint ?? svc.originService)] === undefined\n ) {\n const url = await quickTunnelUrl(svc.publishedPort, 1_000);\n if (url !== null) {\n const endpointName = svc.originEndpoint ?? svc.originService;\n record.env[urlKey(endpointName)] = url;\n const ep = record.endpoints.find((e) => e.name === endpointName);\n if (ep !== undefined) ep.publicUrl = url;\n }\n }\n }\n\n // named mode: the global connector, viewed from this stack\n if (record.tunnel !== undefined) {\n const pf = connectorPidfile(record.tunnel.uuid);\n let state: ServiceRecord[\"state\"] = \"exited\";\n if (pf !== null && isLive(pf)) {\n // an exposure aimed at a port this stack no longer holds is the\n // misdelivery hazard — report it, don't hide it behind /ready\n const portsCurrent = record.tunnel.exposures.every((exp) => {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n return (binding?.publishedPort ?? svc?.publishedPort) === exp.originPort;\n });\n const ready =\n pf.port !== undefined ? await isReady(pf.port) : false;\n state = portsCurrent && ready ? \"healthy\" : \"unhealthy\";\n }\n upsertService(record, {\n name: \"tunnel\",\n backend: \"tunnel\",\n state,\n pid: pf?.pid,\n pgid: pf?.pgid,\n startTime: pf?.startTime,\n logPath: pf?.logPath,\n });\n }\n\n record.state = anyUp ? \"up\" : \"stopped\";\n applyLocalRouteProjection(record);\n return record;\n }\n\n restartService(): Promise<void> {\n throw new NotImplemented(\"restartService\");\n }\n}\n\nexport const engine = new ComposeEngine();\n",
|
|
120
|
+
"import { existsSync, rmSync, writeFileSync } from \"node:fs\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { join, resolve } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { resolve4, resolve6, resolveCname } from \"node:dns/promises\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport {\n STATE_SCHEMA_VERSION,\n type AdmitOptions,\n type DownOptions,\n type Endpoint,\n type ExposeOptions,\n type IsolationEngine,\n type LogLine,\n type LogsOptions,\n type ProcSpec,\n type RepoId,\n type ServiceRecord,\n type SharedClaimResult,\n type StackIdentity,\n type StackRecord,\n type TunnelRef,\n type UpOptions,\n HestiaError,\n NotImplemented,\n projectName,\n} from \"@hestia/core\";\nimport { loadConfig, tryLoadConfig } from \"./config.ts\";\nimport { getRepoInfo, type RepoInfo } from \"./git.ts\";\nimport {\n assertDiscoveryRunnable,\n discoverRepository,\n resolveConfiguredWorkloads,\n} from \"./discovery.ts\";\nimport type { ConfiguredWorkload } from \"./repository-config.ts\";\nimport { resolveEndpointSelection } from \"./endpoint-resolution.ts\";\nimport { generateOverride } from \"./compose/override.ts\";\nimport {\n type ComposeCtx,\n composeConfig,\n composeDown,\n composePs,\n composeUp,\n publishedPortFor,\n resolveComposeModel,\n type ResolvedComposeModel,\n waitReady,\n} from \"./compose/cli.ts\";\nimport { writeAtomicTextFile } from \"./atomic-json-file.ts\";\nimport {\n clearState,\n ensureDir,\n hestiaDir,\n hestiaHome,\n mirrorDir,\n mirrorPidfile,\n mirrorProcsDir,\n readMirrorState,\n readState,\n assertMutableStackRecord,\n writeState,\n} from \"./state.ts\";\nimport { withLock } from \"./proc/lock.ts\";\nimport { envKey, startProc } from \"./proc/supervisor.ts\";\nimport {\n type Pidfile,\n isLive,\n listPidfiles,\n procsDir,\n procSpecFingerprint,\n readPidfile,\n removePidfile,\n startTimeOf,\n} from \"./proc/pidfile.ts\";\nimport { stopProcTree } from \"./proc/shutdown.ts\";\nimport { inspectPort } from \"./proc/ports.ts\";\nimport {\n internalEndpointAuthority,\n publicGatewaySocketPath,\n resolvedLocalRouteHostname,\n verifyStackServiceOrigin,\n} from \"./router/local-http-router.ts\";\nimport { detectVarlock } from \"./proc/resolver.ts\";\nimport { planWorkers, privateRegistryDir } from \"./wrangler/adapter.ts\";\nimport {\n globalGainWarnings,\n snapshotGlobalRegistry,\n verifyPrivateRegistry,\n} from \"./wrangler/verify.ts\";\nimport { adoptTunnel } from \"./tunnel/cloudflared.ts\";\nimport { hostnameFor, importBaseRules, inferZone, zoneOf } from \"./tunnel/ingress.ts\";\nimport {\n collectDynamicRules,\n connectorPidfile,\n isAdopted,\n reconcileTunnel,\n} from \"./tunnel/registry.ts\";\nimport {\n assertSharedHostnameFqdn,\n assertSharedName,\n declareSharedHostname,\n listSharedHostnames,\n normalizeSharedPath,\n readSharedHostname,\n} from \"./tunnel/shared.ts\";\nimport { isReady, quickTunnelUrl } from \"./tunnel/verify.ts\";\nimport { ensureDaemon } from \"./daemon/ensure.ts\";\nimport {\n acquireSlot,\n readDaemonJson,\n reconcileDaemonLocalRoutes,\n releaseSharedForProject,\n releaseSlot,\n sharedVerb,\n} from \"./daemon/client.ts\";\nimport { streamStackLogs } from \"./logs/stream.ts\";\nimport {\n effectiveLocalRouteServices,\n readHestiaMachineConfig,\n} from \"./router/router-config.ts\";\nimport { readHestiaRouterStatus } from \"./router/portless-adapter.ts\";\n\nexport { dockerAvailable } from \"./compose/cli.ts\";\nexport * from \"./compose/override.ts\";\nexport {\n listSharedHostnames,\n readSharedHostname,\n removeSharedHostname,\n sharedRoot,\n} from \"./tunnel/shared.ts\";\nexport { SharedArbiter } from \"./daemon/shared-arbiter.ts\";\nexport { withLock } from \"./proc/lock.ts\";\nexport { substitutePort, envKey, openProcAttemptLog } from \"./proc/supervisor.ts\";\nexport { readLastLines, tailFile } from \"./logs/tail.ts\";\nexport { BoundedLogMergeQueue, streamStackLogs } from \"./logs/stream.ts\";\nexport { BoundedLogLineAccumulator, boundLogLine, MAX_LOG_LINE_BYTES } from \"./logs/log-line-bounds.ts\";\nexport * from \"./proc/ports.ts\";\nexport * from \"./proc/pidfile.ts\";\nexport * from \"./proc/resolver.ts\";\nexport * from \"./wrangler/discover.ts\";\nexport {\n privateRegistryDir,\n globalRegistryDir,\n planWorkers,\n wranglerResourceModeArgs,\n} from \"./wrangler/adapter.ts\";\nexport * from \"./tunnel/ingress.ts\";\nexport * from \"./tunnel/verify.ts\";\nexport {\n collectDynamicRules,\n connectorPidfile,\n ledgerAdd,\n ledgerHas,\n reconcileTunnel,\n tunnelDir,\n} from \"./tunnel/registry.ts\";\nexport { adoptTunnel, listTunnels, routeDns } from \"./tunnel/cloudflared.ts\";\nexport { hestiaHome } from \"./state.ts\";\nexport { type DoctorRow, doctor } from \"./doctor.ts\";\nexport {\n configuredLocalRouteServices,\n effectiveLocalRouteServices,\n hestiaConfigTomlPath,\n localRouteHostname,\n migrateHestiaMachineConfig,\n readHestiaMachineConfig,\n} from \"./router/router-config.ts\";\nexport {\n installHestiaRouter,\n readHestiaRouterStatus,\n uninstallHestiaRouter,\n} from \"./router/portless-adapter.ts\";\nexport { resolvedLocalRouteHostname } from \"./router/local-http-router.ts\";\nexport { daemonDir, resolveMaxStacks } from \"./daemon/slots.ts\";\nexport { HESTIAD_PROTOCOL_VERSION } from \"./daemon/routes.ts\";\nexport { FleetMonitor, collectFleetSnapshot } from \"./daemon/fleet-monitor.ts\";\nexport { ensureDaemon, stopDaemonProcess } from \"./daemon/ensure.ts\";\nexport {\n daemonAuthHeaders,\n fetchHealth,\n fetchState,\n reconcileDaemonLocalRoutes,\n readDaemonJson,\n streamDaemonFleet,\n streamDaemonServiceLogs,\n} from \"./daemon/client.ts\";\nexport { createRepoId, getRepoInfo } from \"./git.ts\";\nexport { writeAtomicJsonFile } from \"./atomic-json-file.ts\";\nexport * from \"./repository-config.ts\";\nexport * from \"./discovery.ts\";\nexport * from \"./init-config.ts\";\nexport * from \"./endpoint-resolution.ts\";\nexport {\n LAUNCHD_LABEL,\n installLaunchd,\n isBootstrapped,\n launchdManagesThisHome,\n plistPath,\n uninstallLaunchd,\n} from \"./daemon/launchd.ts\";\n\nconst OVERRIDE_FILE = \"compose.override.yml\";\nconst DOCKERFILE_COMPOSE_FILE = \"dockerfile.compose.yml\";\n\ninterface Prepared {\n ctx: ComposeCtx;\n services: string[];\n serviceBindings: Record<string, Array<{ target: number; protocol: \"tcp\" | \"udp\" }>>;\n composeFile: string;\n overridePath: string;\n}\n\nfunction composeUnsupported(message: string): never {\n throw new HestiaError(\"compose-unsupported\", message);\n}\n\nexport function validateResolvedComposeModel(model: ResolvedComposeModel, project: string): void {\n for (const [name, service] of Object.entries(model.services)) {\n if (service.network_mode === \"host\") composeUnsupported(`service ${name} uses host network mode`);\n if (service.pid === \"host\") composeUnsupported(`service ${name} uses host PID mode`);\n if (service.ipc === \"host\") composeUnsupported(`service ${name} uses host IPC mode`);\n for (const port of service.ports ?? []) {\n const target = typeof port.target === \"number\" ? port.target : Number(port.target);\n if (!Number.isInteger(target) || target < 1 || target > 65_535 || String(port.target).includes(\"-\")) {\n composeUnsupported(`service ${name} has unsupported port target ${String(port.target)} (ranges are not supported)`);\n }\n if (port.published?.includes(\"-\")) {\n composeUnsupported(`service ${name} has unsupported published port range ${port.published}`);\n }\n if (port.protocol !== undefined && port.protocol !== \"tcp\" && port.protocol !== \"udp\") {\n composeUnsupported(`service ${name} uses unsupported port protocol ${port.protocol}`);\n }\n }\n }\n for (const [kind, resources] of [\n [\"network\", model.networks],\n [\"volume\", model.volumes],\n ] as const) {\n for (const [key, resource] of Object.entries(resources ?? {})) {\n if (resource.external) composeUnsupported(`${kind} ${key} is external`);\n if (resource.name !== undefined && !resource.name.startsWith(`${project}_`)) {\n composeUnsupported(`${kind} ${key} has explicit machine-global name ${resource.name}`);\n }\n }\n }\n}\n\nexport function expandComposeDependencies(model: ResolvedComposeModel, requested?: string[]): string[] {\n const roots = requested ?? Object.keys(model.services);\n const expanded = new Set<string>();\n const visit = (name: string): void => {\n const service = model.services[name];\n if (service === undefined) {\n throw new HestiaError(\n \"service-not-found\",\n `compose service ${JSON.stringify(name)} is not defined (have: ${Object.keys(model.services).join(\", \")})`,\n );\n }\n if (expanded.has(name)) return;\n expanded.add(name);\n for (const dependency of Object.keys(service.depends_on ?? {})) visit(dependency);\n };\n for (const root of roots) visit(root);\n return [...expanded];\n}\n\nfunction assertNoEnvironmentKeyConflicts(\n workloads: Array<{ name: string; endpoints: Array<{ alias: string }> }>,\n): void {\n const owners = new Map<string, string>();\n for (const workload of workloads) {\n for (const owner of [workload.name, ...workload.endpoints.map((endpoint) => endpoint.alias)]) {\n const key = envKey(owner);\n const previous = owners.get(key);\n if (previous !== undefined && previous !== owner) {\n throw new HestiaError(\n \"env-key-conflict\",\n `${JSON.stringify(previous)} and ${JSON.stringify(owner)} both normalize to HESTIA_${key}`,\n { key: `HESTIA_${key}`, owners: [previous, owner] },\n );\n }\n owners.set(key, owner);\n }\n }\n}\n\nexport function applyConfiguredEndpoints(\n record: StackRecord,\n configuredWorkloads: Record<string, ConfiguredWorkload>,\n): void {\n for (const [workloadName, configured] of Object.entries(configuredWorkloads)) {\n const serviceName = configured.composeService ?? workloadName;\n const service = record.services.find((candidate) => candidate.name === serviceName);\n if (service === undefined) continue;\n for (const [alias, endpointConfig] of Object.entries(configured.endpoints)) {\n const [target, protocol] = endpointConfig.binding.split(\"/\") as [string, \"tcp\" | \"udp\"];\n const binding = service.bindings?.find((candidate) =>\n candidate.target === target && candidate.protocol === protocol\n );\n if (binding === undefined) {\n throw new HestiaError(\n \"endpoint-binding-not-found\",\n `endpoint ${alias} selects ${serviceName}:${endpointConfig.binding}, which is not published`,\n );\n }\n const directUrl = endpointConfig.kind === \"http\"\n ? `http://127.0.0.1:${binding.publishedPort}`\n : undefined;\n setEndpoint(record, {\n name: alias,\n alias,\n workload: serviceName,\n binding: endpointConfig.binding,\n kind: endpointConfig.kind,\n local: endpointConfig.local,\n host: \"127.0.0.1\",\n port: binding.publishedPort,\n url: directUrl,\n });\n record.env[`HESTIA_${envKey(alias)}_PORT`] = String(binding.publishedPort);\n if (directUrl !== undefined) record.env[`HESTIA_${envKey(alias)}_DIRECT_URL`] = directUrl;\n }\n }\n}\n\n/** Refuse to persist runtime state where Git could accidentally track it. */\nasync function assertHestiaStateIgnored(worktreeRoot: string): Promise<void> {\n try {\n await pexec(\"git\", [\"-C\", worktreeRoot, \"rev-parse\", \"--is-inside-work-tree\"], { timeout: 5_000 });\n } catch {\n return; // non-Git fallback mode has no index to protect\n }\n try {\n await pexec(\"git\", [\"-C\", worktreeRoot, \"check-ignore\", \"-q\", \".hestia/\"], { timeout: 5_000 });\n } catch {\n throw new HestiaError(\n \"state-not-ignored\",\n `.hestia is not ignored in ${worktreeRoot}; add the line \".hestia/\" to ${join(worktreeRoot, \".gitignore\")}`,\n { remedy: `.hestia/`, path: join(worktreeRoot, \".gitignore\") },\n );\n }\n}\n\n/** Resolve and validate Compose before atomically publishing its isolation override. */\nasync function prepareCompose(\n worktreeRoot: string,\n project: string,\n repo: string,\n branch: string,\n opts?: UpOptions,\n configuredBaseFile?: string,\n): Promise<Prepared> {\n const cfg = configuredBaseFile === undefined\n ? loadConfig(worktreeRoot)\n : { composeFile: configuredBaseFile, services: [] };\n const resolvedModel = await resolveComposeModel(project, cfg.composeFile, worktreeRoot);\n validateResolvedComposeModel(resolvedModel, project);\n const services = expandComposeDependencies(resolvedModel, opts?.services);\n const { yaml, serviceBindings } = generateOverride({\n userCompose: resolvedModel,\n project,\n repo,\n branch,\n worktree: worktreeRoot,\n services,\n });\n\n ensureDir(hestiaDir(worktreeRoot));\n const overridePath = join(hestiaDir(worktreeRoot), OVERRIDE_FILE);\n writeAtomicTextFile(overridePath, yaml);\n\n return {\n ctx: {\n project,\n baseFile: cfg.composeFile,\n overrideFile: overridePath,\n cwd: worktreeRoot,\n },\n services,\n serviceBindings,\n composeFile: cfg.composeFile,\n overridePath,\n };\n}\n\nfunction writeDockerfileComposeModel(\n worktreeRoot: string,\n workloads: Record<string, ConfiguredWorkload>,\n conventionalComposeFile?: string,\n): string | undefined {\n const dockerfiles = Object.entries(workloads).filter(([, workload]) => workload.source === \"dockerfile\");\n if (dockerfiles.length === 0) return conventionalComposeFile;\n const services = Object.fromEntries(dockerfiles.map(([name, workload]) => {\n const ports = [...new Set(Object.values(workload.endpoints).map((endpoint) => endpoint.binding))]\n .filter((binding) => !binding.startsWith(\"main/\"));\n return [name, {\n build: {\n context: worktreeRoot,\n dockerfile: workload.dockerfile ?? \"Dockerfile\",\n },\n ...(ports.length > 0 ? { ports } : {}),\n }];\n }));\n const model = {\n ...(conventionalComposeFile === undefined\n ? {}\n : { include: [{ path: conventionalComposeFile }] }),\n services,\n };\n const path = join(hestiaDir(worktreeRoot), DOCKERFILE_COMPOSE_FILE);\n writeAtomicTextFile(path, stringifyYaml(model));\n return path;\n}\n\nfunction freshRecord(\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n worktree: string,\n): StackRecord {\n return {\n schemaVersion: STATE_SCHEMA_VERSION,\n project,\n repoId,\n repo,\n branch,\n worktree,\n state: \"up\",\n services: [],\n env: {},\n endpoints: [],\n createdAt: new Date().toISOString(),\n };\n}\n\n/** Guard every stack mutation against legacy state and changed Git identity. */\nfunction assertCurrentStackIdentity(\n record: StackRecord,\n current: RepoInfo,\n): void {\n const path = join(hestiaDir(current.worktreeRoot), \"stack.json\");\n assertMutableStackRecord(record, path);\n const matches =\n record.repoId === current.repoId &&\n record.repo === current.repo &&\n record.branch === current.branch &&\n resolve(record.worktree) === resolve(current.worktreeRoot) &&\n record.project === projectName(\n current.repoId,\n current.repo,\n current.branch,\n current.worktreeRoot,\n );\n if (!matches) {\n throw new HestiaError(\n \"stack-identity-changed\",\n `this checkout no longer matches stack ${record.project}; run hestia down before starting or changing it`,\n {\n recorded: {\n repoId: record.repoId,\n repo: record.repo,\n branch: record.branch,\n worktree: record.worktree,\n },\n current,\n recovery: `hestia down --project ${record.project}`,\n },\n );\n }\n}\n\nfunction upsertService(record: StackRecord, svc: ServiceRecord): void {\n const i = record.services.findIndex((s) => s.name === svc.name);\n if (i >= 0) record.services[i] = svc;\n else record.services.push(svc);\n}\n\nfunction upsertAuxiliary(record: StackRecord, auxiliary: ServiceRecord): void {\n record.auxiliary ??= [];\n const index = record.auxiliary.findIndex((candidate) => candidate.name === auxiliary.name);\n if (index >= 0) record.auxiliary[index] = auxiliary;\n else record.auxiliary.push(auxiliary);\n}\n\nfunction setEndpoint(record: StackRecord, ep: Endpoint): void {\n const i = record.endpoints.findIndex((e) => e.name === ep.name);\n if (i >= 0) {\n const previous = record.endpoints[i]!;\n const portRotated = previous.port !== ep.port;\n const namedExposure = record.tunnel?.exposures.some((exposure) =>\n (exposure.alias ?? exposure.service) === ep.name) ?? false;\n if (portRotated && previous.publicUrl !== undefined && !namedExposure) {\n delete previous.publicUrl;\n delete record.env[urlKey(ep.name)];\n }\n record.endpoints[i] = { ...previous, ...ep };\n }\n else record.endpoints.push(ep);\n applyLocalRouteProjection(record);\n}\n\nfunction dropService(record: StackRecord, name: string): void {\n record.services = record.services.filter((s) => s.name !== name);\n record.endpoints = record.endpoints.filter((e) => e.name !== name);\n delete record.env[`HESTIA_${envKey(name)}_PORT`];\n delete record.env[directUrlKey(name)];\n delete record.env[localUrlKey(name)];\n}\n\nfunction persistStoppedService(record: StackRecord, name: string): void {\n const service = record.services.find((candidate) => candidate.name === name);\n if (service === undefined) return;\n service.state = \"stopped\";\n delete service.publishedPort;\n service.bindings = [];\n record.endpoints = record.endpoints.filter((endpoint) =>\n endpoint.name !== name && endpoint.workload !== name\n );\n for (const key of Object.keys(record.env)) {\n if (key.startsWith(`HESTIA_${envKey(name)}_`)) delete record.env[key];\n }\n}\n\nfunction recordProc(\n record: StackRecord,\n svc: ServiceRecord,\n): void {\n const recorded = svc.publishedPort === undefined ? svc : {\n ...svc,\n bindings: [{\n id: `${svc.name}:main/tcp`,\n target: \"main\",\n protocol: \"tcp\" as const,\n publishedPort: svc.publishedPort,\n }],\n };\n upsertService(record, recorded);\n if (svc.publishedPort !== undefined) {\n record.env[`HESTIA_${envKey(svc.name)}_MAIN_TCP_PORT`] = String(svc.publishedPort);\n record.env[`HESTIA_${envKey(svc.name)}_PORT`] = String(svc.publishedPort);\n setEndpoint(record, {\n name: svc.name,\n workload: svc.name,\n binding: \"main/tcp\",\n host: \"127.0.0.1\",\n port: svc.publishedPort,\n reservedName: `${svc.name}.${record.branch}.${record.repo}.localhost`,\n });\n }\n}\n\nfunction urlKey(name: string): string {\n return `HESTIA_${envKey(name)}_URL`;\n}\n\nfunction directUrlKey(name: string): string {\n return `HESTIA_${envKey(name)}_DIRECT_URL`;\n}\n\nfunction localUrlKey(name: string): string {\n return `HESTIA_${envKey(name)}_LOCAL_URL`;\n}\n\n/** Project direct and stable URL fields from explicit plus configured route intent. */\nfunction applyLocalRouteProjection(record: StackRecord): void {\n const config = readHestiaMachineConfig().config;\n const selected = new Set(effectiveLocalRouteServices(record, config));\n for (const endpoint of record.endpoints) {\n endpoint.reservedName = resolvedLocalRouteHostname(record, endpoint.name, config);\n const service = record.services.find(\n (candidate) => candidate.name === (endpoint.workload ?? endpoint.name),\n );\n const selectedBinding = endpoint.binding === undefined\n ? undefined\n : service?.bindings?.find(\n (binding) => `${binding.target}/${binding.protocol}` === endpoint.binding,\n );\n const publishedPort = selectedBinding?.publishedPort ?? service?.publishedPort;\n if (!selected.has(endpoint.name)) {\n // Explicit endpoint kind is a protocol declaration. Legacy untyped ports\n // remain raw until route intent declares HTTP.\n if (endpoint.kind === \"http\" && publishedPort !== undefined) {\n endpoint.url = `http://127.0.0.1:${publishedPort}`;\n record.env[directUrlKey(endpoint.name)] = endpoint.url;\n } else {\n delete endpoint.url;\n delete record.env[directUrlKey(endpoint.name)];\n }\n delete endpoint.localUrl;\n delete record.env[localUrlKey(endpoint.name)];\n continue;\n }\n if (service === undefined || publishedPort === undefined || service.backend === \"tunnel\") continue;\n endpoint.host = \"127.0.0.1\";\n endpoint.port = publishedPort;\n if (endpoint.kind !== undefined && endpoint.kind !== \"http\") {\n delete endpoint.url;\n delete endpoint.localUrl;\n delete record.env[directUrlKey(endpoint.name)];\n delete record.env[localUrlKey(endpoint.name)];\n continue;\n }\n endpoint.url = `http://127.0.0.1:${publishedPort}`;\n endpoint.localUrl = `https://${endpoint.reservedName}`;\n record.env[directUrlKey(endpoint.name)] = endpoint.url;\n record.env[localUrlKey(endpoint.name)] = endpoint.localUrl;\n }\n syncSharedProjection(record);\n}\n\n/**\n * Project shared-hostname holdership into this record: the holder's contract\n * endpoint carries the stable public URL; every non-holder sheds it. Reads\n * the durable shared store, so a record self-heals its stale projection on\n * its own next mutation after losing a claim it wasn't told about.\n */\nfunction syncSharedProjection(record: StackRecord): void {\n for (const shared of listSharedHostnames()) {\n const url = `https://${shared.hostname}${shared.path ?? \"\"}`;\n if (shared.holder?.project === record.project) {\n const endpoint = record.endpoints.find(\n (candidate) => (candidate.alias ?? candidate.name) === shared.service,\n );\n if (endpoint !== undefined) {\n endpoint.publicUrl = url;\n record.env[urlKey(shared.service)] = url;\n }\n continue;\n }\n for (const endpoint of record.endpoints) {\n if (endpoint.publicUrl === url) delete endpoint.publicUrl;\n }\n if (record.env[urlKey(shared.service)] === url) {\n delete record.env[urlKey(shared.service)];\n }\n }\n}\n\n/**\n * Re-point named-mode exposures at the services' CURRENT ports. Returns true\n * when the merged ingress derived from this record changed (a port rotated or\n * an origin stopped) — the caller must reconcile the global connector after\n * releasing the worktree lock, because an ingress rule aimed at a port this\n * stack no longer owns is a live cross-worktree misdelivery once the OS\n * recycles the port.\n */\nfunction syncExposures(record: StackRecord): boolean {\n const t = record.tunnel;\n if (t === undefined) return false;\n let changed = false;\n for (const exp of t.exposures) {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n const publishedPort = binding?.publishedPort ?? svc?.publishedPort;\n if (publishedPort === undefined) {\n changed = true; // origin gone — regen drops the rule (404, never a stale port)\n } else if (publishedPort !== exp.originPort) {\n exp.originPort = publishedPort;\n changed = true;\n }\n }\n return changed;\n}\n\nconst pexec = promisify(execFile);\n\nfunction matchesExpectedStack(\n record: StackRecord | null,\n expected: NonNullable<DownOptions[\"expectedStack\"]>,\n): boolean {\n return record !== null &&\n (record.repoId === undefined || record.repoId === expected.repoId) &&\n record.worktree === expected.worktree &&\n record.createdAt === expected.createdAt;\n}\n\nfunction projectMutationRoot(project: string): string {\n return join(hestiaHome(), \"project-locks\", project);\n}\n\nasync function assertNamedTunnelDns(hostname: string, tunnelUuid: string): Promise<void> {\n const expected = `${tunnelUuid}.cfargotunnel.com`;\n if (process.env.HESTIA_E2E_DNS_RESOLVED === \"1\") return;\n try {\n const records = (await resolveCname(hostname)).map((record) => record.replace(/\\.$/, \"\").toLowerCase());\n if (records.includes(expected.toLowerCase())) return;\n } catch {}\n // A cfargotunnel.com target only serves traffic when the record is proxied,\n // and Cloudflare flattens proxied CNAMEs: public DNS answers with edge\n // A/AAAA records and the target is unrecoverable. Any successful resolution\n // therefore means the wildcard exists; end-to-end routing is confirmed by\n // the connector verify step after start.\n try {\n if ((await resolve4(hostname)).length > 0) return;\n } catch {}\n try {\n if ((await resolve6(hostname)).length > 0) return;\n } catch {}\n throw new HestiaError(\n \"dns-route-required\",\n `${hostname} does not resolve through Hestia's adopted tunnel; configure wildcard CNAME *.${hostname.split(\".\").slice(1).join(\".\")} -> ${expected}`,\n { hostname, wildcardTarget: expected },\n );\n}\n\ninterface StartAdmissionGuard {\n createdAt: string;\n rollback(): Promise<void>;\n}\n\nexport class ComposeEngine implements IsolationEngine {\n /** Refresh daemon route state after a stack mutation; strict mode surfaces failures. */\n async #refreshLocalRoutes(strict = false): Promise<void> {\n try {\n const daemon = readDaemonJson();\n if (daemon !== null) await reconcileDaemonLocalRoutes(daemon.port);\n } catch (error) {\n if (strict) throw error;\n process.stderr.write(`warning: local router reconcile failed: ${(error as Error).message}\\n`);\n }\n }\n\n /** Stream this worktree's recorded services without taking its mutation lock. */\n async *logs(cwd: string, opts?: LogsOptions): AsyncGenerator<LogLine> {\n const { worktreeRoot } = await getRepoInfo(cwd);\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\"no-stack\", \"no stack for this worktree\");\n }\n yield* streamStackLogs(record, opts);\n }\n\n /** Stream a mirrored project without requiring its original worktree. */\n async *logsProject(project: string, opts?: LogsOptions): AsyncGenerator<LogLine> {\n const record = readMirrorState(project);\n if (record === null) {\n throw new HestiaError(\"no-stack\", `no mirror for project \"${project}\"`);\n }\n yield* streamStackLogs(record, opts);\n }\n\n /**\n * Best-effort convergence of the global connector after a stack mutation.\n * Failures degrade to warnings — `run`/`down` must not fail because the\n * tunnel blipped; `status` will show it unhealthy.\n */\n async #reconcileAdopted(t: TunnelRef | undefined): Promise<void> {\n if (t === undefined) return;\n try {\n const outcome = await reconcileTunnel(t);\n for (const w of outcome.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (outcome.error !== undefined) {\n process.stderr.write(`warning: ${outcome.error.message}\\n`);\n }\n } catch (err) {\n process.stderr.write(\n `warning: tunnel reconcile failed: ${(err as Error).message}\\n`,\n );\n }\n }\n\n /**\n * Machine-wide admission before any start: ensure hestiad, request a slot\n * (idempotent for already-live projects), and bridge the grant with a\n * provisional `starting` record so the slot survives a multi-minute cold\n * `compose up` and a CLI crash frees it (dead starter → sweep). Runs BEFORE\n * the worktree lock — never long-poll while holding it.\n * Returns a cleanup that rolls the provisional record back on failure.\n */\n async #admit(\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n worktreeRoot: string,\n opts?: AdmitOptions,\n ): Promise<StartAdmissionGuard> {\n const currentIdentity = { repo, repoId, branch, worktreeRoot };\n const existingRecord = readState(worktreeRoot);\n if (existingRecord !== null) assertCurrentStackIdentity(existingRecord, currentIdentity);\n let handle: Awaited<ReturnType<typeof ensureDaemon>> | null = null;\n if (opts?.noDaemon) {\n process.stderr.write(\n \"warning: --no-daemon skips the stack cap and daemon supervision\\n\",\n );\n } else {\n handle = await ensureDaemon();\n const identity: StackIdentity = {\n project,\n repoId,\n repo,\n branch,\n worktree: worktreeRoot,\n };\n const result = await acquireSlot(handle.port, identity, opts?.wait ?? 0);\n if (!result.granted) {\n const live = result.live.join(\", \");\n throw new HestiaError(\n \"stack-limit\",\n `stack cap reached (live: ${live}) — \\`hestia down\\` one, or retry with --wait`,\n );\n }\n }\n // Provisional record only when the project has no record at all — an\n // existing record already carries occupancy through its services.\n let provisional = false;\n let retainedEmpty = false;\n let previousState: StackRecord[\"state\"] | undefined;\n let previousStarter: StackRecord[\"starter\"];\n let createdAt = \"\";\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n let rec = readState(worktreeRoot);\n if (rec === null) {\n const rec = freshRecord(project, repoId, repo, branch, worktreeRoot);\n rec.state = \"starting\";\n rec.starter = {\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n };\n writeState(worktreeRoot, rec);\n provisional = true;\n createdAt = rec.createdAt;\n } else {\n assertCurrentStackIdentity(rec, currentIdentity);\n if (rec.services.length === 0) {\n retainedEmpty = true;\n provisional = true;\n previousState = rec.state;\n previousStarter = rec.starter;\n rec.state = \"starting\";\n rec.starter = {\n pid: process.pid,\n startTime: startTimeOf(process.pid) ?? \"\",\n };\n writeState(worktreeRoot, rec);\n }\n createdAt = rec.createdAt;\n }\n }));\n return { createdAt, rollback: async () => {\n // Failure rollback: drop the record only if it is still our untouched\n // provisional (a partially-started stack must stay visible for `down`).\n if (!provisional) return;\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const rec = readState(worktreeRoot);\n if (rec !== null && rec.state === \"starting\" && rec.services.length === 0 && rec.composeFile === undefined) {\n if (retainedEmpty) {\n rec.state = previousState ?? \"stopped\";\n rec.starter = previousStarter;\n writeState(worktreeRoot, rec);\n } else {\n clearState(worktreeRoot, project);\n }\n }\n }));\n if (handle !== null) await releaseSlot(handle.port, project);\n } };\n }\n\n async up(cwd: string, opts?: UpOptions): Promise<StackRecord> {\n const discovery = await discoverRepository(cwd);\n assertDiscoveryRunnable(discovery);\n assertNoEnvironmentKeyConflicts(\n [...discovery.runnableWorkloads, ...discovery.candidateWorkloads]\n .map((workload) => ({ name: workload.name, endpoints: workload.endpoints })),\n );\n const configured = await resolveConfiguredWorkloads(cwd);\n if (configured.conflicts.length > 0) {\n throw new HestiaError(\"config-conflict\", configured.conflicts.join(\"; \"));\n }\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n await assertHestiaStateIgnored(worktreeRoot);\n const project = projectName(repoId, repo, branch, worktreeRoot);\n let tunnelDirty = false;\n\n const admission = await this.#admit(project, repoId, repo, branch, worktreeRoot, opts);\n let done: StackRecord;\n try {\n done = await this.#upLocked(\n worktreeRoot,\n project,\n repoId,\n repo,\n branch,\n admission.createdAt,\n opts,\n configured.workloads,\n (d) => {\n tunnelDirty = d;\n },\n );\n } catch (err) {\n await admission.rollback();\n throw err;\n }\n if (tunnelDirty) await this.#reconcileAdopted(done.tunnel);\n await this.#refreshLocalRoutes();\n return done;\n }\n\n async #upLocked(\n worktreeRoot: string,\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n admittedCreatedAt: string,\n opts: UpOptions | undefined,\n configuredWorkloads: Record<string, ConfiguredWorkload>,\n setTunnelDirty: (d: boolean) => void,\n ): Promise<StackRecord> {\n return withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record?.createdAt !== admittedCreatedAt) {\n throw new HestiaError(\"worktree-busy\", \"stack was removed after admission; start cancelled\");\n }\n record.repoId ??= repoId;\n const conventionalCompose = tryLoadConfig(worktreeRoot);\n const composeBaseFile = writeDockerfileComposeModel(\n worktreeRoot,\n configuredWorkloads,\n conventionalCompose?.composeFile,\n );\n const hasCompose = composeBaseFile !== undefined;\n const configuredProcs = Object.entries(configuredWorkloads)\n .filter(([, workload]) => workload.source === \"proc\");\n const configuredWorkers = Object.entries(configuredWorkloads)\n .filter(([, workload]) => workload.source === \"wrangler\");\n if (!hasCompose && !opts?.workers && configuredProcs.length === 0 && configuredWorkers.length === 0) {\n // plain `up` still means \"compose up\" — procs arrive via `run`\n loadConfig(worktreeRoot); // throws config-missing\n }\n\n if (hasCompose) {\n const p = await prepareCompose(worktreeRoot, project, repo, branch, opts, composeBaseFile);\n await composeConfig(p.ctx);\n for (const serviceName of p.services) {\n const proc = record.services.find(\n (service) => service.name === serviceName && service.backend !== \"docker\",\n );\n if (proc !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `compose service \"${serviceName}\" collides with a running proc of the same name`,\n );\n }\n }\n // Publish teardown intent before Compose may create anything. A later\n // failure remains visible and `down` can always remove partial resources.\n record.composeFile = p.composeFile;\n record.overrideFile = p.overridePath;\n writeState(worktreeRoot, record);\n // The explicit list prevents unrelated profile services from starting;\n // transitive dependencies were expanded before override generation.\n let rows;\n try {\n await composeUp(p.ctx, p.services);\n rows = await waitReady(p.ctx, p.services);\n } catch (error) {\n record.state = \"degraded\";\n for (const serviceName of p.services) {\n upsertService(record, {\n name: serviceName,\n backend: \"docker\",\n state: \"unhealthy\",\n containerPort: p.serviceBindings[serviceName]?.[0]?.target,\n bindings: [],\n });\n }\n delete record.starter;\n writeState(worktreeRoot, record);\n throw error;\n }\n const byName = new Map(rows.map((r) => [r.Service, r]));\n\n for (const svc of p.services) {\n const row = byName.get(svc);\n const targetBindings = p.serviceBindings[svc] ?? [];\n const bindings = targetBindings.flatMap((binding) => {\n const publishedPort = publishedPortFor(row, binding.target, binding.protocol);\n return publishedPort === undefined ? [] : [{\n id: `${svc}:${binding.target}/${binding.protocol}`,\n target: String(binding.target),\n protocol: binding.protocol,\n publishedPort,\n }];\n });\n const canonical = bindings.length === 1 ? bindings[0]!.publishedPort : undefined;\n upsertService(record, {\n name: svc,\n backend: \"docker\",\n state: \"healthy\",\n containerPort: targetBindings[0]?.target,\n publishedPort: canonical,\n containerId: row?.ID,\n bindings,\n });\n for (const binding of bindings) {\n record.env[\n `HESTIA_${envKey(svc)}_${binding.target}_${binding.protocol.toUpperCase()}_PORT`\n ] = String(binding.publishedPort);\n }\n if (bindings.length === 1 && canonical !== undefined) {\n record.env[`HESTIA_${envKey(svc)}_PORT`] = String(canonical);\n setEndpoint(record, {\n name: svc,\n host: \"127.0.0.1\",\n port: canonical,\n workload: svc,\n binding: `${bindings[0]!.target}/${bindings[0]!.protocol}`,\n kind: bindings[0]!.protocol,\n reservedName: `${svc}.${branch}.${repo}.localhost`,\n });\n }\n }\n }\n\n for (const [name, workload] of configuredProcs) {\n const command = workload.command!;\n const configuredSpec: ProcSpec = {\n name,\n argv: command,\n port: workload.port ?? \"auto\",\n backend: \"proc\",\n };\n const clash = record.services.find((service) => service.name === name && service.backend === \"docker\");\n if (clash !== undefined) {\n throw new HestiaError(\"name-conflict\", `configured proc ${name} collides with a compose workload`);\n }\n const existing = readPidfile(worktreeRoot, name);\n if (existing !== null && isLive(existing)) {\n if (existing.specFingerprint === procSpecFingerprint(configuredSpec)) continue;\n persistStoppedService(record, name);\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n await stopProcTree(existing);\n removePidfile(worktreeRoot, name);\n } else if (existing !== null) {\n removePidfile(worktreeRoot, name);\n }\n const result = await startProc(\n worktreeRoot,\n configuredSpec,\n record.env,\n (pidfile) => mirrorPidfile(record.project, pidfile),\n );\n recordProc(record, result.record);\n writeState(worktreeRoot, record);\n if (result.error !== undefined) throw result.error;\n }\n\n if (opts?.workers || configuredWorkers.length > 0) {\n const configuredFilters = configuredWorkers.map(([name, workload]) => workload.wranglerConfig ?? name);\n const explicitFilters = Array.isArray(opts?.workers) ? opts.workers : [];\n await this.#upWorkers(worktreeRoot, record, {\n ...opts,\n workers: opts?.workers === true ? true : [...new Set([...explicitFilters, ...configuredFilters])],\n });\n }\n\n applyConfiguredEndpoints(record, configuredWorkloads);\n\n record.state = \"up\";\n delete record.starter; // no longer provisional — services carry the slot\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n return record;\n }));\n }\n\n /** Spawn one supervised `wrangler dev` per discovered config, in parallel. */\n async #upWorkers(\n worktreeRoot: string,\n record: StackRecord,\n opts: UpOptions,\n ): Promise<void> {\n const plan = await planWorkers(worktreeRoot, {\n filter: Array.isArray(opts.workers) ? opts.workers : [],\n allowRemote: opts.allowRemote ?? false,\n force: opts.force ?? false,\n varlock: !opts.noVarlock && detectVarlock(worktreeRoot) !== null,\n });\n for (const w of plan.warnings) process.stderr.write(`warning: ${w}\\n`);\n\n for (const spec of plan.specs) {\n const clash = record.services.find(\n (s) => s.name === spec.name && s.backend === \"docker\",\n );\n if (clash !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `worker \"${spec.name}\" collides with a compose service name`,\n );\n }\n }\n\n const globalBefore = snapshotGlobalRegistry();\n const results = await Promise.allSettled(\n plan.specs.map((spec) =>\n startProc(worktreeRoot, spec, record.env, (pf) =>\n mirrorPidfile(record.project, pf),\n ),\n ),\n );\n\n let firstError: unknown;\n const started: string[] = [];\n for (const [i, res] of results.entries()) {\n if (res.status === \"fulfilled\") {\n recordProc(record, res.value.record);\n if (res.value.error !== undefined) firstError ??= res.value.error;\n else started.push(plan.specs[i]!.name);\n } else {\n firstError ??= res.reason;\n }\n }\n // Persist what did start before surfacing any failure, so `down` cleans it.\n writeState(worktreeRoot, record);\n if (started.length > 0) {\n await verifyPrivateRegistry(privateRegistryDir(worktreeRoot), started);\n for (const w of globalGainWarnings(globalBefore, started)) {\n process.stderr.write(`warning: ${w}\\n`);\n }\n }\n if (firstError !== undefined) throw firstError;\n }\n\n async run(cwd: string, spec: ProcSpec, admit?: AdmitOptions): Promise<StackRecord> {\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n await assertHestiaStateIgnored(worktreeRoot);\n const project = projectName(repoId, repo, branch, worktreeRoot);\n let tunnelDirty = false;\n\n const admission = await this.#admit(project, repoId, repo, branch, worktreeRoot, admit);\n let done: StackRecord;\n try {\n done = await this.#runLocked(worktreeRoot, project, repoId, repo, branch, admission.createdAt, spec, (d) => {\n tunnelDirty = d;\n });\n } catch (err) {\n await admission.rollback();\n throw err;\n }\n if (tunnelDirty) await this.#reconcileAdopted(done.tunnel);\n await this.#refreshLocalRoutes();\n return done;\n }\n\n async #runLocked(\n worktreeRoot: string,\n project: string,\n repoId: RepoId,\n repo: string,\n branch: string,\n admittedCreatedAt: string,\n spec: ProcSpec,\n setTunnelDirty: (d: boolean) => void,\n ): Promise<StackRecord> {\n return withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record?.createdAt !== admittedCreatedAt) {\n throw new HestiaError(\"worktree-busy\", \"stack was removed after admission; start cancelled\");\n }\n record.repoId ??= repoId;\n\n const docker = record.services.find(\n (s) => s.name === spec.name && s.backend === \"docker\",\n );\n if (docker !== undefined) {\n throw new HestiaError(\n \"name-conflict\",\n `\"${spec.name}\" is a compose service in this stack — pick another --name`,\n );\n }\n\n const existing = readPidfile(worktreeRoot, spec.name);\n if (existing !== null && isLive(existing)) {\n const sameCmd = existing.specFingerprint === procSpecFingerprint(spec);\n if (sameCmd) return record; // idempotent no-op: already running this\n persistStoppedService(record, spec.name);\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n await stopProcTree(existing); // replace: same name, different command\n removePidfile(worktreeRoot, spec.name);\n } else if (existing !== null) {\n removePidfile(worktreeRoot, spec.name); // stale (crashed/reused pid)\n }\n\n delete record.env[directUrlKey(spec.name)];\n const result = await startProc(worktreeRoot, spec, record.env, (pf) =>\n mirrorPidfile(record.project, pf),\n );\n recordProc(record, result.record);\n record.state = \"up\";\n delete record.starter; // no longer provisional — services carry the slot\n setTunnelDirty(syncExposures(record));\n writeState(worktreeRoot, record);\n if (result.error !== undefined) throw result.error;\n return record;\n }));\n }\n\n async stopService(cwd: string, name: string): Promise<void> {\n const currentIdentity = await getRepoInfo(cwd);\n const { repo, repoId, branch, worktreeRoot } = currentIdentity;\n let tunnel: TunnelRef | undefined;\n let tunnelDirty = false;\n const stoppedAliases: string[] = [];\n const project = readState(worktreeRoot)?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record !== null) {\n assertCurrentStackIdentity(record, currentIdentity);\n if (record.services.some((service) => service.name === name && service.backend === \"docker\")) {\n throw new HestiaError(\n \"backend-not-stoppable\",\n `Docker workload ${name} cannot be stopped individually; use hestia down`,\n );\n }\n // Shared hostnames served by this workload auto-release on stop; ones\n // served by the stack's OTHER services must survive it.\n for (const endpoint of record.endpoints) {\n if ((endpoint.workload ?? endpoint.name) === name) {\n stoppedAliases.push(endpoint.alias ?? endpoint.name);\n }\n }\n }\n const pf = readPidfile(worktreeRoot, name);\n if (pf !== null) {\n await stopProcTree(pf);\n removePidfile(worktreeRoot, name);\n }\n if (record !== null) {\n const originAuxiliaries = (record.auxiliary ?? []).filter(\n (auxiliary) => auxiliary.originService === name,\n );\n for (const auxiliary of originAuxiliaries) {\n const auxiliaryPidfile = readPidfile(worktreeRoot, auxiliary.name);\n if (auxiliaryPidfile !== null && isLive(auxiliaryPidfile)) {\n await stopProcTree(auxiliaryPidfile);\n }\n removePidfile(worktreeRoot, auxiliary.name);\n }\n if (originAuxiliaries.length > 0) {\n const auxiliaryNames = new Set(originAuxiliaries.map((auxiliary) => auxiliary.name));\n record.auxiliary = (record.auxiliary ?? []).filter(\n (auxiliary) => !auxiliaryNames.has(auxiliary.name),\n );\n for (const auxiliary of originAuxiliaries) {\n const endpointName = auxiliary.originEndpoint ?? name;\n const endpoint = record.endpoints.find((candidate) => candidate.name === endpointName);\n if (endpoint !== undefined) delete endpoint.publicUrl;\n delete record.env[urlKey(endpointName)];\n }\n }\n // a quick tunnel going down takes its origin's public URL with it\n const stopped = record.services.find((s) => s.name === name);\n if (stopped?.originService !== undefined) {\n const endpointName = stopped.originEndpoint ?? stopped.originService;\n const ep = record.endpoints.find((e) => e.name === endpointName);\n if (ep !== undefined) delete ep.publicUrl;\n delete record.env[urlKey(endpointName)];\n }\n dropService(record, name);\n tunnel = record.tunnel;\n tunnelDirty = syncExposures(record);\n const hasStickyLocalRoutes = effectiveLocalRouteServices(record).length > 0;\n if (record.services.length === 0 && record.composeFile === undefined && !hasStickyLocalRoutes) {\n clearState(worktreeRoot, record.project);\n } else {\n writeState(worktreeRoot, record);\n }\n }\n }));\n for (const alias of new Set(stoppedAliases)) {\n await this.#releaseSharedHoldings(project, alias);\n }\n if (tunnelDirty) await this.#reconcileAdopted(tunnel);\n await this.#refreshLocalRoutes();\n }\n\n async addLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n if (services.length === 0) throw new HestiaError(\"usage\", \"Route add: at least one service is required\");\n const daemon = await ensureDaemon();\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) throw new HestiaError(\"no-stack\", \"Route add: no stack for this worktree\");\n const record = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const current = readState(worktreeRoot);\n if (current === null) throw new HestiaError(\"no-stack\", \"Route add: no stack for this worktree\");\n assertCurrentStackIdentity(current, currentIdentity);\n const resolvedRoutes = services.map((input) => ({\n input,\n selection: resolveEndpointSelection(current, input),\n }));\n for (const { input, selection } of resolvedRoutes) {\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\n \"usage\",\n `Route add requires an HTTP endpoint; ${input} is ${selection.endpoint.kind}`,\n );\n }\n const service = current.services.find((candidate) => candidate.name === selection.workload);\n const binding = service?.bindings?.find(\n (candidate) => `${candidate.target}/${candidate.protocol}` === selection.binding,\n );\n const publishedPort = binding?.publishedPort ?? service?.publishedPort;\n if (service === undefined || publishedPort === undefined || service.backend === \"tunnel\") {\n throw new HestiaError(\n \"route-origin-unavailable\",\n `Route add: endpoint \"${input}\" is not running with a direct port`,\n );\n }\n if (!await verifyStackServiceOrigin(current, service, publishedPort)) {\n throw new HestiaError(\n \"route-origin-unavailable\",\n `Route add: endpoint \"${input}\" no longer owns its recorded direct port`,\n );\n }\n }\n current.localRoutes ??= [];\n for (const { selection } of resolvedRoutes) {\n const alias = selection.endpoint.name;\n current.disabledLocalRoutes = (current.disabledLocalRoutes ?? []).filter(\n (route) => (route.alias ?? route.service) !== alias,\n );\n const intent = { service: selection.workload, selector: selection.binding, alias };\n const existing = current.localRoutes.findIndex((route) => (route.alias ?? route.service) === alias);\n if (existing >= 0) current.localRoutes[existing] = intent;\n else current.localRoutes.push(intent);\n }\n current.localRoutes.sort((left, right) => (left.alias ?? left.service).localeCompare(right.alias ?? right.service));\n applyLocalRouteProjection(current);\n writeState(worktreeRoot, current);\n return current;\n }));\n await reconcileDaemonLocalRoutes(daemon.port);\n return record;\n }\n\n async removeLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.resetLocalRoutes(cwd, services);\n }\n\n async disableLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.#setLocalRouteOverride(cwd, services, \"disable\");\n }\n\n async resetLocalRoutes(cwd: string, services: string[]): Promise<StackRecord> {\n return this.#setLocalRouteOverride(cwd, services, \"reset\");\n }\n\n async #setLocalRouteOverride(\n cwd: string,\n services: string[],\n mode: \"disable\" | \"reset\",\n ): Promise<StackRecord> {\n if (services.length === 0) throw new HestiaError(\"usage\", `Route ${mode}: at least one endpoint is required`);\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) throw new HestiaError(\"no-stack\", `Route ${mode}: no stack for this worktree`);\n const record = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const current = readState(worktreeRoot);\n if (current === null) throw new HestiaError(\"no-stack\", `Route ${mode}: no stack for this worktree`);\n assertCurrentStackIdentity(current, currentIdentity);\n const selections = services.map((input) => resolveEndpointSelection(current, input));\n const names = new Set(selections.map((selection) => selection.endpoint.name));\n current.localRoutes = (current.localRoutes ?? []).filter(\n (route) => !names.has(route.alias ?? route.service),\n );\n if (current.localRoutes.length === 0) delete current.localRoutes;\n current.disabledLocalRoutes = (current.disabledLocalRoutes ?? []).filter(\n (route) => !names.has(route.alias ?? route.service),\n );\n if (mode === \"disable\") {\n for (const selection of selections) {\n current.disabledLocalRoutes.push({\n service: selection.workload,\n selector: selection.binding,\n alias: selection.endpoint.name,\n });\n }\n }\n if (current.disabledLocalRoutes.length === 0) delete current.disabledLocalRoutes;\n applyLocalRouteProjection(current);\n if (\n current.services.length === 0 &&\n current.composeFile === undefined &&\n effectiveLocalRouteServices(current).length === 0\n ) {\n clearState(worktreeRoot, current.project);\n } else {\n writeState(worktreeRoot, current);\n }\n return current;\n }));\n await this.#refreshLocalRoutes();\n return record;\n }\n\n async down(cwd: string, opts?: DownOptions): Promise<void> {\n const { repo, repoId, branch, worktreeRoot } = await getRepoInfo(cwd);\n let tunnel: TunnelRef | undefined;\n let initialRecord: StackRecord | null = null;\n try {\n initialRecord = readState(worktreeRoot);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n }\n const mutationProject = initialRecord?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(mutationProject), async () => {\n let record: StackRecord | null = null;\n try {\n record = readState(worktreeRoot);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n if (opts?.expectedStack !== undefined) {\n throw new HestiaError(\"worktree-busy\", \"cannot verify confirmed stack identity against corrupt state\");\n }\n }\n if (opts?.expectedStack !== undefined && !matchesExpectedStack(record, opts.expectedStack)) {\n throw new HestiaError(\"worktree-busy\", \"stack changed after down confirmation; retry\");\n }\n tunnel = record?.tunnel;\n\n // procs first — they depend on the containers, not vice-versa\n for (const pf of listPidfiles(procsDir(worktreeRoot))) {\n await stopProcTree(pf);\n removePidfile(worktreeRoot, pf.name);\n }\n rmSync(privateRegistryDir(worktreeRoot), { recursive: true, force: true });\n\n const composeFile = record?.composeFile ?? tryLoadConfig(worktreeRoot)?.composeFile;\n if (composeFile !== undefined) {\n const project =\n record?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n const overrideFile =\n record?.overrideFile ?? join(hestiaDir(worktreeRoot), OVERRIDE_FILE);\n if (existsSync(overrideFile)) {\n await composeDown(\n { project, baseFile: composeFile, overrideFile, cwd: worktreeRoot },\n opts?.destroy ?? false,\n );\n } else if (record?.composeFile !== undefined) {\n // Recorded compose services but the override is gone — tear down by\n // project label alone, same as the mirror path (needs no files).\n const rest = [\"compose\", \"-p\", project, \"down\", \"--remove-orphans\"];\n if (opts?.destroy) rest.push(\"-v\");\n await pexec(\"docker\", rest, { timeout: 180_000 });\n }\n // else: the repo has a compose file but this stack never composed\n // (procs-only `run` in a compose repo) — nothing docker-side to do.\n }\n\n const project = record?.project ?? projectName(repoId, repo, branch, worktreeRoot);\n clearState(worktreeRoot, project);\n await this.#releaseAdmission(project);\n await this.#releaseSharedHoldings(project);\n }));\n // mirror is gone → regen drops this stack's ingress rules; the connector\n // keeps serving the base rules and other worktrees\n await this.#reconcileAdopted(tunnel);\n await this.#refreshLocalRoutes();\n }\n\n /** Best-effort slot release — waiters get their grant now instead of at the next sweep. */\n async #releaseAdmission(project: string): Promise<void> {\n const j = readDaemonJson();\n if (j !== null) await releaseSlot(j.port, project);\n }\n\n /**\n * Auto-release shared hostnames this project holds (decision: down frees\n * them; the queue head is granted). Best-effort — the sweep reconciles a\n * gone daemon, and the deleted mirror alone already ends routing.\n */\n async #releaseSharedHoldings(project: string, service?: string): Promise<void> {\n const j = readDaemonJson();\n if (j !== null) await releaseSharedForProject(j.port, project, service);\n }\n\n /**\n * Teardown by project name from the ~/.hestia mirror — the worktree (and its\n * lock) may no longer exist. Containers go down by label via `compose -p`,\n * which needs no compose files.\n */\n async downProject(project: string, opts?: DownOptions): Promise<void> {\n if (!/^[a-z0-9][a-z0-9-]{0,99}$/.test(project)) {\n throw new HestiaError(\"usage\", `invalid project name ${JSON.stringify(project)}`);\n }\n let record: StackRecord | null = null;\n let mirrorCorrupt = false;\n try {\n record = readMirrorState(project);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n mirrorCorrupt = true;\n }\n const teardownFromMirror = async (): Promise<void> => {\n let fresh: StackRecord | null = null;\n try {\n fresh = readMirrorState(project);\n } catch (error) {\n if ((error as { code?: string }).code !== \"state-corrupt\") throw error;\n mirrorCorrupt = true;\n }\n if (mirrorCorrupt && opts?.expectedStack !== undefined) {\n throw new HestiaError(\"worktree-busy\", \"cannot verify confirmed stack identity against corrupt state\");\n }\n if (opts?.expectedStack !== undefined && !matchesExpectedStack(fresh, opts.expectedStack)) {\n throw new HestiaError(\"worktree-busy\", \"stack changed after down confirmation; retry\");\n }\n try {\n for (const pf of listPidfiles(mirrorProcsDir(project))) await stopProcTree(pf);\n } catch {\n // A corrupt pidfile is unsafe to signal. Continue with label-only\n // Docker cleanup and remove the corrupt mirror for manual proc audit.\n }\n try {\n const rest = [\"compose\", \"-p\", project, \"down\", \"--remove-orphans\"];\n if (opts?.destroy) rest.push(\"-v\");\n await pexec(\"docker\", rest, { timeout: 180_000 });\n } catch (err) {\n if (fresh?.composeFile !== undefined) {\n throw new HestiaError(\n \"compose-failed\",\n `docker compose -p ${project} down failed: ${(err as Error).message}`,\n );\n }\n }\n rmSync(mirrorDir(project), { recursive: true, force: true });\n };\n if (record !== null && existsSync(record.worktree)) {\n const info = await getRepoInfo(record.worktree);\n const identityMatches =\n resolve(info.worktreeRoot) === resolve(record.worktree) &&\n (record.repoId === undefined ? record.repo === info.repo : record.repoId === info.repoId);\n const localRecord = readState(record.worktree);\n if (identityMatches && localRecord?.project === record.project) {\n await this.down(record.worktree, opts);\n return;\n }\n if (identityMatches) {\n // A cleaned local .hestia directory still shares the worktree's\n // mutation lock with up/run, while teardown reads the surviving mirror.\n const usedMirror = await withLock(record.worktree, () =>\n withLock(projectMutationRoot(project), async () => {\n const current = readState(record.worktree);\n if (current?.project === project) return false;\n await teardownFromMirror();\n return true;\n })\n );\n if (!usedMirror) {\n await this.down(record.worktree, opts);\n return;\n }\n await this.#releaseAdmission(project);\n await this.#releaseSharedHoldings(project);\n await this.#reconcileAdopted(record.tunnel);\n await this.#refreshLocalRoutes();\n return;\n }\n }\n\n // The mirror directory cannot host its own lock because successful\n // teardown removes it. Keep deleted-worktree serialization in a stable\n // project-lock directory outside the mirror being destroyed.\n const projectLockRoot = projectMutationRoot(project);\n await withLock(projectLockRoot, teardownFromMirror);\n await this.#releaseAdmission(project);\n await this.#releaseSharedHoldings(project);\n await this.#reconcileAdopted(record?.tunnel);\n await this.#refreshLocalRoutes();\n }\n\n async expose(\n cwd: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const currentIdentity = await getRepoInfo(cwd);\n const { worktreeRoot } = currentIdentity;\n if (services.length === 0) {\n throw new HestiaError(\"usage\", \"expose requires at least one service name\");\n }\n // Mode pick: --tunnel wins, else the sticky adoption, else quick tunnels.\n const existingRecord = readState(worktreeRoot);\n if (existingRecord !== null) assertCurrentStackIdentity(existingRecord, currentIdentity);\n const tunnelName = opts?.tunnel ?? existingRecord?.tunnel?.name;\n if (tunnelName === undefined && opts?.keepHostHeader) {\n throw new HestiaError(\n \"usage\",\n \"--keep-host-header is not supported for quick tunnels because guarded routing requires Hestia's internal authority\",\n );\n }\n await ensureDaemon();\n await this.#refreshLocalRoutes(true);\n if (opts?.shared !== undefined) {\n if (tunnelName === undefined) {\n throw new HestiaError(\n \"shared-requires-named-tunnel\",\n \"shared hostnames need an adopted named tunnel (stable DNS is the point) — pass --tunnel <name>\",\n );\n }\n return this.#exposeShared(worktreeRoot, services, tunnelName, opts);\n }\n if (tunnelName === undefined) {\n return this.#exposeQuick(worktreeRoot, services, opts);\n }\n return this.#exposeNamed(worktreeRoot, services, tunnelName, opts);\n }\n\n /**\n * Declare + claim one machine-owned shared hostname (`<name>.<zone>`).\n * The connector restarts ONCE here (the rule is holder-independent); every\n * later holder switch is a hestiad route-table update with zero public blip.\n */\n async #exposeShared(\n worktreeRoot: string,\n services: string[],\n tunnelName: string,\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n if (services.length !== 1) {\n throw new HestiaError(\"usage\", \"--shared declares exactly one service per shared hostname\");\n }\n const name = opts!.shared!;\n assertSharedName(name);\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n // Same network preflight as named exposures — no locks held.\n const adopted = await adoptTunnel(tunnelName);\n if (adopted.connections > 0 && !isAdopted(adopted.uuid) && !opts?.force) {\n throw new HestiaError(\n \"tunnel-busy\",\n `tunnel \"${tunnelName}\" already has ${adopted.connections} live edge ` +\n `connection(s) from a foreign connector — stop the other cloudflared first (hestia's ` +\n `connector serves your static hostnames too), or pass --force to ` +\n `accept nondeterministic routing`,\n );\n }\n const preflightRecord = readState(worktreeRoot);\n if (preflightRecord === null) {\n throw new HestiaError(\"service-not-found\", \"stack disappeared while preparing the shared hostname\");\n }\n const baseRules = importBaseRules(adopted.uuid, tunnelName);\n // A user-supplied --hostname is ANY FQDN they control (any zone); its zone\n // is that hostname's parent. Only the derived default needs zone inference.\n const zoneHint = opts?.zone ?? preflightRecord.tunnel?.zone ?? inferZone(baseRules);\n let hostname: string;\n let zone: string;\n if (opts?.hostname !== undefined) {\n hostname = opts.hostname.toLowerCase();\n assertSharedHostnameFqdn(hostname);\n zone = zoneOf(hostname) ?? zoneHint ?? hostname;\n } else {\n if (zoneHint === undefined) {\n throw new HestiaError(\n \"usage\",\n \"cannot infer a zone from the tunnel's existing rules — pass --zone or an explicit --hostname\",\n );\n }\n zone = zoneHint;\n hostname = `${name}.${zone}`;\n }\n const path = normalizeSharedPath(opts?.path);\n const selection = resolveEndpointSelection(preflightRecord, services[0]!);\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `public tunnels require an HTTP endpoint; ${services[0]} is ${selection.endpoint.kind}`);\n }\n const alias = selection.endpoint.alias ?? selection.endpoint.name;\n // Disjointness preflight — fail BEFORE declaring so a conflict never leaves\n // a record that breaks every later connector regen. Base/dynamic rules own\n // a WHOLE hostname, so any path on it collides; sibling shared handles that\n // merely share the hostname (distinct paths) do NOT — declareSharedHostname\n // enforces the finer (hostname, path) uniqueness under the shared lock.\n if (baseRules.some((rule) => rule.hostname === hostname)) {\n throw new HestiaError(\n \"hostname-conflict\",\n `shared hostname ${hostname} is already claimed by the user's static rules`,\n );\n }\n const dynamicConflict = collectDynamicRules(adopted.uuid).rules.find(\n (rule) => rule.hostname === hostname,\n );\n if (dynamicConflict !== undefined) {\n throw new HestiaError(\n \"hostname-conflict\",\n `shared hostname ${hostname} is already claimed by project ${dynamicConflict.project}`,\n );\n }\n await assertNamedTunnelDns(hostname, adopted.uuid);\n await declareSharedHostname({\n name,\n hostname,\n path,\n tunnelUuid: adopted.uuid,\n zone,\n service: alias,\n });\n // Claim through the daemon — the single writer for holder transitions.\n const handle = await ensureDaemon();\n const claim = await sharedVerb(handle.port, \"claim\", {\n name,\n project,\n worktree: worktreeRoot,\n waitMs: 0,\n });\n if (!claim.granted) {\n throw new HestiaError(\n \"shared-held\",\n `shared hostname \"${name}\" is held by ${claim.holder?.project ?? \"another stack\"} ` +\n `(${claim.queued.length} queued) — \\`hestia claim ${name} --wait\\` to queue for it`,\n );\n }\n const outcome = await reconcileTunnel(\n { name: tunnelName, uuid: adopted.uuid, credFile: adopted.credFile },\n { force: opts?.force, readyTimeoutMs: opts?.readyTimeoutMs },\n );\n for (const w of outcome.warnings) process.stderr.write(`warning: ${w}\\n`);\n const final = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\"service-not-found\", \"stack disappeared while exposing (concurrent down?)\");\n }\n applyLocalRouteProjection(record);\n writeState(worktreeRoot, record);\n return record;\n }));\n if (outcome.error !== undefined) throw outcome.error;\n await this.#refreshLocalRoutes(true);\n return final;\n }\n\n /** One quick tunnel per service — zero-account, URL rotates per run. */\n async #exposeQuick(\n worktreeRoot: string,\n services: string[],\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n const exposed = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"no stack in this worktree — `hestia up`/`run` something first\",\n );\n }\n for (const input of services) {\n const selection = resolveEndpointSelection(record, input);\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `public tunnels require an HTTP endpoint; ${input} is ${selection.endpoint.kind}`);\n }\n const alias = selection.endpoint.alias ?? selection.endpoint.name;\n const authority = internalEndpointAuthority(record.project, alias);\n const name = `aux-quick-${createHash(\"sha256\").update(alias).digest(\"hex\").slice(0, 10)}`;\n const quickCfg = join(hestiaDir(worktreeRoot), `quick-${name}.yml`);\n // A hostname-less ingress entry matches every request and is therefore\n // cloudflared's required terminal catch-all. It must remain the only\n // rule; appending `http_status:404` would make this catch-all non-final.\n writeAtomicTextFile(\n quickCfg,\n `ingress:\\n - service: ${JSON.stringify(`unix:${publicGatewaySocketPath()}`)}\\n` +\n ` originRequest:\\n httpHostHeader: ${JSON.stringify(authority)}\\n`,\n );\n const argv = [\n \"cloudflared\",\n \"tunnel\",\n \"--config\",\n quickCfg,\n \"--metrics\",\n \"127.0.0.1:{port}\",\n \"--grace-period\",\n \"5s\",\n \"--no-autoupdate\",\n \"--url\",\n \"http://127.0.0.1:1\",\n ];\n const existing = readPidfile(worktreeRoot, name);\n let metricsPort: number | undefined;\n if (\n existing !== null &&\n isLive(existing) &&\n existing.specFingerprint === procSpecFingerprint({\n name,\n argv,\n port: \"auto\",\n backend: \"tunnel\",\n originService: selection.workload,\n originEndpoint: alias,\n readyTimeoutMs: opts?.readyTimeoutMs,\n })\n ) {\n metricsPort = existing.port; // idempotent: same origin, still live\n } else {\n if (existing !== null) {\n if (isLive(existing)) await stopProcTree(existing);\n removePidfile(worktreeRoot, name);\n }\n const result = await startProc(\n worktreeRoot,\n {\n name,\n argv,\n port: \"auto\",\n backend: \"tunnel\",\n originService: selection.workload,\n originEndpoint: alias,\n readyTimeoutMs: opts?.readyTimeoutMs,\n },\n record.env,\n (pf) => mirrorPidfile(record.project, pf),\n );\n // metrics port only — never a public surface, so no recordProc\n upsertAuxiliary(record, result.record);\n metricsPort = result.record.publishedPort;\n if (result.error !== undefined) {\n writeState(worktreeRoot, record);\n throw result.error;\n }\n }\n const url =\n metricsPort !== undefined\n ? await quickTunnelUrl(metricsPort, opts?.readyTimeoutMs ?? 30_000)\n : null;\n if (url === null) {\n writeState(worktreeRoot, record);\n throw new HestiaError(\n \"tunnel-ready-timeout\",\n `quick tunnel for \"${alias}\" reported no URL in time (offline?) — ` +\n `left running, logs: .hestia/logs/${name}.log`,\n );\n }\n const ep = record.endpoints.find((endpoint) => endpoint.name === selection.endpoint.name);\n if (ep !== undefined) ep.publicUrl = url;\n else {\n setEndpoint(record, {\n name: alias,\n alias,\n workload: selection.workload,\n binding: selection.binding,\n kind: \"http\",\n host: \"127.0.0.1\",\n port: selection.endpoint.port,\n publicUrl: url,\n });\n }\n record.env[urlKey(alias)] = url;\n }\n writeState(worktreeRoot, record);\n return record;\n }));\n await this.#refreshLocalRoutes(true);\n return exposed;\n }\n\n /**\n * Unified named mode: adopt the existing tunnel, record this stack's\n * exposures (intent first — crash-safe), route DNS outside any lock, then\n * converge the machine-global connector. Lock order: worktree → global.\n */\n async #exposeNamed(\n worktreeRoot: string,\n services: string[],\n tunnelName: string,\n opts?: ExposeOptions,\n ): Promise<StackRecord> {\n const project = readState(worktreeRoot)?.project;\n if (project === undefined) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n // network preflight — no locks held. Foreign connectors (the user's\n // manual `tunnel run`, a teammate's replica) make the edge load-balance\n // hostnames across worktrees; hestia never kills processes it didn't\n // spawn, so it refuses to become connector #2.\n const adopted = await adoptTunnel(tunnelName);\n if (adopted.connections > 0 && !isAdopted(adopted.uuid) && !opts?.force) {\n throw new HestiaError(\n \"tunnel-busy\",\n `tunnel \"${tunnelName}\" already has ${adopted.connections} live edge ` +\n `connection(s) from a foreign connector — stop the other cloudflared first (hestia's ` +\n `connector serves your static hostnames too), or pass --force to ` +\n `accept nondeterministic routing`,\n );\n }\n\n const preflightRecord = readState(worktreeRoot);\n if (preflightRecord === null) {\n throw new HestiaError(\"service-not-found\", \"stack disappeared while preparing exposure\");\n }\n const baseRules = importBaseRules(adopted.uuid, tunnelName);\n const zone = opts?.zone ?? preflightRecord.tunnel?.zone ?? inferZone(baseRules);\n if (zone === undefined) {\n throw new HestiaError(\"usage\", \"cannot infer a zone from the tunnel's existing rules — pass --zone\");\n }\n const preparedHostnames = new Map<string, { hostname: string; alias: string; workload: string; binding: string }>();\n for (const input of services) {\n const selection = resolveEndpointSelection(preflightRecord, input);\n if (selection.endpoint.kind !== undefined && selection.endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `public tunnels require an HTTP endpoint; ${input} is ${selection.endpoint.kind}`);\n }\n const alias = selection.endpoint.alias ?? selection.endpoint.name;\n const hostname = hostnameFor(tunnelName, preflightRecord.branch, alias, zone);\n await assertNamedTunnelDns(hostname, adopted.uuid);\n preparedHostnames.set(input, {\n hostname,\n alias,\n workload: selection.workload,\n binding: selection.binding,\n });\n }\n\n await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"no stack in this worktree — `hestia up`/`run` something first\",\n );\n }\n const t: TunnelRef =\n record.tunnel !== undefined && record.tunnel.uuid === adopted.uuid\n ? record.tunnel\n : {\n name: tunnelName,\n uuid: adopted.uuid,\n zone,\n credFile: adopted.credFile,\n exposures: [],\n };\n t.name = tunnelName;\n t.zone = zone;\n t.credFile = adopted.credFile;\n record.tunnel = t;\n\n for (const input of services) {\n const prepared = preparedHostnames.get(input)!;\n const selection = resolveEndpointSelection(record, input);\n const exp = t.exposures.find((candidate) =>\n (candidate.alias ?? candidate.service) === prepared.alias);\n if (exp !== undefined) {\n exp.service = prepared.workload;\n exp.alias = prepared.alias;\n exp.binding = prepared.binding;\n exp.hostname = prepared.hostname;\n exp.originPort = selection.endpoint.port;\n exp.keepHostHeader = opts?.keepHostHeader;\n } else {\n t.exposures.push({\n service: prepared.workload,\n alias: prepared.alias,\n binding: prepared.binding,\n hostname: prepared.hostname,\n originPort: selection.endpoint.port,\n keepHostHeader: opts?.keepHostHeader,\n });\n }\n }\n // DNS was verified before intent publication; Hestia never mutates DNS.\n writeState(worktreeRoot, record);\n }));\n\n const outcome = await reconcileTunnel(\n { name: tunnelName, uuid: adopted.uuid, credFile: adopted.credFile },\n { force: opts?.force, readyTimeoutMs: opts?.readyTimeoutMs },\n );\n for (const w of outcome.warnings) process.stderr.write(`warning: ${w}\\n`);\n\n const final = await withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\n \"service-not-found\",\n \"stack disappeared while exposing (concurrent down?)\",\n );\n }\n for (const exp of record.tunnel?.exposures ?? []) {\n const url = `https://${exp.hostname}`;\n const alias = exp.alias ?? exp.service;\n const ep = record.endpoints.find((endpoint) => endpoint.name === alias);\n if (ep !== undefined) ep.publicUrl = url;\n else {\n setEndpoint(record, {\n name: alias,\n alias,\n workload: exp.service,\n binding: exp.binding,\n kind: \"http\",\n host: \"127.0.0.1\",\n port: exp.originPort,\n publicUrl: url,\n });\n }\n record.env[urlKey(alias)] = url;\n }\n writeState(worktreeRoot, record);\n return record;\n }));\n if (outcome.error !== undefined) throw outcome.error;\n await this.#refreshLocalRoutes(true);\n return final;\n }\n\n /** Resolve this worktree's stack + a declared shared hostname, or throw. */\n async #sharedContext(cwd: string, name: string) {\n assertSharedName(name);\n const { worktreeRoot } = await getRepoInfo(cwd);\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\"service-not-found\", \"no stack in this worktree — `hestia up`/`run` something first\");\n }\n const shared = readSharedHostname(name);\n if (shared === null) {\n throw new HestiaError(\n \"shared-not-found\",\n `no shared hostname \"${name}\" is declared — \\`hestia expose <svc> --shared ${name}\\` creates one`,\n );\n }\n return { worktreeRoot, record, shared };\n }\n\n /** Re-project shared holdership into this worktree's record after a transition. */\n async #applySharedProjection(worktreeRoot: string, project: string): Promise<StackRecord> {\n return withLock(worktreeRoot, () => withLock(projectMutationRoot(project), async () => {\n const record = readState(worktreeRoot);\n if (record === null) {\n throw new HestiaError(\"service-not-found\", \"stack disappeared during the shared-hostname transition\");\n }\n applyLocalRouteProjection(record);\n writeState(worktreeRoot, record);\n return record;\n }));\n }\n\n /**\n * Claim a shared hostname for this worktree. Held names queue durably:\n * `waitMs > 0` long-polls the grant; expiry answers the CLI but the queue\n * position SURVIVES — re-running claim re-attaches to it.\n */\n async claimShared(\n cwd: string,\n name: string,\n opts?: { waitMs?: number },\n ): Promise<{ record: StackRecord; result: SharedClaimResult }> {\n const { worktreeRoot, record, shared } = await this.#sharedContext(cwd, name);\n const endpoint = record.endpoints.find(\n (candidate) => (candidate.alias ?? candidate.name) === shared.service,\n );\n if (endpoint === undefined) {\n throw new HestiaError(\n \"service-not-found\",\n `shared hostname \"${name}\" routes to endpoint alias \"${shared.service}\", which this ` +\n `stack does not expose — \\`hestia up\\`/\\`run\\` it first`,\n );\n }\n if (endpoint.kind !== undefined && endpoint.kind !== \"http\") {\n throw new HestiaError(\"usage\", `shared hostnames require an HTTP endpoint; ${shared.service} is ${endpoint.kind}`);\n }\n const handle = await ensureDaemon();\n const result = await sharedVerb(handle.port, \"claim\", {\n name,\n project: record.project,\n worktree: worktreeRoot,\n waitMs: opts?.waitMs ?? 0,\n });\n if (!result.granted) {\n const position = result.queued.findIndex((waiter) => waiter.project === record.project) + 1;\n throw new HestiaError(\n \"shared-held\",\n `shared hostname \"${name}\" is held by ${result.holder?.project ?? \"another stack\"}` +\n (position > 0\n ? ` — queued durably at position ${position}/${result.queued.length}; the holder can ` +\n `\\`hestia share allow ${name}\\`, or re-run \\`hestia claim ${name} --wait\\` to keep waiting`\n : \"\"),\n { holder: result.holder, queued: result.queued },\n );\n }\n const updated = await this.#applySharedProjection(worktreeRoot, record.project);\n await this.#refreshLocalRoutes();\n return { record: updated, result };\n }\n\n /** Release a held shared hostname; the queue head is granted immediately. */\n async releaseShared(cwd: string, name: string): Promise<StackRecord> {\n const { worktreeRoot, record } = await this.#sharedContext(cwd, name);\n const handle = await ensureDaemon();\n await sharedVerb(handle.port, \"release\", { name, project: record.project });\n const updated = await this.#applySharedProjection(worktreeRoot, record.project);\n await this.#refreshLocalRoutes();\n return updated;\n }\n\n /** Drop this worktree's durable queue entry without touching the holder. */\n async cancelSharedClaim(cwd: string, name: string): Promise<void> {\n const { record } = await this.#sharedContext(cwd, name);\n const handle = await ensureDaemon();\n await sharedVerb(handle.port, \"cancel\", { name, project: record.project });\n }\n\n /** Holder consents: hand the hostname to the queue head. */\n async allowShared(cwd: string, name: string): Promise<StackRecord> {\n const { worktreeRoot, record } = await this.#sharedContext(cwd, name);\n const handle = await ensureDaemon();\n await sharedVerb(handle.port, \"allow\", { name, project: record.project });\n const updated = await this.#applySharedProjection(worktreeRoot, record.project);\n await this.#refreshLocalRoutes();\n return updated;\n }\n\n /** Holder declines the head request; the waiter stays durably queued. */\n async denyShared(cwd: string, name: string): Promise<void> {\n const { record } = await this.#sharedContext(cwd, name);\n const handle = await ensureDaemon();\n await sharedVerb(handle.port, \"deny\", { name, project: record.project });\n }\n\n async status(cwd: string): Promise<StackRecord | null> {\n const { worktreeRoot } = await getRepoInfo(cwd);\n const record = readState(worktreeRoot);\n if (record === null) return null;\n\n let anyUp = false;\n\n // docker services: best-effort refresh of live health/ports\n if (record.composeFile !== undefined && record.overrideFile !== undefined) {\n try {\n const rows = await composePs({\n project: record.project,\n baseFile: record.composeFile,\n overrideFile: record.overrideFile,\n cwd: worktreeRoot,\n });\n const byName = new Map(rows.map((r) => [r.Service, r]));\n for (const svc of record.services) {\n if (svc.backend !== \"docker\") continue;\n const row = byName.get(svc.name);\n if (row === undefined) {\n svc.state = \"exited\";\n continue;\n }\n anyUp = true;\n svc.state =\n row.Health === \"healthy\" || row.State === \"running\"\n ? \"healthy\"\n : \"unhealthy\";\n const pub = publishedPortFor(row, svc.containerPort);\n if (pub !== undefined) {\n svc.publishedPort = pub;\n svc.containerId = row.ID ?? svc.containerId;\n const endpoint = record.endpoints.find((candidate) => candidate.name === svc.name);\n if (endpoint !== undefined) endpoint.port = pub;\n }\n }\n } catch {\n // docker unreachable — report last known state for docker services\n anyUp = record.services.some(\n (s) => s.backend === \"docker\" && s.state === \"healthy\",\n );\n }\n }\n\n // procs: live (pid + verbatim start-time) and still owning their port\n for (const svc of [...record.services, ...(record.auxiliary ?? [])]) {\n if (svc.backend === \"docker\") continue;\n const auxiliary = record.auxiliary?.includes(svc) ?? false;\n if (\n svc.pid === undefined ||\n !isLive({ pid: svc.pid, startTime: svc.startTime ?? \"\" })\n ) {\n svc.state = \"exited\";\n continue;\n }\n if (!auxiliary) anyUp = true;\n if (svc.publishedPort !== undefined) {\n try {\n const view = await inspectPort(svc.pid, svc.publishedPort);\n svc.state = view.ownerIsMember ? \"healthy\" : \"unhealthy\";\n } catch {\n svc.state = \"healthy\"; // ownership tool missing — alive is the best we know\n }\n } else {\n svc.state = \"healthy\";\n }\n const endpoint = record.endpoints.find((candidate) => candidate.name === svc.name);\n if (endpoint !== undefined && svc.publishedPort !== undefined) endpoint.port = svc.publishedPort;\n // quick tunnel that connected after its expose timed out: surface the URL\n if (\n svc.backend === \"tunnel\" &&\n svc.originService !== undefined &&\n svc.state === \"healthy\" &&\n svc.publishedPort !== undefined &&\n record.env[urlKey(svc.originEndpoint ?? svc.originService)] === undefined\n ) {\n const url = await quickTunnelUrl(svc.publishedPort, 1_000);\n if (url !== null) {\n const endpointName = svc.originEndpoint ?? svc.originService;\n record.env[urlKey(endpointName)] = url;\n const ep = record.endpoints.find((e) => e.name === endpointName);\n if (ep !== undefined) ep.publicUrl = url;\n }\n }\n }\n\n // named mode: the global connector, viewed from this stack\n if (record.tunnel !== undefined) {\n const pf = connectorPidfile(record.tunnel.uuid);\n let state: ServiceRecord[\"state\"] = \"exited\";\n if (pf !== null && isLive(pf)) {\n // an exposure aimed at a port this stack no longer holds is the\n // misdelivery hazard — report it, don't hide it behind /ready\n const portsCurrent = record.tunnel.exposures.every((exp) => {\n const svc = record.services.find((s) => s.name === exp.service);\n const binding = svc?.bindings?.find((candidate) =>\n `${candidate.target}/${candidate.protocol}` === exp.binding);\n return (binding?.publishedPort ?? svc?.publishedPort) === exp.originPort;\n });\n const ready =\n pf.port !== undefined ? await isReady(pf.port) : false;\n state = portsCurrent && ready ? \"healthy\" : \"unhealthy\";\n }\n upsertService(record, {\n name: \"tunnel\",\n backend: \"tunnel\",\n state,\n pid: pf?.pid,\n pgid: pf?.pgid,\n startTime: pf?.startTime,\n logPath: pf?.logPath,\n });\n }\n\n record.state = anyUp ? \"up\" : \"stopped\";\n applyLocalRouteProjection(record);\n return record;\n }\n\n restartService(): Promise<void> {\n throw new NotImplemented(\"restartService\");\n }\n}\n\nexport const engine = new ComposeEngine();\n",
|
|
119
121
|
"import type { LogLine } from \"@hestia/core\";\n\nfunction logLineSignature(line: LogLine): string {\n return `${line.project}\\0${line.service}\\0${line.source}\\0${line.meta === true ? \"1\" : \"0\"}\\0${line.text}`;\n}\n\n/** Suppress only the reconnect backfill prefix that overlaps the visible ring tail. */\nexport class ReconnectLogDeduper {\n readonly #capacity: number;\n #history: Array<{ signature: string; line: LogLine }> = [];\n #reconnectBuffer: Array<{ signature: string; line: LogLine }> | null = null;\n\n constructor(capacity = 50) {\n this.#capacity = capacity;\n }\n\n beginReconnect(): void {\n this.#reconnectBuffer = [];\n }\n\n push(line: LogLine): LogLine[] {\n const entry = { signature: logLineSignature(line), line };\n if (this.#reconnectBuffer === null || this.#history.length === 0) {\n this.#remember([entry]);\n return [line];\n }\n this.#reconnectBuffer.push(entry);\n const buffered = this.#reconnectBuffer;\n const activeOverlapLengths: number[] = [];\n const completedOverlapLengths: number[] = [];\n for (let start = 0; start < this.#history.length; start += 1) {\n const overlapLength = this.#history.length - start;\n const compared = Math.min(buffered.length, overlapLength);\n let matches = true;\n for (let index = 0; index < compared; index += 1) {\n if (buffered[index]!.signature !== this.#history[start + index]!.signature) {\n matches = false;\n break;\n }\n }\n if (!matches) continue;\n if (buffered.length <= overlapLength) activeOverlapLengths.push(overlapLength);\n if (buffered.length >= overlapLength) completedOverlapLengths.push(overlapLength);\n }\n if (activeOverlapLengths.length > 0) return [];\n const suppressed = Math.max(0, ...completedOverlapLengths);\n const fresh = buffered.slice(suppressed);\n this.#reconnectBuffer = null;\n this.#remember(fresh);\n return fresh.map((candidate) => candidate.line);\n }\n\n #remember(entries: Array<{ signature: string; line: LogLine }>): void {\n this.#history = [...this.#history, ...entries].slice(-this.#capacity);\n }\n}\n",
|
|
120
|
-
"import type {\n FleetEnvelope,\n FleetSnapshotEnvelope,\n FleetStackView,\n LogLine,\n RepoId,\n} from \"@hestia/core\";\nimport {\n doctor,\n engine,\n ensureDaemon,\n streamDaemonFleet,\n streamDaemonServiceLogs,\n type DoctorRow,\n} from \"@hestia/engine\";\nimport { ReconnectLogDeduper } from \"./log-reconnect-deduper.ts\";\n\nfunction isFleetEnvelope(value: unknown): value is FleetEnvelope {\n if (typeof value !== \"object\" || value === null) return false;\n const frame = value as Partial<FleetEnvelope>;\n if (!Number.isInteger(frame.sequence)) return false;\n if (frame.type === \"heartbeat\") return typeof frame.at === \"string\";\n if (frame.type !== \"snapshot\") return false;\n const snapshot = (frame as Partial<FleetSnapshotEnvelope>).snapshot;\n return (\n typeof snapshot === \"object\" &&\n snapshot !== null &&\n Array.isArray(snapshot.stacks) &&\n Array.isArray(snapshot.warnings)\n );\n}\n\nfunction isLogLine(value: unknown): value is LogLine {\n if (typeof value !== \"object\" || value === null) return false;\n const line = value as Partial<LogLine>;\n return (\n typeof line.project === \"string\" &&\n typeof line.service === \"string\" &&\n typeof line.source === \"string\" &&\n typeof line.text === \"string\"\n );\n}\n\nasync function reconnectDelay(attempt: number, signal: AbortSignal): Promise<void> {\n const delay = Math.min(4_000, 250 * 2 ** Math.min(attempt, 4));\n if (signal.aborted) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delay);\n function done() {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", done);\n resolve();\n }\n signal.addEventListener(\"abort\", done, { once: true });\n });\n}\n\n/** TUI data source owning daemon discovery, reconnects, logs, doctor, and safe down. */\nexport class DaemonFleetSource {\n readonly #lifetime = new AbortController();\n\n constructor(readonly repoId: RepoId) {}\n\n /** Follow full Fleet snapshots, rediscovering a restarted daemon and its new token/port. */\n async *fleet(signal: AbortSignal): AsyncGenerator<FleetEnvelope> {\n let attempt = 0;\n while (!signal.aborted && !this.#lifetime.signal.aborted) {\n try {\n const daemon = await ensureDaemon();\n for await (const frame of streamDaemonFleet(daemon.port, this.repoId, signal)) {\n if (!isFleetEnvelope(frame)) throw new Error(\"Fleet protocol frame is invalid\");\n attempt = 0;\n yield frame;\n }\n if (!signal.aborted) throw new Error(\"Fleet stream ended\");\n } catch (error) {\n if (signal.aborted || this.#lifetime.signal.aborted) return;\n yield {\n type: \"heartbeat\",\n sequence: -1,\n at: `disconnected: ${(error as Error).message}`,\n };\n await reconnectDelay(attempt++, signal);\n }\n }\n }\n\n /** Follow one service, retaining the UI ring while reconnecting with a small backfill. */\n async *logs(\n project: string,\n service: string,\n signal: AbortSignal,\n ): AsyncGenerator<LogLine> {\n let attempt = 0;\n let connectedBefore = false;\n const deduper = new ReconnectLogDeduper(50);\n while (!signal.aborted && !this.#lifetime.signal.aborted) {\n const connectedAt = Date.now();\n try {\n const daemon = await ensureDaemon();\n if (connectedBefore) {\n deduper.beginReconnect();\n }\n connectedBefore = true;\n for await (const line of streamDaemonServiceLogs(daemon.port, project, service, 50, signal)) {\n if (!isLogLine(line)) throw new Error(\"log protocol frame is invalid\");\n for (const freshLine of deduper.push(line)) yield freshLine;\n }\n if (!signal.aborted) throw new Error(\"log stream ended\");\n } catch {\n if (signal.aborted || this.#lifetime.signal.aborted) return;\n if (Date.now() - connectedAt >= 10_000) attempt = 0;\n await reconnectDelay(attempt++, signal);\n }\n }\n }\n\n /** Run report-only diagnostics for one extant managed worktree. */\n diagnose(worktree: string): Promise<DoctorRow[]> {\n return doctor(worktree);\n }\n\n /** Tear down one managed project while always retaining named volumes. */\n down(stack: FleetStackView): Promise<void> {\n if (stack.createdAt === undefined) {\n return Promise.reject(new Error(`stack ${stack.project} has no stable incarnation timestamp`));\n }\n return engine.downProject(stack.project, {\n destroy: false,\n expectedStack: {\n repoId: stack.repoId,\n worktree: stack.worktree,\n createdAt: stack.createdAt,\n },\n });\n }\n\n /** Stop every reconnect loop owned by this TUI process. */\n stop(): void {\n this.#lifetime.abort();\n }\n}\n",
|
|
121
|
-
"import type { FleetSnapshot, FleetStackView } from \"@hestia/core\";\n\nexport type FleetFocus = \"stacks\" | \"services\" | \"logs\" | \"filter\";\nexport type FleetLayoutMode = \"auto\" | \"split\" | \"stack\";\n\nexport interface FleetSelection {\n project?: string;\n service?: string;\n endpoint?: string;\n}\n\nexport interface FleetUiState {\n selection: FleetSelection;\n focus: FleetFocus;\n layout: FleetLayoutMode;\n filter: string;\n follow: boolean;\n logOffset: number;\n unseenLines: number;\n helpOpen: boolean;\n doctorOpen: boolean;\n confirmDown?: FleetStackView;\n downPending: boolean;\n}\n\nexport type FleetUiAction =\n | { type: \"reconcile\"; snapshot: FleetSnapshot; preferredProject?: string }\n | { type: \"move-stack\"; delta: number; snapshot: FleetSnapshot }\n | { type: \"move-service\"; delta: number; snapshot: FleetSnapshot }\n | { type: \"select-stack\"; project: string; snapshot: FleetSnapshot }\n | { type: \"select-service\"; service: string; snapshot: FleetSnapshot }\n | { type: \"select-endpoint\"; service: string; endpoint: string; snapshot: FleetSnapshot }\n | { type: \"focus\"; focus: FleetFocus }\n | { type: \"layout\"; layout: FleetLayoutMode }\n | { type: \"filter\"; filter: string; snapshot?: FleetSnapshot }\n | { type: \"follow\"; follow: boolean }\n | { type: \"scroll-logs\"; delta: number }\n | { type: \"new-lines\"; count: number; maxOffset?: number }\n | { type: \"help\"; open: boolean }\n | { type: \"doctor\"; open: boolean }\n | { type: \"confirm-down\"; stack?: FleetStackView }\n | { type: \"down-pending\"; pending: boolean };\n\n/** Create deterministic Fleet UI state before the first daemon snapshot arrives. */\nexport function createFleetUiState(): FleetUiState {\n return {\n selection: {},\n focus: \"stacks\",\n layout: \"auto\",\n filter: \"\",\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n helpOpen: false,\n doctorOpen: false,\n downPending: false,\n };\n}\n\n/** Filter only Hestia-managed snapshot rows; Git worktrees are never discovered here. */\nexport function visibleFleetStacks(snapshot: FleetSnapshot, filter: string): FleetStackView[] {\n const needle = filter.trim().toLowerCase();\n if (needle === \"\") return snapshot.stacks;\n return snapshot.stacks.filter((stack) =>\n `${stack.project}\\n${stack.branch}\\n${stack.services.map((service) =>\n `${service.name}\\n${(service.endpoints ?? []).map((endpoint) => endpoint.name).join(\"\\n\")}`\n ).join(\"\\n\")}`\n .toLowerCase()\n .includes(needle),\n );\n}\n\nfunction nearestItem<T>(items: T[], currentIndex: number): T | undefined {\n return items[Math.min(Math.max(currentIndex, 0), Math.max(0, items.length - 1))];\n}\n\n/** Preserve stable project/service selection and clamp only when snapshot rows disappear. */\nexport function reconcileFleetSelection(\n previous: FleetSelection,\n snapshot: FleetSnapshot,\n preferredProject?: string,\n): FleetSelection {\n if (snapshot.stacks.length === 0) return {};\n const previousIndex = snapshot.stacks.findIndex((stack) => stack.project === previous.project);\n const stack = snapshot.stacks.find((candidate) => candidate.project === previous.project)\n ?? snapshot.stacks.find((candidate) => candidate.project === preferredProject)\n ?? nearestItem(snapshot.stacks, previousIndex < 0 ? 0 : previousIndex)\n ?? snapshot.stacks[0]!;\n const service = stack.services.find((candidate) => candidate.name === previous.service)\n ?? stack.services[0];\n const endpoints = service?.endpoints ?? (service?.endpoint === undefined ? [] : [service.endpoint]);\n const endpoint = endpoints.find((candidate) => candidate.name === previous.endpoint);\n return { project: stack.project, service: service?.name, endpoint: endpoint?.name };\n}\n\nfunction moveSelection<T>(items: T[], currentIndex: number, delta: number): T | undefined {\n if (items.length === 0) return undefined;\n const start = currentIndex < 0 ? 0 : currentIndex;\n const index = Math.min(items.length - 1, Math.max(0, start + delta));\n return items[index];\n}\n\n/** Reduce keyboard and stream events without coupling selection logic to React rendering. */\nexport function reduceFleetUiState(state: FleetUiState, action: FleetUiAction): FleetUiState {\n switch (action.type) {\n case \"reconcile\":\n const visibleSnapshot = state.filter === \"\"\n ? action.snapshot\n : { ...action.snapshot, stacks: visibleFleetStacks(action.snapshot, state.filter) };\n return {\n ...state,\n selection: reconcileFleetSelection(state.selection, visibleSnapshot, action.preferredProject),\n };\n case \"move-stack\": {\n const stacks = visibleFleetStacks(action.snapshot, state.filter);\n const currentIndex = stacks.findIndex((stack) => stack.project === state.selection.project);\n const stack = moveSelection(stacks, currentIndex, action.delta);\n return stack === undefined\n ? state\n : {\n ...state,\n selection: {\n project: stack.project,\n service: stack.services[0]?.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"move-service\": {\n const stack = action.snapshot.stacks.find((candidate) => candidate.project === state.selection.project);\n if (stack === undefined) return state;\n const currentIndex = stack.services.findIndex((service) => service.name === state.selection.service);\n const service = moveSelection(stack.services, currentIndex, action.delta);\n return service === undefined\n ? state\n : {\n ...state,\n selection: {\n ...state.selection,\n service: service.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-stack\": {\n const stack = visibleFleetStacks(action.snapshot, state.filter).find(\n (candidate) => candidate.project === action.project,\n );\n return stack === undefined ? state : {\n ...state,\n focus: \"stacks\",\n selection: {\n project: stack.project,\n service: stack.services[0]?.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-service\": {\n const stack = action.snapshot.stacks.find(\n (candidate) => candidate.project === state.selection.project,\n );\n if (!stack?.services.some((service) => service.name === action.service)) return state;\n return {\n ...state,\n focus: \"services\",\n selection: {\n ...state.selection,\n service: action.service,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-endpoint\": {\n const stack = action.snapshot.stacks.find(\n (candidate) => candidate.project === state.selection.project,\n );\n const service = stack?.services.find((candidate) => candidate.name === action.service);\n if (!service?.endpoints?.some((endpoint) => endpoint.name === action.endpoint)) return state;\n return {\n ...state,\n focus: \"services\",\n selection: { ...state.selection, service: action.service, endpoint: action.endpoint },\n };\n }\n case \"focus\": return { ...state, focus: action.focus };\n case \"layout\": return { ...state, layout: action.layout };\n case \"filter\": {\n if (action.snapshot === undefined) return { ...state, filter: action.filter };\n const visibleSnapshot = {\n ...action.snapshot,\n stacks: visibleFleetStacks(action.snapshot, action.filter),\n };\n return {\n ...state,\n filter: action.filter,\n selection: reconcileFleetSelection(state.selection, visibleSnapshot),\n };\n }\n case \"follow\": return {\n ...state,\n follow: action.follow,\n logOffset: action.follow ? 0 : state.logOffset,\n unseenLines: action.follow ? 0 : state.unseenLines,\n };\n case \"scroll-logs\": return {\n ...state,\n follow: action.delta > 0 ? state.follow : false,\n logOffset: Math.max(0, state.logOffset - action.delta),\n };\n case \"new-lines\": return state.follow\n ? state\n : {\n ...state,\n logOffset: Math.min(action.maxOffset ?? Number.MAX_SAFE_INTEGER, state.logOffset + action.count),\n unseenLines: state.unseenLines + action.count,\n };\n case \"help\": return { ...state, helpOpen: action.open };\n case \"doctor\": return { ...state, doctorOpen: action.open };\n case \"confirm-down\": return {\n ...state,\n confirmDown: action.stack,\n };\n case \"down-pending\": return { ...state, downPending: action.pending };\n }\n}\n",
|
|
122
|
+
"import type {\n FleetEnvelope,\n FleetSnapshotEnvelope,\n FleetStackView,\n LogLine,\n RepoId,\n} from \"@hestia/core\";\nimport {\n doctor,\n engine,\n ensureDaemon,\n streamDaemonFleet,\n streamDaemonServiceLogs,\n type DoctorRow,\n} from \"@hestia/engine\";\nimport { ReconnectLogDeduper } from \"./log-reconnect-deduper.ts\";\n\nfunction isFleetEnvelope(value: unknown): value is FleetEnvelope {\n if (typeof value !== \"object\" || value === null) return false;\n const frame = value as Partial<FleetEnvelope>;\n if (!Number.isInteger(frame.sequence)) return false;\n if (frame.type === \"heartbeat\") return typeof frame.at === \"string\";\n if (frame.type !== \"snapshot\") return false;\n const snapshot = (frame as Partial<FleetSnapshotEnvelope>).snapshot;\n return (\n typeof snapshot === \"object\" &&\n snapshot !== null &&\n Array.isArray(snapshot.stacks) &&\n Array.isArray(snapshot.warnings)\n );\n}\n\nfunction isLogLine(value: unknown): value is LogLine {\n if (typeof value !== \"object\" || value === null) return false;\n const line = value as Partial<LogLine>;\n return (\n typeof line.project === \"string\" &&\n typeof line.service === \"string\" &&\n typeof line.source === \"string\" &&\n typeof line.text === \"string\"\n );\n}\n\nasync function reconnectDelay(attempt: number, signal: AbortSignal): Promise<void> {\n const delay = Math.min(4_000, 250 * 2 ** Math.min(attempt, 4));\n if (signal.aborted) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delay);\n function done() {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", done);\n resolve();\n }\n signal.addEventListener(\"abort\", done, { once: true });\n });\n}\n\n/** TUI data source owning daemon discovery, reconnects, logs, doctor, and safe down. */\nexport class DaemonFleetSource {\n readonly #lifetime = new AbortController();\n\n constructor(readonly repoId: RepoId) {}\n\n /** Follow full Fleet snapshots, rediscovering a restarted daemon and its new token/port. */\n async *fleet(signal: AbortSignal): AsyncGenerator<FleetEnvelope> {\n let attempt = 0;\n while (!signal.aborted && !this.#lifetime.signal.aborted) {\n try {\n const daemon = await ensureDaemon();\n for await (const frame of streamDaemonFleet(daemon.port, this.repoId, signal)) {\n if (!isFleetEnvelope(frame)) throw new Error(\"Fleet protocol frame is invalid\");\n attempt = 0;\n yield frame;\n }\n if (!signal.aborted) throw new Error(\"Fleet stream ended\");\n } catch (error) {\n if (signal.aborted || this.#lifetime.signal.aborted) return;\n yield {\n type: \"heartbeat\",\n sequence: -1,\n at: `disconnected: ${(error as Error).message}`,\n };\n await reconnectDelay(attempt++, signal);\n }\n }\n }\n\n /** Follow one service, retaining the UI ring while reconnecting with a small backfill. */\n async *logs(\n project: string,\n service: string,\n signal: AbortSignal,\n ): AsyncGenerator<LogLine> {\n let attempt = 0;\n let connectedBefore = false;\n const deduper = new ReconnectLogDeduper(50);\n while (!signal.aborted && !this.#lifetime.signal.aborted) {\n const connectedAt = Date.now();\n try {\n const daemon = await ensureDaemon();\n if (connectedBefore) {\n deduper.beginReconnect();\n }\n connectedBefore = true;\n for await (const line of streamDaemonServiceLogs(daemon.port, project, service, 50, signal)) {\n if (!isLogLine(line)) throw new Error(\"log protocol frame is invalid\");\n for (const freshLine of deduper.push(line)) yield freshLine;\n }\n if (!signal.aborted) throw new Error(\"log stream ended\");\n } catch {\n if (signal.aborted || this.#lifetime.signal.aborted) return;\n if (Date.now() - connectedAt >= 10_000) attempt = 0;\n await reconnectDelay(attempt++, signal);\n }\n }\n }\n\n /** Run report-only diagnostics for one extant managed worktree. */\n diagnose(worktree: string): Promise<DoctorRow[]> {\n return doctor(worktree);\n }\n\n /** Claim a shared hostname AS the given worktree (enqueues durably if held). */\n async claimShared(worktree: string, name: string): Promise<void> {\n await engine.claimShared(worktree, name);\n }\n\n /** Holder consents: hand the shared hostname to the queue head. */\n async allowShared(worktree: string, name: string): Promise<void> {\n await engine.allowShared(worktree, name);\n }\n\n /** Holder declines the head request; the waiter stays durably queued. */\n async denyShared(worktree: string, name: string): Promise<void> {\n await engine.denyShared(worktree, name);\n }\n\n /** Holder releases the shared hostname; the queue head is granted at once. */\n async releaseShared(worktree: string, name: string): Promise<void> {\n await engine.releaseShared(worktree, name);\n }\n\n /** Tear down one managed project while always retaining named volumes. */\n down(stack: FleetStackView): Promise<void> {\n if (stack.createdAt === undefined) {\n return Promise.reject(new Error(`stack ${stack.project} has no stable incarnation timestamp`));\n }\n return engine.downProject(stack.project, {\n destroy: false,\n expectedStack: {\n repoId: stack.repoId,\n worktree: stack.worktree,\n createdAt: stack.createdAt,\n },\n });\n }\n\n /** Stop every reconnect loop owned by this TUI process. */\n stop(): void {\n this.#lifetime.abort();\n }\n}\n",
|
|
123
|
+
"import type { FleetSnapshot, FleetStackView } from \"@hestia/core\";\n\nexport type FleetFocus = \"stacks\" | \"services\" | \"logs\" | \"filter\";\nexport type FleetLayoutMode = \"auto\" | \"split\" | \"stack\";\n\nexport interface FleetSelection {\n project?: string;\n service?: string;\n endpoint?: string;\n}\n\nexport interface FleetUiState {\n selection: FleetSelection;\n focus: FleetFocus;\n layout: FleetLayoutMode;\n filter: string;\n follow: boolean;\n logOffset: number;\n unseenLines: number;\n helpOpen: boolean;\n doctorOpen: boolean;\n sharedOpen: boolean;\n sharedSelection: number;\n confirmDown?: FleetStackView;\n downPending: boolean;\n}\n\nexport type FleetUiAction =\n | { type: \"reconcile\"; snapshot: FleetSnapshot; preferredProject?: string }\n | { type: \"move-stack\"; delta: number; snapshot: FleetSnapshot }\n | { type: \"move-service\"; delta: number; snapshot: FleetSnapshot }\n | { type: \"select-stack\"; project: string; snapshot: FleetSnapshot }\n | { type: \"select-service\"; service: string; snapshot: FleetSnapshot }\n | { type: \"select-endpoint\"; service: string; endpoint: string; snapshot: FleetSnapshot }\n | { type: \"focus\"; focus: FleetFocus }\n | { type: \"layout\"; layout: FleetLayoutMode }\n | { type: \"filter\"; filter: string; snapshot?: FleetSnapshot }\n | { type: \"follow\"; follow: boolean }\n | { type: \"scroll-logs\"; delta: number }\n | { type: \"new-lines\"; count: number; maxOffset?: number }\n | { type: \"help\"; open: boolean }\n | { type: \"doctor\"; open: boolean }\n | { type: \"shared\"; open: boolean }\n | { type: \"move-shared\"; delta: number; count: number }\n | { type: \"confirm-down\"; stack?: FleetStackView }\n | { type: \"down-pending\"; pending: boolean };\n\n/** Create deterministic Fleet UI state before the first daemon snapshot arrives. */\nexport function createFleetUiState(): FleetUiState {\n return {\n selection: {},\n focus: \"stacks\",\n layout: \"auto\",\n filter: \"\",\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n helpOpen: false,\n doctorOpen: false,\n sharedOpen: false,\n sharedSelection: 0,\n downPending: false,\n };\n}\n\n/** Filter only Hestia-managed snapshot rows; Git worktrees are never discovered here. */\nexport function visibleFleetStacks(snapshot: FleetSnapshot, filter: string): FleetStackView[] {\n const needle = filter.trim().toLowerCase();\n if (needle === \"\") return snapshot.stacks;\n return snapshot.stacks.filter((stack) =>\n `${stack.project}\\n${stack.branch}\\n${stack.services.map((service) =>\n `${service.name}\\n${(service.endpoints ?? []).map((endpoint) => endpoint.name).join(\"\\n\")}`\n ).join(\"\\n\")}`\n .toLowerCase()\n .includes(needle),\n );\n}\n\nfunction nearestItem<T>(items: T[], currentIndex: number): T | undefined {\n return items[Math.min(Math.max(currentIndex, 0), Math.max(0, items.length - 1))];\n}\n\n/** Preserve stable project/service selection and clamp only when snapshot rows disappear. */\nexport function reconcileFleetSelection(\n previous: FleetSelection,\n snapshot: FleetSnapshot,\n preferredProject?: string,\n): FleetSelection {\n if (snapshot.stacks.length === 0) return {};\n const previousIndex = snapshot.stacks.findIndex((stack) => stack.project === previous.project);\n const stack = snapshot.stacks.find((candidate) => candidate.project === previous.project)\n ?? snapshot.stacks.find((candidate) => candidate.project === preferredProject)\n ?? nearestItem(snapshot.stacks, previousIndex < 0 ? 0 : previousIndex)\n ?? snapshot.stacks[0]!;\n const service = stack.services.find((candidate) => candidate.name === previous.service)\n ?? stack.services[0];\n const endpoints = service?.endpoints ?? (service?.endpoint === undefined ? [] : [service.endpoint]);\n const endpoint = endpoints.find((candidate) => candidate.name === previous.endpoint);\n return { project: stack.project, service: service?.name, endpoint: endpoint?.name };\n}\n\nfunction moveSelection<T>(items: T[], currentIndex: number, delta: number): T | undefined {\n if (items.length === 0) return undefined;\n const start = currentIndex < 0 ? 0 : currentIndex;\n const index = Math.min(items.length - 1, Math.max(0, start + delta));\n return items[index];\n}\n\n/** Reduce keyboard and stream events without coupling selection logic to React rendering. */\nexport function reduceFleetUiState(state: FleetUiState, action: FleetUiAction): FleetUiState {\n switch (action.type) {\n case \"reconcile\":\n const visibleSnapshot = state.filter === \"\"\n ? action.snapshot\n : { ...action.snapshot, stacks: visibleFleetStacks(action.snapshot, state.filter) };\n return {\n ...state,\n selection: reconcileFleetSelection(state.selection, visibleSnapshot, action.preferredProject),\n };\n case \"move-stack\": {\n const stacks = visibleFleetStacks(action.snapshot, state.filter);\n const currentIndex = stacks.findIndex((stack) => stack.project === state.selection.project);\n const stack = moveSelection(stacks, currentIndex, action.delta);\n return stack === undefined\n ? state\n : {\n ...state,\n selection: {\n project: stack.project,\n service: stack.services[0]?.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"move-service\": {\n const stack = action.snapshot.stacks.find((candidate) => candidate.project === state.selection.project);\n if (stack === undefined) return state;\n const currentIndex = stack.services.findIndex((service) => service.name === state.selection.service);\n const service = moveSelection(stack.services, currentIndex, action.delta);\n return service === undefined\n ? state\n : {\n ...state,\n selection: {\n ...state.selection,\n service: service.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-stack\": {\n const stack = visibleFleetStacks(action.snapshot, state.filter).find(\n (candidate) => candidate.project === action.project,\n );\n return stack === undefined ? state : {\n ...state,\n focus: \"stacks\",\n selection: {\n project: stack.project,\n service: stack.services[0]?.name,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-service\": {\n const stack = action.snapshot.stacks.find(\n (candidate) => candidate.project === state.selection.project,\n );\n if (!stack?.services.some((service) => service.name === action.service)) return state;\n return {\n ...state,\n focus: \"services\",\n selection: {\n ...state.selection,\n service: action.service,\n endpoint: undefined,\n },\n follow: true,\n logOffset: 0,\n unseenLines: 0,\n };\n }\n case \"select-endpoint\": {\n const stack = action.snapshot.stacks.find(\n (candidate) => candidate.project === state.selection.project,\n );\n const service = stack?.services.find((candidate) => candidate.name === action.service);\n if (!service?.endpoints?.some((endpoint) => endpoint.name === action.endpoint)) return state;\n return {\n ...state,\n focus: \"services\",\n selection: { ...state.selection, service: action.service, endpoint: action.endpoint },\n };\n }\n case \"focus\": return { ...state, focus: action.focus };\n case \"layout\": return { ...state, layout: action.layout };\n case \"filter\": {\n if (action.snapshot === undefined) return { ...state, filter: action.filter };\n const visibleSnapshot = {\n ...action.snapshot,\n stacks: visibleFleetStacks(action.snapshot, action.filter),\n };\n return {\n ...state,\n filter: action.filter,\n selection: reconcileFleetSelection(state.selection, visibleSnapshot),\n };\n }\n case \"follow\": return {\n ...state,\n follow: action.follow,\n logOffset: action.follow ? 0 : state.logOffset,\n unseenLines: action.follow ? 0 : state.unseenLines,\n };\n case \"scroll-logs\": return {\n ...state,\n follow: action.delta > 0 ? state.follow : false,\n logOffset: Math.max(0, state.logOffset - action.delta),\n };\n case \"new-lines\": return state.follow\n ? state\n : {\n ...state,\n logOffset: Math.min(action.maxOffset ?? Number.MAX_SAFE_INTEGER, state.logOffset + action.count),\n unseenLines: state.unseenLines + action.count,\n };\n case \"help\": return { ...state, helpOpen: action.open };\n case \"doctor\": return { ...state, doctorOpen: action.open };\n case \"shared\": return { ...state, sharedOpen: action.open, sharedSelection: action.open ? 0 : state.sharedSelection };\n case \"move-shared\": {\n if (action.count <= 0) return { ...state, sharedSelection: 0 };\n const next = Math.max(0, Math.min(action.count - 1, state.sharedSelection + action.delta));\n return { ...state, sharedSelection: next };\n }\n case \"confirm-down\": return {\n ...state,\n confirmDown: action.stack,\n };\n case \"down-pending\": return { ...state, downPending: action.pending };\n }\n}\n",
|
|
122
124
|
"const ESCAPE_CONTROL_SEQUENCE = /\\x1b(?:\\][\\s\\S]*?(?:\\x07|\\x1b\\\\)|[PX^_][\\s\\S]*?\\x1b\\\\|\\[[0-?]*[ -/]*[@-~])/g;\nconst C1_CONTROL_SEQUENCE = /(?:[\\x90\\x98\\x9d\\x9e\\x9f][\\s\\S]*?(?:\\x07|\\x9c)|\\x9b[0-?]*[ -/]*[@-~])/g;\n\n/** Strip terminal control sequences from untrusted stack names and application logs. */\nexport function sanitizeFleetTerminalText(text: string, preserveNewlines = false): string {\n const controls = preserveNewlines\n ? /[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f]/g\n : /[\\x00-\\x1f\\x7f-\\x9f]/g;\n return text\n .replace(ESCAPE_CONTROL_SEQUENCE, \"\")\n .replace(C1_CONTROL_SEQUENCE, \"\")\n .replace(controls, \"\");\n}\n",
|
|
123
125
|
"/** Fixed github-dark-inspired palette for the first Fleet cockpit. */\nexport const fleetTheme = {\n background: \"#0d1117\",\n panel: \"#161b22\",\n panelAlt: \"#21262d\",\n border: \"#30363d\",\n text: \"#c9d1d9\",\n muted: \"#8b949e\",\n accent: \"#58a6ff\",\n healthy: \"#3fb950\",\n warning: \"#d29922\",\n danger: \"#f85149\",\n selected: \"#1f6feb\",\n} as const;\n",
|
|
124
126
|
"export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n",
|
|
@@ -134,13 +136,13 @@
|
|
|
134
136
|
"import type { FleetEndpointView, FleetServiceView, FleetStackView } from \"@hestia/core\";\nimport { padFleetText } from \"../fleet-text.ts\";\nimport { fleetTheme } from \"../fleet-theme.ts\";\nimport { sanitizeFleetTerminalText } from \"../terminal-text.ts\";\n\nfunction serviceColor(service: FleetServiceView): string {\n if (service.state === \"healthy\") return fleetTheme.healthy;\n if (service.state === \"unknown\" || service.state === \"unhealthy\") return fleetTheme.warning;\n return fleetTheme.danger;\n}\n\nfunction endpointReach(endpoint: FleetEndpointView): string {\n return endpoint.localUrl ?? endpoint.publicUrl ?? endpoint.url ?? `${endpoint.host}:${endpoint.port}`;\n}\n\n/** Render workload rows for lifecycle/log selection and child endpoints for reachability actions. */\nexport function ServicePane({\n stack,\n selectedService,\n selectedEndpoint,\n onSelectService,\n onSelectEndpoint,\n}: {\n stack?: FleetStackView;\n selectedService?: string;\n selectedEndpoint?: string;\n onSelectService?: (service: string) => void;\n onSelectEndpoint?: (service: string, endpoint: string) => void;\n}) {\n return (\n <box style={{ height: \"100%\", width: \"100%\", flexDirection: \"column\", border: true, borderColor: fleetTheme.border }}>\n <box style={{ height: 1, paddingLeft: 1, backgroundColor: fleetTheme.panelAlt }}>\n <text fg={fleetTheme.text}>\n {stack === undefined ? \"Workloads\" : `Workloads — ${sanitizeFleetTerminalText(stack.branch)}`}\n </text>\n </box>\n {stack?.services.length ? stack.services.flatMap((service) => {\n const workloadSelected = service.name === selectedService && selectedEndpoint === undefined;\n const endpoints = service.endpoints ?? (service.endpoint === undefined ? [] : [service.endpoint]);\n const workloadRow = (\n <box\n key={`workload:${service.name}`}\n onMouseDown={(event) => {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n onSelectService?.(service.name);\n }}\n style={{\n height: 1,\n paddingLeft: 1,\n paddingRight: 1,\n flexDirection: \"row\",\n backgroundColor: workloadSelected ? fleetTheme.selected : fleetTheme.background,\n }}\n >\n <text fg={workloadSelected ? \"#ffffff\" : serviceColor(service)}>{workloadSelected ? \"▸ \" : \" \"}</text>\n <text fg={workloadSelected ? \"#ffffff\" : fleetTheme.text}>\n {padFleetText(sanitizeFleetTerminalText(service.name), 20)}\n </text>\n <text fg={workloadSelected ? \"#ffffff\" : fleetTheme.muted}>{padFleetText(service.backend, 10)}</text>\n <text fg={workloadSelected ? \"#ffffff\" : serviceColor(service)}>{service.state}</text>\n </box>\n );\n const endpointRows = endpoints.map((endpoint, index) => {\n const endpointSelected = service.name === selectedService && endpoint.name === selectedEndpoint;\n const connector = index === endpoints.length - 1 ? \"└─\" : \"├─\";\n const kind = (endpoint.kind ?? \"http\").toUpperCase();\n const selector = `${endpoint.workload ?? service.name}:${endpoint.binding ?? endpoint.port}`;\n return (\n <box\n key={`endpoint:${service.name}:${endpoint.name}`}\n onMouseDown={(event) => {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n onSelectEndpoint?.(service.name, endpoint.name);\n }}\n style={{\n height: 1,\n paddingLeft: 2,\n paddingRight: 1,\n flexDirection: \"row\",\n backgroundColor: endpointSelected ? fleetTheme.selected : fleetTheme.background,\n }}\n >\n <text fg={endpointSelected ? \"#ffffff\" : fleetTheme.muted}>{endpointSelected ? \"▸ \" : `${connector} `}</text>\n <text fg={endpointSelected ? \"#ffffff\" : fleetTheme.accent}>\n {padFleetText(sanitizeFleetTerminalText(endpoint.name), 18)}\n </text>\n <text fg={endpointSelected ? \"#ffffff\" : fleetTheme.muted}>{padFleetText(kind, 8)}</text>\n <text fg={endpointSelected ? \"#ffffff\" : fleetTheme.muted}>\n {padFleetText(sanitizeFleetTerminalText(selector), 20)}\n </text>\n <text fg={endpointSelected ? \"#ffffff\" : fleetTheme.text}>\n {sanitizeFleetTerminalText(endpointReach(endpoint))}\n </text>\n </box>\n );\n });\n return [workloadRow, ...endpointRows];\n }) : (\n <box style={{ paddingLeft: 1, paddingTop: 1 }}>\n <text fg={fleetTheme.muted}>No workloads recorded</text>\n </box>\n )}\n </box>\n );\n}\n",
|
|
135
137
|
"import type { LogLine } from \"@hestia/core\";\nimport { fitFleetText, padFleetText } from \"../fleet-text.ts\";\nimport { fleetTheme } from \"../fleet-theme.ts\";\n\n/** Render only visible selected-service log rows plus a tiny overscan window. */\nexport function LogPane({\n lines,\n height,\n width,\n offset,\n follow,\n unseen,\n label,\n onScroll,\n}: {\n lines: LogLine[];\n height: number;\n width: number;\n offset: number;\n follow: boolean;\n unseen: number;\n label: string;\n onScroll?: (delta: number) => void;\n}) {\n const viewportRows = Math.max(1, height - 3);\n const end = Math.max(0, lines.length - offset);\n const start = Math.max(0, end - viewportRows - 2);\n const visible = lines.slice(start, end).slice(-viewportRows);\n return (\n <box\n onMouseScroll={(event) => {\n if (event.button !== 4 && event.button !== 5) return;\n event.preventDefault();\n event.stopPropagation();\n onScroll?.(event.button === 4 ? -3 : 3);\n }}\n style={{ height: \"100%\", width: \"100%\", flexDirection: \"column\", border: true, borderColor: fleetTheme.border }}\n >\n <box style={{ height: 1, paddingLeft: 1, paddingRight: 1, flexDirection: \"row\", backgroundColor: fleetTheme.panelAlt }}>\n <text fg={fleetTheme.text}>{padFleetText(`Logs — ${label}`, Math.max(1, width - 24))}</text>\n <text fg={follow ? fleetTheme.healthy : fleetTheme.warning}>\n {follow ? \"following\" : `paused${unseen > 0 ? ` · ${unseen} new` : \"\"}`}\n </text>\n </box>\n {visible.length === 0 ? (\n <box style={{ paddingLeft: 1, paddingTop: 1 }}>\n <text fg={fleetTheme.muted}>No log output yet — service is still being followed.</text>\n </box>\n ) : visible.map((line, index) => (\n <box key={`${start + index}-${line.text}`} style={{ height: 1, paddingLeft: 1 }}>\n <text fg={line.meta ? fleetTheme.warning : fleetTheme.text}>\n {fitFleetText(line.meta ? `[hestia] ${line.text}` : line.text, Math.max(1, width - 4))}\n </text>\n </box>\n ))}\n </box>\n );\n}\n",
|
|
136
138
|
"import type { ReactNode } from \"react\";\nimport { fleetTheme } from \"../fleet-theme.ts\";\n\n/** Centered modal with a mouse-catching backdrop so destructive keys cannot leak through. */\nexport function FleetModal({\n title,\n terminalWidth,\n terminalHeight,\n children,\n}: {\n title: string;\n terminalWidth: number;\n terminalHeight: number;\n children: ReactNode;\n}) {\n const width = Math.min(72, Math.max(30, terminalWidth - 4));\n const height = Math.min(18, Math.max(7, terminalHeight - 4));\n return (\n <>\n <box style={{ position: \"absolute\", top: 0, left: 0, width: terminalWidth, height: terminalHeight, zIndex: 50 }} />\n <box\n style={{\n position: \"absolute\",\n top: Math.max(1, Math.floor((terminalHeight - height) / 2)),\n left: Math.max(1, Math.floor((terminalWidth - width) / 2)),\n width,\n height,\n zIndex: 60,\n border: true,\n borderColor: fleetTheme.accent,\n backgroundColor: fleetTheme.panel,\n flexDirection: \"column\",\n paddingLeft: 1,\n paddingRight: 1,\n paddingTop: 1,\n }}\n >\n <text fg={fleetTheme.accent}>{title}</text>\n <box style={{ height: 1 }} />\n {children}\n </box>\n </>\n );\n}\n",
|
|
137
|
-
"import { useEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport { existsSync } from \"node:fs\";\nimport { useKeyboard, useRenderer, useTerminalDimensions } from \"@opentui/react\";\nimport type { FleetSnapshot, FleetStackView, LogLine, RepoId } from \"@hestia/core\";\nimport type { DoctorRow } from \"@hestia/engine\";\nimport { DaemonFleetSource } from \"./fleet-source.ts\";\nimport {\n createFleetUiState,\n reduceFleetUiState,\n visibleFleetStacks,\n type FleetFocus,\n} from \"./fleet-controller.ts\";\nimport { sanitizeFleetTerminalText } from \"./terminal-text.ts\";\nimport { fleetTheme } from \"./fleet-theme.ts\";\nimport { StackSidebar } from \"./components/StackSidebar.tsx\";\nimport { ServicePane } from \"./components/ServicePane.tsx\";\nimport { LogPane } from \"./components/LogPane.tsx\";\nimport { FleetModal } from \"./components/FleetModal.tsx\";\n\nconst LOG_RING_CAPACITY = 2_000;\nconst EMPTY_CAPACITY = { maxStacks: 0, live: 0, reserved: 0, queued: 0 };\n\nexport interface InvokingRepositoryContext {\n repo: string;\n branch: string;\n worktree: string;\n}\n\n/** Preserve path orientation and basename while fitting narrow terminals. */\nexport function middleTruncateWorktreePath(path: string, width: number): string {\n if (path.length <= width) return path;\n if (width <= 3) return path.slice(0, width);\n const parts = path.split(\"/\");\n const basename = parts.at(-1) || path;\n if (basename.length + 3 >= width) {\n const tail = basename.slice(-Math.max(1, width - 2));\n return `…/${tail}`.slice(0, width);\n }\n const prefixWidth = width - basename.length - 2;\n return `${path.slice(0, prefixWidth)}…/${basename}`;\n}\n\nfunction emptySnapshot(repoId: RepoId): FleetSnapshot {\n return { repoId, observedAt: new Date(0).toISOString(), capacity: EMPTY_CAPACITY, stacks: [], warnings: [] };\n}\n\nfunction isEscape(key: { name: string; sequence?: string }): boolean {\n const name = key.name.toLowerCase();\n return name === \"escape\" || name === \"esc\" || key.sequence === \"\\x1b\";\n}\n\nfunction isFleetKey(\n key: {\n name: string;\n sequence?: string;\n ctrl?: boolean;\n meta?: boolean;\n option?: boolean;\n super?: boolean;\n hyper?: boolean;\n },\n value: string,\n): boolean {\n return !key.ctrl && !key.meta && !key.option && !key.super && !key.hyper &&\n (key.name === value || key.sequence === value);\n}\n\nfunction selectedStack(snapshot: FleetSnapshot, project?: string): FleetStackView | undefined {\n return snapshot.stacks.find((stack) => stack.project === project);\n}\n\nfunction fleetServiceRowCount(stack: FleetStackView | undefined): number {\n return stack?.services.reduce((count, service) =>\n count + 1 + (service.endpoints?.length ?? (service.endpoint === undefined ? 0 : 1)), 0) ?? 0;\n}\n\nfunction selectedFleetEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): FleetStackView[\"services\"][number][\"endpoint\"] {\n const service = stack?.services.find((candidate) => candidate.name === serviceName);\n const endpoints = service?.endpoints ?? (service?.endpoint === undefined ? [] : [service.endpoint]);\n return endpoints.find((endpoint) => endpoint.name === endpointName) ?? endpoints[0];\n}\n\nfunction usableEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): string | undefined {\n const endpoint = selectedFleetEndpoint(stack, serviceName, endpointName);\n if (endpoint === undefined) return undefined;\n return endpoint.localUrl ?? endpoint.publicUrl ?? endpoint.url ?? `${endpoint.host}:${endpoint.port}`;\n}\n\nfunction copyableEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): FleetStackView[\"services\"][number][\"endpoint\"] {\n return selectedFleetEndpoint(stack, serviceName, endpointName);\n}\n\n/** Reset the visible log ring whenever a stack or service incarnation changes. */\nexport function fleetLogSelectionKey(\n stack: FleetStackView | undefined,\n serviceName: string | undefined,\n): string | undefined {\n if (stack === undefined || serviceName === undefined) return undefined;\n const service = stack.services.find((candidate) => candidate.name === serviceName);\n if (service === undefined) return undefined;\n return `${stack.project}\\0${service.name}\\0${stack.createdAt ?? \"\"}\\0${service.publishedPort ?? \"\"}`;\n}\n\nfunction openFleetUrl(value: string): void {\n if (!/^https?:\\/\\//.test(value) || process.env.HESTIA_NO_OPEN) return;\n const command = process.platform === \"darwin\" ? [\"open\", value] : [\"xdg-open\", value];\n try {\n Bun.spawn(command, { stdout: \"ignore\", stderr: \"ignore\" }).unref();\n } catch {\n // The status notice still exposes the URL when no desktop opener exists.\n }\n}\n\n/** Summarize diagnostic rows that do not fit in the fixed-height report. */\nexport function doctorOmissionSummary(rows: DoctorRow[], visibleRows = 10): string | undefined {\n const omitted = rows.slice(visibleRows);\n if (omitted.length === 0) return undefined;\n const errors = omitted.filter((row) => row.level === \"error\").length;\n const warnings = omitted.filter((row) => row.level === \"warn\").length;\n return `… ${omitted.length} more (${errors} errors, ${warnings} warnings)`;\n}\n\n/** Compose the live Fleet panes while keeping transport and selection state in separate seams. */\nexport function FleetApp({\n source,\n preferredProject,\n invokingRepository,\n onQuit,\n}: {\n source: DaemonFleetSource;\n preferredProject: string;\n invokingRepository: InvokingRepositoryContext;\n onQuit: () => void;\n}) {\n const terminal = useTerminalDimensions();\n const renderer = useRenderer();\n const [snapshot, setSnapshot] = useState(() => emptySnapshot(source.repoId));\n const [state, dispatch] = useReducer(reduceFleetUiState, undefined, createFleetUiState);\n const [logs, setLogs] = useState<LogLine[]>([]);\n const [connected, setConnected] = useState(false);\n const [notice, setNotice] = useState(\"connecting to hestiad…\");\n const [doctorRows, setDoctorRows] = useState<DoctorRow[]>([]);\n const [doctorRunning, setDoctorRunning] = useState(false);\n const lastFrameAt = useRef(Date.now());\n const stateRef = useRef(state);\n stateRef.current = state;\n\n useEffect(() => {\n const controller = new AbortController();\n void (async () => {\n for await (const frame of source.fleet(controller.signal)) {\n lastFrameAt.current = Date.now();\n if (frame.type === \"snapshot\") {\n setConnected(true);\n setNotice((current) =>\n current === \"connecting to hestiad…\" ||\n current.startsWith(\"disconnected:\") ||\n current.startsWith(\"hestiad heartbeat\")\n ? \"\"\n : current,\n );\n setSnapshot(frame.snapshot);\n dispatch({ type: \"reconcile\", snapshot: frame.snapshot, preferredProject });\n } else if (frame.sequence === -1) {\n setConnected(false);\n setNotice(frame.at);\n } else {\n setConnected(true);\n }\n }\n })();\n const staleTimer = setInterval(() => {\n if (Date.now() - lastFrameAt.current > 20_000) {\n setConnected(false);\n setNotice(\"hestiad heartbeat is stale; reconnecting…\");\n }\n }, 1_000);\n return () => {\n clearInterval(staleTimer);\n controller.abort();\n };\n }, [preferredProject, source]);\n\n const selectedLogStack = selectedStack(snapshot, state.selection.project);\n const selectionKey = fleetLogSelectionKey(selectedLogStack, state.selection.service);\n useEffect(() => {\n setLogs([]);\n if (selectionKey === undefined) return;\n const [project, service] = selectionKey.split(\"\\0\") as [string, string];\n const controller = new AbortController();\n void (async () => {\n for await (const line of source.logs(project, service, controller.signal)) {\n const sanitized: LogLine = {\n ...line,\n project: sanitizeFleetTerminalText(line.project),\n service: sanitizeFleetTerminalText(line.service),\n text: sanitizeFleetTerminalText(line.text),\n };\n setLogs((current) => [...current, sanitized].slice(-LOG_RING_CAPACITY));\n dispatch({ type: \"new-lines\", count: 1, maxOffset: LOG_RING_CAPACITY - 1 });\n }\n })();\n return () => controller.abort();\n }, [selectionKey, source]);\n\n const stacks = useMemo(\n () => visibleFleetStacks(snapshot, state.filter),\n [snapshot, state.filter],\n );\n const stack = selectedStack(snapshot, state.selection.project);\n const context = {\n repo: sanitizeFleetTerminalText(stack?.repo ?? invokingRepository.repo),\n branch: sanitizeFleetTerminalText(stack?.branch ?? invokingRepository.branch),\n worktree: sanitizeFleetTerminalText(stack?.worktree ?? invokingRepository.worktree),\n project: sanitizeFleetTerminalText(stack?.project ?? \"—\"),\n };\n const endpointView = copyableEndpoint(stack, state.selection.service, state.selection.endpoint);\n const endpoint = usableEndpoint(stack, state.selection.service, state.selection.endpoint);\n const effectiveLayout = state.layout === \"auto\"\n ? terminal.width >= 110 ? \"split\" : \"stack\"\n : state.layout;\n const focusOrder: FleetFocus[] = [\"stacks\", \"services\", \"logs\"];\n\n useEffect(() => {\n const confirmed = state.confirmDown;\n const currentIncarnation = snapshot.stacks.find(\n (candidate) => candidate.project === confirmed?.project,\n );\n if (\n confirmed !== undefined &&\n !state.downPending &&\n (\n currentIncarnation?.repoId !== confirmed.repoId ||\n currentIncarnation.worktree !== confirmed.worktree ||\n currentIncarnation.createdAt !== confirmed.createdAt\n )\n ) {\n dispatch({ type: \"confirm-down\" });\n setNotice(`${confirmed.project} changed; down cancelled`);\n }\n }, [snapshot, state.confirmDown, state.downPending]);\n\n useKeyboard((key) => {\n const current = stateRef.current;\n if (current.confirmDown !== undefined) {\n key.preventDefault();\n key.stopPropagation();\n if (isEscape(key) && !current.downPending) {\n dispatch({ type: \"confirm-down\" });\n } else if (\n !current.downPending &&\n (isFleetKey(key, \"d\") || key.name === \"return\" || key.name === \"enter\")\n ) {\n const confirmed = current.confirmDown;\n const currentIncarnation = snapshot.stacks.find(\n (candidate) => candidate.project === confirmed.project,\n );\n if (\n currentIncarnation?.repoId !== confirmed.repoId ||\n currentIncarnation.worktree !== confirmed.worktree ||\n currentIncarnation.createdAt !== confirmed.createdAt\n ) {\n dispatch({ type: \"confirm-down\" });\n setNotice(`${confirmed.project} changed; down cancelled`);\n return;\n }\n const project = confirmed.project;\n dispatch({ type: \"down-pending\", pending: true });\n setNotice(`tearing down ${project}…`);\n void source.down(confirmed).then(() => {\n dispatch({ type: \"down-pending\", pending: false });\n dispatch({ type: \"confirm-down\" });\n setNotice(`${project} is down; named volumes retained`);\n }).catch((error) => {\n dispatch({ type: \"down-pending\", pending: false });\n setNotice(`down failed: ${(error as Error).message}`);\n });\n }\n return;\n }\n if (current.helpOpen || current.doctorOpen) {\n key.preventDefault();\n key.stopPropagation();\n if (isEscape(key) || isFleetKey(key, \"?\")) {\n dispatch({ type: current.helpOpen ? \"help\" : \"doctor\", open: false });\n }\n return;\n }\n if (current.focus === \"filter\") {\n if (isEscape(key) || key.name === \"return\" || key.name === \"enter\") {\n key.preventDefault();\n key.stopPropagation();\n dispatch({ type: \"focus\", focus: \"stacks\" });\n }\n return;\n }\n\n if (isFleetKey(key, \"q\")) return onQuit();\n if (isFleetKey(key, \"?\")) return dispatch({ type: \"help\", open: true });\n if (isFleetKey(key, \"/\")) return dispatch({ type: \"focus\", focus: \"filter\" });\n if (isFleetKey(key, \"0\")) return dispatch({ type: \"layout\", layout: \"auto\" });\n if (isFleetKey(key, \"1\")) return dispatch({ type: \"layout\", layout: \"split\" });\n if (isFleetKey(key, \"2\")) return dispatch({ type: \"layout\", layout: \"stack\" });\n if (key.name === \"tab\") {\n const index = focusOrder.indexOf(current.focus);\n const delta = key.shift ? -1 : 1;\n const next = (index + delta + focusOrder.length) % focusOrder.length;\n return dispatch({ type: \"focus\", focus: focusOrder[next]! });\n }\n if (isFleetKey(key, \"[\")) return dispatch({ type: \"move-service\", delta: -1, snapshot });\n if (isFleetKey(key, \"]\")) return dispatch({ type: \"move-service\", delta: 1, snapshot });\n if ((isFleetKey(key, \"g\") && key.shift) || key.sequence === \"G\") {\n return dispatch({ type: \"follow\", follow: true });\n }\n if (key.sequence === \"D\" || (isFleetKey(key, \"d\") && key.shift)) {\n if (doctorRunning) return;\n dispatch({ type: \"doctor\", open: true });\n setDoctorRunning(true);\n setDoctorRows([]);\n const worktree = stack !== undefined && existsSync(stack.worktree)\n ? stack.worktree\n : process.cwd();\n void source.diagnose(worktree).then(setDoctorRows).catch((error) => {\n setNotice(`doctor failed: ${(error as Error).message}`);\n }).finally(() => setDoctorRunning(false));\n return;\n }\n if (isFleetKey(key, \"d\")) {\n if (stack?.phase === \"queued\" || stack?.phase === \"reserved\") {\n setNotice(`${stack.project} is ${stack.phase}; down is available after startup begins`);\n } else if (stack !== undefined) {\n dispatch({ type: \"confirm-down\", stack });\n }\n return;\n }\n if (isFleetKey(key, \"o\") && endpoint !== undefined) {\n openFleetUrl(endpoint);\n setNotice(endpoint);\n return;\n }\n if (isFleetKey(key, \"y\") && endpoint !== undefined) {\n const copied = renderer.copyToClipboardOSC52(endpoint);\n setNotice(copied ? `copied ${endpoint}` : `copy unavailable: ${endpoint}`);\n return;\n }\n const copySurfaceRequested = [\"c\", \"l\", \"p\"].some((name) => isFleetKey(key, name));\n const surface = isFleetKey(key, \"c\")\n ? endpointView?.url\n : isFleetKey(key, \"l\")\n ? endpointView?.localUrl\n : isFleetKey(key, \"p\")\n ? endpointView?.publicUrl\n : undefined;\n if (surface !== undefined) {\n const copied = renderer.copyToClipboardOSC52(surface);\n setNotice(copied ? `copied ${surface}` : `copy unavailable: ${surface}`);\n return;\n }\n if (copySurfaceRequested) {\n setNotice(\"selected URL surface is unavailable\");\n return;\n }\n const delta = key.name === \"down\" || isFleetKey(key, \"j\")\n ? 1\n : key.name === \"up\" || isFleetKey(key, \"k\")\n ? -1\n : 0;\n if (delta === 0) return;\n if (current.focus === \"stacks\") dispatch({ type: \"move-stack\", delta, snapshot });\n else if (current.focus === \"services\") dispatch({ type: \"move-service\", delta, snapshot });\n else dispatch({ type: \"scroll-logs\", delta });\n });\n\n const capacity = snapshot.capacity;\n const status = connected\n ? `${capacity.live}/${capacity.maxStacks} live · ${capacity.reserved} reserved · ${capacity.queued} queued`\n : \"disconnected\";\n const logLabel = state.selection.service ?? \"select a service\";\n\n return (\n <box style={{ width: \"100%\", height: \"100%\", flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <box style={{ height: 1, paddingLeft: 1, paddingRight: 1, flexDirection: \"row\", backgroundColor: fleetTheme.panelAlt }}>\n <text fg={fleetTheme.accent}>Hestia Fleet — {context.repo}</text>\n <text fg={fleetTheme.muted}> {status}</text>\n </box>\n\n {terminal.width >= 90 ? (\n <box style={{ height: 4, paddingLeft: 1, flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <text fg={fleetTheme.text}>Repository {context.repo}</text>\n <text fg={fleetTheme.text}>Branch {context.branch}</text>\n <text fg={fleetTheme.text}>Worktree {middleTruncateWorktreePath(context.worktree, Math.max(16, terminal.width - 13))}</text>\n <text fg={fleetTheme.muted}>Project {context.project}</text>\n </box>\n ) : (\n <box style={{ height: 2, paddingLeft: 1, flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <text fg={fleetTheme.text}>{context.repo} · {context.branch} · {context.project}</text>\n <text fg={fleetTheme.muted}>worktree {middleTruncateWorktreePath(context.worktree, Math.max(12, terminal.width - 10))}</text>\n </box>\n )}\n\n {effectiveLayout === \"split\" ? (\n <box style={{ flexGrow: 1, flexDirection: \"row\" }}>\n <StackSidebar\n stacks={stacks}\n selectedProject={state.selection.project}\n width={Math.max(28, Math.floor(terminal.width * 0.28))}\n onSelectProject={(project) => dispatch({ type: \"select-stack\", project, snapshot })}\n />\n <box style={{ flexGrow: 1, flexDirection: \"column\" }}>\n <box style={{ height: Math.min(12, Math.max(5, fleetServiceRowCount(stack) + 2)) }}>\n <ServicePane\n stack={stack}\n selectedService={state.selection.service}\n selectedEndpoint={state.selection.endpoint}\n onSelectService={(service) => dispatch({ type: \"select-service\", service, snapshot })}\n onSelectEndpoint={(service, endpoint) => dispatch({ type: \"select-endpoint\", service, endpoint, snapshot })}\n />\n </box>\n <box style={{ flexGrow: 1 }}>\n <LogPane lines={logs} height={Math.max(5, terminal.height - 13)} width={Math.max(20, Math.floor(terminal.width * 0.72))} offset={state.logOffset} follow={state.follow} unseen={state.unseenLines} label={logLabel} onScroll={(delta) => dispatch({ type: \"scroll-logs\", delta })} />\n </box>\n </box>\n </box>\n ) : (\n <box style={{ flexGrow: 1, flexDirection: \"column\" }}>\n <box style={{ height: Math.min(7, Math.max(4, stacks.length + 2)) }}>\n <StackSidebar\n stacks={stacks}\n selectedProject={state.selection.project}\n width={terminal.width}\n onSelectProject={(project) => dispatch({ type: \"select-stack\", project, snapshot })}\n />\n </box>\n <box style={{ height: Math.min(10, Math.max(4, fleetServiceRowCount(stack) + 2)) }}>\n <ServicePane\n stack={stack}\n selectedService={state.selection.service}\n selectedEndpoint={state.selection.endpoint}\n onSelectService={(service) => dispatch({ type: \"select-service\", service, snapshot })}\n onSelectEndpoint={(service, endpoint) => dispatch({ type: \"select-endpoint\", service, endpoint, snapshot })}\n />\n </box>\n <box style={{ flexGrow: 1 }}>\n <LogPane lines={logs} height={Math.max(5, terminal.height - 17)} width={terminal.width} offset={state.logOffset} follow={state.follow} unseen={state.unseenLines} label={logLabel} onScroll={(delta) => dispatch({ type: \"scroll-logs\", delta })} />\n </box>\n </box>\n )}\n\n <box style={{ height: 1, paddingLeft: 1, paddingRight: 1, flexDirection: \"row\", backgroundColor: fleetTheme.panelAlt }}>\n {state.focus === \"filter\" ? (\n <>\n <text fg={fleetTheme.accent}>filter: </text>\n <input\n width={Math.max(12, terminal.width - 10)}\n value={state.filter}\n focused={true}\n placeholder=\"branch, project, or service\"\n onInput={(value) => dispatch({ type: \"filter\", filter: value, snapshot })}\n onSubmit={() => dispatch({ type: \"focus\", focus: \"stacks\" })}\n />\n </>\n ) : (\n <text fg={notice ? fleetTheme.warning : fleetTheme.muted}>\n {notice || \"click rows · wheel logs · j/k navigate · [/] service · / filter · d down · ? help · q quit\"}\n </text>\n )}\n </box>\n\n {state.helpOpen ? (\n <FleetModal title=\"Fleet help\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n <text fg={fleetTheme.text}>j/k or arrows navigate focused pane</text>\n <text fg={fleetTheme.text}>mouse click stacks/services · wheel scroll logs</text>\n <text fg={fleetTheme.text}>Tab / Shift-Tab change pane</text>\n <text fg={fleetTheme.text}>[ / ] previous / next service</text>\n <text fg={fleetTheme.text}>/ filter · G follow logs · 0/1/2 layout</text>\n <text fg={fleetTheme.text}>o open · y primary · c direct · l local · p public</text>\n <text fg={fleetTheme.text}>D doctor</text>\n <text fg={fleetTheme.danger}>d confirmed down (named volumes retained)</text>\n <text fg={fleetTheme.muted}>Esc closes this dialog</text>\n </FleetModal>\n ) : null}\n\n {state.doctorOpen ? (\n <FleetModal title=\"hestia doctor\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n {doctorRunning ? <text fg={fleetTheme.muted}>Running diagnostics…</text> : doctorRows.slice(0, 10).map((row) => (\n <text key={row.check} fg={row.level === \"error\" ? fleetTheme.danger : row.level === \"warn\" ? fleetTheme.warning : fleetTheme.text}>\n {`${row.level === \"ok\" ? \"✓\" : row.level === \"error\" ? \"✗\" : \"!\"} ${sanitizeFleetTerminalText(row.check)} — ${sanitizeFleetTerminalText(row.detail)}`}\n </text>\n ))}\n {!doctorRunning && doctorOmissionSummary(doctorRows) !== undefined ? (\n <text fg={fleetTheme.warning}>{doctorOmissionSummary(doctorRows)}</text>\n ) : null}\n <text fg={fleetTheme.muted}>Esc closes this report</text>\n </FleetModal>\n ) : null}\n\n {state.confirmDown !== undefined ? (\n <FleetModal title=\"Confirm stack down\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n <text fg={fleetTheme.text}>Branch: {sanitizeFleetTerminalText(state.confirmDown.branch)}</text>\n <text fg={fleetTheme.text}>Repository: {sanitizeFleetTerminalText(state.confirmDown.repo)}</text>\n <text fg={fleetTheme.text}>Worktree: {sanitizeFleetTerminalText(state.confirmDown.worktree)}</text>\n <text fg={fleetTheme.text}>Project: {sanitizeFleetTerminalText(state.confirmDown.project)}</text>\n <box style={{ height: 1 }} />\n <text fg={fleetTheme.warning}>Named volumes are retained.</text>\n <text fg={fleetTheme.danger}>\n {state.downPending ? \"Tearing down…\" : \"Press Enter or d to confirm; Esc cancels.\"}\n </text>\n </FleetModal>\n ) : null}\n </box>\n );\n}\n",
|
|
139
|
+
"import { useEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport { existsSync } from \"node:fs\";\nimport { useKeyboard, useRenderer, useTerminalDimensions } from \"@opentui/react\";\nimport type { FleetSnapshot, FleetStackView, LogLine, RepoId } from \"@hestia/core\";\nimport type { DoctorRow } from \"@hestia/engine\";\nimport { DaemonFleetSource } from \"./fleet-source.ts\";\nimport {\n createFleetUiState,\n reduceFleetUiState,\n visibleFleetStacks,\n type FleetFocus,\n} from \"./fleet-controller.ts\";\nimport { sanitizeFleetTerminalText } from \"./terminal-text.ts\";\nimport { fleetTheme } from \"./fleet-theme.ts\";\nimport { StackSidebar } from \"./components/StackSidebar.tsx\";\nimport { ServicePane } from \"./components/ServicePane.tsx\";\nimport { LogPane } from \"./components/LogPane.tsx\";\nimport { FleetModal } from \"./components/FleetModal.tsx\";\n\nconst LOG_RING_CAPACITY = 2_000;\nconst EMPTY_CAPACITY = { maxStacks: 0, live: 0, reserved: 0, queued: 0 };\n\nexport interface InvokingRepositoryContext {\n repo: string;\n branch: string;\n worktree: string;\n}\n\n/** Preserve path orientation and basename while fitting narrow terminals. */\nexport function middleTruncateWorktreePath(path: string, width: number): string {\n if (path.length <= width) return path;\n if (width <= 3) return path.slice(0, width);\n const parts = path.split(\"/\");\n const basename = parts.at(-1) || path;\n if (basename.length + 3 >= width) {\n const tail = basename.slice(-Math.max(1, width - 2));\n return `…/${tail}`.slice(0, width);\n }\n const prefixWidth = width - basename.length - 2;\n return `${path.slice(0, prefixWidth)}…/${basename}`;\n}\n\nfunction emptySnapshot(repoId: RepoId): FleetSnapshot {\n return { repoId, observedAt: new Date(0).toISOString(), capacity: EMPTY_CAPACITY, stacks: [], shared: [], warnings: [] };\n}\n\nfunction isEscape(key: { name: string; sequence?: string }): boolean {\n const name = key.name.toLowerCase();\n return name === \"escape\" || name === \"esc\" || key.sequence === \"\\x1b\";\n}\n\nfunction isFleetKey(\n key: {\n name: string;\n sequence?: string;\n ctrl?: boolean;\n meta?: boolean;\n option?: boolean;\n super?: boolean;\n hyper?: boolean;\n },\n value: string,\n): boolean {\n return !key.ctrl && !key.meta && !key.option && !key.super && !key.hyper &&\n (key.name === value || key.sequence === value);\n}\n\nfunction selectedStack(snapshot: FleetSnapshot, project?: string): FleetStackView | undefined {\n return snapshot.stacks.find((stack) => stack.project === project);\n}\n\nfunction fleetServiceRowCount(stack: FleetStackView | undefined): number {\n return stack?.services.reduce((count, service) =>\n count + 1 + (service.endpoints?.length ?? (service.endpoint === undefined ? 0 : 1)), 0) ?? 0;\n}\n\nfunction selectedFleetEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): FleetStackView[\"services\"][number][\"endpoint\"] {\n const service = stack?.services.find((candidate) => candidate.name === serviceName);\n const endpoints = service?.endpoints ?? (service?.endpoint === undefined ? [] : [service.endpoint]);\n return endpoints.find((endpoint) => endpoint.name === endpointName) ?? endpoints[0];\n}\n\nfunction usableEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): string | undefined {\n const endpoint = selectedFleetEndpoint(stack, serviceName, endpointName);\n if (endpoint === undefined) return undefined;\n return endpoint.localUrl ?? endpoint.publicUrl ?? endpoint.url ?? `${endpoint.host}:${endpoint.port}`;\n}\n\nfunction copyableEndpoint(\n stack: FleetStackView | undefined,\n serviceName?: string,\n endpointName?: string,\n): FleetStackView[\"services\"][number][\"endpoint\"] {\n return selectedFleetEndpoint(stack, serviceName, endpointName);\n}\n\n/** Reset the visible log ring whenever a stack or service incarnation changes. */\nexport function fleetLogSelectionKey(\n stack: FleetStackView | undefined,\n serviceName: string | undefined,\n): string | undefined {\n if (stack === undefined || serviceName === undefined) return undefined;\n const service = stack.services.find((candidate) => candidate.name === serviceName);\n if (service === undefined) return undefined;\n return `${stack.project}\\0${service.name}\\0${stack.createdAt ?? \"\"}\\0${service.publishedPort ?? \"\"}`;\n}\n\nfunction openFleetUrl(value: string): void {\n if (!/^https?:\\/\\//.test(value) || process.env.HESTIA_NO_OPEN) return;\n const command = process.platform === \"darwin\" ? [\"open\", value] : [\"xdg-open\", value];\n try {\n Bun.spawn(command, { stdout: \"ignore\", stderr: \"ignore\" }).unref();\n } catch {\n // The status notice still exposes the URL when no desktop opener exists.\n }\n}\n\n/** Summarize diagnostic rows that do not fit in the fixed-height report. */\nexport function doctorOmissionSummary(rows: DoctorRow[], visibleRows = 10): string | undefined {\n const omitted = rows.slice(visibleRows);\n if (omitted.length === 0) return undefined;\n const errors = omitted.filter((row) => row.level === \"error\").length;\n const warnings = omitted.filter((row) => row.level === \"warn\").length;\n return `… ${omitted.length} more (${errors} errors, ${warnings} warnings)`;\n}\n\n/** Compose the live Fleet panes while keeping transport and selection state in separate seams. */\nexport function FleetApp({\n source,\n preferredProject,\n invokingRepository,\n onQuit,\n}: {\n source: DaemonFleetSource;\n preferredProject: string;\n invokingRepository: InvokingRepositoryContext;\n onQuit: () => void;\n}) {\n const terminal = useTerminalDimensions();\n const renderer = useRenderer();\n const [snapshot, setSnapshot] = useState(() => emptySnapshot(source.repoId));\n const [state, dispatch] = useReducer(reduceFleetUiState, undefined, createFleetUiState);\n const [logs, setLogs] = useState<LogLine[]>([]);\n const [connected, setConnected] = useState(false);\n const [notice, setNotice] = useState(\"connecting to hestiad…\");\n const [doctorRows, setDoctorRows] = useState<DoctorRow[]>([]);\n const [doctorRunning, setDoctorRunning] = useState(false);\n const [sharedBusy, setSharedBusy] = useState(false);\n const lastFrameAt = useRef(Date.now());\n const stateRef = useRef(state);\n stateRef.current = state;\n\n useEffect(() => {\n const controller = new AbortController();\n void (async () => {\n for await (const frame of source.fleet(controller.signal)) {\n lastFrameAt.current = Date.now();\n if (frame.type === \"snapshot\") {\n setConnected(true);\n setNotice((current) =>\n current === \"connecting to hestiad…\" ||\n current.startsWith(\"disconnected:\") ||\n current.startsWith(\"hestiad heartbeat\")\n ? \"\"\n : current,\n );\n setSnapshot(frame.snapshot);\n dispatch({ type: \"reconcile\", snapshot: frame.snapshot, preferredProject });\n } else if (frame.sequence === -1) {\n setConnected(false);\n setNotice(frame.at);\n } else {\n setConnected(true);\n }\n }\n })();\n const staleTimer = setInterval(() => {\n if (Date.now() - lastFrameAt.current > 20_000) {\n setConnected(false);\n setNotice(\"hestiad heartbeat is stale; reconnecting…\");\n }\n }, 1_000);\n return () => {\n clearInterval(staleTimer);\n controller.abort();\n };\n }, [preferredProject, source]);\n\n const selectedLogStack = selectedStack(snapshot, state.selection.project);\n const selectionKey = fleetLogSelectionKey(selectedLogStack, state.selection.service);\n useEffect(() => {\n setLogs([]);\n if (selectionKey === undefined) return;\n const [project, service] = selectionKey.split(\"\\0\") as [string, string];\n const controller = new AbortController();\n void (async () => {\n for await (const line of source.logs(project, service, controller.signal)) {\n const sanitized: LogLine = {\n ...line,\n project: sanitizeFleetTerminalText(line.project),\n service: sanitizeFleetTerminalText(line.service),\n text: sanitizeFleetTerminalText(line.text),\n };\n setLogs((current) => [...current, sanitized].slice(-LOG_RING_CAPACITY));\n dispatch({ type: \"new-lines\", count: 1, maxOffset: LOG_RING_CAPACITY - 1 });\n }\n })();\n return () => controller.abort();\n }, [selectionKey, source]);\n\n const stacks = useMemo(\n () => visibleFleetStacks(snapshot, state.filter),\n [snapshot, state.filter],\n );\n const stack = selectedStack(snapshot, state.selection.project);\n const context = {\n repo: sanitizeFleetTerminalText(stack?.repo ?? invokingRepository.repo),\n branch: sanitizeFleetTerminalText(stack?.branch ?? invokingRepository.branch),\n worktree: sanitizeFleetTerminalText(stack?.worktree ?? invokingRepository.worktree),\n project: sanitizeFleetTerminalText(stack?.project ?? \"—\"),\n };\n const endpointView = copyableEndpoint(stack, state.selection.service, state.selection.endpoint);\n const endpoint = usableEndpoint(stack, state.selection.service, state.selection.endpoint);\n const effectiveLayout = state.layout === \"auto\"\n ? terminal.width >= 110 ? \"split\" : \"stack\"\n : state.layout;\n const focusOrder: FleetFocus[] = [\"stacks\", \"services\", \"logs\"];\n\n useEffect(() => {\n const confirmed = state.confirmDown;\n const currentIncarnation = snapshot.stacks.find(\n (candidate) => candidate.project === confirmed?.project,\n );\n if (\n confirmed !== undefined &&\n !state.downPending &&\n (\n currentIncarnation?.repoId !== confirmed.repoId ||\n currentIncarnation.worktree !== confirmed.worktree ||\n currentIncarnation.createdAt !== confirmed.createdAt\n )\n ) {\n dispatch({ type: \"confirm-down\" });\n setNotice(`${confirmed.project} changed; down cancelled`);\n }\n }, [snapshot, state.confirmDown, state.downPending]);\n\n useKeyboard((key) => {\n const current = stateRef.current;\n if (current.confirmDown !== undefined) {\n key.preventDefault();\n key.stopPropagation();\n if (isEscape(key) && !current.downPending) {\n dispatch({ type: \"confirm-down\" });\n } else if (\n !current.downPending &&\n (isFleetKey(key, \"d\") || key.name === \"return\" || key.name === \"enter\")\n ) {\n const confirmed = current.confirmDown;\n const currentIncarnation = snapshot.stacks.find(\n (candidate) => candidate.project === confirmed.project,\n );\n if (\n currentIncarnation?.repoId !== confirmed.repoId ||\n currentIncarnation.worktree !== confirmed.worktree ||\n currentIncarnation.createdAt !== confirmed.createdAt\n ) {\n dispatch({ type: \"confirm-down\" });\n setNotice(`${confirmed.project} changed; down cancelled`);\n return;\n }\n const project = confirmed.project;\n dispatch({ type: \"down-pending\", pending: true });\n setNotice(`tearing down ${project}…`);\n void source.down(confirmed).then(() => {\n dispatch({ type: \"down-pending\", pending: false });\n dispatch({ type: \"confirm-down\" });\n setNotice(`${project} is down; named volumes retained`);\n }).catch((error) => {\n dispatch({ type: \"down-pending\", pending: false });\n setNotice(`down failed: ${(error as Error).message}`);\n });\n }\n return;\n }\n if (current.helpOpen || current.doctorOpen) {\n key.preventDefault();\n key.stopPropagation();\n if (isEscape(key) || isFleetKey(key, \"?\")) {\n dispatch({ type: current.helpOpen ? \"help\" : \"doctor\", open: false });\n }\n return;\n }\n if (current.sharedOpen) {\n key.preventDefault();\n key.stopPropagation();\n if (isEscape(key) || isFleetKey(key, \"s\")) return dispatch({ type: \"shared\", open: false });\n const list = snapshot.shared;\n if (list.length === 0) return;\n if (key.name === \"down\" || isFleetKey(key, \"j\")) return dispatch({ type: \"move-shared\", delta: 1, count: list.length });\n if (key.name === \"up\" || isFleetKey(key, \"k\")) return dispatch({ type: \"move-shared\", delta: -1, count: list.length });\n const selected = list[Math.min(current.sharedSelection, list.length - 1)];\n if (selected === undefined || sharedBusy) return;\n const runShared = (label: string, action: Promise<void>): void => {\n setSharedBusy(true);\n setNotice(`${label} ${selected.name}…`);\n void action\n .then(() => setNotice(`${label} ${selected.name}: done`))\n .catch((error) => setNotice(`${label} ${selected.name} failed: ${(error as Error).message}`))\n .finally(() => setSharedBusy(false));\n };\n // allow/deny/release act AS the holder (must be one of this repo's stacks).\n if (isFleetKey(key, \"a\") || isFleetKey(key, \"x\") || isFleetKey(key, \"r\")) {\n if (selected.holder?.mine !== true) {\n setNotice(`this worktree does not hold ${selected.name}`);\n return;\n }\n const worktree = selected.holder.worktree;\n if (isFleetKey(key, \"a\")) runShared(\"allowing\", source.allowShared(worktree, selected.name));\n else if (isFleetKey(key, \"x\")) runShared(\"denying\", source.denyShared(worktree, selected.name));\n else runShared(\"releasing\", source.releaseShared(worktree, selected.name));\n return;\n }\n // claim acts AS the currently-selected stack in the fleet list.\n if (isFleetKey(key, \"c\")) {\n const acting = selectedStack(snapshot, current.selection.project);\n if (acting === undefined) {\n setNotice(\"select a stack (in the fleet list) to claim as\");\n return;\n }\n if (selected.holder?.project === acting.project) {\n setNotice(`${acting.project} already holds ${selected.name}`);\n return;\n }\n runShared(`claiming as ${acting.project},`, source.claimShared(acting.worktree, selected.name));\n return;\n }\n return;\n }\n if (current.focus === \"filter\") {\n if (isEscape(key) || key.name === \"return\" || key.name === \"enter\") {\n key.preventDefault();\n key.stopPropagation();\n dispatch({ type: \"focus\", focus: \"stacks\" });\n }\n return;\n }\n\n if (isFleetKey(key, \"q\")) return onQuit();\n if (isFleetKey(key, \"?\")) return dispatch({ type: \"help\", open: true });\n if (isFleetKey(key, \"s\")) return dispatch({ type: \"shared\", open: true });\n if (isFleetKey(key, \"/\")) return dispatch({ type: \"focus\", focus: \"filter\" });\n if (isFleetKey(key, \"0\")) return dispatch({ type: \"layout\", layout: \"auto\" });\n if (isFleetKey(key, \"1\")) return dispatch({ type: \"layout\", layout: \"split\" });\n if (isFleetKey(key, \"2\")) return dispatch({ type: \"layout\", layout: \"stack\" });\n if (key.name === \"tab\") {\n const index = focusOrder.indexOf(current.focus);\n const delta = key.shift ? -1 : 1;\n const next = (index + delta + focusOrder.length) % focusOrder.length;\n return dispatch({ type: \"focus\", focus: focusOrder[next]! });\n }\n if (isFleetKey(key, \"[\")) return dispatch({ type: \"move-service\", delta: -1, snapshot });\n if (isFleetKey(key, \"]\")) return dispatch({ type: \"move-service\", delta: 1, snapshot });\n if ((isFleetKey(key, \"g\") && key.shift) || key.sequence === \"G\") {\n return dispatch({ type: \"follow\", follow: true });\n }\n if (key.sequence === \"D\" || (isFleetKey(key, \"d\") && key.shift)) {\n if (doctorRunning) return;\n dispatch({ type: \"doctor\", open: true });\n setDoctorRunning(true);\n setDoctorRows([]);\n const worktree = stack !== undefined && existsSync(stack.worktree)\n ? stack.worktree\n : process.cwd();\n void source.diagnose(worktree).then(setDoctorRows).catch((error) => {\n setNotice(`doctor failed: ${(error as Error).message}`);\n }).finally(() => setDoctorRunning(false));\n return;\n }\n if (isFleetKey(key, \"d\")) {\n if (stack?.phase === \"queued\" || stack?.phase === \"reserved\") {\n setNotice(`${stack.project} is ${stack.phase}; down is available after startup begins`);\n } else if (stack !== undefined) {\n dispatch({ type: \"confirm-down\", stack });\n }\n return;\n }\n if (isFleetKey(key, \"o\") && endpoint !== undefined) {\n openFleetUrl(endpoint);\n setNotice(endpoint);\n return;\n }\n if (isFleetKey(key, \"y\") && endpoint !== undefined) {\n const copied = renderer.copyToClipboardOSC52(endpoint);\n setNotice(copied ? `copied ${endpoint}` : `copy unavailable: ${endpoint}`);\n return;\n }\n const copySurfaceRequested = [\"c\", \"l\", \"p\"].some((name) => isFleetKey(key, name));\n const surface = isFleetKey(key, \"c\")\n ? endpointView?.url\n : isFleetKey(key, \"l\")\n ? endpointView?.localUrl\n : isFleetKey(key, \"p\")\n ? endpointView?.publicUrl\n : undefined;\n if (surface !== undefined) {\n const copied = renderer.copyToClipboardOSC52(surface);\n setNotice(copied ? `copied ${surface}` : `copy unavailable: ${surface}`);\n return;\n }\n if (copySurfaceRequested) {\n setNotice(\"selected URL surface is unavailable\");\n return;\n }\n const delta = key.name === \"down\" || isFleetKey(key, \"j\")\n ? 1\n : key.name === \"up\" || isFleetKey(key, \"k\")\n ? -1\n : 0;\n if (delta === 0) return;\n if (current.focus === \"stacks\") dispatch({ type: \"move-stack\", delta, snapshot });\n else if (current.focus === \"services\") dispatch({ type: \"move-service\", delta, snapshot });\n else dispatch({ type: \"scroll-logs\", delta });\n });\n\n const capacity = snapshot.capacity;\n const status = connected\n ? `${capacity.live}/${capacity.maxStacks} live · ${capacity.reserved} reserved · ${capacity.queued} queued`\n : \"disconnected\";\n const logLabel = state.selection.service ?? \"select a service\";\n\n return (\n <box style={{ width: \"100%\", height: \"100%\", flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <box style={{ height: 1, paddingLeft: 1, paddingRight: 1, flexDirection: \"row\", backgroundColor: fleetTheme.panelAlt }}>\n <text fg={fleetTheme.accent}>Hestia Fleet — {context.repo}</text>\n <text fg={fleetTheme.muted}> {status}</text>\n </box>\n\n {terminal.width >= 90 ? (\n <box style={{ height: 4, paddingLeft: 1, flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <text fg={fleetTheme.text}>Repository {context.repo}</text>\n <text fg={fleetTheme.text}>Branch {context.branch}</text>\n <text fg={fleetTheme.text}>Worktree {middleTruncateWorktreePath(context.worktree, Math.max(16, terminal.width - 13))}</text>\n <text fg={fleetTheme.muted}>Project {context.project}</text>\n </box>\n ) : (\n <box style={{ height: 2, paddingLeft: 1, flexDirection: \"column\", backgroundColor: fleetTheme.background }}>\n <text fg={fleetTheme.text}>{context.repo} · {context.branch} · {context.project}</text>\n <text fg={fleetTheme.muted}>worktree {middleTruncateWorktreePath(context.worktree, Math.max(12, terminal.width - 10))}</text>\n </box>\n )}\n\n {effectiveLayout === \"split\" ? (\n <box style={{ flexGrow: 1, flexDirection: \"row\" }}>\n <StackSidebar\n stacks={stacks}\n selectedProject={state.selection.project}\n width={Math.max(28, Math.floor(terminal.width * 0.28))}\n onSelectProject={(project) => dispatch({ type: \"select-stack\", project, snapshot })}\n />\n <box style={{ flexGrow: 1, flexDirection: \"column\" }}>\n <box style={{ height: Math.min(12, Math.max(5, fleetServiceRowCount(stack) + 2)) }}>\n <ServicePane\n stack={stack}\n selectedService={state.selection.service}\n selectedEndpoint={state.selection.endpoint}\n onSelectService={(service) => dispatch({ type: \"select-service\", service, snapshot })}\n onSelectEndpoint={(service, endpoint) => dispatch({ type: \"select-endpoint\", service, endpoint, snapshot })}\n />\n </box>\n <box style={{ flexGrow: 1 }}>\n <LogPane lines={logs} height={Math.max(5, terminal.height - 13)} width={Math.max(20, Math.floor(terminal.width * 0.72))} offset={state.logOffset} follow={state.follow} unseen={state.unseenLines} label={logLabel} onScroll={(delta) => dispatch({ type: \"scroll-logs\", delta })} />\n </box>\n </box>\n </box>\n ) : (\n <box style={{ flexGrow: 1, flexDirection: \"column\" }}>\n <box style={{ height: Math.min(7, Math.max(4, stacks.length + 2)) }}>\n <StackSidebar\n stacks={stacks}\n selectedProject={state.selection.project}\n width={terminal.width}\n onSelectProject={(project) => dispatch({ type: \"select-stack\", project, snapshot })}\n />\n </box>\n <box style={{ height: Math.min(10, Math.max(4, fleetServiceRowCount(stack) + 2)) }}>\n <ServicePane\n stack={stack}\n selectedService={state.selection.service}\n selectedEndpoint={state.selection.endpoint}\n onSelectService={(service) => dispatch({ type: \"select-service\", service, snapshot })}\n onSelectEndpoint={(service, endpoint) => dispatch({ type: \"select-endpoint\", service, endpoint, snapshot })}\n />\n </box>\n <box style={{ flexGrow: 1 }}>\n <LogPane lines={logs} height={Math.max(5, terminal.height - 17)} width={terminal.width} offset={state.logOffset} follow={state.follow} unseen={state.unseenLines} label={logLabel} onScroll={(delta) => dispatch({ type: \"scroll-logs\", delta })} />\n </box>\n </box>\n )}\n\n <box style={{ height: 1, paddingLeft: 1, paddingRight: 1, flexDirection: \"row\", backgroundColor: fleetTheme.panelAlt }}>\n {state.focus === \"filter\" ? (\n <>\n <text fg={fleetTheme.accent}>filter: </text>\n <input\n width={Math.max(12, terminal.width - 10)}\n value={state.filter}\n focused={true}\n placeholder=\"branch, project, or service\"\n onInput={(value) => dispatch({ type: \"filter\", filter: value, snapshot })}\n onSubmit={() => dispatch({ type: \"focus\", focus: \"stacks\" })}\n />\n </>\n ) : (\n <text fg={notice ? fleetTheme.warning : fleetTheme.muted}>\n {notice || \"click rows · wheel logs · j/k navigate · [/] service · / filter · d down · ? help · q quit\"}\n </text>\n )}\n </box>\n\n {state.helpOpen ? (\n <FleetModal title=\"Fleet help\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n <text fg={fleetTheme.text}>j/k or arrows navigate focused pane</text>\n <text fg={fleetTheme.text}>mouse click stacks/services · wheel scroll logs</text>\n <text fg={fleetTheme.text}>Tab / Shift-Tab change pane</text>\n <text fg={fleetTheme.text}>[ / ] previous / next service</text>\n <text fg={fleetTheme.text}>/ filter · G follow logs · 0/1/2 layout</text>\n <text fg={fleetTheme.text}>o open · y primary · c direct · l local · p public</text>\n <text fg={fleetTheme.text}>D doctor · s shared hostnames (claim / allow / deny / release)</text>\n <text fg={fleetTheme.danger}>d confirmed down (named volumes retained)</text>\n <text fg={fleetTheme.muted}>Esc closes this dialog</text>\n </FleetModal>\n ) : null}\n\n {state.doctorOpen ? (\n <FleetModal title=\"hestia doctor\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n {doctorRunning ? <text fg={fleetTheme.muted}>Running diagnostics…</text> : doctorRows.slice(0, 10).map((row) => (\n <text key={row.check} fg={row.level === \"error\" ? fleetTheme.danger : row.level === \"warn\" ? fleetTheme.warning : fleetTheme.text}>\n {`${row.level === \"ok\" ? \"✓\" : row.level === \"error\" ? \"✗\" : \"!\"} ${sanitizeFleetTerminalText(row.check)} — ${sanitizeFleetTerminalText(row.detail)}`}\n </text>\n ))}\n {!doctorRunning && doctorOmissionSummary(doctorRows) !== undefined ? (\n <text fg={fleetTheme.warning}>{doctorOmissionSummary(doctorRows)}</text>\n ) : null}\n <text fg={fleetTheme.muted}>Esc closes this report</text>\n </FleetModal>\n ) : null}\n\n {state.sharedOpen ? (\n <FleetModal title=\"Shared hostnames\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n {snapshot.shared.length === 0 ? (\n <text fg={fleetTheme.muted}>No shared hostnames declared. `hestia expose <svc> --shared <name>` creates one.</text>\n ) : snapshot.shared.map((entry, index) => {\n const active = index === Math.min(state.sharedSelection, snapshot.shared.length - 1);\n const holder = entry.holder === undefined\n ? \"unclaimed\"\n : `held by ${entry.holder.project}${entry.holder.mine ? \" (yours)\" : \"\"}`;\n return (\n <box key={entry.name} style={{ flexDirection: \"column\" }}>\n <text fg={active ? fleetTheme.accent : fleetTheme.text}>\n {`${active ? \"▸ \" : \" \"}${sanitizeFleetTerminalText(entry.name)} ${sanitizeFleetTerminalText(entry.url)} ${holder}`}\n </text>\n {entry.queue.map((waiter, position) => (\n <text key={`${entry.name}:${waiter.project}`} fg={fleetTheme.muted}>\n {` ${position + 1}. ${sanitizeFleetTerminalText(waiter.project)}${waiter.mine ? \" (yours)\" : \"\"}${waiter.denied ? \" — denied, still queued\" : \"\"}`}\n </text>\n ))}\n </box>\n );\n })}\n <box style={{ height: 1 }} />\n <text fg={fleetTheme.muted}>\n {sharedBusy ? \"working…\" : \"j/k select · c claim (as selected stack) · a allow · x deny · r release · Esc/s close\"}\n </text>\n </FleetModal>\n ) : null}\n\n {state.confirmDown !== undefined ? (\n <FleetModal title=\"Confirm stack down\" terminalWidth={terminal.width} terminalHeight={terminal.height}>\n <text fg={fleetTheme.text}>Branch: {sanitizeFleetTerminalText(state.confirmDown.branch)}</text>\n <text fg={fleetTheme.text}>Repository: {sanitizeFleetTerminalText(state.confirmDown.repo)}</text>\n <text fg={fleetTheme.text}>Worktree: {sanitizeFleetTerminalText(state.confirmDown.worktree)}</text>\n <text fg={fleetTheme.text}>Project: {sanitizeFleetTerminalText(state.confirmDown.project)}</text>\n <box style={{ height: 1 }} />\n <text fg={fleetTheme.warning}>Named volumes are retained.</text>\n <text fg={fleetTheme.danger}>\n {state.downPending ? \"Tearing down…\" : \"Press Enter or d to confirm; Esc cancels.\"}\n </text>\n </FleetModal>\n ) : null}\n </box>\n );\n}\n",
|
|
138
140
|
"import type { CliRenderer, KeyEvent } from \"@opentui/core\";\n\ntype FleetJobRenderer = Pick<CliRenderer, \"isDestroyed\" | \"resume\" | \"suspend\"> & {\n keyInput: {\n on(event: \"keypress\", listener: (key: KeyEvent) => void): unknown;\n off(event: \"keypress\", listener: (key: KeyEvent) => void): unknown;\n };\n};\n\nexport interface FleetSuspendDependencies {\n platform?: string;\n kill?: (pid: number, signal: NodeJS.Signals) => unknown;\n once?: (signal: NodeJS.Signals, listener: () => void) => unknown;\n off?: (signal: NodeJS.Signals, listener: () => void) => unknown;\n}\n\n/** Route raw-mode Ctrl-C through the TUI's complete renderer shutdown path. */\nexport function installFleetInterrupt(\n renderer: Pick<FleetJobRenderer, \"isDestroyed\" | \"keyInput\">,\n shutdown: () => void,\n): () => void {\n const listener = (key: KeyEvent) => {\n if (renderer.isDestroyed || !key.ctrl || key.name !== \"c\") return;\n key.preventDefault();\n key.stopPropagation();\n shutdown();\n };\n renderer.keyInput.on(\"keypress\", listener);\n return () => renderer.keyInput.off(\"keypress\", listener);\n}\n\n/** Restore the terminal around Ctrl-Z so shell job control behaves like a native TUI. */\nexport function installFleetSuspend(\n renderer: FleetJobRenderer,\n dependencies: FleetSuspendDependencies = {},\n): () => void {\n if ((dependencies.platform ?? process.platform) === \"win32\") return () => {};\n const kill = dependencies.kill ?? process.kill.bind(process);\n const once = dependencies.once ?? process.once.bind(process);\n const off = dependencies.off ?? process.off.bind(process);\n let resume: (() => void) | undefined;\n const listener = (key: KeyEvent) => {\n if (renderer.isDestroyed || !key.ctrl || key.name !== \"z\") return;\n key.preventDefault();\n key.stopPropagation();\n renderer.suspend();\n resume = () => {\n resume = undefined;\n if (!renderer.isDestroyed) renderer.resume();\n };\n once(\"SIGCONT\", resume);\n try {\n kill(0, \"SIGTSTP\");\n } catch {\n if (resume !== undefined) off(\"SIGCONT\", resume);\n resume = undefined;\n if (!renderer.isDestroyed) renderer.resume();\n }\n };\n renderer.keyInput.on(\"keypress\", listener);\n return () => {\n renderer.keyInput.off(\"keypress\", listener);\n if (resume !== undefined) off(\"SIGCONT\", resume);\n };\n}\n",
|
|
139
141
|
"import { Component, type ErrorInfo, type ReactNode } from \"react\";\nimport { createCliRenderer } from \"@opentui/core\";\nimport { createRoot } from \"@opentui/react\";\nimport { HestiaError, projectName } from \"@hestia/core\";\nimport { getRepoInfo } from \"@hestia/engine\";\nimport { DaemonFleetSource } from \"./fleet-source.ts\";\nimport { FleetApp } from \"./FleetApp.tsx\";\nimport { installFleetInterrupt, installFleetSuspend } from \"./job-control.ts\";\n\nclass FleetErrorBoundary extends Component<\n { children: ReactNode; onError: (error: Error) => void },\n { failed: boolean }\n> {\n state = { failed: false };\n\n static getDerivedStateFromError(): { failed: boolean } {\n return { failed: true };\n }\n\n componentDidCatch(error: Error, _info: ErrorInfo): void {\n this.props.onError(error);\n }\n\n render(): ReactNode {\n return this.state.failed ? null : this.props.children;\n }\n}\n\n/** Run the alternate-screen Fleet TUI and restore the primary terminal on every exit path. */\nexport async function runFleetTui(cwd = process.cwd()): Promise<void> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new HestiaError(\"usage\", \"hestia tui requires interactive stdin and stdout\");\n }\n const repo = await getRepoInfo(cwd);\n const preferredProject = projectName(repo.repoId, repo.repo, repo.branch, repo.worktreeRoot);\n const source = new DaemonFleetSource(repo.repoId);\n const renderer = await createCliRenderer({\n stdin: process.stdin,\n stdout: process.stdout,\n screenMode: \"alternate-screen\",\n useMouse: true,\n useThread: false,\n exitOnCtrlC: false,\n openConsoleOnError: false,\n });\n const root = createRoot(renderer);\n\n await new Promise<void>((resolve, reject) => {\n let shuttingDown = false;\n let removeInterrupt = () => {};\n let removeSuspend = () => {};\n const signals: NodeJS.Signals[] = [\"SIGINT\", \"SIGTERM\"];\n const shutdown = (error?: Error) => {\n if (shuttingDown) return;\n shuttingDown = true;\n for (const signal of signals) process.off(signal, shutdown);\n removeInterrupt();\n removeSuspend();\n source.stop();\n try {\n root.unmount();\n } finally {\n renderer.destroy();\n }\n if (error !== undefined) reject(error);\n else resolve();\n };\n for (const signal of signals) process.once(signal, shutdown);\n removeInterrupt = installFleetInterrupt(renderer, shutdown);\n removeSuspend = installFleetSuspend(renderer);\n root.render(\n <FleetErrorBoundary onError={(error) => shutdown(error)}>\n <FleetApp\n source={source}\n preferredProject={preferredProject}\n invokingRepository={{\n repo: repo.repo,\n branch: repo.branch,\n worktree: repo.worktreeRoot,\n }}\n onQuit={shutdown}\n />\n </FleetErrorBoundary>,\n );\n });\n}\n",
|
|
140
142
|
"/** Side-effect-free Fleet TUI entrypoint loaded only by the `hestia tui` command. */\nexport { runFleetTui } from \"./runtime.tsx\";\nexport { DaemonFleetSource } from \"./fleet-source.ts\";\nexport {\n createFleetUiState,\n reconcileFleetSelection,\n reduceFleetUiState,\n visibleFleetStacks,\n} from \"./fleet-controller.ts\";\nexport { sanitizeFleetTerminalText } from \"./terminal-text.ts\";\n",
|
|
141
|
-
"#!/usr/bin/env bun\nimport {\n type DoctorRow,\n doctor,\n discoverRepository,\n engine,\n ensureDaemon,\n effectiveLocalRouteServices,\n fetchHealth,\n fetchState,\n installLaunchd,\n installHestiaRouter,\n launchdManagesThisHome,\n resolvedLocalRouteHostname,\n plistPath,\n readDaemonJson,\n readHestiaMachineConfig,\n readHestiaRouterStatus,\n hestiaConfigTomlPath,\n stopDaemonProcess,\n uninstallLaunchd,\n uninstallHestiaRouter,\n initializeRepositoryConfig,\n type EndpointKind,\n type InitRequest,\n type InitScope,\n HESTIAD_PROTOCOL_VERSION,\n resolveEndpointSelection,\n migrateHestiaMachineConfig,\n} from \"@hestia/engine\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n HestiaError,\n STATE_SCHEMA_VERSION,\n type ProcSpec,\n type StackRecord,\n} from \"@hestia/core\";\n\ninterface Flags {\n json: boolean;\n destroy: boolean;\n services?: string[];\n /** true = all discovered wrangler configs; string[] filters. */\n workers?: boolean | string[];\n allowRemote: boolean;\n force: boolean;\n noVarlock: boolean;\n varlock: boolean;\n name?: string;\n cwd?: string;\n env: Record<string, string>;\n noPort: boolean;\n signal?: \"term\" | \"int\";\n readyTimeout?: number;\n project?: string;\n tunnel?: string;\n zone?: string;\n keepHostHeader: boolean;\n overwriteDns: boolean;\n /** seconds to queue for a stack slot at the cap (absent = fail fast). */\n wait?: number;\n noDaemon: boolean;\n print: boolean;\n interactive: boolean;\n direct: boolean;\n local: boolean;\n public: boolean;\n file?: string;\n scope?: InitScope;\n write: boolean;\n follow: boolean;\n tail?: number;\n /** everything after `--` (the `run` command argv) */\n rest: string[];\n _: string[];\n errors: string[];\n}\n\nfunction parseFlags(argv: string[]): Flags {\n const f: Flags = {\n json: false,\n destroy: false,\n allowRemote: false,\n force: false,\n noVarlock: false,\n varlock: false,\n noPort: false,\n keepHostHeader: false,\n overwriteDns: false,\n noDaemon: false,\n print: false,\n interactive: false,\n direct: false,\n local: false,\n public: false,\n follow: false,\n write: false,\n env: {},\n rest: [],\n _: [],\n errors: [],\n };\n for (let i = 0; i < argv.length; i++) {\n const takeValue = (): string | undefined => {\n const value = argv[i + 1];\n if (value === undefined || value.startsWith(\"--\")) return undefined;\n i += 1;\n return value;\n };\n const a = argv[i]!;\n if (a === \"--\") {\n f.rest = argv.slice(i + 1);\n break;\n } else if (a === \"--json\") f.json = true;\n else if (a === \"--destroy\") f.destroy = true;\n else if (a === \"--allow-remote\") f.allowRemote = true;\n else if (a === \"--force\") f.force = true;\n else if (a === \"--no-varlock\") f.noVarlock = true;\n else if (a === \"--varlock\") f.varlock = true;\n else if (a === \"--no-port\") f.noPort = true;\n else if (a === \"--services\") {\n const value = takeValue();\n if (value === undefined || value.startsWith(\"--\")) f.errors.push(\"--services requires a comma-separated value\");\n else f.services = value.split(\",\").filter(Boolean);\n }\n else if (a === \"--name\") {\n f.name = takeValue();\n if (!f.name || f.name.startsWith(\"--\")) f.errors.push(\"--name requires a value\");\n }\n else if (a === \"--cwd\") {\n f.cwd = takeValue();\n if (!f.cwd || f.cwd.startsWith(\"--\")) f.errors.push(\"--cwd requires a value\");\n }\n else if (a === \"--signal\") {\n const value = takeValue();\n if (value === \"int\" || value === \"term\") f.signal = value;\n else f.errors.push(\"--signal must be term or int\");\n }\n else if (a === \"--ready-timeout\") {\n const value = Number(takeValue());\n if (!Number.isFinite(value) || value < 0) f.errors.push(\"--ready-timeout requires a non-negative finite number\");\n else f.readyTimeout = value * 1000;\n }\n else if (a === \"--project\") {\n f.project = takeValue();\n if (!f.project || f.project.startsWith(\"--\")) f.errors.push(\"--project requires a value\");\n }\n else if (a === \"--tunnel\") {\n f.tunnel = takeValue();\n if (!f.tunnel || f.tunnel.startsWith(\"--\")) f.errors.push(\"--tunnel requires a value\");\n }\n else if (a === \"--zone\") {\n f.zone = takeValue();\n if (!f.zone || f.zone.startsWith(\"--\")) f.errors.push(\"--zone requires a value\");\n }\n else if (a === \"--keep-host-header\") f.keepHostHeader = true;\n else if (a === \"--overwrite-dns\") f.overwriteDns = true;\n else if (a === \"--no-daemon\") f.noDaemon = true;\n else if (a === \"--print\") f.print = true;\n else if (a === \"--interactive\") f.interactive = true;\n else if (a === \"--direct\") f.direct = true;\n else if (a === \"--local\") f.local = true;\n else if (a === \"--public\") f.public = true;\n else if (a === \"--file\") {\n f.file = takeValue();\n if (!f.file || f.file.startsWith(\"--\")) f.errors.push(\"--file requires a value\");\n }\n else if (a === \"--scope\") {\n const scope = takeValue();\n if (scope === \"repository\" || scope === \"machine\") f.scope = scope;\n else f.errors.push(\"--scope must be repository or machine\");\n }\n else if (a === \"--write\") f.write = true;\n else if (a === \"-f\" || a === \"--follow\") f.follow = true;\n else if (a === \"--tail\") {\n const value = Number(takeValue());\n if (!Number.isFinite(value) || !Number.isInteger(value) || value < 0) {\n f.errors.push(\"--tail requires a non-negative integer\");\n } else f.tail = value;\n }\n else if (a.startsWith(\"--wait=\")) {\n const value = Number(a.slice(\"--wait=\".length));\n if (!Number.isFinite(value) || value < 0) f.errors.push(\"--wait requires a non-negative finite number\");\n else f.wait = value;\n }\n else if (a === \"--wait\") {\n // bare flag = wait a long time; a following number is seconds\n const next = argv[i + 1];\n if (next !== undefined && /^\\d+$/.test(next)) f.wait = Number(argv[++i]);\n else f.wait = 3600;\n }\n else if (a === \"--env\") {\n const kv = takeValue() ?? \"\";\n const eq = kv.indexOf(\"=\");\n if (eq > 0) f.env[kv.slice(0, eq)] = kv.slice(eq + 1);\n else f.errors.push(\"--env requires K=V\");\n } else if (a.startsWith(\"--workers=\")) {\n f.workers = a.slice(\"--workers=\".length).split(\",\").filter(Boolean);\n } else if (a === \"--workers\") {\n // bare flag = all discovered; a following non-flag token is a filter list\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith(\"-\")) {\n f.workers = argv[++i]!.split(\",\").filter(Boolean);\n } else f.workers = true;\n } else if (a.startsWith(\"-\")) f.errors.push(`unknown option ${a}`);\n else f._.push(a);\n }\n if (Array.isArray(f.workers) && f.workers.length === 0) f.workers = true;\n return f;\n}\n\nfunction validateCommandOptions(argv: string[], command: string | undefined): string | null {\n const allowedByCommand: Record<string, Set<string>> = {\n version: new Set([\"--json\"]),\n skill: new Set([\"--json\"]),\n discover: new Set([\"--json\"]),\n init: new Set([\"--json\", \"--print\", \"--scope\", \"--write\", \"--no-port\"]),\n up: new Set([\"--json\", \"--services\", \"--workers\", \"--allow-remote\", \"--force\", \"--no-varlock\", \"--wait\", \"--no-daemon\"]),\n run: new Set([\"--json\", \"--name\", \"--env\", \"--no-port\", \"--varlock\", \"--signal\", \"--ready-timeout\", \"--cwd\", \"--wait\", \"--no-daemon\"]),\n expose: new Set([\"--json\", \"--tunnel\", \"--zone\", \"--keep-host-header\", \"--overwrite-dns\", \"--force\", \"--ready-timeout\"]),\n route: new Set([\"--json\"]),\n router: new Set([\"--json\", \"--interactive\"]),\n config: new Set([\"--json\", \"--file\"]),\n open: new Set([\"--json\", \"--direct\", \"--local\", \"--public\"]),\n stop: new Set([\"--json\"]),\n down: new Set([\"--json\", \"--destroy\", \"--project\"]),\n status: new Set([\"--json\"]),\n env: new Set([\"--json\"]),\n endpoint: new Set([\"--json\"]),\n logs: new Set([\"--json\", \"--follow\", \"-f\", \"--tail\", \"--project\"]),\n doctor: new Set([\"--json\"]),\n tui: new Set<string>(),\n daemon: new Set([\"--json\", \"--print\"]),\n help: new Set<string>(),\n };\n const allowed = allowedByCommand[command ?? \"help\"];\n if (allowed === undefined) return null;\n const optionArguments = new Set([\n \"--services\", \"--name\", \"--env\", \"--signal\", \"--ready-timeout\", \"--cwd\",\n \"--project\", \"--tunnel\", \"--zone\", \"--file\", \"--scope\", \"--tail\",\n ]);\n for (let index = 0; index < argv.length; index += 1) {\n const raw = argv[index]!;\n if (raw === \"--\") break;\n if (!raw.startsWith(\"-\")) continue;\n const option = raw.startsWith(\"--\") && raw.includes(\"=\") ? raw.slice(0, raw.indexOf(\"=\")) : raw;\n if (!allowed.has(option)) return `${option} is not valid for hestia ${command ?? \"help\"}`;\n if (!raw.includes(\"=\") && optionArguments.has(option)) index += 1;\n }\n return null;\n}\n\n/**\n * Best-effort browser open. Always a no-op-safe side effect — the URL is\n * printed regardless, so a headless/remote agent still hands the human a\n * clickable link. HESTIA_NO_OPEN skips the shell-out (tests, pure-resolve use).\n */\nfunction openUrl(url: string): void {\n if (process.env.HESTIA_NO_OPEN) return;\n const [cmd, ...pre] =\n process.platform === \"darwin\"\n ? [\"open\"]\n : process.platform === \"win32\"\n ? [\"cmd\", \"/c\", \"start\", \"\"]\n : [\"xdg-open\"];\n try {\n Bun.spawn([cmd!, ...pre, url], { stdout: \"ignore\", stderr: \"ignore\" }).unref();\n } catch {\n // no browser here — the printed URL is the fallback\n }\n}\n\nfunction fail(\n code: string,\n message: string,\n json: boolean,\n details?: Record<string, unknown>,\n): never {\n if (json) {\n process.stdout.write(JSON.stringify({ error: { code, message, ...(details ? { details } : {}) } }) + \"\\n\");\n } else {\n process.stderr.write(`error [${code}]: ${message}\\n`);\n }\n process.exit(1);\n}\n\nfunction printStackHuman(r: StackRecord): void {\n const out: string[] = [];\n out.push(`${r.project} ${r.state} (${r.branch} @ ${r.worktree})`);\n for (const s of r.services) {\n const port = s.publishedPort ? `127.0.0.1:${s.publishedPort}` : \"-\";\n const pub = r.endpoints.find((e) => e.name === s.name)?.publicUrl;\n out.push(\n ` ● ${s.name.padEnd(12)} ${s.backend.padEnd(7)} ${port.padEnd(20)} ${s.state}` +\n (pub !== undefined ? ` ${pub}` : \"\"),\n );\n }\n process.stdout.write(out.join(\"\\n\") + \"\\n\");\n}\n\nconst HELP = `hestia — per-worktree isolated dev stacks\n\nusage:\n hestia version [--json]\n print CLI version, state schema, and daemon protocol\n hestia skill path [--json]\n print the packaged Hestia agent skill path\n hestia discover [--json]\n read-only discovery of workloads, bindings, endpoint configuration,\n unresolved decisions, conflicts, and exact setup suggestions\n hestia init --print\n hestia init dockerfile <name> [Dockerfile] --scope repository|machine [--write]\n hestia init proc <name> --scope repository|machine [--no-port] [--write] -- <command...>\n hestia init wrangler <name> [config] --scope repository|machine [--write]\n hestia init endpoint <alias> <workload> <binding> <http|tcp|udp>\n --scope repository|machine [--write]\n proposal-first setup. Without --write the complete proposed TOML is\n printed; explicit --scope ... --write atomically updates that layer.\n Hestia never commits repository configuration\n hestia up [--services a,b] [--workers[=a,b]] [--allow-remote] [--force]\n [--no-varlock] [--wait[=secs]] [--no-daemon] [--json]\n compose stack up; --workers also supervises one \\`wrangler dev\\` per\n discovered wrangler config (private dev registry per worktree).\n Starting a NEW stack takes a machine-wide slot (cap 5, configurable\n via HESTIA_MAX_STACKS / ~/.hestia/config.toml / legacy config.json);\n at the cap it fails\n with stack-limit — --wait[=secs] queues FIFO instead, --no-daemon\n skips the cap entirely\n hestia run --name <name> [--env K=V ...] [--no-port] [--varlock]\n [--signal term|int] [--ready-timeout <s>] [--cwd <rel>]\n [--wait[=secs]] [--no-daemon] [--json] -- <command...>\n supervise a host process in this worktree's stack; {port} in the\n command and $PORT in its env carry the assigned port ({{port}} escapes)\n hestia expose <endpoint...> [--tunnel <name>] [--zone <zone>]\n [--keep-host-header] [--force]\n [--ready-timeout <s>] [--json]\n publish running stack services through a cloudflare tunnel.\n Without --tunnel (and no prior adoption): one QUICK tunnel per\n service — no account needed, URL rotates per run. With --tunnel:\n adopts your existing named tunnel (sticky) as the machine's SINGLE\n connector serving hostname <tunnel>-<branch>-<svc>.<zone> per\n service alongside your static rules — never run \\`cloudflared\n tunnel run\\` yourself alongside it (HA replicas cross-wire\n worktrees). URLs land in endpoints[] + HESTIA_<SVC>_URL. These are\n fail-closed but unauthenticated public URLs. Named v1 performs no DNS\n writes and requires wildcard CNAME *.<zone> → <uuid>.cfargotunnel.com.\n hestia open <service> [path] [--json]\n resolve a service's public URL (from \\`expose\\`) and open it in the\n browser; the URL is always printed too, so a headless agent can hand\n the human a direct-click link. HESTIA_NO_OPEN prints only.\n hestia route add|disable|reset <endpoint...> [--json] | route list [--json]\n manage sticky per-worktree stable local HTTPS routes. Agents select\n services; hestia resolves and verifies their current direct ports\n hestia router status|install|uninstall [--interactive] [--json]\n manage Hestia's isolated Portless HTTPS service. Commands are\n non-interactive by default; --interactive is the only sudo prompt path\n hestia config path|show|validate|migrate [--file <path>] [--json]\n discover and validate machine-local ~/.hestia/config.toml\n hestia daemon status|start|stop|install [--print]|uninstall [--json]\n hestiad enforces the stack cap and revives adopted tunnel connectors;\n it auto-starts on up/run. \\`install\\` writes a launchd agent\n (RunAtLoad + KeepAlive) so the daemon — and your adopted tunnel —\n survive reboots; --print renders the plist without installing.\n \\`stop\\` pauses supervision; running stacks are untouched\n hestia doctor [--json]\n report-only preflight + state audit: binaries, repo wiring, dead\n procs, exposure port drift, orphan mirrors, connector and daemon\n health. Exit 1 only on error-level rows; never mutates anything\n hestia stop <name> [--json] stop one supervised proc (idempotent)\n hestia down [--destroy] [--project <name>] [--json]\n tear down procs + containers (--destroy also removes volumes);\n --project works from the mirror after the worktree is deleted\n hestia status [--json] show this worktree's stack\n hestia env [--json] print the injected env (export lines)\n hestia endpoint list [--json] | endpoint get <alias|selector> [--json]\n resolve aliases, canonical workload:target/protocol selectors, or a\n uniquely-bound workload; ambiguous workloads fail explicitly\n hestia logs [service...] [-f|--follow] [--tail N] [--project <name>] [--json]\n stream docker and supervised-process logs (default: all services,\n last 50 lines). --json emits one LogLine JSON object per line;\n --project reads the mirror and works after worktree deletion\n hestia tui\n open the interactive, repo-scoped Fleet cockpit. Shows only stacks\n currently managed by hestia; the only mutation is confirmed down,\n which always retains named volumes\n`;\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n const flags = parseFlags(argv);\n if (flags.errors.length > 0) fail(\"usage\", flags.errors.join(\"; \"), flags.json);\n const cmd = flags._[0];\n const invalidOption = validateCommandOptions(argv, cmd);\n if (invalidOption !== null) fail(\"usage\", invalidOption, flags.json);\n const cwd = process.cwd();\n\n try {\n switch (cmd) {\n case \"version\": {\n const version = {\n cliVersion: \"1.0.1\",\n stateSchema: STATE_SCHEMA_VERSION,\n daemonProtocol: HESTIAD_PROTOCOL_VERSION,\n runtime: \"bun\",\n };\n if (flags.json) process.stdout.write(JSON.stringify(version) + \"\\n\");\n else process.stdout.write(\n `hestia ${version.cliVersion} (state v${version.stateSchema}, daemon v${version.daemonProtocol}, Bun)\\n`,\n );\n break;\n }\n case \"skill\": {\n if (flags._[1] !== \"path\") fail(\"usage\", \"usage: hestia skill path\", flags.json);\n const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));\n const candidates = [\n join(packageRoot, \"skills\", \"hestia\", \"SKILL.md\"),\n join(process.cwd(), \"skills\", \"hestia\", \"SKILL.md\"),\n ];\n const path = candidates.find(existsSync);\n if (path === undefined) fail(\"config-missing\", \"packaged Hestia skill was not found\", flags.json);\n if (flags.json) process.stdout.write(JSON.stringify({ path }) + \"\\n\");\n else process.stdout.write(`${path}\\n`);\n break;\n }\n case \"discover\": {\n const report = await discoverRepository(cwd);\n if (flags.json) process.stdout.write(JSON.stringify(report, null, 2) + \"\\n\");\n else {\n process.stdout.write(\n `${report.repository.repo} · ${report.repository.branch}\\n${report.repository.worktree}\\n`,\n );\n for (const workload of report.runnableWorkloads) {\n process.stdout.write(\n ` runnable ${workload.name.padEnd(18)} ${workload.source.padEnd(10)} ${workload.decisionSource}\\n`,\n );\n }\n for (const workload of report.candidateWorkloads) {\n process.stdout.write(\n ` candidate ${workload.name.padEnd(18)} ${workload.source.padEnd(10)} ${workload.notes.join(\"; \")}\\n`,\n );\n }\n for (const conflict of report.conflicts) process.stderr.write(`conflict: ${conflict}\\n`);\n for (const suggestion of report.suggestions) process.stdout.write(`suggest: ${suggestion}\\n`);\n }\n if (report.conflicts.length > 0) process.exitCode = 1;\n break;\n }\n case \"init\": {\n const kind = flags._[1];\n if (kind === undefined && flags.print) {\n const report = await discoverRepository(cwd);\n if (flags.json) process.stdout.write(JSON.stringify({ suggestions: report.suggestions }, null, 2) + \"\\n\");\n else process.stdout.write(report.suggestions.map((line) => `${line}\\n`).join(\"\"));\n break;\n }\n if (flags.scope === undefined) {\n fail(\"usage\", \"init requires --scope repository or --scope machine\", flags.json);\n }\n let request: InitRequest;\n if (kind === \"dockerfile\") {\n const name = flags._[2];\n if (!name) fail(\"usage\", \"init dockerfile requires <name>\", flags.json);\n request = { kind, name, file: flags._[3] };\n } else if (kind === \"proc\") {\n const name = flags._[2];\n if (!name || flags.rest.length === 0) {\n fail(\"usage\", \"init proc requires <name> and a command after --\", flags.json);\n }\n request = { kind, name, command: flags.rest, port: flags.noPort ? \"none\" : \"auto\" };\n } else if (kind === \"wrangler\") {\n const name = flags._[2];\n if (!name) fail(\"usage\", \"init wrangler requires <name>\", flags.json);\n request = { kind, name, file: flags._[3] };\n } else if (kind === \"endpoint\") {\n const [alias, workload, binding, endpointKind] = flags._.slice(2);\n if (!alias || !workload || !binding || !([\"http\", \"tcp\", \"udp\"] as string[]).includes(endpointKind ?? \"\")) {\n fail(\n \"usage\",\n \"init endpoint requires <alias> <workload> <binding> <http|tcp|udp>\",\n flags.json,\n );\n }\n request = {\n kind,\n alias,\n workload,\n binding,\n endpointKind: endpointKind as EndpointKind,\n };\n } else {\n fail(\"usage\", \"usage: hestia init --print | init dockerfile|proc|wrangler|endpoint ...\", flags.json);\n }\n const result = await initializeRepositoryConfig(cwd, request, flags.scope, flags.write);\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else if (result.written) {\n process.stdout.write(`wrote ${result.path}\\nrepository ${result.runnable ? \"is runnable\" : \"still needs setup\"}\\n`);\n } else {\n process.stdout.write(`# proposed ${result.path}\\n${result.proposed}`);\n }\n break;\n }\n case \"up\": {\n const r = await engine.up(cwd, {\n services: flags.services,\n workers: flags.workers,\n allowRemote: flags.allowRemote,\n force: flags.force,\n noVarlock: flags.noVarlock,\n wait: flags.wait !== undefined ? flags.wait * 1000 : undefined,\n noDaemon: flags.noDaemon,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"run\": {\n if (!flags.name) fail(\"usage\", \"run requires --name <name>\", flags.json);\n if (flags.rest.length === 0) {\n fail(\"usage\", \"run requires a command after --\", flags.json);\n }\n const spec: ProcSpec = {\n name: flags.name,\n argv: flags.rest,\n cwd: flags.cwd,\n env: Object.keys(flags.env).length > 0 ? flags.env : undefined,\n port: flags.noPort ? \"none\" : \"auto\",\n signal: flags.signal,\n readyTimeoutMs: flags.readyTimeout,\n varlock: flags.varlock,\n };\n const r = await engine.run(cwd, spec, {\n wait: flags.wait !== undefined ? flags.wait * 1000 : undefined,\n noDaemon: flags.noDaemon,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"expose\": {\n const services = flags._.slice(1);\n if (services.length === 0) {\n fail(\"usage\", \"usage: hestia expose <service...> [--tunnel <name>]\", flags.json);\n }\n if (flags.overwriteDns) {\n fail(\"usage\", \"--overwrite-dns was removed; named v1 requires user-managed wildcard DNS\", flags.json);\n }\n const r = await engine.expose(cwd, services, {\n tunnel: flags.tunnel,\n zone: flags.zone,\n keepHostHeader: flags.keepHostHeader,\n overwriteDns: flags.overwriteDns,\n force: flags.force,\n readyTimeoutMs: flags.readyTimeout,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"route\": {\n const action = flags._[1];\n const services = flags._.slice(2);\n if (action === \"add\") {\n const record = await engine.addLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"disable\") {\n const record = await engine.disableLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"reset\" || action === \"remove\") {\n const record = await engine.resetLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"list\") {\n const record = await engine.status(cwd);\n if (record === null) fail(\"no-stack\", \"Route list: no stack for this worktree\", flags.json);\n const routes = effectiveLocalRouteServices(record).map((service) => {\n const endpoint = record.endpoints.find((candidate) => candidate.name === service);\n return {\n service,\n directUrl: endpoint?.url,\n localUrl: endpoint?.localUrl ?? `https://${resolvedLocalRouteHostname(record, service)}`,\n available: endpoint?.url !== undefined,\n explicit: record.localRoutes?.some((route) => route.service === service) ?? false,\n };\n });\n if (flags.json) process.stdout.write(JSON.stringify(routes, null, 2) + \"\\n\");\n else for (const route of routes) process.stdout.write(`${route.service.padEnd(16)} ${route.localUrl}\\n`);\n } else {\n fail(\"usage\", \"usage: hestia route add|disable|reset <endpoint...> | route list\", flags.json);\n }\n break;\n }\n case \"router\": {\n const action = flags._[1];\n const result = action === \"status\"\n ? await readHestiaRouterStatus()\n : action === \"install\"\n ? await installHestiaRouter(flags.interactive)\n : action === \"uninstall\"\n ? await uninstallHestiaRouter(flags.interactive)\n : null;\n if (result === null) {\n fail(\"usage\", \"usage: hestia router status|install|uninstall [--interactive]\", flags.json);\n }\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else {\n process.stdout.write(\n `router ${result.running ? \"running\" : result.installed ? \"installed\" : \"not installed\"} ` +\n `(Portless ${result.version}, port ${result.port}, ${result.stateDir})\\n`,\n );\n }\n break;\n }\n case \"config\": {\n const action = flags._[1];\n const path = flags.file ?? hestiaConfigTomlPath();\n if (action === \"migrate\") {\n const result = migrateHestiaMachineConfig();\n if (flags.json) process.stdout.write(JSON.stringify(result) + \"\\n\");\n else process.stdout.write(result.migrated ? `migrated ${result.from} -> ${result.to}\\n` : `${result.to} already exists\\n`);\n } else if (action === \"path\") {\n if (flags.json) process.stdout.write(JSON.stringify({ path }) + \"\\n\");\n else process.stdout.write(`${path}\\n`);\n } else if (action === \"show\" || action === \"validate\") {\n const result = readHestiaMachineConfig(path);\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else if (action === \"show\") {\n process.stdout.write(`${result.path}\\n${JSON.stringify(result.config, null, 2)}\\n`);\n for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\\n`);\n }\n else {\n process.stdout.write(`${result.valid ? \"valid\" : \"invalid\"} ${result.path}\\n`);\n for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\\n`);\n }\n if (!result.valid) process.exitCode = 1;\n } else {\n fail(\"usage\", \"usage: hestia config path|show|validate|migrate [--file <path>]\", flags.json);\n }\n break;\n }\n case \"open\": {\n const service = flags._[1];\n if (!service) fail(\"usage\", \"usage: hestia open <service> [path]\", flags.json);\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n const endpoint = resolveEndpointSelection(r, service).endpoint;\n const selectedModes = [flags.direct, flags.local, flags.public].filter(Boolean).length;\n if (selectedModes > 1) fail(\"usage\", \"open accepts only one of --direct, --local, or --public\", flags.json);\n const localIsCandidate = endpoint?.localUrl !== undefined && (flags.local || selectedModes === 0);\n const router = localIsCandidate ? await readHestiaRouterStatus() : undefined;\n const daemon = localIsCandidate ? readDaemonJson() : null;\n let daemonHealth: Awaited<ReturnType<typeof fetchHealth>> | null = null;\n if (daemon !== null) {\n try {\n daemonHealth = await fetchHealth(daemon.port);\n } catch {}\n }\n const localUsable = router?.installed === true && router.running && router.trusted &&\n daemonHealth?.routerPort === daemon?.routerPort;\n if (flags.local && endpoint?.localUrl !== undefined && !localUsable) {\n fail(\"router-unreachable\", \"the requested local HTTPS router is not installed, running, and trusted\", flags.json);\n }\n const base = flags.direct\n ? endpoint?.url\n : flags.local\n ? endpoint?.localUrl\n : flags.public\n ? endpoint?.publicUrl\n : localUsable ? endpoint?.localUrl : endpoint?.publicUrl ?? endpoint?.url;\n if (base === undefined) {\n fail(\n \"service-not-found\",\n `\"${service}\" has no requested URL surface`,\n flags.json,\n );\n }\n const path = flags._[2];\n const url =\n path === undefined\n ? base\n : base.replace(/\\/$/, \"\") + (path.startsWith(\"/\") ? path : `/${path}`);\n openUrl(url);\n if (flags.json) process.stdout.write(JSON.stringify({ url }) + \"\\n\");\n else process.stdout.write(`${url}\\n`);\n break;\n }\n case \"stop\": {\n const name = flags._[1];\n if (!name) fail(\"usage\", \"usage: hestia stop <name>\", flags.json);\n await engine.stopService(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(`${name} stopped\\n`);\n break;\n }\n case \"down\": {\n if (flags.project !== undefined) {\n await engine.downProject(flags.project, { destroy: flags.destroy });\n } else {\n await engine.down(cwd, { destroy: flags.destroy });\n }\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(\"stack down\\n\");\n break;\n }\n case \"status\": {\n const r = await engine.status(cwd);\n if (flags.json) process.stdout.write(JSON.stringify(r) + \"\\n\");\n else if (r === null) process.stdout.write(\"no stack for this worktree\\n\");\n else printStackHuman(r);\n break;\n }\n case \"env\": {\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n if (flags.json) process.stdout.write(JSON.stringify(r.env) + \"\\n\");\n else {\n for (const [k, v] of Object.entries(r.env)) {\n process.stdout.write(`export ${k}=${JSON.stringify(v)}\\n`);\n }\n }\n break;\n }\n case \"endpoint\": {\n const action = flags._[1];\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n if (action === \"get\") {\n const input = flags._[2];\n if (!input) fail(\"usage\", \"usage: hestia endpoint get <alias|selector>\", flags.json);\n const resolved = resolveEndpointSelection(r, input);\n if (flags.json) process.stdout.write(JSON.stringify(resolved) + \"\\n\");\n else process.stdout.write(\n `${resolved.endpoint.name} ${resolved.workload}:${resolved.binding} ` +\n `${resolved.endpoint.kind ?? \"tcp\"} ${resolved.endpoint.host}:${resolved.endpoint.port}\\n`,\n );\n } else if (action === \"list\") {\n if (flags.json) process.stdout.write(JSON.stringify(r.endpoints) + \"\\n\");\n else {\n for (const e of r.endpoints) {\n process.stdout.write(`${e.name.padEnd(12)} ${e.host}:${e.port}\\n`);\n if (e.url) process.stdout.write(` direct ${e.url}\\n`);\n if (e.localUrl) process.stdout.write(` local ${e.localUrl}\\n`);\n if (e.publicUrl) process.stdout.write(` public ${e.publicUrl}\\n`);\n }\n }\n } else {\n fail(\"usage\", \"usage: hestia endpoint list | endpoint get <alias|selector>\", flags.json);\n }\n break;\n }\n case \"logs\": {\n if (flags.tail !== undefined && (!Number.isInteger(flags.tail) || flags.tail < 0)) {\n fail(\"usage\", \"--tail requires a non-negative integer\", flags.json);\n }\n const services = flags._.slice(1);\n const stream = flags.project !== undefined\n ? engine.logsProject(flags.project, {\n services,\n follow: flags.follow,\n tail: flags.tail,\n })\n : engine.logs(cwd, {\n services,\n follow: flags.follow,\n tail: flags.tail,\n });\n const nameWidth = Math.max(8, ...services.map((name) => name.length));\n for await (const line of stream) {\n if (flags.json) {\n process.stdout.write(JSON.stringify(line) + \"\\n\");\n } else {\n const text = line.meta ? `[hestia] ${line.text}` : line.text;\n process.stdout.write(`${line.service.padEnd(nameWidth)} │ ${text}\\n`);\n }\n }\n break;\n }\n case \"doctor\": {\n const rows = await doctor(cwd);\n if (flags.json) {\n process.stdout.write(JSON.stringify(rows, null, 2) + \"\\n\");\n } else {\n const mark: Record<DoctorRow[\"level\"], string> = {\n ok: \"✓\",\n warn: \"!\",\n error: \"✗\",\n unknown: \"?\",\n };\n for (const r of rows) {\n process.stdout.write(`${mark[r.level]} ${r.check.padEnd(28)} ${r.detail}\\n`);\n }\n }\n if (rows.some((r) => r.level === \"error\")) process.exit(1);\n break;\n }\n case \"tui\": {\n if (flags.json) fail(\"usage\", \"hestia tui does not support --json\", true);\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n fail(\"usage\", \"hestia tui requires interactive stdin and stdout\", false);\n }\n const { runFleetTui } = await import(\"@hestia/tui\");\n await runFleetTui(cwd);\n break;\n }\n case \"daemon\": {\n const sub = flags._[1];\n if (sub === \"status\") {\n const j = readDaemonJson();\n const health = j !== null ? await fetchHealth(j.port) : null;\n if (health === null) {\n if (flags.json) process.stdout.write(JSON.stringify({ running: false }) + \"\\n\");\n else process.stdout.write(\"hestiad not running (starts on the next up/run)\\n\");\n break;\n }\n const state = await fetchState(j!.port);\n if (flags.json) {\n process.stdout.write(JSON.stringify({ running: true, ...health, ...state }) + \"\\n\");\n } else {\n process.stdout.write(\n `hestiad pid ${health.pid} (protocol v${health.protocolVersion}) — ` +\n `${health.live}/${health.maxStacks} stacks` +\n (state !== null && state.live.length > 0 ? `: ${state.live.join(\", \")}` : \"\") +\n (health.queued > 0 ? `, ${health.queued} queued` : \"\") +\n \"\\n\",\n );\n for (const w of health.warnings) process.stderr.write(`warning: ${w}\\n`);\n }\n } else if (sub === \"stop\") {\n // A launchd-managed daemon must be booted out — SIGTERM alone would\n // just be respawned (or leave launchd thinking it crashed). Only\n // when launchd manages THIS home: a HESTIA_HOME'd CLI must never\n // boot out the machine's real agent.\n if (launchdManagesThisHome()) {\n const uid = process.getuid?.() ?? 501;\n execFileSync(\"launchctl\", [\"bootout\", `gui/${uid}/dev.hestia.daemon`]);\n process.stderr.write(\n \"warning: launchd agent booted out — `hestia daemon install` re-enables reboot revival\\n\",\n );\n } else {\n await stopDaemonProcess();\n }\n process.stderr.write(\n \"warning: stacks keep running; cap + connector supervision paused until the next up/run\\n\",\n );\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(\"hestiad stopped\\n\");\n } else if (sub === \"install\") {\n const result = installLaunchd({ print: flags.print });\n for (const w of result.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (flags.json) {\n process.stdout.write(JSON.stringify(result) + \"\\n\");\n } else if (result.installedAt !== undefined) {\n process.stdout.write(\n `installed ${result.installedAt} — hestiad (and adopted tunnel connectors) now survive reboots\\n`,\n );\n } else {\n process.stdout.write(result.plist);\n }\n } else if (sub === \"uninstall\") {\n const result = uninstallLaunchd();\n for (const w of result.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (flags.json) process.stdout.write(JSON.stringify(result) + \"\\n\");\n else {\n process.stdout.write(\n result.removed ? `removed ${plistPath()}\\n` : \"launchd agent was not installed\\n\",\n );\n }\n } else if (sub === \"start\") {\n const h = await ensureDaemon();\n if (flags.json) process.stdout.write(JSON.stringify(h.health) + \"\\n\");\n else process.stdout.write(`hestiad running on 127.0.0.1:${h.port} (pid ${h.health.pid})\\n`);\n } else {\n fail(\"usage\", \"usage: hestia daemon status|start|stop|install [--print]|uninstall\", flags.json);\n }\n break;\n }\n case \"help\":\n case undefined:\n process.stdout.write(HELP);\n break;\n default:\n fail(\"unknown-command\", `unknown command: ${cmd}`, flags.json);\n }\n } catch (err) {\n if (err instanceof HestiaError) fail(err.code, err.message, flags.json, err.details);\n fail(\"internal\", (err as Error).message ?? String(err), flags.json);\n }\n}\n\nmain();\n"
|
|
143
|
+
"#!/usr/bin/env bun\nimport {\n type DoctorRow,\n doctor,\n discoverRepository,\n engine,\n ensureDaemon,\n effectiveLocalRouteServices,\n fetchHealth,\n fetchState,\n installLaunchd,\n installHestiaRouter,\n launchdManagesThisHome,\n resolvedLocalRouteHostname,\n plistPath,\n readDaemonJson,\n readHestiaMachineConfig,\n readHestiaRouterStatus,\n hestiaConfigTomlPath,\n stopDaemonProcess,\n uninstallLaunchd,\n uninstallHestiaRouter,\n initializeRepositoryConfig,\n listSharedHostnames,\n type EndpointKind,\n type InitRequest,\n type InitScope,\n HESTIAD_PROTOCOL_VERSION,\n resolveEndpointSelection,\n migrateHestiaMachineConfig,\n} from \"@hestia/engine\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n HestiaError,\n STATE_SCHEMA_VERSION,\n type ProcSpec,\n type StackRecord,\n} from \"@hestia/core\";\n\n/** The published version + npm coordinates (kept in sync with package.json at release). */\nconst CLI_VERSION = \"1.1.0\";\nconst PACKAGE_NAME = \"@tridha643/hestia\";\n\n/**\n * Compare two dotted numeric versions. Returns >0 when `a` is newer than `b`,\n * <0 when older, 0 when equal. A pre-release suffix (e.g. `-rc.1`) is treated as\n * older than the same release, matching npm's `latest` dist-tag semantics.\n */\nexport function compareVersions(a: string, b: string): number {\n const parse = (value: string): { core: number[]; pre: boolean } => {\n const [core, pre] = value.split(\"-\", 2);\n return {\n core: (core ?? \"\").split(\".\").map((part) => Number.parseInt(part, 10) || 0),\n pre: pre !== undefined && pre.length > 0,\n };\n };\n const left = parse(a);\n const right = parse(b);\n const length = Math.max(left.core.length, right.core.length);\n for (let index = 0; index < length; index += 1) {\n const diff = (left.core[index] ?? 0) - (right.core[index] ?? 0);\n if (diff !== 0) return diff;\n }\n if (left.pre === right.pre) return 0;\n return left.pre ? -1 : 1;\n}\n\n/** Ask the npm registry for the current `latest` version of the hestia package. */\nasync function fetchLatestVersion(): Promise<string> {\n const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {\n headers: { accept: \"application/json\" },\n });\n if (!response.ok) throw new Error(`npm registry responded ${response.status}`);\n const body = (await response.json()) as { version?: unknown };\n if (typeof body.version !== \"string\" || body.version.length === 0) {\n throw new Error(\"npm registry response has no version\");\n }\n return body.version;\n}\n\ninterface Flags {\n json: boolean;\n destroy: boolean;\n services?: string[];\n /** true = all discovered wrangler configs; string[] filters. */\n workers?: boolean | string[];\n allowRemote: boolean;\n force: boolean;\n noVarlock: boolean;\n varlock: boolean;\n name?: string;\n cwd?: string;\n env: Record<string, string>;\n noPort: boolean;\n signal?: \"term\" | \"int\";\n readyTimeout?: number;\n project?: string;\n tunnel?: string;\n zone?: string;\n keepHostHeader: boolean;\n overwriteDns: boolean;\n /** Shared hostname handle for `expose --shared`. */\n shared?: string;\n /** Explicit FQDN target for `--shared` (any zone; default `<shared>.<zone>`). */\n hostname?: string;\n /** URL path prefix for `--shared` (several handles share one hostname). */\n path?: string;\n /** Drop this worktree's durable claim-queue entry instead of claiming. */\n cancel: boolean;\n /** `upgrade --check`: report whether a newer release exists, don't install. */\n check: boolean;\n /** seconds to queue for a stack slot at the cap (absent = fail fast). */\n wait?: number;\n noDaemon: boolean;\n print: boolean;\n interactive: boolean;\n direct: boolean;\n local: boolean;\n public: boolean;\n file?: string;\n scope?: InitScope;\n write: boolean;\n follow: boolean;\n tail?: number;\n /** everything after `--` (the `run` command argv) */\n rest: string[];\n _: string[];\n errors: string[];\n}\n\nfunction parseFlags(argv: string[]): Flags {\n const f: Flags = {\n json: false,\n destroy: false,\n allowRemote: false,\n force: false,\n noVarlock: false,\n varlock: false,\n noPort: false,\n keepHostHeader: false,\n overwriteDns: false,\n cancel: false,\n check: false,\n noDaemon: false,\n print: false,\n interactive: false,\n direct: false,\n local: false,\n public: false,\n follow: false,\n write: false,\n env: {},\n rest: [],\n _: [],\n errors: [],\n };\n for (let i = 0; i < argv.length; i++) {\n const takeValue = (): string | undefined => {\n const value = argv[i + 1];\n if (value === undefined || value.startsWith(\"--\")) return undefined;\n i += 1;\n return value;\n };\n const a = argv[i]!;\n if (a === \"--\") {\n f.rest = argv.slice(i + 1);\n break;\n } else if (a === \"--json\") f.json = true;\n else if (a === \"--destroy\") f.destroy = true;\n else if (a === \"--allow-remote\") f.allowRemote = true;\n else if (a === \"--force\") f.force = true;\n else if (a === \"--no-varlock\") f.noVarlock = true;\n else if (a === \"--varlock\") f.varlock = true;\n else if (a === \"--no-port\") f.noPort = true;\n else if (a === \"--services\") {\n const value = takeValue();\n if (value === undefined || value.startsWith(\"--\")) f.errors.push(\"--services requires a comma-separated value\");\n else f.services = value.split(\",\").filter(Boolean);\n }\n else if (a === \"--name\") {\n f.name = takeValue();\n if (!f.name || f.name.startsWith(\"--\")) f.errors.push(\"--name requires a value\");\n }\n else if (a === \"--cwd\") {\n f.cwd = takeValue();\n if (!f.cwd || f.cwd.startsWith(\"--\")) f.errors.push(\"--cwd requires a value\");\n }\n else if (a === \"--signal\") {\n const value = takeValue();\n if (value === \"int\" || value === \"term\") f.signal = value;\n else f.errors.push(\"--signal must be term or int\");\n }\n else if (a === \"--ready-timeout\") {\n const value = Number(takeValue());\n if (!Number.isFinite(value) || value < 0) f.errors.push(\"--ready-timeout requires a non-negative finite number\");\n else f.readyTimeout = value * 1000;\n }\n else if (a === \"--project\") {\n f.project = takeValue();\n if (!f.project || f.project.startsWith(\"--\")) f.errors.push(\"--project requires a value\");\n }\n else if (a === \"--tunnel\") {\n f.tunnel = takeValue();\n if (!f.tunnel || f.tunnel.startsWith(\"--\")) f.errors.push(\"--tunnel requires a value\");\n }\n else if (a === \"--zone\") {\n f.zone = takeValue();\n if (!f.zone || f.zone.startsWith(\"--\")) f.errors.push(\"--zone requires a value\");\n }\n else if (a === \"--keep-host-header\") f.keepHostHeader = true;\n else if (a === \"--overwrite-dns\") f.overwriteDns = true;\n else if (a === \"--shared\") {\n f.shared = takeValue();\n if (!f.shared || f.shared.startsWith(\"--\")) f.errors.push(\"--shared requires a value\");\n }\n else if (a === \"--hostname\") {\n f.hostname = takeValue();\n if (!f.hostname || f.hostname.startsWith(\"--\")) f.errors.push(\"--hostname requires a value\");\n }\n else if (a === \"--path\") {\n f.path = takeValue();\n if (!f.path || f.path.startsWith(\"--\")) f.errors.push(\"--path requires a value\");\n }\n else if (a === \"--cancel\") f.cancel = true;\n else if (a === \"--check\") f.check = true;\n else if (a === \"--no-daemon\") f.noDaemon = true;\n else if (a === \"--print\") f.print = true;\n else if (a === \"--interactive\") f.interactive = true;\n else if (a === \"--direct\") f.direct = true;\n else if (a === \"--local\") f.local = true;\n else if (a === \"--public\") f.public = true;\n else if (a === \"--file\") {\n f.file = takeValue();\n if (!f.file || f.file.startsWith(\"--\")) f.errors.push(\"--file requires a value\");\n }\n else if (a === \"--scope\") {\n const scope = takeValue();\n if (scope === \"repository\" || scope === \"machine\") f.scope = scope;\n else f.errors.push(\"--scope must be repository or machine\");\n }\n else if (a === \"--write\") f.write = true;\n else if (a === \"-f\" || a === \"--follow\") f.follow = true;\n else if (a === \"--tail\") {\n const value = Number(takeValue());\n if (!Number.isFinite(value) || !Number.isInteger(value) || value < 0) {\n f.errors.push(\"--tail requires a non-negative integer\");\n } else f.tail = value;\n }\n else if (a.startsWith(\"--wait=\")) {\n const value = Number(a.slice(\"--wait=\".length));\n if (!Number.isFinite(value) || value < 0) f.errors.push(\"--wait requires a non-negative finite number\");\n else f.wait = value;\n }\n else if (a === \"--wait\") {\n // bare flag = wait a long time; a following number is seconds\n const next = argv[i + 1];\n if (next !== undefined && /^\\d+$/.test(next)) f.wait = Number(argv[++i]);\n else f.wait = 3600;\n }\n else if (a === \"--env\") {\n const kv = takeValue() ?? \"\";\n const eq = kv.indexOf(\"=\");\n if (eq > 0) f.env[kv.slice(0, eq)] = kv.slice(eq + 1);\n else f.errors.push(\"--env requires K=V\");\n } else if (a.startsWith(\"--workers=\")) {\n f.workers = a.slice(\"--workers=\".length).split(\",\").filter(Boolean);\n } else if (a === \"--workers\") {\n // bare flag = all discovered; a following non-flag token is a filter list\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith(\"-\")) {\n f.workers = argv[++i]!.split(\",\").filter(Boolean);\n } else f.workers = true;\n } else if (a.startsWith(\"-\")) f.errors.push(`unknown option ${a}`);\n else f._.push(a);\n }\n if (Array.isArray(f.workers) && f.workers.length === 0) f.workers = true;\n return f;\n}\n\nfunction validateCommandOptions(argv: string[], command: string | undefined): string | null {\n const allowedByCommand: Record<string, Set<string>> = {\n version: new Set([\"--json\"]),\n upgrade: new Set([\"--json\", \"--check\"]),\n skill: new Set([\"--json\"]),\n discover: new Set([\"--json\"]),\n init: new Set([\"--json\", \"--print\", \"--scope\", \"--write\", \"--no-port\"]),\n up: new Set([\"--json\", \"--services\", \"--workers\", \"--allow-remote\", \"--force\", \"--no-varlock\", \"--wait\", \"--no-daemon\"]),\n run: new Set([\"--json\", \"--name\", \"--env\", \"--no-port\", \"--varlock\", \"--signal\", \"--ready-timeout\", \"--cwd\", \"--wait\", \"--no-daemon\"]),\n expose: new Set([\"--json\", \"--tunnel\", \"--zone\", \"--keep-host-header\", \"--overwrite-dns\", \"--force\", \"--ready-timeout\", \"--shared\", \"--hostname\", \"--path\"]),\n claim: new Set([\"--json\", \"--wait\", \"--cancel\"]),\n release: new Set([\"--json\"]),\n share: new Set([\"--json\"]),\n route: new Set([\"--json\"]),\n router: new Set([\"--json\", \"--interactive\"]),\n config: new Set([\"--json\", \"--file\"]),\n open: new Set([\"--json\", \"--direct\", \"--local\", \"--public\"]),\n stop: new Set([\"--json\"]),\n down: new Set([\"--json\", \"--destroy\", \"--project\"]),\n status: new Set([\"--json\"]),\n env: new Set([\"--json\"]),\n endpoint: new Set([\"--json\"]),\n logs: new Set([\"--json\", \"--follow\", \"-f\", \"--tail\", \"--project\"]),\n doctor: new Set([\"--json\"]),\n tui: new Set<string>(),\n daemon: new Set([\"--json\", \"--print\"]),\n help: new Set<string>(),\n };\n const allowed = allowedByCommand[command ?? \"help\"];\n if (allowed === undefined) return null;\n const optionArguments = new Set([\n \"--services\", \"--name\", \"--env\", \"--signal\", \"--ready-timeout\", \"--cwd\",\n \"--project\", \"--tunnel\", \"--zone\", \"--file\", \"--scope\", \"--tail\", \"--shared\",\n \"--hostname\", \"--path\",\n ]);\n for (let index = 0; index < argv.length; index += 1) {\n const raw = argv[index]!;\n if (raw === \"--\") break;\n if (!raw.startsWith(\"-\")) continue;\n const option = raw.startsWith(\"--\") && raw.includes(\"=\") ? raw.slice(0, raw.indexOf(\"=\")) : raw;\n if (!allowed.has(option)) return `${option} is not valid for hestia ${command ?? \"help\"}`;\n if (!raw.includes(\"=\") && optionArguments.has(option)) index += 1;\n }\n return null;\n}\n\n/**\n * Best-effort browser open. Always a no-op-safe side effect — the URL is\n * printed regardless, so a headless/remote agent still hands the human a\n * clickable link. HESTIA_NO_OPEN skips the shell-out (tests, pure-resolve use).\n */\nfunction openUrl(url: string): void {\n if (process.env.HESTIA_NO_OPEN) return;\n const [cmd, ...pre] =\n process.platform === \"darwin\"\n ? [\"open\"]\n : process.platform === \"win32\"\n ? [\"cmd\", \"/c\", \"start\", \"\"]\n : [\"xdg-open\"];\n try {\n Bun.spawn([cmd!, ...pre, url], { stdout: \"ignore\", stderr: \"ignore\" }).unref();\n } catch {\n // no browser here — the printed URL is the fallback\n }\n}\n\nfunction fail(\n code: string,\n message: string,\n json: boolean,\n details?: Record<string, unknown>,\n): never {\n if (json) {\n process.stdout.write(JSON.stringify({ error: { code, message, ...(details ? { details } : {}) } }) + \"\\n\");\n } else {\n process.stderr.write(`error [${code}]: ${message}\\n`);\n }\n process.exit(1);\n}\n\nfunction printStackHuman(r: StackRecord): void {\n const out: string[] = [];\n out.push(`${r.project} ${r.state} (${r.branch} @ ${r.worktree})`);\n for (const s of r.services) {\n const port = s.publishedPort ? `127.0.0.1:${s.publishedPort}` : \"-\";\n const pub = r.endpoints.find((e) => e.name === s.name)?.publicUrl;\n out.push(\n ` ● ${s.name.padEnd(12)} ${s.backend.padEnd(7)} ${port.padEnd(20)} ${s.state}` +\n (pub !== undefined ? ` ${pub}` : \"\"),\n );\n }\n for (const shared of listSharedHostnames()) {\n const holds = shared.holder?.project === r.project;\n const queuedHere = (shared.queue ?? []).some((waiter) => waiter.project === r.project);\n if (!holds && !queuedHere) continue;\n const pending = (shared.queue ?? []).length;\n const url = `https://${shared.hostname}${shared.path ?? \"\"}`;\n out.push(\n holds\n ? ` ⇄ shared ${shared.name.padEnd(10)} ${url} HELD` +\n (pending > 0 ? ` (${pending} queued — \\`hestia share requests\\`)` : \"\")\n : ` ⇄ shared ${shared.name.padEnd(10)} ${url} queued behind ${shared.holder?.project ?? \"?\"}`,\n );\n }\n process.stdout.write(out.join(\"\\n\") + \"\\n\");\n}\n\nconst HELP = `hestia — per-worktree isolated dev stacks\n\nusage:\n hestia version [--json]\n print CLI version, state schema, and daemon protocol\n hestia upgrade [--check] [--json]\n upgrade hestia to the latest npm release via \\`bun add --global\\`;\n --check only reports whether a newer version is available\n hestia skill path [--json]\n print the packaged Hestia agent skill path\n hestia discover [--json]\n read-only discovery of workloads, bindings, endpoint configuration,\n unresolved decisions, conflicts, and exact setup suggestions\n hestia init --print\n hestia init dockerfile <name> [Dockerfile] --scope repository|machine [--write]\n hestia init proc <name> --scope repository|machine [--no-port] [--write] -- <command...>\n hestia init wrangler <name> [config] --scope repository|machine [--write]\n hestia init endpoint <alias> <workload> <binding> <http|tcp|udp>\n --scope repository|machine [--write]\n proposal-first setup. Without --write the complete proposed TOML is\n printed; explicit --scope ... --write atomically updates that layer.\n Hestia never commits repository configuration\n hestia up [--services a,b] [--workers[=a,b]] [--allow-remote] [--force]\n [--no-varlock] [--wait[=secs]] [--no-daemon] [--json]\n compose stack up; --workers also supervises one \\`wrangler dev\\` per\n discovered wrangler config (private dev registry per worktree).\n Starting a NEW stack takes a machine-wide slot (cap 5, configurable\n via HESTIA_MAX_STACKS / ~/.hestia/config.toml / legacy config.json);\n at the cap it fails\n with stack-limit — --wait[=secs] queues FIFO instead, --no-daemon\n skips the cap entirely\n hestia run --name <name> [--env K=V ...] [--no-port] [--varlock]\n [--signal term|int] [--ready-timeout <s>] [--cwd <rel>]\n [--wait[=secs]] [--no-daemon] [--json] -- <command...>\n supervise a host process in this worktree's stack; {port} in the\n command and $PORT in its env carry the assigned port ({{port}} escapes)\n hestia expose <endpoint...> [--tunnel <name>] [--zone <zone>]\n [--keep-host-header] [--force]\n [--ready-timeout <s>] [--json]\n publish running stack services through a cloudflare tunnel.\n Without --tunnel (and no prior adoption): one QUICK tunnel per\n service — no account needed, URL rotates per run. With --tunnel:\n adopts your existing named tunnel (sticky) as the machine's SINGLE\n connector serving hostname <tunnel>-<branch>-<svc>.<zone> per\n service alongside your static rules — never run \\`cloudflared\n tunnel run\\` yourself alongside it (HA replicas cross-wire\n worktrees). URLs land in endpoints[] + HESTIA_<SVC>_URL. These are\n fail-closed but unauthenticated public URLs. Named v1 performs no DNS\n writes and requires wildcard CNAME *.<zone> → <uuid>.cfargotunnel.com.\n hestia expose <endpoint> --shared <name> [--hostname <fqdn>] [--path <prefix>]\n [--tunnel <t>] [--zone <zone>] [--json]\n declare + claim a machine-owned SHARED hostname — a stable public URL\n for externally-pinned integrations (Slack request URLs, webhook\n consumers) that cannot chase per-branch hostnames. Exactly one worktree\n holds it at a time; handoffs are consent-based and switch inside\n hestiad with zero connector restarts. The target defaults to\n <name>.<zone>; --hostname points ANY FQDN you control (any zone) at it,\n and --path /prefix lets several handles share one hostname routed by\n longest path prefix (e.g. acme.com/slack vs acme.com/stripe). Prefer\n plain per-branch expose whenever the external side can be configured\n per branch (dashboards, multi-redirect OAuth)\n hestia claim <name> [--wait[=secs]] [--cancel] [--json]\n claim a shared hostname for this worktree. Held names queue DURABLY\n (position survives daemon restarts and CLI timeouts); --wait blocks\n until the holder allows or releases, --cancel leaves the queue\n hestia release <name> [--json]\n release a held shared hostname; the queue head is granted immediately\n hestia share list|requests [--json] | share allow|deny <name> [--json]\n inspect shared hostnames and arbitrate queued claims as the holder:\n allow hands over now; deny keeps the requester queued until release\n hestia open <service> [path] [--json]\n resolve a service's public URL (from \\`expose\\`) and open it in the\n browser; the URL is always printed too, so a headless agent can hand\n the human a direct-click link. HESTIA_NO_OPEN prints only.\n hestia route add|disable|reset <endpoint...> [--json] | route list [--json]\n manage sticky per-worktree stable local HTTPS routes. Agents select\n services; hestia resolves and verifies their current direct ports\n hestia router status|install|uninstall [--interactive] [--json]\n manage Hestia's isolated Portless HTTPS service. Commands are\n non-interactive by default; --interactive is the only sudo prompt path\n hestia config path|show|validate|migrate [--file <path>] [--json]\n discover and validate machine-local ~/.hestia/config.toml\n hestia daemon status|start|stop|install [--print]|uninstall [--json]\n hestiad enforces the stack cap and revives adopted tunnel connectors;\n it auto-starts on up/run. \\`install\\` writes a launchd agent\n (RunAtLoad + KeepAlive) so the daemon — and your adopted tunnel —\n survive reboots; --print renders the plist without installing.\n \\`stop\\` pauses supervision; running stacks are untouched\n hestia doctor [--json]\n report-only preflight + state audit: binaries, repo wiring, dead\n procs, exposure port drift, orphan mirrors, connector and daemon\n health. Exit 1 only on error-level rows; never mutates anything\n hestia stop <name> [--json] stop one supervised proc (idempotent)\n hestia down [--destroy] [--project <name>] [--json]\n tear down procs + containers (--destroy also removes volumes);\n --project works from the mirror after the worktree is deleted\n hestia status [--json] show this worktree's stack\n hestia env [--json] print the injected env (export lines)\n hestia endpoint list [--json] | endpoint get <alias|selector> [--json]\n resolve aliases, canonical workload:target/protocol selectors, or a\n uniquely-bound workload; ambiguous workloads fail explicitly\n hestia logs [service...] [-f|--follow] [--tail N] [--project <name>] [--json]\n stream docker and supervised-process logs (default: all services,\n last 50 lines). --json emits one LogLine JSON object per line;\n --project reads the mirror and works after worktree deletion\n hestia tui\n open the interactive, repo-scoped Fleet cockpit. Shows only stacks\n currently managed by hestia; the only mutation is confirmed down,\n which always retains named volumes\n`;\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n const flags = parseFlags(argv);\n if (flags.errors.length > 0) fail(\"usage\", flags.errors.join(\"; \"), flags.json);\n const cmd = flags._[0];\n const invalidOption = validateCommandOptions(argv, cmd);\n if (invalidOption !== null) fail(\"usage\", invalidOption, flags.json);\n const cwd = process.cwd();\n\n try {\n switch (cmd) {\n case \"version\": {\n const version = {\n cliVersion: CLI_VERSION,\n stateSchema: STATE_SCHEMA_VERSION,\n daemonProtocol: HESTIAD_PROTOCOL_VERSION,\n runtime: \"bun\",\n };\n if (flags.json) process.stdout.write(JSON.stringify(version) + \"\\n\");\n else process.stdout.write(\n `hestia ${version.cliVersion} (state v${version.stateSchema}, daemon v${version.daemonProtocol}, Bun)\\n`,\n );\n break;\n }\n case \"upgrade\": {\n let latest: string;\n try {\n latest = await fetchLatestVersion();\n } catch (error) {\n fail(\"upgrade-failed\", `could not check the latest ${PACKAGE_NAME} version: ${(error as Error).message}`, flags.json);\n }\n const available = compareVersions(latest, CLI_VERSION) > 0;\n // `--check`, or already current: report and stop — never install.\n if (flags.check || !available) {\n if (flags.json) {\n process.stdout.write(JSON.stringify({ current: CLI_VERSION, latest, upgradeAvailable: available }) + \"\\n\");\n } else if (available) {\n process.stdout.write(`hestia ${latest} is available (you have ${CLI_VERSION}) — run \\`hestia upgrade\\`\\n`);\n } else {\n process.stdout.write(`hestia ${CLI_VERSION} is the latest release\\n`);\n }\n break;\n }\n // hestia ships macOS/Bun-only through npm; the documented install is a\n // global bun add, so the upgrade is the same command pinned to latest.\n const installArgs = [\"add\", \"--global\", `${PACKAGE_NAME}@${latest}`];\n if (!flags.json) {\n process.stderr.write(`upgrading hestia ${CLI_VERSION} → ${latest} via \\`bun ${installArgs.join(\" \")}\\`…\\n`);\n }\n try {\n execFileSync(\"bun\", installArgs, { stdio: flags.json ? \"ignore\" : \"inherit\" });\n } catch (error) {\n fail(\"upgrade-failed\", `\\`bun ${installArgs.join(\" \")}\\` failed: ${(error as Error).message}`, flags.json);\n }\n if (flags.json) process.stdout.write(JSON.stringify({ current: CLI_VERSION, latest, upgraded: true }) + \"\\n\");\n else process.stdout.write(`hestia upgraded ${CLI_VERSION} → ${latest}\\n`);\n break;\n }\n case \"skill\": {\n if (flags._[1] !== \"path\") fail(\"usage\", \"usage: hestia skill path\", flags.json);\n const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));\n const candidates = [\n join(packageRoot, \"skills\", \"hestia\", \"SKILL.md\"),\n join(process.cwd(), \"skills\", \"hestia\", \"SKILL.md\"),\n ];\n const path = candidates.find(existsSync);\n if (path === undefined) fail(\"config-missing\", \"packaged Hestia skill was not found\", flags.json);\n if (flags.json) process.stdout.write(JSON.stringify({ path }) + \"\\n\");\n else process.stdout.write(`${path}\\n`);\n break;\n }\n case \"discover\": {\n const report = await discoverRepository(cwd);\n if (flags.json) process.stdout.write(JSON.stringify(report, null, 2) + \"\\n\");\n else {\n process.stdout.write(\n `${report.repository.repo} · ${report.repository.branch}\\n${report.repository.worktree}\\n`,\n );\n for (const workload of report.runnableWorkloads) {\n process.stdout.write(\n ` runnable ${workload.name.padEnd(18)} ${workload.source.padEnd(10)} ${workload.decisionSource}\\n`,\n );\n }\n for (const workload of report.candidateWorkloads) {\n process.stdout.write(\n ` candidate ${workload.name.padEnd(18)} ${workload.source.padEnd(10)} ${workload.notes.join(\"; \")}\\n`,\n );\n }\n for (const conflict of report.conflicts) process.stderr.write(`conflict: ${conflict}\\n`);\n for (const suggestion of report.suggestions) process.stdout.write(`suggest: ${suggestion}\\n`);\n }\n if (report.conflicts.length > 0) process.exitCode = 1;\n break;\n }\n case \"init\": {\n const kind = flags._[1];\n if (kind === undefined && flags.print) {\n const report = await discoverRepository(cwd);\n if (flags.json) process.stdout.write(JSON.stringify({ suggestions: report.suggestions }, null, 2) + \"\\n\");\n else process.stdout.write(report.suggestions.map((line) => `${line}\\n`).join(\"\"));\n break;\n }\n if (flags.scope === undefined) {\n fail(\"usage\", \"init requires --scope repository or --scope machine\", flags.json);\n }\n let request: InitRequest;\n if (kind === \"dockerfile\") {\n const name = flags._[2];\n if (!name) fail(\"usage\", \"init dockerfile requires <name>\", flags.json);\n request = { kind, name, file: flags._[3] };\n } else if (kind === \"proc\") {\n const name = flags._[2];\n if (!name || flags.rest.length === 0) {\n fail(\"usage\", \"init proc requires <name> and a command after --\", flags.json);\n }\n request = { kind, name, command: flags.rest, port: flags.noPort ? \"none\" : \"auto\" };\n } else if (kind === \"wrangler\") {\n const name = flags._[2];\n if (!name) fail(\"usage\", \"init wrangler requires <name>\", flags.json);\n request = { kind, name, file: flags._[3] };\n } else if (kind === \"endpoint\") {\n const [alias, workload, binding, endpointKind] = flags._.slice(2);\n if (!alias || !workload || !binding || !([\"http\", \"tcp\", \"udp\"] as string[]).includes(endpointKind ?? \"\")) {\n fail(\n \"usage\",\n \"init endpoint requires <alias> <workload> <binding> <http|tcp|udp>\",\n flags.json,\n );\n }\n request = {\n kind,\n alias,\n workload,\n binding,\n endpointKind: endpointKind as EndpointKind,\n };\n } else {\n fail(\"usage\", \"usage: hestia init --print | init dockerfile|proc|wrangler|endpoint ...\", flags.json);\n }\n const result = await initializeRepositoryConfig(cwd, request, flags.scope, flags.write);\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else if (result.written) {\n process.stdout.write(`wrote ${result.path}\\nrepository ${result.runnable ? \"is runnable\" : \"still needs setup\"}\\n`);\n } else {\n process.stdout.write(`# proposed ${result.path}\\n${result.proposed}`);\n }\n break;\n }\n case \"up\": {\n const r = await engine.up(cwd, {\n services: flags.services,\n workers: flags.workers,\n allowRemote: flags.allowRemote,\n force: flags.force,\n noVarlock: flags.noVarlock,\n wait: flags.wait !== undefined ? flags.wait * 1000 : undefined,\n noDaemon: flags.noDaemon,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"run\": {\n if (!flags.name) fail(\"usage\", \"run requires --name <name>\", flags.json);\n if (flags.rest.length === 0) {\n fail(\"usage\", \"run requires a command after --\", flags.json);\n }\n const spec: ProcSpec = {\n name: flags.name,\n argv: flags.rest,\n cwd: flags.cwd,\n env: Object.keys(flags.env).length > 0 ? flags.env : undefined,\n port: flags.noPort ? \"none\" : \"auto\",\n signal: flags.signal,\n readyTimeoutMs: flags.readyTimeout,\n varlock: flags.varlock,\n };\n const r = await engine.run(cwd, spec, {\n wait: flags.wait !== undefined ? flags.wait * 1000 : undefined,\n noDaemon: flags.noDaemon,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"expose\": {\n const services = flags._.slice(1);\n if (services.length === 0) {\n fail(\"usage\", \"usage: hestia expose <service...> [--tunnel <name>]\", flags.json);\n }\n if (flags.overwriteDns) {\n fail(\"usage\", \"--overwrite-dns was removed; named v1 requires user-managed wildcard DNS\", flags.json);\n }\n if ((flags.hostname !== undefined || flags.path !== undefined) && flags.shared === undefined) {\n fail(\"usage\", \"--hostname/--path only apply with --shared <name>\", flags.json);\n }\n const r = await engine.expose(cwd, services, {\n tunnel: flags.tunnel,\n zone: flags.zone,\n keepHostHeader: flags.keepHostHeader,\n overwriteDns: flags.overwriteDns,\n shared: flags.shared,\n hostname: flags.hostname,\n path: flags.path,\n force: flags.force,\n readyTimeoutMs: flags.readyTimeout,\n });\n if (flags.json) process.stdout.write(JSON.stringify(r, null, 2) + \"\\n\");\n else printStackHuman(r);\n break;\n }\n case \"claim\": {\n const name = flags._[1];\n if (!name || flags._.length > 2) {\n fail(\"usage\", \"usage: hestia claim <name> [--wait[=secs]] [--cancel]\", flags.json);\n }\n if (flags.cancel) {\n await engine.cancelSharedClaim(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true, cancelled: name }) + \"\\n\");\n else process.stdout.write(`left the queue for \"${name}\"\\n`);\n break;\n }\n const { record, result } = await engine.claimShared(cwd, name, {\n waitMs: flags.wait !== undefined ? flags.wait * 1000 : 0,\n });\n const hostname = listSharedHostnames().find((candidate) => candidate.name === name)?.hostname;\n if (flags.json) {\n process.stdout.write(JSON.stringify({ granted: true, holder: result.holder, record }, null, 2) + \"\\n\");\n } else {\n process.stdout.write(`claimed \"${name}\"${hostname !== undefined ? ` — https://${hostname}` : \"\"} now routes here\\n`);\n }\n break;\n }\n case \"release\": {\n const name = flags._[1];\n if (!name || flags._.length > 2) fail(\"usage\", \"usage: hestia release <name>\", flags.json);\n await engine.releaseShared(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true, released: name }) + \"\\n\");\n else process.stdout.write(`released \"${name}\" — next in queue (if any) now holds it\\n`);\n break;\n }\n case \"share\": {\n const action = flags._[1];\n if (action === \"list\" || action === \"requests\") {\n const records = listSharedHostnames();\n const view = records\n .map((record) => ({\n name: record.name,\n hostname: record.hostname,\n path: record.path,\n url: `https://${record.hostname}${record.path ?? \"\"}`,\n service: record.service,\n holder: record.holder,\n queued: record.queue ?? [],\n }))\n .filter((entry) => action === \"list\" || entry.queued.length > 0);\n if (flags.json) process.stdout.write(JSON.stringify(view, null, 2) + \"\\n\");\n else if (view.length === 0) {\n process.stdout.write(action === \"list\" ? \"no shared hostnames declared\\n\" : \"no pending claim requests\\n\");\n } else {\n for (const entry of view) {\n const holder = entry.holder === undefined ? \"unclaimed\" : `held by ${entry.holder.project}`;\n process.stdout.write(`${entry.name.padEnd(16)} ${entry.url} ${holder}\\n`);\n entry.queued.forEach((waiter, index) => {\n process.stdout.write(\n ` ${String(index + 1).padStart(2)}. ${waiter.project}${waiter.denied ? \" (denied — still queued)\" : \"\"}\\n`,\n );\n });\n }\n }\n break;\n }\n const name = flags._[2];\n if ((action !== \"allow\" && action !== \"deny\") || !name) {\n fail(\"usage\", \"usage: hestia share list|requests | share allow|deny <name>\", flags.json);\n }\n if (action === \"allow\") {\n await engine.allowShared(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true, allowed: name }) + \"\\n\");\n else process.stdout.write(`allowed — \"${name}\" handed to the next in queue\\n`);\n } else {\n await engine.denyShared(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true, denied: name }) + \"\\n\");\n else process.stdout.write(`denied — the requester stays queued until you release \"${name}\"\\n`);\n }\n break;\n }\n case \"route\": {\n const action = flags._[1];\n const services = flags._.slice(2);\n if (action === \"add\") {\n const record = await engine.addLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"disable\") {\n const record = await engine.disableLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"reset\" || action === \"remove\") {\n const record = await engine.resetLocalRoutes(cwd, services);\n if (flags.json) process.stdout.write(JSON.stringify(record, null, 2) + \"\\n\");\n else printStackHuman(record);\n } else if (action === \"list\") {\n const record = await engine.status(cwd);\n if (record === null) fail(\"no-stack\", \"Route list: no stack for this worktree\", flags.json);\n const routes = effectiveLocalRouteServices(record).map((service) => {\n const endpoint = record.endpoints.find((candidate) => candidate.name === service);\n return {\n service,\n directUrl: endpoint?.url,\n localUrl: endpoint?.localUrl ?? `https://${resolvedLocalRouteHostname(record, service)}`,\n available: endpoint?.url !== undefined,\n explicit: record.localRoutes?.some((route) => route.service === service) ?? false,\n };\n });\n if (flags.json) process.stdout.write(JSON.stringify(routes, null, 2) + \"\\n\");\n else for (const route of routes) process.stdout.write(`${route.service.padEnd(16)} ${route.localUrl}\\n`);\n } else {\n fail(\"usage\", \"usage: hestia route add|disable|reset <endpoint...> | route list\", flags.json);\n }\n break;\n }\n case \"router\": {\n const action = flags._[1];\n const result = action === \"status\"\n ? await readHestiaRouterStatus()\n : action === \"install\"\n ? await installHestiaRouter(flags.interactive)\n : action === \"uninstall\"\n ? await uninstallHestiaRouter(flags.interactive)\n : null;\n if (result === null) {\n fail(\"usage\", \"usage: hestia router status|install|uninstall [--interactive]\", flags.json);\n }\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else {\n process.stdout.write(\n `router ${result.running ? \"running\" : result.installed ? \"installed\" : \"not installed\"} ` +\n `(Portless ${result.version}, port ${result.port}, ${result.stateDir})\\n`,\n );\n }\n break;\n }\n case \"config\": {\n const action = flags._[1];\n const path = flags.file ?? hestiaConfigTomlPath();\n if (action === \"migrate\") {\n const result = migrateHestiaMachineConfig();\n if (flags.json) process.stdout.write(JSON.stringify(result) + \"\\n\");\n else process.stdout.write(result.migrated ? `migrated ${result.from} -> ${result.to}\\n` : `${result.to} already exists\\n`);\n } else if (action === \"path\") {\n if (flags.json) process.stdout.write(JSON.stringify({ path }) + \"\\n\");\n else process.stdout.write(`${path}\\n`);\n } else if (action === \"show\" || action === \"validate\") {\n const result = readHestiaMachineConfig(path);\n if (flags.json) process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n else if (action === \"show\") {\n process.stdout.write(`${result.path}\\n${JSON.stringify(result.config, null, 2)}\\n`);\n for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\\n`);\n }\n else {\n process.stdout.write(`${result.valid ? \"valid\" : \"invalid\"} ${result.path}\\n`);\n for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\\n`);\n }\n if (!result.valid) process.exitCode = 1;\n } else {\n fail(\"usage\", \"usage: hestia config path|show|validate|migrate [--file <path>]\", flags.json);\n }\n break;\n }\n case \"open\": {\n const service = flags._[1];\n if (!service) fail(\"usage\", \"usage: hestia open <service> [path]\", flags.json);\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n const endpoint = resolveEndpointSelection(r, service).endpoint;\n const selectedModes = [flags.direct, flags.local, flags.public].filter(Boolean).length;\n if (selectedModes > 1) fail(\"usage\", \"open accepts only one of --direct, --local, or --public\", flags.json);\n const localIsCandidate = endpoint?.localUrl !== undefined && (flags.local || selectedModes === 0);\n const router = localIsCandidate ? await readHestiaRouterStatus() : undefined;\n const daemon = localIsCandidate ? readDaemonJson() : null;\n let daemonHealth: Awaited<ReturnType<typeof fetchHealth>> | null = null;\n if (daemon !== null) {\n try {\n daemonHealth = await fetchHealth(daemon.port);\n } catch {}\n }\n const localUsable = router?.installed === true && router.running && router.trusted &&\n daemonHealth?.routerPort === daemon?.routerPort;\n if (flags.local && endpoint?.localUrl !== undefined && !localUsable) {\n fail(\"router-unreachable\", \"the requested local HTTPS router is not installed, running, and trusted\", flags.json);\n }\n const base = flags.direct\n ? endpoint?.url\n : flags.local\n ? endpoint?.localUrl\n : flags.public\n ? endpoint?.publicUrl\n : localUsable ? endpoint?.localUrl : endpoint?.publicUrl ?? endpoint?.url;\n if (base === undefined) {\n fail(\n \"service-not-found\",\n `\"${service}\" has no requested URL surface`,\n flags.json,\n );\n }\n const path = flags._[2];\n const url =\n path === undefined\n ? base\n : base.replace(/\\/$/, \"\") + (path.startsWith(\"/\") ? path : `/${path}`);\n openUrl(url);\n if (flags.json) process.stdout.write(JSON.stringify({ url }) + \"\\n\");\n else process.stdout.write(`${url}\\n`);\n break;\n }\n case \"stop\": {\n const name = flags._[1];\n if (!name) fail(\"usage\", \"usage: hestia stop <name>\", flags.json);\n await engine.stopService(cwd, name);\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(`${name} stopped\\n`);\n break;\n }\n case \"down\": {\n if (flags.project !== undefined) {\n await engine.downProject(flags.project, { destroy: flags.destroy });\n } else {\n await engine.down(cwd, { destroy: flags.destroy });\n }\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(\"stack down\\n\");\n break;\n }\n case \"status\": {\n const r = await engine.status(cwd);\n if (flags.json) process.stdout.write(JSON.stringify(r) + \"\\n\");\n else if (r === null) process.stdout.write(\"no stack for this worktree\\n\");\n else printStackHuman(r);\n break;\n }\n case \"env\": {\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n if (flags.json) process.stdout.write(JSON.stringify(r.env) + \"\\n\");\n else {\n for (const [k, v] of Object.entries(r.env)) {\n process.stdout.write(`export ${k}=${JSON.stringify(v)}\\n`);\n }\n }\n break;\n }\n case \"endpoint\": {\n const action = flags._[1];\n const r = await engine.status(cwd);\n if (r === null) fail(\"no-stack\", \"no stack for this worktree\", flags.json);\n if (action === \"get\") {\n const input = flags._[2];\n if (!input) fail(\"usage\", \"usage: hestia endpoint get <alias|selector>\", flags.json);\n const resolved = resolveEndpointSelection(r, input);\n if (flags.json) process.stdout.write(JSON.stringify(resolved) + \"\\n\");\n else process.stdout.write(\n `${resolved.endpoint.name} ${resolved.workload}:${resolved.binding} ` +\n `${resolved.endpoint.kind ?? \"tcp\"} ${resolved.endpoint.host}:${resolved.endpoint.port}\\n`,\n );\n } else if (action === \"list\") {\n if (flags.json) process.stdout.write(JSON.stringify(r.endpoints) + \"\\n\");\n else {\n for (const e of r.endpoints) {\n process.stdout.write(`${e.name.padEnd(12)} ${e.host}:${e.port}\\n`);\n if (e.url) process.stdout.write(` direct ${e.url}\\n`);\n if (e.localUrl) process.stdout.write(` local ${e.localUrl}\\n`);\n if (e.publicUrl) process.stdout.write(` public ${e.publicUrl}\\n`);\n }\n }\n } else {\n fail(\"usage\", \"usage: hestia endpoint list | endpoint get <alias|selector>\", flags.json);\n }\n break;\n }\n case \"logs\": {\n if (flags.tail !== undefined && (!Number.isInteger(flags.tail) || flags.tail < 0)) {\n fail(\"usage\", \"--tail requires a non-negative integer\", flags.json);\n }\n const services = flags._.slice(1);\n const stream = flags.project !== undefined\n ? engine.logsProject(flags.project, {\n services,\n follow: flags.follow,\n tail: flags.tail,\n })\n : engine.logs(cwd, {\n services,\n follow: flags.follow,\n tail: flags.tail,\n });\n const nameWidth = Math.max(8, ...services.map((name) => name.length));\n for await (const line of stream) {\n if (flags.json) {\n process.stdout.write(JSON.stringify(line) + \"\\n\");\n } else {\n const text = line.meta ? `[hestia] ${line.text}` : line.text;\n process.stdout.write(`${line.service.padEnd(nameWidth)} │ ${text}\\n`);\n }\n }\n break;\n }\n case \"doctor\": {\n const rows = await doctor(cwd);\n if (flags.json) {\n process.stdout.write(JSON.stringify(rows, null, 2) + \"\\n\");\n } else {\n const mark: Record<DoctorRow[\"level\"], string> = {\n ok: \"✓\",\n warn: \"!\",\n error: \"✗\",\n unknown: \"?\",\n };\n for (const r of rows) {\n process.stdout.write(`${mark[r.level]} ${r.check.padEnd(28)} ${r.detail}\\n`);\n }\n }\n if (rows.some((r) => r.level === \"error\")) process.exit(1);\n break;\n }\n case \"tui\": {\n if (flags.json) fail(\"usage\", \"hestia tui does not support --json\", true);\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n fail(\"usage\", \"hestia tui requires interactive stdin and stdout\", false);\n }\n const { runFleetTui } = await import(\"@hestia/tui\");\n await runFleetTui(cwd);\n break;\n }\n case \"daemon\": {\n const sub = flags._[1];\n if (sub === \"status\") {\n const j = readDaemonJson();\n const health = j !== null ? await fetchHealth(j.port) : null;\n if (health === null) {\n if (flags.json) process.stdout.write(JSON.stringify({ running: false }) + \"\\n\");\n else process.stdout.write(\"hestiad not running (starts on the next up/run)\\n\");\n break;\n }\n const state = await fetchState(j!.port);\n if (flags.json) {\n process.stdout.write(JSON.stringify({ running: true, ...health, ...state }) + \"\\n\");\n } else {\n process.stdout.write(\n `hestiad pid ${health.pid} (protocol v${health.protocolVersion}) — ` +\n `${health.live}/${health.maxStacks} stacks` +\n (state !== null && state.live.length > 0 ? `: ${state.live.join(\", \")}` : \"\") +\n (health.queued > 0 ? `, ${health.queued} queued` : \"\") +\n \"\\n\",\n );\n for (const w of health.warnings) process.stderr.write(`warning: ${w}\\n`);\n }\n } else if (sub === \"stop\") {\n // A launchd-managed daemon must be booted out — SIGTERM alone would\n // just be respawned (or leave launchd thinking it crashed). Only\n // when launchd manages THIS home: a HESTIA_HOME'd CLI must never\n // boot out the machine's real agent.\n if (launchdManagesThisHome()) {\n const uid = process.getuid?.() ?? 501;\n execFileSync(\"launchctl\", [\"bootout\", `gui/${uid}/dev.hestia.daemon`]);\n process.stderr.write(\n \"warning: launchd agent booted out — `hestia daemon install` re-enables reboot revival\\n\",\n );\n } else {\n await stopDaemonProcess();\n }\n process.stderr.write(\n \"warning: stacks keep running; cap + connector supervision paused until the next up/run\\n\",\n );\n if (flags.json) process.stdout.write(JSON.stringify({ ok: true }) + \"\\n\");\n else process.stdout.write(\"hestiad stopped\\n\");\n } else if (sub === \"install\") {\n const result = installLaunchd({ print: flags.print });\n for (const w of result.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (flags.json) {\n process.stdout.write(JSON.stringify(result) + \"\\n\");\n } else if (result.installedAt !== undefined) {\n process.stdout.write(\n `installed ${result.installedAt} — hestiad (and adopted tunnel connectors) now survive reboots\\n`,\n );\n } else {\n process.stdout.write(result.plist);\n }\n } else if (sub === \"uninstall\") {\n const result = uninstallLaunchd();\n for (const w of result.warnings) process.stderr.write(`warning: ${w}\\n`);\n if (flags.json) process.stdout.write(JSON.stringify(result) + \"\\n\");\n else {\n process.stdout.write(\n result.removed ? `removed ${plistPath()}\\n` : \"launchd agent was not installed\\n\",\n );\n }\n } else if (sub === \"start\") {\n const h = await ensureDaemon();\n if (flags.json) process.stdout.write(JSON.stringify(h.health) + \"\\n\");\n else process.stdout.write(`hestiad running on 127.0.0.1:${h.port} (pid ${h.health.pid})\\n`);\n } else {\n fail(\"usage\", \"usage: hestia daemon status|start|stop|install [--print]|uninstall\", flags.json);\n }\n break;\n }\n case \"help\":\n case undefined:\n process.stdout.write(HELP);\n break;\n default:\n fail(\"unknown-command\", `unknown command: ${cmd}`, flags.json);\n }\n } catch (err) {\n if (err instanceof HestiaError) fail(err.code, err.message, flags.json, err.details);\n fail(\"internal\", (err as Error).message ?? String(err), flags.json);\n }\n}\n\n// Only run the CLI when invoked as the entrypoint; importing (e.g. for unit\n// tests of exported helpers) must not execute a command.\nif (import.meta.main) main();\n"
|
|
142
144
|
],
|
|
143
|
-
"mappings": "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",
|
|
144
|
-
"debugId": "
|
|
145
|
+
"mappings": "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KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,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",
|
|
146
|
+
"debugId": "D1A8C01922C41BA164756E2164756E21",
|
|
145
147
|
"names": []
|
|
146
148
|
}
|