socketsecurity 2.6.1__tar.gz → 2.6.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/actions/setup-docker/action.yml +3 -3
  2. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/actions/setup-sfw/action.yml +1 -1
  3. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/e2e-test.yml +1 -1
  4. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/package-check.yml +1 -1
  5. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/pr-preview.yml +1 -1
  6. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/python-tests.yml +2 -2
  7. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/release.yml +2 -2
  8. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/CHANGELOG.md +42 -0
  9. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/PKG-INFO +14 -14
  10. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/docs/cli-reference.md +1 -1
  11. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/pyproject.toml +14 -14
  12. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/__init__.py +1 -1
  13. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/__init__.py +7 -3
  14. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/tools/reachability.py +3 -3
  15. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_sdk_methods.py +19 -1
  16. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/uv.lock +50 -50
  17. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/CODEOWNERS +0 -0
  18. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/PULL_REQUEST_TEMPLATE/bug-fix.md +0 -0
  19. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
  20. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/PULL_REQUEST_TEMPLATE/improvement.md +0 -0
  21. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/actions/setup-hatch/action.yml +0 -0
  23. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/dependabot.yml +0 -0
  24. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/dependency-review.yml +0 -0
  25. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/docker-stable.yml +0 -0
  26. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/workflows/version-check.yml +0 -0
  27. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.github/zizmor.yml +0 -0
  28. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.gitignore +0 -0
  29. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.hooks/sync_version.py +0 -0
  30. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.pre-commit-config.yaml +0 -0
  31. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/.python-version +0 -0
  32. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/CONTRIBUTING.md +0 -0
  33. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/Dockerfile +0 -0
  34. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/Dockerfile.preview +0 -0
  35. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/LICENSE +0 -0
  36. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/Makefile +0 -0
  37. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/README.md +0 -0
  38. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/docs/ci-cd.md +0 -0
  39. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/docs/development.md +0 -0
  40. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/docs/troubleshooting.md +0 -0
  41. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-dashboard-parity.json +0 -0
  42. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-dashboard-parity.toml +0 -0
  43. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-diff-ci-cd.json +0 -0
  44. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-diff-ci-cd.toml +0 -0
  45. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-instance-detail.json +0 -0
  46. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/examples/config/sarif-instance-detail.toml +0 -0
  47. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/instructions/gitlab-commit-status/uat.md +0 -0
  48. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/pytest.ini +0 -0
  49. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/build_container.sh +0 -0
  50. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/build_container_flexible.sh +0 -0
  51. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/deploy-test-docker.sh +0 -0
  52. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/deploy-test-pypi.sh +0 -0
  53. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/docker-entrypoint.sh +0 -0
  54. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/scripts/run.sh +0 -0
  55. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/session.md +0 -0
  56. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socket.yml +0 -0
  57. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/config.py +0 -0
  58. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/alert_selection.py +0 -0
  59. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/classes.py +0 -0
  60. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/cli_client.py +0 -0
  61. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/cli_run.py +0 -0
  62. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/exceptions.py +0 -0
  63. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/git_interface.py +0 -0
  64. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/helper/__init__.py +0 -0
  65. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/helper/socket_facts_loader.py +0 -0
  66. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/lazy_file_loader.py +0 -0
  67. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/log_uploader.py +0 -0
  68. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/logging.py +0 -0
  69. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/messages.py +0 -0
  70. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/resource_utils.py +0 -0
  71. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm/__init__.py +0 -0
  72. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm/base.py +0 -0
  73. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm/client.py +0 -0
  74. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm/github.py +0 -0
  75. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm/gitlab.py +0 -0
  76. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/scm_comments.py +0 -0
  77. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/socket_config.py +0 -0
  78. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/streaming.py +0 -0
  79. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/core/utils.py +0 -0
  80. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/fossa_compat.py +0 -0
  81. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/output.py +0 -0
  82. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/__init__.py +0 -0
  83. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/base.py +0 -0
  84. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/formatters/__init__.py +0 -0
  85. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/formatters/slack.py +0 -0
  86. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/jira.py +0 -0
  87. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/manager.py +0 -0
  88. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/slack.py +0 -0
  89. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/teams.py +0 -0
  90. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/plugins/webhook.py +0 -0
  91. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/socketsecurity/socketcli.py +0 -0
  92. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/__init__.py +0 -0
  93. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/conftest.py +0 -0
  94. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/create_diff_input.json +0 -0
  95. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_diff_alerts.py +0 -0
  96. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_diff_generation.py +0 -0
  97. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_diff_scan_polling.py +0 -0
  98. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_facts_compression.py +0 -0
  99. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_has_manifest_files.py +0 -0
  100. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_package_and_alerts.py +0 -0
  101. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/core/test_supporting_methods.py +0 -0
  102. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/create_response.json +0 -0
  103. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/diff/stream_diff.json +0 -0
  104. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/diff/stream_diff_full.json +0 -0
  105. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/head_scan/metadata.json +0 -0
  106. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/head_scan/stream_scan.json +0 -0
  107. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/head_scan/stream_scan_full.json +0 -0
  108. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/new_scan/metadata.json +0 -0
  109. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/fullscans/new_scan/stream_scan.json +0 -0
  110. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/repos/repo_info_error.json +0 -0
  111. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/repos/repo_info_no_head.json +0 -0
  112. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/repos/repo_info_success.json +0 -0
  113. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/data/settings/security-policy.json +0 -0
  114. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/fixtures/simple-npm/index.js +0 -0
  115. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/fixtures/simple-npm/package.json +0 -0
  116. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/fixtures/simple-pypi/requirements.txt +0 -0
  117. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/reach-facts-probe.sh +0 -0
  118. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/validate-gitlab.sh +0 -0
  119. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/validate-json.sh +0 -0
  120. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/validate-reachability.sh +0 -0
  121. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/validate-sarif.sh +0 -0
  122. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/e2e/validate-scan.sh +0 -0
  123. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/fixtures/fossa/README.md +0 -0
  124. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/fixtures/fossa/fossa-analyze-empty.json +0 -0
  125. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/fixtures/fossa/fossa-analyze-populated.json +0 -0
  126. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/fixtures/fossa/fossa-sbom-empty-deep.json +0 -0
  127. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/fixtures/fossa/fossa-sbom-populated.json +0 -0
  128. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/__init__.py +0 -0
  129. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_alert_selection.py +0 -0
  130. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_cli_config.py +0 -0
  131. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_cli_run.py +0 -0
  132. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_client.py +0 -0
  133. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_config.py +0 -0
  134. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_dependency_overview.py +0 -0
  135. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_disable_ignore.py +0 -0
  136. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_exclude_paths.py +0 -0
  137. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_fossa_compat.py +0 -0
  138. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_fossa_parity.py +0 -0
  139. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_full_scan_retry.py +0 -0
  140. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_gitlab_auth.py +0 -0
  141. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_gitlab_auth_fallback.py +0 -0
  142. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_gitlab_commit_status.py +0 -0
  143. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_gitlab_format.py +0 -0
  144. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_ignore_telemetry_filtering.py +0 -0
  145. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_include_dirs.py +0 -0
  146. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_log_uploader.py +0 -0
  147. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_output.py +0 -0
  148. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_reachability.py +0 -0
  149. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_slack_plugin.py +0 -0
  150. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_socketcli.py +0 -0
  151. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_streaming.py +0 -0
  152. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/tests/unit/test_tier1_finalize.py +0 -0
  153. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/workflows/bitbucket-pipelines.yml +0 -0
  154. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/workflows/buildkite.yml +0 -0
  155. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/workflows/github-actions.yml +0 -0
  156. {socketsecurity-2.6.1 → socketsecurity-2.6.4}/workflows/gitlab-ci.yml +0 -0
