Agent connection state is now derived from session.connected in session/idx, updated via refreshSessions(). No longer spawns N processes for N agents. - Remove m_agentConnections hash and per-agent NinePConnection instances - Remove readAgentRecords() (dead code - agents come from session/idx) - reconcileAgentConnections() now just updates m_agentConnected from m_sessions This eliminates one ollie-9p process per agent, leaving only: - 1 daemon eventwait stream (for all events) - 1 chat stream (for active agent only) - 1 state stream (for active agent only) |
||
|---|---|---|
| dolphin | ||
| gui | ||
| kate | ||
| krunner | ||
| .gitignore | ||
| 99-ollie-kf5.sh | ||
| 99-ollie.sh | ||
| CMakeLists-active.txt | ||
| CMakeLists-kf5.txt | ||
| CMakeLists.txt | ||
| README.md | ||
| justfile | ||
| test-e2e.sh | ||
| test-peers.sh | ||
README.md
ollie-kde
KDE-native integration for ollie — thin KDE clients (system
tray, Plasmoid, KRunner, Kate plugin, Dolphin menus) that talk to the
org.ollie.SessionManager D-Bus interface.
Architecture
┌──────────────────────────────────────────────────────────────┐
│ Plasma Desktop │
│ System Tray │ KRunner │ Plasmoid │ Kate Plugin │ Dolphin │
└──────────────────────────┬───────────────────────────────────┘
│ D-Bus (org.ollie.SessionManager)
│
┌────────────────┴────────────────┐
│ │
┌─────────┴──────────┐ ┌───────────┴──────────────────┐
│ ollied (../dbus) │ │ olliesrv -nodbus=false │
│ Pure D-Bus daemon│ │ (../9p, embedded adapter) │
│ Go │ godbus │ │ Go │ 9P + D-Bus │
└────────────────────┘ └──────────────────────────────┘
Two backends provide the D-Bus interface — pick one:
- ollied (
../dbus/) — standalone D-Bus daemon, pure Go, no 9P. Lighter weight. - olliesrv (
../9p/) — the full 9P server with an embedded D-Bus adapter (enabled by default; disable with-nodbus).
Both register the same org.ollie.SessionManager bus name. They cannot run
side by side — choose one. KDE components here are pure D-Bus clients,
lightweight, stateless, and independently restartable.
Dependencies
- Qt 6 (Core, DBus, Widgets, Quick) or Qt 5 (Core, DBus, Widgets, Quick, Qml)
- KDE Frameworks 6 (StatusNotifierItem, Runner, TextEditor, CoreAddons, Config) or KDE Frameworks 5 (Notifications, Runner, TextEditor, CoreAddons, Config, Plasma)
- Plasma 6 or Plasma 5 (for Plasmoid)
- ECM (Extra CMake Modules)
KF6/Qt6 is the default. To build against KF5/Qt5:
make kf5
Build
make # builds tray + KRunner + Kate + Plasmoid via CMake
Outputs:
build-cmake/ollie-tray— system tray iconbuild-cmake/lib/kf6/krunner/krunner_ollie.so— KRunner pluginbuild-cmake/lib/kf6/ktexteditor/ollie_kate.so— Kate pluginbuild-cmake/org/ollie/private/— Plasmoid QML plugin
Install
sudo make install # all KDE components (KF6)
sudo make kf5-install # all KDE components (KF5)
# Individual:
make krunner-install
make dolphin-install
make plasmoid-install
The D-Bus daemon is installed separately — either ollied from ../dbus/ or use olliesrv from ../9p/ (which includes D-Bus by default).
Usage
KRunner
ollie <prompt>— one-shot generation viaGenerate(no session created); shows result in a popupollie list— show active sessionsollie kill <id>— terminate a session
Dolphin
Right-click any file or directory:
- Ask Ollie about this — one-shot prompt with file context, shows result in kdialog
- Start Ollie session here — creates a persistent session in that directory
Kate
Enable the "Ollie" plugin in Settings → Configure Kate → Plugins. Panel appears on the right with:
- Session indicator + CWD label
- New — create session in project/file directory
- Ask File — send current file path for description
- Explain — send selected text for explanation
- Prompt input for free-form messages
- Live-streaming chat view
Plasmoid
Add the "Ollie" widget to your panel or desktop:
- Session list with state indicators (○ idle, ● thinking, ⚡ tool call)
- Live chat view with auto-scroll
- Inline prompt input
- Real-time updates via D-Bus signals
System Tray
- Tooltip: session count
- Status: passive (no sessions), active (sessions idle), attention (agent working)
- Right-click: New Session, Sessions submenu (kill each), Stop All, Quit
File Layout
ollie-kde/
├── Makefile # CMake orchestration
├── CMakeLists.txt
├── tray/
│ ├── main.cpp
│ └── ollie_tray.h/cpp # KStatusNotifierItem
├── krunner/
│ ├── metadata.json
│ └── ollie_runner.h/cpp # KRunner plugin
├── kate/
│ ├── metadata.json
│ └── ollie_kate.h/cpp # KTextEditor plugin
├── plasmoid/
│ ├── metadata.json
│ ├── contents/ui/main.qml
│ └── plugin/
│ └── olliedbusclient.h/cpp # QML singleton (D-Bus client)
├── dolphin/
│ ├── ollie-actions.desktop # Service menu entries
│ ├── ollie-ask # One-shot helper script
│ └── ollie-session-here # Session creation helper
└── test-e2e.sh # End-to-end test script