Commit Graph

25 Commits

Author SHA1 Message Date
Levi Neely 90fe8e3478 kf5 corrections 2026-07-20 10:25:27 +02:00
Levi Neely cf637b2674 fix plugin install paths for user-local KDE install
- Kate plugin: ktexteditor -> kf6/ktexteditor (KF6), kf5/ktexteditor (KF5)
- Add 99-ollie.sh plasma env script for QT_PLUGIN_PATH and QML_IMPORT_PATH
- Plugins now found without sudo or system-wide install
2026-07-19 13:22:31 +02:00
Levi Neely b9e02a972a gui: inline video embeds in chat
Detect video URLs (YouTube, Vimeo, Dailymotion, Twitch, direct media)
in chat responses. Direct .mp4/.webm/.ogv files play inline via
QtMultimedia Video. Other video sites show a card with play button
that opens in the system browser.

Adds Qt6::Multimedia dependency.
2026-07-18 18:46:35 +02:00
Levi Neely 2699044b3b gui: split-pane sessions (Ctrl+* to split, Ctrl+W to close)
Major refactor: extracted chat UI into ChatPane.qml (self-contained
with own ChatBlockModel, D-Bus signal filtering, prompt input).
Main content area is now a SplitView with dynamic pane creation.
Auto-layout: splits horizontal if window wider than tall.
Sidebar click updates the focused pane session.

New OllieDBusClient methods: getChat, getConfig, getState (per-session).
New signal: chatAppended (emitted for all sessions, not just active).
2026-07-16 22:35:35 +02:00
Levi Neely 6362e399bd gui: session topology graph
Circular node layout showing all sessions with peer relationship edges.
Nodes are color-coded by state (green=idle, blue=thinking, orange=calling),
pulse when active. Click a node to select that session.
Toggle between list and graph view in sidebar toolbar.
Adds peerList() to OllieDBusClient.
2026-07-16 22:06:08 +02:00
Levi Neely 483981a9cd fix(gui): include emojis.js in Qt6 resource bundle
qt_add_resources was only bundling main.qml, causing ollie-gui to fail
at startup with 'Script qrc:/gui/emojis.js unavailable'.
2026-07-16 17:26:06 +02:00
Levi Neely 2929bb6b04 kde: visual enhancements, emoji completion, scroll/layout fixes
ollie-gui:
- Structured chat blocks (user/assistant bubbles, tool/call with left borders)
- Tool/call blocks always visible (not collapsible), whitespace preserved
- User interrupt blocks (amber warning style)
- Copy buttons on bubbles (32x32, hover-visible)
- Emoji completion with popup selector + quick emoticons
- Backend/model display in header bar
- Session state updates on switch
- Scroll flicker fix (debounced, guarded)
- Null guards on delegate block properties
- Binding loop fixes

Kate plugin:
- Diff viewer integration via Kate DiffWidget (libkateprivate)
- Diff mode config (unified/side-by-side/raw)
- Emoji processing in prompt input (quick emoticons + :shortcode:)
- Increased chat font size
- Scroll position preservation

Dbus client:
- activeModel/activeBackend properties from GetConfig
2026-07-16 11:19:22 +02:00
Levi Neely d3c8aece38 kate: extract chat_renderer, simplify kate plugin 2026-07-16 08:57:55 +02:00
Levi Neely f6b218bef7 kf5: sync gui with kf6 features, fix install paths
- main-kf5.qml: port all KF6 gui enhancements (chat bubbles, structured
  blocks, markdown, syntax highlighting, diff coloring, collapsible
  call/tool blocks, lazy-load scrolling)
- CMakeLists.txt: add chatblockmodel.cpp and KF5::SyntaxHighlighting to
  KF5 gui target; fix Kate plugin INSTALL_NAMESPACE (ktexteditor, not
  kf5/ktexteditor or kf6/ktexteditor)
- Makefile: fix KF6 kate install path; add icon+desktop to kf5-install
- main.qml + main-kf5.qml: fix prose font size (use root.font.pointSize
  instead of Qt.application.font.pixelSize)
2026-07-16 08:43:25 +02:00
Levi Neely 6e03064d0f rich output rendering for ollie-gui
Replace flat TextArea chat view with structured ListView:
- ChatBlockModel parses raw chat text into typed blocks (user,
  assistant, reasoning, call, tool, error, info)
- Sub-blocks parsed from markdown: prose, fenced code, diffs
- Code blocks rendered with KSyntaxHighlighting (auto light/dark theme)
- Diff blocks with red/green line coloring
- Copy button on code and diff blocks
- File paths linkified and clickable (opens with xdg-open)
- Reasoning/call/tool blocks collapsible (click to expand)
- User blocks highlighted with subtle accent background
- Error blocks in red
- Scroll pinning preserved (auto-scroll when at bottom)
2026-07-16 06:29:18 +02:00
Levi Neely fcc3cd2313 kate stop button, sorted sessions, scroll pinning, install fix
- Kate: add always-visible stop button next to prompt input
- All front-ends: sort sessions alphabetically by ID
- All front-ends: only auto-scroll chat if at bottom, show
  floating go-to-bottom button when scrolled away
