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.
Files changed (260) hide show
  1. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/PKG-INFO +2 -2
  2. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/README.md +1 -1
  3. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/PKG-INFO +2 -2
  4. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/SOURCES.txt +10 -0
  5. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/capability/analyzer.py +3 -0
  6. safeai_static_analyzer-2.6.0/safeai/benchmark/__init__.py +21 -0
  7. safeai_static_analyzer-2.6.0/safeai/benchmark/canonical.py +1603 -0
  8. safeai_static_analyzer-2.6.0/safeai/benchmark/compare.py +529 -0
  9. safeai_static_analyzer-2.6.0/safeai/benchmark/metrics.py +540 -0
  10. safeai_static_analyzer-2.6.0/safeai/benchmark/report.py +319 -0
  11. safeai_static_analyzer-2.6.0/safeai/benchmark/runner.py +344 -0
  12. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/cli.py +53 -0
  13. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/postprocess.py +23 -3
  14. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/mappings.py +4 -0
  15. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/exceptions.py +28 -2
  16. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/html.py +239 -2
  17. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/html_kit.py +4 -1
  18. safeai_static_analyzer-2.6.0/safeai/report/security_brief.py +497 -0
  19. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/base_rules.yaml +5 -0
  20. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scorecard.py +1 -0
  21. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/version.py +1 -1
  22. safeai_static_analyzer-2.6.0/tests/test_authority_benchmark.py +354 -0
  23. safeai_static_analyzer-2.6.0/tests/test_authority_canonical.py +583 -0
  24. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_capability_detection.py +21 -0
  25. safeai_static_analyzer-2.6.0/tests/test_exceptions.py +538 -0
  26. safeai_static_analyzer-2.6.0/tests/test_html_report.py +257 -0
  27. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_workflow.py +29 -0
  28. safeai_static_analyzer-2.6.0/tests/test_security_brief.py +248 -0
  29. safeai_static_analyzer-2.5.0/tests/test_exceptions.py +0 -284
  30. safeai_static_analyzer-2.5.0/tests/test_html_report.py +0 -135
  31. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/LICENSE +0 -0
  32. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/dependency_links.txt +0 -0
  33. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/entry_points.txt +0 -0
  34. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/requires.txt +0 -0
  35. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/SafeAI_Static_Analyzer.egg-info/top_level.txt +0 -0
  36. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/pyproject.toml +0 -0
  37. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/__init__.py +0 -0
  38. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/__main__.py +0 -0
  39. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/__init__.py +0 -0
  40. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/aggregation.py +0 -0
  41. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/capabilities.py +0 -0
  42. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/capability_diff.py +0 -0
  43. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/component_diff.py +0 -0
  44. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/component_graph.py +0 -0
  45. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/components.py +0 -0
  46. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/dependency_correlation.py +0 -0
  47. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/escalation.py +0 -0
  48. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/escalation_remediation.py +0 -0
  49. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/iac_correlation.py +0 -0
  50. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/import_graph.py +0 -0
  51. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/project_graph.py +0 -0
  52. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/semantic.py +0 -0
  53. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/target_taxonomy.py +0 -0
  54. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_identity.py +0 -0
  55. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_implementation.py +0 -0
  56. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analysis/tool_surface.py +0 -0
  57. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/__init__.py +0 -0
  58. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/capability/__init__.py +0 -0
  59. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/claude_code/__init__.py +0 -0
  60. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/claude_code/analyzer.py +0 -0
  61. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/data_leakage/__init__.py +0 -0
  62. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/data_leakage/analyzer.py +0 -0
  63. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/dataflow/__init__.py +0 -0
  64. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/dataflow/analyzer.py +0 -0
  65. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/env_dependency/__init__.py +0 -0
  66. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/env_dependency/analyzer.py +0 -0
  67. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/governance/__init__.py +0 -0
  68. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/governance/analyzer.py +0 -0
  69. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/__init__.py +0 -0
  70. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/analyzer.py +0 -0
  71. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/compatibility.py +0 -0
  72. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/schema.py +0 -0
  73. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/mcp/validators.py +0 -0
  74. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/model_config/__init__.py +0 -0
  75. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/model_config/analyzer.py +0 -0
  76. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt/__init__.py +0 -0
  77. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt/analyzer.py +0 -0
  78. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt_file/__init__.py +0 -0
  79. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/prompt_file/analyzer.py +0 -0
  80. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/skill/__init__.py +0 -0
  81. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/skill/analyzer.py +0 -0
  82. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/tool_def/__init__.py +0 -0
  83. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/tool_def/analyzer.py +0 -0
  84. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/workflow/__init__.py +0 -0
  85. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/analyzers/workflow/analyzer.py +0 -0
  86. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/__init__.py +0 -0
  87. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/manifest_cli.py +0 -0
  88. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/cmd/registry_cli.py +0 -0
  89. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/__init__.py +0 -0
  90. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/controls/catalogs.py +0 -0
  91. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/__init__.py +0 -0
  92. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/file_discovery.py +0 -0
  93. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/metadata.py +0 -0
  94. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/orchestrator.py +0 -0
  95. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/engine/scan.py +0 -0
  96. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/__init__.py +0 -0
  97. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/autogen/parser.py +0 -0
  98. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/azure_foundry/__init__.py +0 -0
  99. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/azure_foundry/parser.py +0 -0
  100. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/bedrock_agent/__init__.py +0 -0
  101. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/bedrock_agent/parser.py +0 -0
  102. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/__init__.py +0 -0
  103. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/commands.py +0 -0
  104. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/parser.py +0 -0
  105. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/permissions.py +0 -0
  106. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/claude_code/settings.py +0 -0
  107. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/copilot/__init__.py +0 -0
  108. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/copilot/parser.py +0 -0
  109. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/crewai/__init__.py +0 -0
  110. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/crewai/parser.py +0 -0
  111. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/cursorrules/__init__.py +0 -0
  112. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/cursorrules/parser.py +0 -0
  113. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/dify/__init__.py +0 -0
  114. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/dify/parser.py +0 -0
  115. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/google_adk/__init__.py +0 -0
  116. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/google_adk/parser.py +0 -0
  117. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/haystack/__init__.py +0 -0
  118. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/haystack/parser.py +0 -0
  119. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langchain/__init__.py +0 -0
  120. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langchain/parser.py +0 -0
  121. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langgraph/__init__.py +0 -0
  122. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/langgraph/parser.py +0 -0
  123. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/llamaindex/__init__.py +0 -0
  124. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/llamaindex/parser.py +0 -0
  125. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/mastra/__init__.py +0 -0
  126. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/mastra/parser.py +0 -0
  127. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/microsoft_agent/__init__.py +0 -0
  128. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/microsoft_agent/parser.py +0 -0
  129. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/n8n/__init__.py +0 -0
  130. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/n8n/parser.py +0 -0
  131. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openai_agents/__init__.py +0 -0
  132. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openai_agents/parser.py +0 -0
  133. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openclaw/__init__.py +0 -0
  134. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/openclaw/parser.py +0 -0
  135. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/semantic_kernel/__init__.py +0 -0
  136. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/semantic_kernel/parser.py +0 -0
  137. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/windsurf/__init__.py +0 -0
  138. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/frameworks/windsurf/parser.py +0 -0
  139. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/__init__.py +0 -0
  140. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/k8s.py +0 -0
  141. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/linking.py +0 -0
  142. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/model.py +0 -0
  143. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/semantics.py +0 -0
  144. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/iac/terraform.py +0 -0
  145. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/__init__.py +0 -0
  146. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/assurance.py +0 -0
  147. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/baseline.py +0 -0
  148. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/ci_context.py +0 -0
  149. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/contract.py +0 -0
  150. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/enrich.py +0 -0
  151. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/exporter.py +0 -0
  152. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/fingerprints.py +0 -0
  153. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/identity.py +0 -0
  154. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/importer.py +0 -0
  155. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/integrity.py +0 -0
  156. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/lockfile.py +0 -0
  157. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/manifest.py +0 -0
  158. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/policy.py +0 -0
  159. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/__init__.py +0 -0
  160. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/connection.py +0 -0
  161. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/persist.py +0 -0
  162. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/queries.py +0 -0
  163. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/registry/schema.py +0 -0
  164. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/suppressions.py +0 -0
  165. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/kya/util.py +0 -0
  166. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/__init__.py +0 -0
  167. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/failure_matrix.py +0 -0
  168. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/json_report.py +0 -0
  169. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/pr_comment.py +0 -0
  170. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/registry_html.py +0 -0
  171. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/sarif.py +0 -0
  172. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/report/terminal.py +0 -0
  173. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/__init__.py +0 -0
  174. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/loader.py +0 -0
  175. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/rules/pack_test.py +0 -0
  176. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scoring/__init__.py +0 -0
  177. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/scoring/engine.py +0 -0
  178. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/severity.py +0 -0
  179. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/__init__.py +0 -0
  180. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/client.py +0 -0
  181. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/config.py +0 -0
  182. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/safeai/telemetry/schema.py +0 -0
  183. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/setup.cfg +0 -0
  184. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_adapter_dataflow.py +0 -0
  185. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_architectural_invariants.py +0 -0
  186. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_architecture_diagram.py +0 -0
  187. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_assurance.py +0 -0
  188. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_authority_change.py +0 -0
  189. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_baseline.py +0 -0
  190. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_baseline_compat.py +0 -0
  191. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_benchmarks.py +0 -0
  192. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_capability_diff_v2.py +0 -0
  193. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_ci_context.py +0 -0
  194. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_claude_code_deep.py +0 -0
  195. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_compatibility.py +0 -0
  196. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_component_graph.py +0 -0
  197. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_component_hash.py +0 -0
  198. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_confidence_arbitration.py +0 -0
  199. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_config_adapters.py +0 -0
  200. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_control_mappings.py +0 -0
  201. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_crewai_framework.py +0 -0
  202. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_cursorrules_framework.py +0 -0
  203. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_dco.py +0 -0
  204. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_env_dependency.py +0 -0
  205. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_escalation.py +0 -0
  206. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_escalation_remediation.py +0 -0
  207. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_evidence_contract_v7.py +0 -0
  208. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_evidence_type.py +0 -0
  209. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_fingerprints.py +0 -0
  210. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_github_action.py +0 -0
  211. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_governance_analyzer.py +0 -0
  212. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_adversarial.py +0 -0
  213. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_benchmark.py +0 -0
  214. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_correlation.py +0 -0
  215. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_k8s.py +0 -0
  216. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_linking.py +0 -0
  217. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_semantics.py +0 -0
  218. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_iac_terraform.py +0 -0
  219. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_init_and_rules.py +0 -0
  220. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_kya_integration.py +0 -0
  221. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_kya_manifest.py +0 -0
  222. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_langgraph_framework.py +0 -0
  223. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_llamaindex_framework.py +0 -0
  224. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_manifest_contract.py +0 -0
  225. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_manifest_integrity.py +0 -0
  226. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_mcp_tool_poisoning.py +0 -0
  227. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_mcp_validation.py +0 -0
  228. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_n8n_workflow.py +0 -0
  229. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_parser_aggregation.py +0 -0
  230. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_phase15.py +0 -0
  231. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_plugin_sdk.py +0 -0
  232. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_policy.py +0 -0
  233. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_comment.py +0 -0
  234. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_comment_cli.py +0 -0
  235. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_pr_paths.py +0 -0
  236. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_quality_gates.py +0 -0
  237. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry.py +0 -0
  238. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry_cli.py +0 -0
  239. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_registry_html.py +0 -0
  240. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_regression_fixtures.py +0 -0
  241. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_assets.py +0 -0
  242. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_fixes.py +0 -0
  243. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_release_validation.py +0 -0
  244. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_rules_loader_determinism.py +0 -0
  245. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_sarif.py +0 -0
  246. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scan_framework.py +0 -0
  247. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scan_phase11.py +0 -0
  248. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scorecard.py +0 -0
  249. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_scoring.py +0 -0
  250. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_semantic.py +0 -0
  251. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_severity.py +0 -0
  252. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_suppressions.py +0 -0
  253. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_target_taxonomy_engine.py +0 -0
  254. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_telemetry.py +0 -0
  255. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_terminal_report.py +0 -0
  256. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_tool_identity.py +0 -0
  257. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_tool_implementation.py +0 -0
  258. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_unknown_authority.py +0 -0
  259. {safeai_static_analyzer-2.5.0 → safeai_static_analyzer-2.6.0}/tests/test_version.py +0 -0
  260. {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.5.0
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
  [![CI](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml/badge.svg)](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
37
37
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ikaruscareer/SafeAI/badge)](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
38
38
  [![Website](https://img.shields.io/badge/web-safeai--analyzer.ikaruscareer.com-0f766e)](https://safeai-analyzer.ikaruscareer.com)
39
- [![Latest Release](https://img.shields.io/badge/latest-v2.4.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.4.0)
39
+ [![Latest Release](https://img.shields.io/badge/latest-v2.5.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
40
40
  [![Best Practices](https://bestpractices.dev/projects/14126/badge)](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
  [![CI](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml/badge.svg)](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
4
4
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ikaruscareer/SafeAI/badge)](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
5
5
  [![Website](https://img.shields.io/badge/web-safeai--analyzer.ikaruscareer.com-0f766e)](https://safeai-analyzer.ikaruscareer.com)
6
- [![Latest Release](https://img.shields.io/badge/latest-v2.4.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.4.0)
6
+ [![Latest Release](https://img.shields.io/badge/latest-v2.5.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
7
7
  [![Best Practices](https://bestpractices.dev/projects/14126/badge)](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.5.0
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
  [![CI](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml/badge.svg)](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
37
37
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ikaruscareer/SafeAI/badge)](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
38
38
  [![Website](https://img.shields.io/badge/web-safeai--analyzer.ikaruscareer.com-0f766e)](https://safeai-analyzer.ikaruscareer.com)
39
- [![Latest Release](https://img.shields.io/badge/latest-v2.4.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.4.0)
39
+ [![Latest Release](https://img.shields.io/badge/latest-v2.5.0-0f766e)](https://github.com/ikaruscareer/SafeAI/releases/tag/v2.5.0)
40
40
  [![Best Practices](https://bestpractices.dev/projects/14126/badge)](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
+ ]