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)}"
|
WORKSPACE_ROOT="${WORKSPACE_ROOT:-$(cd "$SKILL_DIR/../.." && pwd)}"
|
||||||
AGENT_SESSIONS_YAML="${AGENT_SESSIONS_YAML:-$WORKSPACE_ROOT/.mam/agent-sessions.yaml}"
|
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
|
# 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
|
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
|
if [ -d "$dir" ] && [[ ":$PATH:" != *":$dir:"* ]]; then
|
||||||
@@ -209,6 +221,29 @@ fi
|
|||||||
shift
|
shift
|
||||||
|
|
||||||
case "$cmd" in
|
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)
|
has-session)
|
||||||
sess=""
|
sess=""
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
@@ -224,7 +259,26 @@ case "$cmd" in
|
|||||||
*) shift ;;
|
*) shift ;;
|
||||||
esac
|
esac
|
||||||
done
|
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)
|
new-session)
|
||||||
name="" ws="" run_cmd=""
|
name="" ws="" run_cmd=""
|
||||||
@@ -1606,8 +1660,10 @@ _pane_dialog_open() {
|
|||||||
send_keys_safe() {
|
send_keys_safe() {
|
||||||
local sess="$1" text="$2" job_id="${3:-adhoc}"
|
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
|
# 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
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user