The Problem Teams that juggle multiple local AI‑CLI tools (Gemini, Claude, Codex, Qwen, Goose, Auggie, etc.) end up switching terminals, manually tracking files, and losing context across sessions. The friction shows up as duplicated scripts, ad‑hoc file handling, and fragile glue code that is hard to audit.
What This Does AionUi bundles five independent mini‑projects under a single repo to give a unified desktop‑style UI for those CLIs. The core UI lives in src/renderer/… (React/TSX) and talks to a lightweight Node‑based backend in src/adapter/main.ts. Individual agents (e.g., Gemini, Codex) are isolated under src/agent/<name>/index.ts, each exposing a run‑style function that the UI invokes. Helper scripts for document‑type processing (DOCX, PPTX, XLSX) sit in skills/… and are invoked directly by the agents or by the “Smart File Management” feature. The repository therefore acts as a portfolio of UI, backend adapters, and file‑processing utilities rather than a monolithic product.
How It Is Wired
- Entry point – Running
npm start(derived frompackage.jsonscripts) launches the Electron main process defined insrc/adapter/main.ts. - Adapter → Agent –
main.tscreates aBridge(src/process/bridge/index.ts) that forwards UI IPC messages to the selected agent module (src/agent/gemini/index.ts,src/agent/codex/index.ts, etc.). The bridge imports 17 other modules, making it the most unstable node (instability 0.89). - Agent → Skills – An agent’s
runfunction calls utility functions such asappend_to(used in 11 places) andcreate_json_stream(10 places). These utilities live inskills/docx/ooxml/scripts/validation/base.pyand related Python modules, illustrating cross‑language orchestration. - File I/O – The only external side‑effects observed are filesystem writes (e.g.,
pack_documentinskills/docx/ooxml/scripts/pack.pycopies directories viashutil.copytree) and a handful of subprocess calls (subprocess.runin thumbnail generation). No network calls are present in the static trace. - Hub modules –
src/common/index.tsis imported by 13 other modules but only imports one, making it a high‑fan‑in, low‑fan‑out “hub”. Changes here have a wide blast radius. - Circular imports – Six modules form import cycles (e.g.,
src/process/initStorage.ts↔src/process/utils.ts↔src/agent/gemini/cli/config.ts). These increase build fragility and complicate refactoring.
How To Use It
# Clone the repo
git clone https://github.com/moses-y/AionUi
cd AionUi
# Install Node dependencies (npm is the declared manager)
npm ci
# Build the Electron UI
npm run build # defined in package.json → webpack config at config/webpack/webpack.config.ts
# Start the application
npm start
Configuration: The UI expects local installations of the supported CLI tools (e.g., gemini-cli, claude-code). No explicit env‑var files are shipped; the agents locate binaries via which/PATH.
Running a specific agent: From the UI, select “Gemini” → “New Session”. Internally this triggers src/agent/gemini/index.ts which loads src/process/initStorage.ts (the storage hub) and then calls the Gemini CLI through a child process.
Real‑World Use A product team integrates AionUi on each developer workstation. When a developer runs gemini generate --output report.pdf, the UI auto‑detects the new file, shows a live preview in the “Preview Panel” (src/renderer/pages/conversation/preview/components/PreviewPanel/PreviewPanel.tsx), and stores the conversation in src/common/storage for later retrieval. The same workflow works for Codex, Qwen, or any added CLI without leaving the UI.
Code Health & Issues
- Critical – Secrets in
.github/workflows/gemini-dispatch.yml(APP_PRIVATE_KEY). - High – Unpinned third‑party actions; direct push to default branch in
build-and-release.yml. - Medium – No Dependabot; missing dependency‑vulnerability gate; large binary assets (>5 MB) in
resources/; persist‑credentials left on checkout; postinstall script inpackage.json; test coverage only 1 % of source. - Low – No job timeout limits in CI workflows.
Measured findings (static analysis) include six import cycles, 34 deep‑nesting hotspots, duplicated 6‑line blocks across 91 files, and six oversized files (>600 LOC). The hub modules (src/common/index.ts, src/process/initStorage.ts) carry the highest fan‑in, so any change there risks wide regression.
The Bottom Line AionUi delivers a workable UI layer that unifies many local AI CLIs and supplies useful file‑processing helpers. The codebase is functional but fragmented: multiple independent projects, several import cycles, and a modest test suite make large‑scale maintenance risky. It is suitable for teams that need a quick local UI and are prepared to address the identified security and maintainability gaps.