codebuddy-ide-cn
The package downloads a prebuilt .deb from Tencent's official CDN (download.codebuddy.cn), which is plausibly the project's own infrastructure; the source is not from a swappable host like personal cloud storage, and the checksums are verified, making the risk low despite the non-whitelisted domain.
Triggered rules
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 package downloads a prebuilt .deb from Tencent's official CDN (download.codebuddy.cn), which is plausibly the project's own infrastructure; the source is not from a swappable host like personal cloud storage, and the checksums are verified, making the risk low despite the non-whitelisted domain.
1 higher static finding superseded - not the current verdict (shown for transparency)
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:48
"codebuddy-cn_${pkgver}_amd64.deb::https://download.codebuddy.cn/aiide/linux-x64/CodeBuddy-linux-x64-${pkgver}-${_cb_hash}-cn.deb"
PKGBUILD
1 offending line(s) highlighted# Maintainer: Zeongit J. <https://github.com/JipZeonGit/codebuddy-ide-cn-linux/issues>
#
# This PKGBUILD is licensed under the MIT License.
# It contains no proprietary code; it only orchestrates the download,
# extraction, and packaging of upstream binaries that the end user
# fetches directly from Tencent's official CDN at install time.
#
# The packaged software (Tencent CodeBuddy IDE) remains subject to
# Tencent's proprietary CodeBuddy service license, NOT this MIT notice.
pkgname=codebuddy-ide-cn
_cb_ver=4.12.0
_cb_build=37847260
_cb_hash=b4c35ed0
pkgver="${_cb_ver}.${_cb_build}"
pkgrel=1
pkgdesc='腾讯云代码助手CodeBuddy IDE,是一款辅助编码工具。'
arch=('x86_64')
url='https://github.com/JipZeonGit/codebuddy-ide-cn-linux'
license=('LicenseRef-Tencent-CodeBuddy')
depends=(
'gtk3' 'nss' 'libxss' 'alsa-lib' 'libsecret' 'libxkbfile'
'libnotify' 'libcups'
)
# These are referenced only by optional bundled extensions / utility
# scripts; the main IDE process uses the bundled Electron's node.
optdepends=(
'python: required by the genie skill-creator extension scripts'
'nodejs: required only when invoking bundled CLI helpers in node_modules'
)
makedepends=(
'curl' 'python' 'nodejs' 'npm'
'gcc' 'make' 'pkgconf' 'imagemagick' 'binutils'
)
# Conflict with old package names
conflicts=('codebuddy-cn-ide' 'codebuddycn-ide')
options=('!strip' '!debug')
# Helper repository pinned to a specific commit so the conversion
# logic is reproducible. Bump together with pkgver if needed.
_helper_commit='4b9e6db012bd312c2b233ced9f5d4de8ad341c02'
source=(
"codebuddy-cn_${pkgver}_amd64.deb::https://download.codebuddy.cn/aiide/linux-x64/CodeBuddy-linux-x64-${pkgver}-${_cb_hash}-cn.deb"
"codebuddy-ide-cn-linux-${_helper_commit}.tar.gz::${url}/archive/${_helper_commit}.tar.gz"
'LICENSE.notice'
)
# Leave the deb as-is and let install.sh consume it from the srcdir
noextract=(
"codebuddy-cn_${pkgver}_amd64.deb"
)
sha256sums=('1d6d88eb13bb04f4953fc3702130f28cd8bb8b0a5688cd5023230ff2cfcdf7f0'
'ce8b6a6d03c60e31470e1d4625416f81f28f5acd2df6b34d7027252080c2c7f1'
'b3260549a765c478dc33680c7b9a1a30e5a038456e340d6d25f7748390724241')
prepare() {
local helper_dir="${srcdir}/codebuddy-ide-cn-linux-${_helper_commit}"
[ -f "${helper_dir}/install.sh" ] || {
echo "ERROR: helper repo not extracted at ${helper_dir}" >&2
return 1
}
}
build() {
local helper_dir="${srcdir}/codebuddy-ide-cn-linux-${_helper_commit}"
local deb_path="${srcdir}/codebuddy-cn_${pkgver}_amd64.deb"
local out_dir="${srcdir}/build/${pkgname}"
install -d "${out_dir}"
# Drive the upstream automated installer. Passing CODEBUDDY_APP_ID
# makes its generated start.sh export the matching CHROME_DESKTOP
# value at runtime, so window managers attach the right .desktop.
CODEBUDDY_INSTALL_DIR="${out_dir}" \
CODEBUDDY_APP_ID="${pkgname}" \
CODEBUDDY_APP_DISPLAY_NAME='CodeBuddy CN' \
bash "${helper_dir}/install.sh" --fresh "${deb_path}"
# Discard build-time desktop file
rm -f "${out_dir}/.codebuddycn-linux/${pkgname}.desktop"
}
package() {
local helper_dir="${srcdir}/codebuddy-ide-cn-linux-${_helper_commit}"
local out_dir="${srcdir}/build/${pkgname}"
# 1) App payload under /opt/$pkgname.
install -d "${pkgdir}/opt/${pkgname}"
cp -a "${out_dir}/." "${pkgdir}/opt/${pkgname}/"
# Strip gyp/autotools build relics
find "${pkgdir}/opt/${pkgname}/resources/app/node_modules" \
\( -name 'obj.target' -o -name 'obj' -o -name '.deps' \) \
-type d -prune -exec rm -rf {} + 2>/dev/null || true
rm -f "${pkgdir}/opt/${pkgname}/resources/app/node_modules/@vscode/sqlite3/build/node-addon-api/nothing.a" \
"${pkgdir}/opt/${pkgname}/resources/app/node_modules/@vscode/sqlite3/build/Release/nothing.a" \
"${pkgdir}/opt/${pkgname}/resources/app/node_modules/@vscode/sqlite3/build/Release/node-addon-api/nothing.o" \
2>/dev/null || true
find "${pkgdir}/opt/${pkgname}/resources/app/node_modules" \
-type d -empty -delete 2>/dev/null || true
# 2) /usr/bin launcher.
install -d "${pkgdir}/usr/bin"
cat > "${pkgdir}/usr/bin/${pkgname}" <<EOF
#!/bin/bash
exec /opt/${pkgname}/start.sh "\$@"
EOF
chmod 0755 "${pkgdir}/usr/bin/${pkgname}"
# 3) System desktop entry.
install -d "${pkgdir}/usr/share/applications"
cat > "${pkgdir}/usr/share/applications/${pkgname}.desktop" <<EOF
[Desktop Entry]
Name=CodeBuddy CN
Comment=${pkgdesc}
Exec=/usr/bin/${pkgname} %F
Icon=${pkgname}
Type=Application
Categories=Development;IDE;
StartupNotify=true
StartupWMClass=CodeBuddy CN
MimeType=x-scheme-handler/codebuddycn;
EOF
chmod 0644 "${pkgdir}/usr/share/applications/${pkgname}.desktop"
# 4) Icon
if [ -f "${out_dir}/.codebuddycn-linux/codebuddycn.png" ]; then
install -Dm644 "${out_dir}/.codebuddycn-linux/codebuddycn.png" \
"${pkgdir}/usr/share/icons/hicolor/256x256/apps/${pkgname}.png"
fi
# 5) Licenses.
install -Dm644 "${srcdir}/LICENSE.notice" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.notice"
if [ -f "${helper_dir}/LICENSE" ]; then
install -Dm644 "${helper_dir}/LICENSE" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.helper-MIT"
fi
# Copy upstream licenses
local upstream_license
while IFS= read -r upstream_license; do
install -Dm644 "${out_dir}/${upstream_license}" \
"${pkgdir}/usr/share/licenses/${pkgname}/upstream/${upstream_license}"
done < <(find "${out_dir}" -maxdepth 1 \
\( -name 'LICENSE*' -o -name 'EULA*' -o -name 'NOTICE*' \) \
-type f -exec basename {} \;)
}
Changes since previous scan
--- PKGBUILD @ 2026-09-12 00:25+++ PKGBUILD @ 2026-09-17 00:27@@ -9,9 +9,9 @@ # Tencent's proprietary CodeBuddy service license, NOT this MIT notice. pkgname=codebuddy-ide-cn-_cb_ver=4.11.3-_cb_build=37298507-_cb_hash=2345dde1+_cb_ver=4.12.0+_cb_build=37847260+_cb_hash=b4c35ed0 pkgver="${_cb_ver}.${_cb_build}" pkgrel=1 pkgdesc='腾讯云代码助手CodeBuddy IDE,是一款辅助编码工具。'@@ -42,7 +42,7 @@ # Helper repository pinned to a specific commit so the conversion # logic is reproducible. Bump together with pkgver if needed.-_helper_commit='604c011605e480ba24d1f095b06418cf1eaf23f1'+_helper_commit='4b9e6db012bd312c2b233ced9f5d4de8ad341c02' source=( "codebuddy-cn_${pkgver}_amd64.deb::https://download.codebuddy.cn/aiide/linux-x64/CodeBuddy-linux-x64-${pkgver}-${_cb_hash}-cn.deb"@@ -55,8 +55,8 @@ "codebuddy-cn_${pkgver}_amd64.deb" ) -sha256sums=('d0770a4563535226daace0a57f39812bc8a23aa758073a06fb77857efea888e8'- 'c03fab55406cbd0a2342b4628a93519a8051d36614e415ebb0fbc94727f218b2'+sha256sums=('1d6d88eb13bb04f4953fc3702130f28cd8bb8b0a5688cd5023230ff2cfcdf7f0'+ 'ce8b6a6d03c60e31470e1d4625416f81f28f5acd2df6b34d7027252080c2c7f1' 'b3260549a765c478dc33680c7b9a1a30e5a038456e340d6d25f7748390724241') prepare() {Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 15:12:25 | Medium | 1 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 17:46:09 | Medium | 1 |
| 2026-08-31 15:45:42 | Medium | 2 |