remove dead session scripts s/{sh,b,bfg,bbg}

This commit is contained in:
Ollie Agent 2026-07-30 21:24:54 +02:00
parent 0cea373207
commit a306cbbce6
4 changed files with 0 additions and 519 deletions

View File

@ -1,191 +0,0 @@
#!/usr/bin/env bash
# s/b: one-shot ollie query via s/ namespace.
#
# Usage: job [flags] [prompt...]
# echo "prompt" | job [flags]
set -euo pipefail
MOUNT=${OLLIE:-$HOME/mnt/ollie}
cmd=${0##*/}
die() { printf '%s: %s\n' "$cmd" "$*" >&2; exit 1; }
# Retry a command once after remounting on I/O error.
try() { "$@" 2>/dev/null || { ollie-remount && "$@"; }; }
# Write $1 to file $2, retrying after remount on failure.
wf() { printf '%s\n' "$1" > "$2" 2>/dev/null || { ollie-remount && printf '%s\n' "$1" > "$2"; }; }
usage() {
cat <<EOF
usage: $cmd [flags] [prompt...]
echo "prompt" | $cmd [flags]
Flags:
-name NAME session name
-cwd DIR working directory (default: pwd)
-agent AGENT agent config name
-backend BACKEND backend override (e.g. ollama, anthropic)
-model MODEL model override
-json append JSON-only instruction to prompt
-parallel N run N times in parallel (default: 1)
-keep do not kill session(s) after printing result
-bg submit and exit immediately; prints session path(s); implies -keep
-failfast on first failure, cancel remaining parallel jobs and exit
-help show this help
EOF
exit 0
}
name=; cwd=; agent=; backend=; model=; json=0; parallel=1; keep=0; bg=0; failfast=0
while [ $# -gt 0 ]; do
case $1 in
-name) name=$2; shift ;;
-cwd) cwd=$2; shift ;;
-agent) agent=$2; shift ;;
-backend) backend=$2; shift ;;
-model) model=$2; shift ;;
-json) json=1 ;;
-parallel) parallel=$2; shift ;;
-keep) keep=1 ;;
-bg) bg=1; keep=1 ;;
-failfast) failfast=1 ;;
-help) usage ;;
--) shift; break ;;
-*) die "unknown flag: $1" ;;
*) break ;;
esac
shift
done
if [ $# -gt 0 ] && ! [ -t 0 ]; then
prompt="$*"$'\n'"$(cat)"
elif [ $# -gt 0 ]; then
prompt="$*"
elif ! [ -t 0 ]; then
prompt=$(cat)
else
die "prompt required: pass as arguments or pipe via stdin"
fi
[ -z "$prompt" ] && die "empty prompt"
if [ "$json" -eq 1 ]; then
prompt="$prompt"$'\n\n'"Respond with valid JSON only, no prose."
fi
cwd=${cwd:-$(pwd)}
base=${name:-$(date +%s%N)-$$}
# JSON-escape a string for embedding in a JSON value.
jsonesc() {
printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/\t/\\t/g' | tr '\n' '\1' | sed 's/\x01/\\n/g'
}
# Foreground generation via /generate (net/dns pattern).
fn_generate() {
local json='{"prompt":"'$(jsonesc "$prompt")'"'
[ -n "$backend" ] && json="$json,\"backend\":\"$backend\""
[ -n "$model" ] && json="$json,\"model\":\"$model\""
json="$json}"
printf '%s' "$json" | 9p rdwr ollie/generate || die "generate failed (is olliesrv running?)"
}
fn_run_one() {
local id=$1
local B="$MOUNT/s/$id"
# Build as a single string: bash's printf builtin issues one write() per call;
# the server processes each write independently, so partial KV would fail.
local kv="name=${id}
cwd=${cwd}"
[ -n "$agent" ] && kv="${kv}
agent=${agent}"
[ -n "$backend" ] && kv="${kv}
backend=${backend}"
[ -n "$model" ] && kv="${kv}
model=${model}"
wf "$kv" "$MOUNT/s/new" || die "failed to create session"
# Poll until the session directory is visible (FUSE entry cache may lag).
local deadline=$(( $(date +%s) + 5 ))
until [ -d "$B" ] || [ "$(date +%s)" -ge "$deadline" ]; do sleep 0.05; done
[ -d "$B" ] || die "timeout waiting for session $id"
wf "$prompt" "$B/prompt" || die "failed to submit prompt"
if [ "$bg" -eq 1 ]; then
printf '%s\n' "$B"
return 0
fi
# Poll state until idle (avoids blocking FUSE reads that can deadlock
# when parallel sessions access the same mount).
local state
while true; do
state=$(try cat "$B/state" | tr -d '[:space:]') || break
[ "$state" = "idle" ] && break
sleep 0.5
done
local rc=0
case "$state" in
failed*|error*) rc=1 ;;
esac
# Print result: chat content from offset onward.
local offset
offset=$(try cat "$B/offset" || echo 0)
try tail -c +$((offset + 1)) "$B/chat"
printf '\n'
[ "$keep" -eq 0 ] && rm -r "$B" 2>/dev/null || true
return $rc
}
rc=0
if [ "$bg" -eq 1 ]; then
# Background mode: must use sessions (persistent state to poll later).
if [ "$parallel" -gt 1 ]; then
abort=$(mktemp)
trap 'rm -f "$abort"' EXIT
pids=()
for i in $(seq 1 "$parallel"); do
id="${base}-${i}"
(
[ -s "$abort" ] && exit 1
fn_run_one "$id" || {
if [ "$failfast" -eq 1 ]; then
echo 1 > "$abort"
for j in $(seq 1 "$parallel"); do
jid="${base}-${j}"
[ "$jid" != "$id" ] && rm -r "$MOUNT/s/$jid" 2>/dev/null || true
done
fi
exit 1
}
) &
pids+=($!)
done
for pid in "${pids[@]}"; do wait "$pid" || rc=1; done
else
fn_run_one "$base" || rc=1
fi
else
# Foreground mode: use /generate (stateless, no session).
if [ "$parallel" -gt 1 ]; then
pids=()
for i in $(seq 1 "$parallel"); do
fn_generate &
pids+=($!)
done
for pid in "${pids[@]}"; do wait "$pid" || rc=1; done
else
fn_generate || rc=1
fi
fi
exit $rc

View File

@ -1,10 +0,0 @@
#!/usr/bin/env bash
# s/bbg: batch background; submit prompt, print session path, return immediately.
for _arg; do
[ "$_arg" = "-help" ] && exec "${0%/*}/b" -help
done
cmd=${0##*/}
if [ $# -eq 0 ] && [ -t 0 ]; then
printf '%s: prompt required: pass as arguments or pipe via stdin\n' "$cmd" >&2; exit 1
fi
exec "${0%/*}/b" -bg "$@"

View File

@ -1,13 +0,0 @@
#!/usr/bin/env bash
# s/bfg: batch foreground query; submit prompt, wait, print result.
for _arg; do
[ "$_arg" = "-help" ] && exec "${0%/*}/b" -help
done
cmd=${0##*/}
if [ $# -eq 0 ] && [ -t 0 ]; then
printf '%s: prompt required: pass as arguments or pipe via stdin\n' "$cmd" >&2; exit 1
fi
if [ $# -eq 0 ] && ! [ -t 0 ]; then
exec "${0%/*}/b" "$(cat)"
fi
exec "${0%/*}/b" "$@"

View File

@ -1,305 +0,0 @@
#!/usr/bin/env rc
# sh: interactive chat interface for ollie AI agents.
MOUNT=/home/lkn/mnt/ollie
if(! ~ $#OLLIE 0) MOUNT=$OLLIE
LAST=$home/.config/ollie/last-session
fn load_session {
awk -F'\t' -v d=$1 'NF==2 && $1==d {print $2; exit}' $LAST >[2]/dev/null
}
fn save_session {
dir=$1
sessid=$2
mkdir -p `{dirname $LAST}
tmp=`{mktemp}
if(test -f $LAST)
awk -F'\t' -v d=$dir 'NF==2 && $1!=d' $LAST > $tmp
printf '%s\t%s\n' $dir $sessid >> $tmp
mv $tmp $LAST
}
fn die {
echo $* >[1=2]
exit 1
}
fn remount {
ollie-remount >[2]/dev/null
}
fn cfg_get {
awk -F= -v k=$1 '$1==k{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}' $S/cfg >[2]/dev/null
}
fn is_idle {
state=`{cat $S/state >[2]/dev/null || { remount; cat $S/state >[2]/dev/null }}
~ $state idle
}
fn show_new {
n=`{wc -c < $S/chat >[2]/dev/null}
if(~ $#n 0) n=0
if(test $n -gt $chat_off) {
tail -c +`{expr $chat_off + 1} $S/chat
chat_off=$n
printf '\n'
}
}
fn usage {
cat <<'EOF'
usage: sh [flags]
Flags:
-new always create a new session
-resume resume last session for cwd; error if none
-session ID attach to a specific session by ID
-name NAME name for new session
-cwd DIR working directory (default: pwd)
-backend BACKEND backend override (e.g. ollama, anthropic)
-model MODEL model override
-agent AGENT agent config name
-help show this help
Input at the prompt:
<text> submit prompt, stream response
/stop interrupt the current agent turn
/kill kill the session and exit
/compact compact conversation history
/clear clear conversation history
/rn <name> rename the session
/cwd [path] get or set working directory
/agent [name] get or set agent
/model [name] get or set model
/backend [name] get or set backend
/models list available models
/backends list available backends
/mcp list MCP servers
/usage show token usage
/ctxsz show context size
/q <text> enqueue prompt for later
! <cmd> run shell command in session cwd
line ending with \ continue input (next line)
Enter submit input
Ctrl-C interrupt running turn (or exit if idle)
EOF
exit 0
}
new=0
resume=0
while(! ~ $#* 0) {
switch($1) {
case -new
new=1
case -resume
resume=1
case -session
id_flag=$2
shift
case -name
name=$2
shift
case -backend
backend=$2
shift
case -model
model=$2
shift
case -agent
agent=$2
shift
case -cwd
cwd=$2
shift
case -help
usage
case *
die 'unknown flag: '^$1
}
shift
}
_dir=`{pwd}
if(! ~ $#cwd 0) _dir=$cwd
fn write_new {
{
if(! ~ $#name 0) printf 'name=%s\n' $name
printf 'cwd=%s\n' $_dir
if(! ~ $#backend 0) printf 'backend=%s\n' $backend
if(! ~ $#model 0) printf 'model=%s\n' $model
if(! ~ $#agent 0) printf 'agent=%s\n' $agent
} > $MOUNT/s/new || { remount; {
if(! ~ $#name 0) printf 'name=%s\n' $name
printf 'cwd=%s\n' $_dir
if(! ~ $#backend 0) printf 'backend=%s\n' $backend
if(! ~ $#model 0) printf 'model=%s\n' $model
if(! ~ $#agent 0) printf 'agent=%s\n' $agent
} > $MOUNT/s/new }
}
fn create_session {
if(! ~ $#name 0) {
write_new
id=$name
return
}
before=`{ls $MOUNT/s >[2]/dev/null}
write_new
deadline=`{expr `{date +%s} + 5}
while(test `{date +%s} -lt $deadline) {
for(d in `{ls $MOUNT/s >[2]/dev/null}) {
if(! ~ $d $before) {
id=$d
return
}
}
sleep 0.05
}
die 'timeout waiting for new session'
}
_picked=0
if(! ~ $#id_flag 0) {
if(! test -d $MOUNT/s/$id_flag) die 'session not found: '^$id_flag
id=$id_flag
printf 'session: %s (resumed)\n' $id >[1=2]
_picked=1
}
if(~ $_picked 0) if(~ $resume 1) {
id=`{load_session $_dir}
if(~ $#id 0) die 'no resumable session for '^$_dir
if(! test -d $MOUNT/s/$id) die 'no resumable session for '^$_dir
printf 'session: %s (resumed)\n' $id >[1=2]
_picked=1
}
if(~ $_picked 0) if(~ $new 1) {
create_session
save_session $_dir $id
printf 'session: %s\n' $id >[1=2]
_picked=1
}
if(~ $_picked 0) {
id=`{load_session $_dir}
if(! ~ $#id 0) if(test -d $MOUNT/s/$id) {
printf 'session: %s (resumed)\n' $id >[1=2]
_picked=1
}
if(~ $_picked 0) {
create_session
save_session $_dir $id
printf 'session: %s\n' $id >[1=2]
}
}
S=$MOUNT/s/$id
fn sigint {
if(is_idle) exit 0
echo stop > $S/ctl
}
chat_off=0
if(test -f $S/chat) chat_off=`{wc -c < $S/chat}
if(! test -t 0) {
cat > $S/prompt || { remount; cat > $S/prompt } || die 'submit failed'
exit 0
}
tail -n 40 $S/chat >[2]/dev/null
while(true) {
input=`` () {bash -c 'buf=; p="> "; c=". "
while IFS= read -r -e -p "$p" line </dev/tty >/dev/tty; do
case $line in
*\\) buf="${buf}${line%\\}
"; p="$c";;
*) printf "%s" "$buf$line"; exit 0;;
esac
done; exit 1'}
if(~ $#input 0) break
switch($"input) {
case /stop
echo stop > $S/ctl
case /kill
echo kill > $S/ctl
break
case /compact
echo compact > $S/ctl
case /clear
echo clear > $S/ctl
case /cwd
cfg_get cwd
echo
case /cwd?*
newcwd=`{printf '%s\n' $"input | sed 's,^/cwd ,,'}
printf 'cwd=%s\n' $newcwd > $S/cfg
case /agent
cfg_get agent
echo
case /agent?*
printf 'agent=%s\n' `{printf '%s\n' $"input | sed 's,^/agent ,,'} > $S/cfg
show_new
case /model
cfg_get model
echo
case /model?*
printf 'model=%s\n' `{printf '%s\n' $"input | sed 's,^/model ,,'} > $S/cfg
show_new
case /backend
cfg_get backend
echo
case /backend?*
printf 'backend=%s\n' `{printf '%s\n' $"input | sed 's,^/backend ,,'} > $S/cfg
show_new
case /models
cat $S/models >[2]/dev/null
case /backends
cat $MOUNT/backends >[2]/dev/null
case /usage
cat $S/usage >[2]/dev/null
case /ctxsz
cat $S/ctxsz >[2]/dev/null
case /mcp
cat $S/mcp >[2]/dev/null
case /rn?*
newid=`{printf '%s\n' $"input | sed 's,^/rn ,,'}
printf 'rn %s\n' $newid > $S/ctl
id=$newid
S=$MOUNT/s/$id
save_session $_dir $id
case /q?*
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/q ,,'} > $S/fifo.in
printf 'queued\n' >[1=2]
case /*
printf 'unknown command: %s\n' `{printf '%s\n' $"input | awk '{print $1}'} >[1=2]
case *
printf '%s\n' $"input > $S/prompt || { remount; printf '%s\n' $"input > $S/prompt } || { printf 'submit failed\n' >[1=2] }
while(! is_idle) {
n=`{wc -c < $S/chat >[2]/dev/null}
if(~ $#n 0) n=0
if(test $n -gt $chat_off) {
tail -c +`{expr $chat_off + 1} $S/chat
chat_off=$n
}
sleep 0.05
}
n=`{wc -c < $S/chat >[2]/dev/null}
if(~ $#n 0) n=0
if(test $n -gt $chat_off) {
tail -c +`{expr $chat_off + 1} $S/chat
chat_off=$n
}
printf '\n'
}
}