diff --git a/data/scripts/o b/data/scripts/o index 88e51e7..6d48ccb 100755 --- a/data/scripts/o +++ b/data/scripts/o @@ -41,7 +41,7 @@ CTX_SESSION="" # Session name if in session/agent context CTX_AGENT="" # Agent name if in agent context # ── Known commands (to distinguish from context) ───────────────── -COMMANDS="read write rdwr ls new ctl prompt log tui env generate overview approve deny help" +COMMANDS="read write rdwr ls new ctl prompt log tui env generate overview bypass approve deny help" is_command() { local arg="$1" @@ -275,6 +275,30 @@ cmd_log() { ollie-9p read "${PREFIX}/log" | tail -n "$lines" } +cmd_bypass() { + if [[ -z "$CTX_SESSION" ]]; then + echo "error: bypass requires session context" >&2 + echo " usage: o bypass" >&2 + exit 1 + fi + local bypass_path="session/$CTX_SESSION/bypass" + local pending + pending=$(ollie-9p read "$bypass_path" 2>/dev/null || true) + if [[ -z "$pending" ]]; then + echo "no pending bypass request" + return 0 + fi + local id cmd cwd agent + id=$(echo "$pending" | jq -r '.id' 2>/dev/null) + cmd=$(echo "$pending" | jq -r '.cmd' 2>/dev/null) + cwd=$(echo "$pending" | jq -r '.cwd' 2>/dev/null) + agent=$(echo "$pending" | jq -r '.env.OLLIE_UNAME // "unknown"' 2>/dev/null) + echo "id: $id" + echo "agent: $agent" + echo "cwd: $cwd" + echo "cmd: $cmd" +} + cmd_approve() { if [[ -z "$CTX_SESSION" ]]; then echo "error: approve requires session context" >&2 @@ -468,6 +492,7 @@ Commands (availability depends on context): Session level (o ...): ls List session contents (agents, config) ctl Session control (kill, pause, resume) + bypass Show pending bypass request details approve [id] Approve pending bypass request deny [id] Deny pending bypass request read/write Access session files @@ -479,6 +504,7 @@ Commands (availability depends on context): prompt Interactive multi-line prompt REPL log [-n N] Show last N lines of agent log tui Launch tmux layout + bypass Show pending bypass request (session-level) approve [id] Approve pending bypass request (session-level) deny [id] Deny pending bypass request (session-level) read/write Access agent files (chat, cfg, etc.) @@ -497,9 +523,9 @@ Examples: o myproj ls # list session contents o myproj/coding prompt # interactive prompt o myproj/coding read chat # read chat stream + o myproj bypass # show pending bypass details o myproj approve # approve pending bypass o myproj approve 42 # approve specific request by id - o myproj/coding approve # same (bypass is per-session) o generate "explain monads" # one-shot, no session EOF } @@ -521,6 +547,7 @@ dispatch_cmd() { tui) cmd_tui "$@" ;; env) cmd_env "$@" ;; overview) cmd_overview "$@" ;; + bypass) cmd_bypass "$@" ;; approve) cmd_approve "$@" ;; deny) cmd_deny "$@" ;; help|-h|--help) cmd_help ;;