cycode 3.16.2.dev2__tar.gz → 3.16.3.dev2__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 (214) hide show
  1. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/PKG-INFO +1 -1
  2. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/__init__.py +1 -1
  3. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/session_start_command.py +12 -14
  4. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/configure/configure_command.py +17 -1
  5. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/configure/messages.py +14 -6
  6. cycode-3.16.3.dev2/cycode/cli/utils/host_info.py +127 -0
  7. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/ai_security_manager_client.py +8 -4
  8. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/pyproject.toml +1 -1
  9. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/LICENCE +0 -0
  10. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/README.md +0 -0
  11. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/__main__.py +0 -0
  12. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/__init__.py +0 -0
  13. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/app.py +0 -0
  14. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/__init__.py +0 -0
  15. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/activation_manager.py +0 -0
  16. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
  17. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
  18. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
  19. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
  20. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/__init__.py +0 -0
  21. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py +0 -0
  22. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/base.py +0 -0
  23. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/claude_code.py +0 -0
  24. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/codex.py +0 -0
  25. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/ides/cursor.py +0 -0
  26. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
  27. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
  28. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
  29. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
  30. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
  31. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
  32. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
  33. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
  34. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/scan/utils.py +0 -0
  35. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
  36. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
  37. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
  38. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
  39. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
  40. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
  41. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/api/__init__.py +0 -0
  42. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/api/api_command.py +0 -0
  43. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/api/openapi_spec.py +0 -0
  44. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/auth/__init__.py +0 -0
  45. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/auth/auth_command.py +0 -0
  46. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/auth/auth_common.py +0 -0
  47. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/auth/auth_manager.py +0 -0
  48. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/auth/models.py +0 -0
  49. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/configure/__init__.py +0 -0
  50. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/configure/consts.py +0 -0
  51. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/configure/prompts.py +0 -0
  52. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ignore/__init__.py +0 -0
  53. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/ignore/ignore_command.py +0 -0
  54. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/mcp/__init__.py +0 -0
  55. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/mcp/mcp_command.py +0 -0
  56. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/__init__.py +0 -0
  57. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/report_command.py +0 -0
  58. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/__init__.py +0 -0
  59. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/common.py +0 -0
  60. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
  61. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
  62. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
  63. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
  64. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
  65. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
  66. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report_import/__init__.py +0 -0
  67. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report_import/report_import_command.py +0 -0
  68. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
  69. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
  70. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/sca_options.py +0 -0
  71. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/__init__.py +0 -0
  72. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/aggregation_report.py +0 -0
  73. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/code_scanner.py +0 -0
  74. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
  75. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
  76. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/commit_range_scanner.py +0 -0
  77. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/detection_excluder.py +0 -0
  78. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/path/__init__.py +0 -0
  79. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/path/path_command.py +0 -0
  80. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
  81. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
  82. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
  83. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
  84. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
  85. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
  86. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
  87. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/repository/__init__.py +0 -0
  88. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
  89. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
  90. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
  91. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
  92. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_command.py +0 -0
  93. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_parameters.py +0 -0
  94. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/scan/scan_result.py +0 -0
  95. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/status/__init__.py +0 -0
  96. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/status/get_cli_status.py +0 -0
  97. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/status/models.py +0 -0
  98. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/status/status_command.py +0 -0
  99. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/apps/status/version_command.py +0 -0
  100. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/cli_types.py +0 -0
  101. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/config.py +0 -0
  102. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/console.py +0 -0
  103. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/consts.py +0 -0
  104. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/__init__.py +0 -0
  105. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/custom_exceptions.py +0 -0
  106. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
  107. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
  108. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/handle_errors.py +0 -0
  109. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
  110. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
  111. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/__init__.py +0 -0
  112. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/commit_range_documents.py +0 -0
  113. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
  114. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/file_excluder.py +0 -0
  115. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/iac/__init__.py +0 -0
  116. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
  117. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/models/__init__.py +0 -0
  118. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
  119. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/path_documents.py +0 -0
  120. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/repository_documents.py +0 -0
  121. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/__init__.py +0 -0
  122. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
  123. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
  124. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
  125. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
  126. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
  127. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
  128. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
  129. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
  130. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
  131. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
  132. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
  133. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
  134. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
  135. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
  136. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
  137. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
  138. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
  139. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
  140. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/python/restore_uv_dependencies.py +0 -0
  141. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
  142. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
  143. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
  144. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
  145. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
  146. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/walk_ignore.py +0 -0
  147. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/files_collector/zip_documents.py +0 -0
  148. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/logger.py +0 -0
  149. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/main.py +0 -0
  150. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/models.py +0 -0
  151. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/__init__.py +0 -0
  152. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/console_printer.py +0 -0
  153. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/json_printer.py +0 -0
  154. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/printer_base.py +0 -0
  155. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/rich_printer.py +0 -0
  156. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/__init__.py +0 -0
  157. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
  158. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/table.py +0 -0
  159. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/table_models.py +0 -0
  160. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/table_printer.py +0 -0
  161. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/tables/table_printer_base.py +0 -0
  162. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/text_printer.py +0 -0
  163. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/__init__.py +0 -0
  164. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
  165. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/detection_data.py +0 -0
  166. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
  167. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
  168. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
  169. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/printers/utils/rich_helpers.py +0 -0
  170. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/__init__.py +0 -0
  171. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/base_file_manager.py +0 -0
  172. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/config_file_manager.py +0 -0
  173. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/configuration_manager.py +0 -0
  174. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/credentials_manager.py +0 -0
  175. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/user_settings/jwt_creator.py +0 -0
  176. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/__init__.py +0 -0
  177. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/binary_utils.py +0 -0
  178. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/enum_utils.py +0 -0
  179. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/get_api_client.py +0 -0
  180. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/git_proxy.py +0 -0
  181. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/ignore_utils.py +0 -0
  182. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/jwt_utils.py +0 -0
  183. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/path_utils.py +0 -0
  184. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/progress_bar.py +0 -0
  185. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/scan_batch.py +0 -0
  186. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/scan_utils.py +0 -0
  187. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/shell_executor.py +0 -0
  188. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/string_utils.py +0 -0
  189. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/task_timer.py +0 -0
  190. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/url_utils.py +0 -0
  191. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/version_checker.py +0 -0
  192. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cli/utils/yaml_utils.py +0 -0
  193. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/config.py +0 -0
  194. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/__init__.py +0 -0
  195. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
  196. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/auth_client.py +0 -0
  197. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/base_token_auth_client.py +0 -0
  198. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cli_activation_client.py +0 -0
  199. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/client_creator.py +0 -0
  200. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/config.py +0 -0
  201. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/config_dev.py +0 -0
  202. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cycode_client.py +0 -0
  203. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cycode_client_base.py +0 -0
  204. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cycode_dev_based_client.py +0 -0
  205. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
  206. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/cycode_token_based_client.py +0 -0
  207. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/headers.py +0 -0
  208. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/import_sbom_client.py +0 -0
  209. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/logger.py +0 -0
  210. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/models.py +0 -0
  211. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/report_client.py +0 -0
  212. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/scan_client.py +0 -0
  213. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/cyclient/scan_config_base.py +0 -0
  214. {cycode-3.16.2.dev2 → cycode-3.16.3.dev2}/cycode/logger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cycode
