Traffic light for AI Agents and TypeScript/Node multi-agent orchestrator with shared state, guardrails, and adapters for 32 AI frameworks
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 1 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
calculator
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 32fb471 · analyzer v33 · 1d ago
skills & prompt files 5
- agent-rules Jovancoding-Network-AI-32fb471/.github/copilot-instructions.md
- agent-rules Jovancoding-Network-AI-32fb471/AGENTS.md
- agent-rules Jovancoding-Network-AI-32fb471/CLAUDE.md
- agent-rules Jovancoding-Network-AI-32fb471/GEMINI.md
- skill Jovancoding-Network-AI-32fb471/SKILL.md
danger signals1
- dynamic code execution eval() Jovancoding-Network-AI-32fb471/test-qa.ts :95
eval(userInput);
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 202
filesystem 45
- fs Jovancoding-Network-AI-32fb471/bin/cli.ts :12
import * as fs from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/examples/05-code-review-swarm.ts :171
const fs = require('fs') as typeof import('fs'); - fs (weak) Jovancoding-Network-AI-32fb471/examples/06-ai-pipeline-demo.ts :25
import * as fs from 'node:fs'; - fs (weak) Jovancoding-Network-AI-32fb471/examples/07-full-showcase.ts :28
import * as fs from 'node:fs'; - fs Jovancoding-Network-AI-32fb471/index.ts :14
import { mkdirSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/agent-runtime.ts :20
import { readFile, writeFile, readdir, stat, mkdir } from 'fs/promises'; - fs Jovancoding-Network-AI-32fb471/lib/agent-vcr.ts :33
import { readFile, writeFile, mkdir, stat } from 'fs/promises'; - fs Jovancoding-Network-AI-32fb471/lib/auth-guardian.ts :12
import { existsSync, readFileSync, writeFile, appendFile, mkdirSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/claude-hooks.ts :37
import * as fs from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/config-watcher.ts :12
import * as fs from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/control-plane.ts :24
import { readFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/coverage-reporter.ts :21
import { readdir, readFile } from 'fs/promises';
show 28 more
- fs Jovancoding-Network-AI-32fb471/lib/dashboard-server.ts :14
import { readFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/env-manager.ts :33
} from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/job-queue.ts :30
import { readFile, writeFile, readdir, unlink, mkdir, stat } from 'fs/promises'; - fs Jovancoding-Network-AI-32fb471/lib/locked-blackboard.ts :31
} from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/mcp-tools-extended.ts :17
import { readFileSync, existsSync } from 'node:fs'; - fs Jovancoding-Network-AI-32fb471/lib/phase-pipeline.ts :14
import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/semantic-search.ts :17
import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/swarm-utils.ts :15
import { readFileSync, writeFileSync, existsSync, mkdirSync, appendFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/transport-agent.ts :23
import { appendFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/lib/work-tree-dashboard.ts :19
import { readFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/run.ts :6
import { existsSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/scripts/clawhub-check.js :21
const fs = require('fs'); - fs (weak) Jovancoding-Network-AI-32fb471/scripts/clawhub-publish.js :22
const fs = require('fs'); - fs (weak) Jovancoding-Network-AI-32fb471/scripts/postinstall.js :5
const fs = require('fs'); - fs (weak) Jovancoding-Network-AI-32fb471/scripts/socket-check.js :21
const fs = require('fs'); - fs Jovancoding-Network-AI-32fb471/security.ts :19
import { readFileSync, appendFileSync } from 'fs'; - fs Jovancoding-Network-AI-32fb471/setup.ts :18
import * as fs from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-claim-verifier.ts :11
import { mkdirSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-cli.ts :8
import * as fs from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-env-manager.ts :21
import * as fs from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase11.ts :19
import { mkdirSync, rmSync, readFileSync, existsSync, openSync, writeSync, closeSync, constants, unlinkSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase13.ts :12
import { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase18.ts :13
import * as fs from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase5.ts :14
import { existsSync, rmSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase5b.ts :12
import { rmSync, existsSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase6.ts :19
import { writeFileSync, unlinkSync, existsSync } from 'node:fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase7.ts :25
import { mkdirSync, rmSync, existsSync } from 'fs'; - fs (weak) Jovancoding-Network-AI-32fb471/test-phase9.ts :19
import * as fs from 'fs';
5 more not shown — this panel samples each group; the count above is the real total.
shell / exec 17
- shell Jovancoding-Network-AI-32fb471/adapters/nemoclaw-adapter.ts :352
const statusOutput = await exec('sandbox', ['get', sandboxName, '--json']); - shell (weak) Jovancoding-Network-AI-32fb471/examples/05-code-review-swarm.ts :1104
const { execSync } = require('child_process') as typeof import('child_process'); - shell (weak) Jovancoding-Network-AI-32fb471/examples/demo-runner.ts :1
import { spawn } from 'node:child_process'; - shell Jovancoding-Network-AI-32fb471/lib/agent-runtime.ts :18
import { spawn } from 'child_process'; - shell Jovancoding-Network-AI-32fb471/lib/blackboard-backend-redis.ts :57
exec(): Promise<unknown[]>; - shell Jovancoding-Network-AI-32fb471/lib/blackboard-validator.ts :610
{ pattern: /exec\s*\(/, name: 'exec()' }, - shell Jovancoding-Network-AI-32fb471/lib/mcp-tool-consumer.ts :88
private process: ReturnType<typeof import('child_process').spawn> | null = null; - shell Jovancoding-Network-AI-32fb471/lib/strategy-agent.ts :230
spawn(taskId?: string): ManagedAgent | null { - shell Jovancoding-Network-AI-32fb471/run-tests.ts :9
import { spawnSync } from 'child_process'; - shell Jovancoding-Network-AI-32fb471/run.ts :8
import { spawn } from 'child_process'; - shell (weak) Jovancoding-Network-AI-32fb471/scripts/clawhub-publish.js :25
const { execSync, spawnSync } = require('child_process'); - shell (weak) Jovancoding-Network-AI-32fb471/scripts/codeql-check.js :22
const { spawnSync } = require('child_process');
show 5 more
- shell (weak) Jovancoding-Network-AI-32fb471/scripts/socket-check.js :20
const { spawnSync } = require('child_process'); - shell (weak) Jovancoding-Network-AI-32fb471/test-claim-verifier.ts :144
header('Phase 1e — ShellResult has receipt after exec()'); - shell (weak) Jovancoding-Network-AI-32fb471/test-phase9.ts :1763
const { spawn } = await import('child_process'); - shell (weak) Jovancoding-Network-AI-32fb471/test-qa.ts :96
exec("rm -rf /"); - shell (weak) Jovancoding-Network-AI-32fb471/test-standalone.ts :1343
code: `const cmd = ` + 'ev' + `al(userInput);\nconst result = require('child_process').execSync('rm -rf /');\nconst password = 'hardcoded_secret_123';`,
network 24
- net Jovancoding-Network-AI-32fb471/adapters/aps-adapter.ts :297
const response = await fetch(url.toString(), { - net Jovancoding-Network-AI-32fb471/adapters/codex-adapter.ts :362
resp = await fetch(url, { - net Jovancoding-Network-AI-32fb471/adapters/custom-adapter.ts :184
const response = await fetch(config.url, { - net Jovancoding-Network-AI-32fb471/adapters/gemini-adapter.ts :12
* Usage — built-in fetch (Gemini Developer API): - net Jovancoding-Network-AI-32fb471/adapters/hermes-adapter.ts :168
const res = await fetch(url, { method: 'POST', headers, body, signal: controller.signal }); - net Jovancoding-Network-AI-32fb471/adapters/minimax-adapter.ts :302
resp = await fetch(url, { - net Jovancoding-Network-AI-32fb471/adapters/openai-responses-adapter.ts :326
resp = await fetch(url, { - net Jovancoding-Network-AI-32fb471/adapters/pydantic-ai-adapter.ts :225
// Use dynamic import for fetch (Node 18+) or global - net Jovancoding-Network-AI-32fb471/adapters/rlm-adapter.ts :260
const response = await fetch(url, { - net Jovancoding-Network-AI-32fb471/lib/a2a-server.ts :41
import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'http'; - net Jovancoding-Network-AI-32fb471/lib/approval-inbox.ts :20
import { createServer, IncomingMessage, ServerResponse, Server } from 'http'; - net Jovancoding-Network-AI-32fb471/lib/control-plane.ts :21
import { createServer, IncomingMessage, ServerResponse } from 'http';
show 12 more
- net Jovancoding-Network-AI-32fb471/lib/dashboard-server.ts :11
import { createServer, IncomingMessage, ServerResponse } from 'http'; - net Jovancoding-Network-AI-32fb471/lib/logger.ts :43
* fetch('/logs', { method: 'POST', body: JSON.stringify(entry) }); - net Jovancoding-Network-AI-32fb471/lib/mcp-tool-consumer.ts :187
const response = await fetch(this.url, { - net Jovancoding-Network-AI-32fb471/lib/mcp-transport-http.ts :26
import type * as http from 'node:http'; - net Jovancoding-Network-AI-32fb471/lib/mcp-transport-sse.ts :32
import type * as http from 'node:http'; - net Jovancoding-Network-AI-32fb471/lib/swarm-transport.ts :25
import { createServer, IncomingMessage, ServerResponse, Server } from 'http'; - net Jovancoding-Network-AI-32fb471/lib/work-tree-dashboard.ts :16
import { createServer, IncomingMessage, ServerResponse } from 'http'; - net (weak) Jovancoding-Network-AI-32fb471/test-phase13.ts :144
const http = require('http') as typeof import('http'); - net (weak) Jovancoding-Network-AI-32fb471/test-phase17.ts :11
import type { AddressInfo } from 'net'; - net (weak) Jovancoding-Network-AI-32fb471/test-phase18.ts :16
import type { AddressInfo } from 'net'; - net (weak) Jovancoding-Network-AI-32fb471/test-phase6.ts :18
import * as http from 'node:http'; - net (weak) Jovancoding-Network-AI-32fb471/test-topology.ts :66
import * as http from 'http';
secrets 18
- secrets Jovancoding-Network-AI-32fb471/adapters/codex-adapter.ts :19
* apiKey: process.env.OPENAI_API_KEY, - secrets Jovancoding-Network-AI-32fb471/adapters/gemini-adapter.ts :16
* apiKey: process.env.GEMINI_API_KEY, - secrets Jovancoding-Network-AI-32fb471/adapters/hermes-adapter.ts :20
* apiKey: process.env.TOGETHER_API_KEY, - secrets Jovancoding-Network-AI-32fb471/adapters/minimax-adapter.ts :12
* apiKey: process.env.MINIMAX_API_KEY, - secrets Jovancoding-Network-AI-32fb471/adapters/openai-responses-adapter.ts :15
* apiKey: process.env.OPENAI_API_KEY, - secrets Jovancoding-Network-AI-32fb471/bin/cli.ts :571
const secret = process.env['NETWORK_AI_MCP_SECRET']; - secrets Jovancoding-Network-AI-32fb471/bin/mcp-server.ts :89
secret: process.env['NETWORK_AI_MCP_SECRET'] ?? '', - secrets (weak) Jovancoding-Network-AI-32fb471/examples/05-code-review-swarm.ts :188
const API_KEY = process.env.OPENAI_API_KEY ?? ''; - secrets (weak) Jovancoding-Network-AI-32fb471/examples/06-ai-pipeline-demo.ts :66
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - secrets (weak) Jovancoding-Network-AI-32fb471/examples/07-full-showcase.ts :72
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - secrets Jovancoding-Network-AI-32fb471/lib/a2a-server.ts :26
* secret: process.env.A2A_SECRET, - secrets Jovancoding-Network-AI-32fb471/lib/mcp-transport-http.ts :174
* secret: process.env['NETWORK_AI_MCP_SECRET']!,
show 6 more
- secrets Jovancoding-Network-AI-32fb471/lib/mcp-transport-sse.ts :92
* const server = new McpSseServer(combined, { port: 3001, secret: process.env['NETWORK_AI_MCP_SECRET']! }); - secrets Jovancoding-Network-AI-32fb471/security.ts :50
tokenSecret: process.env.SWARM_TOKEN_SECRET || randomBytes(32).toString('hex'), - secrets Jovancoding-Network-AI-32fb471/setup.ts :203
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - secrets (weak) Jovancoding-Network-AI-32fb471/test-adapters.ts :1725
const saved = process.env['GEMINI_API_KEY']; - secrets (weak) Jovancoding-Network-AI-32fb471/test-minimax.ts :269
const origKey = process.env['MINIMAX_API_KEY']; - secrets (weak) Jovancoding-Network-AI-32fb471/test-security.ts :148
const templateInput = '${process.env.SECRET}';
database 1
- db Jovancoding-Network-AI-32fb471/lib/blackboard-backend-redis.ts :27
* import Redis from 'ioredis';
tool registrations 1
- calculator Jovancoding-Network-AI-32fb471/setup.ts :143
install hooks 1
- prepublishOnly Jovancoding-Network-AI-32fb471/package.json :38
npm run build && npm run test:all
declared dependencies 6
- commander@^15.0.0
- @types/node@^26.5.1
- dotenv@^17.4.2
- openai@^7.15.0
- ts-node@^10.9.2
- typescript@^6.0.3
perm:untrusted 1
- untrusted (weak) Jovancoding-Network-AI-32fb471/test-phase18.ts :362
const card = await (await fetch(`${base}/.well-known/agent.json`)).json() as Record<string, unknown>;