update KDE integration documentation and library install

This commit is contained in:
Ollie Agent 2026-08-17 00:15:56 +02:00
parent 9789eb56ff
commit c34f4a1b31
4 changed files with 249 additions and 227 deletions

4
.gitignore vendored
View File

@ -11,7 +11,9 @@ __pycache__/
/Ollie /Ollie
/lsp_definition /lsp_definition
# KDE build artifacts # Shared libraries
*.so
build/ build/
build-cmake/ build-cmake/
build-kf5/ build-kf5/

View File

@ -17,7 +17,24 @@ if(NOT DEFINED OLLIE_KF5 OR NOT OLLIE_KF5)
endif() endif()
endif() endif()
# Suppress CMP0160 warnings from KF5 cmake files (read-only IMPORTED property) set(OLLIE9P_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so")
set(OLLIE9P_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib9p")
if(NOT EXISTS "${OLLIE9P_LIBRARY}")
message(FATAL_ERROR
"Missing ${OLLIE9P_LIBRARY}. Build it with: "
"go build -buildmode=c-shared -o ${OLLIE9P_LIBRARY} ./lib9p")
endif()
# The native clients link against the bundled C ABI library. Install it as a
# normal runtime library beside the executable, not in the Qt plugin tree.
# CMAKE_INSTALL_LIBDIR is relative to the install prefix (normally lib).
add_library(ollie9p SHARED IMPORTED GLOBAL)
set_target_properties(ollie9p PROPERTIES
IMPORTED_LOCATION "${OLLIE9P_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${OLLIE9P_INCLUDE_DIR}"
)
install(FILES "${OLLIE9P_LIBRARY}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
if(OLLIE_KF5) if(OLLIE_KF5)
cmake_policy(SET CMP0160 OLD) cmake_policy(SET CMP0160 OLD)
endif() endif()
@ -30,6 +47,7 @@ find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs) include(KDEInstallDirs)
include(GNUInstallDirs)
include(KDECMakeSettings) include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECompilerSettings NO_POLICY_SCOPE)
@ -75,7 +93,7 @@ if(OLLIE_KF5)
KF5::SyntaxHighlighting KF5::SyntaxHighlighting
Qt5::Core Qt5::Core
Qt5::Widgets Qt5::Widgets
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
# --- KIO Worker (ollie:// protocol) --- # --- KIO Worker (ollie:// protocol) ---
@ -93,7 +111,7 @@ if(OLLIE_KF5)
KF5::KIOCore KF5::KIOCore
Qt5::Core Qt5::Core
Qt5::Network Qt5::Network
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
install(FILES kio/ollie.protocol DESTINATION ${KDE_INSTALL_KSERVICESDIR}) install(FILES kio/ollie.protocol DESTINATION ${KDE_INSTALL_KSERVICESDIR})
@ -137,7 +155,7 @@ if(OLLIE_KF5)
Qt5::Network Qt5::Network
KF5::ConfigCore KF5::ConfigCore
KF5::SyntaxHighlighting KF5::SyntaxHighlighting
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
# --- Install --- # --- Install ---
@ -180,7 +198,7 @@ else()
KF6::SyntaxHighlighting KF6::SyntaxHighlighting
Qt6::Core Qt6::Core
Qt6::Widgets Qt6::Widgets
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
# --- KIO Worker (ollie:// protocol) --- # --- KIO Worker (ollie:// protocol) ---
@ -198,7 +216,7 @@ else()
KF6::KIOCore KF6::KIOCore
Qt6::Core Qt6::Core
Qt6::Network Qt6::Network
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
# --- GUI App (9P-based, no D-Bus) --- # --- GUI App (9P-based, no D-Bus) ---
@ -225,7 +243,7 @@ else()
Qt6::Network Qt6::Network
KF6::ConfigCore KF6::ConfigCore
KF6::SyntaxHighlighting KF6::SyntaxHighlighting
$ENV{HOME}/.local/lib/libollie9p.so ${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
) )
qt_add_resources(ollie-gui "gui" qt_add_resources(ollie-gui "gui"
PREFIX "/" PREFIX "/"

View File

@ -1,219 +1,221 @@
| `client/` |#| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` | # ollie-kde
| `client/` |
| `client/` |K| `client/` |D| `client/` |E| `client/` |-| `client/` |n| `client/` |a| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |g| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |[| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |]| `client/` |(| `client/` |.| `client/` |.| `client/` |/| `client/` |R| `client/` |E| `client/` |A| `client/` |D| `client/` |M| `client/` |E| `client/` |.| `client/` |m| `client/` |d| `client/` |)| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |,| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |,| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |,| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |)| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` |.| `client/` | KDE integration for [ollie](../README.md). The directory contains a Qt/QML desktop client, KDE plugins, a KIO worker, and Dolphin service-menu helpers. Components communicate with `olliesrv` through the Ollie 9P namespace.
| `client/` |
| `client/` |#| `client/` |#| `client/` | | `client/` |A| `client/` |r| `client/` |c| `client/` |h| `client/` |i| `client/` |t| `client/` |e| `client/` |c| `client/` |t| `client/` |u| `client/` |r| `client/` |e| `client/` | ## Architecture
| `client/` |
| `client/` |`| `client/` |`| `client/` |`| `client/` | ```text
| `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` | Plasma / KDE applications
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` | | `client/` |D| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | ├─ ollie-gui (Qt Quick) ───────┐
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |A| `client/` |p| `client/` |p| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | ├─ KRunner plugin │
| `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` | ├─ Kate plugin ├─ Ollie 9P namespace ── olliesrv
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | ├─ KIO worker (`ollie://`) │ (Unix socket)
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |´| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | └─ Dolphin helper scripts ─────┘
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` |o| `client/` |l| `client/` |s| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | ```
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |p| `client/` |l| `client/` |a| `client/` |n| `client/` |9| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |'| `client/` |s| `client/` | | `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | There are two transport paths:
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | - `ollie-gui`, the Kate plugin, and the KIO worker link to `libollie9p.so` through the shared `gui/lib9pclient` wrapper.
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¼| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` | - KRunner and the Dolphin scripts invoke a 9P command-line client (`9p` or `ollie-9p`) and address the server at the default Ollie namespace.
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |t| `client/` |o| `client/` |c| `client/` |o| `client/` |l| `client/` | | `client/` |(| `client/` |U| `client/` |n| `client/` |i| `client/` |x| `client/` | | `client/` |s| `client/` |o| `client/` |c| `client/` |k| `client/` |e| `client/` |t| `client/` |)| `client/` |
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | The KDE clients do not start `olliesrv`; start the server using the instructions in the repository root before using them.
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |´| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` |
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` | | `client/` |(| `client/` |.| `client/` |.| `client/` |/| `client/` |9| `client/` |p| `client/` |)| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | ## Components
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |e| `client/` |r| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |G| `client/` |o| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | - **`ollie-gui`** — Qt Quick application for browsing sessions and agents, sending prompts, viewing streamed chat, interrupting or killing agents, and creating, renaming, and configuring sessions and agents. It includes light/dark/system theme handling, font settings, a collapsible session sidebar (`Ctrl+B`), and clipboard support.
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` | - **KRunner plugin (`krunner_ollie.so`)** — Handles queries beginning with `ollie`. It lists sessions, offers session termination, runs one-shot prompts through the `generate` 9P file, and opens `ollie-gui` when a session is selected.
| `client/` |`| `client/` |`| `client/` |`| `client/` | - **Kate plugin (`ollie_kate.so`)** — Adds context actions, agent/session management, status and connection recovery, and ghost-text completion. It deliberately has no chat panel; use `ollie-gui` for the full conversation.
| `client/` | - **KIO worker (`kio_ollie.so`)** — Provides the `ollie://` virtual filesystem. It supports listing, stat, reading, writing, directory creation, deletion, and renaming in the Ollie 9P namespace.
| `client/` |E| `client/` |v| `client/` |e| `client/` |r| `client/` |y| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |a| `client/` |l| `client/` |k| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |t| `client/` |o| `client/` |c| `client/` |o| `client/` |l| `client/` | | `client/` |u| `client/` |s| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` | | `client/` |o| `client/` |f| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |a| `client/` |v| `client/` |a| `client/` |i| `client/` |l| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |l| `client/` |y| `client/` |,| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` |`| `client/` | | `client/` |s| `client/` |u| `client/` |b| `client/` |p| `client/` |r| `client/` |o| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |,| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |a| `client/` |n| `client/` |9| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |'| `client/` |s| `client/` | | `client/` |`| `client/` |9| `client/` |p| `client/` |`| `client/` |)| `client/` |.| `client/` | - **Dolphin service menus** — `ollie-ask` performs a one-shot `generate` request for a selected file or directory and displays the result; `ollie-session-here` idempotently creates the `default` session and an agent named after the selected directory.
| `client/` |
| `client/` |#| `client/` |#| `client/` | | `client/` |C| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | There is no system-tray component.
| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |M| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |Q| `client/` |t| `client/` |/| `client/` |Q| `client/` |M| `client/` |L| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` | ## Dependencies
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |_| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | - Qt 6 (Core, Widgets, Quick, QuickControls2, Network), or Qt 5 equivalents when `OLLIE_KF5=ON`
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |R| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | - ECM (Extra CMake Modules)
| `client/` | - KF6/KF5 Runner and CoreAddons for KRunner
| `client/` |*| `client/` |*| `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |*| `client/` |*| `client/` |:| `client/` | | `client/` |N| `client/` |o| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |t| `client/` |r| `client/` |a| `client/` |y| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |e| `client/` |x| `client/` |i| `client/` |s| `client/` |t| `client/` |s| `client/` |.| `client/` | - KF6/KF5 TextEditor and SyntaxHighlighting for Kate
| `client/` | - KF6/KF5 KIO for the `ollie://` worker
| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |p| `client/` |e| `client/` |n| `client/` |d| `client/` |e| `client/` |n| `client/` |c| `client/` |i| `client/` |e| `client/` |s| `client/` | - `libollie9p.so` and its header from `kde/lib9p/`
| `client/` | - A 9P CLI named `9p` (KRunner) and `ollie-9p` (Dolphin scripts)
| `client/` |-| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |6| `client/` | | `client/` |(| `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |,| `client/` | | `client/` |W| `client/` |i| `client/` |d| `client/` |g| `client/` |e| `client/` |t| `client/` |s| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |r| `client/` |o| `client/` |l| `client/` |s| `client/` |2| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |5| `client/` | | `client/` |(| `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |,| `client/` | | `client/` |W| `client/` |i| `client/` |d| `client/` |g| `client/` |e| `client/` |t| `client/` |s| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |,| `client/` | | `client/` |Q| `client/` |m| `client/` |l| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |r| `client/` |o| `client/` |l| `client/` |s| `client/` |2| `client/` |)| `client/` |
| `client/` |-| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |F| `client/` |r| `client/` |a| `client/` |m| `client/` |e| `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |s| `client/` | | `client/` |6| `client/` | | `client/` |(| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |,| `client/` | | `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |A| `client/` |d| `client/` |d| `client/` |o| `client/` |n| `client/` |s| `client/` |,| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |,| `client/` | | `client/` |T| `client/` |e| `client/` |x| `client/` |t| `client/` |E| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |,| `client/` | | `client/` |S| `client/` |y| `client/` |n| `client/` |t| `client/` |a| `client/` |x| `client/` |H| `client/` |i| `client/` |g| `client/` |h| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` | | `client/` |e| `client/` |q| `client/` |u| `client/` |i| `client/` |v| `client/` |a| `client/` |l| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | KF6/Qt6 is selected by default when KF6 Runner and CoreAddons are available. Set `-DOLLIE_KF5=ON` to force the KF5/Qt5 build.
| `client/` |-| `client/` | | `client/` |E| `client/` |C| `client/` |M| `client/` | | `client/` |(| `client/` |E| `client/` |x| `client/` |t| `client/` |r| `client/` |a| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |M| `client/` |o| `client/` |d| `client/` |u| `client/` |l| `client/` |e| `client/` |s| `client/` |)| `client/` |
| `client/` |-| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` | | `client/` |(| `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |`| `client/` |.| `client/` |.| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` |/| `client/` |`| `client/` |)| `client/` | ## Build
| `client/` |
| `client/` |K| `client/` |F| `client/` |6| `client/` |/| `client/` |Q| `client/` |t| `client/` |6| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |d| `client/` |e| `client/` |f| `client/` |a| `client/` |u| `client/` |l| `client/` |t| `client/` |.| `client/` | | `client/` |T| `client/` |o| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |a| `client/` |g| `client/` |a| `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` |/| `client/` |Q| `client/` |t| `client/` |5| `client/` |:| `client/` | The KDE directory is a CMake project. From `kde/`:
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` |
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` | ```sh
| `client/` |`| `client/` |`| `client/` |`| `client/` | cmake -S . -B build-cmake
| `client/` | cmake --build build-cmake -j
| `client/` |#| `client/` |#| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | ```
| `client/` |
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` | For KF5/Qt5:
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` | ```sh
| `client/` |`| `client/` |`| `client/` |`| `client/` | cmake -S . -B build-kf5 -DOLLIE_KF5=ON
| `client/` | cmake --build build-kf5 -j
| `client/` |O| `client/` |u| `client/` |t| `client/` |p| `client/` |u| `client/` |t| `client/` |s| `client/` |:| `client/` | ```
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |k| `client/` |f| `client/` |6| `client/` |/| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |/| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |_| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | The build produces:
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |k| `client/` |f| `client/` |6| `client/` |/| `client/` |k| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |e| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |/| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |
| `client/` | - `ollie-gui`
| `client/` |#| `client/` |#| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` | - `lib/kf6/krunner/krunner_ollie.so` and `lib/kf6/ktexteditor/ollie_kate.so` (or `kf5` paths)
| `client/` | - `lib/kf6/kio/kio_ollie.so` (or `kf5` paths)
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` | - `libollie9p.so`, installed to `${CMAKE_INSTALL_LIBDIR}` (normally `lib` or `lib64`)
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` | The CMake project installs `ollie-gui` and `libollie9p.so`. The plugins, KIO metadata, desktop files, Dolphin scripts, icon, and Plasma environment files are source-tree assets and must be installed or packaged separately; the `just kde` and `just install-kde` commands described by older documentation are not provided in this repository.
| `client/` |`| `client/` |`| `client/` |`| `client/` |
| `client/` | ## Install
| `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |b| `client/` |i| `client/` |n| `client/` |a| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |b| `client/` |i| `client/` |n| `client/` |/| `client/` |`| `client/` | Choose an install prefix, for example `~/.local`:
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |6| `client/` |4| `client/` |/| `client/` |q| `client/` |t| `client/` |6| `client/` |/| `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |q| `client/` |t| `client/` |5| `client/` |/| `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |k| `client/` |i| `client/` |o| `client/` |/| `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |/| `client/` |`| `client/` | ```sh
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` | cmake -S . -B build-cmake -DCMAKE_INSTALL_PREFIX="$HOME/.local"
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |i| `client/` |c| `client/` |o| `client/` |n| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |i| `client/` |c| `client/` |o| `client/` |n| `client/` |s| `client/` |/| `client/` |h| `client/` |i| `client/` |c| `client/` |o| `client/` |l| `client/` |o| `client/` |r| `client/` |/| `client/` |s| `client/` |c| `client/` |a| `client/` |l| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |/| `client/` |a| `client/` |p| `client/` |p| `client/` |s| `client/` |/| `client/` |`| `client/` | cmake --build build-cmake -j
| `client/` |-| `client/` | | `client/` |S| `client/` |e| `client/` |t| `client/` |s| `client/` | | `client/` |u| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |c| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |/| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |-| `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |s| `client/` |p| `client/` |a| `client/` |c| `client/` |e| `client/` |/| `client/` |e| `client/` |n| `client/` |v| `client/` |/| `client/` |`| `client/` | cmake --install build-cmake
| `client/` | ```
| `client/` |*| `client/` |*| `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |*| `client/` |*| `client/` |:| `client/` | | `client/` |R| `client/` |e| `client/` |s| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` | | `client/` |(| `client/` |`| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |l| `client/` |l| `client/` | | `client/` |-| `client/` |-| `client/` |r| `client/` |e| `client/` |p| `client/` |l| `client/` |a| `client/` |c| `client/` |e| `client/` |`| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |l| `client/` |o| `client/` |g| `client/` | | `client/` |o| `client/` |u| `client/` |t| `client/` |/| `client/` |i| `client/` |n| `client/` |)| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |p| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |u| `client/` |p| `client/` | | `client/` |n| `client/` |e| `client/` |w| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |.| `client/` |
| `client/` | That installs `ollie-gui` and `libollie9p.so` to the prefix's KDE bindir and `${CMAKE_INSTALL_LIBDIR}`, respectively. To use the other components, install the matching built plugin and source assets into the locations used by your KDE/Qt installation:
| `client/` |#| `client/` |#| `client/` | | `client/` |U| `client/` |s| `client/` |a| `client/` |g| `client/` |e| `client/` |
| `client/` | - KRunner: the `kf6/krunner` (or `kf5/krunner`) plugin directory, plus `krunner/metadata.json`
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |A| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |(| `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` |)| `client/` | - Kate: the `kf6/ktexteditor` (or `kf5/ktexteditor`) plugin directory, plus `kate/metadata.json`
| `client/` | - KIO: the corresponding KIO plugin directory, `kio/ollie.protocol`, and `kio/ollie.json`
| `client/` |L| `client/` |a| `client/` |u| `client/` |n| `client/` |c| `client/` |h| `client/` | | `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |e| `client/` |r| `client/` |m| `client/` |i| `client/` |n| `client/` |a| `client/` |l| `client/` |:| `client/` | - Dolphin: `dolphin/*.desktop` in `~/.local/share/kio/servicemenus/` and both helper scripts in `~/.local/bin/`
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` | - GUI integration: `gui/org.ollie.gui.desktop`, `gui/ollie.svg`, and the appropriate `99-ollie*.sh` environment file
| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |
| `client/` |`| `client/` |`| `client/` |`| `client/` | The exact plugin directories are distribution- and Qt-version-dependent. After installing KDE metadata or plugins, rebuild the relevant service cache (for example `kbuildsycoca6` or `kbuildsycoca5`) and restart the affected KDE application.
| `client/` |
| `client/` |F| `client/` |e| `client/` |a| `client/` |t| `client/` |u| `client/` |r| `client/` |e| `client/` |s| `client/` |:| `client/` | ## Usage
| `client/` |-| `client/` | | `client/` |S| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |l| `client/` |i| `client/` |s| `client/` |t| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |d| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |o| `client/` |r| `client/` |s| `client/` | | `client/` |(| `client/` |i| `client/` |d| `client/` |l| `client/` |e| `client/` |,| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |n| `client/` |k| `client/` |i| `client/` |n| `client/` |g| `client/` |,| `client/` | | `client/` |t| `client/` |o| `client/` |o| `client/` |l| `client/` | | `client/` |c| `client/` |a| `client/` |l| `client/` |l| `client/` |)| `client/` |
| `client/` |-| `client/` | | `client/` |C| `client/` |o| `client/` |l| `client/` |l| `client/` |a| `client/` |p| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |s| `client/` |i| `client/` |d| `client/` |e| `client/` |b| `client/` |a| `client/` |r| `client/` | | `client/` |(| `client/` |C| `client/` |t| `client/` |r| `client/` |l| `client/` |+| `client/` |B| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |t| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` |)| `client/` | ### GUI Application (`ollie-gui`)
| `client/` |-| `client/` | | `client/` |L| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |s| `client/` |c| `client/` |r| `client/` |o| `client/` |l| `client/` |l| `client/` |
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |p| `client/` |u| `client/` |t| `client/` | Launch from application menu or terminal:
| `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |a| `client/` |l| `client/` |-| `client/` |t| `client/` |i| `client/` |m| `client/` |e| `client/` | | `client/` |u| `client/` |p| `client/` |d| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |n| `client/` |g| `client/` | ```sh
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` | | `client/` |s| `client/` |u| `client/` |p| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` | | `client/` |(| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |/| `client/` |d| `client/` |a| `client/` |r| `client/` |k| `client/` |/| `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` |)| `client/` | ollie-gui
| `client/` |-| `client/` | | `client/` |F| `client/` |o| `client/` |n| `client/` |t| `client/` | | `client/` |c| `client/` |u| `client/` |s| `client/` |t| `client/` |o| `client/` |m| `client/` |i| `client/` |z| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | ```
| `client/` |
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | Features:
| `client/` | - Session list with state indicators (idle, thinking, tool call)
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |<| `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` |>| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |g| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |`| `client/` |G| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |e| `client/` |`| `client/` | | `client/` |(| `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |d| `client/` |)| `client/` |;| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |u| `client/` |l| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` | | `client/` |p| `client/` |o| `client/` |p| `client/` |u| `client/` |p| `client/` | - Collapsible sidebar (Ctrl+B to toggle)
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |l| `client/` |i| `client/` |s| `client/` |t| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | - Live chat view with auto-scroll
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |k| `client/` |i| `client/` |l| `client/` |l| `client/` | | `client/` |<| `client/` |i| `client/` |d| `client/` |>| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |t| `client/` |e| `client/` |r| `client/` |m| `client/` |i| `client/` |n| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |a| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | - Inline prompt input
| `client/` | - Real-time updates via 9P polling
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | - Theme support (light/dark/system)
| `client/` | - Font customization
| `client/` |R| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |a| `client/` |n| `client/` |y| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` |:| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |s| `client/` |k| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |a| `client/` |b| `client/` |o| `client/` |u| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |,| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |u| `client/` |l| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |k| `client/` |d| `client/` |i| `client/` |a| `client/` |l| `client/` |o| `client/` |g| `client/` | ### KRunner
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |S| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` | | `client/` |p| `client/` |e| `client/` |r| `client/` |s| `client/` |i| `client/` |s| `client/` |t| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` |
| `client/` | - `ollie <prompt>` — one-shot generation via `Generate` (no session created); shows result in a popup
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | - `ollie list` — show active sessions
| `client/` | - `ollie kill <id>` — terminate a session
| `client/` |E| `client/` |n| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |"| `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |"| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |S| `client/` |e| `client/` |t| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` |s| `client/` | | `client/` |â| `client/` |†| `client/` |’| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |â| `client/` |†| `client/` |’| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |.| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |v| `client/` |i| `client/` |d| `client/` |e| `client/` |s| `client/` |:| `client/` |
| `client/` | ### Dolphin
| `client/` |*| `client/` |*| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |r| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |e| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |)| `client/` |:| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |b| `client/` |o| `client/` |u| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |b| `client/` |e| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |e| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | Right-click any file or directory:
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |E| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |e| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |(| `client/` |o| `client/` |r| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` |)| `client/` | - **Ask Ollie about this** — one-shot prompt with file context, shows result in kdialog
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |F| `client/` |i| `client/` |x| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |f| `client/` |i| `client/` |x| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | - **Start Ollie session here** — creates a persistent session in that directory
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |R| `client/` |e| `client/` |f| `client/` |a| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |r| `client/` |e| `client/` |f| `client/` |a| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |d| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |s| `client/` |t| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |g| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |u| `client/` |n| `client/` |i| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |s| `client/` |t| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | ### Kate
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |d| `client/` |d| `client/` | | `client/` |d| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |S| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |v| `client/` |e| `client/` |r| `client/` |b| `client/` |a| `client/` |t| `client/` |i| `client/` |m| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |w| `client/` |r| `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |f| `client/` |e| `client/` |n| `client/` |c| `client/` |e| `client/` | | `client/` |(| `client/` |l| `client/` |a| `client/` |n| `client/` |g| `client/` |u| `client/` |a| `client/` |g| `client/` |e| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |d| `client/` |e| `client/` |t| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |)| `client/` | Enable the "Ollie" plugin in Settings → Configure Kate → Plugins. The plugin provides:
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |R| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |r| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |a| `client/` | | `client/` |d| `client/` |i| `client/` |f| `client/` |f| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |s| `client/` |s| `client/` |u| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |v| `client/` |i| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |o| `client/` |n| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |-| `client/` |h| `client/` |i| `client/` |g| `client/` |h| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |d| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` |)| `client/` |
| `client/` | **Context menu actions** (right-click in editor):
| `client/` |*| `client/` |*| `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` | - **Ask about file** — describe and explain the current file
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |A| `client/` |I| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` | | `client/` |a| `client/` |s| `client/` | | `client/` |f| `client/` |a| `client/` |d| `client/` |e| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | - **Explain this** — explain selected code (or current line)
| `client/` |-| `client/` | | `client/` |T| `client/` |r| `client/` |i| `client/` |g| `client/` |g| `client/` |e| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |m| `client/` |a| `client/` |t| `client/` |i| `client/` |c| `client/` |a| `client/` |l| `client/` |l| `client/` |y| `client/` | | `client/` |a| `client/` |f| `client/` |t| `client/` |e| `client/` |r| `client/` | | `client/` |5| `client/` |0| `client/` |0| `client/` |m| `client/` |s| `client/` | | `client/` |o| `client/` |f| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |s| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |d| `client/` |l| `client/` |e| `client/` | | `client/` |(| `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |o| `client/` |n| `client/` |l| `client/` |y| `client/` |)| `client/` | - **Fix this** — ask agent to fix selected code
| `client/` |-| `client/` | | `client/` |M| `client/` |u| `client/` |l| `client/` |t| `client/` |i| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |i| `client/` |n| `client/` |u| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |n| `client/` | | `client/` |w| `client/` |h| `client/` |e| `client/` |n| `client/` | | `client/` |n| `client/` |e| `client/` |a| `client/` |r| `client/` | | `client/` |E| `client/` |O| `client/` |F| `client/` | - **Refactor this** — ask agent to refactor selected code
| `client/` | - **Add tests for this** — generate unit tests for selection
| `client/` |*| `client/` |*| `client/` |K| `client/` |e| `client/` |y| `client/` |b| `client/` |o| `client/` |a| `client/` |r| `client/` |d| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |r| `client/` |t| `client/` |c| `client/` |u| `client/` |t| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` | - **Document this** — add documentation comments to selection
| `client/` | - **Send verbatim** — send selected text wrapped in a code fence (language auto-detected)
| `client/` ||| `client/` | | `client/` |K| `client/` |e| `client/` |y| `client/` | | `client/` ||| `client/` | | `client/` |A| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` | - **Review Diff** — review a diff for issues (visible on Diff-highlighted documents)
| `client/` ||| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` ||| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` ||| `client/` |
| `client/` ||| `client/` | | `client/` |T| `client/` |a| `client/` |b| `client/` | | `client/` ||| `client/` | | `client/` |A| `client/` |c| `client/` |c| `client/` |e| `client/` |p| `client/` |t| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` | - **Inline completion:** Ghost text is requested automatically after 500 ms of idle time at the end of a line. Suggestions can be accepted, cycled, dismissed, toggled, or requested manually with the shortcuts below. The completion implementation uses the configured Ollie completion backend; the current plugin source does not expose `OLLIE_COMPLETE_BACKEND` or `OLLIE_COMPLETE_MODEL` environment variables.
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |N| `client/` | | `client/` ||| `client/` | | `client/` |N| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |P| `client/` | | `client/` ||| `client/` | | `client/` |P| `client/` |r| `client/` |e| `client/` |v| `client/` |i| `client/` |o| `client/` |u| `client/` |s| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` | **Keyboard shortcuts:**
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |C| `client/` | | `client/` ||| `client/` | | `client/` |T| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |o| `client/` |n| `client/` |/| `client/` |o| `client/` |f| `client/` |f| `client/` | | `client/` ||| `client/` |
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |D| `client/` | | `client/` ||| `client/` | | `client/` |D| `client/` |i| `client/` |s| `client/` |m| `client/` |i| `client/` |s| `client/` |s| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` | | Key | Action |
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |T| `client/` |a| `client/` |b| `client/` | | `client/` ||| `client/` | | `client/` |R| `client/` |e| `client/` |q| `client/` |u| `client/` |e| `client/` |s| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |u| `client/` |a| `client/` |l| `client/` |l| `client/` |y| `client/` | | `client/` ||| `client/` | |-----|--------|
| `client/` | | Tab | Accept ghost suggestion |
| `client/` |*| `client/` |*| `client/` |A| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |:| `client/` |*| `client/` |*| `client/` | | Meta+O, N | Next suggestion |
| `client/` |-| `client/` | | `client/` |A| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` | | `client/` |"| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |"| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` | | Meta+O, P | Previous suggestion |
| `client/` |-| `client/` | | `client/` |A| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |s| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |a| `client/` |t| `client/` |c| `client/` |h| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` | | Meta+O, C | Toggle completion on/off |
| `client/` |-| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |a| `client/` |l| `client/` |t| `client/` |h| `client/` | | `client/` |m| `client/` |o| `client/` |n| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |r| `client/` |e| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |(| `client/` |5| `client/` |s| `client/` | | `client/` |h| `client/` |e| `client/` |a| `client/` |r| `client/` |t| `client/` |b| `client/` |e| `client/` |a| `client/` |t| `client/` |)| `client/` | | Meta+O, D | Dismiss suggestion |
| `client/` |-| `client/` | | `client/` |S| `client/` |t| `client/` |a| `client/` |t| `client/` |u| `client/` |s| `client/` | | `client/` |b| `client/` |a| `client/` |r| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` |:| `client/` | | Meta+O, Tab | Request completion manually |
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |d| `client/` | | `client/` |`| `client/` |â| `client/` |œ| `client/` |—| `client/` | | `client/` |d| `client/` |i| `client/` |s| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |e| `client/` |r| `client/` | | `client/` |u| `client/` |n| `client/` |r| `client/` |e| `client/` |a| `client/` |c| `client/` |h| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |G| `client/` |r| `client/` |a| `client/` |y| `client/` | | `client/` |`| `client/` |â| `client/` |—| `client/` |‹| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | **Agent management:**
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |G| `client/` |r| `client/` |e| `client/` |e| `client/` |n| `client/` | | `client/` |`| `client/` |â| `client/` |—| `client/` |<7C>| `client/` | | `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |/| `client/` |I| `client/` |D| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | - Auto-creates a "kate" session with one agent per project directory
| `client/` | - Auto-selects agent matching the current Kate project
| `client/` |*| `client/` |*| `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |e| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |v| `client/` |a| `client/` |r| `client/` |i| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |s| `client/` |)| `client/` |:| `client/` | - Connection health monitoring with auto-reconnect (5s heartbeat)
| `client/` |-| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |C| `client/` |O| `client/` |M| `client/` |P| `client/` |L| `client/` |E| `client/` |T| `client/` |E| `client/` |_| `client/` |B| `client/` |A| `client/` |C| `client/` |K| `client/` |E| `client/` |N| `client/` |D| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |b| `client/` |a| `client/` |c| `client/` |k| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |o| `client/` |v| `client/` |e| `client/` |r| `client/` |r| `client/` |i| `client/` |d| `client/` |e| `client/` | - Status bar shows state:
| `client/` |-| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |C| `client/` |O| `client/` |M| `client/` |P| `client/` |L| `client/` |E| `client/` |T| `client/` |E| `client/` |_| `client/` |M| `client/` |O| `client/` |D| `client/` |E| `client/` |L| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` | | `client/` |o| `client/` |v| `client/` |e| `client/` |r| `client/` |r| `client/` |i| `client/` |d| `client/` |e| `client/` | - Red `✗ disconnected` — server unreachable
| `client/` | - Gray `○ no agent` — connected, no agent
| `client/` |*| `client/` |*| `client/` |G| `client/` |i| `client/` |t| `client/` |+| `client/` |+| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |g| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` | - Green `● kate/ID` — connected with active agent
| `client/` |-| `client/` | | `client/` |"| `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |:| `client/` | | `client/` |R| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |"| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |r| `client/` |e| `client/` |g| `client/` |i| `client/` |s| `client/` |t| `client/` |e| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |G| `client/` |i| `client/` |t| `client/` |+| `client/` |+| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |'| `client/` |s| `client/` | | `client/` |d| `client/` |i| `client/` |f| `client/` |f| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |
| `client/` | **Git++ integration:**
| `client/` |*| `client/` |*| `client/` |T| `client/` |i| `client/` |p| `client/` |:| `client/` |*| `client/` |*| `client/` | | `client/` |T| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` | | `client/` |w| `client/` |i| `client/` |n| `client/` |d| `client/` |o| `client/` |w| `client/` | | `client/` |a| `client/` |l| `client/` |o| `client/` |n| `client/` |g| `client/` |s| `client/` |i| `client/` |d| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |f| `client/` |u| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |s| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` | | `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |.| `client/` | - "Ollie: Review Diff" action registered in Git++ plugin's diff context menu
| `client/` |
| `client/` |#| `client/` |#| `client/` | | `client/` |F| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |L| `client/` |a| `client/` |y| `client/` |o| `client/` |u| `client/` |t| `client/` | **Tip:** Tile the `ollie-gui` window alongside Kate to see the full chat stream from context actions.
| `client/` |
| `client/` |`| `client/` |`| `client/` |`| `client/` | ## File Layout
| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` |/| `client/` |
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |o| `client/` |r| `client/` |c| `client/` |h| `client/` |e| `client/` |s| `client/` |t| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | ```text
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` |L| `client/` |i| `client/` |s| `client/` |t| `client/` |s| `client/` |.| `client/` |t| `client/` |x| `client/` |t| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |M| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | kde/
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |g| `client/` |u| `client/` |i| `client/` |/| `client/` | ├── CMakeLists.txt # Qt5/KF5 and Qt6/KF6 build configuration
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` |.| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` | ├── README.md
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` |.| `client/` |q| `client/` |m| `client/` |l| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |Q| `client/` |M| `client/` |L| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` | ├── gui/ # ollie-gui (C++/QML) and desktop assets
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | │ ├── main.cpp, main.qml
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |r| `client/` |a| `client/` |r| `client/` |y| `client/` | │ ├── ollie9pclient.* # GUI state/session client
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` |b| `client/` |l| `client/` |o| `client/` |c| `client/` |k| `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |C| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` | │ ├── lib9pclient.* # shared native 9P wrapper
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |r| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | │ ├── nativestreamer.* # chat, state, and event streams
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |s| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` |f| `client/` |s| `client/` |m| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |c| `client/` |h| `client/` |i| `client/` |n| `client/` |e| `client/` | │ ├── sessionmodel.*, chatblockmodel.*
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |n| `client/` |i| `client/` |n| `client/` |e| `client/` |p| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | │ ├── thememanager.*, clipboardhelper.*
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |r| `client/` |g| `client/` |.| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |g| `client/` |u| `client/` |i| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` | │ └── *.qml, qml.qrc, *.desktop, ollie.svg
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |/| `client/` | ├── krunner/ # KRunner plugin and metadata
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |.| `client/` |j| `client/` |s| `client/` |o| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` | ├── kate/ # Kate context actions and ghost provider
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` | ├── kio/ # `ollie://` KIO worker and protocol metadata
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |/| `client/` | ├── dolphin/ # service menus and helper scripts
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |.| `client/` |j| `client/` |s| `client/` |o| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` | ├── lib9p/ # Go-built libollie9p shared library/header
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |,| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |g| `client/` |m| `client/` |t| `client/` |)| `client/` | └── 99-ollie*.sh # Qt/KF-specific Plasma environment snippets
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |v| `client/` |i| `client/` |d| `client/` |e| `client/` |r| `client/` | ```
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |d| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` |/| `client/` |
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` | `build/` and `build-cmake/` are local build directories and are not source components.
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |O| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |h| `client/` |e| `client/` |l| `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` |
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |-| `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |l| `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` | ## Development Notes
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |9| `client/` |9| `client/` |-| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |h| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |E| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |9| `client/` |9| `client/` |-| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` |.| `client/` |s| `client/` |h| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |E| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` | - The native clients use `libollie9p.so` directly; KRunner and Dolphin are the exceptions and use a 9P CLI subprocess.
| `client/` |`| `client/` |`| `client/` |`| `client/` | - The GUI maintains native chat, agent-state, and event streams and polls the daemon heartbeat every 2.5 seconds for recovery.
| `client/` | - The Kate plugin is lightweight: context actions, agent management, and ghost text; it has no chat panel.
| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |v| `client/` |e| `client/` |l| `client/` |o| `client/` |p| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |s| `client/` | - The KIO worker exposes the server's namespace as a mutable virtual filesystem, not as a local mirror.
| `client/` | - CMake supports KF6/Qt6 and KF5/Qt5 via `OLLIE_KF5`.
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` | | `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |t| `client/` |r| `client/` |a| `client/` |n| `client/` |s| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |C| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |r| `client/` |a| `client/` |r| `client/` |y| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |u| `client/` |b| `client/` |p| `client/` |r| `client/` |o| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |)| `client/` | - The CMake install target installs `libollie9p.so` to `${CMAKE_INSTALL_LIBDIR}` (`lib` or `lib64`), alongside the executable rather than under the Qt plugin directory.
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |w| `client/` |e| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |:| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |+| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |p| `client/` |a| `client/` |n| `client/` |e| `client/` |l| `client/` | | `client/` |(| `client/` |u| `client/` |s| `client/` |e| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` |)| `client/` |
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` |s| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |a| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |r| `client/` |n| `client/` |,| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |p| `client/` |o| `client/` |n| `client/` |s| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` | ## Troubleshooting
| `client/` |-| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |s| `client/` |u| `client/` |p| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |s| `client/` | | `client/` |b| `client/` |o| `client/` |t| `client/` |h| `client/` | | `client/` |K| `client/` |F| `client/` |6| `client/` |/| `client/` |Q| `client/` |t| `client/` |6| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` |/| `client/` |Q| `client/` |t| `client/` |5| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |o| `client/` |p| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |K| `client/` |F| `client/` |5| `client/` |`| `client/` |
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` |r| `client/` |-| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` | | `client/` |(| `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |`| `client/` |)| `client/` | | `client/` |b| `client/` |y| `client/` | | `client/` |d| `client/` |e| `client/` |f| `client/` |a| `client/` |u| `client/` |l| `client/` |t| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` |-| `client/` |w| `client/` |i| `client/` |d| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |n| `client/` |e| `client/` |e| `client/` |d| `client/` |e| `client/` |d| `client/` | **Plugins not appearing after installation:**
| `client/` | - Run `kbuildsycoca6` (KF6) or `kbuildsycoca5` (KF5) to rebuild system cache
| `client/` |#| `client/` |#| `client/` | | `client/` |T| `client/` |r| `client/` |o| `client/` |u| `client/` |b| `client/` |l| `client/` |e| `client/` |s| `client/` |h| `client/` |o| `client/` |o| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` | - Restart Plasma: `plasmashell --replace` or log out/in
| `client/` |
| `client/` |*| `client/` |*| `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |a| `client/` |f| `client/` |t| `client/` |e| `client/` |r| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` | **"9p" or "ollie-9p" not found:**
| `client/` |-| `client/` | | `client/` |R| `client/` |u| `client/` |n| `client/` | | `client/` |`| `client/` |k| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` |y| `client/` |c| `client/` |o| `client/` |c| `client/` |a| `client/` |6| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |`| `client/` |k| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` |y| `client/` |c| `client/` |o| `client/` |c| `client/` |a| `client/` |5| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |r| `client/` |e| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |c| `client/` |a| `client/` |c| `client/` |h| `client/` |e| `client/` | - KRunner needs an executable named `9p` (or a `PLAN9` environment pointing to `bin/9p`).
| `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |s| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |:| `client/` | | `client/` |`| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |l| `client/` |l| `client/` | | `client/` |-| `client/` |-| `client/` |r| `client/` |e| `client/` |p| `client/` |l| `client/` |a| `client/` |c| `client/` |e| `client/` |`| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |l| `client/` |o| `client/` |g| `client/` | | `client/` |o| `client/` |u| `client/` |t| `client/` |/| `client/` |i| `client/` |n| `client/` | - Dolphin helpers need `ollie-9p` in `PATH`.
| `client/` | - Build/install the main Ollie project or plan9port as appropriate.
| `client/` |*| `client/` |*| `client/` |"| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |f| `client/` |o| `client/` |u| `client/` |n| `client/` |d| `client/` |"| `client/` | | `client/` |e| `client/` |r| `client/` |r| `client/` |o| `client/` |r| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` |
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |y| `client/` |o| `client/` |u| `client/` |r| `client/` | | `client/` |P| `client/` |A| `client/` |T| `client/` |H| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |/| `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |r| `client/` |s| `client/` |t| `client/` | **KDE client cannot connect:**
| `client/` | - Ensure `olliesrv` is running and its default 9P socket is available.
| `client/` |*| `client/` |*| `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` | - The clients resolve the default namespace from `NAMESPACE`, or from `/tmp/ns.$USER.$DISPLAY/ollie` when `NAMESPACE` is unset.
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |`| `client/` |
| `client/` |-| `client/` | | `client/` |V| `client/` |e| `client/` |r| `client/` |i| `client/` |f| `client/` |y| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |s| `client/` |a| `client/` |m| `client/` |e| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |v| `client/` |e| `client/` |r| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |a| `client/` |s| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |Q| `client/` |t| `client/` |5| `client/` | | `client/` |v| `client/` |s| `client/` | | `client/` |Q| `client/` |t| `client/` |6| `client/` |)| `client/` | **Kate plugin crashes or is rejected:**
| `client/` | - Check that Kate and the plugin use the same Qt major version (Qt5 vs Qt6).
| `client/` |*| `client/` |*| `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` |:| `client/` |*| `client/` |*| `client/` | - Verify that `libollie9p.so` and its runtime dependencies are discoverable.
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |s| `client/` |o| `client/` |c| `client/` |k| `client/` |e| `client/` |t| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |a| `client/` |c| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` |
| `client/` |-| `client/` | | `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |o| `client/` |n| `client/` |l| `client/` |y| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |w| `client/` |h| `client/` |e| `client/` |n| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |s| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | **Ghost text not appearing:**
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |C| `client/` | | `client/` |h| `client/` |a| `client/` |s| `client/` |n| `client/` |'| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |o| `client/` |f| `client/` |f| `client/` | - Ensure `olliesrv` is running and the 9P socket is accessible
| `client/` | - Ghost text only shows when cursor is at end-of-line
| `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |i| `client/` |n| `client/` |g| `client/` |:| `client/` |*| `client/` |*| `client/` | - Check Meta+O, C hasn't toggled completion off
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |s| `client/` |k| `client/` |`| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |-| `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` |`| `client/` | | `client/` |a| `client/` |r| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |b| `client/` |i| `client/` |n| `client/` |/| `client/` |`| `client/` |
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` |r| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |k| `client/` |i| `client/` |o| `client/` |/| `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |/| `client/` |`| `client/` | **Dolphin actions not working:**
- Ensure `ollie-ask` and `ollie-session-here` are installed in `~/.local/bin/`
- Check that the service menu desktop files are in `~/.local/share/kio/servicemenus/`

Binary file not shown.