Commit Graph

1755 Commits

Author SHA1 Message Date
Ollie Agent c9a773a04e usage: rewrite multi-agent workflows with o CLI 2026-08-04 19:32:21 +02:00
Ollie Agent 1a2ad14f6b docs: replace all session/{id} and {sid} with {sname} 2026-08-04 19:30:57 +02:00
Ollie Agent 3a8e3f3c63 o prompt: add /i and /info to inspect agent state 2026-08-04 19:29:57 +02:00
Ollie Agent b939bd4c6b docs: replace all {aid} with {aname} 2026-08-04 19:29:34 +02:00
Ollie Agent 3f69427084 docs: standardize on {sname} and {aname} placeholder syntax 2026-08-04 19:29:00 +02:00
Ollie Agent 0f8cfd0c14 docs: replace agent/0 with agent/{aname} in path templates 2026-08-04 19:26:22 +02:00
Ollie Agent 6ceebe7ee1 README: add path resolution rules to o CLI section 2026-08-04 19:23:58 +02:00
Ollie Agent d78fe997da usage: document path resolution rules 2026-08-04 19:23:24 +02:00
Ollie Agent 63a9f0b1d6 usage: rewrite for o CLI, move raw 9P to reference section 2026-08-04 19:06:29 +02:00
Ollie Agent d314c7d4ee docs: update olliesrv -mount → ollie-9p mount 2026-08-04 19:03:48 +02:00
Ollie Agent c2b1e130e9 README: document o CLI and o tui 2026-08-04 18:59:48 +02:00
Ollie Agent 8ffbf3b699 o prompt: use . as send trigger, empty lines add newlines 2026-08-04 18:56:47 +02:00
Ollie Agent 19a96ab2de o prompt: fix readline line editing with ANSI prompt
Wrap bold escape sequences in \001/\002 markers so readline
correctly tracks cursor position. Fixes Ctrl+U, Ctrl+W, and
other readline kill commands after typing several characters.
2026-08-04 18:56:19 +02:00
Ollie Agent e375126adf o tui: clear chat pane before tail 2026-08-04 18:54:16 +02:00
Ollie Agent cd18539280 o tui: add /quit and /q slash commands 2026-08-04 18:53:01 +02:00
Ollie Agent 0923633624 o tui: remove shell pane, replace state pane with tmux status bar 2026-08-04 18:52:01 +02:00
Levi Neely 853117758c fs: add trailing newlines to all static read/request handlers
POSIX compliance - text files should end with newlines.

