fix(lib): expose _sanitize_herdr_agent_name at top-level and handle agent prompt in herdr shim

This commit is contained in:
2026-08-14 10:58:11 +09:00
parent 6699159c76
commit 1c24732be0
+58 -2
View File
@@ -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