{"service":"CI Triage x402 — Developer Reliability Tools","version":"2.0.0","network":"eip155:8453","asset":"USDC","count":30,"tools":[{"method":"POST","path":"/v1/triage","slug":"ci-log-triage","name":"Triage a CI/CD failure log","description":"Parse a CI, build, compiler, dependency, container, lint, or test log into a secret-redacted failure type, primary error, useful trace, fix category, and confidence score. Use it to analyze build logs and identify the first actionable root-cause signal.","price":"$0.002","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["triage CI log","analyze build failure","extract CI error","classify test failure"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/triage"},{"method":"POST","path":"/v1/fingerprint","slug":"ci-failure-fingerprint","name":"Fingerprint and deduplicate a CI failure","description":"Generate a stable, secret-free fingerprint from a build or test failure so agents can group duplicate CI errors across changing line numbers, timestamps, paths, identifiers, and retry attempts.","price":"$0.001","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["deduplicate CI failures","fingerprint build error","group recurring test failures"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"fingerprint":"ci1:0123456789abcdef01234567","failure_type":"typescript","normalized_message":"error ts<n>: type string is not assignable"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/fingerprint"},{"method":"POST","path":"/v1/redact","slug":"redact-build-log-secrets","name":"Redact credentials and clean a build log","description":"Strip ANSI and runner noise while redacting GitHub tokens, AWS access keys, bearer credentials, JWTs, API keys, passwords, and common secret assignments from CI/CD logs before an agent stores, shares, or analyzes them.","price":"$0.001","category":"developer-tools","tags":["developer-tools","security","redaction"],"buyer_intents":["redact secrets from build logs","sanitize CI log","remove tokens from logs"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"redacted_log":"Authorization: Bearer [REDACTED]","line_count":1,"truncated":false},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/redact"},{"method":"GET","path":"/v1/github-run","slug":"github-actions-failure-diagnosis","name":"Diagnose a public GitHub Actions failure","description":"Analyze a public GitHub Actions run URL using failed-job metadata and check annotations. Return the failing job and step, root-cause classification, redacted evidence, and repair guidance without requesting a GitHub token or pretending public raw logs are accessible.","price":"$0.005","category":"developer-tools","tags":["developer-tools","github","github-actions","ci-cd"],"buyer_intents":["diagnose GitHub Actions failure","summarize failed GitHub workflow","analyze GitHub check annotations"],"input_example":{"url":"https://github.com/owner/repo/actions/runs/123456"},"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public github.com Actions run URL."}},"required":["url"]},"output_example":{"success":true,"run":{"id":123456,"repository":"repo"},"failing_step":{"name":"pytest","conclusion":"failure"},"failure":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96}},"body_type":null,"url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/github-run"},{"method":"POST","path":"/v1/batch-triage","slug":"batch-ci-log-triage","name":"Triage up to 25 CI failure logs","description":"Analyze as many as twenty-five CI, compiler, dependency, container, lint, and test logs in one paid call. Return a consistent secret-redacted diagnosis for every input so an agent can process a failed build matrix efficiently.","price":"$0.01","category":"developer-tools","tags":["developer-tools","ci-cd","batch","logs"],"buyer_intents":["batch CI triage","analyze multiple build logs","process CI failure matrix"],"input_example":{"logs":[{"log":"E AssertionError: assert 1 == 2","step_name":"pytest"}]},"input_schema":{"type":"object","properties":{"logs":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"description":"One to twenty-five CI logs to analyze together."}},"required":["logs"]},"output_example":{"count":1,"results":[{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/batch-triage"},{"method":"POST","path":"/v1/diagnose-and-fix","slug":"diagnose-ci-failure-and-fix","name":"Diagnose a CI failure and generate a repair plan","description":"Turn one failing build, test, compiler, dependency, lint, or container log into an ordered diagnosis with likely root cause, redacted evidence, a focused rerun command, concrete repair steps, and a stable failure fingerprint.","price":"$0.02","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["analyze build log root cause","fix CI failure","generate CI repair plan","diagnose test failure"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"likely_root_cause":"A test assertion did not match the observed value.","rerun_command":"pytest -q tests/test_math.py::test_total","repair_steps":["Reproduce the single failing test.","Compare expected and actual values."],"fingerprint":"ci1:0123456789abcdef01234567"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/diagnose-and-fix"},{"method":"POST","path":"/v1/ci-rescue-pack","slug":"complete-ci-rescue-workflow","name":"Run the complete CI rescue workflow","description":"Run redaction, root-cause triage, duplicate fingerprinting, focused rerun selection, repair planning, and reviewer-ready Markdown handoff in one call. This is the complete build-failure workflow for an autonomous coding agent.","price":"$0.05","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["complete CI rescue","repair failed build","CI failure workflow","developer handoff from build log"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"repair_plan":{"rerun_command":"pytest -q tests/test_math.py::test_total"},"markdown_handoff":"# CI failure handoff\n\n## Root cause\nA test assertion failed."},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/ci-rescue-pack"},{"method":"POST","path":"/v1/junit-summary","slug":"parse-junit-xml-test-report","name":"Parse and summarize a JUnit XML test report","description":"Parse bounded JUnit XML from pytest, Jest, Maven, Gradle, or other test runners. Return suite totals, pass rate, duration, failed test names, failure messages, and the files or classes that need attention without executing embedded content.","price":"$0.004","category":"developer-tools","tags":["developer-tools","testing","junit","xml"],"buyer_intents":["parse JUnit XML","summarize test report","find failed tests"],"input_example":{"xml":"<testsuite tests=\"1\" failures=\"1\"><testcase name=\"test_total\"><failure>assert 1 == 2</failure></testcase></testsuite>"},"input_schema":{"type":"object","properties":{"xml":{"type":"string","minLength":1,"maxLength":2000000}},"required":["xml"]},"output_example":{"success":true,"totals":{"tests":1,"failed":1,"passed":0},"pass_rate":0.0},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/junit-summary"},{"method":"POST","path":"/v1/sarif-summary","slug":"summarize-sarif-security-report","name":"Summarize a SARIF security or code-scanning report","description":"Normalize a SARIF 2.x report from CodeQL, Semgrep, Trivy, or another scanner into severity counts, top rules, prioritized findings, file locations, and concise messages suitable for an agent's remediation queue.","price":"$0.006","category":"developer-tools","tags":["developer-tools","security","sarif","code-scanning"],"buyer_intents":["summarize SARIF report","parse CodeQL results","prioritize code scanning findings"],"input_example":{"sarif":{"version":"2.1.0","runs":[{"results":[{"ruleId":"SEC001","level":"error","message":{"text":"Unsafe input"}}]}]}},"input_schema":{"type":"object","properties":{"sarif":{"description":"SARIF JSON object or serialized JSON string"}},"required":["sarif"]},"output_example":{"success":true,"total_findings":1,"severity":{"error":1},"top_rules":[{"rule_id":"SEC001","count":1}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/sarif-summary"},{"method":"POST","path":"/v1/npm-error","slug":"diagnose-npm-install-error","name":"Diagnose an npm installation or dependency error","description":"Identify npm and Node.js failure modes such as ERESOLVE peer conflicts, ETARGET versions, engine mismatches, node-gyp builds, permission errors, missing files, lockfile drift, and registry/network failures, then return safe recovery commands.","price":"$0.004","category":"developer-tools","tags":["developer-tools","npm","dependencies","nodejs"],"buyer_intents":["fix npm install error","diagnose ERESOLVE","repair Node dependency conflict"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"issue_type":"peer_dependency_conflict","commands":["npm explain <package>","npm install"]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/npm-error"},{"method":"POST","path":"/v1/pip-conflict","slug":"diagnose-pip-dependency-conflict","name":"Diagnose a pip or Python dependency conflict","description":"Parse pip and Python packaging failures including ResolutionImpossible, incompatible requirements, missing distributions, wheel build failures, Python-version constraints, SSL/index errors, and broken environments, then return focused verification and repair steps.","price":"$0.004","category":"developer-tools","tags":["developer-tools","python","pip","dependencies"],"buyer_intents":["diagnose pip dependency conflict","fix ResolutionImpossible","repair Python package install"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"issue_type":"resolution_impossible","commands":["python -m pip check","python -m pip install --dry-run -r requirements.txt"]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/pip-conflict"},{"method":"POST","path":"/v1/github-actions-lint","slug":"lint-github-actions-workflow-yaml","name":"Lint a GitHub Actions workflow YAML","description":"Parse a GitHub Actions workflow as inert YAML and report structural errors, missing jobs or runners, malformed steps, dangerous pull_request_target patterns, mutable action references, overly broad permissions, and common expression mistakes.","price":"$0.006","category":"developer-tools","tags":["developer-tools","github-actions","yaml","lint"],"buyer_intents":["lint GitHub Actions workflow","validate workflow YAML","find GitHub Actions security mistakes"],"input_example":{"workflow":"name: CI\non: [push]\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run: pytest"},"input_schema":{"type":"object","properties":{"workflow":{"type":"string","minLength":1,"maxLength":1000000}},"required":["workflow"]},"output_example":{"success":true,"valid":true,"job_count":1,"errors":[],"warnings":[]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/github-actions-lint"},{"method":"POST","path":"/v1/docker-error","slug":"diagnose-docker-build-failure","name":"Diagnose a Docker image build failure","description":"Classify Docker and BuildKit errors such as missing COPY context, failed RUN commands, unavailable image manifests, apt failures, permissions, network resolution, platform mismatches, disk exhaustion, and cache problems, with focused rebuild commands.","price":"$0.004","category":"developer-tools","tags":["developer-tools","docker","containers","ci-cd"],"buyer_intents":["diagnose Docker build failure","fix BuildKit error","explain docker build log"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"issue_type":"copy_source_missing","commands":["docker build --no-cache --progress=plain ."]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/docker-error"},{"method":"POST","path":"/v1/typescript-error","slug":"explain-typescript-compiler-error","name":"Explain a TypeScript compiler failure","description":"Extract the first actionable TypeScript diagnostic, error code, file, line, and message; group repeated diagnostics and return a focused tsc command plus repair guidance for type, module, configuration, and declaration failures.","price":"$0.003","category":"developer-tools","tags":["developer-tools","typescript","compiler","ci-cd"],"buyer_intents":["explain TypeScript compiler error","parse tsc diagnostics","fix TypeScript build"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"language":"typescript","diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"rerun_command":"npx tsc --noEmit"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/typescript-error"},{"method":"POST","path":"/v1/pytest-summary","slug":"summarize-pytest-failure","name":"Summarize a pytest failure","description":"Extract the failed pytest node id, assertion or exception, relevant Python frames, likely cause category, focused single-test rerun command, and practical repair steps from a pytest failure log.","price":"$0.003","category":"developer-tools","tags":["developer-tools","pytest","python","testing"],"buyer_intents":["summarize pytest failure","parse pytest log","rerun failed Python test"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"framework":"pytest","diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"rerun_command":"pytest -q tests/test_math.py::test_total"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/pytest-summary"},{"method":"POST","path":"/v1/jest-summary","slug":"summarize-jest-test-failure","name":"Summarize a Jest test failure","description":"Extract the failing Jest suite and test, expected-versus-received assertion, JavaScript or TypeScript frames, focused rerun command, and repair guidance from Jest, Vitest, or compatible test output.","price":"$0.003","category":"developer-tools","tags":["developer-tools","jest","javascript","testing"],"buyer_intents":["summarize Jest failure","parse Vitest error","rerun failed JavaScript test"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"framework":"jest","diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96},"rerun_command":"npx jest path/to/test --runInBand"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/jest-summary"},{"method":"POST","path":"/v1/eslint-summary","slug":"parse-eslint-report","name":"Parse and summarize an ESLint failure","description":"Normalize stylish, compact, and common ESLint output into error and warning counts, affected files, first actionable rule violations, focused rerun command, and whether safe automatic fixing may be available.","price":"$0.003","category":"developer-tools","tags":["developer-tools","eslint","javascript","lint"],"buyer_intents":["parse ESLint report","summarize lint errors","find JavaScript lint failure"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"framework":"eslint","errors":1,"warnings":0,"rerun_command":"npx eslint src/app.ts"},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/eslint-summary"},{"method":"POST","path":"/v1/go-test-summary","slug":"diagnose-go-test-failure","name":"Diagnose a Go test or build failure","description":"Parse go test, go vet, and compiler output into failed package or test, panic or compiler message, relevant Go frames, focused rerun command, and repair guidance for tests, modules, races, and compilation errors.","price":"$0.003","category":"developer-tools","tags":["developer-tools","golang","testing","compiler"],"buyer_intents":["diagnose Go test failure","parse golang build error","rerun failed Go test"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"language":"go","rerun_command":"go test ./... -count=1","repair_steps":["Reproduce the failing package without cache."]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/go-test-summary"},{"method":"POST","path":"/v1/cargo-error","slug":"diagnose-rust-cargo-error","name":"Diagnose a Rust Cargo build or test error","description":"Extract Rust compiler error codes, source locations, Cargo dependency failures, borrow-checker diagnostics, failed tests, and panics; return focused cargo commands and evidence-linked repair guidance.","price":"$0.003","category":"developer-tools","tags":["developer-tools","rust","cargo","compiler"],"buyer_intents":["diagnose Rust cargo error","parse rustc compiler error","fix Cargo test failure"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"language":"rust","rerun_command":"cargo check","repair_steps":["Run cargo check to reproduce the first compiler diagnostic."]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/cargo-error"},{"method":"POST","path":"/v1/flaky-fingerprint","slug":"fingerprint-flaky-test-failure","name":"Fingerprint a flaky or intermittent CI failure","description":"Create a retry-stable fingerprint while detecting timing, race, randomness, ordering, shared-state, port, resource, and intermittent-network signals that often distinguish flaky tests from deterministic failures.","price":"$0.002","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["fingerprint flaky test","detect intermittent CI failure","group retry failures"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"fingerprint":"flaky1:0123456789abcdef01234567","flaky_signals":["timeout"],"likely_flaky":true},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/flaky-fingerprint"},{"method":"POST","path":"/v1/rerun-command","slug":"generate-focused-ci-rerun-command","name":"Generate a focused command to rerun a CI failure","description":"Infer a safe, non-executed rerun command from pytest, Jest, Vitest, ESLint, TypeScript, npm, pip, Docker, Go, Rust, Maven, or Gradle failure output so an agent can reproduce the smallest failing unit.","price":"$0.002","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["generate CI rerun command","reproduce failed test","focused build retry command"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"framework":"pytest","command":"pytest -q tests/test_math.py::test_total","confidence":0.95},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/rerun-command"},{"method":"POST","path":"/v1/coverage-summary","slug":"summarize-code-coverage-report","name":"Summarize a code coverage report","description":"Parse LCOV, Cobertura XML, coverage.py JSON, Istanbul JSON summaries, and common terminal coverage tables. Return line, branch, function, and statement percentages plus threshold status in one normalized response.","price":"$0.003","category":"developer-tools","tags":["developer-tools","testing","coverage","reports"],"buyer_intents":["summarize code coverage","parse LCOV","check coverage threshold"],"input_example":{"report":"TN:\nLF:100\nLH:82\nBRF:20\nBRH:14","threshold":80},"input_schema":{"type":"object","properties":{"report":{"type":"string","minLength":1,"maxLength":2000000},"threshold":{"type":"number","minimum":0,"maximum":100}},"required":["report"]},"output_example":{"success":true,"format":"lcov","lines":{"found":100,"hit":82,"percent":82.0},"passes_threshold":true},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/coverage-summary"},{"method":"POST","path":"/v1/dotenv-lint","slug":"validate-dotenv-environment-file","name":"Lint a dotenv environment file safely","description":"Validate dotenv syntax without returning secret values. Report invalid or duplicate keys, malformed assignments, risky committed-secret key names, quoting problems, export usage, and line numbers while keeping all values private.","price":"$0.002","category":"developer-tools","tags":["developer-tools","dotenv","configuration","security"],"buyer_intents":["validate dotenv file","lint environment variables","find duplicate env keys"],"input_example":{"dotenv":"NODE_ENV=production\nAPI_KEY=replace-me\nPORT=3000"},"input_schema":{"type":"object","properties":{"dotenv":{"type":"string","minLength":1,"maxLength":1000000}},"required":["dotenv"]},"output_example":{"success":true,"valid":true,"key_count":3,"issues":[{"line":2,"severity":"warning","code":"sensitive_key"}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/dotenv-lint"},{"method":"POST","path":"/v1/stack-trace","slug":"parse-stack-trace","name":"Parse and normalize a stack trace","description":"Parse Python, JavaScript, TypeScript, Java, Go, and Rust stack traces into language, exception, message, and normalized frame objects with function, file, line, and column fields for downstream debugging agents.","price":"$0.003","category":"developer-tools","tags":["developer-tools","debugging","stack-trace","errors"],"buyer_intents":["parse stack trace","normalize exception frames","extract file and line from error"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"language":"python","exception":"AssertionError","frames":[{"file":"tests/test_math.py","line":8}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/stack-trace"},{"method":"POST","path":"/v1/markdown-handoff","slug":"convert-ci-failure-to-markdown-handoff","name":"Create a reviewer-ready Markdown CI failure handoff","description":"Convert a raw failing build or test log into concise secret-redacted Markdown containing the root cause, evidence, fingerprint, reproduction command, repair checklist, and confidence for an issue, pull request, or human reviewer.","price":"$0.004","category":"developer-tools","tags":["developer-tools","ci-cd","logs"],"buyer_intents":["convert CI failure to markdown","create build failure handoff","write CI incident report"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"markdown":"# CI failure handoff\n\n## Root cause\nA test assertion failed."},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/markdown-handoff"},{"method":"POST","path":"/v1/failure-cluster","slug":"cluster-recurring-ci-failures","name":"Cluster recurring CI failures by fingerprint","description":"Analyze up to twenty-five build or test logs, group retries and duplicate failures by stable secret-free fingerprints, and return cluster counts, representative messages, failure types, and the highest-frequency root cause.","price":"$0.008","category":"developer-tools","tags":["developer-tools","ci-cd","deduplication","batch"],"buyer_intents":["cluster CI failures","deduplicate recurring build errors","group flaky test retries"],"input_example":{"logs":[{"log":"FAILED tests/test_math.py::test_total - AssertionError"},{"log":"FAILED tests/test_math.py::test_total - AssertionError"}]},"input_schema":{"type":"object","properties":{"logs":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"description":"One to twenty-five CI logs to analyze together."}},"required":["logs"]},"output_example":{"success":true,"input_count":2,"cluster_count":1,"clusters":[{"count":2,"fingerprint":"ci1:0123456789abcdef01234567"}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/failure-cluster"},{"method":"POST","path":"/v1/log-diff","slug":"compare-two-ci-failure-logs","name":"Compare two CI failure logs","description":"Compare a previous and current build or test failure after secret redaction and noise normalization. Report whether the root-cause fingerprint changed, new and removed error evidence, similarity, and diagnosis before and after.","price":"$0.003","category":"developer-tools","tags":["developer-tools","ci-cd","diff","logs"],"buyer_intents":["compare CI logs","detect changed build failure","diff test errors"],"input_example":{"before":"error TS2322 at src/a.ts:10","after":"error TS2307 at src/b.ts:20"},"input_schema":{"type":"object","properties":{"before":{"type":"string","minLength":1,"maxLength":1000000},"after":{"type":"string","minLength":1,"maxLength":1000000}},"required":["before","after"]},"output_example":{"success":true,"same_failure":false,"similarity":0.41,"new_error_lines":["error TS2307 at src/b.ts:20"]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/log-diff"},{"method":"POST","path":"/v1/check-annotations","slug":"summarize-github-check-annotations","name":"Summarize GitHub check annotations","description":"Normalize GitHub Checks or compatible annotation objects into severity counts, affected files, top rules, prioritized evidence, and a concise failure summary. Secret-like content is redacted before it is returned.","price":"$0.003","category":"developer-tools","tags":["developer-tools","github","annotations","code-review"],"buyer_intents":["summarize GitHub check annotations","prioritize check run findings","group code review annotations"],"input_example":{"annotations":[{"path":"src/app.ts","start_line":12,"annotation_level":"failure","message":"Type error","title":"TS2322"}]},"input_schema":{"type":"object","properties":{"annotations":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object"}}},"required":["annotations"]},"output_example":{"success":true,"count":1,"severity":{"failure":1},"affected_files":["src/app.ts"]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/check-annotations"},{"method":"POST","path":"/v1/test-report-normalize","slug":"normalize-test-report","name":"Normalize a test report into one JSON shape","description":"Auto-detect JUnit XML, SARIF JSON, LCOV, coverage tables, pytest, Jest, ESLint, Go, Rust, and generic CI output, then return a consistent report type, status, totals, failures, diagnosis, and source-format metadata.","price":"$0.005","category":"developer-tools","tags":["developer-tools","testing","normalization","reports"],"buyer_intents":["normalize test report","convert CI report to JSON","auto detect build report format"],"input_example":{"report":"FAILED tests/test_math.py::test_total - AssertionError","format":"auto"},"input_schema":{"type":"object","properties":{"report":{"type":"string","minLength":1,"maxLength":2000000},"format":{"type":"string","default":"auto"}},"required":["report"]},"output_example":{"success":true,"detected_format":"pytest","status":"failed","diagnosis":{"failure_type":"pytest","error_message":"AssertionError: assert 1 == 2","stack_trace":["tests/test_math.py:8: AssertionError"],"suggested_fix_category":"test_failure","confidence":0.96}},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/test-report-normalize"},{"method":"POST","path":"/v1/secret-scan","slug":"scan-build-log-for-secrets","name":"Scan a build log for exposed credentials","description":"Detect likely GitHub tokens, AWS keys, bearer credentials, JWTs, private-key blocks, database URLs, API keys, passwords, and secret assignments in a CI log. Return only types, counts, line numbers, and redacted snippets—never the detected values.","price":"$0.002","category":"developer-tools","tags":["developer-tools","security","secrets","ci-cd"],"buyer_intents":["scan build log for secrets","detect leaked CI credentials","find tokens in logs"],"input_example":{"log":"FAILED tests/test_math.py::test_total - AssertionError: assert 1 == 2","step_name":"pytest"},"input_schema":{"type":"object","properties":{"log":{"type":"string","minLength":1,"maxLength":1000000,"description":"Raw CI, build, test, compiler, or runtime log text."},"step_name":{"type":"string","maxLength":300,"description":"Optional CI step or job name that produced the log."}},"required":["log"]},"output_example":{"success":true,"finding_count":1,"types":{"bearer_token":1},"findings":[{"line":4,"type":"bearer_token","redacted":"Authorization: Bearer [REDACTED]"}]},"body_type":"json","url":"https://temporary-instant-tempest-4a1g1wu.vercel.app/v1/secret-scan"}]}