Fixed handlers:
- requestComplete, requestGenerate, requestRoute
- readSessionName, readSessionID
- readAgentCost, readAgentSystemprompt, readAgentName, readAgentID
2026-08-04 17:27:32 +02:00
Levi Neely 0f29757dac o: add generate command for one-shot prompts
Uses /generate 9P file - no session/agent context needed.
Example: o generate 'explain monads'
2026-08-04 17:25:17 +02:00
Levi Neely 865378c150 docs: fix SLOC count (kde gui only, note on comparison) 2026-08-04 17:21:13 +02:00
Levi Neely 01951ff1ef docs: add SLOC summary for Aug 4 2026-08-04 17:20:20 +02:00
Levi Neely 52f2a36ccf docs: clarify EDSL was created Aug 2, extracted Aug 3 2026-08-04 17:18:58 +02:00
Levi Neely 836fb2c8b7 docs: fix ollie-watchdog removal reason (9P client, not systemd) 2026-08-04 17:17:46 +02:00
Levi Neely cc2a96b78f docs: fix mount/ removal reason (ollie-9p, not ollie-remount) 2026-08-04 17:17:26 +02:00
Levi Neely 86d3b35d38 docs: clarify acme frontend reason 2026-08-04 17:16:50 +02:00
Levi Neely 00f546bb25 docs: fix acme frontend replacement (o CLI, not ollie-9p) 2026-08-04 17:16:28 +02:00
Levi Neely be7c48ea07 docs: add Phase 19 to evolution.md (Aug 3-4)
- fsedsl library extraction
- fs/ package consolidation (flat, by scope)
- Session/Agent split refactors
- Dead code removal (cmd/Ollie, mount/, ollie-watchdog)
- o CLI improvements (explicit context, TUI percentages)
- Update gantt chart to Aug 4
2026-08-04 17:15:32 +02:00
Levi Neely 59fb7d5561 o tui: use percentage-based layout instead of fixed sizes
- Right column: 25% width
- State/shell: 50/50 split
- Prompt: 20% height
- Adapts to terminal size
2026-08-04 17:09:53 +02:00
Levi Neely 77d589f98b o tui: filter out [[[...]]] block markers from chat stream 2026-08-04 17:05:52 +02:00
Levi Neely 69fc98099c docs: update for o CLI changes and remove mount/watchdog references
- Remove mount/ from repo layout (no longer exists)
- Remove ollie-watchdog references (removed)
- Update o CLI docs: explicit context required, no auto-select
- Add path resolution section explaining root/session/agent paths
- Add write and readloop commands to table
- Fix o tui to show readloop statewait (not read)
2026-08-04 17:04:38 +02:00
Levi Neely abdc91d097 remove mount/ package references and ollie-watchdog
- mount/ package no longer exists, remove from build/test rules
- remove ollie-watchdog script (unused)
- keep ollie-remount (still needed for FUSE recovery)
2026-08-04 16:58:44 +02:00
Levi Neely 05517c384a o: simplify path resolution, remove auto-session/agent
- Remove auto-resolution of session/agent (was slow, unexpected)
- Path classification determines required context level immediately
- Errors are fast and actionable with clear fix instructions
- Root-level paths work without any context
- o env now just prints export statements without requiring context
2026-08-04 16:57:01 +02:00
Levi Neely 214242ba44 Remove outdated doc files 2026-08-04 16:41:20 +02:00
Levi Neely 68f0fe8ef9 Rename doc/ files to lowercase kebab-case 2026-08-04 16:41:07 +02:00
Levi Neely 111f1f89e2 Remove doc/experiments/ - too historical 2026-08-04 16:39:45 +02:00
Levi Neely 6b3913a524 Remove experiments/ - concept proven 2026-08-04 16:39:15 +02:00
Levi Neely 593584a673 Move mount/ package to ollie-9p
FUSE mount is a client-side QoL feature, not a server concern.
Usage: ollie-9p mount <address> [mountpoint]
2026-08-04 16:38:44 +02:00
Levi Neely c6152688bc Update kde submodule: remove sidebar state dots 2026-08-04 16:33:41 +02:00
Levi Neely fbb2a767f6 session: pause/resume persistence, restore paused sessions without spawning processes
- Skip SetupToolServer for paused sessions during restore
- Pause() and Resume() now persist state to disk
- Resume() sets up tool server from scratch for sessions restored paused
- IsConnected() returns false when paused
- Add SetPaused(), SetToolServer() methods
- ProcessKeeper.SetContext() for resume after pause
- Session index sorts active-first, paused-last
- CreateAgent accepts name= parameter
- Remove duplicate SetCwd method
2026-08-04 16:05:22 +02:00
Levi Neely d200fbad05 refactor: promote remote to session level
- CreateEmpty(name, remote) now spawns remote toolsrv when remote is set
- requestSessionNew parses remote= argument
- Add Session.SetRemote() method
- Update kde submodule
2026-08-04 15:22:18 +02:00
Levi Neely e1b732f09a fix: wire up agent state change events to event bus
SetOnStateChange was defined but never called. Now agents publish
state changes to 'session.{sid}.agent.{aid}.state' which eventwait
can receive.
2026-08-04 14:40:30 +02:00
Levi Neely f21cd99845 fix: eventwait should use BlockOnce, not Stream
eventwait returns a single event then closes, like statewait.
Stream is for continuous data like chat.
2026-08-04 14:39:26 +02:00
Levi Neely 86f7c54805 refactor: rename saveSession/flushSave to save/flush, remove legacy restore
- Rename AgentCfg.SaveSession/FlushSave to Save/Flush for brevity
- Remove restoreLegacySession — all sessions now use multi-agent format
- Pass Save/Flush callbacks to agents in CreateAgent and restore paths
- Add AuditLog fallback warning in NewAgent
2026-08-04 14:38:09 +02:00
Levi Neely f348b968a2 fix: wire up event handler so chat stream receives events
After the fs/session refactor, NewEventHandler was defined but never
called. Agents created via session restore or CreateAgent had nil
output handlers, so emit() was a no-op and the chat stream stayed empty.

