跑在 GitHub Actions / GitLab CI 上的模块文档守护:源码一变就标失效,没人确认过的绝不冒充结论。零依赖,可直接 uses 引用。
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit a6ab171 · analyzer v33 · 2d ago
skills & prompt files 2
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 31
filesystem 20
- fs xiaoanbucai-docwarden-a6ab171/bin/cli.mjs :21
import { readFileSync, existsSync } from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/docs-kit/scripts/docs-update.mjs :42
import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/docs-kit/scripts/lib/freshness.mjs :17
import fs from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/docwarden-mcp.mjs :20
import fs from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/docwarden.mjs :29
import fs from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/lib/knowledge.mjs :19
import fs from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/src/detect.mjs :19
import { readdirSync, readFileSync, existsSync } from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/src/install.mjs :15
} from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/ci-smoke.test.mjs :9
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/freshness-parity.test.mjs :11
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/init-smoke.test.mjs :12
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/mcp.test.mjs :5
import fs from 'node:fs'
show 8 more
- fs (weak) xiaoanbucai-docwarden-a6ab171/tests/no-secret-leak.test.mjs :6
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/status-lifecycle.test.mjs :7
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-persist.test.mjs :2
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-retry.test.mjs :4
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-selfcheck.test.mjs :3
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-status.test.mjs :3
import fs from 'node:fs' - fs (weak) xiaoanbucai-docwarden-a6ab171/tests/validate-cli.test.mjs :8
import fs from 'node:fs' - fs xiaoanbucai-docwarden-a6ab171/tools/check-zero-dep.mjs :15
import { readFileSync, existsSync } from 'node:fs'
shell / exec 9
- shell xiaoanbucai-docwarden-a6ab171/bin/cli.mjs :20
import { spawn } from 'node:child_process' - shell (weak) xiaoanbucai-docwarden-a6ab171/docs-kit/scripts/docs-update.mjs :41
import { execFileSync } from 'node:child_process' - shell xiaoanbucai-docwarden-a6ab171/docwarden.mjs :34
import { exec } from 'node:child_process' - shell xiaoanbucai-docwarden-a6ab171/src/install.mjs :514
const { execFileSync } = await import('node:child_process') - shell (weak) xiaoanbucai-docwarden-a6ab171/tests/ci-smoke.test.mjs :13
import { execFileSync } from 'node:child_process' - shell (weak) xiaoanbucai-docwarden-a6ab171/tests/init-smoke.test.mjs :16
import { execFileSync, execFile } from 'node:child_process' - shell (weak) xiaoanbucai-docwarden-a6ab171/tests/mcp.test.mjs :8
import { spawn } from 'node:child_process' - shell (weak) xiaoanbucai-docwarden-a6ab171/tests/validate-cli.test.mjs :11
import { spawnSync } from 'node:child_process' - shell xiaoanbucai-docwarden-a6ab171/tools/run-all-tests.mjs :20
import { spawn, execFile } from 'node:child_process'
network 11
- net (weak) xiaoanbucai-docwarden-a6ab171/docs-kit/scripts/docs-update.mjs :508
const res = await fetch(url, { - net xiaoanbucai-docwarden-a6ab171/docwarden.mjs :28
import http from 'node:http' - net (weak) xiaoanbucai-docwarden-a6ab171/tests/fake-llm.mjs :3
import http from 'node:http' - net (weak) xiaoanbucai-docwarden-a6ab171/tests/init-smoke.test.mjs :15
import http from 'node:http' - net (weak) xiaoanbucai-docwarden-a6ab171/tests/mcp.test.mjs :14
const post = async (p, body) => (await fetch(BASE + p, { - net (weak) xiaoanbucai-docwarden-a6ab171/tests/no-secret-leak.test.mjs :38
return fetch(url.startsWith('http') ? url : BASE + url, init) - net (weak) xiaoanbucai-docwarden-a6ab171/tests/status-lifecycle.test.mjs :15
const r = await fetch(BASE + p, { - net (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-persist.test.mjs :28
return fetch(url.startsWith('http') ? url : BASE + url, init) - net (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-retry.test.mjs :25
return fetch(url.startsWith('http') ? url : BASE + url, init) - net (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-status.test.mjs :23
return fetch(url.startsWith('http') ? url : BASE + url, init) - net xiaoanbucai-docwarden-a6ab171/tools/run-all-tests.mjs :21
import net from 'node:net'
secrets 3
- secrets (weak) xiaoanbucai-docwarden-a6ab171/docs-kit/scripts/docs-update.mjs :488
const key = process.env.LLM_API_KEY - secrets xiaoanbucai-docwarden-a6ab171/docwarden.mjs :523
const apiKey = config.apiKey || process.env.LLM_API_KEY || '' - secrets xiaoanbucai-docwarden-a6ab171/src/install.mjs :502
if (!process.env.LLM_API_KEY) {
declared dependencies 1
- jsdom@^26.1.0
obfuscation 1
- dynamic require()/import() xiaoanbucai-docwarden-a6ab171/tests/init-smoke.test.mjs :92
loaded = (await import(new URL(`file://${path.join(WORK, '.knowledge.mjs').replace(/\\/g, '/')}?t=1`).href)).default
perm:untrusted 1
- untrusted (weak) xiaoanbucai-docwarden-a6ab171/tests/ui-retry.test.mjs :89
const stat = await fetch('http://127.0.0.1:5402').then((r) => r.json())