diff --git a/doc/resources/evolution.md b/doc/resources/evolution.md index 304c1bf..046ccbb 100644 --- a/doc/resources/evolution.md +++ b/doc/resources/evolution.md @@ -364,25 +364,6 @@ the remote host may have different tools, package managers, or init systems. Streaming via blocking reads. No polling. 7. **Security by default** — sandboxed execution with explicit bypass, per-session identity. -## Dead Ends and Reversals -| What | Why it was removed | -|------|-------------------| -| MCP servers | Too heavyweight; scripts are simpler and faster | -| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) | -| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files | -| `pl/` planning namespace | Over-engineered; plan file is sufficient | -| Beads integration | External dependency for something a checklist file handles | -| SSH agent proxy | Attack surface not worth the convenience | -| Separate ollie-dbus daemon | Consolidated into olliesrv | -| FUSE mounts | Replaced by standalone 9P client binary | -| Tier routing (FAST/POWER) | Replaced by /route endpoint with real model discovery | -| call_tool / pipe | Replaced by native tool registry with tool_load | -| execute_code (multi-lang) | Simplified to shell-only; tool scripts handle language choice | -| chatwait | Reverted; acme tails chat directly | -| Header comment metadata | Replaced by .meta sidecar JSON; decouples metadata from language | -| `contrib/` directory | Renamed to `data/`; nothing was community-contributed | -| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files | -| D-Bus adapter | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs | ## Phase 13: 9P Streaming & D-Bus Removal (Jul 31) The D-Bus adapter (`org.ollie.SessionManager`) is deleted. All clients now @@ -642,37 +623,6 @@ ollie/ ← single Go module └── doc/ ← documentation ``` -## Dead Ends and Reversals (updated) -| What | Why it was removed | -|------|-------------------| -| MCP servers | Too heavyweight; scripts are simpler and faster | -| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) | -| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files | -| `pl/` planning namespace | Over-engineered; plan file is sufficient | -| Beads integration | External dependency for something a checklist file handles | -| SSH agent proxy | Attack surface not worth the convenience | -| Separate ollie-dbus daemon | Consolidated into olliesrv | -| FUSE mounts | Replaced by standalone 9P client binary | -| Tier routing (FAST/POWER) | Replaced by /route endpoint with real model discovery | -| call_tool / pipe | Replaced by native tool registry with tool_load | -| execute_code (multi-lang) | Simplified to shell-only; tool scripts handle language choice | -| chatwait | Reverted; acme tails chat directly | -| Header comment metadata | Replaced by .meta sidecar JSON; decouples metadata from language | -| `contrib/` directory | Renamed to `data/`; nothing was community-contributed | -| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files | -| D-Bus adapter | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs | -| `fs/session/` sub-package | Flattened into `fs/` — no more sub-package indirection | -| `cmd/olliesrv/bypass_tree.go` | Bypass tree handlers moved to `fs/bypassfiles.go` | -| Per-session/agent timestamp IDs | Replaced by UUIDv4 — immutable `id` + mutable `name` | -| Single-step session creation | Split into `session/new` + `session/{name}/agent/new` | -| D-Bus-driven KDE frontends | Rewritten on pure 9P via plan9port `9p` binary | -| Plasmoid/tray KDE components | Deleted — not useful enough to maintain | -| Built-in tool handlers (shell, reasoning_think, tool_list, tool_load, tool_active) | Replaced by external scripts loaded via 9P `agent/{id}/tools` write | -| Go-compiled tool registry in `tools/builtin/` | Zero built-in tools — all tools are external scripts with `.meta` sidecars | -| Embedded tool scripts in `ollie-remote` | Remote uses `$OLLIE_TOOLS_PATH` from environment; tools deployed via tarball over SSH | -| SSH binary transfer (gzip+base64+hash-verify) | Replaced by simple `tar | ssh` tarball of `~/.config/ollie/` | -| `toolsrv.loaded` / `toolsrv.rev` 9P files | Removed — `tools` file handles both list and load | - ## Phase 18: Zero Built-in Tools (Aug 2–3) The most radical simplification yet: **zero tools compiled into the Go binary.** Every tool — including `shell` and `reasoning_think` — is now an external script loaded dynamically through the 9P filesystem. @@ -1379,3 +1329,70 @@ The turn state machine in `turn.go` was simplified. Commit count: ~50 commits over 2 days. Net code change: approximately -800 lines. The system does more with less. +--- + +## Dead Ends and Reversals + +Everything that was built and then killed, in roughly chronological order. + +| What | Why it was removed | +|------|-------------------| +| MCP servers (denote-mcp, 9beads-mcp) | Too heavyweight; scripts are simpler and faster | +| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) | +| `pl/` planning namespace | Over-engineered; plan file is sufficient | +| Beads integration | External dependency for something a checklist file handles | +| `plan_create` / `plan_complete` / `task_add` / `task_check` tools | Five planning iterations before settling on a single markdown file | +| SSH agent proxy | Attack surface not worth the convenience | +| Separate ollie-dbus daemon (ollied) | Consolidated into olliesrv, then killed entirely | +| D-Bus adapter (`org.ollie.SessionManager`) | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs | +| D-Bus-driven KDE frontends | Rewritten on pure 9P via plan9port `9p` binary | +| Plasmoid / tray KDE components | Not useful enough to maintain | +| FUSE mounts | Replaced by standalone 9P client binary; FUSE can't do blocking reads | +| Tier routing (FAST/POWER) | Replaced by `/route` endpoint with real model discovery | +| call_tool / pipe | Replaced by native tool registry with `tool_load` | +| execute_code (multi-language) | Simplified to shell-only; tool scripts handle language choice | +| chatwait | Reverted; acme tails `chat` directly | +| Header comment metadata (`ollie:prompt`, `ollie:tier`, `args_json:`) | Replaced by `.meta` sidecar JSON; decouples metadata from language | +| `contrib/` directory | Renamed to `data/`; nothing was community-contributed | +| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files | +| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files | +| `agent.Core` interface | Nobody else implemented it; just indirection | +| `Dispatcher` indirection in toolsrv | `toolsrv.Server` called directly | +| `execute/` package | Merged into `tools/`; 3 functions didn't need a package | +| `mgr/` package (Manager struct) | Replaced by package functions; `*fs.Tree` IS the collection | +| `fs/session/` sub-package (6 files, ~3,100 lines) | Flattened into `fs/` — no more sub-package indirection | +| `cmd/olliesrv/bypass_tree.go` | Bypass tree handlers moved to `fs/bypassfiles.go` | +| Per-session/agent timestamp IDs | Replaced by UUIDv4 — immutable `id` + mutable `name` | +| Single-step session creation | Split into `session/new` + `session/{name}/agent/new` | +| Imperative filesystem (stat/walk/read/write per node) | Replaced by declarative EDSL (`fsedsl/`) | +| Event ring buffer (100-slot circular buffer + sync.Cond) | Lasted one day; replaced by `pubsub` library. Off-by-one bugs, race conditions, panics. | +| Built-in tool handlers (shell, reasoning_think, tool_list, tool_load, tool_active) | Replaced by external scripts loaded via 9P `agent/{id}/tools` write | +| Go-compiled tool registry in `tools/builtin/` | Zero built-in tools — all tools are external scripts with `.meta` sidecars | +| Embedded tool scripts in `ollie-remote` | Remote uses `$OLLIE_TOOLS_PATH` from environment; tools deployed via tarball | +| SSH binary transfer (gzip+base64+hash-verify) | Replaced by simple `tar | ssh` of `~/.config/ollie/` | +| `toolsrv.loaded` / `toolsrv.rev` 9P files | Removed — `tools` file handles both list and load | +| `cmd/Ollie` (Acme frontend binary) | Replaced by `o` CLI composing acme | +| `mount/` package | FUSE mount replaced by `ollie-9p` direct 9P client | +| `ollie-watchdog` script | No FUSE stale mount issues with 9P client | +| `doc/experiments/` | Historical experiments; moved to git history | +| `doc/help.md` | Generated dynamically from `Doc()` strings in spec | +| Hooks system (agentSpawn, preTurn, postTurn, preTool, postTool, preCompact, postCompact, turnError) | Never solved real problems; prompt handles init, sandbox handles security, retry handles errors | +| `backend/noop.go` (test backend) | Never used; tests use real backends or mocks | +| `backend/oneshot.go` | Never used; `generate` file handles one-shot | +| `toolsrv/schema.go` (schema validation) | Never enabled | +| `data/tools/route.meta` (model routing tool) | Replaced by explicit `/model` commands | +| TaskState subsystem | Removed entirely (−246 lines); no use case survived | +| `fifo.in` + `fifo.out` | Merged to single `fifo` (write=enqueue, read=dequeue) | +| `cost` + `usage` + `ctxsz` files | Merged to `stats` (key=value lines) | +| `connection`, `context`, `tail`, `offset`, `prompt.prev` agent files | Removed or moved to ctl | +| AllowTools field | Tools loaded dynamically; static allowlists served no purpose | +| PRIME_* env vars | Replaced by typed `Platform` + `IsGitRepo` fields | +| `elevate` naming | Renamed to `bypass` throughout | +| In-process toolsrv (Go library) | Replaced by separate 9P server process with socket boundary | +| Binary ReadOnly/not tool batching | Replaced by scope-based conflict scheduling (read/write/global) | +| `AgentLog` / `SessionNode` / `RootState` abstractions in fs/ | Eliminated; state moved to where data lives (agent/, session/) | +| Named sandbox profiles (default, restricted, remote) | One config: `sandbox.yaml`. Multi-profile system was unused complexity | +| `TurnCtx` struct | Eliminated; loop functions became methods on `*Agent` | +| Bypass via custom Unix socket protocol | Replaced by bypass via 9P namespace | +| Concurrent-by-default tool execution | Rejected: turns one reasoning step into N generation cycles with partial info — sequential but slower and more expensive | +