aionui

LOW
maintainer zxp19821005 0 votes scanned 2026-11-01 00:21:48.120785
View on AUR
Why flagged

The use of `bunx` and `npx`-like tools is for building the project from its own source code fetched from GitHub; the executed packages (electron-builder, electron-vite) are standard build tools for Electron apps and are used in a controlled, offline-capable environment with version pinning and local caches.

Triggered rules

Low AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The use of `bunx` and `npx`-like tools is for building the project from its own source code fetched from GitHub; the executed packages (electron-builder, electron-vite) are standard build tools for Electron apps and are used in a controlled, offline-capable environment with version pinning and local caches.

1 higher static finding superseded - not the current verdict (shown for transparency)
Medium npx/bunx/deno executes a remote package remote_code_tool

`npx`/`bunx`/`pnpm dlx`/`deno run <url>` downloads AND runs a remote package at build time — the moral equivalent of piping a download into a shell. Severity downgraded: Node.js consumer context.

  • PKGBUILD:100 bunx electron-builder install-app-deps
  • PKGBUILD:115 bunx electron-vite build --config packages/desktop/electron.vite.config.ts
  • PKGBUILD:121 bunx electron-builder --linux dir --"${TARGET_ARCH}" -c.electronDist="${ELECTRON_DIST}" --config packages/desktop/electron-builder.yml

PKGBUILD

