-
Notifications
You must be signed in to change notification settings - Fork 93
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
Merged
Changes from all commits
Commits
Show all changes
24 commits
Select commit
Hold shift + click to select a range
04c8383
refactor(modules-sdk): write all events to stdout as JSONL
AFredefon f389927
feat(hub): add hub integration and rename project to FuzzForge AI
AFredefon 6cd8fd3
fix(hub): fix hub config wiring and volume expansion in client
AFredefon 075b678
Merge pull request #42 from FuzzingLabs/features/hub-integration
AFredefon 1d495ce
refactor: remove module system, migrate to MCP hub tools architecture
AFredefon 3e0d1cd
Merge pull request #43 from FuzzingLabs/refactor/remove-module-system…
AFredefon 9376645
feat(tui): add terminal UI with hub and agent management
AFredefon f2dca0a
Merge pull request #45 from FuzzingLabs/feature/tui-agent-setup
AFredefon f800225
ci: add GitHub Actions workflows with lint, typecheck and tests
AFredefon b137f48
fix(ci): use uv sync
AFredefon 47c254e
fix: add workspace packages as root deps so uv sync installs everything
AFredefon 6f967ff
fix: find_fuzzforge_root searches cwd first instead of __file__
AFredefon 544569d
fix: use ~/.fuzzforge for user-global data, keep workspace .fuzzforge…
AFredefon 976947c
feat: add FUZZFORGE_USER_DIR env var to override user-global data dir
AFredefon f192771
fix: improve new user experience and docs
AFredefon a344167
tui: in-UI image building, hub registry auto-recovery, clean hub-config
AFredefon 1891a43
tui: background image builds with live log viewer
AFredefon b975d28
tui: fix single-click buttons and double-modal push
AFredefon 6ced81a
fix: inject project assets as Docker volume mounts in execute_hub_tool
AFredefon 9cfbc29
fix: add noqa for optional git URL fetch exception
AFredefon 462f6ed
fix: resolve ruff lint errors in TUI modules
AFredefon 6cdd0ca
fix: suppress BLE001 for intentional broad catch in execute_hub_tool
AFredefon 73a0170
fix: resolve mypy type errors in TUI app and build_log screen
AFredefon bc5e937
fix: document mount paths in execute_hub_tool and inject volumes into…
AFredefon File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.