cycode 3.16.3.dev5__tar.gz → 3.17.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.
Files changed (215) hide show
  1. {cycode-3.16.3.dev5 → cycode-3.17.1}/PKG-INFO +2 -2
  2. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/__init__.py +1 -1
  3. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/policy.py +21 -3
  4. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +4 -4
  5. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/utils.py +17 -0
  6. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/session_start_command.py +2 -2
  7. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/code_scanner.py +9 -2
  8. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/commit_range_scanner.py +6 -1
  9. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/consts.py +2 -1
  10. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +18 -4
  11. {cycode-3.16.3.dev5 → cycode-3.17.1}/pyproject.toml +4 -4
  12. {cycode-3.16.3.dev5 → cycode-3.17.1}/LICENCE +0 -0
  13. {cycode-3.16.3.dev5 → cycode-3.17.1}/README.md +0 -0
  14. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/__main__.py +0 -0
  15. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/__init__.py +0 -0
  16. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/app.py +0 -0
  17. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/__init__.py +0 -0
  18. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/activation_manager.py +0 -0
  19. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
  20. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
  21. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
  22. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
  23. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/__init__.py +0 -0
  24. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py +0 -0
  25. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/base.py +0 -0
  26. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/claude_code.py +0 -0
  27. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/codex.py +0 -0
  28. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/ides/cursor.py +0 -0
  29. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
  30. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
  31. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
  32. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
  33. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
  34. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
  35. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
  36. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
  37. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
  38. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
  39. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
  40. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
  41. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/api/__init__.py +0 -0
  42. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/api/api_command.py +0 -0
  43. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/api/openapi_spec.py +0 -0
  44. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/auth/__init__.py +0 -0
  45. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/auth/auth_command.py +0 -0
  46. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/auth/auth_common.py +0 -0
  47. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/auth/auth_manager.py +0 -0
  48. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/auth/models.py +0 -0
  49. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/configure/__init__.py +0 -0
  50. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/configure/configure_command.py +0 -0
  51. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/configure/consts.py +0 -0
  52. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/configure/messages.py +0 -0
  53. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/configure/prompts.py +0 -0
  54. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ignore/__init__.py +0 -0
  55. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
  56. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/mcp/__init__.py +0 -0
  57. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/mcp/mcp_command.py +0 -0
  58. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/__init__.py +0 -0
  59. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/report_command.py +0 -0
  60. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
  61. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/common.py +0 -0
  62. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
  63. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
  64. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
  65. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
  66. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
  67. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
  68. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report_import/__init__.py +0 -0
  69. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report_import/report_import_command.py +0 -0
  70. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
  71. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
  72. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/sca_options.py +0 -0
  73. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/__init__.py +0 -0
  74. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
  75. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
  76. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
  77. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
  78. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/path/__init__.py +0 -0
  79. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/path/path_command.py +0 -0
  80. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
  81. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
  82. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
  83. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
  84. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
  85. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
  86. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
  87. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
  88. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
  89. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
  90. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
  91. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
  92. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_command.py +0 -0
  93. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_parameters.py +0 -0
  94. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/scan/scan_result.py +0 -0
  95. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/status/__init__.py +0 -0
  96. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/status/get_cli_status.py +0 -0
  97. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/status/models.py +0 -0
  98. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/status/status_command.py +0 -0
  99. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/apps/status/version_command.py +0 -0
  100. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/cli_types.py +0 -0
  101. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/config.py +0 -0
  102. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/console.py +0 -0
  103. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/__init__.py +0 -0
  104. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
  105. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
  106. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
  107. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/handle_errors.py +0 -0
  108. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
  109. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
  110. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/__init__.py +0 -0
  111. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/commit_range_documents.py +0 -0
  112. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
  113. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/file_excluder.py +0 -0
  114. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/iac/__init__.py +0 -0
  115. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
  116. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/models/__init__.py +0 -0
  117. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
  118. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/path_documents.py +0 -0
  119. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/repository_documents.py +0 -0
  120. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/__init__.py +0 -0
  121. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
  122. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
  123. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
  124. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
  125. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
  126. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
  127. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/restore_bun_dependencies.py +0 -0
  128. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
  129. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
  130. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
  131. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
  132. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
  133. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
  134. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
  135. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
  136. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
  137. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
  138. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
  139. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/python/restore_uv_dependencies.py +0 -0
  140. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
  141. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
  142. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
  143. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
  144. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
  145. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/walk_ignore.py +0 -0
  146. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/files_collector/zip_documents.py +0 -0
  147. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/logger.py +0 -0
  148. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/main.py +0 -0
  149. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/models.py +0 -0
  150. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/__init__.py +0 -0
  151. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/console_printer.py +0 -0
  152. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/json_printer.py +0 -0
  153. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/printer_base.py +0 -0
  154. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/rich_printer.py +0 -0
  155. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/__init__.py +0 -0
  156. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
  157. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/table.py +0 -0
  158. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/table_models.py +0 -0
  159. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/table_printer.py +0 -0
  160. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
  161. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/text_printer.py +0 -0
  162. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/__init__.py +0 -0
  163. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
  164. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/detection_data.py +0 -0
  165. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
  166. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
  167. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
  168. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
  169. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/__init__.py +0 -0
  170. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/base_file_manager.py +0 -0
  171. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/config_file_manager.py +0 -0
  172. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/configuration_manager.py +0 -0
  173. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/credentials_manager.py +0 -0
  174. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/user_settings/jwt_creator.py +0 -0
  175. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/__init__.py +0 -0
  176. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/binary_utils.py +0 -0
  177. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/enum_utils.py +0 -0
  178. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/get_api_client.py +0 -0
  179. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/git_proxy.py +0 -0
  180. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/host_info.py +0 -0
  181. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/ignore_utils.py +0 -0
  182. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/jwt_utils.py +0 -0
  183. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/path_utils.py +0 -0
  184. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/progress_bar.py +0 -0
  185. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/scan_batch.py +0 -0
  186. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/scan_utils.py +0 -0
  187. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/shell_executor.py +0 -0
  188. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/string_utils.py +0 -0
  189. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/task_timer.py +0 -0
  190. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/url_utils.py +0 -0
  191. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/version_checker.py +0 -0
  192. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cli/utils/yaml_utils.py +0 -0
  193. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/config.py +0 -0
  194. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/__init__.py +0 -0
  195. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/ai_security_manager_client.py +0 -0
  196. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
  197. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/auth_client.py +0 -0
  198. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/base_token_auth_client.py +0 -0
  199. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cli_activation_client.py +0 -0
  200. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/client_creator.py +0 -0
  201. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/config.py +0 -0
  202. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/config_dev.py +0 -0
  203. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cycode_client.py +0 -0
  204. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cycode_client_base.py +0 -0
  205. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
  206. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
  207. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/cycode_token_based_client.py +0 -0
  208. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/headers.py +0 -0
  209. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/import_sbom_client.py +0 -0
  210. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/logger.py +0 -0
  211. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/models.py +0 -0
  212. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/report_client.py +0 -0
  213. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/scan_client.py +0 -0
  214. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/cyclient/scan_config_base.py +0 -0
  215. {cycode-3.16.3.dev5 → cycode-3.17.1}/cycode/logger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cycode
