79 lines
2.5 KiB
Bash
Executable File
79 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PATTERN="${1:-gemini-3-flash}"
|
|
STATE_FILE="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/openclaw.json"
|
|
|
|
if [[ ! -f "$STATE_FILE" ]]; then
|
|
for alt in \
|
|
"${OPENCLAW_STATE_DIR:-$HOME/.openclaw/state}/openclaw.json" \
|
|
"${OPENCLAW_CONFIG_DIR:-$HOME/.openclaw/config}/openclaw.json" \
|
|
"/opt/openclaw/state/openclaw.json"; do
|
|
if [[ -f "$alt" ]]; then
|
|
STATE_FILE="$alt"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [[ ! -f "$STATE_FILE" ]]; then
|
|
echo "ERROR: openclaw.json not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Config: $STATE_FILE"
|
|
echo "Match pattern: $PATTERN"
|
|
|
|
echo "\n== Config references =="
|
|
rg -n "$PATTERN" "$STATE_FILE" || true
|
|
|
|
echo "\n== Cron payload model/message references =="
|
|
openclaw cron list --json 2>/dev/null | jq -r --arg pat "$PATTERN" '
|
|
.jobs[]
|
|
| {
|
|
id,
|
|
name,
|
|
agentId,
|
|
payloadModel: (.payload.model // ""),
|
|
message: (.payload.message // "")
|
|
}
|
|
| select((.payloadModel|test($pat;"i")) or (.message|test($pat;"i")))
|
|
' || true
|
|
|
|
echo "\n== Session model pins =="
|
|
for agent_dir in /home/node/.openclaw/agents/*; do
|
|
[[ -d "$agent_dir" ]] || continue
|
|
agent_id="$(basename "$agent_dir")"
|
|
sess_file="$agent_dir/sessions/sessions.json"
|
|
[[ -f "$sess_file" ]] || continue
|
|
jq -r --arg aid "$agent_id" --arg pat "$PATTERN" '
|
|
to_entries[]
|
|
| select((.value.model // "" | tostring | test($pat;"i")))
|
|
| "agent=" + $aid + " session=" + .key + " model=" + (.value.model|tostring)
|
|
' "$sess_file" || true
|
|
done
|
|
|
|
echo "\n== Invalid llm-proxy refs against local catalog =="
|
|
node - <<'NODE' "$STATE_FILE"
|
|
const fs=require('fs');
|
|
const p=process.argv[2];
|
|
const j=JSON.parse(fs.readFileSync(p,'utf8'));
|
|
const catalog=new Set((j.models?.providers?.['llm-proxy']?.models||[]).map(m=>'llm-proxy/'+m.id));
|
|
const refs=[];
|
|
const push=(where,val)=>{ if(!val) return; if(Array.isArray(val)){val.forEach((v,i)=>refs.push([`${where}[${i}]`,v]));} else refs.push([where,val]); };
|
|
push('agents.defaults.model.primary', j.agents?.defaults?.model?.primary);
|
|
push('agents.defaults.model.fallbacks', j.agents?.defaults?.model?.fallbacks);
|
|
for (const a of (j.agents?.list||[])) {
|
|
push(`agents.list[${a.id}].model.primary`, a.model?.primary);
|
|
push(`agents.list[${a.id}].model.fallbacks`, a.model?.fallbacks);
|
|
}
|
|
let bad=0;
|
|
for (const [where,val] of refs){
|
|
if (typeof val==='string' && val.startsWith('llm-proxy/') && !catalog.has(val)) {
|
|
bad++;
|
|
console.log(`INVALID ${where} -> ${val}`);
|
|
}
|
|
}
|
|
if(!bad) console.log('none');
|
|
NODE
|