npm JavaScript analyzed 4.54.15

shieldcortex

v4.54.15
npm

Trustworthy memory and security for AI agents. Memory firewall for any host that writes through it; runtime tool gates on Claude Code, OpenClaw, and Hermes.

maintainer
cyborgninja
licence
MIT
first seen
2026-06-02
last seen
2026-09-08
releases · 30d
22
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 32 tools
transport stdio · http counts 32 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • audit_query
  • consolidate
  • defence_stats
  • detect_contradictions
  • end_session
  • export_memories
  • forget
  • get_context
  • get_memory
  • get_project
  • get_related
  • graph_entities
  • graph_explain
  • graph_query
  • import_memories
  • iron_dome_activate
  • iron_dome_check
  • iron_dome_emergency_stop
  • iron_dome_resume
  • iron_dome_scan
  • iron_dome_status
  • link_memories
  • memory_stats
  • quarantine_review
  • recall
  • remember
  • scan_memories
  • scan_skill
  • scan_tool_response
  • set_project
  • start_session
  • threat_graph
code evidence v4.54.15 · npm-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 919

filesystem 117

  • fs package/dashboard/.next/standalone/dashboard/.next/server/chunks/[turbopack]_runtime.js :658 const { createReadStream } = require('fs');
  • fs package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[turbopack]_runtime.js :658 const { createReadStream } = require('fs');
  • fs package/dist/api/routes/admin.js :9 import { existsSync, readFileSync, readdirSync } from 'fs';
  • fs package/dist/api/routes/memories.js :3 import { existsSync, readdirSync, readFileSync } from 'fs';
  • fs package/dist/api/routes/xray.js :2 import fs from 'fs';
  • fs package/dist/api/session-token.js :10 import { readFileSync, writeFileSync, unlinkSync, existsSync, chmodSync } from 'fs';
  • fs package/dist/api/version.js :7 import { readFileSync } from 'fs';
  • fs package/dist/api/visualization-server.js :10 import { existsSync, unlinkSync } from 'fs';
  • fs package/dist/audit/dependency-scanner.js :21 import { readdirSync, readFileSync, existsSync, renameSync, rmSync, writeFileSync } from 'fs';
  • fs package/dist/audit/env-scanner.js :10 import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
  • fs package/dist/audit/mcp-config-scanner.js :9 import { existsSync, readFileSync } from 'fs';
  • fs package/dist/audit/memory-scanner.js :11 import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
show 28 more
  • fs package/dist/audit/rules-file-scanner.js :12 import { existsSync, readFileSync, statSync } from 'fs';
  • fs package/dist/cli/allowlist-scan.js :28 import { readdirSync, readFileSync, realpathSync, statSync } from 'node:fs';
  • fs package/dist/cli/allowlist.js :22 import { readFileSync, realpathSync, statSync } from 'node:fs';
  • fs package/dist/cli/approve.js :22 import { existsSync, readSync } from 'node:fs';
  • fs package/dist/cli/backup-budget.js :20 import { readdirSync, statSync, unlinkSync } from 'node:fs';
  • fs package/dist/cli/cron-denial-audit.js :33 import { closeSync, fstatSync, openSync, readSync } from 'node:fs';
  • fs package/dist/cli/doctor.js :5 import fs from 'fs';
  • fs package/dist/cli/freeze.js :19 import fs from 'fs';
  • fs package/dist/cli/import-jsonl.js :14 import { existsSync } from 'fs';
  • fs package/dist/cli/iron-dome.js :12 import fs from 'fs';
  • fs package/dist/cli/memory.js :19 import fs from 'fs';
  • fs package/dist/cli/migrate-legacy.js :1 import fs from 'fs';
  • fs package/dist/cli/openclaw-cron-store.js :24 import { statSync } from 'node:fs';
  • fs package/dist/cli/review-copilot.js :1 import { existsSync, readdirSync, rmSync, readFileSync } from 'fs';
  • fs package/dist/cli/update.js :14 import fs from 'fs';
  • fs package/dist/cli/upsell-state.js :10 import fs from 'fs';
  • fs package/dist/cloud/config.js :1 import { readFileSync, writeFileSync, existsSync, chmodSync, statSync, renameSync, rmSync } from 'fs';
  • fs package/dist/context/derive-project-key.js :16 import { existsSync, readFileSync, statSync } from 'fs';
  • fs package/dist/cortex/store.js :6 import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
  • fs package/dist/database/init.js :5 import { existsSync, readFileSync, statSync, writeFileSync, unlinkSync, renameSync, copyFileSync, readdirSync, openSync, closeSync, realpathSync } from 'fs';
  • fs package/dist/defence/iron-dome/action-approvals.js :33 import { existsSync, readFileSync, renameSync, writeFileSync } from 'fs';
  • fs package/dist/defence/iron-dome/dnp-digest.js :15 import * as fs from 'node:fs';
  • fs package/dist/defence/iron-dome/dnp-retry-waiter.js :61 import { closeSync, constants, fstatSync, mkdirSync, openSync, readSync, rmSync, writeFileSync } from 'node:fs';
  • fs package/dist/defence/iron-dome/enforcement-binding.js :16 import { existsSync, readFileSync, writeFileSync } from 'node:fs';
  • fs package/dist/defence/iron-dome/openclaw-approval-channel.js :42 import { existsSync, mkdirSync, readFileSync } from 'node:fs';
  • fs package/dist/defence/iron-dome/openclaw-approval-waiter.js :40 import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
  • fs package/dist/defence/iron-dome/retry-control.js :57 import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, rmdirSync, statSync, writeFileSync, } from 'node:fs';
  • fs package/dist/defence/iron-dome/reviewed-scripts.js :29 import { realpathSync } from 'node:fs';

