diff --git a/data/scripts/o b/data/scripts/o index 2239dda..f2caa11 100755 --- a/data/scripts/o +++ b/data/scripts/o @@ -125,6 +125,17 @@ resolve_path() { # ── Context requirements for specific commands ────────────────── +# Resolve session and agent from positional args or env vars. +# Usage: resolve_context "$@" → returns (s, a) by modifying caller's vars. +# Pass "$@" from the calling command; it shifts positional args. +resolve_context() { + local _s _a + _s="${1:-${session:-}}" + [[ -n "$1" ]] && shift + _a="${1:-${agent:-}}" + echo "$_s|$_a" +} + require_session() { local s="${session:-}" if [[ -z "$s" ]]; then @@ -240,16 +251,32 @@ cmd_ctl() { echo " commands: stop, compact, kill, clear, model , backend , cwd " >&2 exit 1 fi - local path - path=$(agent_path) || exit 1 - echo "$*" | ollie-9p write "$path/ctl" + local ctx s a + ctx=$(resolve_context "$@") || exit 1 + s="${ctx%%|*}" + a="${ctx##*|}" + shift; shift + if [[ -z "$s" || -z "$a" ]]; then + echo "error: session and agent are required" >&2 + echo " usage: o ctl [args...]" >&2 + echo " or: export session= agent=" >&2 + exit 1 + fi + echo "$*" | ollie-9p write "session/$s/agent/$a/ctl" } cmd_prompt() { - local s a path - s=$(require_session) || exit 1 - a=$(require_agent "$s") || exit 1 - path="session/$s/agent/$a" + local ctx s a + ctx=$(resolve_context "$@") || exit 1 + s="${ctx%%|*}" + a="${ctx##*|}" + if [[ -z "$s" || -z "$a" ]]; then + echo "error: session and agent are required" >&2 + echo " usage: o prompt " >&2 + echo " or: export session= agent=" >&2 + exit 1 + fi + local path="session/$s/agent/$a" echo "[$s/$a]" echo "Type . on a blank line to send, Ctrl+D to exit." @@ -335,9 +362,17 @@ cmd_prompt() { } cmd_tail() { - local path - path=$(agent_path) || exit 1 - exec ollie-9p read "$path/chat" + local ctx s a + ctx=$(resolve_context "$@") || exit 1 + s="${ctx%%|*}" + a="${ctx##*|}" + if [[ -z "$s" || -z "$a" ]]; then + echo "error: session and agent are required" >&2 + echo " usage: o tail " >&2 + echo " or: export session= agent=" >&2 + exit 1 + fi + exec ollie-9p read "session/$s/agent/$a/chat" } cmd_env() { @@ -356,14 +391,27 @@ cmd_env() { } cmd_stop() { - local path - path=$(agent_path) || exit 1 - echo "stop" | ollie-9p write "$path/ctl" + local ctx s a + ctx=$(resolve_context "$@") || exit 1 + s="${ctx%%|*}" + a="${ctx##*|}" + if [[ -z "$s" || -z "$a" ]]; then + echo "error: session and agent are required" >&2 + echo " usage: o stop " >&2 + echo " or: export session= agent=" >&2 + exit 1 + fi + echo "stop" | ollie-9p write "session/$s/agent/$a/ctl" } cmd_kill() { - local s - s=$(require_session) || exit 1 + local s="${1:-${session:-}}" + if [[ -z "$s" ]]; then + echo "error: no session set" >&2 + echo " usage: o kill " >&2 + echo " or: export session=" >&2 + exit 1 + fi echo "kill" | ollie-9p write "session/$s/ctl" } @@ -382,9 +430,10 @@ cmd_tui() { fi # Accept optional positional args: o tui [session] [agent] - s="${1:-${session:-}}" - if [[ -n "$1" ]]; then shift; fi - a="${1:-${agent:-}}" + local ctx + ctx=$(resolve_context "$@") + s="${ctx%%|*}" + a="${ctx##*|}" if [[ -z "$s" ]]; then echo "error: no session set" >&2