cycode 3.20.1.dev3__py3-none-any.whl → 3.21.1.dev1__py3-none-any.whl

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/__init__.py CHANGED
@@ -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.20.1.dev3' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
8
+ __version__ = '3.21.1.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
@@ -93,7 +93,11 @@ def scan_command(
93
93
  help='Specify the type of SCA scan you wish to execute.',
94
94
  rich_help_panel=_SCA_RICH_HELP_PANEL,
95
95
  ),
96
- ] = (ScaScanTypeOption.PACKAGE_VULNERABILITIES, ScaScanTypeOption.LICENSE_COMPLIANCE),
96
+ ] = (
97
+ ScaScanTypeOption.PACKAGE_VULNERABILITIES,
98
+ ScaScanTypeOption.LICENSE_COMPLIANCE,
99
+ ScaScanTypeOption.UNMAINTAINED_PACKAGES,
100
+ ),
97
101
  monitor: Annotated[
98
102
  bool,
99
103
  typer.Option(
@@ -16,6 +16,7 @@ def _get_default_scan_parameters(ctx: typer.Context) -> dict:
16
16
  'report': ctx.obj.get('report'),
17
17
  'package_vulnerabilities': ctx.obj.get('package-vulnerabilities'),
18
18
  'license_compliance': ctx.obj.get('license-compliance'),
19
+ 'maintainability': ctx.obj.get('unmaintained-packages', False),
19
20
  'command_type': ctx.info_name.replace('-', '_'), # save backward compatibility
20
21
  'aggregation_id': str(generate_unique_scan_id()),
21
22
  'cli_start_time': _BOOT_WALL,
cycode/cli/cli_types.py CHANGED
@@ -40,6 +40,7 @@ class ScanTypeOption(StrEnum):
40
40
  class ScaScanTypeOption(StrEnum):
41
41
  PACKAGE_VULNERABILITIES = 'package-vulnerabilities'
42
42
  LICENSE_COMPLIANCE = 'license-compliance'
43
+ UNMAINTAINED_PACKAGES = 'unmaintained-packages'
43
44
 
44
45
 
45
46
  class SbomFormatOption(StrEnum):
cycode/cli/consts.py CHANGED
@@ -314,6 +314,7 @@ SCAN_ERROR_STATUS_CODE = 2
314
314
 
315
315
  LICENSE_COMPLIANCE_POLICY_ID = '8f681450-49e1-4f7e-85b7-0c8fe84b3a35'
316
316
  PACKAGE_VULNERABILITY_POLICY_ID = '9369d10a-9ac0-48d3-9921-5de7fe9a37a7'
317
+ UNMAINTAINED_PACKAGE_POLICY_ID = '7b45ee1f-ee08-4353-a00a-2586db27b0f1'
317
318
 
318
319
  # Shortcut dependency paths by remove all middle dependencies
319
320
  # between direct dependency and influence/vulnerable dependency.
@@ -16,6 +16,7 @@ from cycode.cli.printers.utils.detection_data import (
16
16
  )
17
17
  from cycode.cli.printers.utils.detection_ordering.common_ordering import sort_and_group_detections_from_scan_result
18
18
  from cycode.cli.printers.utils.rich_helpers import get_columns_in_1_to_3_ratio, get_markdown_panel, get_panel
19
+ from cycode.cli.printers.utils.sca_policy_details import get_sca_policy_details
19
20
 
20
21
  if TYPE_CHECKING:
21
22
  from cycode.cli.models import CliError, Detection, Document, LocalScanResult
@@ -86,19 +87,14 @@ class RichPrinter(TextPrinter):
86
87
  def __add_sca_scan_related_rows(details_table: Table, detection: 'Detection') -> None:
87
88
  detection_details = detection.detection_details
88
89
 
89
- details_table.add_row('CVEs', get_detection_clickable_cwe_cve(consts.SCA_SCAN_TYPE, detection))
90
90
  details_table.add_row('Package', detection_details.get('package_name'))
91
91
  details_table.add_row('Version', detection_details.get('package_version'))
92
92
 
93
- if detection.has_alert:
94
- patched_version = detection_details['alert'].get('first_patched_version')
95
- details_table.add_row('First patched version', patched_version or 'Not fixed')
96
-
97
93
  dependency_path = detection_details.get('dependency_paths')
98
94
  details_table.add_row('Dependency path', dependency_path or 'N/A')
99
95
 
100
- if not detection.has_alert:
101
- details_table.add_row('License', detection_details.get('license'))
96
+ for label, value in get_sca_policy_details(detection):
97
+ details_table.add_row(label, value)
102
98
 
103
99
  @staticmethod
104
100
  def __add_iac_scan_related_rows(details_table: Table, detection: 'Detection') -> None:
@@ -2,13 +2,18 @@ from collections import defaultdict
2
2
  from typing import TYPE_CHECKING
3
3
 
4
4
  from cycode.cli.cli_types import SeverityOption
5
- from cycode.cli.consts import LICENSE_COMPLIANCE_POLICY_ID, PACKAGE_VULNERABILITY_POLICY_ID
5
+ from cycode.cli.consts import (
6
+ LICENSE_COMPLIANCE_POLICY_ID,
7
+ PACKAGE_VULNERABILITY_POLICY_ID,
8
+ UNMAINTAINED_PACKAGE_POLICY_ID,
9
+ )
6
10
  from cycode.cli.models import Detection
7
11
  from cycode.cli.printers.tables.table import Table
8
12
  from cycode.cli.printers.tables.table_models import ColumnInfoBuilder
9
13
  from cycode.cli.printers.tables.table_printer_base import TablePrinterBase
10
14
  from cycode.cli.printers.utils import is_git_diff_based_scan
11
15
  from cycode.cli.printers.utils.detection_ordering.sca_ordering import sort_and_group_detections
16
+ from cycode.cli.printers.utils.sca_ossf import get_maintained_score
12
17
  from cycode.cli.utils.string_utils import shortcut_dependency_paths
13
18
 
14
19
  if TYPE_CHECKING:
@@ -23,6 +28,7 @@ CODE_PROJECT_COLUMN = column_builder.build(name='Code Project', highlight=False)
23
28
  ECOSYSTEM_COLUMN = column_builder.build(name='Ecosystem', highlight=False)
24
29
  PACKAGE_COLUMN = column_builder.build(name='Package', highlight=False)
25
30
  CVE_COLUMNS = column_builder.build(name='CVE', highlight=False)
31
+ MAINTAINED_SCORE_COLUMN = column_builder.build(name='Maintained Score', highlight=False)
26
32
  DEPENDENCY_PATHS_COLUMN = column_builder.build(name='Dependency Paths')
27
33
  UPGRADE_COLUMN = column_builder.build(name='Upgrade')
28
34
  LICENSE_COLUMN = column_builder.build(name='License', highlight=False)
@@ -51,6 +57,8 @@ class ScaTablePrinter(TablePrinterBase):
51
57
  return 'Dependency Vulnerabilities'
52
58
  if policy_id == LICENSE_COMPLIANCE_POLICY_ID:
53
59
  return 'License Compliance'
60
+ if policy_id == UNMAINTAINED_PACKAGE_POLICY_ID:
61
+ return 'Unmaintained Packages'
54
62
 
55
63
  return 'Unknown'
56
64
 
@@ -62,6 +70,8 @@ class ScaTablePrinter(TablePrinterBase):
62
70
  table.add_column(UPGRADE_COLUMN)
63
71
  elif policy_id == LICENSE_COMPLIANCE_POLICY_ID:
64
72
  table.add_column(LICENSE_COLUMN)
73
+ elif policy_id == UNMAINTAINED_PACKAGE_POLICY_ID:
74
+ table.add_column(MAINTAINED_SCORE_COLUMN)
65
75
 
66
76
  if is_git_diff_based_scan(self.command_scan_type):
67
77
  table.add_column(REPOSITORY_COLUMN)
@@ -120,6 +130,10 @@ class ScaTablePrinter(TablePrinterBase):
120
130
  table.add_cell(CVE_COLUMNS, detection_details.get('vulnerability_id'))
121
131
  table.add_cell(LICENSE_COLUMN, detection_details.get('license'))
122
132
 
133
+ if detection.detection_type_id == UNMAINTAINED_PACKAGE_POLICY_ID:
134
+ maintained_score = get_maintained_score(detection_details)
135
+ table.add_cell(MAINTAINED_SCORE_COLUMN, 'N/A' if maintained_score is None else str(maintained_score))
136
+
123
137
  def _print_summary_issues(self, detections_count: int, title: str) -> None:
124
138
  self.console.print(f'[bold]Cycode found {detections_count} violations of type: [cyan]{title}[/]')
125
139
 
@@ -7,6 +7,7 @@ from cycode.cli.printers.printer_base import PrinterBase
7
7
  from cycode.cli.printers.utils.code_snippet_syntax import get_code_snippet_syntax, get_detection_line
8
8
  from cycode.cli.printers.utils.detection_data import get_detection_title
9
9
  from cycode.cli.printers.utils.detection_ordering.common_ordering import sort_and_group_detections_from_scan_result
10
+ from cycode.cli.printers.utils.sca_policy_details import get_sca_policy_details
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from cycode.cli.models import Detection, LocalScanResult
@@ -82,18 +83,7 @@ class TextPrinter(PrinterBase):
82
83
 
83
84
  @staticmethod
84
85
  def __get_sca_related_summary_lines(detection: 'Detection') -> list[str]:
85
- summary_lines = []
86
-
87
- if detection.has_alert:
88
- patched_version = detection.detection_details['alert'].get('first_patched_version')
89
- patched_version = patched_version or 'Not fixed'
90
-
91
- summary_lines.append(f'First patched version: [cyan]{patched_version}[/]\n')
92
- else:
93
- package_license = detection.detection_details.get('license', 'N/A')
94
- summary_lines.append(f'License: [cyan]{package_license}[/]\n')
95
-
96
- return summary_lines
86
+ return [f'{label}: [cyan]{value}[/]\n' for label, value in get_sca_policy_details(detection)]
97
87
 
98
88
  def __print_detection_code_segment(self, detection: 'Detection', document: Document) -> None:
99
89
  self.console.print(
@@ -0,0 +1,23 @@
1
+ from typing import Any, Optional
2
+
3
+ _MAINTAINED_CHECK_NAME = 'maintained'
4
+
5
+
6
+ def _get_ossf_details(detection_details: dict) -> dict:
7
+ return detection_details.get('ossf') or {}
8
+
9
+
10
+ def get_ossf_score(detection_details: dict) -> Optional[Any]:
11
+ return _get_ossf_details(detection_details).get('score')
12
+
13
+
14
+ def get_ossf_report_url(detection_details: dict) -> Optional[str]:
15
+ return _get_ossf_details(detection_details).get('scorecard_report_url')
16
+
17
+
18
+ def get_maintained_score(detection_details: dict) -> Optional[Any]:
19
+ for check in _get_ossf_details(detection_details).get('checks') or []:
20
+ if str(check.get('name', '')).lower() == _MAINTAINED_CHECK_NAME:
21
+ return check.get('score')
22
+
23
+ return None
@@ -0,0 +1,57 @@
1
+ from typing import TYPE_CHECKING, Callable
2
+
3
+ from cycode.cli.consts import (
4
+ LICENSE_COMPLIANCE_POLICY_ID,
5
+ PACKAGE_VULNERABILITY_POLICY_ID,
6
+ SCA_SCAN_TYPE,
7
+ UNMAINTAINED_PACKAGE_POLICY_ID,
8
+ )
9
+ from cycode.cli.printers.utils.detection_data import get_detection_clickable_cwe_cve
10
+ from cycode.cli.printers.utils.sca_ossf import get_maintained_score, get_ossf_report_url, get_ossf_score
11
+
12
+ if TYPE_CHECKING:
13
+ from cycode.cyclient.models import Detection
14
+
15
+ _NOT_AVAILABLE = 'N/A'
16
+
17
+
18
+ def _package_vulnerability_details(detection: 'Detection') -> list[tuple[str, str]]:
19
+ alert = detection.detection_details.get('alert') or {}
20
+ return [
21
+ ('CVEs', get_detection_clickable_cwe_cve(SCA_SCAN_TYPE, detection) or _NOT_AVAILABLE),
22
+ ('First patched version', alert.get('first_patched_version') or 'Not fixed'),
23
+ ]
24
+
25
+
26
+ def _license_compliance_details(detection: 'Detection') -> list[tuple[str, str]]:
27
+ return [('License', detection.detection_details.get('license') or _NOT_AVAILABLE)]
28
+
29
+
30
+ def _unmaintained_package_details(detection: 'Detection') -> list[tuple[str, str]]:
31
+ detection_details = detection.detection_details
32
+ maintained_score = get_maintained_score(detection_details)
33
+ ossf_score = get_ossf_score(detection_details)
34
+
35
+ return [
36
+ ('Maintained score', _NOT_AVAILABLE if maintained_score is None else str(maintained_score)),
37
+ ('OSSF Scorecard score', _NOT_AVAILABLE if ossf_score is None else str(ossf_score)),
38
+ ('Scorecard report', get_ossf_report_url(detection_details) or _NOT_AVAILABLE),
39
+ ]
40
+
41
+
42
+ _DETAILS_BY_POLICY: dict[str, Callable[['Detection'], list[tuple[str, str]]]] = {
43
+ PACKAGE_VULNERABILITY_POLICY_ID: _package_vulnerability_details,
44
+ LICENSE_COMPLIANCE_POLICY_ID: _license_compliance_details,
45
+ UNMAINTAINED_PACKAGE_POLICY_ID: _unmaintained_package_details,
46
+ }
47
+
48
+
49
+ def get_sca_policy_details(detection: 'Detection') -> list[tuple[str, str]]:
50
+ """Labelled fields specific to the SCA policy that raised the detection, in display order.
51
+
52
+ A policy with no entry contributes nothing rather than borrowing another policy's fields, so a new one shows
53
+ no details until it is added here.
54
+ """
55
+ build_details = _DETAILS_BY_POLICY.get(detection.detection_type_id)
56
+
57
+ return build_details(detection) if build_details else []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cycode
3
- Version: 3.20.1.dev3
3
+ Version: 3.21.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
@@ -834,7 +834,7 @@ The Cycode CLI application offers several types of scans so that you can choose
834
834
  | `--show-secret BOOLEAN` | Show secrets in plain text. See [Show/Hide Secrets](#showhide-secrets) section for more details. |
835
835
  | `--soft-fail BOOLEAN` | Run scan without failing, always return a non-error status code. See [Soft Fail](#soft-fail) section for more details. |
836
836
  | `--severity-threshold [INFO\|LOW\|MEDIUM\|HIGH\|CRITICAL]` | Show only violations at the specified level or higher. |
837
- | `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`). The default is both. |
837
+ | `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`/`unmaintained-packages`). The default is all. |
838
838
  | `--monitor` | When specified, the scan results will be recorded in Cycode. |
839
839
  | `--cycode-report` | Display a link to the scan report in the Cycode platform in the console output. |
840
840
  | `--no-restore` | When specified, Cycode will not run the restore command. This will scan direct dependencies ONLY! |
@@ -912,6 +912,20 @@ In the previous example, if you wanted to only scan a branch named `dev`, you co
912
912
 
913
913
  `cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev`
914
914
 
915
+ #### Unmaintained Packages Option
916
+
917
+ > [!NOTE]
918
+ > This option is only available to SCA scans.
919
+
920
+ To scan only for unmaintained packages (packages whose [OpenSSF Scorecard](https://scorecard.dev) `Maintained` check is low, meaning little or no recent commit and issue activity), add the argument `--sca-scan unmaintained-packages` following the `-t sca` or `--scan-type sca` option.
921
+
922
+ > [!NOTE]
923
+ > Whether unmaintained packages are reported at all is controlled by your organization's policy. This option narrows what a scan reports; it cannot enable a policy that is turned off for your tenant.
924
+
925
+ In the previous example, if you wanted to only run an SCA scan on unmaintained packages, you could execute the following:
926
+
927
+ `cycode scan -t sca --sca-scan unmaintained-packages repository ~/home/git/codebase`
928
+
915
929
  #### Lock Restore Option
916
930
 
917
931
  > [!NOTE]
@@ -1,4 +1,4 @@
1
- cycode/__init__.py,sha256=iBtU40BwvU5v1vQV0LNNfaPtyP8qJ7uffvivq9o-Eq8,396
1
+ cycode/__init__.py,sha256=htdvpKIXenhWNKmcCjAPYIz5jBNX7d8CmSMKOjdvR7s,396
2
2
  cycode/__main__.py,sha256=Z3bD5yrA7yPvAChcADQrqCaZd0ChGI1gdiwALwbWJ6U,104
3
3
  cycode/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  cycode/cli/app.py,sha256=AlR2durAEbsa47PDfIj7JtMvJDWA_Dq6wPtVuMJYSCs,10250
@@ -84,18 +84,18 @@ cycode/cli/apps/scan/repository/repository_command.py,sha256=03C93JYvyN_W-vstsl5
84
84
  cycode/cli/apps/scan/scan_ci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  cycode/cli/apps/scan/scan_ci/ci_integrations.py,sha256=3ZUv1uLsHC13KTNQ4erQKKDXAkmaSm5jow2Utwr4mCw,1634
86
86
  cycode/cli/apps/scan/scan_ci/scan_ci_command.py,sha256=37I6YTs5UWYtbnDe1EeYZnhV1twFTDUrniZ4Sf2_6Kk,562
87
- cycode/cli/apps/scan/scan_command.py,sha256=n3bzGjB5CSmLRfFn6-pLBhrlOCDTRz2Kfn2L_J1l0io,7916
88
- cycode/cli/apps/scan/scan_parameters.py,sha256=x0UPwLQx85SW-pdPG6bNkChmnBXhWA8lnUCdY08urq8,1409
87
+ cycode/cli/apps/scan/scan_command.py,sha256=_XN1Pz21-rRFKYxN-Bn_iDtEd1zE4drcSfSa1b4b5Us,7988
88
+ cycode/cli/apps/scan/scan_parameters.py,sha256=F7SCTuTR_iGfztvwapVJjjq9mXhuQv9EvcaX-YyiILI,1481
89
89
  cycode/cli/apps/scan/scan_result.py,sha256=hTPB2wnsbqSNqAxhWN4P7_ygDN_j5Mufs_shIb0FJU4,8624
90
90
  cycode/cli/apps/status/__init__.py,sha256=uxfkEBafO7Da0mPc1fZhwoO0RTtyXp2a5T3LJTZxubU,371
91
91
  cycode/cli/apps/status/get_cli_status.py,sha256=1UAVyKPpYk2S8nQYshKD1x5xgWR-hCTchLChxNU0JVA,2577
92
92
  cycode/cli/apps/status/models.py,sha256=2SBpJlh_MNCPxv8aXMV5D4GfK6-G-XB0GlMFZ3Nep_o,1907
93
93
  cycode/cli/apps/status/status_command.py,sha256=B8YZ4hibWkjkAkikailll2lkJmCRYh9APdvZSR4L33c,1069
94
94
  cycode/cli/apps/status/version_command.py,sha256=c6Iko_rmZo9T_kQSd3HUloBi40Qv7cjgKJNVxpMiMfE,315
95
- cycode/cli/cli_types.py,sha256=QbFWJLtlsEnHGdqdHbLolJqT57RfhocvsPAhlcNcCRE,3354
95
+ cycode/cli/cli_types.py,sha256=Xqf2eSx3yUvFoQG29ObUZ3QLVBhtZ4mkqxf_cJXpntU,3406
96
96
  cycode/cli/config.py,sha256=Op-lX_neanJtvPvoOEx4ByBdveh5ygElIga1FdSHhOI,299
97
97
  cycode/cli/console.py,sha256=vp-DHwlkwpwdsPyfwGdjsPF-6-Bi3f8W7G-W_YXCMH8,1914
98
- cycode/cli/consts.py,sha256=kbqflXMDBOACv-tsrygKBKZJnyQGWBcVfTrsPptw-MY,9929
98
+ cycode/cli/consts.py,sha256=bSP2N_deQnRgFMik6rQkYzyenezdZjFBB-5DDX_q6ZA,10001
99
99
  cycode/cli/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
100
  cycode/cli/exceptions/custom_exceptions.py,sha256=SImny5zXhnKocTw6GDaTm9x4I3bWRZW4wZEXg2Q-NTI,4742
101
101
  cycode/cli/exceptions/handle_ai_remediation_errors.py,sha256=mA70upSYXK3rL_fmanzKYeUzLENhpXdkW8k3aIHrKzU,785
@@ -149,14 +149,14 @@ cycode/cli/printers/__init__.py,sha256=ALwAXSZy2lNXWC3NfCIxf8K0F6eFrbZa9PLZwPINi
149
149
  cycode/cli/printers/console_printer.py,sha256=3WjPIRYHVrnPt4n6p84-YB3_fmrYL3_kdK3X42tYTx0,6141
150
150
  cycode/cli/printers/json_printer.py,sha256=kqCH_C0llPADwbXRBni0wq1kjVz08kbc7R6cGd8fWVI,2447
151
151
  cycode/cli/printers/printer_base.py,sha256=zo6on_3hos1Ywxz-vfyHUKqCGgq4jiRGaKXw9o-SCNM,3739
152
- cycode/cli/printers/rich_printer.py,sha256=tedqYgoDcnD-qObFxJB5TuduJwNu2_ky4YtcAte6KnY,7618
152
+ cycode/cli/printers/rich_printer.py,sha256=sToPNtk0Shs1bxBr_BpD3QFcQagtRTypQfyU2jCZ5yo,7380
153
153
  cycode/cli/printers/tables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- cycode/cli/printers/tables/sca_table_printer.py,sha256=-zGwPB_gUp8fXErxqqhnhRSW7oK0LrkATbdZ6VSsKtk,6315
154
+ cycode/cli/printers/tables/sca_table_printer.py,sha256=9FC3lC9BPuKXn8aTX1b3yUjEm5EudrGFlkDfwnVjM5s,6992
155
155
  cycode/cli/printers/tables/table.py,sha256=mdSUvAIGO2gMFvJxhkAJOrNzAh6x42BlqaZVAO127zA,2559
156
156
  cycode/cli/printers/tables/table_models.py,sha256=e8FBUD-XZHEarwwF632DFK9vpyPatcWMedyFe14kUtU,738
157
157
  cycode/cli/printers/tables/table_printer.py,sha256=8lYrjX_jaQrckOe7SSdIl6_uvyGbCsWaoxym8TTfhRQ,4693
158
158
  cycode/cli/printers/tables/table_printer_base.py,sha256=qCXn9ahV0ZeJ2MqxEeMhrecujoFgeLcmHjefyt5VrU4,1552
159
- cycode/cli/printers/text_printer.py,sha256=jx_URpXbDbd5NyZVOt44u0TkZW1wIHJX_vS8CEWkazE,5735
159
+ cycode/cli/printers/text_printer.py,sha256=jdS9QaMijVsM5-r5JQ1rZQDbJWAXVnXkrFKrH6o7Lxo,5411
160
160
  cycode/cli/printers/utils/__init__.py,sha256=eTrDlfmd8LsaWk8D33kCbypPjYMBsE8-7TQ3SUMbrog,169
161
161
  cycode/cli/printers/utils/code_snippet_syntax.py,sha256=2rfw1T3Nac-8gZFVlJLjceCMp3u3CHEx5xxLykBQGqY,4680
162
162
  cycode/cli/printers/utils/detection_data.py,sha256=-JR4oDLQ-MA0TXWPYuly1ju2GpQB2fsAfd0053zMFBw,3522
@@ -164,6 +164,8 @@ cycode/cli/printers/utils/detection_ordering/__init__.py,sha256=47DEQpj8HBSa-_TI
164
164
  cycode/cli/printers/utils/detection_ordering/common_ordering.py,sha256=WxdDGL9Hj8ne4sdWcmTjUIwWecOOJO7JE3baC9gSTzQ,2211
165
165
  cycode/cli/printers/utils/detection_ordering/sca_ordering.py,sha256=nEy9PIrApLBi1hrhKbIZ5x8XVK0LW4jsKxzax3leM7o,2315
166
166
  cycode/cli/printers/utils/rich_helpers.py,sha256=mUd9hIgZdRp0ZKfL26NHCrGdITKb2dvVtUSrYpZicck,1079
167
+ cycode/cli/printers/utils/sca_ossf.py,sha256=k4zmcpsLvfZ2qvc5Srlixth-tT2_qD2EZlsLf0ZZTIQ,720
168
+ cycode/cli/printers/utils/sca_policy_details.py,sha256=JKWN8tNmJKHUI-GQBUTi-ptnDYt5H6zLPxRnBe1C3bU,2311
167
169
  cycode/cli/user_settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
170
  cycode/cli/user_settings/base_file_manager.py,sha256=SLA5xRMTqSY-PtbeKCtVc9rP_ljxUYe3z3ZU-XE2x0w,844
169
171
  cycode/cli/user_settings/config_file_manager.py,sha256=WmwUjD-w5FJyi5dclRNol4-AA7_s89kDUS69d676cjw,5637
@@ -212,8 +214,8 @@ cycode/cyclient/report_client.py,sha256=Scq30NeJPzgXv0hPLO1U05AdE9i_2iu6cIrSKpEJ
212
214
  cycode/cyclient/scan_client.py,sha256=DqAZ7u6Z_cvw9A9RlLkAQUgLRwPCCAsUq5U9umt4F7Y,16955
213
215
  cycode/cyclient/scan_config_base.py,sha256=mXsPZGYCtp85rv5GIige40yQZXuRcEKUW-VQJ0vgFzk,1201
214
216
  cycode/logger.py,sha256=EfZGRK6VC5rE_LAjIcRrHFiQCueylCDXoG6bvGkrIME,2111
215
- cycode-3.20.1.dev3.dist-info/METADATA,sha256=LSlFpEMsfot_3vRwUGCS_kTu7AoKUUUShATLR1lCB-Y,92792
216
- cycode-3.20.1.dev3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
217
- cycode-3.20.1.dev3.dist-info/entry_points.txt,sha256=iDcVJM8ByLElVgvBgtYxDjw1kT7O8Mo0LcWZIT5L3Ig,45
218
- cycode-3.20.1.dev3.dist-info/licenses/LICENCE,sha256=2Wx4N6mD_4xB7-E3hPkZ3MPhpJy__k_I8MaCSO-PDRo,1068
219
- cycode-3.20.1.dev3.dist-info/RECORD,,
217
+ cycode-3.21.1.dev1.dist-info/METADATA,sha256=U4JTLURiQLgKgiwr59nTaFaBXcv2bpBpLN5aZ6m84QU,93596
218
+ cycode-3.21.1.dev1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
219
+ cycode-3.21.1.dev1.dist-info/entry_points.txt,sha256=iDcVJM8ByLElVgvBgtYxDjw1kT7O8Mo0LcWZIT5L3Ig,45
220
+ cycode-3.21.1.dev1.dist-info/licenses/LICENCE,sha256=2Wx4N6mD_4xB7-E3hPkZ3MPhpJy__k_I8MaCSO-PDRo,1068
221
+ cycode-3.21.1.dev1.dist-info/RECORD,,