SafeAI-Static-Analyzer 2.2.0__tar.gz → 2.2.1__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.2.0 → safeai_static_analyzer-2.2.1}/PKG-INFO +2 -2
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/README.md +1 -1
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/PKG-INFO +2 -2
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/SOURCES.txt +1 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/cmd/cli.py +6 -2
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/pr_comment.py +9 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/version.py +1 -1
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_pr_comment.py +51 -0
- safeai_static_analyzer-2.2.1/tests/test_release_assets.py +100 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/LICENSE +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/dependency_links.txt +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/entry_points.txt +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/requires.txt +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/SafeAI_Static_Analyzer.egg-info/top_level.txt +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/pyproject.toml +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/__main__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/aggregation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/capabilities.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/capability_diff.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/component_diff.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/component_graph.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/components.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/dependency_correlation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/escalation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/escalation_remediation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/import_graph.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/project_graph.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/semantic.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/target_taxonomy.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_identity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_implementation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_surface.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/capability/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/capability/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/claude_code/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/claude_code/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/data_leakage/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/data_leakage/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/dataflow/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/dataflow/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/env_dependency/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/env_dependency/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/governance/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/governance/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/compatibility.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/schema.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/validators.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/model_config/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/model_config/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt_file/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt_file/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/skill/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/skill/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/tool_def/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/tool_def/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/workflow/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/workflow/analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/cmd/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/cmd/manifest_cli.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/cmd/postprocess.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/cmd/registry_cli.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/controls/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/controls/catalogs.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/controls/mappings.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/file_discovery.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/metadata.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/orchestrator.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/scan.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/autogen/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/azure_foundry/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/azure_foundry/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/bedrock_agent/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/bedrock_agent/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/claude_code/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/claude_code/commands.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/claude_code/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/claude_code/permissions.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/claude_code/settings.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/crewai/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/crewai/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/cursorrules/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/cursorrules/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/dify/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/dify/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/google_adk/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/google_adk/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/haystack/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/haystack/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langchain/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langchain/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langgraph/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langgraph/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/llamaindex/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/llamaindex/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/mastra/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/mastra/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/microsoft_agent/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/microsoft_agent/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/n8n/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/n8n/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/openai_agents/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/openai_agents/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/semantic_kernel/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/semantic_kernel/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/windsurf/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/windsurf/parser.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/assurance.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/baseline.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/ci_context.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/contract.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/enrich.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/exporter.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/fingerprints.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/identity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/importer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/integrity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/manifest.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/policy.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/connection.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/persist.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/queries.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/schema.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/suppressions.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/util.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/failure_matrix.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/html.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/html_kit.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/json_report.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/registry_html.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/sarif.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/terminal.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/rules/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/rules/base_rules.yaml +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/rules/loader.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/scorecard.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/scoring/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/scoring/engine.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/severity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/telemetry/__init__.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/telemetry/client.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/telemetry/config.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/telemetry/schema.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/setup.cfg +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_adapter_dataflow.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_assurance.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_baseline.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_benchmarks.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_capability_detection.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_capability_diff_v2.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_ci_context.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_claude_code_deep.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_compatibility.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_component_graph.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_component_hash.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_confidence_arbitration.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_control_mappings.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_crewai_framework.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_cursorrules_framework.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_dco.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_env_dependency.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_escalation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_escalation_remediation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_evidence_type.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_fingerprints.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_github_action.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_governance_analyzer.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_html_report.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_init_and_rules.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_kya_integration.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_kya_manifest.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_langgraph_framework.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_llamaindex_framework.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_manifest_contract.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_manifest_integrity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_mcp_tool_poisoning.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_mcp_validation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_n8n_workflow.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_parser_aggregation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_phase15.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_policy.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_pr_comment_cli.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_quality_gates.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_registry.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_registry_cli.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_registry_html.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_regression_fixtures.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_release_fixes.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_release_validation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_rules_loader_determinism.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_sarif.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_scan_phase11.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_scorecard.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_scoring.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_semantic.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_severity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_suppressions.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_target_taxonomy_engine.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_telemetry.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_tool_identity.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_tool_implementation.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_version.py +0 -0
- {safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/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.2.
|
|
3
|
+
Version: 2.2.1
|
|
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
|
|
@@ -41,7 +41,7 @@ Dynamic: license-file
|
|
|
41
41
|
|
|
42
42
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
43
43
|
|
|
44
|
-
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It
|
|
44
|
+
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It is offline and source-private by default — it never executes agents or calls LLMs, and network activity occurs only through explicitly enabled integration commands (currently only `--pr-comment-post`). It integrates into CI/CD pipelines.
|
|
45
45
|
|
|
46
46
|
> 🌐 [safeai-analyzer.ikaruscareer.com](https://safeai-analyzer.ikaruscareer.com) — project landing page
|
|
47
47
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
10
10
|
|
|
11
|
-
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It
|
|
11
|
+
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It is offline and source-private by default — it never executes agents or calls LLMs, and network activity occurs only through explicitly enabled integration commands (currently only `--pr-comment-post`). It integrates into CI/CD pipelines.
|
|
12
12
|
|
|
13
13
|
> 🌐 [safeai-analyzer.ikaruscareer.com](https://safeai-analyzer.ikaruscareer.com) — project landing page
|
|
14
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SafeAI-Static-Analyzer
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
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
|
|
@@ -41,7 +41,7 @@ Dynamic: license-file
|
|
|
41
41
|
|
|
42
42
|
Enjoying SafeAI? A ⭐ on [GitHub](https://github.com/ikaruscareer/SafeAI) helps more security teams find it.
|
|
43
43
|
|
|
44
|
-
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It
|
|
44
|
+
**SafeAI** is a static analysis tool that scans AI application source code for security risks, capability exposure, and governance gaps. It is offline and source-private by default — it never executes agents or calls LLMs, and network activity occurs only through explicitly enabled integration commands (currently only `--pr-comment-post`). It integrates into CI/CD pipelines.
|
|
45
45
|
|
|
46
46
|
> 🌐 [safeai-analyzer.ikaruscareer.com](https://safeai-analyzer.ikaruscareer.com) — project landing page
|
|
47
47
|
|
|
@@ -193,6 +193,7 @@ tests/test_registry.py
|
|
|
193
193
|
tests/test_registry_cli.py
|
|
194
194
|
tests/test_registry_html.py
|
|
195
195
|
tests/test_regression_fixtures.py
|
|
196
|
+
tests/test_release_assets.py
|
|
196
197
|
tests/test_release_fixes.py
|
|
197
198
|
tests/test_release_validation.py
|
|
198
199
|
tests/test_rules_loader_determinism.py
|
|
@@ -26,7 +26,9 @@ KYA (Know Your Agent) behavior:
|
|
|
26
26
|
* ``--pr-comment`` writes a reviewer-facing Markdown summary of
|
|
27
27
|
capability escalations to a file. SafeAI never posts it anywhere;
|
|
28
28
|
publishing is the CI workflow's job.
|
|
29
|
-
* All outputs remain local: no network calls, no uploads
|
|
29
|
+
* All outputs remain local: no network calls, no uploads — except the
|
|
30
|
+
explicitly enabled ``--pr-comment-post`` integration, which makes one
|
|
31
|
+
GitHub API request and announces itself on stderr.
|
|
30
32
|
"""
|
|
31
33
|
|
|
32
34
|
import argparse
|
|
@@ -70,7 +72,9 @@ def _build_parser():
|
|
|
70
72
|
help="Print the PR comment Markdown to stdout")
|
|
71
73
|
scan.add_argument("--pr-comment-post", action="store_true",
|
|
72
74
|
help="Post or update the PR comment on GitHub (requires GITHUB_TOKEN "
|
|
73
|
-
"and CI context with PR number and repository)"
|
|
75
|
+
"and CI context with PR number and repository). "
|
|
76
|
+
"NETWORK: the one explicitly enabled integration that "
|
|
77
|
+
"makes a GitHub API request; announces itself on stderr.")
|
|
74
78
|
scan.add_argument("--fail-on-escalation", choices=["critical", "high", "medium"],
|
|
75
79
|
help="Fail the scan when a capability escalation at or above "
|
|
76
80
|
"this severity is detected (requires --baseline)")
|
|
@@ -20,6 +20,8 @@ Design constraints, all enforced by tests:
|
|
|
20
20
|
* Nothing is posted anywhere. This module returns a string.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
+
import sys
|
|
24
|
+
|
|
23
25
|
from safeai.analysis.tool_identity import display_name
|
|
24
26
|
from safeai.kya.assurance import BOUNDARY_SENTENCE
|
|
25
27
|
from safeai.severity import ESCALATION_SEVERITIES
|
|
@@ -343,6 +345,13 @@ def post_pr_comment(report, ci_context=None, token=None):
|
|
|
343
345
|
text = render_pr_comment(report, ci_context=ci_context)
|
|
344
346
|
api_base = f"https://api.github.com/repos/{repository}"
|
|
345
347
|
|
|
348
|
+
# Explicit integration boundary: the scanner is offline by default;
|
|
349
|
+
# this is the one path that makes a network request, and it says so.
|
|
350
|
+
sys.stderr.write(
|
|
351
|
+
"Integration mode enabled: SafeAI is making an explicit GitHub API "
|
|
352
|
+
"request to post/update a PR comment.\n"
|
|
353
|
+
)
|
|
354
|
+
|
|
346
355
|
# Find existing comment with our marker
|
|
347
356
|
comment_id = _find_existing_comment(api_base, pr_number, token)
|
|
348
357
|
if comment_id:
|
|
@@ -299,3 +299,54 @@ def test_post_pr_comment_returns_none_without_token(monkeypatch):
|
|
|
299
299
|
"repository": "ikaruscareer/SafeAI",
|
|
300
300
|
})
|
|
301
301
|
assert result is None
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
def test_post_pr_comment_announces_integration_mode(monkeypatch, capsys):
|
|
305
|
+
"""The one network path announces itself on stderr before requesting."""
|
|
306
|
+
import json as _json
|
|
307
|
+
import urllib.request
|
|
308
|
+
|
|
309
|
+
from safeai.report.pr_comment import post_pr_comment
|
|
310
|
+
|
|
311
|
+
calls = []
|
|
312
|
+
|
|
313
|
+
class _FakeResponse:
|
|
314
|
+
def __init__(self, payload):
|
|
315
|
+
self.payload = payload
|
|
316
|
+
|
|
317
|
+
def __enter__(self):
|
|
318
|
+
return self
|
|
319
|
+
|
|
320
|
+
def __exit__(self, *args):
|
|
321
|
+
return False
|
|
322
|
+
|
|
323
|
+
def read(self):
|
|
324
|
+
return _json.dumps(self.payload).encode()
|
|
325
|
+
|
|
326
|
+
def _fake_urlopen(request, *args, **kwargs):
|
|
327
|
+
calls.append(request.full_url)
|
|
328
|
+
if request.full_url.endswith("/comments?per_page=100"):
|
|
329
|
+
return _FakeResponse([])
|
|
330
|
+
return _FakeResponse({"html_url": "https://github.com/x/y/pull/42#issuecomment-1"})
|
|
331
|
+
|
|
332
|
+
monkeypatch.setattr(urllib.request, "urlopen", _fake_urlopen)
|
|
333
|
+
result = post_pr_comment(typical_report(), ci_context={
|
|
334
|
+
"pr_number": 42,
|
|
335
|
+
"repository": "ikaruscareer/SafeAI",
|
|
336
|
+
}, token="fake-token")
|
|
337
|
+
assert result == "https://github.com/x/y/pull/42#issuecomment-1"
|
|
338
|
+
assert len(calls) == 2 # find existing, then create
|
|
339
|
+
err = capsys.readouterr().err
|
|
340
|
+
assert "Integration mode enabled" in err
|
|
341
|
+
assert "explicit GitHub API request" in err
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
def test_post_pr_comment_silent_without_token(monkeypatch, capsys):
|
|
345
|
+
"""No announcement when nothing will be sent (offline stays silent)."""
|
|
346
|
+
from safeai.report.pr_comment import post_pr_comment
|
|
347
|
+
monkeypatch.delenv("GITHUB_TOKEN", raising=False)
|
|
348
|
+
assert post_pr_comment(typical_report(), ci_context={
|
|
349
|
+
"pr_number": 42,
|
|
350
|
+
"repository": "ikaruscareer/SafeAI",
|
|
351
|
+
}) is None
|
|
352
|
+
assert "Integration mode" not in capsys.readouterr().err
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Release asset invariants (supply-chain: no misattributed evidence)."""
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import importlib.util
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
9
|
+
SCRIPT = os.path.join(REPO_ROOT, "scripts", "verify_release_assets.py")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _load():
|
|
13
|
+
spec = importlib.util.spec_from_file_location("verify_release_assets", SCRIPT)
|
|
14
|
+
mod = importlib.util.module_from_spec(spec)
|
|
15
|
+
spec.loader.exec_module(mod)
|
|
16
|
+
return mod
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _write(path, content=b"x"):
|
|
20
|
+
with open(path, "wb") as fh:
|
|
21
|
+
fh.write(content if isinstance(content, bytes) else content.encode())
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _clean_tree(tmp_path, version="2.2.1"):
|
|
25
|
+
wheel = f"safeai_static_analyzer-{version}-py3-none-any.whl"
|
|
26
|
+
sdist = f"safeai_static_analyzer-{version}.tar.gz"
|
|
27
|
+
sbom = f"safeai-{version}-sbom.spdx.json"
|
|
28
|
+
slsa = f"safeai-{version}-slsa-provenance.json"
|
|
29
|
+
for name, content in (
|
|
30
|
+
(wheel, b"wheel-bytes"),
|
|
31
|
+
(sdist, b"sdist-bytes"),
|
|
32
|
+
(sbom, json.dumps({"spdxVersion": "SPDX-2.3"})),
|
|
33
|
+
(slsa, json.dumps({"_type": "in-toto"})),
|
|
34
|
+
):
|
|
35
|
+
_write(os.path.join(str(tmp_path), name), content)
|
|
36
|
+
for name in (wheel, sdist):
|
|
37
|
+
_write(os.path.join(str(tmp_path), name + ".sig"), b"sig")
|
|
38
|
+
_write(os.path.join(str(tmp_path), name + ".pem"), b"pem")
|
|
39
|
+
lines = []
|
|
40
|
+
for name in (wheel, sdist, sbom, slsa):
|
|
41
|
+
with open(os.path.join(str(tmp_path), name), "rb") as fh:
|
|
42
|
+
digest = hashlib.sha256(fh.read()).hexdigest()
|
|
43
|
+
lines.append(f"{digest} {name}")
|
|
44
|
+
_write(os.path.join(str(tmp_path), "SHA256SUMS"), "\n".join(lines) + "\n")
|
|
45
|
+
return str(tmp_path)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_clean_release_passes(tmp_path):
|
|
49
|
+
mod = _load()
|
|
50
|
+
assert mod.verify(_clean_tree(tmp_path), "2.2.1") == []
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_historical_artifact_fails(tmp_path):
|
|
54
|
+
mod = _load()
|
|
55
|
+
root = _clean_tree(tmp_path)
|
|
56
|
+
_write(os.path.join(root, "safeai-2.0.1-sbom.spdx.json"), b"{}")
|
|
57
|
+
problems = mod.verify(root, "2.2.1")
|
|
58
|
+
assert any("2.0.1" in p and "foreign version" in p for p in problems)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_generic_provenance_fails(tmp_path):
|
|
62
|
+
mod = _load()
|
|
63
|
+
root = _clean_tree(tmp_path)
|
|
64
|
+
_write(os.path.join(root, "provenance.json"), b"{}")
|
|
65
|
+
problems = mod.verify(root, "2.2.1")
|
|
66
|
+
assert any("generically named" in p for p in problems)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def test_missing_sidecar_fails(tmp_path):
|
|
70
|
+
mod = _load()
|
|
71
|
+
root = _clean_tree(tmp_path)
|
|
72
|
+
os.remove(os.path.join(root, "safeai_static_analyzer-2.2.1.tar.gz.sig"))
|
|
73
|
+
problems = mod.verify(root, "2.2.1")
|
|
74
|
+
assert any("sidecar" in p for p in problems)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_checksum_mismatch_fails(tmp_path):
|
|
78
|
+
mod = _load()
|
|
79
|
+
root = _clean_tree(tmp_path)
|
|
80
|
+
_write(os.path.join(root, "safeai_static_analyzer-2.2.1.tar.gz"), b"tampered")
|
|
81
|
+
problems = mod.verify(root, "2.2.1")
|
|
82
|
+
assert any("digest mismatch" in p for p in problems)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_unlisted_file_fails(tmp_path):
|
|
86
|
+
mod = _load()
|
|
87
|
+
root = _clean_tree(tmp_path)
|
|
88
|
+
wheel = "safeai_static_analyzer-2.2.1-py3-none-any.whl"
|
|
89
|
+
sums = os.path.join(root, "SHA256SUMS")
|
|
90
|
+
with open(sums, encoding="utf-8") as fh:
|
|
91
|
+
kept = [ln for ln in fh if wheel not in ln]
|
|
92
|
+
with open(sums, "w", encoding="utf-8") as fh:
|
|
93
|
+
fh.writelines(kept)
|
|
94
|
+
problems = mod.verify(root, "2.2.1")
|
|
95
|
+
assert any("absent from SHA256SUMS" in p for p in problems)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_bad_version_usage():
|
|
99
|
+
mod = _load()
|
|
100
|
+
assert mod.main([".", "not-a-version"]) == 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/aggregation.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/capabilities.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/capability_diff.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/component_diff.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/component_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/import_graph.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/project_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/target_taxonomy.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_identity.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_implementation.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analysis/tool_surface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/dataflow/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/dataflow/analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/analyzer.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/compatibility.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/schema.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/mcp/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/prompt/analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/skill/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/skill/analyzer.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/tool_def/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/tool_def/analyzer.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/workflow/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/analyzers/workflow/analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/engine/file_discovery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/autogen/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/crewai/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/crewai/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/dify/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/dify/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/google_adk/parser.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/haystack/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/haystack/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langchain/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/langgraph/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/llamaindex/parser.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/mastra/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/mastra/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/n8n/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/n8n/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/windsurf/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/frameworks/windsurf/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/__init__.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/connection.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/persist.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/kya/registry/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/failure_matrix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/safeai/report/registry_html.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_adapter_dataflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_capability_detection.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_capability_diff_v2.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_claude_code_deep.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_confidence_arbitration.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_control_mappings.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_crewai_framework.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_cursorrules_framework.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_escalation_remediation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_governance_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_langgraph_framework.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_llamaindex_framework.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_manifest_contract.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_manifest_integrity.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_mcp_tool_poisoning.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_parser_aggregation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_regression_fixtures.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_release_validation.py
RENAMED
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_rules_loader_determinism.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_target_taxonomy_engine.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_tool_implementation.py
RENAMED
|
File without changes
|
|
File without changes
|
{safeai_static_analyzer-2.2.0 → safeai_static_analyzer-2.2.1}/tests/test_windsurf_framework.py
RENAMED
|
File without changes
|