- CMakeLists: set KDE_INSTALL_PLUGINDIR to QT6_INSTALL_PLUGINS
  so plugins install to lib64/qt6/plugins/ (where Kate looks)
2026-07-16 06:03:15 +02:00
Levi Neely 16e8fc7a75 feat: ghost-text code completion via InlineNoteProvider
Adds OllieGhostProvider that renders AI completions as translucent
gray text after the cursor. Uses the new Complete D-Bus method with
500ms debounce. Tab accepts, Escape dismisses, any edit clears.
Works on both KF5 and KF6 builds.
2026-07-14 12:30:18 +02:00
Levi Neely dc1816f023 gui: fix Qt5/KF5 compatibility
- Remove placeholderText from QML palette block (not available in Qt5)
- Use theme.placeholderTextColor directly instead of palette.placeholderText
- Add Qt version guards for QFontDatabase static vs instance API
- Add Qt version guard for QVariant::typeId vs QVariant::type
- Link KF5::ConfigCore for ollie-gui KF5 build
2026-07-09 11:26:10 +02:00
Levi Neely 7f93543e56 gui: theme manager with KDE color schemes, font settings, and native folder dialogs 2026-07-09 00:07:47 +02:00
Levi Neely c294670df1 fix: correct resource prefix for ollie-gui QML 2026-07-08 19:55:00 +02:00
Levi Neely 8a644d8d7c feat: add ollie-gui QtQuick standalone application
Session list with create/kill/rename, chat view, prompt input,
folder dialogs for cwd. Reuses OllieDBusClient from plasmoid plugin.
Supports both Qt5 (KF5) and Qt6 (KF6) builds.
2026-07-08 19:46:10 +02:00
Levi Neely a988930dbc fix: use xdg-desktop-portal for folder dialog in plasmoid
plasmashell is QGuiApplication so QFileDialog (QtWidgets) cannot work.
Use org.freedesktop.portal.FileChooser.OpenFile via D-Bus instead.
Also fix StandardPaths ReferenceError in main.qml.
2026-07-08 19:33:48 +02:00
Levi Neely d97d2fb1af feat: use native QFileDialog for new session folder selection
QML FolderDialog does not work inside the plasmoid sandbox.
Move folder selection to C++ via QFileDialog::getExistingDirectory
and expose as createSessionWithDialog(). Applies to both kf5 and kf6.
2026-07-08 19:31:22 +02:00
Levi Neely d457be9524 remove daemon (moved to ollie-dbus submodule) 2026-07-07 13:02:34 +02:00
Levi Neely e79cb33adb update kde plasmoid and build config 2026-07-06 18:22:38 +02:00
Levi Neely 22771d3c8d phase 7c: Kate plugin
- Side panel (right dock) with live chat view, streaming via ChatUpdated
- Prompt input at bottom, enter to send
- Context actions: 'Ask File' (describe current file), 'Explain' (explain selection)
- Auto-creates session in current file's directory
- Adopts existing sessions on load
2026-07-06 00:05:51 +02:00
Levi Neely e052424d62 phase 5: KRunner plugin
- 'ollie <prompt>': one-shot mode (create, submit, await, notify, kill)
- 'ollie list': show active sessions with state
- 'ollie kill <id>': terminate a session
- KNotification shows result when one-shot completes
- Installs to /usr/lib64/qt6/plugins/kf6/krunner/
2026-07-05 23:30:09 +02:00
Levi Neely f4b5ce3ea0 phase 4: plasma widget (plasmoid)
- QML plasmoid with session list, live chat view, inline prompt input
- C++ QML plugin (OllieDBusClient) for D-Bus interaction
- Real-time updates via D-Bus signals (ChatUpdated, StateChanged)
- State indicators: ○ idle, ● thinking, ⚡ calling tool
- Auto-scroll chat, interrupt button, new session button
- Makefile: plasmoid-install/uninstall targets for local dev
2026-07-05 23:17:09 +02:00
Levi Neely 238efabcb5 phase 3: system tray icon
- KStatusNotifierItem with status indication (passive/active/attention)
- Tooltip: session count and active count
- Right-click menu: New Session, Sessions submenu (per-session kill),
  Stop All, Quit Daemon
- Live updates via D-Bus signals (SessionCreated, SessionKilled,
  StateChanged)
- Builds as ollie-tray (104KB), links KF6StatusNotifierItem + Qt6
2026-07-05 22:50:42 +02:00
Levi Neely 318153493d phase 1: C API + D-Bus daemon skeleton
- lib/capi.go: 18 cgo exports wrapping ollie/core (session lifecycle,
  interaction, state queries, callbacks)
- daemon/: Qt6 D-Bus service (org.ollie.SessionManager) bridging C API
  to D-Bus methods/signals
- Makefile: orchestrates Go c-shared build then CMake build
2026-07-05 22:41:16 +02:00