SafeAI-Static-Analyzer 2.5.0__tar.gz → 2.6.0__tar.gz
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.
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/PKG-INFO +2 -2
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/README.md +1 -1
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/PKG-INFO +2 -2
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/SOURCES.txt +10 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/capability/analyzer.py +3 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/__init__.py +21 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/canonical.py +1603 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/compare.py +529 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/metrics.py +540 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/report.py +319 -0
- safeai_static_analyzer-2.6.0/safeai/benchmark/runner.py +344 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/cli.py +53 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/postprocess.py +23 -3
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/mappings.py +4 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/exceptions.py +28 -2
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/html.py +239 -2
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/html_kit.py +4 -1
- safeai_static_analyzer-2.6.0/safeai/report/security_brief.py +497 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/base_rules.yaml +5 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scorecard.py +1 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/version.py +1 -1
- safeai_static_analyzer-2.6.0/tests/test_authority_benchmark.py +354 -0
- safeai_static_analyzer-2.6.0/tests/test_authority_canonical.py +583 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_capability_detection.py +21 -0
- safeai_static_analyzer-2.6.0/tests/test_exceptions.py +538 -0
- safeai_static_analyzer-2.6.0/tests/test_html_report.py +257 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_workflow.py +29 -0
- safeai_static_analyzer-2.6.0/tests/test_security_brief.py +248 -0
- safeai_static_analyzer-2.5.0/tests/test_exceptions.py +0 -284
- safeai_static_analyzer-2.5.0/tests/test_html_report.py +0 -135
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/LICENSE +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/dependency_links.txt +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/entry_points.txt +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/requires.txt +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/top_level.txt +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/pyproject.toml +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/__main__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/aggregation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/capabilities.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/capability_diff.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/component_diff.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/component_graph.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/components.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/dependency_correlation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/escalation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/escalation_remediation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/iac_correlation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/import_graph.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/project_graph.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/semantic.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/target_taxonomy.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_identity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_implementation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_surface.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/capability/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/claude_code/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/claude_code/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/data_leakage/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/data_leakage/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/dataflow/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/dataflow/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/env_dependency/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/env_dependency/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/governance/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/governance/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/compatibility.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/schema.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/validators.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/model_config/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/model_config/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt_file/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt_file/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/skill/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/skill/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/tool_def/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/tool_def/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/workflow/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/workflow/analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/manifest_cli.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/registry_cli.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/catalogs.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/file_discovery.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/metadata.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/orchestrator.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/scan.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/autogen/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/azure_foundry/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/azure_foundry/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/bedrock_agent/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/bedrock_agent/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/commands.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/permissions.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/settings.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/copilot/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/copilot/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/crewai/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/crewai/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/cursorrules/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/cursorrules/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/dify/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/dify/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/google_adk/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/google_adk/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/haystack/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/haystack/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langchain/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langchain/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langgraph/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langgraph/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/llamaindex/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/llamaindex/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/mastra/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/mastra/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/microsoft_agent/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/microsoft_agent/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/n8n/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/n8n/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openai_agents/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openai_agents/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openclaw/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openclaw/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/semantic_kernel/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/semantic_kernel/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/windsurf/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/windsurf/parser.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/k8s.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/linking.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/model.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/semantics.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/terraform.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/assurance.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/baseline.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/ci_context.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/contract.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/enrich.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/exporter.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/fingerprints.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/identity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/importer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/integrity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/lockfile.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/manifest.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/policy.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/connection.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/persist.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/queries.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/schema.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/suppressions.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/util.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/failure_matrix.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/json_report.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/pr_comment.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/registry_html.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/sarif.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/terminal.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/loader.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/pack_test.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scoring/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scoring/engine.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/severity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/__init__.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/client.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/config.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/schema.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/setup.cfg +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_adapter_dataflow.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_architectural_invariants.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_architecture_diagram.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_assurance.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_authority_change.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_baseline.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_baseline_compat.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_benchmarks.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_capability_diff_v2.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_ci_context.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_claude_code_deep.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_compatibility.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_component_graph.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_component_hash.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_confidence_arbitration.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_config_adapters.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_control_mappings.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_crewai_framework.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_cursorrules_framework.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_dco.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_env_dependency.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_escalation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_escalation_remediation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_evidence_contract_v7.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_evidence_type.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_fingerprints.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_github_action.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_governance_analyzer.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_adversarial.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_benchmark.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_correlation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_k8s.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_linking.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_semantics.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_terraform.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_init_and_rules.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_kya_integration.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_kya_manifest.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_langgraph_framework.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_llamaindex_framework.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_manifest_contract.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_manifest_integrity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_mcp_tool_poisoning.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_mcp_validation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_n8n_workflow.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_parser_aggregation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_phase15.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_plugin_sdk.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_policy.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_comment.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_comment_cli.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_paths.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_quality_gates.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry_cli.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry_html.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_regression_fixtures.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_assets.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_fixes.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_validation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_rules_loader_determinism.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_sarif.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scan_framework.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scan_phase11.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scorecard.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scoring.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_semantic.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_severity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_suppressions.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_target_taxonomy_engine.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_telemetry.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_terminal_report.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_tool_identity.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_tool_implementation.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_unknown_authority.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_version.py +0 -0
- {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_windsurf_framework.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SafeAI-Static-Analyzer
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: The lightweight, open-source Static AI Capability & Risk Analyzer for CI/CD pipelines.
|
|
5
5
|
Author: IkarusCareer
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -36,7 +36,7 @@ Dynamic: license-file
|
|
|
36
36
|
[](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
|
|
37
37
|
[](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
|
|
38
38
|
[](https://safeai-analyzer.ikaruscareer.com)
|
|
39
|
-
[](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
|
|
40
40
|
[](https://www.bestpractices.dev/en/projects/14126)
|
|
41
41
|
|
|
42
42
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
|
|
4
4
|
[](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
|
|
5
5
|
[](https://safeai-analyzer.ikaruscareer.com)
|
|
6
|
-
[](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
|
|
7
7
|
[](https://www.bestpractices.dev/en/projects/14126)
|
|
8
8
|
|
|
9
9
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SafeAI-Static-Analyzer
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: The lightweight, open-source Static AI Capability & Risk Analyzer for CI/CD pipelines.
|
|
5
5
|
Author: IkarusCareer
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -36,7 +36,7 @@ Dynamic: license-file
|
|
|
36
36
|
[](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
|
|
37
37
|
[](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
|
|
38
38
|
[](https://safeai-analyzer.ikaruscareer.com)
|
|
39
|
-
[](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
|
|
40
40
|
[](https://www.bestpractices.dev/en/projects/14126)
|
|
41
41
|
|
|
42
42
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
@@ -60,6 +60,12 @@ safeai/analyzers/tool_def/__init__.py
|
|
|
60
60
|
safeai/analyzers/tool_def/analyzer.py
|
|
61
61
|
safeai/analyzers/workflow/__init__.py
|
|
62
62
|
safeai/analyzers/workflow/analyzer.py
|
|
63
|
+
safeai/benchmark/__init__.py
|
|
64
|
+
safeai/benchmark/canonical.py
|
|
65
|
+
safeai/benchmark/compare.py
|
|
66
|
+
safeai/benchmark/metrics.py
|
|
67
|
+
safeai/benchmark/report.py
|
|
68
|
+
safeai/benchmark/runner.py
|
|
63
69
|
safeai/cmd/__init__.py
|
|
64
70
|
safeai/cmd/cli.py
|
|
65
71
|
safeai/cmd/manifest_cli.py
|
|
@@ -152,6 +158,7 @@ safeai/report/json_report.py
|
|
|
152
158
|
safeai/report/pr_comment.py
|
|
153
159
|
safeai/report/registry_html.py
|
|
154
160
|
safeai/report/sarif.py
|
|
161
|
+
safeai/report/security_brief.py
|
|
155
162
|
safeai/report/terminal.py
|
|
156
163
|
safeai/rules/__init__.py
|
|
157
164
|
safeai/rules/base_rules.yaml
|
|
@@ -167,6 +174,8 @@ tests/test_adapter_dataflow.py
|
|
|
167
174
|
tests/test_architectural_invariants.py
|
|
168
175
|
tests/test_architecture_diagram.py
|
|
169
176
|
tests/test_assurance.py
|
|
177
|
+
tests/test_authority_benchmark.py
|
|
178
|
+
tests/test_authority_canonical.py
|
|
170
179
|
tests/test_authority_change.py
|
|
171
180
|
tests/test_baseline.py
|
|
172
181
|
tests/test_baseline_compat.py
|
|
@@ -233,6 +242,7 @@ tests/test_scan_framework.py
|
|
|
233
242
|
tests/test_scan_phase11.py
|
|
234
243
|
tests/test_scorecard.py
|
|
235
244
|
tests/test_scoring.py
|
|
245
|
+
tests/test_security_brief.py
|
|
236
246
|
tests/test_semantic.py
|
|
237
247
|
tests/test_severity.py
|
|
238
248
|
tests/test_suppressions.py
|
|
@@ -23,6 +23,7 @@ CAP_PATTERNS = {
|
|
|
23
23
|
"redis": re.compile(r"import redis|from redis|Redis\(|redis\.StrictRedis|redis\.Redis", re.IGNORECASE),
|
|
24
24
|
"s3": re.compile(r"import boto3|from boto3|boto3\.client.*s3|boto3\.resource.*s3|S3Client|s3\.put|s3\.get", re.IGNORECASE),
|
|
25
25
|
"slack": re.compile(r"import slack|from slack|SlackClient|slack_sdk|slack\.WebClient|slack\.SocketModeClient", re.IGNORECASE),
|
|
26
|
+
"ms_teams": re.compile(r"(?:\bimport\s+teams\b|\bfrom\s+teams\s+import\b|\bTeamsClient\b|\bteams_sdk\b|\bimport\s+pymsteams\b|\bfrom\s+pymsteams\b|\bpymsteams\.(?:connectorcard|cardsection)\b)", re.IGNORECASE),
|
|
26
27
|
"jira": re.compile(r"import jira|from jira|JIRA\(|jira\.Client|jira\.JIRA", re.IGNORECASE),
|
|
27
28
|
"browser_playwright": re.compile(r"import playwright|from playwright|Playwright", re.IGNORECASE),
|
|
28
29
|
"browser_selenium": re.compile(r"import selenium|from selenium|webdriver|WebDriver", re.IGNORECASE),
|
|
@@ -45,6 +46,7 @@ RULE_BY_CAP = {
|
|
|
45
46
|
"redis": "CAP_redis",
|
|
46
47
|
"s3": "CAP_s3",
|
|
47
48
|
"slack": "CAP_slack",
|
|
49
|
+
"ms_teams": "CAP_ms_teams",
|
|
48
50
|
"jira": "CAP_jira",
|
|
49
51
|
"browser_playwright": "CAP_browser_playwright",
|
|
50
52
|
"browser_selenium": "CAP_browser_selenium",
|
|
@@ -63,6 +65,7 @@ CATEGORY_BY_CAP = {
|
|
|
63
65
|
"redis": "Databases",
|
|
64
66
|
"s3": "Cloud",
|
|
65
67
|
"slack": "Collaboration",
|
|
68
|
+
"ms_teams": "Collaboration",
|
|
66
69
|
"jira": "Collaboration",
|
|
67
70
|
"browser_playwright": "Browser",
|
|
68
71
|
"browser_selenium": "Browser",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Authority evidence validation benchmark (v2.6).
|
|
2
|
+
|
|
3
|
+
Offline, deterministic corpus evaluation: runs the real ``safeai
|
|
4
|
+
scan`` CLI path against ``tests/benchmarks/authority/`` and compares
|
|
5
|
+
structurally with hand-verified expected truth. The benchmark
|
|
6
|
+
measures; it never gates.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from safeai.benchmark.runner import (
|
|
10
|
+
BenchmarkError,
|
|
11
|
+
discover_cases,
|
|
12
|
+
evaluate_case,
|
|
13
|
+
run_corpus,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"BenchmarkError",
|
|
18
|
+
"discover_cases",
|
|
19
|
+
"evaluate_case",
|
|
20
|
+
"run_corpus",
|
|
21
|
+
]
|