3
- Version: 3.16.2.dev2
3
+ Version: 3.16.3.dev2
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
@@ -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.2.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
8
+ __version__ = '3.16.3.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
@@ -1,8 +1,5 @@
1
1
  """Handle AI guardrails session start: auth, conversation creation, session context."""
2
2
 
3
- import os
4
- import platform
5
- import socket
6
3
  import sys
7
4
  from typing import TYPE_CHECKING, Annotated, Optional
8
5
 
@@ -15,6 +12,13 @@ from cycode.cli.apps.auth.auth_common import get_authorization_info
15
12
  from cycode.cli.apps.auth.auth_manager import AuthManager
16
13
  from cycode.cli.exceptions.handle_auth_errors import handle_auth_exception
17
14
  from cycode.cli.utils.get_api_client import get_ai_security_manager_client
15
+ from cycode.cli.utils.host_info import (
16
+ get_hostname,
17
+ get_last_login_user,
18
+ get_os_version,
19
+ get_platform_name,
20
+ get_serial_number,
21
+ )
18
22
  from cycode.logger import get_logger
19
23
 
20
24
  if TYPE_CHECKING:
@@ -23,14 +27,6 @@ if TYPE_CHECKING:
23
27
  logger = get_logger('AI Guardrails')
24
28
 
