The AI safety gateway for an agent's external surface — a provider-agnostic safety envelope (input sanitize + untrusted-content tagging, tier/scope/burst/recipient egress gates, autonomy hardening, run_id forensics, tokens behind a SecretBackend, full audit trail) between an AI agent and any source it touches. MIT.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · 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 0f11d05 · analyzer v33 · 2w ago
skills & prompt files 1
- agent-rules lolxl-safespace-mcp-0f11d05/CLAUDE.md
danger signals38
- suspicious endpoint api.telegram.org lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/telegram/client.ts :26
const TELEGRAM_API = "https://api.telegram.org"; - suspicious endpoint api.telegram.org lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/egress-destinations.test.ts :101
const host = new URL("https://api.telegram.org/botSECRET123/sendMessage").hostname; - suspicious endpoint 169.254.169.254 (cloud metadata) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/url-gate.test.ts :248
assertUrlAllowed(new URL("http://169.254.169.254/latest/meta-data/"), PUBLIC_LOOKUP, EMPTY_ENV), - suspicious endpoint 169.254.169.254 (cloud metadata) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/envelope-integration.test.ts :168
args: { url: "http://169.254.169.254/" }, - suspicious endpoint api.telegram.org lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/telegram-read.test.ts :66
expect(url).toContain("https://api.telegram.org/botsecret-tok/getUpdates"); - suspicious endpoint api.telegram.org lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/telegram.test.ts :58
expect(url).toBe("https://api.telegram.org/botsecret-tok/sendMessage"); - suspicious endpoint api.telegram.org lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/telegram.ts :40
const TELEGRAM_API_HOST = "https://api.telegram.org"; - suspicious endpoint 169.254.169.254 (cloud metadata) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/web-fetch.test.ts :67
await webFetchHandler(KEYLESS_CTX, { url: "http://169.254.169.254/latest/meta-data/" }); - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :86
expect(V1_REQUIRED_SCOPES).toContain("https://www.googleapis.com/auth/documents"); - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :266
expect(V1_REQUIRED_SCOPES).toContain("https://www.googleapis.com/auth/spreadsheets"); - over-broad OAuth scope gmail.modify lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :41
"https://www.googleapis.com/auth/gmail.modify", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :43
"https://www.googleapis.com/auth/drive", - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :46
"https://www.googleapis.com/auth/documents", - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :101
"https://www.googleapis.com/auth/spreadsheets", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/scopes.ts :37
"https://www.googleapis.com/auth/drive", - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/scopes.ts :43
"https://www.googleapis.com/auth/documents", - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/scopes.ts :265
"https://www.googleapis.com/auth/spreadsheets", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/migrate.test.ts :32
"https://www.googleapis.com/auth/drive", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers.test.ts :7609
const DRIVE_FULL = "https://www.googleapis.com/auth/drive"; - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry.test.ts :493
"https://www.googleapis.com/auth/documents", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry.test.ts :511
"https://www.googleapis.com/auth/drive", - over-broad OAuth scope gmail.modify lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry.test.ts :548
"https://www.googleapis.com/auth/gmail.modify", - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry.test.ts :871
"https://www.googleapis.com/auth/spreadsheets", - over-broad OAuth scope gmail.modify lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/scopes.ts :7
export const GMAIL_MODIFY = "https://www.googleapis.com/auth/gmail.modify"; - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/scopes.ts :27
export const DRIVE = "https://www.googleapis.com/auth/drive"; - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/scopes.ts :35
export const DOCUMENTS = "https://www.googleapis.com/auth/documents"; - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/scopes.ts :179
export const SPREADSHEETS = "https://www.googleapis.com/auth/spreadsheets"; - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/source.test.ts :282
account: { accountId: "a@x.com", scopes: ["https://www.googleapis.com/auth/drive"] }, - over-broad OAuth scope gmail.modify lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.test.ts :530
"https://www.googleapis.com/auth/gmail.modify", - over-broad OAuth scope https://www.googleapis.com/auth/drive
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.test.ts :644
"https://www.googleapis.com/auth/drive", - over-broad OAuth scope https://www.googleapis.com/auth/documents
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.test.ts :686
"https://www.googleapis.com/auth/documents", - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets
expected for this server's purpose
lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.test.ts :1006
"https://www.googleapis.com/auth/spreadsheets", - committed secret Google OAuth client secret lolxl-safespace-mcp-0f11d05/.claude-plugin/.env.example :6
GOCSPX…(30 chars, redacted) - committed secret Google API key lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/outbound-secret.test.ts :35
AIzaSy…(39 chars, redacted) - committed secret GitHub token lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/outbound-secret.test.ts :41
ghp_01…(40 chars, redacted) - committed secret GitHub fine-grained PAT lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/outbound-secret.test.ts :44
github…(35 chars, redacted) - committed secret Stripe live key lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/outbound-secret.test.ts :49
sk_liv…(32 chars, redacted) - committed secret OpenAI key lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/outbound-secret.test.ts :50
sk-012…(39 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 407
filesystem 103
- fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/scripts/smoke-mcp.mjs :25
import { mkdtempSync, rmSync, existsSync } from "node:fs"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit-chain.test.ts :5
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.error-forensics.test.ts :4
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.operator.test.ts :14
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.roundtrip.test.ts :37
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.run-id.test.ts :12
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.source.test.ts :14
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.test.ts :2
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/audit.ts :23
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/active.test.ts :2
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/active.ts :12
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/agent-token-store.test.ts :6
import { promises as fs } from "node:fs";
show 28 more
- fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/agent-token-store.ts :28
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :2
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :8
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/file-backend.scrypt-memo.test.ts :10
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/file-backend.test.ts :10
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/file-backend.ts :31
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/consent.test.ts :10
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/store.test.ts :6
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/store.ts :16
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/keychain.test.ts :2
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/keychain.ts :12
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/consent.test.ts :10
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/oauth.test.ts :8
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/oauth.ts :17
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/send-approval-store.test.ts :6
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/send-approval-store.ts :18
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/service-token-store.test.ts :6
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/token-store.test.ts :6
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/webhook-secret-store.test.ts :6
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/consent.test.ts :10
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/oauth.test.ts :6
import * as fs from "node:fs/promises"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/oauth.ts :31
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli.test.ts :2
import * as fs from "node:fs/promises"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/agent-token.test.ts :5
import { promises as fs } from "node:fs"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/atomic-env.test.ts :2
import { promises as fs } from "node:fs"; - fs lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/atomic-env.ts :21
import { promises as fs } from "node:fs"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/audit/deletes.test.ts :2
import { promises as fs } from "node:fs"; - fs (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/audit/export.test.ts :12
import { promises as fs } from "node:fs";
63 more not shown — this panel samples each group; the count above is the real total.
shell / exec 5
- shell (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/scripts/smoke-mcp.mjs :24
import { spawn } from "node:child_process"; - shell (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :378
const proc = Bun.spawn(["sh", "-c", "exit 0"]); - shell lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/open-url.ts :2
// Replaces the Bun-only `Bun.spawn(["open", url])` so the CLI runs on Node, on macOS, - shell lolxl-safespace-mcp-0f11d05/.claude-plugin/src/status/shared.ts :9
import { execFile } from "node:child_process"; - shell (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/integration.test.ts :109
const proc = Bun.spawn(["bun", "-e", code], {
network 42
- net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :474
await fetch(`${redirectUri}?error=test_simulated_user_closed_browser`).catch(() => undefined); - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/client.test.ts :143
test("a host-escaping path (`@evil.com`) is BLOCKED before the fetch (-32047)", async () => { - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/client.ts :88
// fetch (throws -32047, echoing the host only). No-op on the normal api.github.com. - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/consent.test.ts :99
await fetch(`${redirectUri}?${q}`).catch(() => undefined); - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/client.ts :83
// host BEFORE the fetch (catches a path-injection host escape; throws -32047, - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/consent.test.ts :99
await fetch(`${redirectUri}?${q}`).catch(() => undefined); - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/oauth-callback.test.ts :30
const resp = await fetch(`${s.url}?code=abc123&state=st-ok`); - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/oauth-callback.ts :19
import * as http from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/client.test.ts :146
test("a host-escaping path (`@evil.com`) is BLOCKED before the fetch (-32047)", async () => { - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/client.ts :54
// fetch (catches a path-injection host escape; throws -32047, echoing the host only). - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/consent.test.ts :115
await fetch(`${redirectUri}?${q}`).catch(() => undefined); - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/consent.ts :21
// - every process-owned fetch (token exchange, users/me) calls assertEgressHost
show 28 more
- net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/http.test.ts :8
test("assertEgressHost runs BEFORE fetch (host-escape never dispatches)", async () => { - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/identity/tailscale-whois.ts :19
import { request as httpRequest } from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/url-gate.transport.test.ts :7
import * as http from "node:http"; - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/url-gate.ts :25
import * as http from "node:http"; - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/policy/youtube-video-targets.ts :28
// resolving the video's channelId via a videos.list pre-fetch (TOCTOU + extra - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/proxy.ts :11
import type { IncomingMessage } from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/status.test.ts :887
// ----- runPosture egress section (v1.87) — uses web-fetch (UNCACHED, reads env - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/egress-pipeline.test.ts :452
test("A2b sec-rev: ctx.egress carries the WRONG kind → internal_routing_error, kinds never echoed, ZERO fetch (handler vehicle)", async () => { - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers.test.ts :12118
// Non-self entries — DEEP-EQUAL to pre-fetch (same keys + same values). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/calendar.ts :1005
* pre-fetch (hook #9 deep-equality). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/discord.ts :112
// before the fetch (channel_id is in the path; throws -32047 echoing the host only). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/line.ts :97
// Send via the shared service-token fetch (hard timeout + response-body cleanup + - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/service-token-fetch.ts :1
// v1.69.1 — the shared class-B service-token egress fetch (LINE / Telegram / Discord). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/slack.ts :169
// fetch (throws -32047 echoing the host only). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/tasks.ts :472
* NO pre-fetch (TOCTOU + extra quota; mirror v1.17 youtube_comment_delete). - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/telegram.ts :111
// Send via the shared service-token fetch (hard timeout + response-body cleanup + - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/x.test.ts :269
test("ctx.egress ABSENT → internal_routing_error{invariant_violation} + ZERO fetch (pipeline-bypass backstop)", async () => { - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers/youtube.ts :766
* value — pass every field you want to keep. NO pre-fetch (avoids TOCTOU; read - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/tasks.ts :203
"PERMANENTLY DESTRUCTIVE — Google Tasks has NO trash recovery, unrecoverable from web UI / mobile / any Google surface. DELETE a Google Tasks task via tasks.delete (WRITE OPERATION). ALWAYS ask the us - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/web.ts :29
description: "Absolute http(s) URL to fetch (e.g. https://example.com/page).", - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/registry/youtube.ts :306
omments (returns 403 otherwise). NO pre-fetch (`comments.list({id})`) to avoid TOCTOU resolution. Quota cost: 50 units / call. Audit records target_comment_id_hash (plain SHA-256) + policy_decision='d - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/transport/http.test.ts :2
import { request as httpRequest } from "node:http"; - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/transport/http.ts :19
} from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/transport/webhook.test.ts :73
const res = await fetch(`${base}/webhook/slack`, { method: "POST", headers: slackHeaders(messageBody), body: messageBody }); - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/transport/webhook.ts :22
} from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/webhook/verify/line.test.ts :6
import type { IncomingHttpHeaders } from "node:http"; - net lolxl-safespace-mcp-0f11d05/.claude-plugin/src/webhook/verify/line.ts :18
import type { IncomingHttpHeaders } from "node:http"; - net (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/webhook/verify/slack.test.ts :7
import type { IncomingHttpHeaders } from "node:http";
2 more not shown — this panel samples each group; the count above is the real total.
secrets 29
- secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.test.ts :481
prevClientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/consent.ts :273
const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/consent.test.ts :45
process.env.GITHUB_CLIENT_SECRET = "fake-client-secret-must-never-leak"; - secrets lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/github/consent.ts :180
const clientSecret = process.env.GITHUB_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/consent.test.ts :48
process.env.NOTION_CLIENT_SECRET = CLIENT_SECRET; - secrets lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/notion/consent.ts :152
const clientSecret = process.env.NOTION_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/refresh.cache.test.ts :20
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/refresh.test.ts :7
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/refresh.ts :143
const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/service-token-store.test.ts :39
delete process.env.SAFESPACE_LINE_CHANNEL_TOKEN; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/webhook-secret-store.test.ts :30
delete process.env.SAFESPACE_SLACK_WEBHOOK_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/consent.test.ts :51
process.env.SAFESPACE_X_CLIENT_SECRET = CLIENT_SECRET;
show 17 more
- secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/auth/x/oauth.test.ts :55
process.env.SAFESPACE_X_CLIENT_SECRET = "x-fake-secret"; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/notion.test.ts :46
delete process.env.NOTION_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/x.test.ts :47
delete process.env.SAFESPACE_X_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/google-api/auth.test.ts :50
prevClientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets lolxl-safespace-mcp-0f11d05/.claude-plugin/src/google-api/auth.ts :54
const clientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/google-api/client.test.ts :48
prevClientSecret = process.env.GOOGLE_CLIENT_SECRET; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/egress-pipeline.test.ts :287
process.env.SAFESPACE_LINE_CHANNEL_TOKEN = "chan-tok-xyz"; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/egress-tripwire.test.ts :90
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/envelope-integration.test.ts :52
delete process.env.SAFESPACE_TELEGRAM_BOT_TOKEN; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/handlers.test.ts :6908
process.env.GOOGLE_CLIENT_SECRET = "fake"; - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/integration.test.ts :31
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-all-accounts.envelope-parity.test.ts :30
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-all-accounts.test.ts :16
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.mutex-contract.test.ts :35
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.recorder-symmetry.test.ts :35
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-context.test.ts :22
secret: process.env.GOOGLE_CLIENT_SECRET, - secrets (weak) lolxl-safespace-mcp-0f11d05/.claude-plugin/src/tools/with-nonoauth-context.test.ts :164
delete process.env.SAFESPACE_LINE_CHANNEL_TOKEN;
install hooks 1
- prepublishOnly lolxl-safespace-mcp-0f11d05/.claude-plugin/package.json :44
npm run build
declared dependencies 6
- @modelcontextprotocol/sdk@^1.29.0
- @napi-rs/keyring@^1.1.0
- googleapis@^144.0.0
- @types/bun@latest
- @types/node@^25.8.0
- typescript@^5.6.0
clipboard 2
- clipboard shell call lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/service-token-cli.ts :81
` (e.g. \`pbpaste | safespace ${cmd} set-token\`, or run it and paste then Ctrl-D).\n` + - clipboard shell call lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli/webhook.ts :69
" (e.g. `pbpaste | safespace webhook set-secret slack`).\n" +
obfuscation 1
- dynamic require()/import() lolxl-safespace-mcp-0f11d05/.claude-plugin/src/cli.test.ts :640
(await import(`./policy/${m}`)).__internal.resetSingletons();