add claudePluginsAutoUpdate NixOS option, default false
This commit is contained in:
parent
6652ae90ab
commit
ca86bcf4bd
2 changed files with 31 additions and 1 deletions
|
|
@ -19,6 +19,7 @@ use crate::client;
|
||||||
|
|
||||||
const PLUGINS_PATH: &str = "/etc/hyperhive/claude-plugins.json";
|
const PLUGINS_PATH: &str = "/etc/hyperhive/claude-plugins.json";
|
||||||
const MARKETPLACES_PATH: &str = "/etc/hyperhive/claude-marketplaces.json";
|
const MARKETPLACES_PATH: &str = "/etc/hyperhive/claude-marketplaces.json";
|
||||||
|
const AUTO_UPDATE_PATH: &str = "/etc/hyperhive/claude-plugins-auto-update.json";
|
||||||
|
|
||||||
/// Add every marketplace from `/etc/hyperhive/claude-marketplaces.json`
|
/// Add every marketplace from `/etc/hyperhive/claude-marketplaces.json`
|
||||||
/// via `claude plugin marketplace add <source>`. Idempotent: re-add of
|
/// via `claude plugin marketplace add <source>`. Idempotent: re-add of
|
||||||
|
|
@ -66,6 +67,15 @@ async fn add_marketplaces() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Read the `hyperhive.claudePluginsAutoUpdate` flag written by the NixOS
|
||||||
|
/// module. Defaults to `false` when the file is absent or unparseable.
|
||||||
|
async fn auto_update_enabled() -> bool {
|
||||||
|
match tokio::fs::read_to_string(AUTO_UPDATE_PATH).await {
|
||||||
|
Ok(s) => serde_json::from_str::<bool>(s.trim()).unwrap_or(false),
|
||||||
|
Err(_) => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Update all configured plugin marketplaces. Non-fatal — logs a warning
|
/// Update all configured plugin marketplaces. Non-fatal — logs a warning
|
||||||
/// on failure but does not abort the install sequence.
|
/// on failure but does not abort the install sequence.
|
||||||
async fn update_marketplaces() {
|
async fn update_marketplaces() {
|
||||||
|
|
@ -112,7 +122,11 @@ pub async fn install_configured(socket: &Path, notify_recipient: Option<&str>) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
add_marketplaces().await;
|
add_marketplaces().await;
|
||||||
update_marketplaces().await;
|
if auto_update_enabled().await {
|
||||||
|
update_marketplaces().await;
|
||||||
|
} else {
|
||||||
|
tracing::debug!("claudePluginsAutoUpdate=false, skipping marketplace update");
|
||||||
|
}
|
||||||
for spec in specs {
|
for spec in specs {
|
||||||
match Command::new("claude")
|
match Command::new("claude")
|
||||||
.args(["plugin", "install", &spec])
|
.args(["plugin", "install", &spec])
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,19 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
options.hyperhive.claudePluginsAutoUpdate = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
When true, the harness runs `claude plugin marketplace update`
|
||||||
|
before installing plugins at boot, pulling the latest index from
|
||||||
|
all configured marketplaces. Disabled by default — most agents
|
||||||
|
want pinned plugin versions and the network round-trip adds to
|
||||||
|
boot time. Enable for agents that should always install the latest
|
||||||
|
available version of their plugins.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
environment.etc."hyperhive/extra-mcp.json".text = builtins.toJSON config.hyperhive.extraMcpServers;
|
environment.etc."hyperhive/extra-mcp.json".text = builtins.toJSON config.hyperhive.extraMcpServers;
|
||||||
|
|
||||||
|
|
@ -161,6 +174,9 @@
|
||||||
environment.etc."hyperhive/claude-marketplaces.json".text =
|
environment.etc."hyperhive/claude-marketplaces.json".text =
|
||||||
builtins.toJSON config.hyperhive.claudeMarketplaces;
|
builtins.toJSON config.hyperhive.claudeMarketplaces;
|
||||||
|
|
||||||
|
environment.etc."hyperhive/claude-plugins-auto-update.json".text =
|
||||||
|
builtins.toJSON config.hyperhive.claudePluginsAutoUpdate;
|
||||||
|
|
||||||
boot.isNspawnContainer = true;
|
boot.isNspawnContainer = true;
|
||||||
|
|
||||||
# `claude-code` is unfree. Each per-agent container's nixosConfiguration
|
# `claude-code` is unfree. Each per-agent container's nixosConfiguration
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue