u2i/Laocoön — Supply Chain Guard
Diffs changed dependency lockfiles (Hex/npm/PyPI) against a soaked baseline and uses an LLM to flag freshly-injected supply chain trojans.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Stale
- License
- None
Inputs
| name | description | required | default |
|---|---|---|---|
| gemini-api-key | Google Gemini API key (for google: models). Maps to GEMINI_API_KEY. | no | "" |
| anthropic-api-key | Anthropic API key (for anthropic: models). Maps to ANTHROPIC_API_KEY. | no | "" |
| openai-api-key | OpenAI API key (for openai: models). Maps to OPENAI_API_KEY. | no | "" |
| llm-api-key | API key for an OpenAI-compatible endpoint (compatible: models). Maps to LLM_API_KEY. | no | "" |
| llm-base-url | Base URL for an OpenAI-compatible endpoint (OpenRouter/Together/Groq/Gateway/Ollama). Required for compatible: models. | no | "" |
| github-token | GitHub token used to read the PR diff and post a comment. | no | ${{ github.token }} |
| triage-model | Cheap model run on every PR, as 'provider:model'. Bare model defaults to google:. | no | google:gemini-3.1-flash-lite |
| deep-model | Stronger model used only on escalation, as 'provider:model'. | no | google:gemini-3.5-flash |
| soak-days | A release older than this many days is treated as a presumed-clean 'soaked' baseline to diff against. | no | 60 |
| ecosystems | Comma-separated ecosystem ids to analyze (e.g. 'hex,npm,pypi'). Empty = auto-detect all. | no | "" |
| lockfile | Restrict analysis to a single lockfile path (overrides auto-detection). | no | "" |
| base-ref | Git ref to diff against (the 'before' state). Defaults to the PR base. | no | "" |
| fail-on | Minimum risk that fails the check: critical | high | medium | low | none. | no | high |
| comment | Whether to post / update a PR comment with the findings. | no | true |
| max-diff-bytes | Overall byte cap on the artifact diff sent to the LLM per ecosystem. | no | 60000 |
Outputs
| name | description |
|---|---|
| risk-level | Highest risk level found (none|low|medium|high|critical, or 'skipped'). |
| findings-json | Structured findings as a JSON string. |