3
- Version: 3.16.3.dev5
3
+ Version: 3.17.1
4
4
  Summary: Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning.
5
5
  License-Expression: MIT
6
6
  License-File: LICENCE
@@ -26,7 +26,7 @@ Requires-Dist: click (>=8.1.0,<8.2.0)
26
26
  Requires-Dist: colorama (>=0.4.3,<0.5.0)
27
27
  Requires-Dist: gitpython (>=3.1.50,<3.2.0)
28
28
  Requires-Dist: marshmallow (>=3.15.0,<4.0.0)
29
- Requires-Dist: mcp (>=1.9.3,<2.0.0) ; python_version >= "3.10"
29
+ Requires-Dist: mcp (>=1.28.1,<2.0.0) ; python_version >= "3.10"
30
30
  Requires-Dist: patch-ng (==1.19.1)
31
31
  Requires-Dist: pathvalidate (>=3.3.1,<4.0.0)
32
32
  Requires-Dist: pydantic (>=2.11.5,<3.0.0)
@@ -5,4 +5,4 @@ import time as _time
5
5
  # end-to-end scan duration from the moment the user actually triggered it.
6
6
  _BOOT_WALL: float = _time.time()
7
7
 
8
- __version__ = '3.16.3.dev5' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
8
+ __version__ = '3.17.1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
@@ -3,11 +3,14 @@ Policy loading and configuration management for AI guardrails.
3
3
 
