diff --git a/README.md b/README.md index 8413bf2..406d908 100644 --- a/README.md +++ b/README.md @@ -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` | diff --git a/data/scripts/o b/data/scripts/o index 9d76c98..b1cbe21 100755 --- a/data/scripts/o +++ b/data/scripts/o @@ -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 " >&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 " >&2; exit 1; } + + printf '%s' "$task" | ollie-9p rdwr route +} + cmd_readloop() { if [[ $# -lt 1 ]]; then echo "usage: o readloop " >&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 One-shot generation (no session needed) + complete Code completion (no session needed) + route Route task to best model (no session needed) ctl 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 "$@" ;;