github TypeScript analyzed 81f28ca

JSONbored/loopover

github

The loop never sleeps — you finally can. Agents automate the entire development lifecycle (write, review, merge, learn) end to end, with a published safety record. Self-host today; rentable hosted loops in development. Any GitHub repo; Gittensor-native intelligence built in.

maintainer
JSONbored
license
AGPL-3.0
first seen
2026-07-27
last seen
2026-08-01
releases · 30d
172
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution ×4 in JSONbored/loopover
  2. HIGH code analysis flagged dynamic code execution ×2 in JSONbored/loopover
capabilities 0 tools
transport stdio · streamable-http · 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 81f28ca · analyzer v28 · 1d ago

skills & prompt files 3

danger signals63

code evidence vorb-v3.6.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 3192

filesystem 41

  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-attempt-log-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-governor-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-ledgers-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-portfolio-queue-actions-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-portfolio-queue-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-ranked-candidates-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-run-state-api.ts :1 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/discovery-index/src/upload-sourcemaps.ts :10 import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/repo-map.ts :20 import { readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-mcp/bin/loopover-mcp.ts :5 import { closeSync, constants as fsConstants, existsSync, fstatSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-mcp/lib/local-branch.ts :2 import { realpathSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/bin/loopover-miner-mcp.ts :2 import { readFileSync, realpathSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/ams-calibration.ts :24 import { existsSync as fsExistsSync, readFileSync as fsReadFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/ams-policy.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/calibration-cli.ts :5 import type { existsSync, readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/coding-task-spec.ts :1 import { closeSync, constants as fsConstants, openSync, realpathSync, writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/cross-repo-evaluation.ts :8 import { cpSync, existsSync, mkdtempSync, realpathSync, rmSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/deny-hooks-cli.ts :13 import { readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/discover-cli.ts :3 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/env-file-indirection.ts :10 import { readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/generate-egress-firewall-config.ts :15 import { writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/github-token-resolution.ts :10 import { existsSync, readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/hosted-entry.ts :12 import { access } from "node:fs/promises";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/init-wizard.ts :2 import { chmodSync, mkdirSync, writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/laptop-init.ts :1 import { accessSync, constants, existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/local-store.ts :1 import { chmodSync, mkdirSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/migrate-cli.ts :11 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/miner-goal-spec.ts :1 import { closeSync, constants, existsSync, fstatSync, openSync, readSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/purge-cli.ts :14 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/repo-clone.ts :3 import { closeSync, existsSync, mkdirSync, openSync, readFileSync, statSync, unlinkSync, writeSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/stack-detection.ts :8 import { existsSync, readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/status.ts :1 import { accessSync, constants, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/store-maintenance.ts :14 import { existsSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/packages/loopover-miner/lib/worktree-allocator.ts :4 import { mkdirSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/review-enrichment/src/upload-sourcemaps.ts :11 import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/src/selfhost/blob-store.ts :8 import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
  • fs JSONbored-loopover-81f28ca/src/selfhost/load-file-secrets.ts :8 import { readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/src/selfhost/migrate.ts :6 import { readdirSync, readFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/src/selfhost/private-config.ts :35 import { readFile, readdir, mkdir, copyFile, rename, writeFile, stat } from "node:fs/promises";
  • fs JSONbored-loopover-81f28ca/src/server.ts :9 import { existsSync, readdirSync, writeFileSync } from "node:fs";
  • fs JSONbored-loopover-81f28ca/vitest.config.ts :1 import { readFileSync } from "node:fs";

shell / exec 35

  • shell JSONbored-loopover-81f28ca/packages/discovery-index/src/upload-sourcemaps.ts :9 import { spawnSync } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/agent-sdk-driver.ts :11 import { execFile } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/cli-subprocess-driver.ts :19 * so the driver never hardcodes `child_process`; a fake resolves this in tests. */
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/coding-agent-mode.ts :13 // • Chosen: never spawn (cheapest, safest, mirrors `agentActionModeExecutes` skipping GitHub mutations).
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/deny-hooks.ts :69 return new RegExp(`^${source}$`, "i");
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/lint-guard.ts :79 const { code, output } = await spawn("node", ["--check", file], { cwd });
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/worktree-plan.ts :18 /** The injected git exec — a real `child_process` spawn in prod, a fake in tests. */
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/scoring/label-match.ts :101 const compiled = new RegExp(`^${regex}$`, "i");
  • shell JSONbored-loopover-81f28ca/packages/loopover-engine/src/signals/change-guardrail.ts :102 return new RegExp(`^${re}$`);
  • shell JSONbored-loopover-81f28ca/packages/loopover-mcp/lib/local-branch.ts :1 import { execFileSync } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/attempt-cli.ts :168 /** Neon branch-per-attempt disposable DB fork (#7858). Defaults to reading LOOPOVER_MINER_NEON_* env vars
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/attempt-worktree.ts :1 import { spawn } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/coding-agent-construction.ts :4 // call site -- it provides a real `child_process`-backed spawn (mirroring src/selfhost/ai.ts's `defaultSpawn`,
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/cross-repo-evaluation.ts :7 import { spawn as nodeSpawn } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/execute-local-write.ts :2 // createRealCliSubprocessSpawn pattern (real child_process, resolve-not-reject on error/timeout so a
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/opportunity-fanout.ts :170 ? issue.repository_url.match(new RegExp(`${repoPathPrefix}/([^/?#]+)/([^/?#]+)(?:[?#].*)?$`))
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/replay-snapshot.ts :118 const result = await exec("git", ["worktree", "add", "--detach", worktreePath, commitSha], { cwd: repoPath });
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/repo-clone.ts :1 import { execFile } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/store-db-adapter.ts :16 exec(sql: string): void;
  • shell JSONbored-loopover-81f28ca/packages/loopover-miner/lib/target-repo-verification.ts :14 import { spawn as nodeSpawn } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/review-enrichment/src/analyzers/binary-extensions.ts :102 `\\.(?:${BINARY_FILE_EXTENSIONS.join("|")})$`,
  • shell JSONbored-loopover-81f28ca/review-enrichment/src/analyzers/codeowners.ts :153 return new RegExp(anchored ? `^${re}$` : `(^|/)${re}$`);
  • shell JSONbored-loopover-81f28ca/review-enrichment/src/analyzers/secret-scan.ts :780 // Braintree production access token: `access_token$production$` + 16 base36 merchant id + `$` + 32 hex.
  • shell JSONbored-loopover-81f28ca/review-enrichment/src/upload-sourcemaps.ts :10 import { spawnSync } from "node:child_process";
  • shell JSONbored-loopover-81f28ca/src/db/repositories.ts :3731 const upperBound = `${repoFullName.toLowerCase()}$`;
  • shell JSONbored-loopover-81f28ca/src/github/backfill.ts :2623 // as failing made ciState="failed" → the agent one-shot CLOSED the fork ("CI is failing") even though no check
  • shell JSONbored-loopover-81f28ca/src/notifications/ams-events.ts :118 export const AMS_PR_OUTCOME_DEDUP_KEY_PATTERN = new RegExp(`^${AMS_PR_OUTCOME_DEDUP_KEY_PREFIX}:.+#\\d+:(merged|closed):.+$`);
  • shell JSONbored-loopover-81f28ca/src/selfhost/ai.ts :899 const cp = await import("node:child_process");
  • shell JSONbored-loopover-81f28ca/src/selfhost/backend-contracts.ts :96 exec(query: string): Promise<{ count: number; duration: number }>;
  • shell JSONbored-loopover-81f28ca/src/selfhost/d1-adapter.ts :22 exec(sql: string): void;
  • shell JSONbored-loopover-81f28ca/src/selfhost/migrate.ts :3 // through the D1 adapter's exec(). Tracked in a `_selfhost_migrations` table so a restart re-applies only the
  • shell JSONbored-loopover-81f28ca/src/selfhost/pg-adapter.ts :28 private async exec(runner: Runner = this.pool): Promise<{ rows: Row[]; rowCount: number }> {
  • shell JSONbored-loopover-81f28ca/src/selfhost/pg-dialect.ts :240 /** Migrations are applied as whole multi-statement files via exec(), so the statement-anchored
  • shell JSONbored-loopover-81f28ca/src/server.ts :995 const { spawn } = await import("node:child_process");
  • shell JSONbored-loopover-81f28ca/vitest.config.ts :115 // exclusively via subprocess spawn (test/unit/mcp-cli-*.test.ts, mcp-discovery.test.ts et al) --

network 60

  • net JSONbored-loopover-81f28ca/apps/loopover-miner-ui/src/lib/chat-stream.ts :3 // fetch() + ReadableStream (not the native EventSource, which can't send the POST body the endpoint needs).
  • net JSONbored-loopover-81f28ca/apps/loopover-miner-ui/vite-chat-api.ts :9 // - `text/event-stream`, one `data: <json>\n\n` line per event, consumed client-side via fetch() + ReadableStream
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/components/site/api/try-it.tsx :118 res = await fetch(url, { ...init, signal: ctrl.signal });
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/components/site/github-stats-chip.tsx :99 const ghResponse = await fetch(`https://api.github.com/repos/${REPO}`, {
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/lib/analytics-proxy.ts :87 upstream = await fetch(upstreamUrl, {
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/lib/api/request.ts :62 const res = await fetch(input, { ...init, signal: ctrl.signal });
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/lib/api/status.ts :131 const res = await fetch(HEALTH_URL, { signal: ctrl.signal, cache: "no-store" });
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/lib/openapi.ts :207 return `const res = await fetch('${url}', {\n${init.join(",\n")},\n});\nconst data = await res.json();`;
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/routes/__root.tsx :107 fetch(endpoint, { method: "POST", headers: { "content-type": "application/json" }, body: payload, keepalive: true });
  • net JSONbored-loopover-81f28ca/apps/loopover-ui/src/server.ts :42 async fetch(request: Request, env: unknown, ctx: unknown) {
  • net JSONbored-loopover-81f28ca/control-plane/src/neon-database-driver.ts :108 const response = await fetch(`${baseUrl}${path}`, {
  • net JSONbored-loopover-81f28ca/control-plane/src/orb-webhook-router.ts :17 * polls for completion; ORB's container is a persistent HTTP server, so a plain `fetch()` is enough --
  • net JSONbored-loopover-81f28ca/control-plane/src/pagerduty-notify.ts :95 const response = await fetch(PAGERDUTY_EVENTS_URL, {
  • net JSONbored-loopover-81f28ca/control-plane/src/worker.ts :72 * use. `defaultPort` is what `Container.fetch()` proxies to -- orb-webhook-router.ts (#7181) is the thing
  • net JSONbored-loopover-81f28ca/packages/discovery-index/src/rate-limiter.ts :28 override async fetch(request: Request): Promise<Response> {
  • net JSONbored-loopover-81f28ca/packages/discovery-index/src/worker.ts :81 async fetch(request: Request, workerEnv: WorkerEnv): Promise<Response> {
  • net JSONbored-loopover-81f28ca/packages/loopover-engine/src/miner/attempt-db-fork.ts :87 const response = await fetch(`${baseUrl}${path}`, {
  • net JSONbored-loopover-81f28ca/packages/loopover-mcp/bin/loopover-mcp.ts :2534 const response = await fetch(url, init as RequestInit);
  • net JSONbored-loopover-81f28ca/packages/loopover-mcp/bin/loopover-verify.ts :77 const response = await fetch(`${baseUrl}${path}`, {
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/ams-health-server.ts :1 import { createServer, type Server } from "node:http";
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/attempt-cli.ts :4 // real coding-agent driver (#5131) and slop assessor (#5133), a live SelfReviewContext fetch (#5145), a real
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/claim-conflict-resolver.ts :102 * Bounded retry for the live-state snapshot fetch (#6058): up to `maxAttempts` (default 3) attempts with
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/governor-kill-switch.ts :59 const response = await fetch(PAGERDUTY_EVENTS_URL, {
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/governor-pause-cli.ts :118 const response = await fetch(`${session.apiUrl}/v1/auth/session`, {
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/hosted-entry.ts :11 import type { Server } from "node:http";
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/submission-freshness-check.ts :68 // Bounded retry for the pre-submission live-state fetch (#7089), mirroring claim-conflict-resolver.js's
  • net JSONbored-loopover-81f28ca/packages/loopover-miner/lib/update-check.ts :126 const response = await fetch(registryPath, {
  • net JSONbored-loopover-81f28ca/src/api/worker-posthog.ts :142 * every possible Workers-runtime failure mode (e.g. a crash reachable only via the raw fetch() export outside
  • net JSONbored-loopover-81f28ca/src/auth/rate-limit.ts :34 override async fetch(request: Request): Promise<Response> {
  • net JSONbored-loopover-81f28ca/src/github/backfill.ts :2329 // does not depend on `headSha` or `forceFiles` at all -- `forceFiles` only ever forces a FILES re-fetch (see
  • net JSONbored-loopover-81f28ca/src/github/client.ts :14 // Scope note: this governs INSTALLATION-token Octokit writes only. A few paths write via raw fetch() with
  • net JSONbored-loopover-81f28ca/src/gittensor/api.ts :306 const response = await fetch(url, {
  • net JSONbored-loopover-81f28ca/src/integrations/linear-adapter.ts :6 // on every raw fetch() outside the shared GitHub client helpers, so a stalled Linear connection degrades
  • net JSONbored-loopover-81f28ca/src/mcp/server.ts :3878 const response = await this.env.RATE_LIMITER.get(id).fetch("https://rate-limit/check", {
  • net JSONbored-loopover-81f28ca/src/queue/processors.ts :8885 // Dedicated fetch (independent of resolveLinkedIssueAdvisoryContext's own, narrower, conditional fetch) so
  • net JSONbored-loopover-81f28ca/src/queue/submission-lock.ts :35 override async fetch(request: Request): Promise<Response> {
  • net JSONbored-loopover-81f28ca/src/queue/transient-locks.ts :109 const response = await ns.get(id).fetch("https://submission-lock/claim", {
  • net JSONbored-loopover-81f28ca/src/registry/sync.ts :13 // hung this whole sequential probe with no bound, since `fetch()` has no default timeout.
  • net JSONbored-loopover-81f28ca/src/review/alerts.ts :263 await fetch(webhookUrl, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body), signal: AbortSignal.timeout(10_000) });
  • net JSONbored-loopover-81f28ca/src/review/content-lane/netuid-verification.ts :19 // I/O is the injected fetch (`fetchImpl`, default global fetch) + a `readSecret` over a plain env
  • net JSONbored-loopover-81f28ca/src/review/content-lane/orchestrator.ts :348 // The entry's head/base fetch and the companion provider's head/base fetch (when present) are up to four
  • net JSONbored-loopover-81f28ca/src/review/content-lane/registry-logic.ts :420 * treated as a "degraded" near-empty fetch (the length-based heuristic is meaningful only for HTML/text). */
  • net JSONbored-loopover-81f28ca/src/review/enrichment-wire.ts :90 fetch(url, {
  • net JSONbored-loopover-81f28ca/src/review/visual/actions-fallback.ts :431 const zipResponse = await fetch(`${base}/actions/artifacts/${artifact.id}/zip`, {
  • net JSONbored-loopover-81f28ca/src/review/visual/capture.ts :159 const response = await fetch(url, { signal: AbortSignal.timeout(EXTERNAL_SCREENSHOT_FETCH_TIMEOUT_MS) });
  • net JSONbored-loopover-81f28ca/src/selfhost/ai.ts :345 const res = await fetch(`${base}/embeddings`, {
  • net JSONbored-loopover-81f28ca/src/selfhost/d1-size-probe.ts :286 // Threshold check only on a FRESH size reading: a failed fetch (carried-forward or -1 sample) must neither
  • net JSONbored-loopover-81f28ca/src/selfhost/qdrant-vectorize.ts :76 const res = await fetch(`${base}/collections/${collection}`, {
  • net JSONbored-loopover-81f28ca/src/selfhost/redeploy-companion-client.ts :7 import { createConnection } from "node:net";
  • net JSONbored-loopover-81f28ca/src/selfhost/redis-ratelimit.ts :46 // A DO stub's fetch is called fetch-style: `.fetch(url, init)`. On Workers the runtime builds the Request;
  • net JSONbored-loopover-81f28ca/src/selfhost/s3-blob-store.ts :65 const response = await client.fetch(urlFor(key), { method: "GET", signal: AbortSignal.timeout(S3_FETCH_TIMEOUT_MS) });
  • net JSONbored-loopover-81f28ca/src/server.ts :847 fetch(qdrantReadyzUrl(qdrantUrl), {
  • net JSONbored-loopover-81f28ca/src/services/agent-action-executor.ts :642 // Only a CONFIRMED non-"open" clears a duplicate-justified close -- a failed/ambiguous fetch (undefined)
  • net JSONbored-loopover-81f28ca/src/services/agent-approval-queue.ts :320 // Only a CONFIRMED non-"open" clears a duplicate-justified close -- a rejected/failed fetch (undefined)
  • net JSONbored-loopover-81f28ca/src/services/ai-review.ts :2075 response = await fetch("https://api.anthropic.com/v1/messages", {
  • net JSONbored-loopover-81f28ca/src/services/draft.ts :427 const response = await fetch("https://github.com/login/oauth/access_token", {
  • net JSONbored-loopover-81f28ca/src/services/notify-discord.ts :131 const response = await fetch(url, init);
  • net JSONbored-loopover-81f28ca/src/services/notify-pagerduty.ts :201 const response = await fetch(PAGERDUTY_EVENTS_URL, {
  • net JSONbored-loopover-81f28ca/src/services/review-recap.ts :172 const response = await fetch(resolved.url, {
  • net JSONbored-loopover-81f28ca/src/signals/focus-manifest-loader.ts :12 // Per-request ceiling for each raw-content candidate fetch (#7071), matching the bounded-fetch convention in

secrets 15

  • secrets JSONbored-loopover-81f28ca/apps/loopover-ui/src/lib/config.server.ts :24 // stripeSecretKey: process.env.STRIPE_SECRET_KEY,
  • secrets JSONbored-loopover-81f28ca/packages/discovery-index/src/app.ts :59 const secret = normalizeSharedSecret(process.env.DISCOVERY_INDEX_SHARED_SECRET);
  • secrets JSONbored-loopover-81f28ca/packages/discovery-index/src/server.ts :21 const githubToken = process.env.DISCOVERY_INDEX_GITHUB_TOKEN ?? "";
  • secrets JSONbored-loopover-81f28ca/packages/discovery-index/src/upload-sourcemaps.ts :157 POSTHOG_CLI_API_KEY: nonBlank(process.env.POSTHOG_CLI_API_KEY),
  • secrets JSONbored-loopover-81f28ca/packages/loopover-mcp/bin/loopover-mcp.ts :4530 const githubToken = optionText(options.githubToken) ?? process.env.GITHUB_TOKEN;
  • secrets JSONbored-loopover-81f28ca/packages/loopover-mcp/lib/telemetry.ts :64 const apiKey = trimmedOrUndefined(process.env.LOOPOVER_MCP_POSTHOG_API_KEY);
  • secrets JSONbored-loopover-81f28ca/packages/loopover-miner/lib/contribution-profile-extract.ts :332 options.githubToken ?? process.env.GITHUB_TOKEN,
  • secrets JSONbored-loopover-81f28ca/packages/loopover-miner/lib/live-issue-snapshot.ts :114 const githubToken = options.githubToken ?? process.env.GITHUB_TOKEN ?? "";
  • secrets JSONbored-loopover-81f28ca/packages/loopover-miner/lib/loop-cli.ts :325 // pollPrDisposition (unlike runDiscover, which falls back to process.env.GITHUB_TOKEN internally) has NO
  • secrets JSONbored-loopover-81f28ca/packages/loopover-miner/lib/rejection-signal.ts :163 githubToken: typeof options.githubToken === "string" ? options.githubToken.trim() : (process.env.GITHUB_TOKEN ?? ""),
  • secrets JSONbored-loopover-81f28ca/review-enrichment/src/server.ts :60 const secret = normalizeSharedSecret(process.env.REES_SHARED_SECRET);
  • secrets JSONbored-loopover-81f28ca/review-enrichment/src/upload-sourcemaps.ts :163 POSTHOG_CLI_API_KEY: nonBlank(process.env.POSTHOG_CLI_API_KEY),
  • secrets JSONbored-loopover-81f28ca/src/selfhost/orb-collector.ts :251 const brokered = Boolean((process.env.ORB_ENROLLMENT_SECRET ?? "").trim());
  • secrets JSONbored-loopover-81f28ca/src/selfhost/qdrant-vectorize.ts :52 if (process.env.QDRANT_API_KEY) h["api-key"] = process.env.QDRANT_API_KEY;
  • secrets JSONbored-loopover-81f28ca/src/server.ts :423 const redeployCompanionToken = nonBlank(process.env.REDEPLOY_COMPANION_TOKEN);

database 7

  • db JSONbored-loopover-81f28ca/src/selfhost/pg-adapter.ts :10 import type { Pool, PoolClient } from "pg";
  • db JSONbored-loopover-81f28ca/src/selfhost/pg-queue.ts :5 import type { Pool, QueryResult } from "pg";
  • db JSONbored-loopover-81f28ca/src/selfhost/pg-vectorize.ts :15 import type { Pool } from "pg";
  • db JSONbored-loopover-81f28ca/src/selfhost/redis-cache.ts :6 import type { Redis } from "ioredis";
  • db JSONbored-loopover-81f28ca/src/selfhost/redis-ratelimit.ts :5 import type { Redis } from "ioredis";
  • db JSONbored-loopover-81f28ca/src/selfhost/redis-response-cache.ts :10 import type { Redis } from "ioredis";
  • db JSONbored-loopover-81f28ca/src/selfhost/redis-token-cache.ts :7 import type { Redis } from "ioredis";

install hooks 1

  • postinstall JSONbored-loopover-81f28ca/apps/loopover-ui/package.json :10 fumadocs-mdx

declared dependencies 47

  • @modelcontextprotocol/sdk@1.29.0
  • @asteasolutions/zod-to-openapi@^8.5.0
  • @cloudflare/puppeteer@^1.1.0
  • @hono/node-server@^2.0.11
  • @loopover/contract@^0.1.0
  • @loopover/engine@*
  • @octokit/core@^7.0.6
  • @opentelemetry/api@^1.9.1
  • @opentelemetry/exporter-trace-otlp-http@^0.221.0
  • @opentelemetry/resources@^2.10.0
  • @opentelemetry/sdk-trace-node@^2.10.0
  • agents@^0.19.0
  • aws4fetch@^1.0.20
  • drizzle-orm@^0.45.2
  • hono@^4.12.31
  • ioredis@^5.11.1
  • pg@^8.22.0
  • posthog-node@^5.46.1
  • sharp@^0.35.3
  • yaml@^2.9.0
  • zod@^4.4.3
  • @cloudflare/vitest-pool-workers@^0.18.8
  • @tktco/node-actionlint@^1.6.0
  • @types/node@^24.13.3
  • @types/pg@^8.20.0
  • @types/pixelmatch@^5.2.6
  • @types/pngjs@^6.0.5
  • @types/semver@^7.7.1
  • @vitest/coverage-v8@^4.1.10
  • ajv@^8.20.0
  • drizzle-kit@^0.31.10
  • gifenc@^1.0.3
  • git-cliff@^2.13.1
  • github-actionlint@^1.7.12
  • node-addon-api@^8.9.0
  • node-gyp@^12.4.0
  • pixelmatch@^7.2.0
  • playwright@^1.61.1
  • pngjs@^7.0.0
  • semver@^7.8.5
  • tree-sitter-wasms@^0.1.13
  • tsx@^4.23.1
  • turbo@^2.10.6
  • typescript@^5.9.3
  • vitest@^4.1.10
  • web-tree-sitter@^0.20.8
  • wrangler@^4.114.0

transport_posture 1

  • network-listening, binds all interfaces, no auth detected JSONbored-loopover-81f28ca/test/unit/selfhost-observability-config.test.ts :249 host: "0.0.0.0",