77 more not shown — this panel samples each group; the count above is the real total.

shell / exec 32

  • shell package/dist/api/routes/xray.js :1 import { execFile, spawn } from 'child_process';
  • shell package/dist/api/version.js :6 import { execFileSync, execFile } from 'child_process';
  • shell package/dist/audit/dependency-scanner.js :24 import { execSync } from 'child_process';
  • shell package/dist/audit/env-scanner.js :13 import { execFileSync } from 'node:child_process';
  • shell package/dist/cli/doctor.js :9 import { execFileSync } from 'child_process';
  • shell package/dist/cli/update.js :13 import { spawn } from 'child_process';
  • shell package/dist/database/init.js :9 import { execSync } from 'child_process';
  • shell package/dist/defence/firewall/anomaly-scorer.js :11 const CODE_INDICATORS = /[{}()\[\];=<>|&$`\\]/g;
  • shell package/dist/defence/iron-dome/cli-invoker.js :33 import { spawn as nodeSpawn } from 'node:child_process';
  • shell package/dist/defence/iron-dome/dnp-retry-waiter.js :60 import { execFile } from 'node:child_process';
  • shell package/dist/defence/iron-dome/openclaw-approval-channel.js :40 import { spawn } from 'node:child_process';
  • shell package/dist/defence/iron-dome/openclaw-approval-waiter.js :39 import { execFile } from 'node:child_process';
show 20 more
  • shell package/dist/defence/iron-dome/tool-action-guard.js :258 * A vector is not a statement — it is the arguments OF one. `spawn(command,
  • shell package/dist/index.js :67 import { spawn } from 'child_process';
  • shell package/dist/integrations/claude-code-version.js :1 import { execFileSync } from 'child_process';
  • shell package/dist/integrations/openclaw-config-validate.js :45 import { spawnSync } from 'child_process';
  • shell package/dist/integrations/openclaw-runtime-inspect.js :9 import { spawnSync } from 'node:child_process';
  • shell package/dist/service/dashboard-staleness.js :22 import { execFileSync } from 'node:child_process';
  • shell package/dist/service/install.js :13 import { execSync } from 'child_process';
  • shell package/dist/setup/deep-clean.js :22 import { execFileSync, execSync } from 'child_process';
  • shell package/dist/setup/hook-command-resolution.js :27 import { execFileSync } from 'node:child_process';
  • shell package/dist/setup/hooks.js :8 import { spawn } from 'child_process';
  • shell package/dist/setup/json-config.js :18 import { execSync } from 'child_process';
  • shell package/dist/setup/migrate.js :11 import { execSync } from 'child_process';
  • shell package/dist/setup/native-binding.js :30 import { spawn } from 'child_process';
  • shell package/dist/setup/openclaw-reconcile.js :4 import { spawnSync } from 'child_process';
  • shell package/dist/setup/openclaw.js :11 import { execFileSync, execSync, spawnSync } from 'child_process';
  • shell package/hooks/openclaw/cortex-memory/runtime.mjs :1 import { execFile } from "node:child_process";
  • shell (weak) package/scripts/lib/capture-distill.mjs :12 import { spawnSync } from 'child_process';
  • shell (weak) package/scripts/postinstall.mjs :16 import { spawnSync } from 'child_process';
  • shell (weak) package/scripts/pre-tool-hook.mjs :55 import { spawn } from 'child_process';
  • shell (weak) package/scripts/run-jest.mjs :3 import { spawn } from 'child_process';

network 34

  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/[root-of-the-server]__07167xi._.js :1 ad(),g=null),el(f.renderSignal,p.route,"fetch()")}switch(w){case"force-no-store":O="fetchCache = force-no-store";break;case"only-no-store":if("force-cache"===x||void 0!==d&&d>0)throw Object.defineProp
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/1a28_1jmyq5p._.js :1 .setCacheBustingSearchParam)(o,b);let p=fetch(o,{credentials:"same-origin",headers:b,priority:c||void 0,signal:f}).then(v),q=p.then(({response:a})=>a),r=e?(g=q,k=b,s(g,{callServer:i.callServer,findSou
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/1a28_@tanstack_0_dj6c1._.js :1 ted||this.#o({type:"invalidate"})}async fetch(a,c){let d;if("idle"!==this.state.fetchStatus&&this.#l?.status()!=="rejected"){if(void 0!==this.state.data&&c?.cancelRefetch)this.cancel({silent:!0});else
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/1a28_next_00uew2j._.js :4 `, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https:
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/1a28_next_dist_17tperj._.js :4 `, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https:
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__1_xo78f._.js :19 ead(),q=null),F(p.renderSignal,o.route,"fetch()")}switch(y){case"force-no-store":B="fetchCache = force-no-store";break;case"only-no-store":if("force-cache"===A||void 0!==l&&l>0)throw Object.defineProp
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_overview_page_tsx_14bloa6._.js :1 a=setInterval(async()=>{try{let b=await fetch(`https://api.shieldcortex.ai/v1/auth/setup-status/${k}`),c=a
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_18oljhv._.js :1 abled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQ
  • net package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_1tvvn_p._.js :1 {return c||d||(d=(async()=>{let a=await fetch(`${b}/api/auth/session-token`);if(!a.ok){let b=await a.json().catch(()=>({}));throw d=null,Error(b.error||"Failed to fetch session token")}let{token:e}=aw
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/0-6uacw2qml2v.js :1 r=!1,a=setInterval(()=>{let t=l.current;fetch(`${y}/api/memories?mode=recent&limit=50`
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/0c29pw6r7unzt.js :1 e=setInterval(async()=>{try{let t=await fetch(`https://api.shieldcortex.ai/v1/auth/setup-status/${o}`),s=await t.json();"complete"===s.status&&s.api_key?(await (0,w.authFetch)("http://localhost:3001/a
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/15h9vpkvncqyc.js :1 .setCacheBustingSearchParam)(p,t);let y=fetch(p,{credentials:"same-origin",headers:t,priority:r||void 0,signal:l}).then(P),g=y.then(({response:e})=>e),_=a?(u=g,s=t,v(u,{callServer:o.callServer,findSou
show 22 more
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/1_a__wgp0wskr.js :1 {return r||o||(o=(async()=>{let e=await fetch(`${t}/api/auth/session-token`);if(!e.ok){let t=await e.json().catch(()=>({}));throw o=null,Error(t.error||"Failed to fetch session token")}let{token:s}=aw
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/1psxvxobjbrm_.js :1 ted||this.#p({type:"invalidate"})}async fetch(t,i){let s;if("idle"!==this.state.fetchStatus&&this.#h?.status()!=="rejected"){if(void 0!==this.state.data&&i?.cancelRefetch)this.cancel({silent:!0});else
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/2z1fu8vvhw4oc.js :4 `, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https:
  • net package/dashboard/.next/standalone/dashboard/.next/static/chunks/turbopack-2a9_8r_2i12cr.js :1 ,async loadWebAssembly(e,t,r,n,o){let i=fetch(N(r)),{instance:l}=await WebAssembly.instantiateStreaming(i,o);return l.exports},async loadWebAssemblyModule(e,t,r,n){let o=fetch(N(r));return await WebAs
  • net package/dist/api/bind-policy.js :10 import { isIP } from 'net';
  • net package/dist/api/routes/admin.js :592 const response = await fetch(`${config.cloudBaseUrl}/v1/quarantine/ingest`, {
  • net package/dist/api/visualization-server.js :9 import { createServer } from 'http';
  • net package/dist/audit/dependency-scanner.js :63 { regex: /\bfetch\s*\(/i, label: 'fetch() (HTTP request)' },
  • net package/dist/cli/doctor.js :1072 const response = await fetch('http://localhost:3001/api/health', { signal: controller.signal });
  • net package/dist/cloud/graph-sync.js :67 const res = await fetch(`${config.cloudBaseUrl}/v1/sync/graph`, {
  • net package/dist/cloud/iron-dome-sync.js :49 fetch(`${config.cloudBaseUrl}/v1/iron-dome/patterns/sync`, {
  • net package/dist/cloud/memory-sync.js :97 const res = await fetch(`${config.cloudBaseUrl}/v1/sync/memories`, {
  • net package/dist/cloud/quarantine-sync.js :49 fetch(url, {
  • net package/dist/cloud/sync-queue.js :475 const res = await fetch(`${config.cloudBaseUrl}${request.path}`, {
  • net package/dist/cloud/sync.js :66 track(fetch(`${config.cloudBaseUrl}/v1/devices/heartbeat`, {
  • net package/dist/cloud/verify.js :48 fetch(`${cloudConfig.cloudBaseUrl}/v1/verify`, {
  • net package/dist/environment/fetcher.js :40 const res = await fetch(current.toString(), {
  • net package/dist/events/webhooks.js :47 fetch(webhook.url, {
  • net package/dist/index.js :69 import http from 'http';
  • net package/dist/license/validate.js :35 const res = await fetch(`${baseUrl}/v1/license/validate?sid=${encodeURIComponent(sid)}`, { signal: controller.signal });
  • net package/dist/xray/npm-inspector.js :8 import https from 'https';
  • net (weak) package/scripts/lib/dashboard-hint.mjs :14 import http from 'node:http';

secrets 4

  • secrets package/dist/api/session-token.js :19 const v = (process.env.SHIELDCORTEX_API_TOKEN || '').trim();
  • secrets package/dist/context/derive-project-key.js :117 if (process.env.SHIELDCORTEX_PROJECT_KEY) {
  • secrets package/dist/context/project-context.js :36 const envProject = process.env.SHIELDCORTEX_PROJECT_KEY || process.env.CLAUDE_MEMORY_PROJECT;
  • secrets (weak) package/scripts/lib/project-key.mjs :122 if (process.env.SHIELDCORTEX_PROJECT_KEY) {

database 14

  • db package/dist/cli/doctor.js :289 const Database = require('better-sqlite3');
  • db package/dist/cli/migrate-legacy.js :7 import Database from 'better-sqlite3';
  • db package/dist/cli/openclaw-cron-store.js :63 const Database = require('better-sqlite3');
  • db package/dist/database/better-sqlite3-guard.js :29 /** The original error raised by `require('better-sqlite3')`. */
  • db package/dist/integrations/openclaw-gateway-process.js :44 const Database = require('better-sqlite3');
  • db package/dist/integrations/openclaw-plugin-index.js :425 const Database = require('better-sqlite3');
  • db package/dist/setup/doctor.js :52 const Database = require('better-sqlite3');
  • db package/dist/setup/native-binding.js :52 const Database = require('better-sqlite3');
  • db (weak) package/scripts/postinstall.mjs :137 const Database = require('better-sqlite3');
  • db (weak) package/scripts/pre-compact-hook.mjs :14 import Database from 'better-sqlite3';
  • db (weak) package/scripts/prompt-recall-hook.mjs :12 import Database from 'better-sqlite3';
  • db (weak) package/scripts/session-end-hook.mjs :24 import Database from 'better-sqlite3';
show 2 more
  • db (weak) package/scripts/session-start-hook.mjs :21 import Database from 'better-sqlite3';
  • db (weak) package/scripts/stop-hook.mjs :19 import Database from 'better-sqlite3';

tool registrations 32

  • remember package/dist/server.js :215
  • recall package/dist/server.js :259
  • forget package/dist/server.js :291
  • get_context package/dist/server.js :324
  • start_session package/dist/server.js :344
  • end_session package/dist/server.js :358
  • consolidate package/dist/server.js :375
  • memory_stats package/dist/server.js :412
  • get_memory package/dist/server.js :424
  • export_memories package/dist/server.js :438
  • import_memories package/dist/server.js :454
  • get_related package/dist/server.js :486
show 20 more
  • link_memories package/dist/server.js :508
  • set_project package/dist/server.js :523
  • get_project package/dist/server.js :537
  • detect_contradictions package/dist/server.js :550
  • graph_query package/dist/server.js :598
  • threat_graph package/dist/server.js :604
  • graph_entities package/dist/server.js :612
  • graph_explain package/dist/server.js :618
  • audit_query package/dist/server.js :627
  • quarantine_review package/dist/server.js :640
  • defence_stats package/dist/server.js :679
  • scan_tool_response package/dist/server.js :715
  • scan_memories package/dist/server.js :798
  • scan_skill package/dist/server.js :813
  • iron_dome_status package/dist/server.js :851
  • iron_dome_scan package/dist/server.js :886
  • iron_dome_check package/dist/server.js :909
  • iron_dome_activate package/dist/server.js :947
  • iron_dome_emergency_stop package/dist/server.js :968
  • iron_dome_resume package/dist/server.js :983

install hooks 3

  • postinstall package/package.json :62 node scripts/postinstall.mjs
  • prepack package/package.json :83 node scripts/ensure-bin-executable.mjs
  • prepublishOnly package/package.json :87 node scripts/sync-plugin-version.mjs --check && npm run build && npm run test:dist

declared dependencies 20

  • @modelcontextprotocol/sdk@^1.0.0
  • better-sqlite3@^12.0.0
  • cors@^2.8.5
  • express@^4.21.0
  • safe-regex2@^5.0.0
  • semver@^7.7.0
  • ws@^8.18.0
  • zod@^3.23.0
  • @types/better-sqlite3@^7.6.11
  • @types/cors@^2.8.17
  • @types/express@^5.0.0
  • @types/jest@^30.0.0
show 8 more
  • @types/node@^22.0.0
  • @types/semver@^7.7.0
  • @types/ws@^8.5.13
  • jest@^30.2.0
  • ts-jest@^29.4.6
  • tsx@^4.19.0
  • typescript@^5.6.0
  • @huggingface/transformers@^3.7.2

perm:untrusted 7

  • untrusted package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/1a28_1jmyq5p._.js :1 .setCacheBustingSearchParam)(o,b);let p=fetch(o,{credentials:"same-origin",headers:b,priority:c||void 0,signal:f}).then(v),q=p.then(({response:a})=>a),r=e?(g=q,k=b,s(g,{callServer:i.callServer,findSou
  • untrusted package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_overview_page_tsx_14bloa6._.js :1 a=setInterval(async()=>{try{let b=await fetch(`https://api.shieldcortex.ai/v1/auth/setup-status/${k}`),c=await b.json();"complete"===c.status&&c.api_key?(await (0,x.authFetch)("http://localhost:3001/a
  • untrusted package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_1tvvn_p._.js :1 rn d.set("Authorization",`Bearer ${c}`),fetch(a,{...b,headers:d})}async function g(a,b){if((a.headers.get("content-type")??"").includes("application/json")){let c=await a.json().catch(()=>null);if("st
  • untrusted package/dashboard/.next/standalone/dashboard/.next/static/chunks/0-6uacw2qml2v.js :1 r=!1,a=setInterval(()=>{let t=l.current;fetch(`${y}/api/memories?mode=recent&limit=50`,{credentials:"include"}).then(e=>e.ok?e.json():null).then(a=>{if(!a||r)return;let n=a.memories??[];for(let r of n
  • untrusted package/dashboard/.next/standalone/dashboard/.next/static/chunks/0c29pw6r7unzt.js :1 e=setInterval(async()=>{try{let t=await fetch(`https://api.shieldcortex.ai/v1/auth/setup-status/${o}`),s=await t.json();"complete"===s.status&&s.api_key?(await (0,w.authFetch)("http://localhost:3001/a
  • untrusted package/dashboard/.next/standalone/dashboard/.next/static/chunks/15h9vpkvncqyc.js :1 .setCacheBustingSearchParam)(p,t);let y=fetch(p,{credentials:"same-origin",headers:t,priority:r||void 0,signal:l}).then(P),g=y.then(({response:e})=>e),_=a?(u=g,s=t,v(u,{callServer:o.callServer,findSou
  • untrusted package/dashboard/.next/standalone/dashboard/.next/static/chunks/1_a__wgp0wskr.js :1 rn o.set("Authorization",`Bearer ${r}`),fetch(e,{...t,headers:o})}async function a(e,t){if((e.headers.get("content-type")??"").includes("application/json")){let r=await e.json().catch(()=>null);if("st