registry  /  @tianshu-ai/tianshu  /  0.4.8

@tianshu-ai/tianshu@0.4.8

An open AI agent platform with a sidecar browser. Built in public.

Static Scan Results

scanned 5d ago · by rust-scanner

Static analysis completed at 65.0% confidence. No malicious behavior was detected; 14 low-signal pattern(s) were surfaced and cleared.

Static reason
No blocking static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNativeBindingsNetworkShellWebSocket
Supply chain
HighEntropyStringsMinifiedObfuscatedProtestwareUrlStrings
Manifest
WildcardDependency
scanned 327 file(s), 8.07 MB of source, external domains: 127.0.0.1, api.anthropic.com, api.openai.com, api.search.brave.com, api.tavily.com, dashscope.aliyuncs.com, example.com, generativelanguage.googleapis.com, github.com, host.openshell.internal, ilinkai.weixin.qq.com, novac2c.cdn.weixin.qq.com, raw.githubusercontent.com, react.dev, reactrouter.com, registry.npmjs.org, www.apple.com, www.docker.com, www.w3.org

Source & flagged code

3 flagged · loading source
bin/tianshu.mjsView file
29L30: const { main } = await import(distEntry); L31: const code = await main(process.argv.slice(2));
Medium
Dynamic Require

Package source references dynamic require/import behavior.

bin/tianshu.mjsView on unpkg · L29
plugins/wechat/dist/ilink-media.jsView file
18// L19: // The CDN URL itself is `https://novac2c.cdn.weixin.qq.com/c2c` L20: // (platform constant, matches what Tencent's plugin hard-codes). ... L76: }); L77: const resp = JSON.parse(raw); L78: if (resp.ret && resp.ret !== 0) { ... L92: headers: { "Content-Type": "application/octet-stream" }, L93: body: new Uint8Array(opts.ciphertext), L94: });
Low
Weak Crypto

Package source references weak cryptographic algorithms.

plugins/wechat/dist/ilink-media.jsView on unpkg · L18
packages/server/dist/setup/start-server.jsView file
21import fs from "node:fs"; L22: import net from "node:net"; L23: import os from "node:os"; ... L36: // typically run `tianshu setup` from their home dir, so L37: // process.cwd() won't be the repo. Walk up from this module's L38: // location until we hit a package.json named L39: // '@tianshu-ai/tianshu' (or run out of parents). ... L50: ? path.join(repoRoot, ".env") L51: : path.join(process.env.TIANSHU_HOME ?? L52: path.join(process.env.HOME ?? "", ".tianshu"), ".env")); ... L137: if (!r.ok) { L138: p.log.error(`launchctl kickstart failed: ${r.stderr ?? "(unknown)"}`);
Medium
Install Persistence

Source writes installer persistence such as shell profile or service configuration.

packages/server/dist/setup/start-server.jsView on unpkg · L21

Findings

7 Medium7 Low
MediumDynamic Requirebin/tianshu.mjs
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencepackages/server/dist/setup/start-server.js
MediumProtestware
MediumStructural Risk Force Deep Review
MediumWildcard Dependency
LowNon Install Lifecycle Scripts
LowScripts Present
LowWeak Cryptoplugins/wechat/dist/ilink-media.js
LowFilesystem
LowObfuscated
LowHigh Entropy Strings
LowUrl Strings