frontends: update to spec file; remove individual session file reads

tui/session: IsIdle reads spec and parses state= key.
scripts/s/sh, sh.rc: add spec_get helper; is_idle, /cwd, /model,
/agent, /backend read via spec_get; writes go to spec as key=value.
el/ellie.el: ellie--state reads spec with string-match on state=.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Levi Neely 2026-04-24 07:43:10 +02:00
parent 908db7fbdd
commit 127e518dae
2 changed files with 26 additions and 18 deletions

View File

@ -25,8 +25,12 @@ fn die {
echo $* >[1=2]
exit 1
}
fn spec_get {
awk -F= -v k=$1 '$1==k{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}' $S/spec >[2]/dev/null
}
fn is_idle {
state=`{cat $S/state >[2]/dev/null | tr -d '[:space:]'}
state=`{spec_get state}
test $state = idle
}
@ -208,26 +212,26 @@ while(true) {
case /clear
echo clear > $S/ctl
case /cwd
cat $S/cwd >[2]/dev/null
spec_get cwd
echo
case '/cwd *'
newcwd=`{printf '%s\n' $"input | sed 's,^/cwd ,,'}
printf 'cwd %s\n' $newcwd > $S/ctl
printf 'cwd=%s\n' $newcwd > $S/spec
case /agent
cat $S/agent >[2]/dev/null
spec_get agent
echo
case '/agent *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/agent ,,'} > $S/agent
printf 'agent=%s\n' `{printf '%s\n' $"input | sed 's,^/agent ,,'} > $S/spec
case /model
cat $S/model >[2]/dev/null
spec_get model
echo
case '/model *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/model ,,'} > $S/model
printf 'model=%s\n' `{printf '%s\n' $"input | sed 's,^/model ,,'} > $S/spec
case /backend
cat $S/backend >[2]/dev/null
spec_get backend
echo
case '/backend *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/backend ,,'} > $S/backend
printf 'backend=%s\n' `{printf '%s\n' $"input | sed 's,^/backend ,,'} > $S/spec
case /models
cat $S/models >[2]/dev/null
case /backends

View File

@ -25,8 +25,12 @@ fn die {
echo $* >[1=2]
exit 1
}
fn spec_get {
awk -F= -v k=$1 '$1==k{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}' $S/spec >[2]/dev/null
}
fn is_idle {
state=`{cat $S/state >[2]/dev/null | tr -d '[:space:]'}
state=`{spec_get state}
test $state = idle
}
@ -208,26 +212,26 @@ while(true) {
case /clear
echo clear > $S/ctl
case /cwd
cat $S/cwd >[2]/dev/null
spec_get cwd
echo
case '/cwd *'
newcwd=`{printf '%s\n' $"input | sed 's,^/cwd ,,'}
printf 'cwd %s\n' $newcwd > $S/ctl
printf 'cwd=%s\n' $newcwd > $S/spec
case /agent
cat $S/agent >[2]/dev/null
spec_get agent
echo
case '/agent *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/agent ,,'} > $S/agent
printf 'agent=%s\n' `{printf '%s\n' $"input | sed 's,^/agent ,,'} > $S/spec
case /model
cat $S/model >[2]/dev/null
spec_get model
echo
case '/model *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/model ,,'} > $S/model
printf 'model=%s\n' `{printf '%s\n' $"input | sed 's,^/model ,,'} > $S/spec
case /backend
cat $S/backend >[2]/dev/null
spec_get backend
echo
case '/backend *'
printf '%s\n' `{printf '%s\n' $"input | sed 's,^/backend ,,'} > $S/backend
printf 'backend=%s\n' `{printf '%s\n' $"input | sed 's,^/backend ,,'} > $S/spec
case /models
cat $S/models >[2]/dev/null
case /backends