Add o complete and o route subcommands, update table
This commit is contained in:
parent
58cedd902b
commit
2e14d2e93b
|
|
@ -52,9 +52,9 @@ Shell environment variables take precedence over the env file.
|
|||
|---|---|
|
||||
| **CLI** | `o` — unified namespace CLI with `read`, `write`, `readloop`, `ls`, `ctl`, `prompt`, `tail`, `env`, `stop`, `kill` |
|
||||
| **Terminal TUI** | `o tui` — tmux + two shell commands, no widgets |
|
||||
| **One-shot LLM** | `echo 'prompt' \| o generate` |
|
||||
| **Code completion** | `echo '{"file":"...","prefix":"...","suffix":"..."}' \| o write complete` |
|
||||
| **Task routing** | `echo 'task' \| o write route` → read back with `o read route` |
|
||||
| **One-shot LLM** | `o generate "explain monads"` |
|
||||
| **Code completion** | `o complete '{"file":"main.go","prefix":"func "}'` |
|
||||
| **Task routing** | `o route "implement login"` → `backend=X model=Y` |
|
||||
| **Run an agent** | Create a session + agent via 9P — then connect with any frontend ([ellie](doc/ellie.md), KDE (GUI/KRunner/Kate), `o tui`) |
|
||||
| **Remote execution** | Set `remote=user@host` in session config |
|
||||
| **Custom tools** | Drop an executable + `.meta` in `$OLLIE_TOOLS_PATH` |
|
||||
|
|
|
|||
|
|
@ -236,6 +236,40 @@ cmd_generate() {
|
|||
printf '%s' "$prompt" | ollie-9p rdwr generate
|
||||
}
|
||||
|
||||
cmd_complete() {
|
||||
# Code completion via /complete (no session/agent needed)
|
||||
# Usage: o complete '{"file":"...","prefix":"...","suffix":"..."}'
|
||||
# echo '{"file":"..."}' | o complete
|
||||
local json=""
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
json="$*"
|
||||
else
|
||||
json=$(cat)
|
||||
fi
|
||||
|
||||
[[ -z "$json" ]] && { echo "usage: o complete <json>" >&2; exit 1; }
|
||||
|
||||
printf '%s' "$json" | ollie-9p rdwr complete
|
||||
}
|
||||
|
||||
cmd_route() {
|
||||
# Task routing via /route (no session/agent needed)
|
||||
# Usage: o route "task description"
|
||||
# echo "task" | o route
|
||||
local task=""
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
task="$*"
|
||||
else
|
||||
task=$(cat)
|
||||
fi
|
||||
|
||||
[[ -z "$task" ]] && { echo "usage: o route <task>" >&2; exit 1; }
|
||||
|
||||
printf '%s' "$task" | ollie-9p rdwr route
|
||||
}
|
||||
|
||||
cmd_readloop() {
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "usage: o readloop <path>" >&2
|
||||
|
|
@ -275,7 +309,7 @@ cmd_prompt() {
|
|||
|
||||
echo "[$s/$a]"
|
||||
echo "Type . on a blank line to send, Ctrl+D to exit."
|
||||
echo "Slash commands: /stop /compact /kill /clear /model /backend /cwd /help"
|
||||
echo "Slash commands: /stop /compact /kill /clear /model /backend /cwd /i /help"
|
||||
echo ""
|
||||
|
||||
local buf="" line
|
||||
|
|
@ -306,17 +340,7 @@ cmd_prompt() {
|
|||
backend*) echo "$cmd" | ollie-9p write "$path/ctl"; echo "[${cmd}]" ;;
|
||||
cwd*) echo "$cmd" | ollie-9p write "$path/ctl"; echo "[${cmd}]" ;;
|
||||
quit|q) tmux kill-session -t "o-${s}" 2>/dev/null; exit 0 ;;
|
||||
i|info)
|
||||
local state model backend cost
|
||||
state=$(ollie-9p read "$path/state" 2>/dev/null || echo "?")
|
||||
model=$(ollie-9p read "$path/model" 2>/dev/null || echo "?")
|
||||
backend=$(ollie-9p read "$path/backend" 2>/dev/null || echo "?")
|
||||
cost=$(ollie-9p read "$path/cost" 2>/dev/null || echo "?")
|
||||
echo " state: $state"
|
||||
echo " model: $model"
|
||||
echo " backend: $backend"
|
||||
echo " cost: $cost"
|
||||
;;
|
||||
i*) echo "/$line" | ollie-9p write "$path/prompt"; echo "[injected]" ;;
|
||||
help)
|
||||
echo " /stop — interrupt running agent"
|
||||
echo " /compact — compact context"
|
||||
|
|
@ -326,7 +350,7 @@ cmd_prompt() {
|
|||
echo " /backend X — switch backend"
|
||||
echo " /cwd X — change working directory"
|
||||
echo " /quit /q — kill the tmux TUI"
|
||||
echo " /i /info — inspect agent state, model, backend, cost"
|
||||
echo " /i — interrupt running agent"
|
||||
;;
|
||||
*) echo "unknown command: /$cmd (try /help)" ;;
|
||||
esac
|
||||
|
|
@ -507,6 +531,8 @@ Commands:
|
|||
ls [path] List namespace entries
|
||||
|
||||
generate <prompt> One-shot generation (no session needed)
|
||||
complete <json> Code completion (no session needed)
|
||||
route <task> Route task to best model (no session needed)
|
||||
|
||||
ctl <cmd> Send control command to agent
|
||||
stop Interrupt running agent
|
||||
|
|
@ -529,6 +555,8 @@ Examples:
|
|||
o ls session # list all sessions
|
||||
o read models # read root-level file
|
||||
o generate "explain monads" # one-shot, no session
|
||||
o complete '{"file":"main.go","prefix":"func "}' # code completion
|
||||
o route "implement login" # route to best model
|
||||
export session=foo agent=bar # set context
|
||||
o read chat # read agent's chat
|
||||
o readloop statewait # blocks until agent state changes
|
||||
|
|
@ -549,6 +577,8 @@ case "$subcmd" in
|
|||
readloop) cmd_readloop "$@" ;;
|
||||
ls) cmd_ls "$@" ;;
|
||||
generate) cmd_generate "$@" ;;
|
||||
complete) cmd_complete "$@" ;;
|
||||
route) cmd_route "$@" ;;
|
||||
ctl) cmd_ctl "$@" ;;
|
||||
stop) cmd_stop "$@" ;;
|
||||
kill) cmd_kill "$@" ;;
|
||||
|
|
|
|||
Loading…
Reference in New Issue