Commit Graph

400 Commits

Author SHA1 Message Date
Levi Neely eb12627ea0 kde/gui: fix binding loop and Column anchor errors
- Remove chatPane property from delegate (was shadowing id, causing binding loop)
- Remove contentArea MouseArea from inside Column (invalid anchor)
- Simplify hovered property to use only headerArea
- Edit button now copies to clipboard instead of trying to access chatPane
2026-09-04 14:20:40 +02:00
Levi Neely 75a2da080e kde/gui: Acme-style mouse actions and one-handed workflow
Add Plan 9/Acme-inspired mouse interaction:
- B2 (middle-click): Execute selected text as prompt
- B3 (right-click): Plumb selection via plan9port, fallback to context menu

Plumber integration (plumber.h/cpp):
- Wraps plan9port's plumb command for context-aware actions
- Auto-detects plumb binary in common plan9port locations
- Graceful fallback when plumber not available

Block tag line (ChatBlockDelegate):
- Hover-visible action buttons: Copy, Retry, Continue, Edit
- Per-block-type actions (Retry for assistant/error, Edit for user)

Action toolbar (ChatPane):
- Stop, Compact, Copy Last, Templates dropdown
- Mouse-first workflow without keyboard shortcuts

Input area improvements:
- Larger touch targets (48px send button, 32px toggle)
- Clear and Paste buttons
- B2/B3 mouse actions in prompt input
- Placeholder text explains mouse actions

Context menus now include:
- Execute Selection (B2)
- Plumb Selection (B3)
- Standard Cut/Copy/Paste/Select All
2026-09-04 13:47:51 +02:00
Levi Neely 5f68871c65 kde/gui: render markdown tables in chat view
Add table rendering support to ChatBlockModel:
- isTableLine(): detect pipe-delimited table rows
- renderTable(): convert table lines to HTML <table>
- renderProse(): split prose into text/table segments
- incrementalAppend: handle table state transitions during streaming

Tables render with header row detection (before |---|---| separator)
and proper incremental updates as content streams in.
2026-09-04 13:28:06 +02:00
Levi Neely 307687542c gui: add submit button to prompt input
Add a ▶ button next to the text area for mouse-based submission.
Extract shared doSubmit() on the input RowLayout. Button uses
focusPolicy: Qt.NoFocus so it doesn't steal focus from the TextArea.
2026-08-28 13:40:14 +02:00
Levi Neely 9829498d57 gui: fix text selection in prompt box
Replace MouseArea overlay with TapHandler inside TextArea.
The MouseArea sat on top and intercepted left-button press events,
blocking click-and-drag text selection. TapHandler cooperates with
the TextArea's built-in selection handling.
2026-08-28 13:25:54 +02:00
Ollie Agent bb6df3a073 Hide context blocks in KDE chat 2026-08-20 17:34:53 +02:00
Levi Neely 013a669e9d build: simplify Makefile, add uninstall target
Reduced from 18 targets to 10:
  all, build, go, tools, kde, install, install-data, test, clean, uninstall

Key changes:
- Build to build/ dir first, install only after tests pass
- Merged ninep+core into 'go' (builds olliesrv, ollie-9p, toolsrv)
- Removed build-kf5/install-kf5/kde-kf5 (cmake auto-detects)
- Merged test-core+test-9p into 'test'
- Removed 'client' target (lib9p now built by cmake as custom command)
- Added 'uninstall' target

CMakeLists.txt changes:
- lib9p built via add_custom_command instead of requiring pre-built .so
- add_dependencies ensures lib9p built before KDE targets need it
2026-08-20 11:56:00 +02:00
Levi Neely 24621294b0 kde: use embedded octopus icon directly, not fromTheme
QIcon::fromTheme("ollie") was finding a stale brain SVG at
/usr/share/icons/ instead of the octopus. Now the app uses the
embedded resource for both window icon and systray, and sets
app.setWindowIcon() explicitly.