- Add Agent.SetOutput() to allow setting the event handler post-creation
- Wire up SetOutput(NewEventHandler(al)) in fs/newroot.go for restored sessions
- Wire up SetOutput(NewEventHandler(al)) in fs/handlers.go for new agents
- Also includes expanded UsageStats fields and TaskState persistence
2026-08-04 14:21:45 +02:00
Levi Neely 3cfbd14203 fix: unify session persistence to preserve name on restart
- flushSave and SaveSession now use PersistSession instead of
  agent.SaveFull, ensuring the multi-agent format with Name field
  is consistently written
- Rename now calls PersistSession immediately so renamed sessions
  survive server restart

The previous approach had two save formats (legacy single-agent via
agent.SaveFull, and new multi-agent via PersistSession) writing to
the same file. Since flushSave ran on every turn, it would overwrite
the Name field with the legacy format that didn't preserve it.
2026-08-04 14:11:14 +02:00
Levi Neely 5a9d605840 fix: persist session name correctly
flushSave and SaveSession were passing empty string instead of
a.Name() as the sessionName argument to agent.SaveFull, causing
the session name to be lost on restart.
2026-08-04 14:08:02 +02:00
Levi Neely 5678ee723a remove: acme backend (cmd/Ollie)
Replaced by the 'o' command which provides a simpler interface.
2026-08-04 14:04:26 +02:00
Levi Neely b1c74d3121 refactor: remove fs/persist.go, inline calls to session package
- Delete fs/persist.go (thin wrappers no longer needed)
- handlers.go: call session.PersistSession() directly
- newroot.go: inline restore logic with AgentLog creation
2026-08-04 14:03:23 +02:00
Levi Neely 4ae1584887 refactor: move persistence to session/, support multi-agent sessions
session/persist.go:
- New multi-agent format: PersistedSession with []PersistedAgent
- PersistSession saves ALL agents, not just first
- RestoreAllSessions returns []RestoredSession with []RestoredAgent
- Backward compatible: restores legacy single-agent format

fs/persist.go:
- Thin wrapper that creates AgentLogs for each restored agent
- Delegates to session.PersistSession/RestoreAllSessions

agent/agent.go:
- Added Messages() to get conversation history
- Added Usage() to get token/cost stats

agent/history.go:
- Added RestoreHistoryFromMessages for multi-agent restore

session/session.go:
- Added Remote() getter
2026-08-04 14:02:15 +02:00
Levi Neely 7fc183c5cb refactor: eliminate Manager type, use package-level session registry
- session/registry.go: package-level vars + functions replace Manager struct
- session.Init() initializes package config
- session.Sessions(), Lookup(), Register(), Kill(), Rename() etc are now top-level
- fs/ calls session.X() directly instead of rs.Manager.X()
- Same thread safety via package-level sync.RWMutex
2026-08-04 13:55:45 +02:00
Levi Neely 2aa7db8445 refactor: split fs/ and session/ packages
session/ now owns all session business logic:
- Manager: session lifecycle (create, kill, rename, lookup)
- CreateAgent: agent creation within sessions
- SetupToolServer, BuildPromptLayers, LoadAutoLoadTools
- PublishEvent for SSE notifications
- NextUname generation

fs/ is now a thin 9P presentation layer:
- SessionNode wraps session.Session, adds AgentLogs and models cache
- RootState caches SessionNodes (GetOrCreateNode pattern)
- Handlers delegate to session.Manager
- persist.go uses session package for restore logic
2026-08-04 13:52:28 +02:00