@@ -19,10 +19,10 @@ inputs:
19
19
  runs:
20
20
  using: "composite"
21
21
  steps:
22
- - uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
22
+ - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
23
23
  if: inputs.enable-qemu == 'true'
24
- - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
25
- - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
24
+ - uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
25
+ - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
26
26
  with:
27
27
  username: ${{ inputs.dockerhub-username }}
28
28
  password: ${{ inputs.dockerhub-token }}
@@ -27,7 +27,7 @@ runs:
27
27
  using: "composite"
28
28
  steps:
29
29
  - if: ${{ inputs.python == 'true' || inputs.uv == 'true' }}
30
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
30
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
31
31
  with:
32
32
  python-version: "3.12"
33
33
 
@@ -80,7 +80,7 @@ jobs:
80
80
  fetch-depth: 0
81
81
  persist-credentials: false
82
82
 
83
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
83
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
84
84
  with:
85
85
  python-version: '3.12'
86
86
 
@@ -23,7 +23,7 @@ jobs:
23
23
  fetch-depth: 1
24
24
  persist-credentials: false
25
25
 
26
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
26
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
27
27
  with:
28
28
  python-version: "3.12"
29
29
 
@@ -107,7 +107,7 @@ jobs:
107
107
  fetch-depth: 0
108
108
  persist-credentials: false
109
109
 
110
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
110
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
111
111
  with:
112
112
  python-version: "3.12"
113
113
 
@@ -40,7 +40,7 @@ jobs:
40
40
  fetch-depth: 1
41
41
  persist-credentials: false
42
42
  - name: 🐍 setup python
43
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
43
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
44
44
  with:
45
45
  python-version: ${{ env.PYTHON_VERSION }}
46
46
  - name: 🛠️ install deps
@@ -76,7 +76,7 @@ jobs:
76
76
  fetch-depth: 1
77
77
  persist-credentials: false
78
78
  - name: 🐍 setup python
79
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
79
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
80
80
  with:
81
81
  python-version: "3.10"
82
82
  - name: 🚫 verify install is rejected on unsupported python
@@ -14,7 +14,7 @@ jobs:
14
14
  with:
15
15
  fetch-depth: 0
16
16
  persist-credentials: false
17
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
17
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
18
18
  with:
19
19
  python-version: '3.13'
20
20
 
@@ -66,7 +66,7 @@ jobs:
66
66
 
