Static medium → AI refined low — see AI Review below for why (e.g., mx-ctl executable)
M4Marvin/omarchy-plugin-opencode-go • 3594b52 • Scanned 8/25/2026, 11:54:18 AM
First scan — all files are new
Displays OpenCode Go quota (5h rolling, weekly, monthly) as progress bars with percent, dollar limit, reset countdown and behind/ahead pace indicator in the Omarchy bar. Clicking opens a details panel with recent 7-day token history and status. Data is refreshed automatically (default 300s) by running collector.sh which calls the OpenCode Go API and reads local token history from opencode.db.
Plugin is a read-only usage monitor with no arbitrary command execution or unvalidated IPC; only notable privilege is periodic execution of its own bundled collector.sh (fixed args) to query OpenCode API and local SQLite. No malicious patterns found.
Model opencode-go/muse-spark-1.2-contributor • 8/25/2026, 11:54:18 AM
sequenceDiagram
participant User
participant Panel as Panel.qml
participant Service as Service.qml
participant Script as collector.sh
participant API as opencode.ai/zen/go/v1/usage
participant DB as ~/.local/share/opencode/opencode.db
Timer->>Service: triggeredOnStart / every refreshIntervalSec
User->>Panel: click / R key / RightClick
Panel->>Service: refresh()
Service->>Script: Process command ["bash", collectorScript]
Script->>API: curl Bearer key from auth.json
Script->>DB: sqlite3 -readonly query last 7d tokens
Script-->>Service: JSON {status, rolling, weekly, monthly, recentDays}
Service->>Service: Model.parseCollector() validate label=="Go"
Service-->>Panel: account / recentDays / lastError / lastUpdated
Panel-->>User: render bars, countdown, pace, token chartGenerated by AI from static findings + file context
Registers standard Omarchy bar-widget IPC target local.opencode-go with no custom IpcHandler in plugin; base Panel only exposes open/toggle via qs.Commons - no payload parsing or unchecked state mutation found.
Resolves bundled static asset opencode-go.svg used solely as Image source with MultiEffect colorization; never passed to Process, execDetached, or file write - benign resource resolution (also at line 162).
Resolves bundled collector.sh which IS executed, so severity is low not info; but command is fixed ["bash", root.collectorScript] with no user-controlled args and path pinned to plugin dir via Qt.resolvedUrl - no injection surface beyond intended behavior.
No network calls — good.
Flag: Possible obfuscation detected!
2 obfuscation findings — review carefully before updating.
| Type | Severity | File | Line | Snippet | Preview |
|---|---|---|---|---|---|
| binary | high | collector.sh | 1 | #!/usr/bin/env bash set -uo pipefail AUTH_JSON="${OPENCODE_AUTH_JSON:-$HOME/.local/share/opencode/auth.json}" URL=https: | |
| minified | medium | manifest.json | 1 | {"schemaVersion":1,"id":"local.opencode-go","name":"OpenCode Go Usage","version":"1.0.0","author":"OpenCode community"," |
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | fileOps | Util.fileUrl | Panel.qml | 77 | Resolves file URL | source: Qt.resolvedUrl("opencode-go.svg") |
| medium | fileOps | Util.fileUrl | Service.qml | 15 | Resolves file URL | readonly property string collectorScript: decodeURIComponent(String(Qt.resolvedUrl("collector.sh")).replace(/^file:\/\// |
These are expected Quickshell imports, not counted as risk.
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| info | imports | import Quickshell | Panel.qml | 5 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell |
| info | imports | import qs | Panel.qml | 7 | Expected local module import — normal for Omarchy plugins (no risk) | import qs.Commons |
| info | imports | import Quickshell | Service.qml | 2 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell |
| Path | Type | Lines | Size |
|---|---|---|---|
| Model.js | js | 155 | 4646 |
| Panel.qml | qml | 396 | 12531 |
| Service.qml | qml | 66 | 2147 |
| collector.sh | other | 33 | 1894 |
| manifest.json | json | 2 | 679 |
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | ipc | ipcTarget | Panel.qml | 14 | IPC handler exposure — payload appears validated via conditional check (handler checks state before acting; review logic) | ipcTarget: "local.opencode-go" |
| medium | fileOps | Util.fileUrl | Panel.qml | 77 | Resolves file URL | source: Qt.resolvedUrl("opencode-go.svg") |
| medium | fileOps | Util.fileUrl | Service.qml | 15 | Resolves file URL | readonly property string collectorScript: decodeURIComponent(String(Qt.resolvedUrl("collector.sh")).replace(/^file:\/\// |
Generated by omarchy-audit at 2026-08-25T09:54:18.727Z • Commit 3594b52 linked to GitHub for verification • Overview