github re-analysis due

OpenArx-AI/openarx-core

github

Open AI-native infrastructure for scientific knowledge — multi-persona MCP service + ingest pipeline, Apache 2.0

maintainer
OpenArx-AI
license
Apache-2.0
first seen
2026-06-03
last seen
2026-06-16
releases · 30d
1
short id

Drift inferred · capture-to-capture

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

capabilities 0 tools
transport streamable-http · http verified reported listed in the official MCP registry 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 c862311 · analyzer v17 · 3d ago

danger signals2

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

filesystem 37

  • fs OpenArx-AI-openarx-core-c862311/packages/api/src/db/migrate.ts :1 import { readdir, readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :18 import { readFileSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/ingest.ts :10 import { existsSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/embed-service/src/auth/service-account.ts :2 import { readFileSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/embed-service/src/server.ts :2 import { chmodSync, existsSync, unlinkSync, mkdirSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/enrich-document.ts :23 import { mkdir, writeFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/rate-limiter.ts :14 import { readFileSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/socket-server.ts :9 import { mkdir, unlink, chmod } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/adapters/arxiv-local.ts :8 import { readdir, readFile, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/doctor/checks/license-backfill.ts :21 import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/proxy-pool.ts :9 import { readFileSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/docling-client.ts :8 import { readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/grobid-client.ts :8 import { readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/latex-parser.ts :10 import { readFile, readdir, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/markdown-parser.ts :15 import { readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :10 import { readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/parse-strategy.ts :11 import { access, mkdir, readdir, rm, stat } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/pwc-loader.ts :8 import { readFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/workers.ts :31 import { access, mkdir, writeFile } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerService.ts :8 import { access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerSocket.ts :9 import { mkdir } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/batch-fetch-arxiv.ts :12 import { writeFile, mkdir, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/cleanup-orphans.ts :13 import { readdir, rm, stat } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/detect-parse-failures.ts :28 import { readdir, readFile, stat } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-pwc.ts :10 import { createWriteStream, mkdirSync, existsSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-samples.ts :11 import { writeFile, mkdir, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-storage.ts :12 import { readdir, stat, mkdir, rename } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/re-enrich.ts :28 import { existsSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/run-pipeline.ts :18 import { existsSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/validate-parsers.ts :15 import { readdir, readFile, writeFile, mkdir, access } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :9 import { writeFile, mkdir, stat } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :14 import { createReadStream, statSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/lib/legal-versions.ts :10 import { readFileSync } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/archive-intake.ts :26 import { createWriteStream } from 'node:fs';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :10 import { mkdir as fsMkdir, rm as fsRm, cp as fsCp } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :15 import { mkdir, writeFile, rename, rm, cp, access, realpath } from 'node:fs/promises';
  • fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :11 import { appendFile, mkdir } from 'node:fs/promises';

shell / exec 4

  • shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/build-info.ts :6 import { execSync } from 'child_process';
  • shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/parse-strategy.ts :13 import { execFile } from 'node:child_process';
  • shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :16 import { execFile } from 'node:child_process';
  • shell OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :18 import { execFile } from 'node:child_process';

network 43

  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/embed-client.ts :108 const resp = await fetch(`${this.url}/embed`, {
  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/embedding-pool.ts :147 const resp = await fetch(`${server.url}/embed`, {
  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/openrouter-llm.ts :85 const resp = await fetch(OPENROUTER_URL, {
  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/reranker-client.ts :63 const resp = await fetch(`${this.nextUrl()}/health`);
  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/specter2-client.ts :46 const resp = await fetch(`${this.baseUrl}/health`);
  • net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :105 const resp = await fetch('https://oauth2.googleapis.com/token', {
  • net OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/enrichment.ts :10 import { createConnection } from 'node:net';
  • net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/auth/service-account.ts :51 const resp = await fetch('https://oauth2.googleapis.com/token', {
  • net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/handlers/gemini-2-preview.ts :126 const resp = await fetch(this.vertexEndpoint!, {
  • net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/handlers/specter2.ts :65 const resp = await fetch(`${this.baseUrl}/embed`, {
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/enrich-document.ts :148 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/socket-server.ts :8 import { createServer, Server, Socket } from 'node:net';
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/core.ts :97 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/openalex.ts :98 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/pmc.ts :47 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/unpaywall.ts :74 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/adapters/arxiv-local.ts :37 async *fetch(options: FetchOptions): AsyncGenerator<RawDocument> {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/proxy-pool.ts :10 import { ProxyAgent } from 'undici';
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/s2-client.ts :35 const resp = await fetch(url, { headers });
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/docling-client.ts :34 const resp = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(5000) });
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/grobid-client.ts :58 const resp = await fetch(`${baseUrl}/api/isalive`, { signal: AbortSignal.timeout(5000) });
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :74 const submitResp = await fetch(`${API_BASE}/pdf`, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/github-verifier.ts :71 const response = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/workers.ts :147 const resp = await fetch(pdfUrl, { signal: AbortSignal.timeout(60_000) });
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerSocket.ts :8 import { createServer, createConnection, Server, Socket } from 'node:net';
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/batch-fetch-arxiv.ts :59 const resp = await fetch(url);
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-pwc.ts :41 const response = await fetch(PWC_URL);
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-samples.ts :92 const resp = await fetch(url);
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-embeddings.ts :156 const resp = await fetch(`${url}/embed`, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/register-papers.ts :29 for await (const raw of adapter.fetch({ mode: 'local', limit })) {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-missing-specter2.ts :133 const resp = await fetch(`${cfg.embedUrl}/embed`, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-orphans.ts :118 const r = await fetch(`${cfg.embedUrl}/health`);
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/scan-qdrant-orphans.ts :70 const r = await fetch(`${cfg.qdrantUrl}/collections/${cfg.collection}`, {
  • net OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :118 resp = await fetch(url, { signal: fetchTimeout });
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/gov-identity.ts :28 const lookupResp = await fetch(`${GOV_URL}/agents/by-portal-user/${portalUserId}`, {
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/index.ts :141 const upstream = await fetch(`${PORTAL_ISSUER}/.well-known/oauth-authorization-server`, {
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-auth.ts :60 const resp = await fetch(`${PORTAL_URL}/api/internal/verify-token`, {
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/gov/tools.ts :26 const resp = await fetch(`${GOV_BASE}${path}`, opts);
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :730 const resp = await fetch(url, {
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/shared/system-stats.ts :40 const resp = await fetch(`${GOV_URL}/api/internal/gov-stats`, {
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :203 const resp = await fetch(
  • net OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :104 fetch(`${PORTAL_INTERNAL_URL}/api/internal/log-mcp-request`, {
  • net OpenArx-AI-openarx-core-c862311/packages/types/src/index.ts :498 fetch(options: FetchOptions): AsyncGenerator<RawDocument>;

secrets 32

  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/backfill-qdrant-versioning.ts :19 ...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}),
  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/pool.ts :14 password: process.env.PG_PASSWORD ?? 'openarx_dev',
  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/setup-qdrant.ts :9 ...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}),
  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/index.ts :42 const saKeyFile = process.env.GOOGLE_SA_KEY_FILE;
  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :149 const saKeyFile = config.serviceAccountKeyFile ?? process.env.GOOGLE_SA_KEY_FILE;
  • secrets OpenArx-AI-openarx-core-c862311/packages/api/src/storage/vector-store.ts :57 ...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}),
  • secrets OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/ingest.ts :75 const anthropicKey = process.env.ANTHROPIC_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/embed-service/src/config.ts :49 openrouterApiKey: process.env.OPENROUTER_API_KEY ?? '',
  • secrets OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/EnrichmentRunner.ts :50 const coreApiKey = process.env.CORE_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :29 const appKey = process.env.MATHPIX_APP_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/github-verifier.ts :27 this.token = process.env.GITHUB_TOKEN;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/indexer-step.ts :49 ...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}),
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerService.ts :184 const anthropicKey = process.env.ANTHROPIC_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-embeddings.ts :83 embedSecret: process.env.CORE_INTERNAL_SECRET ?? '',
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/qdrant-backfill-deleted.ts :49 const apiKey = process.env.QDRANT_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/re-enrich.ts :117 const openrouterKey = process.env.OPENROUTER_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-missing-specter2.ts :80 embedSecret: process.env.CORE_INTERNAL_SECRET ?? '',
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-orphans.ts :59 embedSecret: process.env.CORE_INTERNAL_SECRET ?? '',
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/run-pipeline.ts :51 const anthropicKey = process.env.ANTHROPIC_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/scan-qdrant-orphans.ts :58 qdrantApiKey: process.env.QDRANT_API_KEY ?? '',
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/admin-routes.ts :36 const ADMIN_TOKEN = process.env.ADMIN_API_TOKEN ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/context.ts :39 const openrouterKey = process.env.OPENROUTER_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/gov-identity.ts :10 const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/index.ts :31 const AUTH_TOKEN = process.env.MCP_AUTH_TOKEN ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :42 const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-auth.ts :11 const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-doc-queue.ts :37 const openrouterKey = process.env.OPENROUTER_API_KEY;
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/gov/tools.ts :13 const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :724 const internalSecret = process.env.CORE_INTERNAL_SECRET;
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/shared/system-stats.ts :12 const QDRANT_API_KEY = process.env.QDRANT_API_KEY ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :28 const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
  • secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :16 const PORTAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';

database 4

  • db OpenArx-AI-openarx-core-c862311/packages/api/src/db/pool.ts :1 import pg from 'pg';
  • db OpenArx-AI-openarx-core-c862311/packages/api/src/storage/review-store.ts :15 import type { PoolClient } from 'pg';
  • db OpenArx-AI-openarx-core-c862311/packages/embed-service/src/cache.ts :1 import { Redis } from 'ioredis';
  • db OpenArx-AI-openarx-core-c862311/packages/mcp/src/lib/redis.ts :8 import { Redis } from 'ioredis';

declared dependencies 8

  • @eslint/js@^9.39.4
  • @typescript-eslint/eslint-plugin@^8.32.1
  • @typescript-eslint/parser@^8.32.1
  • eslint@^9.27.0
  • eslint-config-prettier@^10.1.5
  • prettier@^3.5.3
  • typescript@^5.8.3
  • typescript-eslint@^8.57.0