diff --git a/.agents/skills/lib.sh b/.agents/skills/lib.sh index 041f66d..bdf409f 100644 --- a/.agents/skills/lib.sh +++ b/.agents/skills/lib.sh @@ -26,6 +26,18 @@ export PYTHONPATH="$SKILL_DIR:${PYTHONPATH:-}" WORKSPACE_ROOT="${WORKSPACE_ROOT:-$(cd "$SKILL_DIR/../.." && pwd)}" AGENT_SESSIONS_YAML="${AGENT_SESSIONS_YAML:-$WORKSPACE_ROOT/.mam/agent-sessions.yaml}" +_sanitize_herdr_agent_name() { + local n="$1" + if [ "${#n}" -le 32 ]; then + printf '%s\n' "$n" + return 0 + fi + local p="${n:0:16}" + local s="${n: -15}" + local res="${p}-${s}" + printf '%s\n' "${res:0:32}" +} + # Add common Homebrew and local binary paths to PATH to ensure they are available in non-interactive shells for dir in /home/linuxbrew/.linuxbrew/bin /home/linuxbrew/.linuxbrew/sbin "$HOME/.local/bin" "$HOME/.npm-global/bin"; do if [ -d "$dir" ] && [[ ":$PATH:" != *":$dir:"* ]]; then @@ -209,6 +221,29 @@ fi shift case "$cmd" in + agent) + sub="${1:-}" + shift || true + if [ "$sub" = "prompt" ] && [ $# -ge 2 ]; then + t="$1" + txt="$2" + shift 2 + at=$(_sanitize_herdr_agent_name "$t") + _real_herdr agent prompt "$at" "$txt" "$@" 2>/dev/null || _real_herdr agent prompt "$t" "$txt" "$@" + elif [ "$sub" = "get" ] && [ $# -ge 1 ]; then + t="$1" + shift + at=$(_sanitize_herdr_agent_name "$t") + _real_herdr agent get "$at" "$@" 2>/dev/null || _real_herdr agent get "$t" "$@" + elif [ "$sub" = "read" ] && [ $# -ge 1 ]; then + t="$1" + shift + at=$(_sanitize_herdr_agent_name "$t") + _real_herdr agent read "$at" "$@" 2>/dev/null || _real_herdr agent read "$t" "$@" + else + _real_herdr agent "$sub" "$@" + fi + ;; has-session) sess="" while [ $# -gt 0 ]; do @@ -224,7 +259,26 @@ case "$cmd" in *) shift ;; esac done - _real_herdr agent get "$(_sanitize_herdr_agent_name "$sess")" >/dev/null 2>&1 || _real_herdr agent get "$sess" >/dev/null + if _real_herdr agent get "$(_sanitize_herdr_agent_name "$sess")" >/dev/null 2>&1 || _real_herdr agent get "$sess" >/dev/null 2>&1; then + exit 0 + fi + if _real_herdr agent list 2>/dev/null | TARGET_NAME="$sess" python3 -c " +import sys, json, os +tn = os.environ.get('TARGET_NAME', '') +try: + d = json.loads(sys.stdin.read()) + agents = d.get('result', {}).get('agents', []) + for a in agents: + an = a.get('name', '') + if an == tn or (len(tn) > 16 and an.startswith(tn[:14]) and an.endswith(tn[-12:])): + sys.exit(0) +except Exception: + pass +sys.exit(1) +"; then + exit 0 + fi + exit 1 ;; new-session) name="" ws="" run_cmd="" @@ -1606,8 +1660,10 @@ _pane_dialog_open() { send_keys_safe() { local sess="$1" text="$2" job_id="${3:-adhoc}" + local agent_target + agent_target=$(_sanitize_herdr_agent_name "$sess") # Native herdr 0.8+ fast path: agent prompt handles atomic text + enter submission - if _sks_herdr agent prompt "$sess" "$text" >/dev/null 2>&1; then + if _sks_herdr agent prompt "$agent_target" "$text" >/dev/null 2>&1 || _sks_herdr agent prompt "$sess" "$text" >/dev/null 2>&1; then return 0 fi