github TypeScript analyzed 32fb471

Jovancoding/Network-AI

github

Traffic light for AI Agents and TypeScript/Node multi-agent orchestrator with shared state, guardrails, and adapters for 32 AI frameworks

maintainer
Jovancoding
licence
MIT
first seen
2026-06-08
last seen
2026-09-15
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

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

tools

  • calculator
skills & danger signals github-tarball
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

danger signals1

code evidence vv5.15.1 · github-tarball
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>;