Loading npm security reports…
termdock@1.4.235: AI-agent capability abuse – npm package flagged | LPM Firewall
Flagged as AI-agent capability risk
Allowed by default with warning: agent-facing configuration or capability changes need review before use.
AI Security Reviewscanned 1mo ago · by lpm-firewall-ai This is a real tmux and xterm terminal with optional AI-agent integration, not an npm-install hijack or nested self-dependency. Scanner malware-similarity is noisy because it matches this same product; the remaining issue is user-triggered hook setup and local token reuse, which warrants a warning rather than a block.
Static reason
High-risk behavior combination matched malicious policy.; source matched previously finalized malicious package; routed for review
Trigger
npm install runs postinstall; starting termdock or td loads the server; hook install runs from the product UI or CLI.
Impact
Can change other agents' hook configs and use their local tokens against provider usage APIs, without install-time hijack.
Mechanism
user-command agent hook install plus local token reuse for quota
AI rationale
This is a real tmux and xterm terminal with optional AI-agent integration, not an npm-install hijack or nested self-dependency. Scanner malware-similarity is noisy because it matches this same product; the remaining issue is user-triggered hook setup and local token reuse, which warrants a warning rather than a block.
Evidence
package.json scripts/postinstall.mjs dist/server/agent/installers.js dist/server/quota/tokenDiscovery.js ~/.claude/settings.json ~/.codex/hooks.json ~/.copilot/hooks/termdock.json ~/.grok/hooks/termdock.json ~/.kimi-code/config.toml ~/.termdock/.boot-check-ok
Network endpoints5
api.anthropic.com /api/oauth/usageapi.x.ai /v1/usageapi.kimi.com /coding/v1/usagesgenerativelanguage.googleapis.com /v1beta/openai/usageregistry.npmjs.org
Decision evidencepublic snapshot AI called this Suspicious at 86.0% confidence as Dangerous Capability with medium false-positive risk.
Evidence for warning
npm postinstall rebuilds native modules and may run package-manager commands, including sudo, to install tmux. Runtime installers can write Termdock hook commands into Claude, Codex, Copilot, OpenCode, Pi, Grok, and Kimi config files. When the server starts, already installed but stale hooks are rewritten without a new prompt. At runtime the quota code reads local agent OAuth tokens and calls official provider usage APIs. Evidence against
package.json has no runtime self-dependency on termdock, and postinstall never calls the agent hook installers. Hook install is exposed as a user CLI or HTTP action; writes keep non-Termdock hook entries and use owned files where the agent allows it. Discovered tokens are sent only to official quota endpoints such as api.anthropic.com, not to an unrelated collector. README and layout match a tmux and xterm web terminal; scanner malware-similarity hits are the same product files, not a hidden payload. Behavioral surface
Source ChildProcess Crypto EnvironmentVars
Source & flagged code30 flagged · loading source • scripts.postinstall = node scripts/postinstall.mjs
High Install Time Lifecycle Scripts
Package defines install-time lifecycle scripts.
package.json View on unpkg • scripts.postinstall = node scripts/postinstall.mjs
Medium Ambiguous Install Lifecycle Script
Install-time lifecycle script is not statically allowlisted and needs review.
package.json View on unpkg 1 import { EventEmitter } from 'events';
L2: import { execFile } from 'child_process';
L3: import { promisify } from 'util';
High Child Process
Package source references child process execution.
dist/server/certificateWatcher.js View on unpkg · L1 Findings3 Critical 23 High 7 Medium 6 Low
Critical Download Execute dist/server/cli.js
Critical Trojan Source Unicode dist/client/assets/terminal-C7X98Amf.js
Critical Trigger Reachable Dangerous Capability dist/server/cli.js
High Install Time Lifecycle Scripts package.json
High Child Process dist/server/certificateWatcher.js
High Shell dist/server/utils/bootCheck.js
High Eval dist/client/assets/passwordBootstrap-CkZxpps_.js
High Sandbox Evasion Gated Capability scripts/postinstall.mjs
High Trigger Reachable External Ai Agent Control Surface Mutation dist/server/agent/installers.js
High Spawned Bundled Service Listener dist/server/cli.js
High Trigger Reachable Persistence
Affected versions and remediation This report applies to termdock@1.4.235 .
See all versions of termdock for other recorded verdicts.
Review the evidence and your use of termdock@1.4.235 before allowing it. Restrict the permissions described in this report. Choose an independently verified alternative or release. This report does not establish that other versions are safe. Evidence last updated: 2026-09-16 17:09:20.854Z (UTC) .
Think this verdict is wrong? Dispute it on GitHub or read how reports are produced .
86% Suspicious
AI assessment confidence
Package metadata npm Maintainers jovines
Version 1.4.235
Latest on npm 1.4.351
Published Sep 16, 2026
License MIT
Dependencies 52
Integrity verified
Package size 22.0 MB
Files 773
Keywords terminal termdock xterm express cli
Eval
Filesystem
Network
Shell
WebSocket
Supply chain HighEntropyStrings Minified PossibleObfuscation Telemetry UrlStrings
Manifest No manifest risk signals triggered.
scanned 234 file(s), 10.3 MB of source, external domains: 127.0.0.1, api.anthropic.com, api.github.com, api.kimi.com, api.openai.com, api.x.ai, bit.ly, brew.sh, bugzilla.mozilla.org, chatgpt.com, chevrotain.io, en.wikipedia.org, generativelanguage.googleapis.com, github.com, jcgt.org, langium.org, nodejs.org, reactjs.org, redux.js.org, registry.npmjs.org, term.example.com, termdock-preview.invalid, termdock.invalid, www.w3.org
51 const r = spawnSync(cmd, [], {
L52: shell: true,
L53: timeout: timeoutMs,
High Shell
Package source references shell execution.
dist/server/utils/bootCheck.js View on unpkg · L51 • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/utils/bootCheck.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/utils/bootCheck.js View on unpkg dist/client/assets/passwordBootstrap-CkZxpps_.js View file 1 import{p as JA,F as oA,q as y,bb as EA,aZ as cA,J as z,a4 as hA,cp as DA,s as GA,ct as AA,bW as G,ch as wA,w as aA,aY as ZA}from"./app-CSIciOPl.js";import"./react-XDCjal2T.js";impo...
L2: ${g.stack}`:Q}function iA(g,A){return g=g>>>0,u().subarray(g/1,g/1+A)}let K=null;function l(){return(K===null||K.buffer.detached===!0||K.buffer.detached===void 0&&K.buffer!==k.memo...
High Eval
Package source references dynamic code evaluation.
dist/client/assets/passwordBootstrap-CkZxpps_.js View on unpkg · L1 16 Trigger-reachable persistence chain: manifest.exports -> dist/server/entry.js -> dist/server/routes/terminal.js
L16: import QRCode from 'qrcode';
L17: import { execFile, spawn } from 'child_process';
L18: import { createHash, randomBytes, randomUUID } from 'crypto';
...
L69: const execFileAsync = promisify(execFile);
L70: const TERMDOCK_DIR = `${os.homedir()}/.termdock`;
L71: const automationStore = new AutomationStore(`${TERMDOCK_DIR}/automations.json`);
...
L85: const raw = await fs.promises.readFile(filePath, 'utf-8');
L86: return JSON.parse(raw);
L87: }
...
L117: const require_ = createRequire(import.meta.url);
L118: // dist/server/routes/terminal.js → ../../../package.json
L119: const pkg = require_(path.join(__dirname || '', '..', '..', '..', 'package.json'));
High Trigger Reachable Persistence
A manifest entrypoint or package-local install chain reaches persistence behavior.
dist/server/routes/terminal.js View on unpkg · L16 • matchType = token_shingles
matchedPackage = termdock@1.4.232
matchedPath = dist/server/routes/terminal.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
shingleOverlap = 48
summary = source token shingles overlapped finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/routes/terminal.js View on unpkg 16 import QRCode from 'qrcode';
L17: import { execFile, spawn } from 'child_process';
L18: import { createHash, randomBytes, randomUUID } from 'crypto';
...
L69: const execFileAsync = promisify(execFile);
L70: const TERMDOCK_DIR = `${os.homedir()}/.termdock`;
L71: const automationStore = new AutomationStore(`${TERMDOCK_DIR}/automations.json`);
...
L85: const raw = await fs.promises.readFile(filePath, 'utf-8');
L86: return JSON.parse(raw);
L87: }
...
L117: const require_ = createRequire(import.meta.url);
L118: // dist/server/routes/terminal.js → ../../../package.json
L119: const pkg = require_(path.join(__dirname || '', '..', '..', '..', 'package.json'));
Medium Install Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/server/routes/terminal.js View on unpkg · L16 4 // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
Critical Download Execute
Source downloads or fetches remote code and executes it.
dist/server/cli.js View on unpkg · L4 4 Trigger-reachable chain: scripts.start -> dist/server/cli.js
L4: // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
Critical Trigger Reachable Dangerous Capability
A package entrypoint or install-time lifecycle script reaches a source file with blocking dangerous behavior.
dist/server/cli.js View on unpkg · L4 4 Detached bundled service listener: dist/server/cli.js spawns dist/server/entry.js; helper exposes a broad-bound HTTP listener.
L4: // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
High Spawned Bundled Service Listener
Source launches a detached bundled service that exposes a broad-bound HTTP listener.
dist/server/cli.js View on unpkg · L4 • matchType = normalized_sha256
matchedPackage = termdock@1.4.232
matchedPath = dist/server/cli.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/cli.js View on unpkg 10 L11: import { execSync, spawnSync } from 'child_process';
L12: import { createRequire } from 'module';
...
L31: const r = spawnSync(cmd, [], { shell: true, timeout: timeoutMs, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
L32: return { ok: r.status === 0, stdout: r.stdout, stderr: r.stderr };
L33: } catch {
...
L51: const { ensureNodePty } = require_('./ensure-node-pty.cjs');
L52: const PTY_PATH = require_.resolve('node-pty/package.json', { paths: [pkgRoot] }).replace('/package.json', '');
L53:
...
L83: const pty = require_(PTY_PATH);
L84: const proc = pty.spawn(process.env.SHELL || '/bin/bash', [], { name: 'xterm', cols: 80, rows: 24 });
L85: proc.kill();
High Sandbox Evasion Gated Capability
Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.
scripts/postinstall.mjs View on unpkg · L10 • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = scripts/postinstall.mjs
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
scripts/postinstall.mjs View on unpkg • Manifest-trigger-reachable source links an external AI-agent control path to a behavior-bearing write operation.
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { execfile, spawn } from 'node:child_process';
import { agentbyslug, ispluginagent } from './registry.js';
import { loadplugins, resolvehooktarget } from './plugins.js';
export const hook_agents = ['claude', 'codex', 'copilot', 'opencode', 'pi', 'grok', 'kimi'];
const display_names = {
claude: 'claude code',
codex: 'codex',
copilot: 'copilot cli',
opencode: 'opencode',
pi: 'pi',
grok: 'grok build',
kimi: 'kimi code',
};
High Trigger Reachable External Ai Agent Control Surface Mutation
Manifest-trigger-reachable source writes behavior-bearing configuration into a user or project AI-agent control surface.
dist/server/agent/installers.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/agent/installers.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/installers.js View on unpkg dist/client/assets/terminal-C7X98Amf.js View file 4 contains invisible/control Unicode U+200E (left-to-right mark)
`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._syn
Critical Trojan Source Unicode
Source contains bidi control or invisible Unicode characters associated with Trojan Source attacks.
dist/client/assets/terminal-C7X98Amf.js View on unpkg · L4 51 console.log('Rebuilding node-pty with the Termdock macOS FD cleanup fix...');
L52: const result = spawnSync('npx', ['--yes', 'node-gyp', 'rebuild'], {
L53: cwd: ptyRoot, stdio: 'inherit', timeout: 180_000,
High Runtime Package Install
Package source invokes a package manager install command at runtime.
scripts/ensure-node-pty.cjs View on unpkg · L51 dist/client/shell-integration/termdock.bash View file • path = dist/client/shell-integration/termdock.bash
kind = build_helper
sizeBytes = 3514
magicHex = [redacted]
Medium Ships Build Helper
Package ships non-JavaScript build or shell helper files.
dist/client/shell-integration/termdock.bash View on unpkg dist/client/sw-encrypted-background.js.br View file • path = dist/client/sw-encrypted-background.js.br
kind = high_entropy_blob
sizeBytes = 64690
magicHex = [redacted]
High Ships High Entropy Blob
Package ships high-entropy non-source blobs.
dist/client/sw-encrypted-background.js.br View on unpkg • path = dist/client/sw-encrypted-background.js.br
kind = compressed_blob
sizeBytes = 64690
magicHex = [redacted]
Medium Ships Compressed Blob
Package ships compressed or archive-like blobs.
dist/client/sw-encrypted-background.js.br View on unpkg dist/client/assets/chunk-TICWLB2K-By-otV7X.js#virtual:normalized:round1 View file • stage = ast_semantic_analysis; reason = ast_parse_error; limitedFiles = 5
High Semantic Analysis Limited
A bounded semantic-analysis stage reached its safety limit; remaining detectors completed, but this package requires AI review.
dist/client/assets/chunk-TICWLB2K-By-otV7X.js#virtual:normalized:round1 View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = scripts/prepare-desktop-runtime.mjs
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
scripts/prepare-desktop-runtime.mjs View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = [redacted].js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/pluginPackages.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/utils/npmUpdate.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/utils/npmUpdate.js View on unpkg dist/client/assets/DiffViewer-8lX1Yp21.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.232
matchedPath = dist/client/assets/DiffViewer-DN5Akyco.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/client/assets/DiffViewer-8lX1Yp21.js View on unpkg dist/server/agent/titleNamerCatalog.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = [redacted].js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/titleNamerCatalog.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/ptyhost/manager.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/ptyhost/manager.js View on unpkg dist/client/assets/index-UqXCGE5m.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/client/assets/index-UqXCGE5m.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/client/assets/index-UqXCGE5m.js View on unpkg dist/server/routes/terminal.js
High Runtime Package Install scripts/ensure-node-pty.cjs
High Ships High Entropy Blob dist/client/sw-encrypted-background.js.br
High Semantic Analysis Limited dist/client/assets/chunk-TICWLB2K-By-otV7X.js#virtual:normalized:round1
High Known Malware Source Similarity dist/server/cli.js
High Known Malware Source Similarity dist/server/utils/bootCheck.js
High Known Malware Source Similarity scripts/postinstall.mjs
High Known Malware Source Similarity dist/server/routes/terminal.js
High Known Malware Source Similarity scripts/prepare-desktop-runtime.mjs
High Known Malware Source Similarity dist/server/agent/pluginPackages.js
High Known Malware Source Similarity dist/server/utils/npmUpdate.js
High Known Malware Source Similarity dist/client/assets/DiffViewer-8lX1Yp21.js
High Known Malware Source Similarity dist/server/agent/installers.js
High Known Malware Source Similarity dist/server/agent/titleNamerCatalog.js
High Known Malware Source Similarity dist/server/ptyhost/manager.js
High Known Malware Source Similarity dist/client/assets/index-UqXCGE5m.js
Medium Ambiguous Install Lifecycle Script package.json
Medium Install Persistence dist/server/routes/terminal.js
Medium Ships Build Helper dist/client/shell-integration/termdock.bash
Medium Ships Compressed Blob dist/client/sw-encrypted-background.js.br
Medium Structural Risk Force Deep Review
Low Non Install Lifecycle Scripts
package.json
Entrypoints main → .desktop-dist/main.js exports map bin → td, termdock
Runtime node >=22.0.0
Artifact 31.0 MB · 773 files 2 signature(s)
Install lifecycle postinstall prepublishOnly
Behavioral surface ChildProcess Crypto EnvironmentVars Eval Filesystem Network Shell WebSocket HighEntropyStrings Minified PossibleObfuscation Telemetry UrlStrings Manifest: clean
Source & flagged code30 flagged • scripts.postinstall = node scripts/postinstall.mjs
High Install Time Lifecycle Scripts
Package defines install-time lifecycle scripts.
package.json View on unpkg • scripts.postinstall = node scripts/postinstall.mjs
Medium Ambiguous Install Lifecycle Script
Install-time lifecycle script is not statically allowlisted and needs review.
package.json View on unpkg 1 import { EventEmitter } from 'events';
L2: import { execFile } from 'child_process';
L3: import { promisify } from 'util';
High Child Process
Package source references child process execution.
dist/server/certificateWatcher.js View on unpkg · L1 51 const r = spawnSync(cmd, [], {
L52: shell: true,
L53: timeout: timeoutMs,
High Shell
Package source references shell execution.
dist/server/utils/bootCheck.js View on unpkg · L51 • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/utils/bootCheck.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/utils/bootCheck.js View on unpkg dist/client/assets/passwordBootstrap-CkZxpps_.js View file 1 import{p as JA,F as oA,q as y,bb as EA,aZ as cA,J as z,a4 as hA,cp as DA,s as GA,ct as AA,bW as G,ch as wA,w as aA,aY as ZA}from"./app-CSIciOPl.js";import"./react-XDCjal2T.js";impo...
L2: ${g.stack}`:Q}function iA(g,A){return g=g>>>0,u().subarray(g/1,g/1+A)}let K=null;function l(){return(K===null||K.buffer.detached===!0||K.buffer.detached===void 0&&K.buffer!==k.memo...
High Eval
Package source references dynamic code evaluation.
dist/client/assets/passwordBootstrap-CkZxpps_.js View on unpkg · L1 16 Trigger-reachable persistence chain: manifest.exports -> dist/server/entry.js -> dist/server/routes/terminal.js
L16: import QRCode from 'qrcode';
L17: import { execFile, spawn } from 'child_process';
L18: import { createHash, randomBytes, randomUUID } from 'crypto';
...
L69: const execFileAsync = promisify(execFile);
L70: const TERMDOCK_DIR = `${os.homedir()}/.termdock`;
L71: const automationStore = new AutomationStore(`${TERMDOCK_DIR}/automations.json`);
...
L85: const raw = await fs.promises.readFile(filePath, 'utf-8');
L86: return JSON.parse(raw);
L87: }
...
L117: const require_ = createRequire(import.meta.url);
L118: // dist/server/routes/terminal.js → ../../../package.json
L119: const pkg = require_(path.join(__dirname || '', '..', '..', '..', 'package.json'));
High Trigger Reachable Persistence
A manifest entrypoint or package-local install chain reaches persistence behavior.
dist/server/routes/terminal.js View on unpkg · L16 • matchType = token_shingles
matchedPackage = termdock@1.4.232
matchedPath = dist/server/routes/terminal.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
shingleOverlap = 48
summary = source token shingles overlapped finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/routes/terminal.js View on unpkg 16 import QRCode from 'qrcode';
L17: import { execFile, spawn } from 'child_process';
L18: import { createHash, randomBytes, randomUUID } from 'crypto';
...
L69: const execFileAsync = promisify(execFile);
L70: const TERMDOCK_DIR = `${os.homedir()}/.termdock`;
L71: const automationStore = new AutomationStore(`${TERMDOCK_DIR}/automations.json`);
...
L85: const raw = await fs.promises.readFile(filePath, 'utf-8');
L86: return JSON.parse(raw);
L87: }
...
L117: const require_ = createRequire(import.meta.url);
L118: // dist/server/routes/terminal.js → ../../../package.json
L119: const pkg = require_(path.join(__dirname || '', '..', '..', '..', 'package.json'));
4 // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
Critical Download Execute
Source downloads or fetches remote code and executes it.
dist/server/cli.js View on unpkg · L4 4 Trigger-reachable chain: scripts.start -> dist/server/cli.js
L4: // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
Critical Trigger Reachable Dangerous Capability
A package entrypoint or install-time lifecycle script reaches a source file with blocking dangerous behavior.
dist/server/cli.js View on unpkg · L4 4 Detached bundled service listener: dist/server/cli.js spawns dist/server/entry.js; helper exposes a broad-bound HTTP listener.
L4: // 设置(同步 fs 不占线程池,所以放在文件体顶部仍然足够早)。
L5: process.env.UV_THREADPOOL_SIZE ||= '16';
L6: import { config as loadDotenv } from 'dotenv';
...
L10: // dotenv 不会覆盖已存在的环境变量,因此系统环境变量和命令行参数优先级最高
L11: loadDotenv({ path: resolve(os.homedir(), '.termdock', '.env'), quiet: true });
L12: loadDotenv({ path: resolve(process.cwd(), '.env'), quiet: true });
...
L22: import fs from 'fs';
L23: import http from 'http';
L24: import https from 'https';
...
L27: import { createHash, randomUUID } from 'crypto';
L28: import { spawn, spawnSync, execFile } from 'child_process';
L29: import { promisify } from 'util';
10 L11: import { execSync, spawnSync } from 'child_process';
L12: import { createRequire } from 'module';
...
L31: const r = spawnSync(cmd, [], { shell: true, timeout: timeoutMs, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
L32: return { ok: r.status === 0, stdout: r.stdout, stderr: r.stderr };
L33: } catch {
...
L51: const { ensureNodePty } = require_('./ensure-node-pty.cjs');
L52: const PTY_PATH = require_.resolve('node-pty/package.json', { paths: [pkgRoot] }).replace('/package.json', '');
L53:
...
L83: const pty = require_(PTY_PATH);
L84: const proc = pty.spawn(process.env.SHELL || '/bin/bash', [], { name: 'xterm', cols: 80, rows: 24 });
L85: proc.kill();
High Sandbox Evasion Gated Capability
Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.
scripts/postinstall.mjs View on unpkg · L10 • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = scripts/postinstall.mjs
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
scripts/postinstall.mjs View on unpkg • Manifest-trigger-reachable source links an external AI-agent control path to a behavior-bearing write operation.
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { execfile, spawn } from 'node:child_process';
import { agentbyslug, ispluginagent } from './registry.js';
import { loadplugins, resolvehooktarget } from './plugins.js';
export const hook_agents = ['claude', 'codex', 'copilot', 'opencode', 'pi', 'grok', 'kimi'];
const display_names = {
claude: 'claude code',
codex: 'codex',
copilot: 'copilot cli',
opencode: 'opencode',
pi: 'pi',
grok: 'grok build',
kimi: 'kimi code',
};
High Trigger Reachable External Ai Agent Control Surface Mutation
Manifest-trigger-reachable source writes behavior-bearing configuration into a user or project AI-agent control surface.
dist/server/agent/installers.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/agent/installers.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/installers.js View on unpkg dist/client/assets/terminal-C7X98Amf.js View file 4 contains invisible/control Unicode U+200E (left-to-right mark)
`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._syn
Critical Trojan Source Unicode
Source contains bidi control or invisible Unicode characters associated with Trojan Source attacks.
dist/client/assets/terminal-C7X98Amf.js View on unpkg · L4 51 console.log('Rebuilding node-pty with the Termdock macOS FD cleanup fix...');
L52: const result = spawnSync('npx', ['--yes', 'node-gyp', 'rebuild'], {
L53: cwd: ptyRoot, stdio: 'inherit', timeout: 180_000,
High Runtime Package Install
Package source invokes a package manager install command at runtime.
scripts/ensure-node-pty.cjs View on unpkg · L51 dist/client/shell-integration/termdock.bash View file • path = dist/client/shell-integration/termdock.bash
kind = build_helper
sizeBytes = 3514
magicHex = [redacted]
Medium Ships Build Helper
Package ships non-JavaScript build or shell helper files.
dist/client/shell-integration/termdock.bash View on unpkg dist/client/sw-encrypted-background.js.br View file • path = dist/client/sw-encrypted-background.js.br
kind = high_entropy_blob
sizeBytes = 64690
magicHex = [redacted]
High Ships High Entropy Blob
Package ships high-entropy non-source blobs.
dist/client/sw-encrypted-background.js.br View on unpkg • path = dist/client/sw-encrypted-background.js.br
kind = compressed_blob
sizeBytes = 64690
magicHex = [redacted]
Medium Ships Compressed Blob
Package ships compressed or archive-like blobs.
dist/client/sw-encrypted-background.js.br View on unpkg dist/client/assets/chunk-TICWLB2K-By-otV7X.js#virtual:normalized:round1 View file • stage = ast_semantic_analysis; reason = ast_parse_error; limitedFiles = 5
High Semantic Analysis Limited
A bounded semantic-analysis stage reached its safety limit; remaining detectors completed, but this package requires AI review.
dist/client/assets/chunk-TICWLB2K-By-otV7X.js#virtual:normalized:round1 View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = scripts/prepare-desktop-runtime.mjs
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
scripts/prepare-desktop-runtime.mjs View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = [redacted].js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/pluginPackages.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/utils/npmUpdate.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/utils/npmUpdate.js View on unpkg dist/client/assets/DiffViewer-8lX1Yp21.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.232
matchedPath = dist/client/assets/DiffViewer-DN5Akyco.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/client/assets/DiffViewer-8lX1Yp21.js View on unpkg dist/server/agent/titleNamerCatalog.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = [redacted].js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/agent/titleNamerCatalog.js View on unpkg • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/server/ptyhost/manager.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/ptyhost/manager.js View on unpkg dist/client/assets/index-UqXCGE5m.js View file • matchType = normalized_sha256
matchedPackage = termdock@1.4.217
matchedPath = dist/client/assets/index-UqXCGE5m.js
matchedIdentity = npm:dGVybWRvY2s:1.4.217
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/client/assets/index-UqXCGE5m.js View on unpkg Medium Install Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/server/routes/terminal.js View on unpkg · L16 High Spawned Bundled Service Listener
Source launches a detached bundled service that exposes a broad-bound HTTP listener.
dist/server/cli.js View on unpkg · L4 • matchType = normalized_sha256
matchedPackage = termdock@1.4.232
matchedPath = dist/server/cli.js
matchedIdentity = npm:dGVybWRvY2s:1.4.232
similarity = 1.000
summary = normalized source hash matched finalized malicious source
High Known Malware Source Similarity
Source file is highly similar to a previously finalized malicious package; route for source-aware review.
dist/server/cli.js View on unpkg