Also fixed the .desktop file to use the theme name 'ollie' instead
of a hardcoded absolute path.
2026-08-20 08:59:04 +02:00
Levi Neely 5a8f7e394e Fix session settings not populating: use baseName not displayName
killTargetSessionName was set to item.name (displayName, e.g. 'ollie (1)')
instead of item.baseName (the actual 9P path component 'ollie').
This caused readSessionConfig() to read from a non-existent path.
Also fixes the Goal dialog which had the same latent bug.
2026-08-19 18:15:20 +02:00
Levi Neely a7b8c4c2ce Add 'none' workflow option as the default (no-op on goal set)
- Workflow() no longer defaults to 'conductor' when empty
- runWorkflow() returns immediately for '' or 'none'
- 'none' listed first in the workflows file output
- QML dropdowns default to 'none' instead of 'conductor'
- C++ fallback uses 'none' when server unreachable
2026-08-19 18:09:09 +02:00
Levi Neely 9f1aec1384 Add session settings dialog (edit mode for NewSessionDialog)
- Add session-level cfg file (read: name/cwd/remote/workflow/variant/yolo;
  write: workflow, variant, cwd)
- Add readSessionConfig() and updateSessionConfig() to C++ client
- NewSessionDialog supports editMode: pre-populates fields from session cfg,
  title becomes 'Session Settings', button becomes 'Save'
- Name and Remote fields disabled in edit mode (non-reconfigurable)
- YOLO checkbox hidden in edit mode
- Only changed values are written back on save
- Add 'Settings...' to session context menu in SessionTree
- Wire sessionSettingsRequested signal through to dialog
2026-08-19 18:07:25 +02:00
Levi Neely 620cd6c66e Split workflow/variant into two dropdowns in NewSessionDialog
- loadWorkflows() parses tab-separated 'name<TAB>variants' format
- Add variantsForWorkflow() to return variant list for a workflow
- Add m_workflowVariants map to cache per-workflow variant lists
- createSession() accepts variant parameter, passes to server
- QML: separate Workflow and Variant ComboBoxes
- Variant dropdown repopulates on workflow selection change
- 'default' always present; non-default variants pass through to launcher
2026-08-19 18:01:36 +02:00
Levi Neely 9bb2e41e33 Add memory section to system prompt, fix icon resolution
- Add OptMem memory section to system_prompt.md with tool-based API
- Fix KRunner plugin icon: resolve via QStandardPaths instead of theme name
- Fix desktop file icon: use absolute path to bypass stale system icon
2026-08-19 10:02:51 +02:00
Levi Neely 95a457e823 fix kf5 build path 2026-08-19 08:43:48 +02:00
Ollie Agent db8414f815 Add optional system tray support to KDE GUI 2026-08-18 13:55:46 +02:00
Ollie Agent f36a782632 Update KDE branding to Ollie octopus icon 2026-08-18 13:48:42 +02:00
Ollie Agent 5adc3b37d8 remove plan9port runtime dependency 2026-08-18 13:36:09 +02:00
Ollie Agent 4e381b1293 Add YOLO option to session dialog 2026-08-18 12:54:36 +02:00
Ollie Agent 6819b5f391 Simplify diagram rendering and document architecture 2026-08-18 12:11:04 +02:00
Ollie Agent 7050bccfdb Fix GoalDialog QML resource inclusion 2026-08-17 17:28:22 +02:00
Levi Neely 8a1efe0907 session: require cwd, make agent cwd read-only, sanitize message history
Session creation now requires cwd= parameter (no fallback to daemon cwd).
Agent cwd is read-only — agents inherit from session, cannot override.

Frontends updated:
- NewSessionDialog: added Directory field with Browse button
- NewAgentDialog: removed Directory field
- createAgent(): removed cwd parameter
- Kate plugin: passes cwd when creating kate session
- Dolphin: removed cwd from agent/new call

Message history sanitization (backend.SanitizeMessages):
- Removes dangling tool calls (assistant with ToolCalls but missing results)
- Removes orphan tool results (tool message without preceding call)
- Applied before sub-agent context inheritance
- Applied before session persistence save
- Applied after compaction (defensive)

Includes unit tests for all sanitization cases.
2026-08-17 14:15:55 +02:00
Levi Neely a17dd683df Split session/idx and agent/idx, fix sub-agent tree display
Server:
- session/idx now outputs: session-id, session-name, paused, connected, remote, cwd
- session/{s}/agent/idx now outputs: session-id, agent-id, agent-name, parent-id, depth, state
- Add error if parent agent not found during sub-agent spawn

