{"name":"prompt-injection-surface","description":"Scans AI app source code for prompt injection risk at LLM call sites. Walks .ts/.tsx/.js/.jsx/.py/.mjs/.cjs source files, locates LLM SDK call sites (anthropic, openai, @ai-sdk/*, google generative), and flags user input flowing into prompts without sanitization, calls without max_tokens caps, system/user prompt mixing, and LLM output used unvalidated in fetch/exec/eval. Returns 0-100 score, per-finding kind/severity/path/line/evidence/recommendation, and a Venice plain-English verdict. Dual input: {repo: 'owner/name'} (tree-walk, capped 500 files) or {files: [{path, content}, ...]}. Use it as an LLM call-site audit, unsanitized-user-input-in-prompts detector, system-message mixing flag, unbounded completion detector, AI app safety scan, or pre-deploy AI risk gate.","price":"$0.03","method":"POST","input_schema":{"oneOf":[{"type":"object","properties":{"repo":{"type":"string","description":"GitHub repo in 'owner/name' format"},"branch":{"type":"string","description":"Optional branch; defaults to repo's default_branch"}},"required":["repo"]},{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"}},"required":["path","content"]}}},"required":["files"]}]},"input_example":{"repo":"rooz21/prooflayer-fixtures"},"output_example":{"score":60,"risk_level":"medium","findings":[{"kind":"unsanitized_user_input_to_prompt","severity":"high","path":"src/handler.ts","line":6,"evidence":"const userMessage = req.body.message;","recommendation":"User input flows into the LLM prompt without visible sanitization. Sanitize / escape / validate inputs before constructing prompts to mitigate prompt injection."},{"kind":"unbounded_completion","severity":"medium","path":"src/handler.ts","line":6,"evidence":"return client.chat.completions.create({","recommendation":"LLM call has no max_tokens — model may run away with output. Set an explicit token cap."}],"signals":{"source_files_found":1,"files_scanned":1,"finding_counts_by_kind":{"unsanitized_user_input_to_prompt":1,"unbounded_completion":1}},"summary":"src/handler.ts passes req.body.message directly into an OpenAI call without sanitization and has no max_tokens cap.","metadata":{"repo":"rooz21/prooflayer-fixtures","branch":"main","files_scanned":1,"files_fetched_via_api":1}},"x402_payment_required":true,"x402_facilitator":"https://api.cdp.coinbase.com/platform/v2/x402"}