cycode 3.11.6.dev1__tar.gz → 3.12.1.dev1__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.11.6.dev1 → cycode-3.12.1.dev1}/PKG-INFO +35 -5
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/README.md +34 -4
- cycode-3.12.1.dev1/cycode/__init__.py +1 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/mcp/mcp_command.py +134 -48
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/pyproject.toml +1 -1
- cycode-3.11.6.dev1/cycode/__init__.py +0 -1
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/LICENCE +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/__main__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/app.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/activation_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/ensure_auth_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/response_builders.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/auth/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/auth/auth_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/auth/auth_common.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/auth/auth_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/auth/models.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/configure/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/configure/configure_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/configure/consts.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/configure/messages.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/configure/prompts.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ignore/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/mcp/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/report_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/common.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/report_import_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/sca_options.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/code_scanner.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/commit_range_scanner.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/path/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/path/path_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_parameters.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/scan_result.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/status/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/status/get_cli_status.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/status/models.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/status/status_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/status/version_command.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/cli_types.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/config.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/console.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/consts.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/handle_errors.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/commit_range_documents.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/file_excluder.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/iac/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/models/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/path_documents.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/repository_documents.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/walk_ignore.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/files_collector/zip_documents.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/logger.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/main.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/models.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/console_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/json_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/printer_base.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/rich_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/table.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/table_models.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/table_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/text_printer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/detection_data.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/base_file_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/config_file_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/configuration_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/credentials_manager.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/user_settings/jwt_creator.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/binary_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/enum_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/get_api_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/git_proxy.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/ignore_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/jwt_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/path_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/progress_bar.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/scan_batch.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/scan_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/shell_executor.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/string_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/task_timer.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/url_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/version_checker.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/utils/yaml_utils.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/config.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/__init__.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/ai_security_manager_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/auth_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/base_token_auth_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cli_activation_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/client_creator.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/config.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/config_dev.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cycode_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cycode_client_base.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/cycode_token_based_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/headers.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/import_sbom_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/logger.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/models.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/report_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/scan_client.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cyclient/scan_config_base.py +0 -0
- {cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/logger.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cycode
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.12.1.dev1
|
|
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
|
|
@@ -425,12 +425,22 @@ The MCP server provides the following tools that AI systems can use:
|
|
|
425
425
|
|
|
426
426
|
| Tool Name | Description |
|
|
427
427
|
|----------------------|---------------------------------------------------------------------------------------------|
|
|
428
|
-
| `cycode_secret_scan` | Scan
|
|
429
|
-
| `cycode_sca_scan` | Scan
|
|
430
|
-
| `cycode_iac_scan` | Scan
|
|
431
|
-
| `cycode_sast_scan` | Scan
|
|
428
|
+
| `cycode_secret_scan` | Scan for hardcoded secrets |
|
|
429
|
+
| `cycode_sca_scan` | Scan for Software Composition Analysis (SCA) - vulnerabilities and license issues |
|
|
430
|
+
| `cycode_iac_scan` | Scan for Infrastructure as Code (IaC) misconfigurations |
|
|
431
|
+
| `cycode_sast_scan` | Scan for Static Application Security Testing (SAST) - code quality and security flaws |
|
|
432
432
|
| `cycode_status` | Get Cycode CLI version, authentication status, and configuration information |
|
|
433
433
|
|
|
434
|
+
Each scan tool accepts two mutually exclusive input modes:
|
|
435
|
+
|
|
436
|
+
- **`paths`** *(preferred)* — one or more file or directory paths that exist on disk. Directories are scanned recursively. The Cycode engine handles file discovery and filtering, just as `cycode scan -t <type> path ./src` does from the CLI.
|
|
437
|
+
- **`files`** *(fallback)* — a dictionary mapping file paths to their full content as strings. Use this only when the files are not available on disk (e.g. in-memory edits not yet saved).
|
|
438
|
+
|
|
439
|
+
> [!TIP]
|
|
440
|
+
> Use `paths` whenever possible. Passing large files (like `package-lock.json`) as inline content can exceed token limits and slow down the AI client. With `paths`, the Cycode engine reads files directly from disk.
|
|
441
|
+
|
|
442
|
+
All scan tools return a JSON object that includes a `"summary"` field with a human-readable violation count (e.g. `"Cycode found 3 violations: 1 CRITICAL, 2 HIGH."`) in addition to the full `"detections"` array.
|
|
443
|
+
|
|
434
444
|
### Usage Examples
|
|
435
445
|
|
|
436
446
|
#### Basic Command Examples
|
|
@@ -588,6 +598,26 @@ cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
|
|
|
588
598
|
> [!NOTE]
|
|
589
599
|
> The MCP server requires proper Cycode CLI authentication to function. Make sure you have authenticated using `cycode auth` or configured your credentials before starting the MCP server.
|
|
590
600
|
|
|
601
|
+
### Pre-authorizing Tools for Subagents (Claude Code)
|
|
602
|
+
|
|
603
|
+
When Claude Code delegates work to background subagents (e.g. to run scans in parallel), those subagents cannot display interactive permission prompts. If the Cycode tools have not been pre-approved, scans will fail silently in subagent contexts.
|
|
604
|
+
|
|
605
|
+
To pre-authorize the Cycode MCP tools so they work in all contexts including subagents, add them to the `allowedTools` list in your Claude Code settings (`~/.claude/settings.json`):
|
|
606
|
+
|
|
607
|
+
```json
|
|
608
|
+
{
|
|
609
|
+
"allowedTools": [
|
|
610
|
+
"mcp__cycode__cycode_secret_scan",
|
|
611
|
+
"mcp__cycode__cycode_sca_scan",
|
|
612
|
+
"mcp__cycode__cycode_iac_scan",
|
|
613
|
+
"mcp__cycode__cycode_sast_scan",
|
|
614
|
+
"mcp__cycode__cycode_status"
|
|
615
|
+
]
|
|
616
|
+
}
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
Once added, Claude Code will not prompt for approval when these tools are called, and they will work correctly inside subagents.
|
|
620
|
+
|
|
591
621
|
### Troubleshooting MCP
|
|
592
622
|
|
|
593
623
|
If you encounter issues with the MCP server, you can enable debug logging to get more detailed information about what's happening. There are two ways to enable debug logging:
|
|
@@ -384,12 +384,22 @@ The MCP server provides the following tools that AI systems can use:
|
|
|
384
384
|
|
|
385
385
|
| Tool Name | Description |
|
|
386
386
|
|----------------------|---------------------------------------------------------------------------------------------|
|
|
387
|
-
| `cycode_secret_scan` | Scan
|
|
388
|
-
| `cycode_sca_scan` | Scan
|
|
389
|
-
| `cycode_iac_scan` | Scan
|
|
390
|
-
| `cycode_sast_scan` | Scan
|
|
387
|
+
| `cycode_secret_scan` | Scan for hardcoded secrets |
|
|
388
|
+
| `cycode_sca_scan` | Scan for Software Composition Analysis (SCA) - vulnerabilities and license issues |
|
|
389
|
+
| `cycode_iac_scan` | Scan for Infrastructure as Code (IaC) misconfigurations |
|
|
390
|
+
| `cycode_sast_scan` | Scan for Static Application Security Testing (SAST) - code quality and security flaws |
|
|
391
391
|
| `cycode_status` | Get Cycode CLI version, authentication status, and configuration information |
|
|
392
392
|
|
|
393
|
+
Each scan tool accepts two mutually exclusive input modes:
|
|
394
|
+
|
|
395
|
+
- **`paths`** *(preferred)* — one or more file or directory paths that exist on disk. Directories are scanned recursively. The Cycode engine handles file discovery and filtering, just as `cycode scan -t <type> path ./src` does from the CLI.
|
|
396
|
+
- **`files`** *(fallback)* — a dictionary mapping file paths to their full content as strings. Use this only when the files are not available on disk (e.g. in-memory edits not yet saved).
|
|
397
|
+
|
|
398
|
+
> [!TIP]
|
|
399
|
+
> Use `paths` whenever possible. Passing large files (like `package-lock.json`) as inline content can exceed token limits and slow down the AI client. With `paths`, the Cycode engine reads files directly from disk.
|
|
400
|
+
|
|
401
|
+
All scan tools return a JSON object that includes a `"summary"` field with a human-readable violation count (e.g. `"Cycode found 3 violations: 1 CRITICAL, 2 HIGH."`) in addition to the full `"detections"` array.
|
|
402
|
+
|
|
393
403
|
### Usage Examples
|
|
394
404
|
|
|
395
405
|
#### Basic Command Examples
|
|
@@ -547,6 +557,26 @@ cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
|
|
|
547
557
|
> [!NOTE]
|
|
548
558
|
> The MCP server requires proper Cycode CLI authentication to function. Make sure you have authenticated using `cycode auth` or configured your credentials before starting the MCP server.
|
|
549
559
|
|
|
560
|
+
### Pre-authorizing Tools for Subagents (Claude Code)
|
|
561
|
+
|
|
562
|
+
When Claude Code delegates work to background subagents (e.g. to run scans in parallel), those subagents cannot display interactive permission prompts. If the Cycode tools have not been pre-approved, scans will fail silently in subagent contexts.
|
|
563
|
+
|
|
564
|
+
To pre-authorize the Cycode MCP tools so they work in all contexts including subagents, add them to the `allowedTools` list in your Claude Code settings (`~/.claude/settings.json`):
|
|
565
|
+
|
|
566
|
+
```json
|
|
567
|
+
{
|
|
568
|
+
"allowedTools": [
|
|
569
|
+
"mcp__cycode__cycode_secret_scan",
|
|
570
|
+
"mcp__cycode__cycode_sca_scan",
|
|
571
|
+
"mcp__cycode__cycode_iac_scan",
|
|
572
|
+
"mcp__cycode__cycode_sast_scan",
|
|
573
|
+
"mcp__cycode__cycode_status"
|
|
574
|
+
]
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
Once added, Claude Code will not prompt for approval when these tools are called, and they will work correctly inside subagents.
|
|
579
|
+
|
|
550
580
|
### Troubleshooting MCP
|
|
551
581
|
|
|
552
582
|
If you encounter issues with the MCP server, you can enable debug logging to get more detailed information about what's happening. There are two ways to enable debug logging:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '3.12.1.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
@@ -6,7 +6,7 @@ import shutil
|
|
|
6
6
|
import sys
|
|
7
7
|
import tempfile
|
|
8
8
|
import uuid
|
|
9
|
-
from typing import Annotated, Any
|
|
9
|
+
from typing import Annotated, Any, Optional
|
|
10
10
|
|
|
11
11
|
import typer
|
|
12
12
|
from pathvalidate import sanitize_filepath
|
|
@@ -28,7 +28,25 @@ _logger = get_logger('Cycode MCP')
|
|
|
28
28
|
|
|
29
29
|
_DEFAULT_RUN_COMMAND_TIMEOUT = 10 * 60
|
|
30
30
|
|
|
31
|
-
_FILES_TOOL_FIELD = Field(
|
|
31
|
+
_FILES_TOOL_FIELD = Field(
|
|
32
|
+
default=None,
|
|
33
|
+
description=(
|
|
34
|
+
'Files to scan, mapping file paths to their content. '
|
|
35
|
+
'Provide either this or "paths". '
|
|
36
|
+
'Note: for large codebases, prefer "paths" to avoid token overhead.'
|
|
37
|
+
),
|
|
38
|
+
)
|
|
39
|
+
_PATHS_TOOL_FIELD = Field(
|
|
40
|
+
default=None,
|
|
41
|
+
description=(
|
|
42
|
+
'Paths to scan — file paths or directory paths that exist on disk. '
|
|
43
|
+
'Directories are scanned recursively. '
|
|
44
|
+
'Provide either this or "files". '
|
|
45
|
+
'Preferred over "files" when the files already exist on disk.'
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
_SEVERITY_ORDER = ('CRITICAL', 'HIGH', 'MEDIUM', 'LOW')
|
|
32
50
|
|
|
33
51
|
|
|
34
52
|
def _is_debug_mode() -> bool:
|
|
@@ -163,9 +181,9 @@ class _TempFilesManager:
|
|
|
163
181
|
shutil.rmtree(self.temp_base_dir, ignore_errors=True)
|
|
164
182
|
|
|
165
183
|
|
|
166
|
-
async def _run_cycode_scan(scan_type: ScanTypeOption,
|
|
184
|
+
async def _run_cycode_scan(scan_type: ScanTypeOption, paths: list[str]) -> dict[str, Any]:
|
|
167
185
|
"""Run cycode scan command and return the result."""
|
|
168
|
-
return await _run_cycode_command(*['scan', '-t', str(scan_type), 'path', *
|
|
186
|
+
return await _run_cycode_command(*['scan', '-t', str(scan_type), 'path', *paths])
|
|
169
187
|
|
|
170
188
|
|
|
171
189
|
async def _run_cycode_status() -> dict[str, Any]:
|
|
@@ -173,38 +191,89 @@ async def _run_cycode_status() -> dict[str, Any]:
|
|
|
173
191
|
return await _run_cycode_command('status')
|
|
174
192
|
|
|
175
193
|
|
|
176
|
-
|
|
194
|
+
def _build_scan_summary(result: dict[str, Any]) -> str:
|
|
195
|
+
"""Build a human-readable summary line from a scan result dict.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
result: Parsed JSON scan result from the CLI.
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
A one-line summary string describing what was found.
|
|
202
|
+
"""
|
|
203
|
+
detections = result.get('detections', [])
|
|
204
|
+
errors = result.get('errors', [])
|
|
205
|
+
|
|
206
|
+
if not detections:
|
|
207
|
+
if errors:
|
|
208
|
+
return f'Scan completed with {len(errors)} error(s) and no violations found.'
|
|
209
|
+
return 'No violations found.'
|
|
210
|
+
|
|
211
|
+
total = len(detections)
|
|
212
|
+
severity_counts: dict[str, int] = {}
|
|
213
|
+
for d in detections:
|
|
214
|
+
sev = (d.get('severity') or 'UNKNOWN').upper()
|
|
215
|
+
severity_counts[sev] = severity_counts.get(sev, 0) + 1
|
|
216
|
+
|
|
217
|
+
parts = [f'{severity_counts[s]} {s}' for s in _SEVERITY_ORDER if s in severity_counts]
|
|
218
|
+
other_keys = [k for k in severity_counts if k not in _SEVERITY_ORDER]
|
|
219
|
+
parts += [f'{severity_counts[k]} {k}' for k in other_keys]
|
|
220
|
+
|
|
221
|
+
label = 'violation' if total == 1 else 'violations'
|
|
222
|
+
return f'Cycode found {total} {label}: {", ".join(parts)}.'
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
async def _cycode_scan_tool(
|
|
226
|
+
scan_type: ScanTypeOption,
|
|
227
|
+
files: Optional[dict[str, str]] = None,
|
|
228
|
+
paths: Optional[list[str]] = None,
|
|
229
|
+
) -> str:
|
|
177
230
|
_tool_call_id = _gen_random_id()
|
|
178
231
|
_logger.info('Scan tool called, %s', {'scan_type': scan_type, 'call_id': _tool_call_id})
|
|
179
232
|
|
|
180
|
-
if not files:
|
|
181
|
-
_logger.error('No files provided for scan')
|
|
182
|
-
return json.dumps(
|
|
233
|
+
if not files and not paths:
|
|
234
|
+
_logger.error('No files or paths provided for scan')
|
|
235
|
+
return json.dumps(
|
|
236
|
+
{'error': 'No files or paths provided. Pass file contents via "files" or disk paths via "paths".'}
|
|
237
|
+
)
|
|
183
238
|
|
|
184
239
|
try:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if processed_count < original_count:
|
|
190
|
-
_logger.warning(
|
|
191
|
-
'Some files were rejected during sanitization, %s',
|
|
192
|
-
{
|
|
193
|
-
'scan_type': scan_type,
|
|
194
|
-
'original_count': original_count,
|
|
195
|
-
'processed_count': processed_count,
|
|
196
|
-
'call_id': _tool_call_id,
|
|
197
|
-
},
|
|
198
|
-
)
|
|
240
|
+
if paths:
|
|
241
|
+
missing = [p for p in paths if not os.path.exists(p)]
|
|
242
|
+
if missing:
|
|
243
|
+
return json.dumps({'error': f'Paths not found on disk: {missing}'}, indent=2)
|
|
199
244
|
|
|
200
245
|
_logger.info(
|
|
201
|
-
'Running Cycode scan, %s',
|
|
202
|
-
{'scan_type': scan_type, '
|
|
246
|
+
'Running Cycode scan (path-based), %s',
|
|
247
|
+
{'scan_type': scan_type, 'paths': paths, 'call_id': _tool_call_id},
|
|
203
248
|
)
|
|
204
|
-
result = await _run_cycode_scan(scan_type,
|
|
249
|
+
result = await _run_cycode_scan(scan_type, paths)
|
|
250
|
+
else:
|
|
251
|
+
with _TempFilesManager(files, _tool_call_id) as temp_files:
|
|
252
|
+
original_count = len(files)
|
|
253
|
+
processed_count = len(temp_files)
|
|
254
|
+
|
|
255
|
+
if processed_count < original_count:
|
|
256
|
+
_logger.warning(
|
|
257
|
+
'Some files were rejected during sanitization, %s',
|
|
258
|
+
{
|
|
259
|
+
'scan_type': scan_type,
|
|
260
|
+
'original_count': original_count,
|
|
261
|
+
'processed_count': processed_count,
|
|
262
|
+
'call_id': _tool_call_id,
|
|
263
|
+
},
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
_logger.info(
|
|
267
|
+
'Running Cycode scan (files-based), %s',
|
|
268
|
+
{'scan_type': scan_type, 'files_count': processed_count, 'call_id': _tool_call_id},
|
|
269
|
+
)
|
|
270
|
+
result = await _run_cycode_scan(scan_type, temp_files)
|
|
205
271
|
|
|
206
|
-
|
|
207
|
-
|
|
272
|
+
if 'error' not in result:
|
|
273
|
+
result['summary'] = _build_scan_summary(result)
|
|
274
|
+
|
|
275
|
+
_logger.info('Scan completed, %s', {'scan_type': scan_type, 'call_id': _tool_call_id})
|
|
276
|
+
return json.dumps(result, indent=2)
|
|
208
277
|
except ValueError as e:
|
|
209
278
|
_logger.error('Invalid input files, %s', {'scan_type': scan_type, 'call_id': _tool_call_id, 'error': str(e)})
|
|
210
279
|
return json.dumps({'error': f'Invalid input files: {e!s}'}, indent=2)
|
|
@@ -213,8 +282,11 @@ async def _cycode_scan_tool(scan_type: ScanTypeOption, files: dict[str, str] = _
|
|
|
213
282
|
return json.dumps({'error': f'Scan failed: {e!s}'}, indent=2)
|
|
214
283
|
|
|
215
284
|
|
|
216
|
-
async def cycode_secret_scan(
|
|
217
|
-
|
|
285
|
+
async def cycode_secret_scan(
|
|
286
|
+
paths: Optional[list[str]] = _PATHS_TOOL_FIELD,
|
|
287
|
+
files: Optional[dict[str, str]] = _FILES_TOOL_FIELD,
|
|
288
|
+
) -> str:
|
|
289
|
+
"""Scan for hardcoded secrets.
|
|
218
290
|
|
|
219
291
|
Use this tool when you need to:
|
|
220
292
|
- scan code for hardcoded secrets, API keys, passwords, tokens
|
|
@@ -222,16 +294,20 @@ async def cycode_secret_scan(files: dict[str, str] = _FILES_TOOL_FIELD) -> str:
|
|
|
222
294
|
- detect potential security vulnerabilities from secret exposure
|
|
223
295
|
|
|
224
296
|
Args:
|
|
225
|
-
|
|
297
|
+
paths: File or directory paths on disk to scan (preferred). Directories are scanned recursively.
|
|
298
|
+
files: Dictionary mapping file paths to their content (fallback when files are not on disk).
|
|
226
299
|
|
|
227
300
|
Returns:
|
|
228
|
-
JSON string
|
|
301
|
+
JSON string with a "summary" field (human-readable violation count) plus full scan results.
|
|
229
302
|
"""
|
|
230
|
-
return await _cycode_scan_tool(ScanTypeOption.SECRET, files)
|
|
303
|
+
return await _cycode_scan_tool(ScanTypeOption.SECRET, files=files, paths=paths)
|
|
231
304
|
|
|
232
305
|
|
|
233
|
-
async def cycode_sca_scan(
|
|
234
|
-
|
|
306
|
+
async def cycode_sca_scan(
|
|
307
|
+
paths: Optional[list[str]] = _PATHS_TOOL_FIELD,
|
|
308
|
+
files: Optional[dict[str, str]] = _FILES_TOOL_FIELD,
|
|
309
|
+
) -> str:
|
|
310
|
+
"""Scan for Software Composition Analysis (SCA) - vulnerabilities and license issues.
|
|
235
311
|
|
|
236
312
|
Use this tool when you need to:
|
|
237
313
|
- scan dependencies for known security vulnerabilities
|
|
@@ -242,19 +318,24 @@ async def cycode_sca_scan(files: dict[str, str] = _FILES_TOOL_FIELD) -> str:
|
|
|
242
318
|
|
|
243
319
|
Important:
|
|
244
320
|
You must also include lock files (like package-lock.json, Pipfile.lock, etc.) to get accurate results.
|
|
245
|
-
|
|
321
|
+
When using "paths", pass the directory containing both manifest and lock files.
|
|
322
|
+
When using "files", provide both manifest and lock files together.
|
|
246
323
|
|
|
247
324
|
Args:
|
|
248
|
-
|
|
325
|
+
paths: File or directory paths on disk to scan (preferred). Directories are scanned recursively.
|
|
326
|
+
files: Dictionary mapping file paths to their content (fallback when files are not on disk).
|
|
249
327
|
|
|
250
328
|
Returns:
|
|
251
|
-
JSON string
|
|
329
|
+
JSON string with a "summary" field (human-readable violation count) plus full scan results.
|
|
252
330
|
"""
|
|
253
|
-
return await _cycode_scan_tool(ScanTypeOption.SCA, files)
|
|
331
|
+
return await _cycode_scan_tool(ScanTypeOption.SCA, files=files, paths=paths)
|
|
254
332
|
|
|
255
333
|
|
|
256
|
-
async def cycode_iac_scan(
|
|
257
|
-
|
|
334
|
+
async def cycode_iac_scan(
|
|
335
|
+
paths: Optional[list[str]] = _PATHS_TOOL_FIELD,
|
|
336
|
+
files: Optional[dict[str, str]] = _FILES_TOOL_FIELD,
|
|
337
|
+
) -> str:
|
|
338
|
+
"""Scan for Infrastructure as Code (IaC) misconfigurations.
|
|
258
339
|
|
|
259
340
|
Use this tool when you need to:
|
|
260
341
|
- scan Terraform, CloudFormation, Kubernetes YAML files
|
|
@@ -264,16 +345,20 @@ async def cycode_iac_scan(files: dict[str, str] = _FILES_TOOL_FIELD) -> str:
|
|
|
264
345
|
- review Docker files for security issues
|
|
265
346
|
|
|
266
347
|
Args:
|
|
267
|
-
|
|
348
|
+
paths: File or directory paths on disk to scan (preferred). Directories are scanned recursively.
|
|
349
|
+
files: Dictionary mapping file paths to their content (fallback when files are not on disk).
|
|
268
350
|
|
|
269
351
|
Returns:
|
|
270
|
-
JSON string
|
|
352
|
+
JSON string with a "summary" field (human-readable violation count) plus full scan results.
|
|
271
353
|
"""
|
|
272
|
-
return await _cycode_scan_tool(ScanTypeOption.IAC, files)
|
|
354
|
+
return await _cycode_scan_tool(ScanTypeOption.IAC, files=files, paths=paths)
|
|
273
355
|
|
|
274
356
|
|
|
275
|
-
async def cycode_sast_scan(
|
|
276
|
-
|
|
357
|
+
async def cycode_sast_scan(
|
|
358
|
+
paths: Optional[list[str]] = _PATHS_TOOL_FIELD,
|
|
359
|
+
files: Optional[dict[str, str]] = _FILES_TOOL_FIELD,
|
|
360
|
+
) -> str:
|
|
361
|
+
"""Scan for Static Application Security Testing (SAST) - code quality and security flaws.
|
|
277
362
|
|
|
278
363
|
Use this tool when you need to:
|
|
279
364
|
- scan source code for security vulnerabilities
|
|
@@ -283,12 +368,13 @@ async def cycode_sast_scan(files: dict[str, str] = _FILES_TOOL_FIELD) -> str:
|
|
|
283
368
|
- find SQL injection, XSS, and other application security issues
|
|
284
369
|
|
|
285
370
|
Args:
|
|
286
|
-
|
|
371
|
+
paths: File or directory paths on disk to scan (preferred). Directories are scanned recursively.
|
|
372
|
+
files: Dictionary mapping file paths to their content (fallback when files are not on disk).
|
|
287
373
|
|
|
288
374
|
Returns:
|
|
289
|
-
JSON string
|
|
375
|
+
JSON string with a "summary" field (human-readable violation count) plus full scan results.
|
|
290
376
|
"""
|
|
291
|
-
return await _cycode_scan_tool(ScanTypeOption.SAST, files)
|
|
377
|
+
return await _cycode_scan_tool(ScanTypeOption.SAST, files=files, paths=paths)
|
|
292
378
|
|
|
293
379
|
|
|
294
380
|
async def cycode_status() -> str:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '3.11.6.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
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.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/ensure_auth_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
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/response_builders.py
RENAMED
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/ai_remediation/print_remediation.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
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/report_import_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/report_import/sbom/sbom_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
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.11.6.dev1 → cycode-3.12.1.dev1}/cycode/cli/apps/scan/repository/repository_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
|