GUI:
- refreshSessions() reads session index, then agent/idx per session
- Auto-select first top-level agent (depth 0) instead of first in list
- SessionModel tracks agent expansion separately from session expansion
- Agents with children show expand/collapse arrows and are collapsible
- Add hasChildren role to SessionModel

Tools:
- subagent_spawn now passes parent= argument for proper depth tracking
- Remove hardcoded max_depth=5, use server default of 1
- Makefile installs shell script tools from data/tools/

KRunner:
- Update to parse new session/idx format
2026-08-17 13:03:26 +02:00
Levi Neely 958d3d2ddf workflows: script-based workflows with session-level CWD
- Workflows are executable scripts in data/workflows/
- New 'workflows' 9P file lists available workflows
- Goal file stores text; writing triggers workflow if status allows
- goalstatus file for status read/write, goalwait for blocking
- Session ctl accepts 'run [workflow]' command
- Session now owns CWD; agents inherit via callback
- Conductor workflow: creates agent, primes with instructions, exits
- GUI workflow combo reads from workflows, not agents
- Persistence includes goal, goalstatus, workflow, and session CWD
2026-08-17 12:00:10 +02:00
Levi Neely 743e40c2f8 selectable workflow in new session 2026-08-17 10:52:53 +02:00
Levi Neely 957617cee7 cmake: move lib9p install after GNUInstallDirs include
CMAKE_INSTALL_LIBDIR was empty when the install() ran because
GNUInstallDirs hadn't been included yet.
2026-08-17 10:35:26 +02:00
Ollie Agent c34f4a1b31 update KDE integration documentation and library install 2026-08-17 00:15:56 +02:00
Ollie Agent 68616cb247 update Kate integration prompts 2026-08-17 00:05:35 +02:00
Ollie Agent e854e91b7f replace just build orchestration with make 2026-08-17 00:01:27 +02:00
Ollie Agent 7182db56cf fix GUI dialog contrast and focus behavior 2026-08-16 23:55:43 +02:00
Ollie Agent e51a1d4ff7 Update architecture documentation and remove obsolete frontends 2026-08-16 19:21:26 +02:00
Ollie Agent 57aa906e5f move toolsrv client into olliesrv 2026-08-16 19:07:25 +02:00
Ollie Agent b321eed99f use 9fans client directly 2026-08-16 19:00:48 +02:00
Ollie Agent 16a2b72051 consolidate 9P clients 2026-08-16 18:56:11 +02:00
Ollie Agent e972b5666a add metrics queries and agent-scoped plans 2026-08-16 17:00:11 +02:00
Ollie Agent 6d6b49f2bb improve acme tools, fix focus stealing in kde gui 2026-08-16 16:00:59 +02:00
Ollie Agent 6be71761b5 Allow Ollie GUI to shrink in tiled layouts 2026-08-16 15:17:52 +02:00
Ollie Agent 7451b77287 Consolidate KDE gitignore rules 2026-08-16 15:14:12 +02:00
Ollie Agent 1e0f9cacd0 Integrate KDE frontend into main repository 2026-08-16 15:08:33 +02:00
Ollie Agent 65959cf2bb Update KDE GUI submodule 2026-08-16 14:55:12 +02:00
Ollie Agent 1d46a8e035 Update KDE GUI submodule 2026-08-16 14:49:10 +02:00
Ollie Agent 6cb78aeb9c Update KDE GUI submodule 2026-08-16 12:56:58 +02:00
Levi Neely 8b6b08b54f kde: update submodule (focus-stealing fix) 2026-08-14 14:27:45 +02:00
Levi Neely 2b27c9c165 update kde submodule 2026-08-13 22:37:26 +02:00
Levi Neely 4f8fd6956b update kde submodule 2026-08-13 22:31:12 +02:00
Levi Neely 78d11f2ce8 update kde submodule 2026-08-13 12:27:39 +02:00
Levi Neely 1e2ce1f899 chore: update kde submodule 2026-08-12 16:21:10 +02:00
Levi Neely 85f51e3b35 chore: update kde submodule 2026-08-12 16:19:36 +02:00
Levi Neely 10423c3339 chore: update kde submodule 2026-08-12 16:19:04 +02:00
Ollie Agent da5ce08af6 update kde submodule: fix tool output rendering 2026-08-09 12:14:09 +02:00
Ollie Agent 090ba270f4 update kde submodule: fix tool block rendering 2026-08-09 12:09:48 +02:00