25
29
 
26
- def _get_logged_in_user() -> Optional[str]:
27
- """Best-effort OS account name (whoami). None if it can't be resolved."""
28
- try:
29
- return os.getlogin()
30
- except Exception:
31
- return None
32
-
33
-
34
30
  def _report_session_context(ai_client: 'AISecurityManagerClient', ide: IDE, user_email: Optional[str]) -> None:
35
31
  """Report IDE session context to the AI security manager. Never raises."""
36
32
  try:
@@ -38,9 +34,11 @@ def _report_session_context(ai_client: 'AISecurityManagerClient', ide: IDE, user
38
34
  if not global_config_file and not enabled_plugins:
39
35
  return
40
36
  ai_client.report_session_context(
41
- hostname=socket.gethostname(),
42
- platform=platform.system(),
43
- logged_in_user=_get_logged_in_user(),
37
+ hostname=get_hostname(),
38
+ platform_name=get_platform_name(),
39
+ os_version=get_os_version(),
40
+ serial_number=get_serial_number(),
41
+ last_login_user=get_last_login_user(),
44
42
  global_config_file=global_config_file,
45
43
  enabled_plugins=enabled_plugins,
46
44
  user_email=user_email,
@@ -1,7 +1,12 @@
1
1
  from typing import Optional
2
2
 
3
3
  from cycode.cli.apps.configure.consts import CONFIGURATION_MANAGER, CREDENTIALS_MANAGER
4
- from cycode.cli.apps.configure.messages import get_credentials_update_result_message, get_urls_update_result_message
4
+ from cycode.cli.apps.configure.messages import (
5
+ get_credentials_environment_variables_override_warning,
6
+ get_credentials_update_result_message,
7
+ get_urls_environment_variables_override_warning,
8
+ get_urls_update_result_message,
9
+ )
5
10
  from cycode.cli.apps.configure.prompts import (
6
11
  get_api_url_input,
7
12
  get_app_url_input,
@@ -73,3 +78,14 @@ def configure_command() -> None:
73
78
  console.print(get_urls_update_result_message())
74
79
  if credentials_updated or oidc_credentials_updated:
75
80
  console.print(get_credentials_update_result_message())
81
+
82
+ # Warn about environment variables that override the configured file values, regardless of whether anything was
83
+ # updated. The env vars take precedence on every subsequent call, so configuring the file alone has no effect while
84
+ # they are set.
85
+ urls_override_warning = get_urls_environment_variables_override_warning()
86
+ if urls_override_warning:
87
+ console.print(f'[yellow]Warning:[/] {urls_override_warning}')
88
+
89
+ credentials_override_warning = get_credentials_environment_variables_override_warning()
90
+ if credentials_override_warning:
91
+ console.print(f'[yellow]Warning:[/] {credentials_override_warning}')
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from cycode.cli.apps.configure.consts import (
2
4
  CONFIGURATION_MANAGER,
3
5
  CREDENTIALS_ARE_SET_IN_ENVIRONMENT_VARIABLES_MESSAGE,
@@ -14,11 +16,14 @@ def _are_credentials_exist_in_environment_variables() -> bool:
14
16
 
15
17
 
16
18
  def get_credentials_update_result_message() -> str:
17
- success_message = CREDENTIALS_UPDATED_SUCCESSFULLY_MESSAGE.format(filename=CREDENTIALS_MANAGER.get_filename())
19
+ return CREDENTIALS_UPDATED_SUCCESSFULLY_MESSAGE.format(filename=CREDENTIALS_MANAGER.get_filename())
20
+
21
+
22
+ def get_credentials_environment_variables_override_warning() -> Optional[str]:
18
23
  if _are_credentials_exist_in_environment_variables():
19
- return f'{success_message}. {CREDENTIALS_ARE_SET_IN_ENVIRONMENT_VARIABLES_MESSAGE}'
24
+ return CREDENTIALS_ARE_SET_IN_ENVIRONMENT_VARIABLES_MESSAGE
20
25
 
21
- return success_message
26
+ return None
22
27
 
23
28
 
24
29
  def _are_urls_exist_in_environment_variables() -> bool:
@@ -28,10 +33,13 @@ def _are_urls_exist_in_environment_variables() -> bool:
28
33
 
29
34
 
30
35
  def get_urls_update_result_message() -> str:
31
- success_message = URLS_UPDATED_SUCCESSFULLY_MESSAGE.format(
36
+ return URLS_UPDATED_SUCCESSFULLY_MESSAGE.format(
32
37
  filename=CONFIGURATION_MANAGER.global_config_file_manager.get_filename()
33
38
  )
39
+
40
+
41
+ def get_urls_environment_variables_override_warning() -> Optional[str]:
34
42
  if _are_urls_exist_in_environment_variables():
35
- return f'{success_message}. {URLS_ARE_SET_IN_ENVIRONMENT_VARIABLES_MESSAGE}'
43
+ return URLS_ARE_SET_IN_ENVIRONMENT_VARIABLES_MESSAGE
36
44
 
37
- return success_message
45
+ return None
@@ -0,0 +1,127 @@
1
+ import getpass
2
+ import platform
3
+ import re
4
+ import socket
5
+ import subprocess
6
+ from typing import Optional
7
+
8
+ from cycode.logger import get_logger
9
+
10
+ logger = get_logger('HOST INFO')
11
+
12
+ _SUBPROCESS_TIMEOUT_SEC = 5
13
+
14
+ _PLATFORM_NAMES = {'Darwin': 'macOS', 'Windows': 'Windows', 'Linux': 'Linux'}
15
+
16
+
17
+ def _run(command: list, timeout: int = _SUBPROCESS_TIMEOUT_SEC) -> Optional[str]:
18
+ """Run a command and return its stripped stdout. Never raises; returns None on any error."""
19
+ try:
20
+ result = subprocess.run(command, capture_output=True, text=True, timeout=timeout) # noqa: S603
21
+ return result.stdout.strip() or None
22
+ except Exception as e:
23
+ logger.debug('Failed to run command %s', command, exc_info=e)
24
+ return None
25
+
26
+
27
+ def _read_text_file(path: str) -> Optional[str]:
28
+ """Read and strip a text file. Never raises; returns None if it can't be read."""
29
+ try:
30
+ with open(path) as text_file:
31
+ return text_file.read().strip() or None
32
+ except OSError:
33
+ return None
34
+
35
+
36
+ def get_hostname() -> Optional[str]:
37
+ try:
38
+ return socket.gethostname() or None
39
+ except Exception as e:
40
+ logger.debug('Failed to resolve hostname', exc_info=e)
41
+ return None
42
+
43
+
44
+ def get_platform_name() -> Optional[str]:
45
+ try:
46
+ system = platform.system()
47
+ return _PLATFORM_NAMES.get(system, system or None)
48
+ except Exception as e:
49
+ logger.debug('Failed to resolve platform name', exc_info=e)
50
+ return None
51
+
52
+
53
+ def get_os_version() -> Optional[str]:
54
+ try:
55
+ system = platform.system()
56
+ if system == 'Darwin':
57
+ return platform.mac_ver()[0] or None
58
+ if system == 'Windows':
59
+ return platform.win32_ver()[1] or platform.version() or None
60
+ if system == 'Linux':
61
+ return _get_linux_os_version()
62
+ return platform.release() or None
63
+ except Exception as e:
64
+ logger.debug('Failed to resolve OS version', exc_info=e)
65
+ return None
66
+
67
+
68
+ def _get_linux_os_version() -> Optional[str]:
69
+ freedesktop_os_release = getattr(platform, 'freedesktop_os_release', None) # Python 3.10+
70
+ if freedesktop_os_release is not None:
71
+ try:
72
+ version_id = freedesktop_os_release().get('VERSION_ID')
73
+ if version_id:
74
+ return version_id
75
+ except OSError:
76
+ pass
77
+
78
+ os_release = _read_text_file('/etc/os-release') # Python 3.9 fallback: parse manually
79
+ if os_release:
80
+ for line in os_release.splitlines():
81
+ if line.startswith('VERSION_ID='):
82
+ return line.split('=', 1)[1].strip().strip('"') or None
83
+
84
+ return platform.release() or None
85
+
86
+
87
+ def get_last_login_user() -> Optional[str]:
88
+ try:
89
+ return getpass.getuser() or None
90
+ except Exception as e:
91
+ logger.debug('Failed to resolve last login user', exc_info=e)
92
+ return None
93
+
94
+
95
+ def get_serial_number() -> Optional[str]:
96
+ try:
97
+ system = platform.system()
98
+ if system == 'Darwin':
99
+ return _get_macos_serial_number()
100
+ if system == 'Windows':
101
+ return _get_windows_serial_number()
102
+ except Exception as e:
103
+ logger.debug('Failed to resolve serial number', exc_info=e)
104
+ return None
105
+
106
+
107
+ def _get_macos_serial_number() -> Optional[str]:
108
+ output = _run(['ioreg', '-c', 'IOPlatformExpertDevice', '-d', '2'])
109
+ if not output:
110
+ return None
111
+ match = re.search(r'"IOPlatformSerialNumber"\s*=\s*"([^"]+)"', output)
112
+ return match.group(1) if match else None
113
+
114
+
115
+ def _get_windows_serial_number() -> Optional[str]:
116
+ import pythoncom # from pywin32
117
+ import win32com.client # from pywin32
118
+
119
+ pythoncom.CoInitialize()
120
+ try:
121
+ wmi_service = win32com.client.GetObject('winmgmts:')
122
+ for bios in wmi_service.InstancesOf('Win32_BIOS'):
123
+ serial = bios.SerialNumber
124
+ return serial.strip() if serial else None
125
+ finally:
126
+ pythoncom.CoUninitialize()
127
+ return None
@@ -94,8 +94,10 @@ class AISecurityManagerClient:
94
94
  def report_session_context(
95
95
  self,
96
96
  hostname: Optional[str] = None,
97
- platform: Optional[str] = None,
98
- logged_in_user: Optional[str] = None,
97
+ platform_name: Optional[str] = None,
98
+ os_version: Optional[str] = None,
99
+ serial_number: Optional[str] = None,
100
+ last_login_user: Optional[str] = None,
99
101
  global_config_file: Optional[dict] = None,
100
102
  enabled_plugins: Optional[dict] = None,
101
103
  user_email: Optional[str] = None,
@@ -103,8 +105,10 @@ class AISecurityManagerClient:
103
105
  """Report session context to the backend."""
104
106
  body: dict = {
105
107
  'hostname': hostname,
106
- 'platform': platform,
107
- 'logged_in_user': logged_in_user,
108
+ 'platform_name': platform_name,
109
+ 'os_version': os_version,
110
+ 'serial_number': serial_number,
111
+ 'last_login_user': last_login_user,
108
112
  'user_email': user_email,
109
113
  'global_config_file': global_config_file,
110
114
  'enabled_plugins': enabled_plugins,
@@ -21,7 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.14",
22
22
  ]
23
23
  dynamic = ["dependencies"]
24
- version = "3.16.2.dev2"
24
+ version = "3.16.3.dev2"
25
25
 
26
26
  [project.scripts]
27
27
  cycode = "cycode.cli.app:app"
File without changes
File without changes