4
4
  Policies are loaded and merged in order (later overrides earlier):
5
5
  1. Built-in defaults (consts.DEFAULT_POLICY)
6
- 2. User-level config (~/.cycode/ai-guardrails.yaml)
7
- 3. Repo-level config (<workspace>/.cycode/ai-guardrails.yaml)
6
+ 2. Machine-wide config (admin/MDM-provisioned; see get_machine_policy_path)
7
+ 3. User-level config (~/.cycode/ai-guardrails.yaml)
8
+ 4. Repo-level config (<workspace>/.cycode/ai-guardrails.yaml)
8
9
  """
9
10
 
10
11
  import json
12
+ import os
13
+ import sys
11
14
  from pathlib import Path
12
15
  from typing import Any, Optional
13
16
 
@@ -16,6 +19,16 @@ import yaml
16
19
  from cycode.cli.apps.ai_guardrails.scan.consts import DEFAULT_POLICY, POLICY_FILE_NAME
17
20
 
18
21
 
22
+ def get_machine_policy_path() -> Path:
23
+ """Machine-wide (admin/MDM-provisioned) policy path, by platform."""
24
+ if sys.platform == 'darwin':
25
+ return Path('/Library/Application Support/Cycode') / POLICY_FILE_NAME
26
+ if sys.platform == 'win32':
27
+ program_data = os.environ.get('PROGRAMDATA', 'C:\\ProgramData')
28
+ return Path(program_data) / 'Cycode' / POLICY_FILE_NAME
29
+ return Path('/etc/cycode') / POLICY_FILE_NAME
30
+
31
+
19
32
  def deep_merge(base: dict, override: dict) -> dict:
20
33
  """Deep merge two dictionaries, with override taking precedence."""
21
34
  result = base.copy()
@@ -61,7 +74,7 @@ def load_policy(workspace_root: Optional[str] = None) -> dict:
61
74
  """
62
75
  Load policy by merging configs in order of precedence.
63
76
 
64
- Merge order: defaults <- user config <- repo config
77
+ Merge order: defaults <- machine <- user config <- repo config
65
78
 
66
79
  Args:
67
80
  workspace_root: Workspace root path for repo-level config lookup.
@@ -69,6 +82,11 @@ def load_policy(workspace_root: Optional[str] = None) -> dict:
69
82
  # Start with defaults
70
83
  policy = load_defaults()
71
84
 
85
+ # Merge machine-wide config (admin/MDM-provisioned) - overrides defaults, below user/repo.
86
+ machine_config = load_yaml_file(get_machine_policy_path())
87
+ if machine_config:
88
+ policy = deep_merge(policy, machine_config)
89
+
72
90
  # Merge user-level config (if exists)
73
91
  user_policy_path = Path.home() / '.cycode' / POLICY_FILE_NAME
74
92
  user_config = load_yaml_file(user_policy_path)
@@ -7,7 +7,6 @@ The handlers in ``handlers.py`` are agent-agnostic (they return
7
7
  ``HookDecision``); ``IDE.build_hook_response`` is the per-IDE translation step.
8
8
  """
9
9
 
10
- import sys
11
10
  from typing import Annotated, Optional, Union
12
11
 
13
12
  import click
@@ -18,7 +17,7 @@ from cycode.cli.apps.ai_guardrails.ides.base import HookDecision
18
17
  from cycode.cli.apps.ai_guardrails.scan.handlers import get_handler_for_event
19
18
  from cycode.cli.apps.ai_guardrails.scan.policy import load_policy
20
19
  from cycode.cli.apps.ai_guardrails.scan.types import AiHookEventType
21
- from cycode.cli.apps.ai_guardrails.scan.utils import output_json, safe_json_parse
20
+ from cycode.cli.apps.ai_guardrails.scan.utils import output_json, read_stdin_text, safe_json_parse
22
21
  from cycode.cli.exceptions.custom_exceptions import HttpUnauthorizedError
23
22
  from cycode.cli.utils.get_api_client import get_ai_security_manager_client, get_scan_cycode_client
24
23
  from cycode.logger import get_logger
@@ -91,7 +90,7 @@ def scan_command(
91
90
  """
