nat-engine 1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mannf/__init__.py +33 -0
- mannf/__main__.py +10 -0
- mannf/_version.py +8 -0
- mannf/agents/__init__.py +7 -0
- mannf/agents/analyzer_agent.py +9 -0
- mannf/agents/base.py +9 -0
- mannf/agents/bdi_agent.py +9 -0
- mannf/agents/belief_state.py +9 -0
- mannf/agents/coordinator_agent.py +9 -0
- mannf/agents/executor_agent.py +9 -0
- mannf/agents/monitor_agent.py +9 -0
- mannf/agents/oracle_agent.py +9 -0
- mannf/agents/planner_agent.py +9 -0
- mannf/agents/test_agent.py +9 -0
- mannf/anomaly/__init__.py +7 -0
- mannf/anomaly/enhanced_detector.py +9 -0
- mannf/cli.py +9 -0
- mannf/core/__init__.py +26 -0
- mannf/core/agents/__init__.py +52 -0
- mannf/core/agents/accessibility_scanner_agent.py +245 -0
- mannf/core/agents/analyzer_agent.py +224 -0
- mannf/core/agents/autonomous_loop_agent.py +1086 -0
- mannf/core/agents/autonomous_loop_models.py +62 -0
- mannf/core/agents/autonomous_run_differ.py +427 -0
- mannf/core/agents/base.py +128 -0
- mannf/core/agents/bdi_agent.py +330 -0
- mannf/core/agents/belief_state.py +202 -0
- mannf/core/agents/browser_coordinator_agent.py +224 -0
- mannf/core/agents/browser_executor_agent.py +410 -0
- mannf/core/agents/coordinator_agent.py +262 -0
- mannf/core/agents/executor_agent.py +222 -0
- mannf/core/agents/monitor_agent.py +188 -0
- mannf/core/agents/oracle_agent.py +150 -0
- mannf/core/agents/performance_testing_agent.py +279 -0
- mannf/core/agents/planner_agent.py +128 -0
- mannf/core/agents/test_agent.py +249 -0
- mannf/core/agents/visual_regression_agent.py +311 -0
- mannf/core/agents/web_crawler_agent.py +510 -0
- mannf/core/agents/worker_pool.py +366 -0
- mannf/core/anomaly/__init__.py +14 -0
- mannf/core/anomaly/enhanced_detector.py +541 -0
- mannf/core/browser/__init__.py +63 -0
- mannf/core/browser/accessibility_scanner.py +424 -0
- mannf/core/browser/discovery_model.py +178 -0
- mannf/core/browser/dom_snapshot.py +349 -0
- mannf/core/browser/ingestor_bridge.py +371 -0
- mannf/core/browser/performance_metrics.py +217 -0
- mannf/core/browser/reflection_analyzer.py +442 -0
- mannf/core/browser/scenario_generator.py +1100 -0
- mannf/core/browser/security_scenario_generator.py +695 -0
- mannf/core/browser/visual_comparer.py +159 -0
- mannf/core/diagnostics/__init__.py +28 -0
- mannf/core/diagnostics/failure_clusterer.py +211 -0
- mannf/core/diagnostics/flake_detector.py +233 -0
- mannf/core/diagnostics/root_cause_analyzer.py +273 -0
- mannf/core/distributed/__init__.py +16 -0
- mannf/core/distributed/endpoint.py +139 -0
- mannf/core/distributed/system_under_test.py +207 -0
- mannf/core/functional_orchestrator.py +428 -0
- mannf/core/messaging/__init__.py +11 -0
- mannf/core/messaging/bus.py +113 -0
- mannf/core/messaging/messages.py +89 -0
- mannf/core/nat_orchestrator.py +342 -0
- mannf/core/neural/__init__.py +183 -0
- mannf/core/orchestrator.py +272 -0
- mannf/core/prioritization/__init__.py +17 -0
- mannf/core/prioritization/adaptive_controller.py +509 -0
- mannf/core/prioritization/belief_prioritizer.py +231 -0
- mannf/core/prioritization/risk_scorer.py +430 -0
- mannf/core/reporting/__init__.py +12 -0
- mannf/core/reporting/unified_report.py +664 -0
- mannf/core/testing/__init__.py +17 -0
- mannf/core/testing/adaptive_controller.py +149 -0
- mannf/core/testing/models.py +179 -0
- mannf/core/validation/__init__.py +10 -0
- mannf/core/validation/self_validation_runner.py +180 -0
- mannf/dashboard/__init__.py +7 -0
- mannf/dashboard/app.py +9 -0
- mannf/dashboard/models.py +9 -0
- mannf/dashboard/static/index.html +2538 -0
- mannf/dashboard/telemetry.py +9 -0
- mannf/distributed/__init__.py +7 -0
- mannf/distributed/endpoint.py +9 -0
- mannf/distributed/system_under_test.py +9 -0
- mannf/healing/__init__.py +7 -0
- mannf/healing/graphql_schema_diff.py +9 -0
- mannf/healing/healer.py +9 -0
- mannf/healing/models.py +9 -0
- mannf/healing/schema_diff.py +9 -0
- mannf/integrations/__init__.py +7 -0
- mannf/integrations/auth.py +9 -0
- mannf/integrations/graphql_parser.py +9 -0
- mannf/integrations/graphql_sut.py +9 -0
- mannf/integrations/http_sut.py +9 -0
- mannf/integrations/openapi_parser.py +9 -0
- mannf/integrations/postman_parser.py +9 -0
- mannf/llm/__init__.py +7 -0
- mannf/llm/anthropic_provider.py +9 -0
- mannf/llm/base.py +9 -0
- mannf/llm/config.py +9 -0
- mannf/llm/factory.py +9 -0
- mannf/llm/openai_provider.py +9 -0
- mannf/llm/prompts.py +9 -0
- mannf/messaging/__init__.py +7 -0
- mannf/messaging/bus.py +9 -0
- mannf/messaging/messages.py +9 -0
- mannf/nat_orchestrator.py +9 -0
- mannf/neural/__init__.py +7 -0
- mannf/orchestrator.py +9 -0
- mannf/prioritization/__init__.py +7 -0
- mannf/prioritization/adaptive_controller.py +9 -0
- mannf/prioritization/belief_prioritizer.py +9 -0
- mannf/prioritization/risk_scorer.py +9 -0
- mannf/product/__init__.py +29 -0
- mannf/product/admin/__init__.py +3 -0
- mannf/product/admin/routes.py +514 -0
- mannf/product/auth/__init__.py +5 -0
- mannf/product/auth/saml.py +212 -0
- mannf/product/billing/__init__.py +5 -0
- mannf/product/billing/audit.py +160 -0
- mannf/product/billing/feature_gates.py +180 -0
- mannf/product/billing/metering.py +179 -0
- mannf/product/billing/notifications.py +181 -0
- mannf/product/billing/plans.py +133 -0
- mannf/product/billing/rate_limits.py +35 -0
- mannf/product/billing/stripe_billing.py +906 -0
- mannf/product/billing/tenant_auth.py +233 -0
- mannf/product/billing/tenant_manager.py +873 -0
- mannf/product/cli.py +3900 -0
- mannf/product/cli_admin.py +408 -0
- mannf/product/dashboard/__init__.py +61 -0
- mannf/product/dashboard/app.py +3567 -0
- mannf/product/dashboard/models.py +460 -0
- mannf/product/dashboard/static/index.html +6347 -0
- mannf/product/dashboard/static/manifest.json +25 -0
- mannf/product/dashboard/static/pwa-icon-192.png +0 -0
- mannf/product/dashboard/static/pwa-icon-512.png +0 -0
- mannf/product/dashboard/static/sw.js +64 -0
- mannf/product/dashboard/telemetry.py +547 -0
- mannf/product/database.py +145 -0
- mannf/product/demo.py +844 -0
- mannf/product/doctor.py +509 -0
- mannf/product/exporters/__init__.py +65 -0
- mannf/product/exporters/azuredevops_exporter.py +257 -0
- mannf/product/exporters/base.py +307 -0
- mannf/product/exporters/bugzilla_exporter.py +200 -0
- mannf/product/exporters/dedup.py +275 -0
- mannf/product/exporters/finding_adapter.py +216 -0
- mannf/product/exporters/github_exporter.py +197 -0
- mannf/product/exporters/gitlab_exporter.py +215 -0
- mannf/product/exporters/jira_exporter.py +180 -0
- mannf/product/exporters/linear_exporter.py +195 -0
- mannf/product/exporters/loader.py +233 -0
- mannf/product/exporters/pagerduty_exporter.py +363 -0
- mannf/product/exporters/sentry_exporter.py +322 -0
- mannf/product/exporters/servicenow_exporter.py +240 -0
- mannf/product/exporters/shortcut_exporter.py +231 -0
- mannf/product/exporters/webhook_exporter.py +383 -0
- mannf/product/formatters/__init__.py +18 -0
- mannf/product/formatters/allure_formatter.py +161 -0
- mannf/product/formatters/ctrf_formatter.py +149 -0
- mannf/product/healing/__init__.py +30 -0
- mannf/product/healing/graphql_schema_diff.py +152 -0
- mannf/product/healing/healer.py +141 -0
- mannf/product/healing/models.py +175 -0
- mannf/product/healing/schema_diff.py +251 -0
- mannf/product/ingestors/__init__.py +77 -0
- mannf/product/ingestors/base.py +256 -0
- mannf/product/ingestors/bgstm_ingestor.py +764 -0
- mannf/product/ingestors/curl_ingestor.py +1019 -0
- mannf/product/ingestors/cypress_ingestor.py +487 -0
- mannf/product/ingestors/gherkin_ingestor.py +967 -0
- mannf/product/ingestors/graphql_ingestor.py +845 -0
- mannf/product/ingestors/grpc_ingestor.py +591 -0
- mannf/product/ingestors/har_ingestor.py +976 -0
- mannf/product/ingestors/loader.py +284 -0
- mannf/product/ingestors/models.py +146 -0
- mannf/product/ingestors/openapi_ingestor.py +606 -0
- mannf/product/ingestors/playwright_ingestor.py +449 -0
- mannf/product/ingestors/postman_ingestor.py +631 -0
- mannf/product/ingestors/traffic_ingestor.py +679 -0
- mannf/product/ingestors/websocket_ingestor.py +526 -0
- mannf/product/integrations/__init__.py +21 -0
- mannf/product/integrations/auth.py +190 -0
- mannf/product/integrations/graphql_parser.py +436 -0
- mannf/product/integrations/graphql_sut.py +247 -0
- mannf/product/integrations/grpc_sut.py +469 -0
- mannf/product/integrations/http_sut.py +237 -0
- mannf/product/integrations/kafka_adapter.py +342 -0
- mannf/product/integrations/openapi_parser.py +513 -0
- mannf/product/integrations/postman_parser.py +467 -0
- mannf/product/integrations/webhook_receiver.py +344 -0
- mannf/product/integrations/websocket_sut.py +434 -0
- mannf/product/llm/__init__.py +25 -0
- mannf/product/llm/anthropic_provider.py +94 -0
- mannf/product/llm/base.py +267 -0
- mannf/product/llm/config.py +48 -0
- mannf/product/llm/factory.py +42 -0
- mannf/product/llm/openai_provider.py +93 -0
- mannf/product/llm/prompts.py +403 -0
- mannf/product/llm/root_cause_service.py +311 -0
- mannf/product/llm/test_plan_models.py +78 -0
- mannf/product/metrics.py +149 -0
- mannf/product/middleware/__init__.py +3 -0
- mannf/product/middleware/audit_middleware.py +112 -0
- mannf/product/middleware/tenant_isolation.py +114 -0
- mannf/product/models.py +347 -0
- mannf/product/notifications/__init__.py +24 -0
- mannf/product/notifications/dispatcher.py +411 -0
- mannf/product/onboarding.py +190 -0
- mannf/product/orchestration/__init__.py +39 -0
- mannf/product/orchestration/ingest_scan_orchestrator.py +339 -0
- mannf/product/orchestration/pipeline.py +401 -0
- mannf/product/orchestrator.py +987 -0
- mannf/product/orchestrator_models.py +269 -0
- mannf/product/regression/__init__.py +36 -0
- mannf/product/regression/differ.py +172 -0
- mannf/product/regression/masking.py +100 -0
- mannf/product/regression/models.py +232 -0
- mannf/product/regression/recorder.py +124 -0
- mannf/product/regression/replayer.py +168 -0
- mannf/product/reports/__init__.py +10 -0
- mannf/product/reports/pdf.py +132 -0
- mannf/product/scheduling/__init__.py +57 -0
- mannf/product/scheduling/cron_utils.py +251 -0
- mannf/product/scheduling/engine.py +473 -0
- mannf/product/scheduling/models.py +86 -0
- mannf/product/scheduling/queue.py +894 -0
- mannf/product/scheduling/store.py +235 -0
- mannf/product/security/__init__.py +21 -0
- mannf/product/security/belief_guided.py +143 -0
- mannf/product/security/checks/__init__.py +55 -0
- mannf/product/security/checks/base.py +69 -0
- mannf/product/security/checks/bfla.py +77 -0
- mannf/product/security/checks/bola.py +77 -0
- mannf/product/security/checks/bopla.py +80 -0
- mannf/product/security/checks/broken_auth.py +86 -0
- mannf/product/security/checks/graphql_security.py +299 -0
- mannf/product/security/checks/inventory.py +70 -0
- mannf/product/security/checks/misconfig.py +158 -0
- mannf/product/security/checks/resource_consumption.py +70 -0
- mannf/product/security/checks/sensitive_flows.py +80 -0
- mannf/product/security/checks/ssrf.py +101 -0
- mannf/product/security/checks/unsafe_consumption.py +120 -0
- mannf/product/security/models.py +92 -0
- mannf/product/security/plugin_loader.py +182 -0
- mannf/product/security/reporter.py +92 -0
- mannf/product/security/scanner.py +183 -0
- mannf/product/server.py +6220 -0
- mannf/product/setup_wizard.py +873 -0
- mannf/product/status.py +404 -0
- mannf/product/storage/__init__.py +10 -0
- mannf/product/storage/artifact_store.py +343 -0
- mannf/product/telemetry.py +300 -0
- mannf/product/uninstall.py +169 -0
- mannf/product/upgrade.py +139 -0
- mannf/product/weights/__init__.py +13 -0
- mannf/product/weights/blob_store.py +299 -0
- mannf/product/weights/factory.py +42 -0
- mannf/product/weights/registry.py +159 -0
- mannf/product/weights/store.py +210 -0
- mannf/regression/__init__.py +7 -0
- mannf/regression/differ.py +9 -0
- mannf/regression/masking.py +9 -0
- mannf/regression/models.py +9 -0
- mannf/regression/recorder.py +9 -0
- mannf/regression/replayer.py +9 -0
- mannf/security/__init__.py +7 -0
- mannf/security/belief_guided.py +9 -0
- mannf/security/checks/__init__.py +7 -0
- mannf/security/checks/base.py +9 -0
- mannf/security/checks/bfla.py +9 -0
- mannf/security/checks/bola.py +9 -0
- mannf/security/checks/bopla.py +9 -0
- mannf/security/checks/broken_auth.py +9 -0
- mannf/security/checks/graphql_security.py +9 -0
- mannf/security/checks/inventory.py +9 -0
- mannf/security/checks/misconfig.py +9 -0
- mannf/security/checks/resource_consumption.py +9 -0
- mannf/security/checks/sensitive_flows.py +9 -0
- mannf/security/checks/ssrf.py +9 -0
- mannf/security/checks/unsafe_consumption.py +9 -0
- mannf/security/models.py +9 -0
- mannf/security/reporter.py +9 -0
- mannf/security/scanner.py +9 -0
- mannf/server.py +9 -0
- mannf/testing/__init__.py +7 -0
- mannf/testing/adaptive_controller.py +9 -0
- mannf/testing/models.py +9 -0
- mannf/weights/__init__.py +7 -0
- mannf/weights/registry.py +9 -0
- mannf/weights/store.py +9 -0
- nat_engine-1.dist-info/METADATA +555 -0
- nat_engine-1.dist-info/RECORD +299 -0
- nat_engine-1.dist-info/WHEEL +5 -0
- nat_engine-1.dist-info/entry_points.txt +4 -0
- nat_engine-1.dist-info/licenses/LICENSE +651 -0
- nat_engine-1.dist-info/licenses/NOTICE +178 -0
- nat_engine-1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Copyright (C) 2026 Brad Guider
|
|
2
|
+
# This file is part of NAT (Neural Agent Testing Framework).
|
|
3
|
+
# Licensed under the AGPL-3.0. See LICENSE for details.
|
|
4
|
+
# Commercial licensing available — see COMMERCIAL_LICENSE.md.
|
|
5
|
+
|
|
6
|
+
# Backward-compatible shim — source of truth has moved to mannf.product.weights
|
|
7
|
+
from mannf.product.weights import * # noqa: F401, F403
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Copyright (C) 2026 Brad Guider
|
|
2
|
+
# This file is part of NAT (Neural Agent Testing Framework).
|
|
3
|
+
# Licensed under the AGPL-3.0. See LICENSE for details.
|
|
4
|
+
# Commercial licensing available — see COMMERCIAL_LICENSE.md.
|
|
5
|
+
|
|
6
|
+
# Backward-compatible shim — source of truth has moved to mannf.product.weights.registry
|
|
7
|
+
import sys
|
|
8
|
+
import mannf.product.weights.registry as _real
|
|
9
|
+
sys.modules[__name__] = _real
|
mannf/weights/store.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Copyright (C) 2026 Brad Guider
|
|
2
|
+
# This file is part of NAT (Neural Agent Testing Framework).
|
|
3
|
+
# Licensed under the AGPL-3.0. See LICENSE for details.
|
|
4
|
+
# Commercial licensing available — see COMMERCIAL_LICENSE.md.
|
|
5
|
+
|
|
6
|
+
# Backward-compatible shim — source of truth has moved to mannf.product.weights.store
|
|
7
|
+
import sys
|
|
8
|
+
import mannf.product.weights.store as _real
|
|
9
|
+
sys.modules[__name__] = _real
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nat-engine
|
|
3
|
+
Version: 1
|
|
4
|
+
Summary: NeuroAgentTest (NAT) — AI-powered API testing with multi-agent neural networks, OWASP security scanning, and adaptive test allocation
|
|
5
|
+
Author-email: NAT Contributors <licensing@nat-testing.io>
|
|
6
|
+
License: AGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/bg-playground/MultiAgent-Neural-Network-Framework
|
|
8
|
+
Project-URL: Documentation, https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/tree/main/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/bg-playground/MultiAgent-Neural-Network-Framework
|
|
10
|
+
Project-URL: Issues, https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: api-testing,security-scanning,owasp,neural-network,multi-agent,bdi,testing,quality-assurance,openapi,graphql
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Testing
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
26
|
+
Classifier: Typing :: Typed
|
|
27
|
+
Requires-Python: >=3.10
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
License-File: NOTICE
|
|
31
|
+
Requires-Dist: numpy>=1.24
|
|
32
|
+
Requires-Dist: httpx>=0.27
|
|
33
|
+
Requires-Dist: pyyaml>=6.0
|
|
34
|
+
Requires-Dist: fastapi>=0.115
|
|
35
|
+
Requires-Dist: uvicorn[standard]>=0.34
|
|
36
|
+
Requires-Dist: python-multipart>=0.0.18
|
|
37
|
+
Requires-Dist: opentelemetry-api>=1.20
|
|
38
|
+
Requires-Dist: azure-monitor-opentelemetry>=1.6
|
|
39
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0
|
|
40
|
+
Requires-Dist: asyncpg>=0.29
|
|
41
|
+
Requires-Dist: alembic>=1.13
|
|
42
|
+
Requires-Dist: defusedxml>=0.7
|
|
43
|
+
Provides-Extra: dev
|
|
44
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
45
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
|
|
46
|
+
Requires-Dist: pytest-playwright>=0.4.0; extra == "dev"
|
|
47
|
+
Requires-Dist: pytest-timeout>=2.1; extra == "dev"
|
|
48
|
+
Requires-Dist: respx>=0.22; extra == "dev"
|
|
49
|
+
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
50
|
+
Requires-Dist: stripe>=8.0; extra == "dev"
|
|
51
|
+
Requires-Dist: Pillow>=11.0; extra == "dev"
|
|
52
|
+
Requires-Dist: strawberry-graphql[fastapi]>=0.220; extra == "dev"
|
|
53
|
+
Requires-Dist: PyJWT>=2.8; extra == "dev"
|
|
54
|
+
Requires-Dist: slowapi>=0.1.9; extra == "dev"
|
|
55
|
+
Requires-Dist: jinja2>=3.1; extra == "dev"
|
|
56
|
+
Provides-Extra: billing
|
|
57
|
+
Requires-Dist: stripe>=8.0; extra == "billing"
|
|
58
|
+
Provides-Extra: azure-storage
|
|
59
|
+
Requires-Dist: azure-storage-blob>=12.19; extra == "azure-storage"
|
|
60
|
+
Provides-Extra: observability
|
|
61
|
+
Requires-Dist: psutil>=5.9; extra == "observability"
|
|
62
|
+
Provides-Extra: browser
|
|
63
|
+
Requires-Dist: playwright>=1.40.0; extra == "browser"
|
|
64
|
+
Requires-Dist: Pillow>=11.0; extra == "browser"
|
|
65
|
+
Provides-Extra: grpc
|
|
66
|
+
Requires-Dist: grpcio-tools>=1.60; extra == "grpc"
|
|
67
|
+
Dynamic: license-file
|
|
68
|
+
|
|
69
|
+
# NeuroAgentTest (NAT)
|
|
70
|
+
|
|
71
|
+
> **AI-powered API testing that learns, adapts, and finds the vulnerabilities your static tools miss.**
|
|
72
|
+
|
|
73
|
+
[](https://pypi.org/project/nat-engine/)
|
|
74
|
+
[](https://pypi.org/project/nat-engine/)
|
|
75
|
+
[](https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/actions/workflows/e2e-regression.yml)
|
|
76
|
+
[](https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/blob/main/LICENSE)
|
|
77
|
+
[](https://github.com/bg-playground/MultiAgent-Neural-Network-Framework/pkgs/container/nat-engine)
|
|
78
|
+
|
|
79
|
+
NAT is an open-source, **multi-agent neural network framework** for automated API testing and security scanning. Powered by BDI (Belief-Desire-Intention) agents and the Extended Contract Net Protocol (ECNP), NAT continuously learns from test results to focus coverage where risk is highest — so your team ships faster with fewer surprises.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 🎯 Demo Mode
|
|
84
|
+
|
|
85
|
+
See NAT in action with a single command:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
nat demo
|
|
89
|
+
# or with Docker:
|
|
90
|
+
docker run -p 8080:8080 ghcr.io/bg-playground/nat-engine:demo
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The dashboard opens automatically with live agent activity, risk heatmaps, security findings, and more. Works offline — perfect for sales demos and conferences.
|
|
94
|
+
|
|
95
|
+
👉 [Full demo guide](docs/guides/demo-mode.md)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 📸 Dashboard Preview
|
|
100
|
+
|
|
101
|
+
NAT's web dashboard gives you full visibility into scan results, agent activity, and security findings.
|
|
102
|
+
|
|
103
|
+
### Risk Overview & Anomaly Detection
|
|
104
|
+

|
|
105
|
+
> The Overview tab shows total scans, endpoints discovered, pass/fail rates, health score, and a real-time anomaly feed — all at a glance.
|
|
106
|
+
|
|
107
|
+
### Multi-Agent Activity
|
|
108
|
+

|
|
109
|
+
> Watch BDI agents (Planner, Executor, Analyzer, Coordinator) reason about uncertainty and update their beliefs as they learn from each test result.
|
|
110
|
+
|
|
111
|
+
### OWASP Security Findings
|
|
112
|
+

|
|
113
|
+
> Automated OWASP API Security Top 10 checks with severity breakdown, confidence scores, and actionable remediation guidance.
|
|
114
|
+
|
|
115
|
+
### Security Finding Detail
|
|
116
|
+

|
|
117
|
+
> Drill into any finding to see evidence, CWE mapping, and specific remediation steps.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 30-Second Quickstart
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 1. Install
|
|
125
|
+
pip install nat-engine
|
|
126
|
+
|
|
127
|
+
# 2. Scan an API
|
|
128
|
+
nat scan \
|
|
129
|
+
--spec examples/petstore-openapi.yaml \
|
|
130
|
+
--base-url https://petstore3.swagger.io/api/v3
|
|
131
|
+
|
|
132
|
+
# 3. Security audit
|
|
133
|
+
nat security-scan \
|
|
134
|
+
--spec examples/petstore-openapi.yaml \
|
|
135
|
+
--base-url https://petstore3.swagger.io/api/v3
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
That's it — NAT parses your OpenAPI spec, distributes test tasks across its agent network, scores risk, and reports findings. Full docs at [`docs/`](docs/README.md).
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Feature Highlights
|
|
143
|
+
|
|
144
|
+
| Feature | Description |
|
|
145
|
+
|---|---|
|
|
146
|
+
| 🤖 **BDI Multi-Agent Engine** | PlannerAgent, ExecutorAgent, AnalyzerAgent, and CoordinatorAgent collaborate via ECNP to maximize coverage |
|
|
147
|
+
| 📐 **REST + GraphQL + gRPC Testing** | OpenAPI/Swagger, GraphQL introspection, and `.proto`-based gRPC scanning (unary, streaming, bidi) — no "coming soon" |
|
|
148
|
+
| 🔒 **OWASP API Top 10** | 10 automated security checks (BOLA, Broken Auth, Mass Assignment, SSRF, and more) + 5 GraphQL-specific checks |
|
|
149
|
+
| 🧠 **Belief-Driven Prioritization** | Neural networks predict which endpoints are highest risk and allocate test budget accordingly |
|
|
150
|
+
| 📊 **Risk Scoring + Anomaly Detection** | Continuous scoring with latency spike, status-shift, and error-rate anomaly alerts |
|
|
151
|
+
| 🎯 **Confidence Calibration** | Per-finding confidence scores with calibration tuning and statistical confidence intervals |
|
|
152
|
+
| 🔑 **Flexible Auth** | No auth, API key, Bearer token, OAuth 2.0 (client credentials & password grant), SSO (OIDC/SAML) |
|
|
153
|
+
| 🏢 **RBAC & Multi-Tenant** | Role-based access control (admin/operator/viewer), SSO, tenant isolation, and audit logging |
|
|
154
|
+
| 👷 **Worker Pools** | Parallel distributed test execution via `nat worker launch` — scale across multiple agents |
|
|
155
|
+
| 📤 **11 Exporters** | Push findings to Jira, Linear, GitHub Issues, GitLab, Azure DevOps, Shortcut, ServiceNow, PagerDuty, Webhook, Sentry, and Bugzilla |
|
|
156
|
+
| 🕐 **Scheduled Scans** | Cron-based recurring scan schedules — backend implemented, API surface in Phase 9.4 |
|
|
157
|
+
| 🌐 **Functional Testing** | Browser-based E2E test execution with DOM snapshots, screenshots, and interaction traces via Playwright |
|
|
158
|
+
| 🖼️ **Visual Regression** | Pixel-diff analysis against stored baselines — catch unexpected UI changes automatically |
|
|
159
|
+
| ♿ **Accessibility Scanning** | WCAG 2.1 compliance checks integrated into every browser-based scan |
|
|
160
|
+
| ⚡ **Performance Testing** | Core Web Vitals measurement: LCP, FCP, TTI, CLS, TBT — every scan, every page |
|
|
161
|
+
| 🐳 **Docker-Ready** | One-command server deployment; shared across the team |
|
|
162
|
+
| ⚙️ **CI/CD Integration** | Native GitHub Actions support, Allure/CTRF export, PR annotations, and quality gates |
|
|
163
|
+
| 🧙 **Setup Wizard** | `nat setup` interactive onboarding wizard and `nat doctor` pre-flight environment validation |
|
|
164
|
+
| 🎬 **Demo Mode** | `nat demo` and `scripts/demo_orangehrm.py` for a live OrangeHRM E2E demo — no setup required |
|
|
165
|
+
| 📈 **Web Dashboard** | Live risk heatmaps, belief visualization, anomaly timeline, and go-live status |
|
|
166
|
+
| 🖥️ **REST API Server** | FastAPI server exposes all NAT capabilities as HTTP endpoints with RBAC and audit trail |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Comparison vs. Competitors
|
|
171
|
+
|
|
172
|
+
| Capability | NAT | Postman | SoapUI | Burp Suite |
|
|
173
|
+
|---|---|---|---|---|
|
|
174
|
+
| OpenAPI spec scanning | ✅ | ✅ | ✅ | ⚠️ limited |
|
|
175
|
+
| GraphQL support | ✅ | ✅ | ❌ | ⚠️ limited |
|
|
176
|
+
| gRPC support | ✅ | ❌ | ❌ | ❌ |
|
|
177
|
+
| OWASP API Top 10 | ✅ | ❌ | ⚠️ | ✅ |
|
|
178
|
+
| Adaptive AI prioritization | ✅ | ❌ | ❌ | ❌ |
|
|
179
|
+
| Risk scoring + anomaly detection | ✅ | ❌ | ❌ | ❌ |
|
|
180
|
+
| Confidence calibration | ✅ | ❌ | ❌ | ❌ |
|
|
181
|
+
| Browser functional testing | ✅ | ❌ | ❌ | ❌ |
|
|
182
|
+
| Visual regression testing | ✅ | ❌ | ❌ | ❌ |
|
|
183
|
+
| Accessibility scanning (WCAG) | ✅ | ❌ | ❌ | ❌ |
|
|
184
|
+
| Performance testing (Web Vitals) | ✅ | ❌ | ❌ | ❌ |
|
|
185
|
+
| Worker pools (parallel execution) | ✅ | ❌ | ❌ | ❌ |
|
|
186
|
+
| 11 issue-tracker exporters | ✅ | ❌ | ❌ | ⚠️ limited |
|
|
187
|
+
| Scheduled / recurring scans | ✅ | ✅ | ❌ | ❌ |
|
|
188
|
+
| RBAC + multi-tenant + SSO | ✅ | ✅ | ❌ | ❌ |
|
|
189
|
+
| OAuth 2.0 auth | ✅ | ✅ | ✅ | ✅ |
|
|
190
|
+
| CI/CD GitHub Action + quality gates | ✅ | ✅ | ❌ | ❌ |
|
|
191
|
+
| Allure / CTRF report export | ✅ | ❌ | ❌ | ❌ |
|
|
192
|
+
| Docker deployment | ✅ | ❌ | ⚠️ | ❌ |
|
|
193
|
+
| Open source (AGPL) | ✅ | ❌ | ✅ | ❌ |
|
|
194
|
+
| Programmatic Python API | ✅ | ❌ | ❌ | ❌ |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Installation
|
|
199
|
+
|
|
200
|
+
**pip (recommended):**
|
|
201
|
+
```bash
|
|
202
|
+
pip install nat-engine
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**With optional extras:**
|
|
206
|
+
```bash
|
|
207
|
+
# Browser functional testing + visual regression + accessibility + performance
|
|
208
|
+
pip install "nat-engine[browser]"
|
|
209
|
+
|
|
210
|
+
# gRPC scanning support
|
|
211
|
+
pip install "nat-engine[grpc]"
|
|
212
|
+
|
|
213
|
+
# All optional extras
|
|
214
|
+
pip install "nat-engine[browser,grpc,billing,observability]"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Docker:**
|
|
218
|
+
```bash
|
|
219
|
+
docker run -p 8080:8080 ghcr.io/bg-playground/nat-engine:latest
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**From source:**
|
|
223
|
+
```bash
|
|
224
|
+
git clone https://github.com/bg-playground/MultiAgent-Neural-Network-Framework.git
|
|
225
|
+
cd MultiAgent-Neural-Network-Framework
|
|
226
|
+
pip install -e ".[dev]"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
See [`docs/getting-started/installation.md`](docs/getting-started/installation.md) for full details.
|
|
230
|
+
|
|
231
|
+
### Configuration
|
|
232
|
+
|
|
233
|
+
Copy the example environment file and customize it:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
cp .env.example .env
|
|
237
|
+
# Edit .env with your settings
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
See [`.env.example`](.env.example) for all available configuration options, including database, authentication, rate limiting, webhooks, LLM integration, and exporter settings.
|
|
241
|
+
|
|
242
|
+
> **Note:** If `DATABASE_URL` is not set, NAT runs in in-memory mode and all scan data is lost on restart. Set `DATABASE_URL` to a PostgreSQL connection string for persistent storage.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Usage Examples
|
|
247
|
+
|
|
248
|
+
### REST API scan
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
nat scan \
|
|
252
|
+
--spec openapi.yaml \
|
|
253
|
+
--base-url https://api.example.com \
|
|
254
|
+
--auth-token $API_TOKEN \
|
|
255
|
+
--output json
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### GraphQL scan
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
nat scan \
|
|
262
|
+
--type graphql \
|
|
263
|
+
--base-url https://api.example.com/graphql \
|
|
264
|
+
--graphql-introspection
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### OWASP security audit
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
nat security-scan \
|
|
271
|
+
--spec openapi.yaml \
|
|
272
|
+
--base-url https://api.example.com \
|
|
273
|
+
--severity-threshold high \
|
|
274
|
+
--output markdown
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### OAuth 2.0 authenticated scan
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
nat scan \
|
|
281
|
+
--spec openapi.yaml \
|
|
282
|
+
--base-url https://api.example.com \
|
|
283
|
+
--oauth2-token-url https://auth.example.com/oauth/token \
|
|
284
|
+
--oauth2-client-id $CLIENT_ID \
|
|
285
|
+
--oauth2-client-secret $CLIENT_SECRET
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### GitHub Actions integration
|
|
289
|
+
|
|
290
|
+
```yaml
|
|
291
|
+
- uses: bg-playground/MultiAgent-Neural-Network-Framework@main
|
|
292
|
+
with:
|
|
293
|
+
spec: openapi.yaml
|
|
294
|
+
base-url: https://staging.example.com
|
|
295
|
+
security-scan: 'true'
|
|
296
|
+
fail-on-severity: high
|
|
297
|
+
output: allure # also supports: ctrf, junit, html, json
|
|
298
|
+
fail-if: "critical > 0 OR risk_score > 0.8" # quality gate expression
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### gRPC scan
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
nat scan \
|
|
305
|
+
--proto services/auth.proto \
|
|
306
|
+
--grpc-endpoint grpc://localhost:50051 \
|
|
307
|
+
--output json
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Worker pool (parallel distributed execution)
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
# Launch a worker pool of 4 agents
|
|
314
|
+
nat worker launch --concurrency 4
|
|
315
|
+
|
|
316
|
+
# Check pool status
|
|
317
|
+
nat worker status
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Export findings to an issue tracker
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# List available exporters
|
|
324
|
+
nat export list
|
|
325
|
+
|
|
326
|
+
# Push findings to Jira
|
|
327
|
+
nat security-scan \
|
|
328
|
+
--spec openapi.yaml \
|
|
329
|
+
--base-url https://api.example.com \
|
|
330
|
+
--export jira \
|
|
331
|
+
--export-config jira_url=https://myco.atlassian.net \
|
|
332
|
+
--export-config jira_project_key=SEC
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Setup wizard and environment validation
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Interactive first-time setup
|
|
339
|
+
nat setup
|
|
340
|
+
|
|
341
|
+
# Validate your environment before a scan
|
|
342
|
+
nat doctor
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Programmatic Python API
|
|
346
|
+
|
|
347
|
+
```python
|
|
348
|
+
import asyncio
|
|
349
|
+
from mannf.integrations.http_sut import HttpApiSUT
|
|
350
|
+
from mannf.integrations.openapi_parser import OpenApiParser
|
|
351
|
+
from mannf.integrations.auth import BearerTokenAuth
|
|
352
|
+
from mannf.testing.models import TestSuite
|
|
353
|
+
|
|
354
|
+
async def main():
|
|
355
|
+
auth = BearerTokenAuth("my-token")
|
|
356
|
+
sut = HttpApiSUT(base_url="https://api.example.com", auth=auth)
|
|
357
|
+
parser = OpenApiParser(spec_path="openapi.yaml", base_url="https://api.example.com",
|
|
358
|
+
registry=sut.registry)
|
|
359
|
+
test_cases = parser.parse()
|
|
360
|
+
|
|
361
|
+
suite = TestSuite(name="My API")
|
|
362
|
+
for tc in test_cases:
|
|
363
|
+
suite.add_case(tc)
|
|
364
|
+
result = await sut.execute(tc)
|
|
365
|
+
suite.record_result(result)
|
|
366
|
+
|
|
367
|
+
s = suite.summary()
|
|
368
|
+
print(f"Passed: {s['passed']}/{s['total']} ({s['pass_rate']*100:.1f}%)")
|
|
369
|
+
|
|
370
|
+
asyncio.run(main())
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Architecture
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
379
|
+
│ NATOrchestrator │
|
|
380
|
+
│ │
|
|
381
|
+
│ ┌───────────────┐ TASK_ANNOUNCEMENT ┌──────────────────────┐│
|
|
382
|
+
│ │ PlannerAgent │────────────────────▶│ CoordinatorAgent ││
|
|
383
|
+
│ │ │ │ ││
|
|
384
|
+
│ │ Predictor NN │◀── CONTRACT_RESULT ─│ ECNP bid collection ││
|
|
385
|
+
│ │ BeliefState │ │ + award logic ││
|
|
386
|
+
│ └───────────────┘ └──────────┬───────────┘│
|
|
387
|
+
│ │ │
|
|
388
|
+
│ CONTRACT_AWARD │ │
|
|
389
|
+
│ ▼ │
|
|
390
|
+
│ ┌─────────────────────┐ │
|
|
391
|
+
│ │ ExecutorAgent (×N) │ │
|
|
392
|
+
│ │ │ │
|
|
393
|
+
│ │ Oracle NN + BDI │ │
|
|
394
|
+
│ │ Bids on tasks │ │
|
|
395
|
+
│ └──────────┬──────────┘ │
|
|
396
|
+
│ │ │
|
|
397
|
+
│ TEST_RESULT / │ │
|
|
398
|
+
│ CONTRACT_RESULT │ │
|
|
399
|
+
│ ▼ │
|
|
400
|
+
│ ┌───────────────┐◀─ BELIEF_UPDATE ── ┌─────────────────────┐ │
|
|
401
|
+
│ │ PlannerAgent │ │ AnalyzerAgent (×M) │ │
|
|
402
|
+
│ │ (belief sync) │ │ │ │
|
|
403
|
+
│ └───────────────┘ │ Autoencoder NN │ │
|
|
404
|
+
│ │ Anomaly detection │ │
|
|
405
|
+
│ │ BeliefState update │ │
|
|
406
|
+
│ └─────────────────────┘ │
|
|
407
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
408
|
+
│ async pub/sub Message Bus │
|
|
409
|
+
▼ ▼
|
|
410
|
+
┌──────────────────┐ ┌──────────────────────────┐ ┌──────────────────┐
|
|
411
|
+
│ HttpApiSUT │ │ GraphQLSUT │ │ GrpcSUT │
|
|
412
|
+
│ (REST / OpenAPI)│ │ (GraphQL / introspect) │ │ (.proto / gRPC) │
|
|
413
|
+
└──────────────────┘ └──────────────────────────┘ └──────────────────┘
|
|
414
|
+
│
|
|
415
|
+
▼
|
|
416
|
+
┌───────────────────────────────────┐ ┌──────────────────────────────────┐
|
|
417
|
+
│ SecurityScanner │ │ FunctionalTestOrchestrator │
|
|
418
|
+
│ OWASP API1–API10 + GRAPHQL 1–5 │ │ Visual Regression + A11y + Perf │
|
|
419
|
+
└───────────────────────────────────┘ └──────────────────────────────────┘
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Documentation
|
|
425
|
+
|
|
426
|
+
The full documentation lives in [`docs/`](docs/README.md):
|
|
427
|
+
|
|
428
|
+
| Section | Contents |
|
|
429
|
+
|---|---|
|
|
430
|
+
| [Getting Started](docs/getting-started/quickstart.md) | Install and first scan |
|
|
431
|
+
| [Guides](docs/guides/cli-reference.md) | CLI, REST API, Docker, CI/CD, Dashboard |
|
|
432
|
+
| [API Reference](docs/api-reference/rest-api.md) | REST endpoints, Python API, GitHub Action |
|
|
433
|
+
| [How-To](docs/how-to/run-security-audit.md) | Step-by-step task recipes |
|
|
434
|
+
| [Concepts](docs/concepts/architecture.md) | Architecture, BDI agents, neural networks |
|
|
435
|
+
| [Troubleshooting](docs/troubleshooting/common-issues.md) | Common problems and solutions |
|
|
436
|
+
| [FAQ](docs/faq.md) | Frequently asked questions |
|
|
437
|
+
| [Changelog](docs/changelog.md) | Release history |
|
|
438
|
+
| [Contributing](docs/contributing.md) | How to contribute |
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Project Structure
|
|
443
|
+
|
|
444
|
+
```
|
|
445
|
+
src/mannf/
|
|
446
|
+
├── core/
|
|
447
|
+
│ ├── agents/ # BDI agent implementations (Planner, Executor, Analyzer, Coordinator)
|
|
448
|
+
│ │ ├── worker_pool.py # WorkerPool — parallel distributed test execution
|
|
449
|
+
│ │ └── autonomous_loop_agent.py # Autonomous multi-iteration test loop
|
|
450
|
+
│ ├── anomaly/ # Enhanced anomaly detection (latency, status, payload, error rate)
|
|
451
|
+
│ ├── browser/ # Playwright-based functional testing engine
|
|
452
|
+
│ │ ├── functional_test_orchestrator.py # Visual regression, accessibility, performance
|
|
453
|
+
│ │ └── security_scenario_generator.py
|
|
454
|
+
│ ├── prioritization/ # BeliefPrioritizer, RiskScorer, confidence calibration
|
|
455
|
+
│ └── validation/ # Self-validation runner
|
|
456
|
+
├── product/
|
|
457
|
+
│ ├── cli.py # nat CLI (scan, security-scan, worker, export, setup, doctor, demo, …)
|
|
458
|
+
│ ├── server.py # FastAPI REST API server with RBAC middleware
|
|
459
|
+
│ ├── dashboard/ # Web dashboard (risk heatmaps, belief charts, go-live status)
|
|
460
|
+
│ ├── exporters/ # 11 built-in exporters
|
|
461
|
+
│ │ ├── jira_exporter.py
|
|
462
|
+
│ │ ├── linear_exporter.py
|
|
463
|
+
│ │ ├── github_exporter.py
|
|
464
|
+
│ │ ├── gitlab_exporter.py
|
|
465
|
+
│ │ ├── azuredevops_exporter.py
|
|
466
|
+
│ │ ├── shortcut_exporter.py
|
|
467
|
+
│ │ ├── servicenow_exporter.py
|
|
468
|
+
│ │ ├── pagerduty_exporter.py
|
|
469
|
+
│ │ ├── webhook_exporter.py
|
|
470
|
+
│ │ ├── sentry_exporter.py
|
|
471
|
+
│ │ └── bugzilla_exporter.py
|
|
472
|
+
│ ├── ingestors/ # OpenAPI, GraphQL, gRPC (.proto), WebSocket, traffic (HAR/mitmproxy)
|
|
473
|
+
│ ├── integrations/ # HttpApiSUT, GraphQLSUT, GrpcSUT, WebSocketSUT, auth providers
|
|
474
|
+
│ ├── scheduling/ # Cron-based scheduled scans, JobQueue (in-memory/SQLite/Redis)
|
|
475
|
+
│ ├── billing/ # Stripe integration, plan tiers, tenant manager
|
|
476
|
+
│ ├── auth/ # OIDC/SAML SSO, RBAC middleware, audit logging
|
|
477
|
+
│ ├── formatters/ # Allure, CTRF, JUnit, HTML report formatters
|
|
478
|
+
│ └── middleware/ # Tenant isolation, audit middleware
|
|
479
|
+
action/ # GitHub Action entrypoint and result parser (PR annotations, quality gates)
|
|
480
|
+
action.yml # Composite GitHub Action definition
|
|
481
|
+
scripts/
|
|
482
|
+
├── demo_orangehrm.py # Live OrangeHRM E2E demo — login, CRUD, leave, recruitment
|
|
483
|
+
└── demo.sh / demo.bat # Quick-start demo launchers
|
|
484
|
+
Dockerfile # Multi-stage production image
|
|
485
|
+
docker-compose.yml # Local development Compose file
|
|
486
|
+
examples/
|
|
487
|
+
├── petstore-openapi.yaml # Sample OpenAPI spec
|
|
488
|
+
├── graphql-schema.graphql # Sample GraphQL schema
|
|
489
|
+
├── python/ # Programmatic usage examples
|
|
490
|
+
└── workflows/ # Example GitHub Actions workflows
|
|
491
|
+
docs/ # Full documentation
|
|
492
|
+
├── guides/
|
|
493
|
+
│ ├── grpc-scanning.md # gRPC scanning guide (proto parsing, TLS, RPC types)
|
|
494
|
+
│ └── demo-mode.md # Demo mode walkthrough
|
|
495
|
+
└── demos/
|
|
496
|
+
└── orangehrm.md # OrangeHRM live demo guide
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Requirements
|
|
502
|
+
|
|
503
|
+
- Python ≥ 3.10
|
|
504
|
+
- NumPy ≥ 1.24
|
|
505
|
+
- No GPU, no PyTorch, no external ML dependencies
|
|
506
|
+
|
|
507
|
+
**Optional extras:**
|
|
508
|
+
- `[browser]` — Playwright ≥ 1.40, Pillow ≥ 11 (functional testing, visual regression, accessibility, performance)
|
|
509
|
+
- `[grpc]` — grpcio-tools ≥ 1.60 (`.proto` file parsing for gRPC scanning)
|
|
510
|
+
- `[billing]` — stripe ≥ 8.0 (usage-based billing)
|
|
511
|
+
- `[observability]` — psutil ≥ 5.9 (system metrics)
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## 🚀 Deployment
|
|
516
|
+
|
|
517
|
+
NAT runs on Azure Container Apps with automatic scaling and managed TLS.
|
|
518
|
+
|
|
519
|
+
- **Setup guide:** [`deploy/azure/README.md`](deploy/azure/README.md) — complete step-by-step instructions
|
|
520
|
+
- **One-command setup:** `cd deploy/azure && ./setup.sh` — idempotent bootstrap script
|
|
521
|
+
- **Custom domain:** `cd deploy/azure && ./custom-domain.sh` — configure `api.nat-testing.io`
|
|
522
|
+
- **CI/CD pipeline:** Push to `main` → Docker build → GHCR push → ACA deploy → health check
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Thesis Reference
|
|
527
|
+
|
|
528
|
+
> Guider, J. B. (1999). *A Multi-Agent Neural Network Framework for Adaptive
|
|
529
|
+
> Testing of Large-Scale Distributed Software Systems*. Doctoral dissertation,
|
|
530
|
+
> UCL / Florida State University Joint Programme.
|
|
531
|
+
|
|
532
|
+
Key results from the original thesis (Chapter 6, Table 6.1):
|
|
533
|
+
|
|
534
|
+
| Configuration | Coverage | Faults Found | Time |
|
|
535
|
+
|---|---|---|---|
|
|
536
|
+
| Scripted Regression | 68.4% | 71.2% | 112 min |
|
|
537
|
+
| MAS (No Learning) | 74.1% | 78.5% | 94 min |
|
|
538
|
+
| **NAT (Learning Enabled)** | **91.3%** | **93.0%** | **51 min** |
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## License
|
|
543
|
+
|
|
544
|
+
NeuroAgentTest (NAT) is dual-licensed:
|
|
545
|
+
|
|
546
|
+
- **[AGPL-3.0-or-later](LICENSE)** — for open-source projects, academic research, and personal use.
|
|
547
|
+
- **[Commercial License](COMMERCIAL_LICENSE.md)** — for proprietary products and SaaS deployments where AGPL-3.0 copyleft obligations are not acceptable.
|
|
548
|
+
|
|
549
|
+
For commercial licensing inquiries, contact **licensing@nat-testing.io**.
|
|
550
|
+
|
|
551
|
+
All contributors must agree to the [Contributor License Agreement (CLA)](CLA.md).
|
|
552
|
+
|
|
553
|
+
See [docs/faq.md](docs/faq.md#licensing--community) for licensing FAQs, including information on internal use, CI/CD pipelines, and the CLA.
|
|
554
|
+
|
|
555
|
+
A `NOTICE` file listing all third-party dependency licenses is included in the repository root ([NOTICE](NOTICE)).
|