Trust signals
Why this verdict
PkgRadar discounts a release’s score when public reputation argues against novel malware. The verdict above already reflects these — the panel just explains what was applied.
- Weekly downloads
- 8,269Niche · −30% score
- Versions published
- 514
- First published
- Mar 2026
- Publisher
- itharen
Effective trust discount applied: −30% (max across signals — discounts don’t stack). New install-lifecycle deltas vs the previous release would clear the discount.
Recommended action
Review before promotingMixed signals: the package has indicators worth reading before allowing the update in automated dependency flows.
Block this release in CIcurl · GitHub Actions
Fail the build when this package version is added or upgraded. Replace $PKGRADAR_TOKEN with a Pro / Team API key from your dashboard.
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer $PKGRADAR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"specs":["@futdevpro/[email protected]"],"fail_on":"review"}'GitHub Actions step:
- name: PkgRadar gate
run: |
curl -fsS https://pkgradar.com/gate/npm \
-H "Authorization: Bearer ${{ secrets.PKGRADAR_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"specs":["@futdevpro/[email protected]"],"fail_on":"review"}'Why flagged
What the scanner saw
Obfuscation Density: high encoded/escaped-token density
Not observed: package install, lifecycle script execution, or sandbox execution. PkgRadar only inspects on-disk artifacts.
Availability ledger
available
Status history (1 event)
- new → available · risk review · score 28 · status changed
Evidence
Static findings
4 static · 0 from release diff · showing high-signal first.
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| medium | Obfuscation Density | package/client-dist/embedding-registry.module-7J4YIKYG.js | high encoded/escaped-token density | 12 |
| medium | Obfuscation Density | package/client-dist/scheduler.module-WAVGT4HN.js | high encoded/escaped-token density | 12 |
| medium | Obfuscation Density | package/client-dist/wfs.module-DKZBR6B3.js | high encoded/escaped-token density | 12 |
Show all 4 findings (low-signal and informational)
| Severity | Kind | Path | Detail | Points |
|---|---|---|---|---|
| medium | Obfuscation Density | package/client-dist/embedding-registry.module-7J4YIKYG.js | high encoded/escaped-token density | 12 |
| medium | Obfuscation Density | package/client-dist/scheduler.module-WAVGT4HN.js | high encoded/escaped-token density | 12 |
| medium | Obfuscation Density | package/client-dist/wfs.module-DKZBR6B3.js | high encoded/escaped-token density | 12 |
| low | Install-time lifecycle script | package.json | postinstall="npm run rebuild-robotjs" | 5 |
Manifest
Package metadata
Scripts33
buildcd server && pnpm run build-base ; cd ../cli && pnpm run build-base ; pnpm run build-ui-for-server ; pnpm run build-mobilebuild-clicd cli && pnpm run build-basebuild-clientcd client && pnpm run build-basebuild-client-for-servercd client && node scripts/inject-version.cjs && npx ng build --configuration production --base-href /api/app/build-copy-client-distnode -e "const fs=require('fs'),path=require('path'); const s=path.join('client','dist','ccap-revisioned','browser'),d='client-dist'; if(fs.existsSync(s)){ if(fs.existsSync(d)) fs.rmSync(d,{recursive:true}); fs.mkdirSync(d,{recursive:true}); fs.readdirSync(s).forEach(n=>fs.cpSync(path.join(s,n),path.join(d,n),{recursive:true})); }"build-mobilenode scripts/run-build-mobile-pipeline.cjs fullbuild-mobile-after-client-buildnode scripts/run-build-mobile-pipeline.cjs after-clientbuild-mobile-apknode scripts/run-mobile-android-assemble-debug.cjsbuild-mobile-copy-distnode scripts/copy-mobile-apk-to-dist.cjsbuild-mobile-copy-wwwnode scripts/copy-client-dist-to-mobile-www.cjsbuild-mobile-ensure-androidnode scripts/ensure-capacitor-android-platform.cjsbuild-mobile-synccd mobile ; pnpm exec cap sync androidbuild-mobile-webcd client ; node scripts/inject-version.cjs ; ng build --configuration production --base-href ./build-servercd server && pnpm run build-basebuild-ui-for-serverpnpm run build-client-for-server && pnpm run build-copy-client-distcanvas-to-mermaidts-node scripts/canvas-to-mermaid.tspostinstallnpm run rebuild-robotjspreppnpm i ; cd server ; pnpm i ; cd ../cli ; pnpm i ; cd ../client ; pnpm i ; cd ../mobile ; pnpm i ; cd ../e2e ; pnpm i ; cd ../e2e-mobile ; pnpm ipreparenode -e "const {execSync}=require('child_process'),fs=require('fs');if(process.env.CI||process.env.HUSKY==='0'||!fs.existsSync('.git'))process.exit(0);try{execSync('husky',{stdio:'inherit',shell:true});}catch(_){process.exit(0);}"prepublishOnlynode -e "const fs=require('fs');if(!fs.existsSync('client-dist/index.html')){console.error('[prepublishOnly] client-dist/index.html missing - publish blocked. Run: pnpm run build-ui-for-server');process.exit(1);}console.log('[prepublishOnly] client-dist OK');" && node scripts/verify-publish-tarball.cjs && node scripts/verify-publish-smoke-install.cjsrebuild-robotjsnode -e "const {execSync}=require('child_process'),fs=require('fs'),path=require('path');if(process.env.CI==='true'||process.env.SKIP_ROBOTJS_REBUILD==='1'||process.env.npm_config_global==='true')process.exit(0);if(!fs.existsSync(path.join(process.cwd(),'node_modules','robotjs')))process.exit(0);const o={stdio:'inherit',shell:true};try{try{execSync('pnpm rebuild robotjs',o);}catch(_){execSync('npm rebuild robotjs',o);}}catch(e){console.warn('[ccap-postinstall] robotjs rebuild skipped (non-blocking): '+(e&&e.message?e.message:String(e)));}"run-e2e-against-serverpnpm run build-ui-for-server && npx concurrently -k -s first "cd server && pnpm start" "npx wait-on http://localhost:39050/api/app/ -t 90000 && pnpm run test-e2e:server -- tests/client-appearance.spec.ts tests/smoke.spec.ts"startpnpm run prep ; pnpm run start-serverstart-clientcd client && pnpm run servestart-servercd server && pnpm startstart:server-with-uipnpm run build-ui-for-server ; cd server ; pnpm starttestcd cli && pnpm test ; cd ../server && pnpm test ; cd ../client && pnpm testtest-clicd cli && pnpm testtest-clientcd client && pnpm testtest-e2ecd e2e && pnpm test- …and 3 more.
Dependencies29
@agentclientprotocol/sdk^0.18.2@discordjs/voice^0.19.2@futdevpro/fsm-dynamo1.15.13@futdevpro/nts-dynamo1.15.34@inquirer/prompts^5.5.0@lydell/node-pty1.2.0-beta.12botbuilder^4.23.3commander^12.1.0discord.js^14.26.4express~4.21.2http-proxy-middleware~3.0.5imapflow^1.3.3jimp^1.6.1mammoth^1.12.0module-alias^2.3.4multer^2.1.1node-cron^3.0.3node-telegram-bot-api^0.66.0nodemailer^6.10.1openai^6.39.0pdf-parse^1.1.4playwright^1.60.0screenshot-desktop^1.15.4sharp^0.33.5socket.io~4.8.3socket.io-client~4.8.3tesseract.js^5.1.1tslib~2.6.3zod^4.4.3
Optional dependencies1
robotjs^0.6.0