feat(herdr): complete Herdr 0.8.0 adaptation and sanitize module
This commit is contained in:
+37
-28
@@ -28,14 +28,19 @@ AGENT_SESSIONS_YAML="${AGENT_SESSIONS_YAML:-$WORKSPACE_ROOT/.mam/agent-sessions.
|
||||
|
||||
_sanitize_herdr_agent_name() {
|
||||
local n="$1"
|
||||
if [ "${#n}" -le 32 ]; then
|
||||
printf '%s\n' "$n"
|
||||
if [ -z "$n" ]; then
|
||||
printf 'agent\n'
|
||||
return 0
|
||||
fi
|
||||
local p="${n:0:16}"
|
||||
local s="${n: -15}"
|
||||
local res="${p}-${s}"
|
||||
printf '%s\n' "${res:0:32}"
|
||||
local s
|
||||
s=$(echo "$n" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9_-]/-/g')
|
||||
if [[ ! "$s" =~ ^[a-z] ]]; then s="x-$s"; fi
|
||||
if [ "${#s}" -gt 32 ]; then
|
||||
local p="${s:0:16}"
|
||||
local suf="${s: -15}"
|
||||
s="${p}-${suf}"
|
||||
fi
|
||||
printf '%s\n' "${s:0:32}"
|
||||
}
|
||||
|
||||
# Add common Homebrew and local binary paths to PATH to ensure they are available in non-interactive shells
|
||||
@@ -202,17 +207,20 @@ _real_herdr() {
|
||||
|
||||
_sanitize_herdr_agent_name() {
|
||||
local n="$1"
|
||||
if [ "${#n}" -le 32 ]; then
|
||||
printf '%s\n' "$n"
|
||||
if [ -z "$n" ]; then
|
||||
printf 'agent\n'
|
||||
return 0
|
||||
fi
|
||||
local p="${n:0:16}"
|
||||
local s="${n: -15}"
|
||||
local res="${p}-${s}"
|
||||
printf '%s\n' "${res:0:32}"
|
||||
local s
|
||||
s=$(echo "$n" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9_-]/-/g')
|
||||
if [[ ! "$s" =~ ^[a-z] ]]; then s="x-$s"; fi
|
||||
if [ "${#s}" -gt 32 ]; then
|
||||
local p="${s:0:16}"
|
||||
local suf="${s: -15}"
|
||||
s="${p}-${suf}"
|
||||
fi
|
||||
printf '%s\n' "${s:0:32}"
|
||||
}
|
||||
|
||||
wrapper_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
cmd="${1:-}"
|
||||
if [ -z "$cmd" ]; then
|
||||
echo "herdr shim: no command specified" >&2
|
||||
@@ -434,7 +442,7 @@ except Exception:
|
||||
fi
|
||||
|
||||
if [ "$split_dir" = "right" ] || [ "$split_dir" = "down" ]; then
|
||||
split_json=$(_real_herdr pane split --pane "$sample_pane" --direction "$split_dir" --cwd "${ws:-.}" --no-focus 2>/dev/null || echo "")
|
||||
split_json=$(_real_herdr pane split --pane "$sample_pane" --direction "$split_dir" --cwd "${ws:-.}" $env_flags --no-focus 2>/dev/null || echo "")
|
||||
target_pane=$(echo "$split_json" | python3 -c "
|
||||
import sys, json
|
||||
try:
|
||||
@@ -448,7 +456,7 @@ except Exception:
|
||||
# W2b: Overflow threshold reached — force create fresh workspace
|
||||
existing_ws=""
|
||||
else
|
||||
split_json=$(_real_herdr pane split --pane "$sample_pane" --direction right --cwd "${ws:-.}" --no-focus 2>/dev/null || echo "")
|
||||
split_json=$(_real_herdr pane split --pane "$sample_pane" --direction right --cwd "${ws:-.}" $env_flags --no-focus 2>/dev/null || echo "")
|
||||
target_pane=$(echo "$split_json" | python3 -c "
|
||||
import sys, json
|
||||
try:
|
||||
@@ -462,7 +470,7 @@ except Exception:
|
||||
fi
|
||||
|
||||
if [ -z "$existing_ws" ] || [ -z "$target_pane" ]; then
|
||||
ws_json=$(_real_herdr workspace create --cwd "${ws:-.}" --no-focus 2>/dev/null || echo "")
|
||||
ws_json=$(_real_herdr workspace create --cwd "${ws:-.}" $env_flags --no-focus 2>/dev/null || echo "")
|
||||
target_pane=$(echo "$ws_json" | python3 -c "
|
||||
import sys, json
|
||||
try:
|
||||
@@ -475,24 +483,25 @@ except Exception:
|
||||
" 2>/dev/null || echo "")
|
||||
fi
|
||||
|
||||
if [ -z "$target_pane" ]; then
|
||||
echo "Error: target_pane allocation failed for $name" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$kind" ]; then
|
||||
echo "Error: unable to determine agent kind for session $name" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# W5/W6: Backoff retries (0.5 -> 1 -> 2), abort immediately on usage or unknown flag errors
|
||||
res=""
|
||||
success=0
|
||||
backoffs=(0.5 1 2)
|
||||
agent_name=$(_sanitize_herdr_agent_name "$name")
|
||||
for i in $(seq 0 2); do
|
||||
if [ -n "$target_pane" ]; then
|
||||
if [ -n "$final_cmd" ]; then
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"${kind:-claude}\" --pane \"$target_pane\" $env_flags -- $final_cmd" 2>&1 || true)
|
||||
else
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"${kind:-claude}\" --pane \"$target_pane\" $env_flags" 2>&1 || true)
|
||||
fi
|
||||
if [ -n "$final_cmd" ]; then
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"$kind\" --pane \"$target_pane\" -- $final_cmd" 2>&1 || true)
|
||||
else
|
||||
if [ -n "$final_cmd" ]; then
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"${kind:-claude}\" $env_flags -- $final_cmd" 2>&1 || true)
|
||||
else
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"${kind:-claude}\" $env_flags" 2>&1 || true)
|
||||
fi
|
||||
res=$(eval "_real_herdr agent start \"$agent_name\" --kind \"$kind\" --pane \"$target_pane\"" 2>&1 || true)
|
||||
fi
|
||||
if echo "$res" | grep -q "agent_started"; then
|
||||
success=1
|
||||
|
||||
Reference in New Issue
Block a user