From dc57c45db9e8c4ae01c61993da8a72c417841f49 Mon Sep 17 00:00:00 2001 From: Shun Kakinoki Date: Sun, 12 Apr 2026 12:57:18 +0000 Subject: [PATCH 1/3] fix(obsidian): seed per-vault config and enable openclaw OTLP - Obsidian headless daemon logs ENOENT on every start because wiki.json (per-vault config) was never created by activate.sh. Now seeds missing .json files with {} on activation. - Enable diagnostics-otel plugin and top-level diagnostics config in both openclaw templates (traces, metrics, logs via http/protobuf). --- config/obsidian/activate.sh | 20 +++++++++++++++++--- spec/activate_config_spec.sh | 7 ++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/config/obsidian/activate.sh b/config/obsidian/activate.sh index 63e037fb1..c0032a243 100755 --- a/config/obsidian/activate.sh +++ b/config/obsidian/activate.sh @@ -6,6 +6,20 @@ CONFIG_JSON="$1" HOME_DIR="$2" SED_BIN="$3" -mkdir -p "$HOME_DIR/.config/obsidian" -"$SED_BIN" "s|__HOME_DIR__|$HOME_DIR|g" "$CONFIG_JSON" >"$HOME_DIR/.config/obsidian/obsidian.json" -chmod 644 "$HOME_DIR/.config/obsidian/obsidian.json" +OBS_DIR="$HOME_DIR/.config/obsidian" +mkdir -p "$OBS_DIR" + +"$SED_BIN" "s|__HOME_DIR__|$HOME_DIR|g" "$CONFIG_JSON" >"$OBS_DIR/obsidian.json" + +# Obsidian expects a per-vault config file named .json for each +# vault listed in obsidian.json. Seed any missing ones with an empty object +# so the daemon does not log ENOENT on every start. +python3 -c ' +import json, sys, os +cfg = json.load(open(sys.argv[1])) +obs_dir = sys.argv[2] +for vid in cfg.get("vaults", {}): + p = os.path.join(obs_dir, vid + ".json") + if not os.path.exists(p): + open(p, "w").write("{}") +' "$OBS_DIR/obsidian.json" "$OBS_DIR" diff --git a/spec/activate_config_spec.sh b/spec/activate_config_spec.sh index 1cfecf883..88db01c29 100644 --- a/spec/activate_config_spec.sh +++ b/spec/activate_config_spec.sh @@ -144,7 +144,12 @@ End It 'creates obsidian config directory' When run bash -c "grep 'mkdir -p' '$SCRIPT'" -The output should include 'obsidian' +The output should include 'OBS_DIR' +End + +It 'seeds missing per-vault config files' +When run bash -c "grep 'wiki.json\|vault.*json\|vid.*json' '$SCRIPT'" +The output should not equal '' End End From 186ec5f3f254bcd348ab1a29d6e5199426b74256 Mon Sep 17 00:00:00 2001 From: Shun Kakinoki Date: Sun, 12 Apr 2026 12:58:57 +0000 Subject: [PATCH 2/3] revert: remove obsidian activate.sh changes --- config/obsidian/activate.sh | 20 +++----------------- spec/activate_config_spec.sh | 7 +------ 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/config/obsidian/activate.sh b/config/obsidian/activate.sh index c0032a243..63e037fb1 100755 --- a/config/obsidian/activate.sh +++ b/config/obsidian/activate.sh @@ -6,20 +6,6 @@ CONFIG_JSON="$1" HOME_DIR="$2" SED_BIN="$3" -OBS_DIR="$HOME_DIR/.config/obsidian" -mkdir -p "$OBS_DIR" - -"$SED_BIN" "s|__HOME_DIR__|$HOME_DIR|g" "$CONFIG_JSON" >"$OBS_DIR/obsidian.json" - -# Obsidian expects a per-vault config file named .json for each -# vault listed in obsidian.json. Seed any missing ones with an empty object -# so the daemon does not log ENOENT on every start. -python3 -c ' -import json, sys, os -cfg = json.load(open(sys.argv[1])) -obs_dir = sys.argv[2] -for vid in cfg.get("vaults", {}): - p = os.path.join(obs_dir, vid + ".json") - if not os.path.exists(p): - open(p, "w").write("{}") -' "$OBS_DIR/obsidian.json" "$OBS_DIR" +mkdir -p "$HOME_DIR/.config/obsidian" +"$SED_BIN" "s|__HOME_DIR__|$HOME_DIR|g" "$CONFIG_JSON" >"$HOME_DIR/.config/obsidian/obsidian.json" +chmod 644 "$HOME_DIR/.config/obsidian/obsidian.json" diff --git a/spec/activate_config_spec.sh b/spec/activate_config_spec.sh index 88db01c29..1cfecf883 100644 --- a/spec/activate_config_spec.sh +++ b/spec/activate_config_spec.sh @@ -144,12 +144,7 @@ End It 'creates obsidian config directory' When run bash -c "grep 'mkdir -p' '$SCRIPT'" -The output should include 'OBS_DIR' -End - -It 'seeds missing per-vault config files' -When run bash -c "grep 'wiki.json\|vault.*json\|vid.*json' '$SCRIPT'" -The output should not equal '' +The output should include 'obsidian' End End From 90bc1aa63e86672e621def64758add262dbb19a3 Mon Sep 17 00:00:00 2001 From: Shun Kakinoki Date: Sun, 12 Apr 2026 13:39:44 +0000 Subject: [PATCH 3/3] fix(openclaw): use nix-provided kubectl for OTLP endpoint resolution --- config/openclaw/default.nix | 2 ++ config/openclaw/hydrate.sh | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config/openclaw/default.nix b/config/openclaw/default.nix index 2a341757c..dfd26729a 100644 --- a/config/openclaw/default.nix +++ b/config/openclaw/default.nix @@ -23,10 +23,12 @@ let if host.isKyber then { chromium = "${pkgs.chromium}"; + kubectl = "${pkgs.kubectl}/bin/kubectl"; } else { chromium = "/unused"; + kubectl = "/usr/bin/true"; } ); names = builtins.attrNames vars; diff --git a/config/openclaw/hydrate.sh b/config/openclaw/hydrate.sh index 018e267ef..13a8cb2a5 100644 --- a/config/openclaw/hydrate.sh +++ b/config/openclaw/hydrate.sh @@ -79,7 +79,7 @@ if [ "$MODE" = "gateway" ]; then CHROMIUM_PATH="@chromium@/bin/chromium" # Resolve Alloy OTLP ClusterIP for local telemetry export - OTEL_ENDPOINT="http://$(kubectl get svc alloy -n alloy -o jsonpath='{.spec.clusterIP}' 2>/dev/null || echo localhost):4318" + OTEL_ENDPOINT="http://$(@kubectl@ get svc alloy -n alloy -o jsonpath='{.spec.clusterIP}' 2>/dev/null || echo localhost):4318" @sed@ \ -e "s|__CLIPROXY_API_KEY__|${CLIPROXY_API_KEY}|g" \