Same layering rule as the previous commit, one construct over. The remediation text explained how nix wires the var and pointed at `nix/assets.nix` -- a path that does not exist either, so it carried both defects this branch is about. What a developer hitting this panic needs is the layout to point at, which is a fact about this crate.
51 lines
2.1 KiB
Rust
51 lines
2.1 KiB
Rust
//! Resolve the on-disk path to hyperhive's static assets (branding +
|
|
//! claude prompts). Single source of truth for both the host daemon
|
|
//! (`hive-c0re`) and the in-container harness binaries so they agree
|
|
//! on the lookup contract.
|
|
//!
|
|
//! At runtime, the path is read from `$HIVE_ASSETS_DIR`. Setting it is
|
|
//! the deployment's job; this crate's contract is only that it names a
|
|
//! directory laid out like the packaged assets.
|
|
//! For `cargo run` outside nix, set it yourself:
|
|
//!
|
|
//! ```sh
|
|
//! HIVE_ASSETS_DIR=$(pwd)/dev-assets cargo run ...
|
|
//! ```
|
|
//!
|
|
//! where `dev-assets/` mirrors the nix output's `branding/` + `prompts/`
|
|
//! layout.
|
|
//!
|
|
//! Each crate that wants a specific asset goes through one of the
|
|
//! typed helpers (currently just `prompt_template()` — the branding
|
|
//! SVG used to live here too; the per-agent icon now 404s server-side
|
|
//! when unconfigured and falls back to a frontend-bundled default
|
|
//! client-side instead of a server-resolved runtime path, see
|
|
//! `hive-agent::web_ui::screen::serve_icon`) so the lookup contract is
|
|
//! centralised. Missing files panic at first call with a clear "set
|
|
//! `HIVE_ASSETS_DIR` + put the file at …" message.
|
|
|
|
use std::path::PathBuf;
|
|
|
|
/// Read `$HIVE_ASSETS_DIR`. Panics with a clear remediation message
|
|
/// when unset — every code path that calls into this module is one
|
|
/// the binary cannot run without, so a hard early failure is the
|
|
/// right shape.
|
|
fn dir() -> PathBuf {
|
|
match std::env::var("HIVE_ASSETS_DIR") {
|
|
Ok(v) if !v.is_empty() => PathBuf::from(v),
|
|
_ => panic!(
|
|
"HIVE_ASSETS_DIR is not set. A deployment sets it; when \
|
|
running a binary outside one, point it at a directory \
|
|
with `branding/` and `prompts/` subdirs. See \
|
|
hive-sh4re/src/assets.rs for the contract.",
|
|
),
|
|
}
|
|
}
|
|
|
|
/// `$HIVE_ASSETS_DIR/prompts/system.md` — the claude system prompt
|
|
/// template. `hive-agent::prompt::render` filters the role markers
|
|
/// inside it per agent / manager flavor.
|
|
#[must_use]
|
|
pub fn prompt_template() -> PathBuf {
|
|
dir().join("prompts/system.md")
|
|
}
|