3 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=aionui
3_pkgname=AionUi
4pkgver=2.2.2
5_electronversion=37
6_nodeversion=22
7pkgrel=2
8pkgdesc="Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more."
9arch=(
10 'aarch64'
11 'x86_64'
12)
13url="https://www.aionui.com/"
14_ghurl="https://github.com/iOfficeAI/AionUi"
15license=('Apache-2.0')
16conflicts=("${pkgname}-bin")
17depends=(
18 "electron${_electronversion}"
19 'python'
20 'nodejs'
21 'python-typing_extensions'
22 'python-packaging'
23 'aioncore'
24)
25makedepends=(
26 'bun'
27 'nvm'
28 'gendesk'
29 'curl'
30 'git'
31 'jq'
32)
33source=(
34 "${pkgname}-${pkgver}.tar.gz::${_ghurl}/archive/refs/tags/v${pkgver}.tar.gz"
35 "${pkgname}.sh"
36)
37sha256sums=('a6049f5b76c7b7891a7caaf7be717d38695698b8d70985ad2a05d83658986873'
38 'fe033c7446c688abcb9a007d75f40eb9ca62756880cfde6be54fdf27a5bd94a8')
39_ensure_local_nvm() {
40 local NVM_DIR="${srcdir}/.nvm"
41 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
42 nvm install "${_nodeversion}"
43 nvm use "${_nodeversion}"
44}
45_get_project_dir() {
46 local d
47 while IFS= read -r d; do
48 find "$d" -name "package.json" ! -path "*/node_modules/*" 2>/dev/null | grep -q . && { echo "$d"; return; }
49 done < <(find "${srcdir}" -maxdepth 1 -mindepth 1 -type d ! -name '.*')
50}
51_get_app_dir() {
52 find "${srcdir}" -type f -name "resources.pak" -print 2>/dev/null | while read f; do [ -d "${f%/*}/resources" ] && echo "${f%/*}" && break; done
53}
54_get_electron_version() {
55 _elec_ver=$(find "$(_get_project_dir)" -name "package.json" ! -name "node_modules" \
56 -exec jq -r '.devDependencies.electron // empty' {} + 2>/dev/null | grep -v "^$" | head -n 1)
57 _elec_ver=$(echo "${_elec_ver}" | sed 's/[^0-9.]//g')
58 _main_ver=$(echo "${_elec_ver}" | cut -d. -f1)
59 echo -e "The electron version is: \033[1;31m${_main_ver}\033[0m"
60}
61_set_build_env() {
62 export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
63 export ELECTRON_OVERRIDE_DIST_PATH="${ELECTRON_DIST}"
64 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
65 export ELECTRON_BUILDER_OFFLINE=true
66 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/^v//')"
67 export HOME="${srcdir}/.home"
68 export XDG_CACHE_HOME="${HOME}/.cache"
69 export XDG_CONFIG_HOME="${HOME}/.config"
70 export XDG_DATA_HOME="${HOME}/.local/share"
71 export BUN_INSTALL_CACHE_DIR="${HOME}/.bun/cache"
72 export BUN_INSTALL_GLOBAL_DIR="${HOME}/.bun/global"
73 export BUN_INSTALL_BIN="${HOME}/.bun/bin"
74 export BUN_CONFIG_SKIP_SAVE_LOCKFILE=1
75 export BUN_CONFIG_SKIP_LOAD_LOCKFILE=1
76 export BUN_DISABLE_DOTENV=1
77 export DO_NOT_TRACK=1
78 export BUN_JOBS="$(nproc)"
79 mkdir -p "${HOME}" "${BUN_INSTALL_CACHE_DIR}" "${BUN_INSTALL_GLOBAL_DIR}" "${BUN_INSTALL_BIN}"
80}
81prepare() {
82 cd "$(_get_project_dir)"
83 _get_electron_version
84 sed -i -e "
85 s/@electronversion@/${_electronversion}/g
86 s/@appname@/${pkgname}/g
87 s/@runname@/app.asar/g
88 " "${srcdir}/${pkgname}.sh"
89 gendesk -q -f -n \
90 --pkgname="${pkgname}" \
91 --pkgdesc="${pkgdesc}" \
92 --categories="System" \
93 --name="${pkgname}" \
94 --exec="${pkgname} %U"
95 _ensure_local_nvm
96 _set_build_env
97 find packages -type f -exec sed -i "s/process.resourcesPath/\'\/usr\/lib\/${pkgname}\'/g" {} +
98 jq --arg ver "${SYSTEM_ELECTRON_VERSION}" '.devDependencies.electron = $ver' package.json > package.json.tmp && mv package.json.tmp package.json
99 bun run postinstall || true
100 bunx electron-builder install-app-deps
101}
102build() {
103 cd "${_src}"
104 _set_build_env
105 _ensure_local_nvm
106 _ensure_local_nvm
107 _set_build_env
108 if [[ "${CARCH}" == "x86_64" ]]; then
109 TARGET_ARCH="x64"
110 elif [[ "${CARCH}" == "aarch64" ]]; then
111 TARGET_ARCH="arm64"
112 else
113 TARGET_ARCH="x64"
114 fi
115 bunx electron-vite build --config packages/desktop/electron.vite.config.ts
116 node scripts/build-mcp-servers.js
117 node -e "const { prepareAioncore } = require('./packages/shared-scripts/src/prepare-aioncore.js'); \
118 const { resolveAioncoreVersion } = require('./scripts/resolveAioncoreVersion.js'); \
119 prepareAioncore({ projectRoot: process.cwd(), platform: 'linux', arch: '${TARGET_ARCH}'});"
120 node scripts/prepareHubResources.js
121 bunx electron-builder --linux dir --"${TARGET_ARCH}" -c.electronDist="${ELECTRON_DIST}" --config packages/desktop/electron-builder.yml
122}
123package() {
124 install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
125 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
126 local _app_dir="$(_get_app_dir)"
127 cp -a "${_app_dir}/resources/." "${pkgdir}/usr/lib/${pkgname}/"
128 rm -rf "${pkgdir}/usr/lib/${pkgname}/default_app.asar"
129 local _src="$(_get_project_dir)"
130 install -Dm644 "${_src}/resources/app.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
131 install -Dm644 "${_src}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
132 install -Dm644 "${_src}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
133}
134

Scan history

Scanned at (UTC)SeverityRules
2026-11-01 00:21:48 Low 2
2026-10-31 00:07:41 Low 2
2026-10-30 00:29:30 Low 2
2026-10-29 00:13:55 Low 2
2026-10-28 00:06:54 Low 2
2026-10-27 00:23:28 Low 2
2026-10-26 00:12:40 Low 2
2026-10-25 00:20:48 Low 2
2026-10-24 00:14:55 Low 2
2026-10-23 00:02:19 Low 2
2026-10-22 00:13:10 Low 2
2026-10-21 00:12:50 Low 2
2026-10-20 00:10:31 Low 2
2026-10-19 00:03:55 Low 2
2026-10-18 00:06:55 Low 2
2026-10-17 00:21:55 Low 2
2026-10-16 00:12:47 Low 2
2026-10-15 00:28:05 Low 2
2026-10-14 00:06:47 Low 2
2026-10-13 00:23:45 Low 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion