-
Notifications
You must be signed in to change notification settings - Fork 94
Refactor hub integration and enhance TUI with new features #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
04c8383
f389927
6cd8fd3
075b678
1d495ce
3e0d1cd
9376645
f2dca0a
f800225
b137f48
47c254e
6f967ff
544569d
976947c
f192771
a344167
1891a43
b975d28
6ced81a
9cfbc29
462f6ed
6cdd0ca
73a0170
bc5e937
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| name: CI | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main, dev, feature/*] | ||
| pull_request: | ||
| branches: [main, dev] | ||
| workflow_dispatch: | ||
|
|
||
| jobs: | ||
| lint-and-typecheck: | ||
| name: Lint & Type Check | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@v5 | ||
| with: | ||
| version: "latest" | ||
|
|
||
| - name: Set up Python | ||
| run: uv python install 3.14 | ||
|
|
||
| - name: Install dependencies | ||
| run: uv sync | ||
|
|
||
| - name: Ruff check (fuzzforge-cli) | ||
| run: | | ||
| cd fuzzforge-cli | ||
| uv run --extra lints ruff check src/ | ||
|
|
||
| - name: Ruff check (fuzzforge-mcp) | ||
| run: | | ||
| cd fuzzforge-mcp | ||
| uv run --extra lints ruff check src/ | ||
|
|
||
| - name: Ruff check (fuzzforge-common) | ||
| run: | | ||
| cd fuzzforge-common | ||
| uv run --extra lints ruff check src/ | ||
|
|
||
| - name: Mypy type check (fuzzforge-cli) | ||
| run: | | ||
| cd fuzzforge-cli | ||
| uv run --extra lints mypy src/ | ||
|
|
||
| - name: Mypy type check (fuzzforge-mcp) | ||
| run: | | ||
| cd fuzzforge-mcp | ||
| uv run --extra lints mypy src/ | ||
|
|
||
| # NOTE: Mypy check for fuzzforge-common temporarily disabled | ||
| # due to 37 pre-existing type errors in legacy code. | ||
| # TODO: Fix type errors and re-enable strict checking | ||
| #- name: Mypy type check (fuzzforge-common) | ||
| # run: | | ||
| # cd fuzzforge-common | ||
| # uv run --extra lints mypy src/ | ||
|
|
||
| test: | ||
| name: Tests | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@v5 | ||
| with: | ||
| version: "latest" | ||
|
|
||
| - name: Set up Python | ||
| run: uv python install 3.14 | ||
|
|
||
| - name: Install dependencies | ||
| run: uv sync --all-extras | ||
|
|
||
| - name: Run MCP tests | ||
| run: | | ||
| cd fuzzforge-mcp | ||
| uv run --extra tests pytest -v | ||
|
|
||
| - name: Run common tests | ||
| run: | | ||
| cd fuzzforge-common | ||
| uv run --extra tests pytest -v |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| name: MCP Server Smoke Test | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main, dev] | ||
| pull_request: | ||
| branches: [main, dev] | ||
| workflow_dispatch: | ||
|
|
||
| jobs: | ||
| mcp-server: | ||
| name: MCP Server Test | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Install uv | ||
| uses: astral-sh/setup-uv@v5 | ||
| with: | ||
| version: "latest" | ||
|
|
||
| - name: Set up Python | ||
| run: uv python install 3.14 | ||
|
|
||
| - name: Install dependencies | ||
| run: uv sync --all-extras | ||
|
|
||
| - name: Start MCP server in background | ||
| run: | | ||
| cd fuzzforge-mcp | ||
| nohup uv run python -m fuzzforge_mcp.server > server.log 2>&1 & | ||
| echo $! > server.pid | ||
| sleep 3 | ||
|
|
||
| - name: Run MCP tool tests | ||
| run: | | ||
| cd fuzzforge-mcp | ||
| uv run --extra tests pytest tests/test_resources.py -v | ||
|
|
||
| - name: Stop MCP server | ||
| if: always() | ||
| run: | | ||
| if [ -f fuzzforge-mcp/server.pid ]; then | ||
| kill $(cat fuzzforge-mcp/server.pid) || true | ||
| fi | ||
|
|
||
| - name: Show server logs | ||
| if: failure() | ||
| run: cat fuzzforge-mcp/server.log || true | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,19 +1,19 @@ | ||||||
| .PHONY: help install sync format lint typecheck test build-modules clean | ||||||
| .PHONY: help install sync format lint typecheck test build-hub-images clean | ||||||
|
|
||||||
| SHELL := /bin/bash | ||||||
|
|
||||||
| # Default target | ||||||
| help: | ||||||
| @echo "FuzzForge OSS Development Commands" | ||||||
| @echo "FuzzForge AI Development Commands" | ||||||
| @echo "" | ||||||
| @echo " make install - Install all dependencies" | ||||||
| @echo " make sync - Sync shared packages from upstream" | ||||||
| @echo " make format - Format code with ruff" | ||||||
| @echo " make lint - Lint code with ruff" | ||||||
| @echo " make typecheck - Type check with mypy" | ||||||
| @echo " make test - Run all tests" | ||||||
| @echo " make build-modules - Build all module container images" | ||||||
| @echo " make clean - Clean build artifacts" | ||||||
| @echo " make build-hub-images - Build all mcp-security-hub images" | ||||||
| @echo " make clean - Clean build artifacts" | ||||||
| @echo "" | ||||||
|
|
||||||
| # Install all dependencies | ||||||
|
|
@@ -64,34 +64,9 @@ test: | |||||
| fi \ | ||||||
| done | ||||||
|
|
||||||
| # Build all module container images | ||||||
| # Uses Docker by default, or Podman if FUZZFORGE_ENGINE=podman | ||||||
| build-modules: | ||||||
| @echo "Building FuzzForge module images..." | ||||||
| @if [ "$$FUZZFORGE_ENGINE" = "podman" ]; then \ | ||||||
| if [ -n "$$SNAP" ]; then \ | ||||||
| echo "Using Podman with isolated storage (Snap detected)"; \ | ||||||
| CONTAINER_CMD="podman --root ~/.fuzzforge/containers/storage --runroot ~/.fuzzforge/containers/run"; \ | ||||||
| else \ | ||||||
| echo "Using Podman"; \ | ||||||
| CONTAINER_CMD="podman"; \ | ||||||
| fi; \ | ||||||
| else \ | ||||||
| echo "Using Docker"; \ | ||||||
| CONTAINER_CMD="docker"; \ | ||||||
| fi; \ | ||||||
| for module in fuzzforge-modules/*/; do \ | ||||||
| if [ -f "$$module/Dockerfile" ] && \ | ||||||
| [ "$$module" != "fuzzforge-modules/fuzzforge-modules-sdk/" ] && \ | ||||||
| [ "$$module" != "fuzzforge-modules/fuzzforge-module-template/" ]; then \ | ||||||
| name=$$(basename $$module); \ | ||||||
| version=$$(grep 'version' "$$module/pyproject.toml" 2>/dev/null | head -1 | sed 's/.*"\(.*\\)".*/\\1/' || echo "0.1.0"); \ | ||||||
| echo "Building $$name:$$version..."; \ | ||||||
| $$CONTAINER_CMD build -t "fuzzforge-$$name:$$version" "$$module" || exit 1; \ | ||||||
| fi \ | ||||||
| done | ||||||
| @echo "" | ||||||
| @echo "✓ All modules built successfully!" | ||||||
| # Build all mcp-security-hub images for the firmware analysis pipeline | ||||||
| build-hub-images: | ||||||
| @bash scripts/build-hub-images.sh | ||||||
|
||||||
| @bash scripts/build-hub-images.sh | |
| @echo "Error: build-hub-images is not implemented because scripts/build-hub-images.sh is missing." 1>&2; exit 1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,4 @@ | ||
| <h1 align="center"> FuzzForge OSS</h1> | ||
| <h1 align="center"> FuzzForge AI</h1> | ||
| <h3 align="center">AI-Powered Security Research Orchestration via MCP</h3> | ||
|
|
||
| <p align="center"> | ||
|
|
@@ -26,13 +26,13 @@ | |
|
|
||
| --- | ||
|
|
||
| > 🚧 **FuzzForge OSS is under active development.** Expect breaking changes and new features! | ||
| > 🚧 **FuzzForge AI is under active development.** Expect breaking changes and new features! | ||
|
|
||
| --- | ||
|
|
||
| ## 🚀 Overview | ||
|
|
||
| **FuzzForge OSS** is an open-source runtime that enables AI agents (GitHub Copilot, Claude, etc.) to orchestrate security research workflows through the **Model Context Protocol (MCP)**. | ||
| **FuzzForge AI** is an open-source runtime that enables AI agents (GitHub Copilot, Claude, etc.) to orchestrate security research workflows through the **Model Context Protocol (MCP)**. | ||
|
|
||
| ### The Core: Modules | ||
|
|
||
|
|
@@ -43,7 +43,7 @@ At the heart of FuzzForge are **modules** - containerized security tools that AI | |
| - **🔗 Composable**: Chain modules together into automated workflows | ||
| - **📦 Extensible**: Build custom modules with the Python SDK | ||
|
|
||
| The OSS runtime handles module discovery, execution, and result collection. Security modules (developed separately) provide the actual security tooling - from static analyzers to fuzzers to crash triagers. | ||
| FuzzForge AI handles module discovery, execution, and result collection. Security modules (developed separately) provide the actual security tooling - from static analyzers to fuzzers to crash triagers. | ||
|
Comment on lines
37
to
+46
|
||
|
|
||
| Instead of manually running security tools, describe what you want and let your AI assistant handle it. | ||
|
|
||
|
|
@@ -171,11 +171,11 @@ FuzzForge modules are containerized security tools that AI agents can orchestrat | |
|
|
||
| ### Module Ecosystem | ||
|
|
||
| | | FuzzForge OSS | FuzzForge Enterprise Modules | | ||
| | | FuzzForge AI | FuzzForge Enterprise Modules | | ||
| |---|---|---| | ||
| | **What** | Runtime & MCP server | Security research modules | | ||
| | **License** | Apache 2.0 | BSL 1.1 (Business Source License) | | ||
| | **Compatibility** | ✅ Runs any compatible module | ✅ Works with OSS runtime | | ||
| | **Compatibility** | ✅ Runs any compatible module | ✅ Works with FuzzForge AI | | ||
|
|
||
| **Enterprise modules** are developed separately and provide production-ready security tooling: | ||
|
|
||
|
|
@@ -187,7 +187,7 @@ FuzzForge modules are containerized security tools that AI agents can orchestrat | |
| | 🔐 **Vulnerability Detection** | Pattern Matcher, Taint Analyzer | Security vulnerability scanning | | ||
| | 📝 **Reporting** | Report Generator, SARIF Exporter | Automated security report generation | | ||
|
|
||
| > 💡 **Build your own modules!** The FuzzForge SDK allows you to create custom modules that integrate seamlessly with the OSS runtime. See [Creating Custom Modules](#-creating-custom-modules). | ||
| > 💡 **Build your own modules!** The FuzzForge SDK allows you to create custom modules that integrate seamlessly with FuzzForge AI. See [Creating Custom Modules](#-creating-custom-modules). | ||
|
|
||
| ### Execution Modes | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This workflow starts
python -m fuzzforge_mcp.server, but the package entrypoint ispython -m fuzzforge_mcp(there is nofuzzforge_mcp.servermodule). Also, the MCP tests use the in-processmcptransport (seefuzzforge-mcp/tests/conftest.py), so starting a background stdio server here is unnecessary and may hang. Consider removing the start/stop steps entirely, or updating the command topython -m fuzzforge_mcpand actually exercising it via a real stdio client.