92
91
  ide_integration = get_ide(ide)
93
92
 
94
- stdin_data = sys.stdin.read().strip()
93
+ stdin_data = read_stdin_text().strip()
95
94
  payload = safe_json_parse(stdin_data)
96
95
 
97
96
  if not payload:
@@ -113,7 +112,8 @@ def scan_command(
113
112
  event_name = unified_payload.event_name
114
113
  logger.debug('Processing AI guardrails hook', extra={'event_name': event_name, 'ide': ide_integration.name})
115
114
 
116
- workspace_roots = payload.get('workspace_roots', ['.'])
115
+ # `or` (not a .get default) - Cursor sends workspace_roots=[] when no folder is open.
116
+ workspace_roots = payload.get('workspace_roots') or ['.']
117
117
  policy = load_policy(workspace_roots[0])
118
118
 
119
119
  try:
@@ -6,11 +6,28 @@ Includes JSON parsing, path matching, and text handling utilities.
6
6
 
7
7
  import json
8
8
  import os
9
+ import sys
9
10
  from pathlib import Path
10
11
 
11
12
  from cycode.cli.apps.ai_guardrails.scan.policy import get_policy_value
12
13
 
13
14
 
15
+ def read_stdin_text() -> str:
16
+ """Read the hook payload from stdin as UTF-8 text.
17
+
18
+ Reads bytes and decodes with utf-8-sig: hook payloads are UTF-8 JSON, but on Windows
19
+ Python decodes piped stdin with the ANSI code page (mojibake for non-ASCII prompts),
20
+ and Cursor on Windows prefixes the payload with a UTF-8 BOM - the -sig codec strips it.
21
+ """
22
+ buffer = getattr(sys.stdin, 'buffer', None)
23
+ if buffer is not None:
24
+ return buffer.read().decode('utf-8-sig', errors='replace')
25
+ # No .buffer (tests mocking sys.stdin with StringIO, exotic streams) - text-mode fallback.
26
+ # lstrip the BOM here too: an already-decoded stream leaves it as U+FEFF, which json.loads
27
+ # rejects (and .strip() doesn't remove - it is not whitespace).
28
+ return sys.stdin.read().lstrip('\ufeff')
29
+
30
+
14
31
  def safe_json_parse(s: str) -> dict:
15
32
  """Parse JSON string, returning empty dict on failure."""
16
33
  try:
@@ -7,7 +7,7 @@ import typer
7
7
 
8
8
  from cycode.cli.apps.ai_guardrails.ides import DEFAULT_IDE_NAME, get_ide
9
9
  from cycode.cli.apps.ai_guardrails.ides.base import IDE
10
- from cycode.cli.apps.ai_guardrails.scan.utils import safe_json_parse
10
+ from cycode.cli.apps.ai_guardrails.scan.utils import read_stdin_text, safe_json_parse
11
11
  from cycode.cli.apps.auth.auth_common import get_authorization_info
12
12
  from cycode.cli.apps.auth.auth_manager import AuthManager
13
13
  from cycode.cli.exceptions.handle_auth_errors import handle_auth_exception
@@ -78,7 +78,7 @@ def session_start_command(
78
78
  logger.debug('No stdin payload (TTY), skipping session initialization')
79
79
  return
80
80
 
81
- stdin_data = sys.stdin.read().strip()
81
+ stdin_data = read_stdin_text().strip()
82
82
  payload = safe_json_parse(stdin_data)
83
83
  if not payload:
84
84
  logger.debug('Empty or invalid stdin payload, skipping session initialization')
@@ -279,7 +279,10 @@ def scan_documents(
279
279
 
280
280
  scan_batch_thread_func = _get_scan_documents_thread_func(ctx, is_git_diff, is_commit_range, scan_parameters)
281
281
 
282
- if should_use_presigned_upload(scan_type):
282
+ # Presigned single-file upload is async-only; a --sync scan must stay on the batched inline path
283
+ # so it never builds one oversized zip to POST synchronously.
284
+ should_use_sync_flow = _should_use_sync_flow(ctx.info_name, scan_type, ctx.obj['sync'])
285
+ if should_use_presigned_upload(scan_type) and not should_use_sync_flow:
283
286
  errors, local_scan_results = _run_presigned_upload_scan(
284
287
  scan_batch_thread_func, scan_type, documents_to_scan, progress_bar, printer
285
288
  )
@@ -388,7 +391,11 @@ def _perform_scan(
388
391
  is_commit_range,
389
392
  on_upload_progress,
390
393
  )
391
- except requests.exceptions.RequestException:
394
+ except (
395
+ requests.exceptions.RequestException,
396
+ custom_exceptions.RequestError,
397
+ custom_exceptions.SlowUploadConnectionError,
398
+ ):
392
399
  logger.warning('Direct upload to object storage failed. Falling back to upload via Cycode API. ')
393
400
 
394
401
  return _perform_scan_async(
@@ -19,6 +19,7 @@ from cycode.cli.apps.scan.scan_result import (
19
19
  print_local_scan_results,
20
20
  )
21
21
  from cycode.cli.config import configuration_manager
22
+ from cycode.cli.exceptions import custom_exceptions
22
23
  from cycode.cli.exceptions.handle_scan_errors import handle_scan_exception
23
24
  from cycode.cli.files_collector.commit_range_documents import (
24
25
  collect_commit_range_diff_documents,
@@ -162,7 +163,11 @@ def _scan_commit_range_documents(
162
163
  scan_parameters,
163
164
  timeout,
164
165
  )
165
- except requests.exceptions.RequestException:
166
+ except (
167
+ requests.exceptions.RequestException,
168
+ custom_exceptions.RequestError,
169
+ custom_exceptions.SlowUploadConnectionError,
170
+ ):
166
171
  logger.warning('Direct upload to object storage failed. Falling back to upload via Cycode API. ')
167
172
  scan_result = _perform_commit_range_scan_async(
168
173
  cycode_client,
@@ -222,12 +222,13 @@ EXCLUSIONS_BY_CVE_SECTION_NAME = 'cves'
222
222
  FILE_MAX_SIZE_LIMIT_IN_BYTES = 5000000
223
223
 
224
224
  PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 5 * 1024 * 1024 * 1024 # 5 GB (S3 presigned POST limit)
225
- PRESIGNED_UPLOAD_SCAN_TYPES = {SAST_SCAN_TYPE}
225
+ PRESIGNED_UPLOAD_SCAN_TYPES = {SAST_SCAN_TYPE, SECRET_SCAN_TYPE}
226
226
 
227
227
  DEFAULT_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 20 * 1024 * 1024
228
228
  ZIP_MAX_SIZE_LIMIT_IN_BYTES = {
229
229
  SCA_SCAN_TYPE: 200 * 1024 * 1024,
230
230
  SAST_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES,
231
+ SECRET_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES,
231
232
  }
232
233
 
233
234
  # scan in batches
@@ -1,4 +1,5 @@
1
1
  import os
2
+ import platform
2
3
  import re
3
4
  from typing import Optional
4
5
 
@@ -12,19 +13,32 @@ from cycode.cli.utils.shell_executor import shell
12
13
  BUILD_GRADLE_FILE_NAME = 'build.gradle'
13
14
  BUILD_GRADLE_KTS_FILE_NAME = 'build.gradle.kts'
14
15
  BUILD_GRADLE_DEP_TREE_FILE_NAME = 'gradle-dependencies-generated.txt'
15
- BUILD_GRADLE_ALL_PROJECTS_COMMAND = ['gradle', 'projects']
16
16
  ALL_PROJECTS_REGEX = r"[+-]{3} Project '(.*?)'"
17
17
 
18
+ GRADLE_EXECUTABLE = 'gradle'
19
+ GRADLEW_FILE_NAME = 'gradlew'
20
+ GRADLEW_BAT_FILE_NAME = 'gradlew.bat'
21
+
18
22
 
19
23
  class RestoreGradleDependencies(BaseRestoreDependencies):
20
24
  def __init__(
21
25
  self, ctx: typer.Context, is_git_diff: bool, command_timeout: int, projects: Optional[set[str]] = None
22
26
  ) -> None:
23
27
  super().__init__(ctx, is_git_diff, command_timeout, create_output_file_manually=True)
28
+ self.gradle_executable = self._resolve_gradle_executable()
24
29
  if projects is None:
25
30
  projects = set()
26
31
  self.projects = self.get_all_projects() if self.is_gradle_sub_projects() else projects
27
32
 
33
+ def _resolve_gradle_executable(self) -> str:
34
+ scan_root = get_path_from_context(self.ctx)
35
+ if scan_root:
36
+ wrapper_name = GRADLEW_BAT_FILE_NAME if platform.system() == 'Windows' else GRADLEW_FILE_NAME
37
+ wrapper_path = os.path.join(scan_root, wrapper_name)
38
+ if os.path.isfile(wrapper_path):
39
+ return wrapper_path
40
+ return GRADLE_EXECUTABLE
41
+
28
42
  def is_gradle_sub_projects(self) -> bool:
29
43
  return self.ctx.obj.get('gradle_all_sub_projects', False)
30
44
 
@@ -35,7 +49,7 @@ class RestoreGradleDependencies(BaseRestoreDependencies):
35
49
  return (
36
50
  self.get_commands_for_sub_projects(manifest_file_path)
37
51
  if self.is_gradle_sub_projects()
38
- else [['gradle', 'dependencies', '-b', manifest_file_path, '-q', '--console', 'plain']]
52
+ else [[self.gradle_executable, 'dependencies', '-b', manifest_file_path, '-q', '--console', 'plain']]
39
53
  )
40
54
 
41
55
  def get_lock_file_name(self) -> str:
@@ -49,7 +63,7 @@ class RestoreGradleDependencies(BaseRestoreDependencies):
49
63
 
50
64
  def get_all_projects(self) -> set[str]:
51
65
  output = shell(
52
- command=BUILD_GRADLE_ALL_PROJECTS_COMMAND,
66
+ command=[self.gradle_executable, 'projects'],
53
67
  timeout=self.command_timeout,
54
68
  working_directory=get_path_from_context(self.ctx),
55
69
  )
@@ -62,7 +76,7 @@ class RestoreGradleDependencies(BaseRestoreDependencies):
62
76
  project_name = os.path.basename(os.path.dirname(manifest_file_path))
63
77
  project_name = f':{project_name}'
64
78
  return (
65
- [['gradle', f'{project_name}:dependencies', '-q', '--console', 'plain']]
79
+ [[self.gradle_executable, f'{project_name}:dependencies', '-q', '--console', 'plain']]
66
80
  if project_name in self.projects
67
81
  else []
68
82
  )
@@ -21,7 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.14",
22
22
  ]
23
23
  dynamic = ["dependencies"]
24
- version = "3.16.3.dev5"
24
+ version = "3.17.1"
25
25
 
26
26
  [project.scripts]
27
27
  cycode = "cycode.cli.app:app"
@@ -46,7 +46,7 @@ rich = ">=13.9.4, <14"
46
46
  patch-ng = "1.19.1"
47
47
  typer = "^0.15.3"
48
48
  tenacity = ">=9.0.0,<9.1.0"
49
- mcp = { version = ">=1.9.3,<2.0.0", markers = "python_version >= '3.10'" }
49
+ mcp = { version = ">=1.28.1,<2.0.0", markers = "python_version >= '3.10'" }
50
50
  pydantic = ">=2.11.5,<3.0.0"
51
51
  pathvalidate = ">=3.3.1,<4.0.0"
52
52
  tomli-w = ">=1.0.0,<2.0.0"
@@ -54,7 +54,7 @@ tomli = {version = ">=2.0.0,<3.0.0", python = "<3.11"}
54
54
  anyio = ">=4.0.0, <4.13.0"
55
55
 
56
56
  [tool.poetry.group.test.dependencies]
57
- mock = ">=4.0.3,<4.1.0"
57
+ mock = ">=5.2.0,<5.3.0"
58
58
  pytest = ">=7.3.1,<8.5.0"
59
59
  pytest-mock = ">=3.10.0,<3.11.0"
60
60
  coverage = ">=7.2.3,<7.11.0"
@@ -66,7 +66,7 @@ pyinstaller = {version=">=6.20.0,<7.0.0", python=">=3.9,<3.15"}
66
66
  dunamai = ">=1.26.1,<1.27.0"
67
67
 
68
68
  [tool.poetry.group.dev.dependencies]
69
- ruff = "0.15.15"
69
+ ruff = "0.15.20"
70
70
 
71
71
  [tool.pytest.ini_options]
72
72
  log_cli = true
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes