diff --git a/shell/plugins/agents/Panel.qml b/shell/plugins/agents/Panel.qml index 94835378..6637531a 100644 --- a/shell/plugins/agents/Panel.qml +++ b/shell/plugins/agents/Panel.qml @@ -59,6 +59,11 @@ Panel { usage.refreshAll(true) } + function launchAgent() { + if (root.bar) root.bar.run("omarchy-agent --pick") + root.close() + } + // ---------------------------------------------------------------- limits // // Both providers report the same two shapes: a short rolling session window @@ -337,7 +342,7 @@ Panel { text: "󱚣" active: root.alarming onPressed: function(buttonCode) { - if (buttonCode === Qt.RightButton) root.refreshNow() + if (buttonCode === Qt.RightButton) root.launchAgent() else if (buttonCode === Qt.MiddleButton) root.selectProvider(root.providerIndex + 1) else root.toggle() } diff --git a/shell/plugins/agents/README.md b/shell/plugins/agents/README.md index efc2dd31..51ad4e43 100644 --- a/shell/plugins/agents/README.md +++ b/shell/plugins/agents/README.md @@ -94,7 +94,7 @@ only adds the meter and the spent-of-funded line under the real figure. ## Interactions -- Bar icon: left = panel, right = refresh, middle = next subscription. +- Bar icon: left = panel, right = launch agent, middle = next subscription. - Panel: `h`/`l` switch subscription, `j`/`k` scroll, `r` or Enter refresh, Tab moves to the neighboring bar panel, Esc closes. - IPC: `omarchy-shell omarchy.agents `. diff --git a/shell/plugins/bar/README.md b/shell/plugins/bar/README.md index 2f832ed9..069e7319 100644 --- a/shell/plugins/bar/README.md +++ b/shell/plugins/bar/README.md @@ -67,7 +67,7 @@ Example `shell.json` (bar subtree only shown): | `omarchy.audio` | Volume icon + popup with master slider, output-device picker, per-app mixer | left = popup · right = mute · middle = popup · scroll = volume | | `omarchy.network` | Wi-Fi/Ethernet icon + popup with Wi-Fi scan, signal, connect, DNS provider selection | left = popup · right = nmtui | | `omarchy.tailscale` | Tailscale status, connection switcher, machine browser, and copy actions | left = popup · right = toggle · middle = refresh | -| `omarchy.agents` | AI coding agent limits with pace, today, last week, and all-time model breakdown | left = panel · right = refresh · middle = next subscription | +| `omarchy.agents` | AI coding agent limits with pace, today, last week, and all-time model breakdown | left = panel · right = launch agent · middle = next subscription | | `omarchy.power` | Battery/AC icon + popup with battery stats, power profiles, and system info | left = popup · right = toggle percentage | | `omarchy.bluetooth` | Bluetooth icon + popup with device list, connect/disconnect, battery | left = popup · right = toggle radio · middle = bluetoothctl TUI | | `omarchy.monitor` | Brightness and laptop display controls | left = popup | diff --git a/test/shell.d/agents-panel-test.sh b/test/shell.d/agents-panel-test.sh new file mode 100755 index 00000000..c09bab87 --- /dev/null +++ b/test/shell.d/agents-panel-test.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -euo pipefail + +source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" + +run_node_test <<'JS' +const fs = require('fs') +const panelSource = fs.readFileSync(root + '/shell/plugins/agents/Panel.qml', 'utf8') + +assert(/function launchAgent\(\)/.test(panelSource), 'agents panel launches the default agent') +assert(/root\.bar\.run\("omarchy-agent --pick"\)/.test(panelSource), 'agents panel uses the desktop agent launcher') +assert(/if \(buttonCode === Qt\.RightButton\) root\.launchAgent\(\)/.test(panelSource), 'agents right click launches the agent') +assert(/else if \(buttonCode === Qt\.MiddleButton\) root\.selectProvider\(root\.providerIndex \+ 1\)/.test(panelSource), 'agents middle click still advances the subscription') +assert(/else root\.toggle\(\)/.test(panelSource), 'agents left click still toggles the panel') +assert(!/if \(buttonCode === Qt\.RightButton\) root\.refreshNow\(\)/.test(panelSource), 'agents right click no longer refreshes') +JS