67
67
  - name: Publish to PyPI
68
68
  if: steps.version_check.outputs.pypi_exists != 'true'
69
- uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # v1.14.1
69
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
70
70
 
71
71
  - name: Set up Docker publishing
72
72
  uses: ./.github/actions/setup-docker
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.6.4
4
+
5
+ ### Changed: bump pinned @coana-tech/cli to 15.10.13
6
+
7
+ - Bumped the pinned reachability engine (`@coana-tech/cli`) from `15.10.4` to
8
+ `15.10.13`. See the [Coana changelogs](https://docs.coana.tech/changelogs) for
9
+ engine changes.
10
+
11
+ ### Changed: bump pinned GitPython to 3.1.59
12
+
13
+ - Bumped `GitPython` from `3.1.57` to `3.1.59`, picking up the security fixes
14
+ released in GitPython 3.1.58 and 3.1.59. None of the affected GitPython APIs
15
+ are used by this CLI.
16
+
17
+ ## 2.6.3
18
+
19
+ ### Fixed: SBOM fetch failures no longer produce empty reports
20
+
21
+ - `Core.get_sbom_data` now raises `APIFailure` when the full-scan stream fetch
22
+ fails, so the run exits through the CLI's API-error handling (exit code 3 by
23
+ default; `--disable-blocking` still exits 0) instead of writing empty
24
+ GitLab dependency-scanning, license, and SARIF reports.
25
+ - The underlying stream-parse failure was fixed in `socketdev` 3.4.2 (already
26
+ pinned to `3.5.0`): unrecognized purl types such as `generic` now resolve
27
+ instead of raising, and individual unparseable artifacts are skipped rather
28
+ than failing the whole response.
29
+
30
+ ### Changed: bump pinned @coana-tech/cli to 15.10.4
31
+
32
+ - Bumped the pinned reachability engine (`@coana-tech/cli`) from `15.10.3` to
33
+ `15.10.4`. See the [Coana changelogs](https://docs.coana.tech/changelogs) for
34
+ engine changes.
35
+
36
+ ### Changed: dependency updates and dev/test dependency pinning
37
+
38
+ - Bumped pinned runtime dependencies (`beautifulsoup4` `4.15.0`,
39
+ `markdown` `3.10.3`).
40
+ - Pinned the `test` and `dev` dependency groups to exact versions, extending
41
+ the exact-pinning policy introduced in 2.6.0 to all dependency groups.
42
+ - Updated GitHub Actions used in CI workflows. No effect on the installed
43
+ CLI.
44
+
3
45
  ## 2.6.1
4
46
 
5
47
  ### Changed: scan comparison now polls the diff-scans endpoints
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: socketsecurity
3
- Version: 2.6.1
3
+ Version: 2.6.4
4
4
  Summary: Socket Security CLI for CI/CD
5
5
  Project-URL: Homepage, https://socket.dev
6
6
  Author-email: Douglas Coburn <douglas@socket.dev>
@@ -33,11 +33,11 @@ Classifier: Intended Audience :: Developers
33
33
  Classifier: Programming Language :: Python :: 3.11
34
34
  Classifier: Programming Language :: Python :: 3.12
35
35
  Requires-Python: >=3.11
36
- Requires-Dist: beautifulsoup4==4.14.3
36
+ Requires-Dist: beautifulsoup4==4.15.0
37
37
  Requires-Dist: brotli==1.2.0; platform_python_implementation == 'CPython'
38
38
  Requires-Dist: brotlicffi==1.2.0.1; platform_python_implementation != 'CPython'
39
- Requires-Dist: gitpython==3.1.57
40
- Requires-Dist: markdown==3.10.2
39
+ Requires-Dist: gitpython==3.1.59
40
+ Requires-Dist: markdown==3.10.3
41
41
  Requires-Dist: mdutils==1.8.1
42
42
  Requires-Dist: packaging==26.2
43
43
  Requires-Dist: prettytable==3.18.0
@@ -45,17 +45,17 @@ Requires-Dist: python-dotenv==1.2.2
45
45
  Requires-Dist: requests==2.34.2
46
46
  Requires-Dist: socketdev==3.5.0
47
47
  Provides-Extra: dev
48
- Requires-Dist: hatch; extra == 'dev'
49
- Requires-Dist: pre-commit; extra == 'dev'
50
- Requires-Dist: ruff>=0.3.0; extra == 'dev'
51
- Requires-Dist: twine; extra == 'dev'
52
- Requires-Dist: uv>=0.1.0; extra == 'dev'
48
+ Requires-Dist: hatch==1.17.1; extra == 'dev'
49
+ Requires-Dist: pre-commit==4.6.1; extra == 'dev'
50
+ Requires-Dist: ruff==0.16.1; extra == 'dev'
51
+ Requires-Dist: twine==7.0.0; extra == 'dev'
52
+ Requires-Dist: uv==0.12.0; extra == 'dev'
53
53
  Provides-Extra: test
54
- Requires-Dist: pytest-asyncio>=0.23.0; extra == 'test'
55
- Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
56
- Requires-Dist: pytest-mock>=3.12.0; extra == 'test'
57
- Requires-Dist: pytest-watch>=4.2.0; extra == 'test'
58
- Requires-Dist: pytest>=7.4.0; extra == 'test'
54
+ Requires-Dist: pytest-asyncio==1.4.0; extra == 'test'
55
+ Requires-Dist: pytest-cov==7.1.0; extra == 'test'
56
+ Requires-Dist: pytest-mock==3.15.1; extra == 'test'
57
+ Requires-Dist: pytest-watch==4.2.0; extra == 'test'
58
+ Requires-Dist: pytest==9.1.1; extra == 'test'
59
59
  Description-Content-Type: text/markdown
60
60
 
61
61
  # Socket Security CLI
@@ -275,7 +275,7 @@ If you don't want to provide the Socket API Token every time then you can use th
275
275
  | Parameter | Required | Default | Description |
276
276
  |:---------------------------------|:---------|:--------|:---------------------------------------------------------------------------------------------------------------------------|
277
277
  | `--reach` | False | False | Enable reachability analysis to identify which vulnerable functions are actually called by your code. Creates a full application reachability scan (`scan_type=socket_tier1`). |
278
- | `--reach-version` | False | 15.10.3 | Version of @coana-tech/cli to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
278
+ | `--reach-version` | False | 15.10.13 | Version of @coana-tech/cli to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
279
279
  | `--reach-analysis-timeout` | False | 10m | Timeout for each reachability analysis run, e.g. `90s`, `10m` or `1h`. Omitted by default, so coana applies its own default (`10m`). Alias: `--reach-timeout` |
280
280
  | `--reach-analysis-memory-limit` | False | 8GB | Memory limit for each reachability analysis run, e.g. `512MB` or `8GB`. Omitted by default, so coana applies its own default (`8GB`). Alias: `--reach-memory-limit` |
281
281
  | `--reach-concurrency` | False | 1 | Control parallel analysis execution (must be >= 1). Omitted by default, so coana applies its own default. |
@@ -6,19 +6,19 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "socketsecurity"
9
- version = "2.6.1"
9
+ version = "2.6.4"
10
10
  requires-python = ">= 3.11"
11
11
  license = {"file" = "LICENSE"}
12
12
  dependencies = [
13
13
  "requests==2.34.2",
14
14
  "mdutils==1.8.1",
15
15
  "prettytable==3.18.0",
16
- "GitPython==3.1.57",
16
+ "GitPython==3.1.59",
17
17
  "packaging==26.2",
18
18
  "python-dotenv==1.2.2",
19
19
  "socketdev==3.5.0",
20
- "beautifulsoup4==4.14.3",
21
- "markdown==3.10.2",
20
+ "beautifulsoup4==4.15.0",
21
+ "markdown==3.10.3",
22
22
  "brotli==1.2.0; platform_python_implementation == 'CPython'",
23
23
  "brotlicffi==1.2.0.1; platform_python_implementation != 'CPython'",
24
24
  ]
@@ -40,18 +40,18 @@ classifiers = [
40
40
 
41
41
  [project.optional-dependencies]
42
42
  test = [
43
- "pytest>=7.4.0",
44
- "pytest-cov>=4.1.0",
45
- "pytest-mock>=3.12.0",
46
- "pytest-asyncio>=0.23.0",
47
- "pytest-watch >=4.2.0"
43
+ "pytest==9.1.1",
44
+ "pytest-cov==7.1.0",
45
+ "pytest-mock==3.15.1",
46
+ "pytest-asyncio==1.4.0",
47
+ "pytest-watch==4.2.0"
48
48
  ]
49
49
  dev = [
50
- "ruff>=0.3.0",
51
- "twine", # for building
52
- "uv>=0.1.0", # for dependency management
53
- "pre-commit",
54
- "hatch"
50
+ "ruff==0.16.1",
51
+ "twine==7.0.0", # for building
52
+ "uv==0.12.0", # for dependency management
53
+ "pre-commit==4.6.1",
54
+ "hatch==1.17.1"
55
55
  ]
56
56
 
57
57
  [project.scripts]
@@ -1,3 +1,3 @@
1
1
  __author__ = 'socket.dev'
2
- __version__ = '2.6.1'
2
+ __version__ = '2.6.4'
3
3
  USER_AGENT = f'SocketPythonCLI/{__version__}'
@@ -173,9 +173,13 @@ class Core:
173
173
  """Returns SBOM artifacts for a full scan keyed by artifact ID."""
174
174
  response = self.sdk.fullscans.stream(self.config.org_slug, full_scan_id, use_types=True)
175
175
  if not response.success:
176
- log.debug(f"Failed to get SBOM data for full-scan {full_scan_id}")
177
- log.debug(response.message)
178
- return {}
176
+ # Raise instead of returning {} so a failed fetch surfaces as an
177
+ # API error (exit code 3 by default) rather than empty reports.
178
+ log.error(f"Failed to get SBOM data for full-scan {full_scan_id}")
179
+ log.error(response.message)
180
+ raise APIFailure(
181
+ f"Failed to get SBOM data for full-scan {full_scan_id}: {response.message}"
182
+ )
179
183
  if not hasattr(response, "artifacts") or not response.artifacts:
180
184
  return {}
181
185
  return response.artifacts
@@ -18,7 +18,7 @@ log = logging.getLogger(__name__)
18
18
  # Pinned @coana-tech/cli version. Bumped deliberately per Python CLI release so the
19
19
  # reachability engine version only changes through a standard pip upgrade (advance notice).
20
20
  # Pass --reach-version latest to opt into the newest published version instead.
21
- DEFAULT_COANA_CLI_VERSION: Final = "15.10.3"
21
+ DEFAULT_COANA_CLI_VERSION: Final = "15.10.13"
22
22
 
23
23
  # Resolved @coana-tech/cli script paths from the npm-install fallback, keyed by version.
24
24
  # Lives for the process lifetime so repeated fallback invocations install only once
@@ -55,7 +55,7 @@ class ReachabilityAnalyzer:
55
55
 
56
56
  def _resolve_coana_package_spec(self, version: Optional[str] = None) -> str:
57
57
  """
58
- Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.3').
58
+ Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.13').
59
59
 
60
60
  Args:
61
61
  version: Coana CLI version to use.
@@ -64,7 +64,7 @@ class ReachabilityAnalyzer:
64
64
  - '<semver>': that exact version.
65
65
 
66
66
  Returns:
67
- str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.3').
67
+ str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.13').
68
68
  """
69
69
  return f"@coana-tech/cli@{self._resolve_coana_version(version)}"
70
70
 
@@ -1,5 +1,6 @@
1
1
  import pytest
2
- from socketdev.fullscans import FullScanParams
2
+ from socketdev.exceptions import APIFailure
3
+ from socketdev.fullscans import FullScanParams, FullScanStreamResponse
3
4
 
4
5
  from socketsecurity.config import CliConfig
5
6
  from socketsecurity.core import Core
@@ -277,6 +278,23 @@ def test_get_added_and_removed_packages_license_override(core):
277
278
  include_license_details="true",
278
279
  )
279
280
 
281
+ def test_get_sbom_data_failure_raises(core):
282
+ """A failed SBOM stream fetch raises instead of returning {}.
283
+
284
+ Returning {} let report generation continue and emit empty results with
285
+ exit code 0; raising routes the failure through the CLI's API-error
286
+ handling instead.
287
+ """
288
+ core.sdk.fullscans.stream.side_effect = None
289
+ core.sdk.fullscans.stream.return_value = FullScanStreamResponse.from_dict({
290
+ "success": False,
291
+ "status": 200,
292
+ "message": "Error parsing stream response",
293
+ })
294
+
295
+ with pytest.raises(APIFailure, match="Failed to get SBOM data"):
296
+ core.get_sbom_data("head")
297
+
280
298
  def test_empty_alerts_preserved(core):
281
299
  """Test that empty alerts arrays stay as empty arrays and don't become None"""
282
300
  # Get the scan that contains dp2 (which has empty alerts array)
@@ -112,15 +112,15 @@ wheels = [
112
112
 
113
113
  [[package]]
114
114
  name = "beautifulsoup4"
115
- version = "4.14.3"
115
+ version = "4.15.0"
116
116
  source = { registry = "https://pypi.org/simple" }
117
117
  dependencies = [
118
118
  { name = "soupsieve" },
119
119
  { name = "typing-extensions" },
120
120
  ]
121
- sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" }
121
+ sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" }
122
122
  wheels = [
123
- { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" },
123
+ { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" },
124
124
  ]
125
125
 
126
126
  [[package]]
@@ -574,14 +574,14 @@ wheels = [
574
574
 
575
575
  [[package]]
576
576
  name = "gitpython"
577
- version = "3.1.57"
577
+ version = "3.1.59"
578
578
  source = { registry = "https://pypi.org/simple" }
579
579
  dependencies = [
580
580
  { name = "gitdb" },
581
581
  ]
582
- sdist = { url = "https://files.pythonhosted.org/packages/ba/0d/132ed135c871b6bf91adf16a0e43797cd535b81d4973b5d09291c54fc5ee/gitpython-3.1.57.tar.gz", hash = "sha256:c493ec57c0ef6b19743798b6a5af859c71814b524e7e6f97baa2f8e658961488", size = 225898, upload-time = "2026-07-26T07:33:26.351Z" }
582
+ sdist = { url = "https://files.pythonhosted.org/packages/ca/dc/126b28e76b24a9268ba931ad3e012f71ebdadf62fd9f17758f7074bb0b20/gitpython-3.1.59.tar.gz", hash = "sha256:0a1475cfdc38a5bfba1a3e9a4a9da52a39749ecec322b772915c019f94e5b7e4", size = 230445, upload-time = "2026-08-10T12:03:20.271Z" }
583
583
  wheels = [
584
- { url = "https://files.pythonhosted.org/packages/41/6e/2139de986d9c7c3ac86f1f8be43858ce90bdfe2f7175e6c80c650ba15242/gitpython-3.1.57-py3-none-any.whl", hash = "sha256:4ccf7d73c10f5c9e76043fbb2675ac5a1b3ff5b41e648f56bcbed5f63792ecaf", size = 217151, upload-time = "2026-07-26T07:33:24.838Z" },
584
+ { url = "https://files.pythonhosted.org/packages/ef/ed/ae57eb7d344f43f87b74b3a281ead6ec7d6394eef72a7b1dcb28dd089550/gitpython-3.1.59-py3-none-any.whl", hash = "sha256:67a82f537384578643624c8b2c531938a9b82be431663e575dcf638526631d4c", size = 220996, upload-time = "2026-08-10T12:03:18.804Z" },
585
585
  ]
586
586
 
587
587
  [[package]]
@@ -795,11 +795,11 @@ wheels = [
795
795
 
796
796
  [[package]]
797
797
  name = "markdown"
798
- version = "3.10.2"
798
+ version = "3.10.3"
799
799
  source = { registry = "https://pypi.org/simple" }
800
- sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" }
800
+ sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" }
801
801
  wheels = [
802
- { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" },
802
+ { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" },
803
803
  ]
804
804
 
805
805
  [[package]]
@@ -1200,40 +1200,40 @@ wheels = [
1200
1200
 
1201
1201
  [[package]]
1202
1202
  name = "rich"
1203
- version = "14.2.0"
1203
+ version = "15.0.0"
1204
1204
  source = { registry = "https://pypi.org/simple" }
1205
1205
  dependencies = [
1206
1206
  { name = "markdown-it-py" },
1207
1207
  { name = "pygments" },
1208
1208
  ]
1209
- sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" }
1209
+ sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
1210
1210
  wheels = [
1211
- { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" },
1211
+ { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
1212
1212
  ]
1213
1213
 
1214
1214
  [[package]]
1215
1215
  name = "ruff"
1216
- version = "0.16.0"
1217
- source = { registry = "https://pypi.org/simple" }
1218
- sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" }
1219
- wheels = [
1220
- { url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" },
1221
- { url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" },
1222
- { url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" },
1223
- { url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" },
1224
- { url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" },
1225
- { url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" },
1226
- { url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" },
1227
- { url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" },
1228
- { url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" },
1229
- { url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" },
1230
- { url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" },
1231
- { url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" },
1232
- { url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" },
1233
- { url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" },
1234
- { url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" },
1235
- { url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" },
1236
- { url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" },
1216
+ version = "0.16.1"
1217
+ source = { registry = "https://pypi.org/simple" }
1218
+ sdist = { url = "https://files.pythonhosted.org/packages/70/25/7113f6d5498888c5fb7db34081cba7d5971c4cb1bfb26819966eee68f003/ruff-0.16.1.tar.gz", hash = "sha256:fedad7c801dabd3fb9741d76aca39246e6ddd9ca446a015875207bf19f1e6bc7", size = 4877500, upload-time = "2026-07-30T19:37:01.379Z" }
1219
+ wheels = [
1220
+ { url = "https://files.pythonhosted.org/packages/1b/bd/694da69368e0973de65df2ddc73ab18d43c469d5963d9b150911de6bc513/ruff-0.16.1-py3-none-linux_armv6l.whl", hash = "sha256:58edb313b88f0c5460a26adf5f39a37a3be789494a15e3e411e35fa78b89f9a0", size = 10839126, upload-time = "2026-07-30T19:36:13.697Z" },
1221
+ { url = "https://files.pythonhosted.org/packages/3f/f0/b626e5d5bd0dd9576263658ef12885e2288afd1029a48e26ffed65ec1ac1/ruff-0.16.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fde5a99e2f97479af66edd6622c6d5a2a7592c77cf4153d9e4428f5eeb55b60c", size = 11070253, upload-time = "2026-07-30T19:36:17.14Z" },
1222
+ { url = "https://files.pythonhosted.org/packages/83/63/f40acfb6b35b88623e71684942b552c3edd96035f5d98f313815f7b277de/ruff-0.16.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e0d4c20532fca4f7fa609369161d968dd28f65d83dabbd61d8e9c7edbf7001f6", size = 10561425, upload-time = "2026-07-30T19:36:20.04Z" },
1223
+ { url = "https://files.pythonhosted.org/packages/aa/dd/14ec0e9c2b4d315547dd38765004b4863e354e1b52cb308272215d9f6f6d/ruff-0.16.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30affbcedf59ad5703d9c91f82266e02b47739f797e1a7b6e158e5526a6dae38", size = 10948879, upload-time = "2026-07-30T19:36:22.476Z" },
1224
+ { url = "https://files.pythonhosted.org/packages/33/e9/9d870cbae575030fdef595f04b4b97573c525b5497cce4f4498cf2f85446/ruff-0.16.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24e9c631573cbca9d20f1283f8f479b2afa4a8503504822bd71a293889f16743", size = 10643691, upload-time = "2026-07-30T19:36:24.914Z" },
1225
+ { url = "https://files.pythonhosted.org/packages/c4/09/12743d544e2173f53ecd27217c65f90d2bc0f8424a66a60339e56bbc0457/ruff-0.16.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b41bdd48fb420987a9b5212e4957c26ad4abce401fa9ea9d4d85843727945f4f", size = 11435354, upload-time = "2026-07-30T19:36:28.447Z" },
1226
+ { url = "https://files.pythonhosted.org/packages/7f/89/a1652b2daee52083c9554a6333b678a8b01d0400f976827bb87857f9449a/ruff-0.16.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0d1e1393b7648079e13669de1c1f4fde06d4583e84d8fd5c1551e0a77a2aa75", size = 12259033, upload-time = "2026-07-30T19:36:31.326Z" },
1227
+ { url = "https://files.pythonhosted.org/packages/16/96/ecdcb8c54ee7b123b487f807eb014e6e019155a0b81dfb669acd52f28ce3/ruff-0.16.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07bf434b1c95f4e093be4532068ef4fcf00924eb2ade8796075980902d6fd54a", size = 11667981, upload-time = "2026-07-30T19:36:34.394Z" },
1228
+ { url = "https://files.pythonhosted.org/packages/cd/90/c52e12e0d862e9572f2a33aa227409143520abe53111e9a6babbac7b4af8/ruff-0.16.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39897739f112253ee4fdd2e8aa9a4f9ded99fb2be367d5f31dfa4ded6025584c", size = 11468183, upload-time = "2026-07-30T19:36:37.339Z" },
1229
+ { url = "https://files.pythonhosted.org/packages/2c/6b/4ffb7ad1d83eb16cf8cbb3c8815d3f11c88460fd162d4b372a2059be1c2a/ruff-0.16.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:82ae3c0c0d74daf17b968a10b7b3bb3ef297ab7de0c1f749646b25e690ccb150", size = 11470071, upload-time = "2026-07-30T19:36:39.91Z" },
1230
+ { url = "https://files.pythonhosted.org/packages/9c/72/32ae7db4c0b5e32ab611787caa19d1546800676d79f7483b7100a3561bf4/ruff-0.16.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4d5f2ed10f8242d83fc08d521301089364e3375375705356f20c0e31606ef3ef", size = 10919503, upload-time = "2026-07-30T19:36:42.65Z" },
1231
+ { url = "https://files.pythonhosted.org/packages/f7/ca/3d901ba6ad6fc38da39c3448fc6c59ac945679293a17c3ceb6d6c1cba13e/ruff-0.16.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a4665b309891f83f3e3c25447935f1213e9abbd4b5640af7a1f2def9f8d413c1", size = 10649861, upload-time = "2026-07-30T19:36:45.18Z" },
1232
+ { url = "https://files.pythonhosted.org/packages/92/79/894ef1ced26552d5f8c9cf6d85b0687840e1128c55aeab7b9c2d54a0d880/ruff-0.16.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26e9ca5c9bc3971f20d3cf18a957f52ffd6a5f6564ff15c4912a144dcac22494", size = 11148137, upload-time = "2026-07-30T19:36:47.936Z" },
1233
+ { url = "https://files.pythonhosted.org/packages/2d/69/3609a09fa1cb46cc28b762363e440a354204e5dff01bd0c8d7437874d6b9/ruff-0.16.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:67e1e1e3fa4f0c82f0e36d4cd61e661f6e7a6196cb1aa92fe0828fa7b8f257cd", size = 11559211, upload-time = "2026-07-30T19:36:50.448Z" },
1234
+ { url = "https://files.pythonhosted.org/packages/fc/8a/fb22af2fd78a736e241fabf67e30ce1799a64244026377a49e133af90762/ruff-0.16.1-py3-none-win32.whl", hash = "sha256:d31765e131295b8445caf301e3e8a85b34d1b9b211b4109b7ba457888b051806", size = 10838258, upload-time = "2026-07-30T19:36:53.298Z" },
1235
+ { url = "https://files.pythonhosted.org/packages/d4/35/e57fd9fb5d423961df087a00b12d42c0a830288dc2f3b45ecca299158b4f/ruff-0.16.1-py3-none-win_amd64.whl", hash = "sha256:09b05e8b90c2cb06ad63464350e7a45e8e44a2dfe52072ebfba6666ca8d3f596", size = 11961111, upload-time = "2026-07-30T19:36:56.107Z" },
1236
+ { url = "https://files.pythonhosted.org/packages/cb/46/240ea004bf6dc4feb40e9832f2205a476a47dd5b8a3f8211a5fc5f95e20e/ruff-0.16.1-py3-none-win_arm64.whl", hash = "sha256:dbaadaac38c70239f056d306b7476f246b0bf000fa6b3876402acbf5b227eaf8", size = 11309414, upload-time = "2026-07-30T19:36:58.79Z" },
1237
1237
  ]
1238
1238
 
1239
1239
  [[package]]
@@ -1282,7 +1282,7 @@ wheels = [
1282
1282
 
1283
1283
  [[package]]
1284
1284
  name = "socketsecurity"
1285
- version = "2.6.1"
1285
+ version = "2.6.4"
1286
1286
  source = { editable = "." }
1287
1287
  dependencies = [
1288
1288
  { name = "beautifulsoup4" },
@@ -1321,27 +1321,27 @@ dev = [
1321
1321
 
1322
1322
  [package.metadata]
1323
1323
  requires-dist = [
1324
- { name = "beautifulsoup4", specifier = "==4.14.3" },
1324
+ { name = "beautifulsoup4", specifier = "==4.15.0" },
1325
1325
  { name = "brotli", marker = "platform_python_implementation == 'CPython'", specifier = "==1.2.0" },
1326
1326
  { name = "brotlicffi", marker = "platform_python_implementation != 'CPython'", specifier = "==1.2.0.1" },
1327
- { name = "gitpython", specifier = "==3.1.57" },
1328
- { name = "hatch", marker = "extra == 'dev'" },
1329
- { name = "markdown", specifier = "==3.10.2" },
1327
+ { name = "gitpython", specifier = "==3.1.59" },
1328
+ { name = "hatch", marker = "extra == 'dev'", specifier = "==1.17.1" },
1329
+ { name = "markdown", specifier = "==3.10.3" },
1330
1330
  { name = "mdutils", specifier = "==1.8.1" },
1331
1331
  { name = "packaging", specifier = "==26.2" },
1332
- { name = "pre-commit", marker = "extra == 'dev'" },
1332
+ { name = "pre-commit", marker = "extra == 'dev'", specifier = "==4.6.1" },
1333
1333
  { name = "prettytable", specifier = "==3.18.0" },
1334
- { name = "pytest", marker = "extra == 'test'", specifier = ">=7.4.0" },
1335
- { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.23.0" },
1336
- { name = "pytest-cov", marker = "extra == 'test'", specifier = ">=4.1.0" },
1337
- { name = "pytest-mock", marker = "extra == 'test'", specifier = ">=3.12.0" },
1338
- { name = "pytest-watch", marker = "extra == 'test'", specifier = ">=4.2.0" },
1334
+ { name = "pytest", marker = "extra == 'test'", specifier = "==9.1.1" },
1335
+ { name = "pytest-asyncio", marker = "extra == 'test'", specifier = "==1.4.0" },
1336
+ { name = "pytest-cov", marker = "extra == 'test'", specifier = "==7.1.0" },
1337
+ { name = "pytest-mock", marker = "extra == 'test'", specifier = "==3.15.1" },
1338
+ { name = "pytest-watch", marker = "extra == 'test'", specifier = "==4.2.0" },
1339
1339
  { name = "python-dotenv", specifier = "==1.2.2" },
1340
1340
  { name = "requests", specifier = "==2.34.2" },
1341
- { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.3.0" },
1341
+ { name = "ruff", marker = "extra == 'dev'", specifier = "==0.16.1" },
1342
1342
  { name = "socketdev", specifier = "==3.5.0" },
1343
- { name = "twine", marker = "extra == 'dev'" },
1344
- { name = "uv", marker = "extra == 'dev'", specifier = ">=0.1.0" },
1343
+ { name = "twine", marker = "extra == 'dev'", specifier = "==7.0.0" },
1344
+ { name = "uv", marker = "extra == 'dev'", specifier = "==0.12.0" },
1345
1345
  ]
1346
1346
  provides-extras = ["test", "dev"]
1347
1347
 
@@ -1444,7 +1444,7 @@ wheels = [
1444
1444
 
1445
1445
  [[package]]
1446
1446
  name = "twine"
1447
- version = "6.2.0"
1447
+ version = "7.0.0"
1448
1448
  source = { registry = "https://pypi.org/simple" }
1449
1449
  dependencies = [
1450
1450
  { name = "id" },
@@ -1457,9 +1457,9 @@ dependencies = [
1457
1457
  { name = "rich" },
1458
1458
  { name = "urllib3" },
1459
1459
  ]
1460
- sdist = { url = "https://files.pythonhosted.org/packages/e0/a8/949edebe3a82774c1ec34f637f5dd82d1cf22c25e963b7d63771083bbee5/twine-6.2.0.tar.gz", hash = "sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf", size = 172262, upload-time = "2025-09-04T15:43:17.255Z" }
1460
+ sdist = { url = "https://files.pythonhosted.org/packages/92/3c/58f808a359700f39a967dffede33efeac809262c03303fa3eec6afff8f49/twine-7.0.0.tar.gz", hash = "sha256:85cdb29c518efef867360ae4acd4b0dfd61c8654a22fca08e6f8539f05022177", size = 215032, upload-time = "2026-07-27T15:59:00.825Z" }
1461
1461
  wheels = [
1462
- { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" },
1462
+ { url = "https://files.pythonhosted.org/packages/96/08/ddcdc06225eaad6de0e48e1002b06d919dbde20582d0662c7af51308e5d6/twine-7.0.0-py3-none-any.whl", hash = "sha256:b854164df26db268af05f49aa5c0344b10e27a494343ff05b1e0bad3b135f5a7", size = 43204, upload-time = "2026-07-27T15:58:59.26Z" },
1463
1463
  ]
1464
1464
 
1465
1465
  [[package]]
File without changes
File without changes
File without changes