fix(lib): expose _sanitize_herdr_agent_name at top-level and handle agent prompt in herdr shim
This commit is contained in:
+58
-2
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user