Merge nucleic/brisk-slate-viper-tkai into dev

This commit is contained in:
2026-07-22 22:03:55 -07:00
parent 7443a7f431
commit 24c953d39b
2 changed files with 40 additions and 0 deletions
+15
View File
@@ -105,6 +105,12 @@ struct Batch<'a> {
batch_type: &'static str,
source: &'static str,
session_id: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
environment_kind: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
environment_id: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
environment_label: Option<&'a str>,
shell_id: &'a str,
parent_shell: Option<&'a str>,
events: &'a [Event],
@@ -119,6 +125,9 @@ struct Config {
hook_url: Option<HookUrl>,
token: Option<String>,
session_id: Option<String>,
environment_kind: Option<String>,
environment_id: Option<String>,
environment_label: Option<String>,
spool: Option<PathBuf>,
}
@@ -159,6 +168,9 @@ impl Config {
hook_url,
token: std::env::var("NUCLEIC_HOOK_TOKEN").ok(),
session_id: std::env::var("NUCLEIC_SESSION_ID").ok(),
environment_kind: std::env::var("NUCLEIC_SHELL_ENVIRONMENT_KIND").ok(),
environment_id: std::env::var("NUCLEIC_SHELL_ENVIRONMENT_ID").ok(),
environment_label: std::env::var("NUCLEIC_SHELL_ENVIRONMENT_LABEL").ok(),
spool,
})
}
@@ -609,6 +621,9 @@ fn flusher(cfg: Config, shell_id: String, parent_shell: Option<String>, rx: mpsc
batch_type: "shell-batch",
source: "nash",
session_id: cfg.session_id.as_deref(),
environment_kind: cfg.environment_kind.as_deref(),
environment_id: cfg.environment_id.as_deref(),
environment_label: cfg.environment_label.as_deref(),
shell_id: &shell_id,
parent_shell: parent_shell.as_deref(),
events: buf,
+25
View File
@@ -129,6 +129,15 @@ impl Sink {
}
events
}
fn next_batch(&self) -> serde_json::Value {
let (auth, batch) = self
.rx
.recv_timeout(Duration::from_secs(5))
.expect("shell batch");
assert_eq!(auth.as_deref(), Some("Bearer test-token"));
batch
}
}
impl Drop for Sink {
@@ -162,6 +171,9 @@ fn run_nash(sink: &Sink, script: &str) -> std::process::ExitStatus {
.env("NUCLEIC_SHELL_SOCKET", sink.socket())
.env("NUCLEIC_HOOK_TOKEN", "test-token")
.env("NUCLEIC_SESSION_ID", "sess-1")
.env("NUCLEIC_SHELL_ENVIRONMENT_KIND", "agent")
.env("NUCLEIC_SHELL_ENVIRONMENT_ID", "agent")
.env("NUCLEIC_SHELL_ENVIRONMENT_LABEL", "Agent")
.env_remove("NUCLEIC_SHELL_PARENT")
.status()
.unwrap()
@@ -198,6 +210,18 @@ fn exec_events_flow() {
assert_eq!(false_ev["exitCode"], 1);
}
#[test]
fn emitter_environment_flows_on_batch_envelope() {
let sink = Sink::start();
let status = run_nash(&sink, "true");
assert_eq!(status.code(), Some(0));
let batch = sink.next_batch();
assert_eq!(batch["environmentKind"], "agent");
assert_eq!(batch["environmentId"], "agent");
assert_eq!(batch["environmentLabel"], "Agent");
}
#[test]
fn external_command_exit_codes() {
let sink = Sink::start();
@@ -509,6 +533,7 @@ fn spool_fallback_when_socket_absent() {
.env("NUCLEIC_SHELL_SOCKET", "/nonexistent/control.sock")
.env("NUCLEIC_SHELL_SPOOL", &dir)
.env("NUCLEIC_SESSION_ID", "sess-1")
.env_remove("NUCLEIC_SHELL_HOOK_URL")
.env_remove("NUCLEIC_SHELL_PARENT")
.status()
.unwrap();