diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b517a21..aab7a6a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -18,7 +18,7 @@ body: required: true - label: I am using the latest version of Vigilo required: true - - label: I have read the [documentation](https://github.com/PurpleAILAB/Vigilo#readme) + - label: I have read the [documentation](https://github.com/BitterSecurity/Vigilo#readme) required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 1074692..f028dce 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Documentation - url: https://github.com/PurpleAILAB/Vigilo#readme + url: https://github.com/BitterSecurity/Vigilo#readme about: Read the documentation and guides diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index e2aa141..699fb5c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -16,7 +16,7 @@ body: options: - label: I have searched existing issues and discussions to avoid duplicates required: true - - label: I have read the [documentation](https://github.com/PurpleAILAB/Vigilo#readme) + - label: I have read the [documentation](https://github.com/BitterSecurity/Vigilo#readme) required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/general.yml b/.github/ISSUE_TEMPLATE/general.yml index bfdd894..26fb2bc 100644 --- a/.github/ISSUE_TEMPLATE/general.yml +++ b/.github/ISSUE_TEMPLATE/general.yml @@ -16,7 +16,7 @@ body: options: - label: I have searched existing issues and discussions required: true - - label: I have read the [documentation](https://github.com/PurpleAILAB/Vigilo#readme) + - label: I have read the [documentation](https://github.com/BitterSecurity/Vigilo#readme) required: true - label: This is a question (not a bug report or feature request) required: true diff --git a/.github/scripts/check-bench-data.ts b/.github/scripts/check-bench-data.ts new file mode 100644 index 0000000..7a9157a --- /dev/null +++ b/.github/scripts/check-bench-data.ts @@ -0,0 +1,40 @@ +// Offline, deterministic sanity check for packages/bench/data (no LLM, no network). +// Verifies every stored baseline parses, has findings, and maps to a dataset entry with ground truth. +import { readdirSync, readFileSync } from "node:fs" +import { join } from "node:path" + +const dataDir = join(import.meta.dir, "../../packages/bench/data") +const dataset = JSON.parse(readFileSync(join(dataDir, "dataset.json"), "utf-8")) as Array<{ + project_id: string + codebases: Array<{ repo_url: string; commit: string }> + vulnerabilities: Array<{ finding_id: string; title: string; severity: string }> +}> +const ids = new Set(dataset.map((p) => p.project_id)) +const errors: string[] = [] +const warnings: string[] = [] + +for (const p of dataset) { + if (!p.codebases?.[0]?.repo_url) errors.push(`${p.project_id}: missing codebase repo_url`) + // checkout.ts uses codebases[0].commit; an empty commit means the clone is not pinned (warn only). + else if (!p.codebases[0].commit) warnings.push(`${p.project_id}: codebases[0].commit is empty (checkout not pinned)`) + if (!p.vulnerabilities?.length) errors.push(`${p.project_id}: no ground-truth vulnerabilities`) +} + +const baselines = readdirSync(join(dataDir, "baselines")).filter((f) => f.endsWith(".json")) +for (const f of baselines) { + const id = f.replace(/^baseline_/, "").replace(/\.json$/, "") + const b = JSON.parse(readFileSync(join(dataDir, "baselines", f), "utf-8")) + if (!ids.has(id)) errors.push(`${f}: no matching dataset entry "${id}"`) + if (!Array.isArray(b.findings) || b.findings.length === 0) errors.push(`${f}: no findings`) + for (const [i, x] of (b.findings ?? []).entries()) { + if (!x.title || !x.severity) errors.push(`${f}: finding[${i}] missing title/severity`) + } +} + +for (const w of warnings) console.warn(`warning: ${w}`) +console.log(`dataset entries: ${dataset.length}, baselines: ${baselines.length}`) +if (errors.length) { + console.error(errors.join("\n")) + process.exit(1) +} +console.log("bench data OK") diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4e6f0bd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,65 @@ +name: ci + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + opencode: + name: opencode (typecheck, test, build) + runs-on: ubuntu-latest + defaults: + run: + working-directory: packages/opencode + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: "1.4.2" + - name: Install dependencies + run: bun install + env: + BUN_INSTALL_ALLOW_SCRIPTS: "@ast-grep/napi" + - name: Typecheck + run: bun run typecheck + - name: Unit tests + run: bun test + - name: Build plugin + run: bun run build + - name: CLI smoke test + run: bun run src/cli/index.ts --version + + bench: + name: bench (typecheck, offline tests, data check) + runs-on: ubuntu-latest + defaults: + run: + working-directory: packages/bench + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: "1.4.2" + - name: Install dependencies + run: bun install --frozen-lockfile + - name: Typecheck + run: bun run typecheck + # src/scorer/baseline-scorer.test.ts calls scoreBaseline() with real findings, which needs a + # live OpenCode server + LLM and hard-exits the runner (process.exit in utils.error). Only the + # offline test files run here until that test is mocked. + - name: Unit tests (offline only) + run: bun test src/utils.test.ts src/__tests__/setup.test.ts + - name: Build CLI + run: bun run build + - name: Offline bench data check (no LLM, no network) + run: bun run ../../.github/scripts/check-bench-data.ts + - name: Report smoke test (no scores -> no-op) + run: bun run src/cli.ts report --all diff --git a/README.md b/README.md index ad2261a..1abce52 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,10 @@
[![npm version](https://img.shields.io/npm/v/vigilo?color=cb3837&labelColor=black&logo=npm&style=flat-square)](https://www.npmjs.com/package/vigilo) -[![GitHub Release](https://img.shields.io/github/v/release/PurpleAILAB/Vigilo?color=369eff&labelColor=black&logo=github&style=flat-square)](https://github.com/PurpleAILAB/Vigilo/releases) -[![GitHub Stars](https://img.shields.io/github/stars/PurpleAILAB/Vigilo?color=ffcb47&labelColor=black&style=flat-square)](https://github.com/PurpleAILAB/Vigilo/stargazers) -[![GitHub Issues](https://img.shields.io/github/issues/PurpleAILAB/Vigilo?color=ff80eb&labelColor=black&style=flat-square)](https://github.com/PurpleAILAB/Vigilo/issues) -[![License](https://img.shields.io/badge/license-BSL--1.1-white?labelColor=black&style=flat-square)](https://github.com/PurpleAILAB/Vigilo/blob/main/LICENSE) +[![GitHub Release](https://img.shields.io/github/v/release/BitterSecurity/Vigilo?color=369eff&labelColor=black&logo=github&style=flat-square)](https://github.com/BitterSecurity/Vigilo/releases) +[![GitHub Stars](https://img.shields.io/github/stars/BitterSecurity/Vigilo?color=ffcb47&labelColor=black&style=flat-square)](https://github.com/BitterSecurity/Vigilo/stargazers) +[![GitHub Issues](https://img.shields.io/github/issues/BitterSecurity/Vigilo?color=ff80eb&labelColor=black&style=flat-square)](https://github.com/BitterSecurity/Vigilo/issues) +[![License](https://img.shields.io/badge/license-BSL--1.1-white?labelColor=black&style=flat-square)](https://github.com/BitterSecurity/Vigilo/blob/main/LICENSE)
@@ -71,7 +71,7 @@ Paste this into your LLM agent session: ``` Install and configure vigilo by following the instructions here: -https://raw.githubusercontent.com/PurpleAILAB/Vigilo/main/packages/opencode/docs/installation.md +https://raw.githubusercontent.com/BitterSecurity/Vigilo/main/packages/opencode/docs/installation.md ``` ### Manual Install @@ -83,7 +83,7 @@ bunx vigilo install ### Claude Code ```bash -/plugin marketplace add PurpleAILAB/Vigilo +/plugin marketplace add BitterSecurity/Vigilo /plugin install vigilo@Vigilo ``` @@ -202,7 +202,7 @@ For contributors working on Vigilo itself. ### Setup ```bash -git clone https://github.com/PurpleAILAB/Vigilo.git +git clone https://github.com/BitterSecurity/Vigilo.git cd vigilo/packages/opencode bun install bun link @@ -263,6 +263,6 @@ Commercial licensing: catower917@gmail.com **Ready to hunt bugs? ๐Ÿ”** -[Get Started](./packages/opencode/docs/installation.md) ยท [Report Bug](https://github.com/PurpleAILAB/Vigilo/issues) ยท [Request Feature](https://github.com/PurpleAILAB/Vigilo/issues) +[Get Started](./packages/opencode/docs/installation.md) ยท [Report Bug](https://github.com/BitterSecurity/Vigilo/issues) ยท [Request Feature](https://github.com/BitterSecurity/Vigilo/issues) diff --git a/docs/installation.md b/docs/installation.md index 2f174e2..f2da07e 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -11,7 +11,7 @@ ```bash # Register the marketplace -/plugin marketplace add PurpleAILAB/Vigilo +/plugin marketplace add BitterSecurity/Vigilo # Install the plugin /plugin install vigilo @@ -29,7 +29,7 @@ ```bash # Clone repository -git clone https://github.com/PurpleAILAB/vigilo.git +git clone https://github.com/BitterSecurity/Vigilo.git cd vigilo/packages/opencode # Install dependencies @@ -71,7 +71,7 @@ For contributors developing Vigilo locally. ### Setup ```bash -git clone https://github.com/PurpleAILAB/Vigilo.git +git clone https://github.com/BitterSecurity/Vigilo.git cd vigilo/packages/opencode bun install bun link diff --git a/packages/bench/package.json b/packages/bench/package.json index 26d7157..a0bda4f 100644 --- a/packages/bench/package.json +++ b/packages/bench/package.json @@ -5,7 +5,7 @@ "type": "module", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "license": "BUSL-1.1", "bin": { diff --git a/packages/claude/.claude-plugin/marketplace.json b/packages/claude/.claude-plugin/marketplace.json index e5d83e8..d2add60 100644 --- a/packages/claude/.claude-plugin/marketplace.json +++ b/packages/claude/.claude-plugin/marketplace.json @@ -13,7 +13,7 @@ "name": "vigilo", "source": { "source": "github", - "repo": "PurpleAILAB/Vigilo" + "repo": "BitterSecurity/Vigilo" }, "description": "AI-powered smart contract security audit. Full LSP support for Solidity and Rust, analysis support for Cairo and Move.", "version": "0.0.7", @@ -21,8 +21,8 @@ "name": "PurpleCHOIms", "email": "catower917@gmail.com" }, - "homepage": "https://github.com/PurpleAILAB/Vigilo", - "repository": "https://github.com/PurpleAILAB/Vigilo", + "homepage": "https://github.com/BitterSecurity/Vigilo", + "repository": "https://github.com/BitterSecurity/Vigilo", "license": "BSL-1.1", "category": "security", "tags": ["security", "audit", "smart-contract", "solidity", "web3", "blockchain", "defi"], diff --git a/packages/claude/.claude-plugin/plugin.json b/packages/claude/.claude-plugin/plugin.json index 95cb405..aae67d6 100644 --- a/packages/claude/.claude-plugin/plugin.json +++ b/packages/claude/.claude-plugin/plugin.json @@ -6,8 +6,8 @@ "name": "PurpleCHOIms", "email": "catower917@gmail.com" }, - "repository": "https://github.com/PurpleAILAB/Vigilo", - "homepage": "https://github.com/PurpleAILAB/Vigilo", + "repository": "https://github.com/BitterSecurity/Vigilo", + "homepage": "https://github.com/BitterSecurity/Vigilo", "license": "BSL-1.1", "keywords": [ "security", diff --git a/packages/claude/README.md b/packages/claude/README.md index 20b6529..286c22d 100644 --- a/packages/claude/README.md +++ b/packages/claude/README.md @@ -21,7 +21,7 @@ From Latin *vigilo* โ€” "I watch, I guard." An autonomous security legion inspir Register the marketplace: ```bash -/plugin marketplace add PurpleAILAB/Vigilo +/plugin marketplace add BitterSecurity/Vigilo ``` Install the plugin: diff --git a/packages/opencode/README.md b/packages/opencode/README.md index f258828..9eb72f3 100644 --- a/packages/opencode/README.md +++ b/packages/opencode/README.md @@ -41,7 +41,7 @@ bunx vigilo install Or manually: ```bash -git clone https://github.com/PurpleAILAB/Vigilo.git vigilo +git clone https://github.com/BitterSecurity/Vigilo.git vigilo cd vigilo bun install bun run build diff --git a/packages/opencode/docs/installation.md b/packages/opencode/docs/installation.md index 433c828..3c2dfdb 100644 --- a/packages/opencode/docs/installation.md +++ b/packages/opencode/docs/installation.md @@ -5,7 +5,7 @@ Paste this into your LLM agent session: ``` Install and configure vigilo by following the instructions here: -https://raw.githubusercontent.com/PurpleAILAB/Vigilo/main/packages/opencode/docs/installation.md +https://raw.githubusercontent.com/BitterSecurity/Vigilo/main/packages/opencode/docs/installation.md ``` **Alternative, do this by yourself** @@ -160,7 +160,7 @@ After everything is set up and working, ask the user: If the user agrees, run: ```bash -gh repo star PurpleAILAB/Vigilo +gh repo star BitterSecurity/Vigilo ``` **Important**: Only run the command if the user explicitly says yes. Never run it automatically without consent. diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 9485342..ba56967 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -87,10 +87,10 @@ }, "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "bugs": { - "url": "https://github.com/PurpleAILAB/Vigilo/issues" + "url": "https://github.com/BitterSecurity/Vigilo/issues" }, - "homepage": "https://github.com/PurpleAILAB/Vigilo#readme" + "homepage": "https://github.com/BitterSecurity/Vigilo#readme" } diff --git a/packages/opencode/packages/darwin-arm64/package.json b/packages/opencode/packages/darwin-arm64/package.json index f6983bc..ca3f411 100644 --- a/packages/opencode/packages/darwin-arm64/package.json +++ b/packages/opencode/packages/darwin-arm64/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "darwin" diff --git a/packages/opencode/packages/darwin-x64/package.json b/packages/opencode/packages/darwin-x64/package.json index a01bbe0..5d2bdc1 100644 --- a/packages/opencode/packages/darwin-x64/package.json +++ b/packages/opencode/packages/darwin-x64/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "darwin" diff --git a/packages/opencode/packages/linux-arm64-musl/package.json b/packages/opencode/packages/linux-arm64-musl/package.json index 5207fec..2005e5c 100644 --- a/packages/opencode/packages/linux-arm64-musl/package.json +++ b/packages/opencode/packages/linux-arm64-musl/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "linux" diff --git a/packages/opencode/packages/linux-arm64/package.json b/packages/opencode/packages/linux-arm64/package.json index 2ac598e..84d094b 100644 --- a/packages/opencode/packages/linux-arm64/package.json +++ b/packages/opencode/packages/linux-arm64/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "linux" diff --git a/packages/opencode/packages/linux-x64-musl/package.json b/packages/opencode/packages/linux-x64-musl/package.json index fbf6d27..9f5facb 100644 --- a/packages/opencode/packages/linux-x64-musl/package.json +++ b/packages/opencode/packages/linux-x64-musl/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "linux" diff --git a/packages/opencode/packages/linux-x64/package.json b/packages/opencode/packages/linux-x64/package.json index ce890ed..7d6b1f6 100644 --- a/packages/opencode/packages/linux-x64/package.json +++ b/packages/opencode/packages/linux-x64/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "linux" diff --git a/packages/opencode/packages/windows-x64/package.json b/packages/opencode/packages/windows-x64/package.json index cf37172..46b597c 100644 --- a/packages/opencode/packages/windows-x64/package.json +++ b/packages/opencode/packages/windows-x64/package.json @@ -5,7 +5,7 @@ "license": "BSL-1.1", "repository": { "type": "git", - "url": "https://github.com/PurpleAILAB/Vigilo" + "url": "https://github.com/BitterSecurity/Vigilo" }, "os": [ "win32"