cycode 3.24.0__tar.gz → 3.24.1.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.
- {cycode-3.24.0 → cycode-3.24.1.dev2}/PKG-INFO +1 -1
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/__init__.py +1 -1
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/handlers.py +3 -4
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/utils.py +59 -1
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/scan_utils.py +0 -23
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/base_token_auth_client.py +22 -1
- {cycode-3.24.0 → cycode-3.24.1.dev2}/pyproject.toml +1 -1
- {cycode-3.24.0 → cycode-3.24.1.dev2}/LICENCE +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/README.md +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/__main__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/app.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/activation_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/_skill_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/base.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/claude_code.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/codex.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/copilot.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/ides/cursor.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/detach.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/guardrail_config.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/session_start_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/api/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/api/api_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/api/openapi_spec.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/auth/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/auth/auth_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/auth/auth_common.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/auth/auth_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/auth/models.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/configure/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/configure/configure_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/configure/consts.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/configure/messages.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/configure/prompts.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ignore/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ignore/ignore_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/mcp/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/mcp/mcp_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/report_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/common.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report_import/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report_import/report_import_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/sca_options.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/aggregation_report.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/code_scanner.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/commit_range_scanner.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/detection_excluder.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/path/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/path/path_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/repository/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_parameters.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/scan_result.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/status/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/status/get_cli_status.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/status/models.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/status/status_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/status/version_command.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/cli_types.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/config.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/console.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/consts.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/custom_exceptions.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/handle_errors.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/commit_range_documents.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/file_excluder.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/iac/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/models/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/path_documents.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/repository_documents.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_bun_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/python/restore_pip_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/python/restore_uv_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/walk_ignore.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/zip_documents.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/logger.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/main.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/models.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/console_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/json_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/printer_base.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/rich_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/table.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/table_models.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/table_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/tables/table_printer_base.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/text_printer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_data.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/rich_helpers.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/sca_ossf.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/sca_policy_details.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/base_file_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/config_file_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/configuration_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/credentials_manager.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/user_settings/jwt_creator.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/binary_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/enum_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/get_api_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/git_proxy.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/host_info.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/ignore_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/jwt_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/path_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/progress_bar.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/scan_batch.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/shell_executor.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/string_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/task_timer.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/trust_store.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/url_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/version_checker.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/utils/yaml_utils.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/config.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/__init__.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/ai_security_manager_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/auth_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cli_activation_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/client_creator.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/config.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/config_dev.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cycode_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cycode_client_base.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cycode_dev_based_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/cycode_token_based_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/headers.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/import_sbom_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/logger.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/models.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/report_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/scan_client.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cyclient/scan_config_base.py +0 -0
- {cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/logger.py +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.24.
|
|
8
|
+
__version__ = '3.24.1.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
@@ -30,7 +30,7 @@ from cycode.cli.apps.ai_guardrails.scan.types import (
|
|
|
30
30
|
AIHookOutcome,
|
|
31
31
|
BlockReason,
|
|
32
32
|
)
|
|
33
|
-
from cycode.cli.apps.ai_guardrails.scan.utils import is_denied_path, truncate_utf8
|
|
33
|
+
from cycode.cli.apps.ai_guardrails.scan.utils import build_violation_summary, is_denied_path, truncate_utf8
|
|
34
34
|
from cycode.cli.apps.scan.code_scanner import _get_scan_documents_thread_func
|
|
35
35
|
from cycode.cli.apps.scan.scan_parameters import get_scan_parameters
|
|
36
36
|
from cycode.cli.cli_types import ScanTypeOption, SeverityOption
|
|
@@ -38,7 +38,6 @@ from cycode.cli.files_collector.file_excluder import is_path_configured_in_exclu
|
|
|
38
38
|
from cycode.cli.models import Document
|
|
39
39
|
from cycode.cli.utils.host_info import get_hostname, get_serial_number
|
|
40
40
|
from cycode.cli.utils.progress_bar import DummyProgressBar, ScanProgressBarSection
|
|
41
|
-
from cycode.cli.utils.scan_utils import build_violation_summary
|
|
42
41
|
from cycode.logger import get_logger
|
|
43
42
|
|
|
44
43
|
logger = get_logger('AI Guardrails')
|
|
@@ -76,7 +75,7 @@ def handle_before_submit_prompt(ctx: typer.Context, payload: AIHookPayload, poli
|
|
|
76
75
|
block_reason = SECRETS_BLOCK_REASON_BY_EVENT_TYPE[AiHookEventType.PROMPT]
|
|
77
76
|
if effective_mode == GuardrailsMode.BLOCK:
|
|
78
77
|
outcome = AIHookOutcome.BLOCKED
|
|
79
|
-
user_message = f'
|
|
78
|
+
user_message = f'Remove secrets before sending. {violation_summary}'
|
|
80
79
|
return HookDecision.deny(AiHookEventType.PROMPT, user_message)
|
|
81
80
|
outcome = AIHookOutcome.WARNED
|
|
82
81
|
return HookDecision.allow(AiHookEventType.PROMPT)
|
|
@@ -283,7 +282,7 @@ def handle_before_mcp_execution(ctx: typer.Context, payload: AIHookPayload, poli
|
|
|
283
282
|
event_type=AiHookEventType.MCP_EXECUTION,
|
|
284
283
|
deny_message=lambda v: f'Cycode blocked MCP tool call "{tool}". {v}',
|
|
285
284
|
deny_agent_message='Do not pass secrets to tools. Use secret references (name/id) instead.',
|
|
286
|
-
ask_message=lambda v: f'
|
|
285
|
+
ask_message=lambda v: f'Allow MCP tool call "{tool}"? {v}',
|
|
287
286
|
ask_agent_message='Possible secrets detected in tool arguments; proceed with caution.',
|
|
288
287
|
),
|
|
289
288
|
scan_text=args_text,
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Utility functions for AI guardrails.
|
|
3
3
|
|
|
4
|
-
Includes JSON parsing, path matching,
|
|
4
|
+
Includes JSON parsing, path matching, text handling and hook-message utilities.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import json
|
|
8
8
|
import os
|
|
9
9
|
import sys
|
|
10
|
+
from collections import defaultdict
|
|
10
11
|
from pathlib import Path
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
11
13
|
|
|
12
14
|
from cycode.cli.apps.ai_guardrails.scan.policy import get_policy_value
|
|
15
|
+
from cycode.cli.cli_types import SeverityOption
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from cycode.cli.models import LocalScanResult
|
|
19
|
+
|
|
20
|
+
# Keeps the hook message readable when a single file trips dozens of detections
|
|
21
|
+
MAX_VIOLATION_DETAIL_LINES = 5
|
|
13
22
|
|
|
14
23
|
|
|
15
24
|
def read_stdin_text() -> str:
|
|
@@ -87,3 +96,52 @@ def is_denied_path(file_path: str, policy: dict) -> bool:
|
|
|
87
96
|
def output_json(obj: dict) -> None:
|
|
88
97
|
"""Write JSON response to stdout (for IDE to read)."""
|
|
89
98
|
print(json.dumps(obj), end='') # noqa: T201
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _build_detection_lines(
|
|
102
|
+
local_scan_results: list['LocalScanResult'], max_lines: int = MAX_VIOLATION_DETAIL_LINES
|
|
103
|
+
) -> str:
|
|
104
|
+
"""One line per distinct finding: what it is, and the value hash identifying it.
|
|
105
|
+
|
|
106
|
+
The value hash is safe to display; the value itself is not. Detections excluded by an existing
|
|
107
|
+
ignore rule are already gone from `document_detections`, so only what actually blocked is listed.
|
|
108
|
+
"""
|
|
109
|
+
type_by_sha = {}
|
|
110
|
+
for local_scan_result in local_scan_results:
|
|
111
|
+
for document_detections in local_scan_result.document_detections:
|
|
112
|
+
for detection in document_detections.detections:
|
|
113
|
+
sha = detection.detection_details.get('sha512')
|
|
114
|
+
if sha and sha not in type_by_sha:
|
|
115
|
+
type_by_sha[sha] = detection.type or detection.message
|
|
116
|
+
|
|
117
|
+
if not type_by_sha:
|
|
118
|
+
return ''
|
|
119
|
+
|
|
120
|
+
lines = [f' - {detection_type}: {sha}' for sha, detection_type in list(type_by_sha.items())[:max_lines]]
|
|
121
|
+
remaining = len(type_by_sha) - len(lines)
|
|
122
|
+
if remaining:
|
|
123
|
+
lines.append(f' - ...and {remaining} more')
|
|
124
|
+
|
|
125
|
+
return '\n' + '\n'.join(lines)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def build_violation_summary(local_scan_results: list['LocalScanResult']) -> str:
|
|
129
|
+
"""Build violation summary string with severity breakdown and emojis."""
|
|
130
|
+
detections_count = 0
|
|
131
|
+
severity_counts = defaultdict(int)
|
|
132
|
+
|
|
133
|
+
for local_scan_result in local_scan_results:
|
|
134
|
+
for document_detections in local_scan_result.document_detections:
|
|
135
|
+
for detection in document_detections.detections:
|
|
136
|
+
if detection.severity:
|
|
137
|
+
detections_count += 1
|
|
138
|
+
severity_counts[SeverityOption(detection.severity)] += 1
|
|
139
|
+
|
|
140
|
+
severity_parts = []
|
|
141
|
+
for severity in reversed(SeverityOption):
|
|
142
|
+
emoji = SeverityOption.get_member_unicode_emoji(severity)
|
|
143
|
+
count = severity_counts[severity]
|
|
144
|
+
severity_parts.append(f'{emoji} {severity.upper()} - {count}')
|
|
145
|
+
|
|
146
|
+
summary = f'Cycode found {detections_count} violations: {" | ".join(severity_parts)}'
|
|
147
|
+
return summary + _build_detection_lines(local_scan_results)
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from collections import defaultdict
|
|
3
2
|
from typing import TYPE_CHECKING, Optional
|
|
4
3
|
from uuid import UUID, uuid4
|
|
5
4
|
|
|
6
5
|
import typer
|
|
7
6
|
|
|
8
7
|
from cycode.cli import consts
|
|
9
|
-
from cycode.cli.cli_types import SeverityOption
|
|
10
8
|
|
|
11
9
|
if TYPE_CHECKING:
|
|
12
10
|
from cycode.cli.models import LocalScanResult
|
|
@@ -41,24 +39,3 @@ def generate_unique_scan_id() -> UUID:
|
|
|
41
39
|
return UUID(os.environ['PYTEST_TEST_UNIQUE_ID'])
|
|
42
40
|
|
|
43
41
|
return uuid4()
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def build_violation_summary(local_scan_results: list['LocalScanResult']) -> str:
|
|
47
|
-
"""Build violation summary string with severity breakdown and emojis."""
|
|
48
|
-
detections_count = 0
|
|
49
|
-
severity_counts = defaultdict(int)
|
|
50
|
-
|
|
51
|
-
for local_scan_result in local_scan_results:
|
|
52
|
-
for document_detections in local_scan_result.document_detections:
|
|
53
|
-
for detection in document_detections.detections:
|
|
54
|
-
if detection.severity:
|
|
55
|
-
detections_count += 1
|
|
56
|
-
severity_counts[SeverityOption(detection.severity)] += 1
|
|
57
|
-
|
|
58
|
-
severity_parts = []
|
|
59
|
-
for severity in reversed(SeverityOption):
|
|
60
|
-
emoji = SeverityOption.get_member_unicode_emoji(severity)
|
|
61
|
-
count = severity_counts[severity]
|
|
62
|
-
severity_parts.append(f'{emoji} {severity.upper()} - {count}')
|
|
63
|
-
|
|
64
|
-
return f'Cycode found {detections_count} violations: {" | ".join(severity_parts)}'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import secrets
|
|
2
|
+
import time
|
|
1
3
|
from abc import ABC, abstractmethod
|
|
2
4
|
from threading import Lock
|
|
3
5
|
from typing import Any, Optional
|
|
@@ -5,6 +7,7 @@ from typing import Any, Optional
|
|
|
5
7
|
import arrow
|
|
6
8
|
from requests import Response
|
|
7
9
|
|
|
10
|
+
from cycode.cli.exceptions.custom_exceptions import HttpUnauthorizedError
|
|
8
11
|
from cycode.cli.user_settings.credentials_manager import CredentialsManager
|
|
9
12
|
from cycode.cli.user_settings.jwt_creator import JwtCreator
|
|
10
13
|
from cycode.cyclient.cycode_client import CycodeClient
|
|
@@ -15,6 +18,11 @@ _NGINX_PLAIN_ERRORS = [
|
|
|
15
18
|
b'JWT Token validation failed',
|
|
16
19
|
]
|
|
17
20
|
|
|
21
|
+
# Identity provider brute-force protection rejects logins for the same user that land within
|
|
22
|
+
# milliseconds of each other, so when several processes mint at once all but one are refused.
|
|
23
|
+
_MINT_CONFLICT_RETRY_MIN_MS = 50
|
|
24
|
+
_MINT_CONFLICT_RETRY_SPREAD_MS = 100
|
|
25
|
+
|
|
18
26
|
|
|
19
27
|
class BaseTokenAuthClient(CycodeClient, ABC):
|
|
20
28
|
"""Base client for token-based authentication flows with cached JWTs."""
|
|
@@ -49,7 +57,20 @@ class BaseTokenAuthClient(CycodeClient, ABC):
|
|
|
49
57
|
self._load_token_from_disk()
|
|
50
58
|
if self._has_valid_token():
|
|
51
59
|
return
|
|
52
|
-
|
|
60
|
+
|
|
61
|
+
try:
|
|
62
|
+
self.refresh_access_token()
|
|
63
|
+
except HttpUnauthorizedError:
|
|
64
|
+
# Processes sharing one cached token all expire at the same instant, so a burst of
|
|
65
|
+
# them mints together and the identity provider refuses all but the first as a
|
|
66
|
+
# too-fast login. The winner persists a usable token, so prefer re-reading it over
|
|
67
|
+
# minting again. The wait is randomized to keep the losers from colliding a second
|
|
68
|
+
# time. A genuinely invalid token still raises on the retry.
|
|
69
|
+
time.sleep((_MINT_CONFLICT_RETRY_MIN_MS + secrets.randbelow(_MINT_CONFLICT_RETRY_SPREAD_MS)) / 1000)
|
|
70
|
+
self._load_token_from_disk()
|
|
71
|
+
if self._has_valid_token():
|
|
72
|
+
return
|
|
73
|
+
self.refresh_access_token()
|
|
53
74
|
|
|
54
75
|
def _has_valid_token(self) -> bool:
|
|
55
76
|
return self._access_token is not None and self._expires_in is not None and arrow.utcnow() < self._expires_in
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/ai_remediation/ai_remediation_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/commit_history/commit_history_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/base_restore_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_bun_dependencies.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/__init__.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/common_ordering.py
RENAMED
|
File without changes
|
{cycode-3.24.0 → cycode-3.24.1.dev2}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|