github TypeScript re-analysis due

lingion/Nano-researcher

github

Portable local policy agent runtime with Golden Fixture regression baseline.

maintainer
lingion
license
GPL-3.0
first seen
2026-08-04
last seen
2026-09-01
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

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

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit fe7579b · analyzer v33 · 1w ago

danger signals2

code evidence vv0.1.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 209

filesystem 38

  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/adapters/http.test.ts :2 import fs from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/app/default-entrypoint.test.ts :3 import { readFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/app/run-live-audit.test.ts :3 import fs from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/app/run-manager.test.ts :3 import fs from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/app/run-policy-task.test.ts :3 import fs from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/artifacts/generic-report.test.ts :3 import fs from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/artifacts/write-json-artifacts.test.ts :3 import fs from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/artifacts/write-report-html.test.ts :5 import { mkdtemp, readFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/artifacts/write-run-transcript.test.ts :3 import fs from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/domain/resolver.test.ts :3 import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/fixtures/golden-live-audit.test.ts :3 import { readFileSync } from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/nanoclaw-core/poll-loop.test.ts :3 import fs from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/packaging.test.ts :4 import { existsSync, readFileSync } from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/policy-scanner-cli.test.ts :4 import { mkdtemp, readFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/policy-scanner/load-config.test.ts :3 import { mkdtemp, writeFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/policy-scanner/write-scan-artifacts.test.ts :3 import { mkdtemp, readFile } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/workspace/evidence-manager.test.ts :3 import fs from 'node:fs';
  • fs (weak) lingion-Nano-researcher-fe7579b/__tests__/workspace/run-policy-task.workspace.test.ts :3 import fs from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/adapters/http/server.ts :3 import { readFile, realpath } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/app/live-audit-runtime.ts :3 import { mkdirSync, appendFileSync, writeFileSync } from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/app/run-live-audit.ts :3 import { appendFileSync, readFileSync, writeFileSync } from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/app/run-manager.ts :2 import fs from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/app/run-policy-task.ts :2 import { mkdir } from 'node:fs/promises';
  • fs (weak) lingion-Nano-researcher-fe7579b/src/app/run-policy-task.workspace.test.ts :3 import fs from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/artifacts/generic-report.ts :2 import fs from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/artifacts/write-run-transcript.ts :1 import fs from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/domain/resolver.ts :1 import { readFile, readdir } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/evidence/file-store.ts :1 import fs from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/nanoclaw-core/claude-provider.ts :1 import fs from 'fs';
  • fs lingion-Nano-researcher-fe7579b/src/nanoclaw-core/mcp-core-tools.ts :9 import fs from 'fs';
  • fs lingion-Nano-researcher-fe7579b/src/policy-scanner/load-config.ts :1 import { readFile } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/policy-scanner/reporter/write-scan-artifacts.ts :1 import { mkdir, writeFile } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/runtime/session-manager.ts :14 import fs from 'fs';
  • fs lingion-Nano-researcher-fe7579b/src/workspace/atomic-json.ts :1 import fs from 'node:fs';
  • fs lingion-Nano-researcher-fe7579b/src/workspace/evidence-manager.ts :1 import { readFile } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/workspace/evidence-store.ts :1 import { mkdir, readFile } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/src/workspace/report-manager.ts :2 import { mkdir } from 'node:fs/promises';
  • fs lingion-Nano-researcher-fe7579b/vendor/search-mcp/src/local/json-file-provider-config-store.js :1 import fs from 'node:fs';

shell / exec 2

  • shell (weak) lingion-Nano-researcher-fe7579b/__tests__/packaging.test.ts :1 import { execFileSync } from 'node:child_process';
  • shell (weak) lingion-Nano-researcher-fe7579b/__tests__/policy-scanner-cli.test.ts :3 import { spawnSync } from 'node:child_process';

network 20

  • net (weak) lingion-Nano-researcher-fe7579b/__tests__/adapters/http.test.ts :20 const health = await fetch(`http://127.0.0.1:${port}/v1/health`);
  • net (weak) lingion-Nano-researcher-fe7579b/__tests__/adapters/mcp.test.ts :15 assert.equal((await handlers.fetch({ url: 'https://example.com' })).content, 'x');
  • net (weak) lingion-Nano-researcher-fe7579b/__tests__/app/generic-dependencies.test.ts :28 await assert.rejects(() => provider.fetch('https://example.com', { signal: controller.signal }), /cancelled by caller/);
  • net (weak) lingion-Nano-researcher-fe7579b/__tests__/fetch/service.test.ts :9 ]).fetch('https://example.com');
  • net lingion-Nano-researcher-fe7579b/src/adapters/http/monitor-page.ts :108 function apiFetch(url){return authToken?fetch(url,{headers:{Authorization:'Bearer '+authToken}}):fetch(url)}
  • net lingion-Nano-researcher-fe7579b/src/adapters/http/server.ts :1 import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';
  • net lingion-Nano-researcher-fe7579b/src/adapters/mcp/server.ts :53 else if (exposeAtomicTools && request.params.name === 'fetch') result = await handlers.fetch(args as any, { signal: extra.signal });
  • net lingion-Nano-researcher-fe7579b/src/adapters/mcp/tools.ts :25 return dependencies.fetch.fetch(input.url, { signal: options.signal });
  • net lingion-Nano-researcher-fe7579b/src/agent/action-executor.ts :113 response = await dependencies.fetch.fetch(action.url, { signal });
  • net lingion-Nano-researcher-fe7579b/src/app/create-generic-dependencies.ts :92 async fetch(url, options): Promise<FetchResponse> {
  • net lingion-Nano-researcher-fe7579b/src/app/run-policy-task.ts :63 fetchImpl: async (targetUrl, init) => await fetch(targetUrl, init),
  • net lingion-Nano-researcher-fe7579b/src/fetch-fusion/network-safety.ts :1 import { isIP } from 'node:net';
  • net lingion-Nano-researcher-fe7579b/src/fetch/provider.ts :5 fetch(url: string, options?: { signal?: AbortSignal }): Promise<FetchResponse>;
  • net lingion-Nano-researcher-fe7579b/src/fetch/service.ts :9 async fetch(url: string, options: { signal?: AbortSignal } = {}): Promise<FetchResponse> {
  • net lingion-Nano-researcher-fe7579b/src/runtime/local-session-loop.ts :158 const page = await deps.fetchTool.fetch(action.url, deps.signal);
  • net (weak) lingion-Nano-researcher-fe7579b/src/runtime/search-mcp-tool-adapter.test.ts :179 await assert.rejects(() => toolset.fetchTool.fetch('http://127.0.0.1:8080/internal'), /blocked unsafe network target/i);
  • net lingion-Nano-researcher-fe7579b/src/runtime/tool-registry.ts :9 fetch(url: string, signal?: AbortSignal): Promise<FetchedPageRecord>;
  • net lingion-Nano-researcher-fe7579b/src/search/auto/providers/extra-domestic-accessible.js :66 const response = await fetch(url, { headers: { accept: 'text/html,*/*', 'user-agent': 'Mozilla/5.0', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8' }, signal: context.signal });
  • net lingion-Nano-researcher-fe7579b/src/workspace/persistent-fetch-tool.ts :12 const record = await fetchTool.fetch(url, signal);
  • net lingion-Nano-researcher-fe7579b/vendor/search-mcp/src/index.js :549 async fetch(request) {

secrets 4

  • secrets (weak) lingion-Nano-researcher-fe7579b/__tests__/runtime/nanoclaw-bridge.test.ts :12 NANOCLAW_API_KEY: process.env.NANOCLAW_API_KEY,
  • secrets lingion-Nano-researcher-fe7579b/src/adapters/http/start.ts :11 const authToken = process.env.RESEARCH_HTTP_AUTH_TOKEN;
  • secrets lingion-Nano-researcher-fe7579b/src/runtime/ask-real-claude.ts :534 apiKey: process.env.ANTHROPIC_API_KEY,
  • secrets lingion-Nano-researcher-fe7579b/src/runtime/nanoclaw-bridge.ts :110 const apiKey = process.env.NANOCLAW_API_KEY ?? process.env.ANTHROPIC_API_KEY;

database 3

  • db lingion-Nano-researcher-fe7579b/src/runtime/delivery.ts :10 import type Database from 'better-sqlite3';
  • db lingion-Nano-researcher-fe7579b/src/runtime/session-db.ts :8 import Database from 'better-sqlite3';
  • db lingion-Nano-researcher-fe7579b/src/runtime/session-manager.ts :13 import type Database from 'better-sqlite3';

declared dependencies 11

  • @modelcontextprotocol/sdk@^1.29.0
  • @anthropic-ai/claude-agent-sdk@^0.3.154
  • @anthropic-ai/sdk@^0.100.1
  • @mozilla/readability@^0.6.0
  • better-sqlite3@^11.8.1
  • dotenv@^16.4.7
  • jsdom@^29.1.1
  • @types/node@^22.10.7
  • playwright@^1.55.0
  • tsx@^4.20.3
  • typescript@^5.7.3

perm:untrusted 1

  • untrusted (weak) lingion-Nano-researcher-fe7579b/__tests__/adapters/http.test.ts :111 const list = await (await fetch(`http://127.0.0.1:${port}/v1/research`)).json() as any;