Commit Graph

24 Commits

Author SHA1 Message Date
Levi Neely 1afedfca7d dbus: pass systemPrompt arg to CreateSession calls 2026-07-21 14:28:20 +02:00
Levi Neely d707dd3a56 kf5: fix build error and sync features with KF6
- kate: use KTextEditor::MovingInterface for newMovingRange() on KF5
- gui: rewrite main-kf5.qml with tiling panes, session graph, per-pane
  chat model, drag-to-swap, sloppy focus (matching KF6 ChatPane.qml)
2026-07-17 09:41:33 +02:00
Levi Neely 8e3418c4fe kate: navigate to applied line range after Apply 2026-07-16 21:54:07 +02:00
Levi Neely 0fa5522673 kate: apply button uses line ranges from fence metadata
Code fences with /path:start-end on the fence line get parsed.
Apply replaces that line range in the target file.
Fallback: insert at cursor or replace selection.
agent-copilot.md instructs model to produce ranged fences.
2026-07-16 21:41:31 +02:00
Levi Neely 0599fbceb7 kate: fix diff/apply URL scheme (use path not host to avoid QUrl IPv4 normalization) 2026-07-16 21:19:40 +02:00
Levi Neely 84b3123461 kate: fix context menu (use contextMenuAboutToShow signal, deduplicate actions)
Makefile: fix BUILD_DIR, install kate plugin to kf6/ path
prompts: clarify tools-elevate does NOT run as root
2026-07-16 21:07:39 +02:00
Levi Neely abec12e09f kate: editor integration — context menu, apply button, inline annotations
Context menu: right-click selection shows Fix/Refactor/Add tests/Document
actions that submit the selection with file+line context to the agent.

Apply button: code blocks in assistant messages get a clickable Apply
button that inserts the code into the target file (detected from
preceding prose) or the active document.

Inline annotations: file:line references in agent output are highlighted
with MovingRanges in the active editor view.
2026-07-16 20:44:46 +02:00
Levi Neely 378ea83de7 kate: add kill session button in upper right 2026-07-16 14:50:47 +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 6642ab014b multi-line prompt input across all front-ends
Replace single-line TextField/QLineEdit with multi-line TextArea/QPlainTextEdit.
Enter sends, Shift+Enter and Ctrl+J insert newlines. Max height capped so the
input area does not take over the panel.
2026-07-16 06:19:14 +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 d5e27f1c82 fix kate crash 2026-07-15 17:55:14 +02:00
Levi Neely 455d9c9190 kate: fix use-after-free crash in setupGhostProvider
m_ghost was parented to the view, so Qt parent-child cleanup could
destroy it when a view was replaced. The raw pointer remained non-null,
causing a double-free on the next viewChanged signal.

Fix by using QPointer<OllieGhostProvider> which auto-nulls on destroy.

Also replace qobject_cast with dynamic_cast for KF5 KTextEditor
interfaces to avoid crashes when qt_metacast accesses uninitialized
KateViewConfig during early view activation.
2026-07-15 11:06:20 +02:00
Levi Neely 5d18806ad6 kate: add KF5 preprocessor guards for InlineNote and completion APIs
KF5's KTextEditor uses interface classes (InlineNoteInterface,
CodeCompletionInterface, ConfigInterface) accessed via qobject_cast,
whereas KF6 puts these methods directly on View. Wrap the differences
with #if KTEXTEDITOR_VERSION_MAJOR >= 6 so both build paths compile.

Fixes:
- inlineNotes() return type: QVector<int> (KF5) vs QList<int> (KF6)
- paintInlineNote() signature: 2 params (KF5) vs 3 params (KF6)
- register/unregisterInlineNoteProvider via InlineNoteInterface
- isCompletionActive via CodeCompletionInterface
- configValue via ConfigInterface
2026-07-15 09:59:56 +02:00
Levi Neely 18402a2be7 kate: config page improvements, status bar dedup, default backend/model
- Add Default Backend / Default Model config for chat sessions
  (overrides OLLIE_BACKEND / OLLIE_MODEL env vars)
- Pass configured backend/model to CreateSession D-Bus call
- Move "Completion enabled on startup" checkbox below text fields
- Deduplicate status bar indicator when multiple views exist
- Make install target depend on build
- Remove Escape-to-dismiss (conflicts with Kate popups)
2026-07-14 14:53:13 +02:00
Levi Neely b67e82dca0 kate: fix ghost text provider, add multi-line overlay and config
- Fix parent not passed to InlineNoteProvider causing provider recreation
  on every viewChanged signal (killed debounce timer, no completions fired)
- Add view() accessor, use it in setupGhostProvider check
- Null-check focusProxy() to prevent crash during early viewChanged
- Multi-line completions: first line as inline note, continuation lines
  rendered via GhostOverlay floating widget
- Guard event filter and signal handlers against active completion popups
- Add suggestion cycling (Meta+O,N / Meta+O,P) with history
- Add Meta+O,C to toggle completions on/off with status bar indicator
- Add Meta+O,D to dismiss current suggestion
- Add Meta+O,Tab to manually trigger a completion
- Add config page for completion backend and model override
- Pass backend/model config via D-Bus Complete context parameter
2026-07-14 13:24:03 +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 c3155f53d8 use system font sizes instead of hardcoded pixel values
Plasmoid uses Kirigami.Theme.defaultFont/smallFont. Kate and KRunner
use QApplication::font(). All components now respect KDE font settings.
2026-07-06 13:40:40 +02:00
Levi Neely 12e6dbccdb kate/krunner/tray: add session rename, pick session, CMakeLists-active
- Kate: add Pick and Rename buttons, extract projectBaseDir helper
- KRunner: session matching improvements
- Tray: session display updates
- Add CMakeLists-active.txt for KF5 build reference
2026-07-06 13:19:05 +02:00
Levi Neely a1f2c22cbf plasmoid: add cwd label and status indicator, show full session IDs
- Add activeCwd property to OllieDBusClient (fetched via GetConfig)
- Add colored status dot to compact and full representations
- Show session cwd path in the header label
- Remove .substring(0,14) / .left(12) / .left(14) truncations
  from plasmoid, kate plugin, tray, and daemon notifications
2026-07-06 10:02:08 +02:00
Levi Neely 2795747d02 Add KF5/Qt5 support for Plasma 5.27
- CMakeLists-kf5.txt: side-by-side build config for KF5/Qt5
- #if QT_VERSION_MAJOR guards in krunner, kate, plasmoid sources
- Namespace alias (Plasma:: for KF5, KRunner:: for KF6)
- Manual QQmlExtensionPlugin for Qt5 (qmlplugin.cpp + qmldir)
- Plasma 5 compatible metadata-kf5.json and main-kf5.qml
- Makefile: kf5, kf5-install, kf5-uninstall targets

Build with 'make kf5', install with 'make kf5-install'.
2026-07-06 09:18:04 +02:00
Levi Neely f9e902a2ad graceful shutdown and error handling
- Daemon: async-signal-safe SIGTERM/SIGINT via socketpair
- Tray: survives daemon restart, watches for service appear/disappear
- KRunner: skips matches if daemon unreachable
- Kate: shows error message if daemon not running or session creation fails
2026-07-06 00:24:11 +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