plugin-scanner 2.0.1073__tar.gz → 2.0.1075__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 (1212) hide show
  1. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/publish.yml +8 -8
  2. plugin_scanner-2.0.1073/README.md → plugin_scanner-2.0.1075/PKG-INFO +114 -10
  3. plugin_scanner-2.0.1073/PKG-INFO → plugin_scanner-2.0.1075/README.md +66 -56
  4. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/get-started.md +2 -0
  5. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/pyproject.toml +22 -4
  6. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/pyproject.toml.bak +22 -4
  7. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/cli.py +1 -0
  8. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_local.py +26 -0
  9. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_parser.py +1 -1
  10. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_parser_local.py +22 -0
  11. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_router.py +1 -0
  12. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_runtime_policy.py +2 -16
  13. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/render.py +82 -0
  14. plugin_scanner-2.0.1075/src/codex_plugin_scanner/guard/runtime/command_extensions.py +206 -0
  15. plugin_scanner-2.0.1075/src/codex_plugin_scanner/guard/runtime/command_inspection.py +135 -0
  16. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/version.py +1 -1
  17. plugin_scanner-2.0.1075/tests/test_guard_command_extensions.py +155 -0
  18. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_docs.py +2 -2
  19. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/uv.lock +1 -1
  20. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.clusterfuzzlite/Dockerfile +0 -0
  21. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.clusterfuzzlite/build.sh +0 -0
  22. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.clusterfuzzlite/project.yaml +0 -0
  23. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.clusterfuzzlite/requirements-atheris.txt +0 -0
  24. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.dockerignore +0 -0
  25. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.factory/droids/hol-guard-runner.md +0 -0
  26. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.factory/skills/hol-guard/SKILL.md +0 -0
  27. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/CODEOWNERS +0 -0
  28. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  29. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  30. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  31. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/dependabot.yml +0 -0
  32. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/pr-bodies/claude-permission-request-visible.md +0 -0
  33. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/ci.yml +0 -0
  34. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/codeql.yml +0 -0
  35. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/dependabot-uv-lock.yml +0 -0
  36. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/devcontainer-features.yml +0 -0
  37. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/fuzz.yml +0 -0
  38. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/harness-smoke.yml +0 -0
  39. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/publish-action-repo.yml +0 -0
  40. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/scorecard.yml +0 -0
  41. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.github/workflows/security-gates.yml +0 -0
  42. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.gitignore +0 -0
  43. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/.pre-commit-hooks.yaml +0 -0
  44. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/CONTRIBUTING.md +0 -0
  45. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/Dockerfile +0 -0
  46. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/LICENSE +0 -0
  47. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/PRODUCT.md +0 -0
  48. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/SECURITY.md +0 -0
  49. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/CONTRIBUTING.md +0 -0
  50. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/README.md +0 -0
  51. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/SECURITY.md +0 -0
  52. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/action.yml +0 -0
  53. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/cisco-version.txt +0 -0
  54. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/pypi-attestations-version.txt +0 -0
  55. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/scanner-sha256.txt +0 -0
  56. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/action/scanner-version.txt +0 -0
  57. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/e2e/fixture-states.ts +0 -0
  58. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/e2e/policy-cloud-exceptions-states.spec.ts +0 -0
  59. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/e2e/proof-dir.ts +0 -0
  60. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/e2e/scrg172-states.spec.ts +0 -0
  61. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/e2e/static-server.mjs +0 -0
  62. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/index.html +0 -0
  63. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/package-lock.json +0 -0
  64. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/package.json +0 -0
  65. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/playwright.config.ts +0 -0
  66. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/pnpm-lock.yaml +0 -0
  67. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/apple-touch-icon.png +0 -0
  68. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
  69. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/brand/Logo_Whole.png +0 -0
  70. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/favicon-16x16.png +0 -0
  71. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/favicon-32x32.png +0 -0
  72. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/public/favicon.ico +0 -0
  73. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-analytics.ts +0 -0
  74. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-content.test.ts +0 -0
  75. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-content.ts +0 -0
  76. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-design.test.ts +0 -0
  77. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-external-links.test.ts +0 -0
  78. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-external-links.ts +0 -0
  79. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-section-shell.test.ts +0 -0
  80. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-types.ts +0 -0
  81. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/about-workspace.tsx +0 -0
  82. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/about-external-link.tsx +0 -0
  83. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/about-footer.tsx +0 -0
  84. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/about-hero.tsx +0 -0
  85. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/about-runtime-proof-strip.tsx +0 -0
  86. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/data-boundary-panel.tsx +0 -0
  87. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/ecosystem-programs.tsx +0 -0
  88. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/open-standards-map.tsx +0 -0
  89. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/pathway-grid.tsx +0 -0
  90. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/section-shell.tsx +0 -0
  91. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/tracked-action-button.tsx +0 -0
  92. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/about/components/trust-contract-panel.tsx +0 -0
  93. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/app-activity-evidence.test.ts +0 -0
  94. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/app-detail-phase11.test.ts +0 -0
  95. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/app-detail-workspace.test.ts +0 -0
  96. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/app-routing.test.ts +0 -0
  97. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/app.tsx +0 -0
  98. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-layout.test.ts +0 -0
  99. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-layout.tsx +0 -0
  100. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-mobile.test.ts +0 -0
  101. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-primitives.tsx +0 -0
  102. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-review-cards.tsx +0 -0
  103. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-center-utils.ts +0 -0
  104. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-gate-utils.ts +0 -0
  105. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-gate.test.ts +0 -0
  106. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-proof-inline.tsx +0 -0
  107. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-proof-modal.tsx +0 -0
  108. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-scopes.test.ts +0 -0
  109. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/approval-scopes.ts +0 -0
  110. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/apps/app-catalog.ts +0 -0
  111. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/apps/app-detail-workspace.tsx +0 -0
  112. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/audit-run-progress.tsx +0 -0
  113. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/audit-workspace.tsx +0 -0
  114. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/clear-policy-payload.test.ts +0 -0
  115. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/clear-policy-payload.ts +0 -0
  116. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/cloud-user-menu.tsx +0 -0
  117. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/compare-time-periods.tsx +0 -0
  118. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/consolidated-evidence-alert.test.ts +0 -0
  119. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/consolidated-evidence-alert.tsx +0 -0
  120. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/data-flow-evidence-card.tsx +0 -0
  121. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/error-boundary.tsx +0 -0
  122. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/app-tab.tsx +0 -0
  123. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/breakdown-card.tsx +0 -0
  124. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/categories.tsx +0 -0
  125. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/category-tab.tsx +0 -0
  126. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/decision-badge.tsx +0 -0
  127. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-action-detail.tsx +0 -0
  128. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-action-list.tsx +0 -0
  129. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-activity-heatmap-mini.tsx +0 -0
  130. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-activity-heatmap.test.ts +0 -0
  131. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-activity-heatmap.tsx +0 -0
  132. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-analytics-panel.tsx +0 -0
  133. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-clear-modal.tsx +0 -0
  134. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-copy.test.ts +0 -0
  135. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-data-provenance-strip.tsx +0 -0
  136. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-detail.test.ts +0 -0
  137. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-export-drawer.tsx +0 -0
  138. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-export.test.ts +0 -0
  139. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-export.ts +0 -0
  140. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-filter-bar.tsx +0 -0
  141. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-filters.test.ts +0 -0
  142. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-filters.ts +0 -0
  143. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-format.test.ts +0 -0
  144. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-format.ts +0 -0
  145. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-hero.tsx +0 -0
  146. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insight-strip.tsx +0 -0
  147. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-headline-bento.test.ts +0 -0
  148. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-headline-bento.tsx +0 -0
  149. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-home-preview.test.ts +0 -0
  150. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-home-preview.tsx +0 -0
  151. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-layout.test.ts +0 -0
  152. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-share-button.tsx +0 -0
  153. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-share-errors.ts +0 -0
  154. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-share-modal.tsx +0 -0
  155. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-share-sheet.tsx +0 -0
  156. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-insights-surface.tsx +0 -0
  157. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-metrics.test.ts +0 -0
  158. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-metrics.ts +0 -0
  159. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-pagination.test.ts +0 -0
  160. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-pagination.ts +0 -0
  161. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-perf.test.ts +0 -0
  162. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-period.ts +0 -0
  163. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-share-bar.tsx +0 -0
  164. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-sort.test.ts +0 -0
  165. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-sort.ts +0 -0
  166. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-story.test.ts +0 -0
  167. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-table.tsx +0 -0
  168. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-trend-chart.test.ts +0 -0
  169. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-trend-chart.tsx +0 -0
  170. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-types.ts +0 -0
  171. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-url-state.test.ts +0 -0
  172. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-url-state.ts +0 -0
  173. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/evidence-view-shell.tsx +0 -0
  174. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/explore-tab.tsx +0 -0
  175. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/guard-stat-metric.tsx +0 -0
  176. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/index.ts +0 -0
  177. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/plain-english.ts +0 -0
  178. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/scoped-evidence-table.test.ts +0 -0
  179. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/scoped-evidence-table.tsx +0 -0
  180. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/sparkline.tsx +0 -0
  181. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/story-tab.tsx +0 -0
  182. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/evidence/use-receipt-analytics.ts +0 -0
  183. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/feed-health-workspace.tsx +0 -0
  184. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/fleet-workspace-phase11.test.ts +0 -0
  185. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/fleet-workspace.test.ts +0 -0
  186. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/fleet-workspace.tsx +0 -0
  187. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/github-issue-link.test.ts +0 -0
  188. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/github-issue-link.ts +0 -0
  189. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-api.test.ts +0 -0
  190. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-api.ts +0 -0
  191. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-demo.ts +0 -0
  192. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-modal-layer.tsx +0 -0
  193. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-types.ts +0 -0
  194. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-update-panel.tsx +0 -0
  195. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/guard-update.test.ts +0 -0
  196. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/harness-action-errors.test.ts +0 -0
  197. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/harness-action-errors.ts +0 -0
  198. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/help-modal.tsx +0 -0
  199. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/history-analytics.tsx +0 -0
  200. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/history-charts.tsx +0 -0
  201. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/history-export.ts +0 -0
  202. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/home-dashboard.test.ts +0 -0
  203. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/home-dashboard.tsx +0 -0
  204. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/home-protection-module.tsx +0 -0
  205. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/logged-action-panel.tsx +0 -0
  206. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/main.tsx +0 -0
  207. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-firewall-connect-browser.test.ts +0 -0
  208. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-firewall-connect-browser.ts +0 -0
  209. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-firewall-connect.test.tsx +0 -0
  210. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-workbench-common.tsx +0 -0
  211. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-workbench-filter-modal.tsx +0 -0
  212. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-workbench-finding-detail.tsx +0 -0
  213. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-workbench-panel.test.tsx +0 -0
  214. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/package-workbench-panel.tsx +0 -0
  215. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/phase09-review.test.ts +0 -0
  216. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-active-mode-card.tsx +0 -0
  217. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-detail-panel.tsx +0 -0
  218. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-draft.test.ts +0 -0
  219. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-draft.ts +0 -0
  220. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-ia.test.ts +0 -0
  221. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-layout.tsx +0 -0
  222. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-panel.tsx +0 -0
  223. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exception-request-steps.tsx +0 -0
  224. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-boundary.test.ts +0 -0
  225. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-ia.test.tsx +0 -0
  226. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-list.tsx +0 -0
  227. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-summary.tsx +0 -0
  228. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-tab.tsx +0 -0
  229. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-utils.test.ts +0 -0
  230. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-cloud-exceptions-utils.ts +0 -0
  231. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-data-truth.test.ts +0 -0
  232. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-exception-form.tsx +0 -0
  233. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-export.ts +0 -0
  234. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-final-release-guard.test.ts +0 -0
  235. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-guard-cloud-bundle-card.test.ts +0 -0
  236. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-guard-cloud-bundle-card.tsx +0 -0
  237. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-guard-cloud-bundle-helpers.ts +0 -0
  238. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-page-chrome.tsx +0 -0
  239. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-cloud-rules.tsx +0 -0
  240. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-local-rules.tsx +0 -0
  241. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-rules-right-rail.tsx +0 -0
  242. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-rules-summary.test.ts +0 -0
  243. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-rules-tab.tsx +0 -0
  244. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-remembered-rules.test.tsx +0 -0
  245. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-review-scope.test.ts +0 -0
  246. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-enforcement-preview.tsx +0 -0
  247. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-ia.test.ts +0 -0
  248. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-local-policy-card.tsx +0 -0
  249. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-right-rail.tsx +0 -0
  250. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-segmented.tsx +0 -0
  251. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-strict-mode-card.tsx +0 -0
  252. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-surfaces.ts +0 -0
  253. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-tab.tsx +0 -0
  254. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-utils.test.ts +0 -0
  255. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-strict-config-utils.ts +0 -0
  256. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-summary-surfaces.ts +0 -0
  257. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-ui-hardening.test.ts +0 -0
  258. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-workspace-helpers.test.ts +0 -0
  259. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-workspace-helpers.ts +0 -0
  260. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-workspace-page.tsx +0 -0
  261. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-workspace-views.tsx +0 -0
  262. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/policy-workspace.tsx +0 -0
  263. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-bulk-approve-flow.tsx +0 -0
  264. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-bulk-approve.test.ts +0 -0
  265. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-bulk-risk-disclosure.test.ts +0 -0
  266. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-bulk-risk-disclosure.ts +0 -0
  267. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-connection-error.tsx +0 -0
  268. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-state.test.ts +0 -0
  269. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/queue-state.ts +0 -0
  270. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/receipts-workspace.test.ts +0 -0
  271. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/receipts-workspace.tsx +0 -0
  272. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/request-read-state.test.ts +0 -0
  273. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/request-read-state.ts +0 -0
  274. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/review-workspace.tsx +0 -0
  275. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/risk-signal-cards.test.ts +0 -0
  276. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/risk-signal-cards.tsx +0 -0
  277. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/runtime-overview.test.ts +0 -0
  278. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/runtime-overview.tsx +0 -0
  279. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scanner-evidence-badge.tsx +0 -0
  280. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scrg159-170.test.ts +0 -0
  281. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scrg171-172.test.ts +0 -0
  282. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09-next-action.test.ts +0 -0
  283. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09-package-firewall-status.test.ts +0 -0
  284. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09c-evidence-rail.test.ts +0 -0
  285. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09d-intercept-drawer.test.ts +0 -0
  286. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09e-posture-banners.test.ts +0 -0
  287. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09f-mobile-polish.test.ts +0 -0
  288. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09g-cloud-capabilities.test.ts +0 -0
  289. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase09h-hero-cards.test.ts +0 -0
  290. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/scsr-phase10-package-workbench.test.ts +0 -0
  291. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/security-fixes.test.ts +0 -0
  292. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings/settings-ia.test.ts +0 -0
  293. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings/settings-ia.tsx +0 -0
  294. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings/settings-row-primitives.tsx +0 -0
  295. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings/settings-section-shell.tsx +0 -0
  296. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings-save-proof-modal.test.ts +0 -0
  297. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings-save-proof-modal.tsx +0 -0
  298. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings-workspace-phase11.test.ts +0 -0
  299. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings-workspace.test.ts +0 -0
  300. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/settings-workspace.tsx +0 -0
  301. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/shell-footer.test.ts +0 -0
  302. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/shell-footer.tsx +0 -0
  303. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/styles.css +0 -0
  304. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-connect.test.tsx +0 -0
  305. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-connect.ts +0 -0
  306. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-findings-summary.tsx +0 -0
  307. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-normalize.ts +0 -0
  308. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-recovery-modal.tsx +0 -0
  309. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-recovery.test.ts +0 -0
  310. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-recovery.ts +0 -0
  311. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-result.test.ts +0 -0
  312. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-result.ts +0 -0
  313. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-workspace.test.ts +0 -0
  314. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-audit-workspace.ts +0 -0
  315. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-bundle-panel.tsx +0 -0
  316. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-cloud-capabilities-panel.tsx +0 -0
  317. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-cloud-capabilities.ts +0 -0
  318. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-evidence-rail-panel.tsx +0 -0
  319. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-evidence-rail.ts +0 -0
  320. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-action-result.ts +0 -0
  321. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-controls.tsx +0 -0
  322. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-manager-row.tsx +0 -0
  323. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-next-action.ts +0 -0
  324. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-panel.tsx +0 -0
  325. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-firewall-views.tsx +0 -0
  326. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-hub-workspace.tsx +0 -0
  327. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-intercept-proof-modal.tsx +0 -0
  328. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-issue-focus.tsx +0 -0
  329. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-issues.test.ts +0 -0
  330. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-issues.ts +0 -0
  331. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-manager-cards.tsx +0 -0
  332. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-manager-drawer.tsx +0 -0
  333. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-posture-banners.tsx +0 -0
  334. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-posture.ts +0 -0
  335. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-protection-stats.ts +0 -0
  336. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-status-header.tsx +0 -0
  337. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-ux-consolidation.test.ts +0 -0
  338. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-workspace-hero-state.ts +0 -0
  339. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-workspace-hero.tsx +0 -0
  340. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-workspace-layout.ts +0 -0
  341. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/supply-chain-workspace.tsx +0 -0
  342. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/totp-enrollment-qr-panel.tsx +0 -0
  343. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-copy-feedback-timeout.ts +0 -0
  344. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-debounce.ts +0 -0
  345. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-focus-trap.ts +0 -0
  346. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-keyboard-shortcut.ts +0 -0
  347. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-queue-bulk-approve.test.ts +0 -0
  348. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-queue-bulk-approve.ts +0 -0
  349. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-reduced-motion.ts +0 -0
  350. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-resolved-approval-gate.ts +0 -0
  351. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-route-focus.ts +0 -0
  352. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/use-supply-chain-audit-session.ts +0 -0
  353. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/vite-env.d.ts +0 -0
  354. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/watched-app-card.tsx +0 -0
  355. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/workspace-page-header.test.tsx +0 -0
  356. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/src/workspace-page-header.tsx +0 -0
  357. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/tsconfig.json +0 -0
  358. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/dashboard/vite.config.ts +0 -0
  359. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/devcontainer-features/hol-guard/README.md +0 -0
  360. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/devcontainer-features/hol-guard/devcontainer-feature.json +0 -0
  361. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/devcontainer-features/hol-guard/install.sh +0 -0
  362. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docker-requirements.txt +0 -0
  363. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/SKILL.md +0 -0
  364. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/all-harness-hook-review.md +0 -0
  365. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/architecture.md +0 -0
  366. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/cursor-local-cloud-contract.md +0 -0
  367. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/enterprise-event-taxonomy.md +0 -0
  368. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/enterprise-export-examples.md +0 -0
  369. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/enterprise-packet.md +0 -0
  370. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/harness-support.md +0 -0
  371. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/hook-review-engine.md +0 -0
  372. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/incident-response.md +0 -0
  373. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/local-vs-cloud.md +0 -0
  374. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/pi-fast-hook-review.md +0 -0
  375. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/policy-cloud-exceptions-boundary.md +0 -0
  376. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/release-checklist.md +0 -0
  377. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/remediation.md +0 -0
  378. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/review-local-queue-contract.md +0 -0
  379. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/testing-matrix.md +0 -0
  380. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard/troubleshooting.md +0 -0
  381. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/guard-review-backend-contract.md +0 -0
  382. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/trust/mcp-trust-draft.md +0 -0
  383. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/trust/plugin-trust-draft.md +0 -0
  384. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/docs/trust/skill-trust-local.md +0 -0
  385. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/fuzzers/manifest_fuzzer.py +0 -0
  386. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/requirements.txt +0 -0
  387. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/schemas/plugin-quality.v1.json +0 -0
  388. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/schemas/scan-result.v1.json +0 -0
  389. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/schemas/verify-result.v1.json +0 -0
  390. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/bench_guard_hooks.py +0 -0
  391. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/codex-auto-resume-smoke.py +0 -0
  392. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/e2e-cursor-hook-smoke.py +0 -0
  393. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/run-cloud-exception-sync-proof.sh +0 -0
  394. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/run-policy-cloud-exceptions-release-audit.sh +0 -0
  395. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/sync_repo_version.py +0 -0
  396. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/scripts/update_awesome_codex_plugins_contributing.py +0 -0
  397. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/__init__.py +0 -0
  398. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/_scanner_commands.py +0 -0
  399. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/action_runner.py +0 -0
  400. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/argparse_utils.py +0 -0
  401. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/__init__.py +0 -0
  402. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
  403. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/claude.py +0 -0
  404. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
  405. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
  406. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/gemini.py +0 -0
  407. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/manifest.py +0 -0
  408. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
  409. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
  410. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
  411. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/opencode.py +0 -0
  412. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
  413. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/security.py +0 -0
  414. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
  415. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/cli_ui.py +0 -0
  416. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/config.py +0 -0
  417. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
  418. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
  419. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
  420. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
  421. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
  422. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
  423. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
  424. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
  425. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
  426. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/github_reporting.py +0 -0
  427. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/__init__.py +0 -0
  428. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/access_graph_events.py +0 -0
  429. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
  430. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
  431. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
  432. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
  433. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/claude_daemon_hook_bridge.py +0 -0
  434. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/cloud_identity.py +0 -0
  435. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
  436. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/codex_daemon_hook_bridge.py +0 -0
  437. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/codex_remote_control.py +0 -0
  438. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/contracts.py +0 -0
  439. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
  440. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
  441. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/cursor_cli.py +0 -0
  442. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/cursor_hooks.py +0 -0
  443. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/cursor_native_approval.py +0 -0
  444. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
  445. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/grok.py +0 -0
  446. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/grok_config.py +0 -0
  447. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/grok_hooks.py +0 -0
  448. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
  449. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/hook_python.py +0 -0
  450. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/kimi.py +0 -0
  451. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/kimi_hooks.py +0 -0
  452. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
  453. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/openclaw.py +0 -0
  454. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/openclaw_config.py +0 -0
  455. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/openclaw_support.py +0 -0
  456. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
  457. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
  458. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/opencode_pretool.py +0 -0
  459. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi.py +0 -0
  460. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi_extension_approval_source.py +0 -0
  461. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi_extension_content_source.py +0 -0
  462. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi_extension_source.py +0 -0
  463. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi_hooks.py +0 -0
  464. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/pi_support.py +0 -0
  465. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/zcode.py +0 -0
  466. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/zcode_config.py +0 -0
  467. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/adapters/zcode_hooks.py +0 -0
  468. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/advisory_model.py +0 -0
  469. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/aibom_cli.py +0 -0
  470. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/aibom_content_upload.py +0 -0
  471. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/aibom_detection.py +0 -0
  472. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/aibom_symlink.py +0 -0
  473. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/aibom_trust_metadata.py +0 -0
  474. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/approval_gate.py +0 -0
  475. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/approval_gate_state.py +0 -0
  476. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/approval_scope_support.py +0 -0
  477. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/approvals.py +0 -0
  478. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
  479. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
  480. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
  481. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/_commands_shared.py +0 -0
  482. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
  483. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/approval_gate_prompt.py +0 -0
  484. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
  485. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands.py +0 -0
  486. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_admin.py +0 -0
  487. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_cloud.py +0 -0
  488. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_proxy.py +0 -0
  489. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_records.py +0 -0
  490. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_dispatch_trust.py +0 -0
  491. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook.py +0 -0
  492. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_claude.py +0 -0
  493. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_copilot.py +0 -0
  494. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_generic.py +0 -0
  495. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_runtime_eval.py +0 -0
  496. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_runtime_finish.py +0 -0
  497. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_runtime_review.py +0 -0
  498. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_hook_runtime_state.py +0 -0
  499. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_parser_cloud.py +0 -0
  500. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_parser_helpers.py +0 -0
  501. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_parser_policy.py +0 -0
  502. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support.py +0 -0
  503. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_claude_approval.py +0 -0
  504. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_commands.py +0 -0
  505. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_git.py +0 -0
  506. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_paths.py +0 -0
  507. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_reads.py +0 -0
  508. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_tool_output.py +0 -0
  509. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_codex_tool_output_messages.py +0 -0
  510. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_connect.py +0 -0
  511. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_hook_payload.py +0 -0
  512. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_hook_state.py +0 -0
  513. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_interaction.py +0 -0
  514. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_native_search.py +0 -0
  515. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_permission_store.py +0 -0
  516. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_prompts.py +0 -0
  517. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_runtime_artifacts.py +0 -0
  518. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_runtime_resolution.py +0 -0
  519. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_service.py +0 -0
  520. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/commands_support_workspace.py +0 -0
  521. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
  522. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/cursor_actions.py +0 -0
  523. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/dashboard_sync.py +0 -0
  524. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/docs.py +0 -0
  525. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
  526. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/install_dry_run.py +0 -0
  527. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/oauth_client.py +0 -0
  528. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
  529. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/progress.py +0 -0
  530. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
  531. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/protect_approvals.py +0 -0
  532. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/remote_pair_flow.py +0 -0
  533. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/render_uninstall.py +0 -0
  534. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/uninstall_commands.py +0 -0
  535. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
  536. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cloud_exception_requests.py +0 -0
  537. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/cloud_exceptions.py +0 -0
  538. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/codex_app_server.py +0 -0
  539. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
  540. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/codex_resume.py +0 -0
  541. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/codex_skill_config.py +0 -0
  542. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/config.py +0 -0
  543. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
  544. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
  545. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/contracts/__init__.py +0 -0
  546. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/contracts/supply_chain_decision_evidence_v1.py +0 -0
  547. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
  548. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
  549. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/command_queue_worker.py +0 -0
  550. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/dashboard_update.py +0 -0
  551. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/dashboard_update_runner.py +0 -0
  552. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/hook_metrics.py +0 -0
  553. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/hook_worker.py +0 -0
  554. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
  555. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
  556. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
  557. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/about-workspace.js +0 -0
  558. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-catalog.js +0 -0
  559. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-detail-workspace.js +0 -0
  560. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/audit-workspace.js +0 -0
  561. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/feed-health-workspace.js +0 -0
  562. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/fleet-workspace.js +0 -0
  563. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/help-modal.js +0 -0
  564. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-dashboard.js +0 -0
  565. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-protection-module.js +0 -0
  566. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/policy-workspace-page.js +0 -0
  567. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/settings-workspace.js +0 -0
  568. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-hub-workspace.js +0 -0
  569. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-protection-stats.js +0 -0
  570. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-workspace.js +0 -0
  571. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
  572. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
  573. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
  574. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
  575. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
  576. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
  577. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
  578. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
  579. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/desktop_notifications.py +0 -0
  580. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
  581. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/harness_resume.py +0 -0
  582. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/harness_usage.py +0 -0
  583. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/incident.py +0 -0
  584. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/insights.py +0 -0
  585. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/insights_share.py +0 -0
  586. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/inventory_cisco.py +0 -0
  587. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/inventory_contract.py +0 -0
  588. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/inventory_item_description.py +0 -0
  589. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/launcher.py +0 -0
  590. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/local_dashboard_session.py +0 -0
  591. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/local_supply_chain.py +0 -0
  592. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/local_trust_contract.py +0 -0
  593. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/local_trust_controller.py +0 -0
  594. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/__init__.py +0 -0
  595. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/adapters.py +0 -0
  596. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/sanitizers.py +0 -0
  597. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/schemas.py +0 -0
  598. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/server.py +0 -0
  599. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp/tools.py +0 -0
  600. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
  601. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/memory_decision_event.py +0 -0
  602. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/memory_decision_outbox.py +0 -0
  603. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/memory_pattern_fingerprint.py +0 -0
  604. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/models.py +0 -0
  605. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_firewall_action_rate_limit.py +0 -0
  606. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_firewall_defaults.py +0 -0
  607. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_firewall_entitlement.py +0 -0
  608. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_firewall_receipts.py +0 -0
  609. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_shim_gate.py +0 -0
  610. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/package_shim_status.py +0 -0
  611. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
  612. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
  613. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy_authority.py +0 -0
  614. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy_bundle_parser.py +0 -0
  615. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy_bundle_trusted_keys.py +0 -0
  616. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/policy_integrity.py +0 -0
  617. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/product_model.py +0 -0
  618. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/protect.py +0 -0
  619. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/provenance.py +0 -0
  620. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
  621. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/proxy/_env.py +0 -0
  622. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
  623. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
  624. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
  625. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
  626. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
  627. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/redaction.py +0 -0
  628. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/remote_pairing_constants.py +0 -0
  629. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/review_contracts.py +0 -0
  630. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/review_memory_ack.py +0 -0
  631. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/risk.py +0 -0
  632. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
  633. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/action_identity.py +0 -0
  634. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/actions.py +0 -0
  635. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/advisory_escalation.py +0 -0
  636. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/advisory_matchers.py +0 -0
  637. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/approval_attention.py +0 -0
  638. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/auto_update.py +0 -0
  639. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/browser_mcp_intent.py +0 -0
  640. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/cisco_evidence.py +0 -0
  641. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/cisco_preflight.py +0 -0
  642. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/command_executors.py +0 -0
  643. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/command_queue.py +0 -0
  644. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/composition_rules.py +0 -0
  645. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/data_flow.py +0 -0
  646. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/data_flow_rules.py +0 -0
  647. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/data_flow_variables.py +0 -0
  648. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/decisions.py +0 -0
  649. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/detectors.py +0 -0
  650. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/evidence_hash.py +0 -0
  651. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/false_positive_rules.py +0 -0
  652. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/harness_attribution.py +0 -0
  653. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/homebrew_intent.py +0 -0
  654. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_content_scanner.py +0 -0
  655. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_decision_cache.py +0 -0
  656. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_enrichment_queue.py +0 -0
  657. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_output_text.py +0 -0
  658. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_payload_reference.py +0 -0
  659. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_review_engine.py +0 -0
  660. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_review_types.py +0 -0
  661. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/hook_source_read.py +0 -0
  662. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/js_semver.py +0 -0
  663. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/kubernetes_command_support.py +0 -0
  664. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/kubernetes_commands.py +0 -0
  665. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/kubernetes_heredoc_support.py +0 -0
  666. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/live_request_sync.py +0 -0
  667. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/local_request_snapshots.py +0 -0
  668. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/manifest_dependency_targets.py +0 -0
  669. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/mcp_protection.py +0 -0
  670. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/mcp_skill_firewall.py +0 -0
  671. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/package_intent.py +0 -0
  672. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/package_intent_common.py +0 -0
  673. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/package_intent_parser.py +0 -0
  674. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/package_manager_command.py +0 -0
  675. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/package_manifest_diff.py +0 -0
  676. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/persistence_rules.py +0 -0
  677. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/prompt_injection.py +0 -0
  678. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
  679. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/safe_decode.py +0 -0
  680. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/sandbox.py +0 -0
  681. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/scanner_cache.py +0 -0
  682. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
  683. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/secret_sensitivity.py +0 -0
  684. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/secret_sources.py +0 -0
  685. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/sed_scripts.py +0 -0
  686. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/self_approval.py +0 -0
  687. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/shell_command_wrappers.py +0 -0
  688. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/shell_commands.py +0 -0
  689. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/signals.py +0 -0
  690. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/skill_protection.py +0 -0
  691. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/source_paths.py +0 -0
  692. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain.py +0 -0
  693. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle.py +0 -0
  694. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_base.py +0 -0
  695. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_models.py +0 -0
  696. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_runtime.py +0 -0
  697. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_package_eval.py +0 -0
  698. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/supply_chain_support.py +0 -0
  699. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
  700. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/temp_files.py +0 -0
  701. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/threat_intel.py +0 -0
  702. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/trust_attestation.py +0 -0
  703. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/runtime/workspace_path_guard.py +0 -0
  704. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
  705. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
  706. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
  707. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/schemas/guard_product_model_v1.json +0 -0
  708. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
  709. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/shell_profile_cleanup.py +0 -0
  710. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/shim_probe.py +0 -0
  711. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/shims.py +0 -0
  712. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/skill_document_evidence.py +0 -0
  713. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/sqlite_tuning.py +0 -0
  714. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/stable_digest.py +0 -0
  715. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store.py +0 -0
  716. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_approval_facade.py +0 -0
  717. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
  718. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_base.py +0 -0
  719. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_cloud_events.py +0 -0
  720. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
  721. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_connection_schema.py +0 -0
  722. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_event_receipts.py +0 -0
  723. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_evidence.py +0 -0
  724. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_evidence_facade.py +0 -0
  725. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_inventory.py +0 -0
  726. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_live_request_outbox.py +0 -0
  727. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_oauth.py +0 -0
  728. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_policy.py +0 -0
  729. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_policy_decision.py +0 -0
  730. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_policy_integrity_runtime.py +0 -0
  731. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_policy_source_context.py +0 -0
  732. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_read_state.py +0 -0
  733. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_receipt_rollups.py +0 -0
  734. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_receipts.py +0 -0
  735. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_resume.py +0 -0
  736. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_secret_policy_integrity.py +0 -0
  737. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_sessions.py +0 -0
  738. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_supply_chain.py +0 -0
  739. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/store_threat_intel.py +0 -0
  740. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/text.py +0 -0
  741. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/totp.py +0 -0
  742. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/guard/types.py +0 -0
  743. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/install_integrity.py +0 -0
  744. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
  745. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
  746. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
  747. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/lint_fixes.py +0 -0
  748. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/marketplace_support.py +0 -0
  749. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/models.py +0 -0
  750. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/path_support.py +0 -0
  751. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/policy.py +0 -0
  752. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/quality_artifact.py +0 -0
  753. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/repo_detect.py +0 -0
  754. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/reporting.py +0 -0
  755. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/rules/__init__.py +0 -0
  756. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/rules/registry.py +0 -0
  757. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/rules/specs.py +0 -0
  758. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/scanner.py +0 -0
  759. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/submission.py +0 -0
  760. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/suppressions.py +0 -0
  761. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
  762. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_helpers.py +0 -0
  763. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_instruction_scoring.py +0 -0
  764. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
  765. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_models.py +0 -0
  766. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
  767. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_scoring.py +0 -0
  768. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
  769. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/trust_specs.py +0 -0
  770. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/src/codex_plugin_scanner/verification.py +0 -0
  771. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/__init__.py +0 -0
  772. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/bundle_first_cloud.py +0 -0
  773. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/cloud_exception_bundle_fixtures.py +0 -0
  774. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/conftest.py +0 -0
  775. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/docker/test_all_harness_hooks.py +0 -0
  776. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/e2e_droid_exec.py +0 -0
  777. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/__init__.py +0 -0
  778. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
  779. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/bad-plugin/.mcp.json +0 -0
  780. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/bad-plugin/secrets.js +0 -0
  781. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
  782. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
  783. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/README.md +0 -0
  784. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
  785. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
  786. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
  787. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/code-quality-bad/evil.js +0 -0
  788. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/code-quality-bad/inject.js +0 -0
  789. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/benign-echo.json +0 -0
  790. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/benign-health-check.json +0 -0
  791. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/expected-permissions.json +0 -0
  792. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/malicious-aws-credentials-read.json +0 -0
  793. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/malicious-canary-exfil-shell.json +0 -0
  794. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/malicious-env-read.json +0 -0
  795. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/cursor-hooks/malicious-mcp-secret-read.json +0 -0
  796. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
  797. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
  798. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/README.md +0 -0
  799. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
  800. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
  801. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
  802. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
  803. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/.codexignore +0 -0
  804. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/LICENSE +0 -0
  805. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/README.md +0 -0
  806. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/SECURITY.md +0 -0
  807. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
  808. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
  809. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
  810. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
  811. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_bash.json +0 -0
  812. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_edit.json +0 -0
  813. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_grep_safe.json +0 -0
  814. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_mcp.json +0 -0
  815. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_read_secret.json +0 -0
  816. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_unknown_tool.json +0 -0
  817. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/pretooluse_webfetch.json +0 -0
  818. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/grok/user_prompt_submit.json +0 -0
  819. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/README.md +0 -0
  820. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/benign-docs-fake-token.py +0 -0
  821. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/benign-health-endpoint.py +0 -0
  822. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/benign-nvmrc-fake-creds.py +0 -0
  823. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/benign-source-search.py +0 -0
  824. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/canary-exfil-encoded.py +0 -0
  825. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/canary-exfil.py +0 -0
  826. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/expected-decisions.json +0 -0
  827. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-dockerfile.txt +0 -0
  828. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-encoded-shell-exfil.py +0 -0
  829. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-github-action.yml +0 -0
  830. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-mcp-delete.md +0 -0
  831. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-mcp-secret-read.md +0 -0
  832. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-mcp-skill-exfil.md +0 -0
  833. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-npm-postinstall.js +0 -0
  834. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-prompt-env-read.md +0 -0
  835. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-prompt-guard-bypass.md +0 -0
  836. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-prompt-npmrc-read.md +0 -0
  837. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/malicious-python-setup.py +0 -0
  838. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/guard-red-team/smoke-evidence-template.json +0 -0
  839. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
  840. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
  841. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
  842. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
  843. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
  844. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
  845. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
  846. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/hook_payloads/README.md +0 -0
  847. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
  848. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
  849. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
  850. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
  851. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
  852. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
  853. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
  854. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/mcp-canary-server.py +0 -0
  855. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
  856. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
  857. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/mit-license/LICENSE +0 -0
  858. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
  859. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
  860. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
  861. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
  862. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
  863. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
  864. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
  865. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
  866. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
  867. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
  868. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
  869. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
  870. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
  871. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
  872. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
  873. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
  874. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
  875. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
  876. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/LICENSE +0 -0
  877. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/README.md +0 -0
  878. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/SECURITY.md +0 -0
  879. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
  880. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
  881. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
  882. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
  883. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/benign-npm-controls-package.json +0 -0
  884. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/benign-npm-package.json +0 -0
  885. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/benign-pnpm-package.json +0 -0
  886. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/benign-pyproject.toml +0 -0
  887. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/critical-base-image-Dockerfile +0 -0
  888. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-Dockerfile +0 -0
  889. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-action.yml +0 -0
  890. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-npm-env-fs-network-package.json +0 -0
  891. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-npm-obfuscated-package.json +0 -0
  892. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-npm-package.json +0 -0
  893. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/supply-chain/malicious-setup.py +0 -0
  894. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/cargo-safe/Cargo.lock +0 -0
  895. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/cargo-safe/Cargo.toml +0 -0
  896. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/cargo-vulnerable/Cargo.lock +0 -0
  897. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/cargo-vulnerable/Cargo.toml +0 -0
  898. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/composer-safe/composer.json +0 -0
  899. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/composer-safe/composer.lock +0 -0
  900. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/composer-vulnerable/composer.json +0 -0
  901. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/composer-vulnerable/composer.lock +0 -0
  902. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/go-safe/go.mod +0 -0
  903. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/go-vulnerable/go.mod +0 -0
  904. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/gradle-safe/build.gradle +0 -0
  905. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/gradle-safe/gradle.lockfile +0 -0
  906. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/gradle-vulnerable/build.gradle +0 -0
  907. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/gradle-vulnerable/gradle.lockfile +0 -0
  908. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/maven-safe/pom.xml +0 -0
  909. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/maven-vulnerable/pom.xml +0 -0
  910. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/rubygems-safe/Gemfile +0 -0
  911. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/rubygems-safe/Gemfile.lock +0 -0
  912. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile +0 -0
  913. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile.lock +0 -0
  914. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
  915. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
  916. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/with-marketplace/marketplace.json +0 -0
  917. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/zcode/pretooluse_bash.json +0 -0
  918. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/zcode/pretooluse_mcp.json +0 -0
  919. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/fixtures/zcode/user_prompt_submit.json +0 -0
  920. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/guard_python_phase12_support.py +0 -0
  921. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/guard_review_signing_helpers.py +0 -0
  922. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/guard_tier2_phase13_support.py +0 -0
  923. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/shim_execution_helpers.py +0 -0
  924. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/support/keyring.py +0 -0
  925. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_action_bundle.py +0 -0
  926. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_action_runner.py +0 -0
  927. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_aibom_chunking.py +0 -0
  928. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_best_practices.py +0 -0
  929. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cisco_install_surfaces.py +0 -0
  930. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_claude_daemon_hook_bridge.py +0 -0
  931. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cli.py +0 -0
  932. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cli_hook_source_ref.py +0 -0
  933. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cloud_exception_requests.py +0 -0
  934. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cloud_exception_sync_proof.py +0 -0
  935. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_code_quality.py +0 -0
  936. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_codex_daemon_hook_bridge.py +0 -0
  937. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_codex_remote_control.py +0 -0
  938. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_codex_skill_config.py +0 -0
  939. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_command_keys_and_uri_schemes.py +0 -0
  940. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_config.py +0 -0
  941. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_coverage_remaining.py +0 -0
  942. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_adapter.py +0 -0
  943. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_cli.py +0 -0
  944. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_completion_gates.py +0 -0
  945. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_headless_fixtures.py +0 -0
  946. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_hooks.py +0 -0
  947. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_cursor_local_actions.py +0 -0
  948. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_dashboard_sync_security.py +0 -0
  949. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_dashboard_update.py +0 -0
  950. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_ecosystems.py +0 -0
  951. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_edge_cases.py +0 -0
  952. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_final_coverage.py +0 -0
  953. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_gemini_adapter.py +0 -0
  954. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_grok_adapter.py +0 -0
  955. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_access_graph.py +0 -0
  956. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_action_identity.py +0 -0
  957. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_advisory_escalation.py +0 -0
  958. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_cli.py +0 -0
  959. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_content_upload.py +0 -0
  960. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_detection.py +0 -0
  961. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_local_trust_coverage.py +0 -0
  962. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_serializer_security.py +0 -0
  963. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_symlink.py +0 -0
  964. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_symlink_negative_matrix.py +0 -0
  965. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_aibom_trust_metadata.py +0 -0
  966. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_attention.py +0 -0
  967. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_continuity.py +0 -0
  968. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_copy_commands.py +0 -0
  969. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_decisions.py +0 -0
  970. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_gate.py +0 -0
  971. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_store_dedup.py +0 -0
  972. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_store_phase14.py +0 -0
  973. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approval_store_scale.py +0 -0
  974. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_approvals.py +0 -0
  975. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_auto_first_sync.py +0 -0
  976. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_bootstrap.py +0 -0
  977. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_bridge.py +0 -0
  978. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_browser_mcp_intent.py +0 -0
  979. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_bulk_allow_once.py +0 -0
  980. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_bun_install_approval_replay.py +0 -0
  981. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_bypass_detector.py +0 -0
  982. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_canary_fixtures.py +0 -0
  983. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_capabilities.py +0 -0
  984. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cisco_evidence.py +0 -0
  985. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cisco_runtime_cli.py +0 -0
  986. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_claude_adapter.py +0 -0
  987. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cli.py +0 -0
  988. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cli_commands_facade.py +0 -0
  989. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cloud_exceptions.py +0 -0
  990. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_cloud_local_sync.py +0 -0
  991. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_app_server.py +0 -0
  992. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_auto_resume_smoke.py +0 -0
  993. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_e2e.py +0 -0
  994. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_install.py +0 -0
  995. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_proxy.py +0 -0
  996. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_resume_commands.py +0 -0
  997. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_codex_resume_endpoints.py +0 -0
  998. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_command_executors_update.py +0 -0
  999. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_command_queue.py +0 -0
  1000. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_command_queue_stale_pending_result.py +0 -0
  1001. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_command_snapshot_paging.py +0 -0
  1002. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_commands_router.py +0 -0
  1003. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_config_paths.py +0 -0
  1004. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_connect_flow.py +0 -0
  1005. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_consumer_mode.py +0 -0
  1006. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_copilot_adapter.py +0 -0
  1007. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_copilot_proxy.py +0 -0
  1008. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_cli.py +0 -0
  1009. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_live_sync_lifecycle.py +0 -0
  1010. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_manager.py +0 -0
  1011. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_perf.py +0 -0
  1012. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_registry.py +0 -0
  1013. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_repair_perf.py +0 -0
  1014. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_daemon_wake.py +0 -0
  1015. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_data_flow.py +0 -0
  1016. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_decision_propagation.py +0 -0
  1017. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_desktop_notifications.py +0 -0
  1018. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_detector_fp.py +0 -0
  1019. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_event_schema_v1.py +0 -0
  1020. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_events.py +0 -0
  1021. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_evidence_api_contract.py +0 -0
  1022. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_evidence_store.py +0 -0
  1023. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_grok_protection.py +0 -0
  1024. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_harness_contracts.py +0 -0
  1025. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_harness_setup.py +0 -0
  1026. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_harness_smoke.py +0 -0
  1027. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_hashnet_mcp_canaries.py +0 -0
  1028. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_headless_daemon_api.py +0 -0
  1029. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_hook_payload_reference.py +0 -0
  1030. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_hook_worker.py +0 -0
  1031. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_hosted_dashboard_origin_blocklist.py +0 -0
  1032. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_init.py +0 -0
  1033. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_insights.py +0 -0
  1034. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_install_workspace.py +0 -0
  1035. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_inventory_cisco.py +0 -0
  1036. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_inventory_cisco_cloud_authority.py +0 -0
  1037. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_inventory_contract.py +0 -0
  1038. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_lab_phase11.py +0 -0
  1039. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_lockfile_resolution_phase11.py +0 -0
  1040. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_package_hook_phase11.py +0 -0
  1041. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_package_intent_phase11.py +0 -0
  1042. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_semver_phase11.py +0 -0
  1043. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_js_supply_chain_phase11.py +0 -0
  1044. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_kubernetes_runtime.py +0 -0
  1045. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_launch_env.py +0 -0
  1046. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_legacy_token_fixtures.py +0 -0
  1047. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_live_request_outbox.py +0 -0
  1048. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_live_request_sync.py +0 -0
  1049. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_local_supply_chain_audit_phase16.py +0 -0
  1050. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_local_supply_chain_phase15.py +0 -0
  1051. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_manifest_install_firewall.py +0 -0
  1052. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_manifest_path_traversal.py +0 -0
  1053. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_contract.py +0 -0
  1054. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_detectors.py +0 -0
  1055. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_package_proxy_phase14.py +0 -0
  1056. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_protection.py +0 -0
  1057. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_sanitization.py +0 -0
  1058. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_mcp_skill_firewall.py +0 -0
  1059. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_memory_decision_event.py +0 -0
  1060. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_memory_decision_outbox.py +0 -0
  1061. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_non_codex_resume.py +0 -0
  1062. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_oauth_client.py +0 -0
  1063. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_oauth_device_connect.py +0 -0
  1064. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_oauth_reconnect.py +0 -0
  1065. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_opencode_proxy.py +0 -0
  1066. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_firewall_entitlement.py +0 -0
  1067. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_firewall_reuse_proof.py +0 -0
  1068. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_hook.py +0 -0
  1069. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_hook_phase14.py +0 -0
  1070. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_intent.py +0 -0
  1071. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_resume_phase14.py +0 -0
  1072. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_shims.py +0 -0
  1073. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_shims_cli.py +0 -0
  1074. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_package_support_matrix.py +0 -0
  1075. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase03_local_install.py +0 -0
  1076. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase03_remainder.py +0 -0
  1077. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase04_failure_modes.py +0 -0
  1078. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase04_harness_contracts.py +0 -0
  1079. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase04_harness_ux.py +0 -0
  1080. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase04_install_reason_proofs.py +0 -0
  1081. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase05_approval_memory.py +0 -0
  1082. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase05_manager_coverage.py +0 -0
  1083. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase06_workspace_audit.py +0 -0
  1084. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase07_entitlement_daemon_security.py +0 -0
  1085. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase07_harness_coverage_matrix.py +0 -0
  1086. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase11_package_firewall_receipts.py +0 -0
  1087. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_phase11_package_firewall_status.py +0 -0
  1088. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_policy_bundle_browser_scopes.py +0 -0
  1089. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_policy_dedup.py +0 -0
  1090. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_policy_integrity.py +0 -0
  1091. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_policy_source_context.py +0 -0
  1092. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_product_flow.py +0 -0
  1093. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_product_model_contracts.py +0 -0
  1094. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_prompt_injection.py +0 -0
  1095. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_protect.py +0 -0
  1096. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_protect_package_spec_parsing.py +0 -0
  1097. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_provenance.py +0 -0
  1098. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_proxy_env_scrubbing.py +0 -0
  1099. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_python_lab_phase12.py +0 -0
  1100. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_python_package_hook_phase12.py +0 -0
  1101. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_python_package_intent_phase12.py +0 -0
  1102. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_python_supply_chain_heuristics_phase12.py +0 -0
  1103. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_python_supply_chain_phase12.py +0 -0
  1104. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_queue_api_contract.py +0 -0
  1105. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_queue_contract.py +0 -0
  1106. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_receipt_command_detail_backfill.py +0 -0
  1107. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_receipt_p5_fields.py +0 -0
  1108. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_receipt_persistence.py +0 -0
  1109. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_receipt_redaction_cursor.py +0 -0
  1110. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_receipt_redaction_level.py +0 -0
  1111. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_red_team.py +0 -0
  1112. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_red_team_e2e.py +0 -0
  1113. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_redaction.py +0 -0
  1114. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_registry_broker_skills_canaries.py +0 -0
  1115. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_remote_pair_flow.py +0 -0
  1116. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_remote_pair_proof.py +0 -0
  1117. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_render.py +0 -0
  1118. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_resolution_copy.py +0 -0
  1119. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_risk.py +0 -0
  1120. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime.py +0 -0
  1121. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_action_harnesses.py +0 -0
  1122. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_actions.py +0 -0
  1123. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_actions_phase14.py +0 -0
  1124. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_decisions.py +0 -0
  1125. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_detectors.py +0 -0
  1126. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_runtime_signals.py +0 -0
  1127. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_safe_decode.py +0 -0
  1128. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_sandbox.py +0 -0
  1129. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_settings_api.py +0 -0
  1130. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_settings_presets.py +0 -0
  1131. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_shell_command_wrappers.py +0 -0
  1132. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_shim_intercept_proofs.py +0 -0
  1133. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_shim_profile.py +0 -0
  1134. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_shim_truth.py +0 -0
  1135. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_skill_document_evidence.py +0 -0
  1136. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_skill_protection.py +0 -0
  1137. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_skill_protection_phase14.py +0 -0
  1138. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_source_search_redaction.py +0 -0
  1139. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_source_view_secret_fixtures.py +0 -0
  1140. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_stable_digest.py +0 -0
  1141. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_store_migrations.py +0 -0
  1142. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain.py +0 -0
  1143. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_bundle.py +0 -0
  1144. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_daemon.py +0 -0
  1145. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_decision_contract.py +0 -0
  1146. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_disclosure_reasons.py +0 -0
  1147. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_evaluator.py +0 -0
  1148. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_supply_chain_sync.py +0 -0
  1149. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_surface_server.py +0 -0
  1150. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_sync_http_error_message.py +0 -0
  1151. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_threat_intel.py +0 -0
  1152. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_tier2_labs_phase13.py +0 -0
  1153. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_tier2_package_intent_phase13.py +0 -0
  1154. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_tier2_supply_chain_phase13.py +0 -0
  1155. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_trust_cli_passive_backend.py +0 -0
  1156. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_uninstall_commands.py +0 -0
  1157. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_verdicts.py +0 -0
  1158. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_web_recovery.py +0 -0
  1159. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_guard_wrapper_flows.py +0 -0
  1160. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_harness_attribution.py +0 -0
  1161. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hermes_adapter.py +0 -0
  1162. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_content_scanner.py +0 -0
  1163. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_decision_cache.py +0 -0
  1164. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_enrichment_queue.py +0 -0
  1165. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_metrics.py +0 -0
  1166. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_review_engine.py +0 -0
  1167. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_review_types.py +0 -0
  1168. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_security_regressions.py +0 -0
  1169. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_source_paths.py +0 -0
  1170. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_hook_source_read_fast_path.py +0 -0
  1171. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_insights_share.py +0 -0
  1172. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_install_integrity.py +0 -0
  1173. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_integration.py +0 -0
  1174. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_inventory_item_description.py +0 -0
  1175. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_kimi_adapter.py +0 -0
  1176. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_lint_fixes.py +0 -0
  1177. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_live_cisco_smoke.py +0 -0
  1178. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_manifest.py +0 -0
  1179. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_marketplace.py +0 -0
  1180. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_mcp_security.py +0 -0
  1181. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_mcp_tool_call_raw_command_text.py +0 -0
  1182. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_multi_source_connect.py +0 -0
  1183. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_openclaw_adapter.py +0 -0
  1184. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_opencode_adapter.py +0 -0
  1185. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_opencode_hook_python.py +0 -0
  1186. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_opencode_pretool.py +0 -0
  1187. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_operational_security.py +0 -0
  1188. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_pi_adapter.py +0 -0
  1189. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_pi_managed_extension_prune.py +0 -0
  1190. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_policy.py +0 -0
  1191. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_policy_bundle_parser.py +0 -0
  1192. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_policy_decision_source_context.py +0 -0
  1193. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_pr_testpypi_canary_workflow.py +0 -0
  1194. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_quality_artifact.py +0 -0
  1195. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_raw_command_text.py +0 -0
  1196. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_rule_registry.py +0 -0
  1197. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_scanner.py +0 -0
  1198. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_schema_contracts.py +0 -0
  1199. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_security.py +0 -0
  1200. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_security_ops.py +0 -0
  1201. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_shim_probe_security.py +0 -0
  1202. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_skill_security.py +0 -0
  1203. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_skill_uri_blocking.py +0 -0
  1204. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_submission.py +0 -0
  1205. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_sync_repo_version.py +0 -0
  1206. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_trust_scoring.py +0 -0
  1207. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_trust_specs.py +0 -0
  1208. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_verification.py +0 -0
  1209. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_versioning.py +0 -0
  1210. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_zcode_adapter.py +0 -0
  1211. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_zcode_hooks.py +0 -0
  1212. {plugin_scanner-2.0.1073 → plugin_scanner-2.0.1075}/tests/test_zcode_mcp.py +0 -0
@@ -119,11 +119,6 @@ jobs:
119
119
  path = Path("pyproject.toml")
120
120
  text = path.read_text(encoding="utf-8")
121
121
  text = text.replace('name = "hol-guard"', 'name = "hol-guard"', 1)
122
- text = text.replace(
123
- 'description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."',
124
- 'description = "Protect local AI harnesses with HOL Guard before tools run in Codex, Claude Code, Cursor, Gemini, and OpenCode."',
125
- 1,
126
- )
127
122
  start = text.index("[project.scripts]")
128
123
  end = text.index("\n\n[project.urls]")
129
124
  scripts = "[project.scripts]\n" \
@@ -138,16 +133,21 @@ jobs:
138
133
  run: |
139
134
  cp pyproject.toml pyproject.toml.bak
140
135
  python3 - <<'PY'
136
+ import re
141
137
  from pathlib import Path
142
138
 
143
139
  path = Path("pyproject.toml")
144
140
  text = path.read_text(encoding="utf-8")
145
141
  text = text.replace('name = "hol-guard"', 'name = "plugin-scanner"', 1)
146
- text = text.replace(
147
- 'description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."',
142
+ text, description_count = re.subn(
143
+ r'^description = ".*"$',
148
144
  'description = "Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows."',
149
- 1,
145
+ text,
146
+ count=1,
147
+ flags=re.MULTILINE,
150
148
  )
149
+ if description_count != 1:
150
+ raise RuntimeError("Expected one project description in pyproject.toml")
151
151
  start = text.index("[project.scripts]")
152
152
  end = text.index("\n\n[project.urls]")
153
153
  scripts = "[project.scripts]\n" \
@@ -1,4 +1,52 @@
1
- # HOL Guard
1
+ Metadata-Version: 2.4
2
+ Name: plugin-scanner
3
+ Version: 2.0.1075
4
+ Summary: Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows.
5
+ Project-URL: Homepage, https://hol.org/guard
6
+ Project-URL: Documentation, https://github.com/hashgraph-online/hol-guard/tree/main/docs/guard
7
+ Project-URL: Repository, https://github.com/hashgraph-online/hol-guard
8
+ Project-URL: Issues, https://github.com/hashgraph-online/hol-guard/issues
9
+ Project-URL: Changelog, https://github.com/hashgraph-online/hol-guard/releases
10
+ Author-email: HOL <support@hol.org>
11
+ License-Expression: Apache-2.0
12
+ License-File: LICENSE
13
+ Keywords: ai agent security,ai agents,ai antivirus,claude,cli,codex,cursor,gemini,mcp security,opencode,plugin security,prompt injection,runtime security,secrets detection,supply chain security
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Security
25
+ Classifier: Topic :: Software Development :: Quality Assurance
26
+ Requires-Python: >=3.10
27
+ Requires-Dist: cisco-ai-skill-scanner~=2.0.11; python_version < '3.14'
28
+ Requires-Dist: cryptography>=49.0.0
29
+ Requires-Dist: keyring>=25.0
30
+ Requires-Dist: mcp<2,>=1.27.0; python_version >= '3.10'
31
+ Requires-Dist: packaging>=24.0
32
+ Requires-Dist: requests<3,>=2.32
33
+ Requires-Dist: rich<15,>=14.0
34
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
35
+ Provides-Extra: cisco
36
+ Requires-Dist: litellm==1.91.3; (python_version >= '3.11' and python_version < '3.14') and extra == 'cisco'
37
+ Provides-Extra: dev
38
+ Requires-Dist: basedpyright>=1.39.8; extra == 'dev'
39
+ Requires-Dist: build>=1.5.0; extra == 'dev'
40
+ Requires-Dist: jsonschema>=4.26.0; extra == 'dev'
41
+ Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
42
+ Requires-Dist: pytest>=9.0.3; extra == 'dev'
43
+ Requires-Dist: pyyaml>=6.0.3; extra == 'dev'
44
+ Requires-Dist: ruff>=0.15.15; extra == 'dev'
45
+ Provides-Extra: publish
46
+ Requires-Dist: twine>=6.2.0; extra == 'publish'
47
+ Description-Content-Type: text/markdown
48
+
49
+ # HOL Guard: Open-Source Antivirus for AI Agents
2
50
 
3
51
  [![HOL Guard Version](https://img.shields.io/pypi/v/hol-guard.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/hol-guard/)
4
52
  [![Plugin Scanner Version](https://img.shields.io/pypi/v/plugin-scanner.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/plugin-scanner/)
@@ -13,23 +61,60 @@
13
61
  [![GitHub Stars](https://img.shields.io/github/stars/hashgraph-online/hol-guard?style=social)](https://github.com/hashgraph-online/hol-guard/stargazers)
14
62
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-D7FF64.svg)](https://github.com/astral-sh/ruff)
15
63
 
16
- | ![HOL whole dark logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Protect your harness locally with `hol-guard`.** Use `plugin-scanner` when you need maintainer and CI checks for plugins, skills, MCP servers, and marketplace packages.<br><br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[PyPI Package (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/hol-guard/issues) |
64
+ | ![HOL whole dark logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Stop risky AI actions before they compromise your machine.** HOL Guard is a local-first security layer for AI agents, tools, plugins, skills, MCP servers, and package installs.<br><br>[Install HOL Guard](https://hol.org/guard/activate)<br>[Read the documentation](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/get-started.md)<br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[Report an Issue](https://github.com/hashgraph-online/hol-guard/issues) |
17
65
  | :--- | :--- |
18
66
 
19
- ## Start Here
67
+ HOL Guard brings antivirus-style runtime protection to AI agents. It evaluates supported agent actions and local artifacts for secret exposure, prompt injection, unsafe commands, malicious packages, and MCP risks. Guard can allow safe work, block known threats, pause ambiguous actions for approval, and record security receipts for later review.
20
68
 
21
- | If you want to... | Install | Start with |
22
- | :--- | :--- | :--- |
23
- | protect Codex, Claude Code, Copilot CLI, Hermes, Cursor, Gemini, OpenCode, Pi, or ZCode before tools run | `hol-guard` | `hol-guard start` |
24
- | lint and verify packages in CI before release | `plugin-scanner` | `plugin-scanner verify .` |
69
+ Use HOL Guard locally without a cloud account. Connect Guard Cloud when you want synchronized evidence, team policies, fleet visibility, and shared approval workflows.
25
70
 
26
- ## Guard Quickstart
71
+ ## Install HOL Guard
27
72
 
28
73
  ```bash
29
74
  pipx install hol-guard
30
75
  hol-guard init
31
76
  ```
32
77
 
78
+ `hol-guard init` discovers compatible AI agents, explains each setup change before applying it, and guides you through your first protected action.
79
+
80
+ [Install guide](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/get-started.md) · [Supported agents](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md) · [Local vs. cloud](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/local-vs-cloud.md) · [Security policy](https://github.com/hashgraph-online/hol-guard/blob/main/SECURITY.md)
81
+
82
+ ## What HOL Guard Protects
83
+
84
+ | Threat surface | Guard protection |
85
+ | :--- | :--- |
86
+ | **Agent tool calls** | Evaluates supported shell, file, MCP, prompt, and tool-result events through native hooks, managed proxies, or reversible launch overlays. |
87
+ | **Secrets and credentials** | Detects sensitive file access, credential-shaped output, staged exfiltration, and suspicious outbound commands. |
88
+ | **AI supply chain** | Reviews package installs, plugins, skills, MCP servers, hooks, and agent configuration before trust is granted. |
89
+ | **Prompt injection** | For adapters that expose prompt events, screens prompt and tool intent for instructions that attempt to expose secrets, evade controls, or trigger destructive behavior. |
90
+ | **Human approval** | Routes ambiguous actions to native prompts, the local approval center, or Guard Cloud according to the active policy. |
91
+ | **Security evidence** | Records attributable receipts and inventory changes so decisions can be reviewed, explained, and synchronized. |
92
+
93
+ Guard prefers the strongest integration each agent exposes. Enforcement depth varies by agent and event type; see the [support matrix](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md) for the exact current contract.
94
+
95
+ ## Supported AI Agents
96
+
97
+ HOL Guard currently integrates with Codex, Claude Code, GitHub Copilot CLI, Cursor, Gemini CLI, Hermes, OpenClaw, OpenCode, Antigravity, Kimi Code, Grok, Pi / oh-my-pi, and ZCode.
98
+
99
+ These developer agents are Guard's deepest integrations today, but the product boundary is broader: the same policy, supply-chain, approval, and evidence layers are designed to protect AI agents and their local tool ecosystems as new adapters are added.
100
+
101
+ ## Why HOL Guard
102
+
103
+ Most security tools see only one part of an AI agent's attack surface. Code scanners run after files change. Sandboxes constrain a process but do not understand agent intent. MCP gateways see MCP traffic but not local shell commands, package installs, skills, hooks, or agent configuration.
104
+
105
+ HOL Guard combines those signals at the local runtime boundary. It discovers the agent and its tools, evaluates supported actions against one policy, requests human approval only when needed, and records the resulting decision. The goal is practical protection without turning ordinary AI-assisted work into a stream of prompts.
106
+
107
+ ## Choose the Right Package
108
+
109
+ | If you want to... | Install | Start with |
110
+ | :--- | :--- | :--- |
111
+ | protect AI agents and their local runtime | `hol-guard` | `hol-guard init` |
112
+ | lint and verify plugins, skills, MCP servers, and marketplace packages in CI | `plugin-scanner` | `plugin-scanner verify .` |
113
+
114
+ `hol-guard` is the end-user antivirus and runtime protection product. `plugin-scanner` is the maintainer and CI companion for analyzing agent ecosystem packages before release.
115
+
116
+ ## Guard Operations
117
+
33
118
  To update an existing pipx install from PyPI:
34
119
 
35
120
  ```bash
@@ -81,11 +166,14 @@ pipx run hol-guard supply-chain sync
81
166
  pipx run hol-guard supply-chain scan
82
167
  pipx run hol-guard supply-chain explain minimist@1.2.5 --ecosystem npm
83
168
  pipx run hol-guard explain install-connect
169
+ pipx run hol-guard command test 'git reset --hard HEAD~1'
170
+ pipx run hol-guard command explain 'grep "rm -rf|git clean" README.md'
171
+ pipx run hol-guard command extensions
84
172
  ```
85
173
 
86
174
  What you get from Guard:
87
175
 
88
- - Detects local harness config on your machine
176
+ - Detects supported AI agent configuration on your machine
89
177
  - Records a baseline before you trust a tool
90
178
  - Pauses cleanly on new or changed artifacts before launch
91
179
  - Queues blocked changes in a localhost approval center when the harness cannot prompt inline
@@ -94,6 +182,22 @@ What you get from Guard:
94
182
 
95
183
  See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local flow.
96
184
 
185
+ ### Inspect command protection without running it
186
+
187
+ Command safety extensions make Guard's existing shell, Git, filesystem, data-protection, container, Kubernetes,
188
+ encoded-execution, and self-protection behavior inspectable. They are built-in capability boundaries over the same
189
+ parser used by harness hooks, not downloadable regex bundles.
190
+
191
+ Use `command test` for a concise classification and `command explain` for the complete evaluation trace. Both are
192
+ side-effect free: they do not execute the command, evaluate final policy, create an approval, or record a receipt.
193
+ Use `--json` for a stable automation contract.
194
+
195
+ ```bash
196
+ hol-guard command test 'rm -rf ./build'
197
+ hol-guard command explain 'grep "rm -rf|git clean" README.md'
198
+ hol-guard command extensions command.shell-mutations --json
199
+ ```
200
+
97
201
  <details>
98
202
  <summary>Guard commands at a glance</summary>
99
203
 
@@ -155,7 +259,7 @@ See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local fl
155
259
 
156
260
  ## Guard: Protection Levels
157
261
 
158
- HOL Guard is antivirus for AI harnesses. It intercepts every tool action before your files change or your network is contacted, then decides in milliseconds whether to allow or block.
262
+ HOL Guard is antivirus for AI agents. It evaluates supported runtime events and local artifacts, then applies the active policy before execution where the agent provides a pre-action boundary. Other integrations use native approval, managed proxy, launch-time, or post-action evidence surfaces according to the [support matrix](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md).
159
263
 
160
264
  Choose a protection level with `hol-guard settings set security-level <level>`:
161
265
 
@@ -1,50 +1,4 @@
1
- Metadata-Version: 2.4
2
- Name: plugin-scanner
3
- Version: 2.0.1073
4
- Summary: Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, OpenCode, and Pi.
5
- Project-URL: Homepage, https://github.com/hashgraph-online/hol-guard
6
- Project-URL: Repository, https://github.com/hashgraph-online/hol-guard
7
- Project-URL: Issues, https://github.com/hashgraph-online/hol-guard/issues
8
- Author-email: HOL <support@hol.org>
9
- License-Expression: Apache-2.0
10
- License-File: LICENSE
11
- Keywords: claude,cli,codex,ecosystem,gemini,mcp,opencode,pi,plugin,scanner,security
12
- Classifier: Development Status :: 5 - Production/Stable
13
- Classifier: Environment :: Console
14
- Classifier: Intended Audience :: Developers
15
- Classifier: License :: OSI Approved :: Apache Software License
16
- Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.10
18
- Classifier: Programming Language :: Python :: 3.11
19
- Classifier: Programming Language :: Python :: 3.12
20
- Classifier: Programming Language :: Python :: 3.13
21
- Classifier: Programming Language :: Python :: 3.14
22
- Classifier: Topic :: Security
23
- Classifier: Topic :: Software Development :: Quality Assurance
24
- Requires-Python: >=3.10
25
- Requires-Dist: cisco-ai-skill-scanner~=2.0.11; python_version < '3.14'
26
- Requires-Dist: cryptography>=49.0.0
27
- Requires-Dist: keyring>=25.0
28
- Requires-Dist: mcp<2,>=1.27.0; python_version >= '3.10'
29
- Requires-Dist: packaging>=24.0
30
- Requires-Dist: requests<3,>=2.32
31
- Requires-Dist: rich<15,>=14.0
32
- Requires-Dist: tomli>=2.0; python_version < '3.11'
33
- Provides-Extra: cisco
34
- Requires-Dist: litellm==1.91.3; (python_version >= '3.11' and python_version < '3.14') and extra == 'cisco'
35
- Provides-Extra: dev
36
- Requires-Dist: basedpyright>=1.39.8; extra == 'dev'
37
- Requires-Dist: build>=1.5.0; extra == 'dev'
38
- Requires-Dist: jsonschema>=4.26.0; extra == 'dev'
39
- Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
40
- Requires-Dist: pytest>=9.0.3; extra == 'dev'
41
- Requires-Dist: pyyaml>=6.0.3; extra == 'dev'
42
- Requires-Dist: ruff>=0.15.15; extra == 'dev'
43
- Provides-Extra: publish
44
- Requires-Dist: twine>=6.2.0; extra == 'publish'
45
- Description-Content-Type: text/markdown
46
-
47
- # HOL Guard
1
+ # HOL Guard: Open-Source Antivirus for AI Agents
48
2
 
49
3
  [![HOL Guard Version](https://img.shields.io/pypi/v/hol-guard.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/hol-guard/)
50
4
  [![Plugin Scanner Version](https://img.shields.io/pypi/v/plugin-scanner.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/plugin-scanner/)
@@ -59,23 +13,60 @@ Description-Content-Type: text/markdown
59
13
  [![GitHub Stars](https://img.shields.io/github/stars/hashgraph-online/hol-guard?style=social)](https://github.com/hashgraph-online/hol-guard/stargazers)
60
14
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-D7FF64.svg)](https://github.com/astral-sh/ruff)
61
15
 
62
- | ![HOL whole dark logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Protect your harness locally with `hol-guard`.** Use `plugin-scanner` when you need maintainer and CI checks for plugins, skills, MCP servers, and marketplace packages.<br><br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[PyPI Package (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/hol-guard/issues) |
16
+ | ![HOL whole dark logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Stop risky AI actions before they compromise your machine.** HOL Guard is a local-first security layer for AI agents, tools, plugins, skills, MCP servers, and package installs.<br><br>[Install HOL Guard](https://hol.org/guard/activate)<br>[Read the documentation](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/get-started.md)<br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[Report an Issue](https://github.com/hashgraph-online/hol-guard/issues) |
63
17
  | :--- | :--- |
64
18
 
65
- ## Start Here
19
+ HOL Guard brings antivirus-style runtime protection to AI agents. It evaluates supported agent actions and local artifacts for secret exposure, prompt injection, unsafe commands, malicious packages, and MCP risks. Guard can allow safe work, block known threats, pause ambiguous actions for approval, and record security receipts for later review.
66
20
 
67
- | If you want to... | Install | Start with |
68
- | :--- | :--- | :--- |
69
- | protect Codex, Claude Code, Copilot CLI, Hermes, Cursor, Gemini, OpenCode, Pi, or ZCode before tools run | `hol-guard` | `hol-guard start` |
70
- | lint and verify packages in CI before release | `plugin-scanner` | `plugin-scanner verify .` |
21
+ Use HOL Guard locally without a cloud account. Connect Guard Cloud when you want synchronized evidence, team policies, fleet visibility, and shared approval workflows.
71
22
 
72
- ## Guard Quickstart
23
+ ## Install HOL Guard
73
24
 
74
25
  ```bash
75
26
  pipx install hol-guard
76
27
  hol-guard init
77
28
  ```
78
29
 
30
+ `hol-guard init` discovers compatible AI agents, explains each setup change before applying it, and guides you through your first protected action.
31
+
32
+ [Install guide](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/get-started.md) · [Supported agents](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md) · [Local vs. cloud](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/local-vs-cloud.md) · [Security policy](https://github.com/hashgraph-online/hol-guard/blob/main/SECURITY.md)
33
+
34
+ ## What HOL Guard Protects
35
+
36
+ | Threat surface | Guard protection |
37
+ | :--- | :--- |
38
+ | **Agent tool calls** | Evaluates supported shell, file, MCP, prompt, and tool-result events through native hooks, managed proxies, or reversible launch overlays. |
39
+ | **Secrets and credentials** | Detects sensitive file access, credential-shaped output, staged exfiltration, and suspicious outbound commands. |
40
+ | **AI supply chain** | Reviews package installs, plugins, skills, MCP servers, hooks, and agent configuration before trust is granted. |
41
+ | **Prompt injection** | For adapters that expose prompt events, screens prompt and tool intent for instructions that attempt to expose secrets, evade controls, or trigger destructive behavior. |
42
+ | **Human approval** | Routes ambiguous actions to native prompts, the local approval center, or Guard Cloud according to the active policy. |
43
+ | **Security evidence** | Records attributable receipts and inventory changes so decisions can be reviewed, explained, and synchronized. |
44
+
45
+ Guard prefers the strongest integration each agent exposes. Enforcement depth varies by agent and event type; see the [support matrix](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md) for the exact current contract.
46
+
47
+ ## Supported AI Agents
48
+
49
+ HOL Guard currently integrates with Codex, Claude Code, GitHub Copilot CLI, Cursor, Gemini CLI, Hermes, OpenClaw, OpenCode, Antigravity, Kimi Code, Grok, Pi / oh-my-pi, and ZCode.
50
+
51
+ These developer agents are Guard's deepest integrations today, but the product boundary is broader: the same policy, supply-chain, approval, and evidence layers are designed to protect AI agents and their local tool ecosystems as new adapters are added.
52
+
53
+ ## Why HOL Guard
54
+
55
+ Most security tools see only one part of an AI agent's attack surface. Code scanners run after files change. Sandboxes constrain a process but do not understand agent intent. MCP gateways see MCP traffic but not local shell commands, package installs, skills, hooks, or agent configuration.
56
+
57
+ HOL Guard combines those signals at the local runtime boundary. It discovers the agent and its tools, evaluates supported actions against one policy, requests human approval only when needed, and records the resulting decision. The goal is practical protection without turning ordinary AI-assisted work into a stream of prompts.
58
+
59
+ ## Choose the Right Package
60
+
61
+ | If you want to... | Install | Start with |
62
+ | :--- | :--- | :--- |
63
+ | protect AI agents and their local runtime | `hol-guard` | `hol-guard init` |
64
+ | lint and verify plugins, skills, MCP servers, and marketplace packages in CI | `plugin-scanner` | `plugin-scanner verify .` |
65
+
66
+ `hol-guard` is the end-user antivirus and runtime protection product. `plugin-scanner` is the maintainer and CI companion for analyzing agent ecosystem packages before release.
67
+
68
+ ## Guard Operations
69
+
79
70
  To update an existing pipx install from PyPI:
80
71
 
81
72
  ```bash
@@ -127,11 +118,14 @@ pipx run hol-guard supply-chain sync
127
118
  pipx run hol-guard supply-chain scan
128
119
  pipx run hol-guard supply-chain explain minimist@1.2.5 --ecosystem npm
129
120
  pipx run hol-guard explain install-connect
121
+ pipx run hol-guard command test 'git reset --hard HEAD~1'
122
+ pipx run hol-guard command explain 'grep "rm -rf|git clean" README.md'
123
+ pipx run hol-guard command extensions
130
124
  ```
131
125
 
132
126
  What you get from Guard:
133
127
 
134
- - Detects local harness config on your machine
128
+ - Detects supported AI agent configuration on your machine
135
129
  - Records a baseline before you trust a tool
136
130
  - Pauses cleanly on new or changed artifacts before launch
137
131
  - Queues blocked changes in a localhost approval center when the harness cannot prompt inline
@@ -140,6 +134,22 @@ What you get from Guard:
140
134
 
141
135
  See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local flow.
142
136
 
137
+ ### Inspect command protection without running it
138
+
139
+ Command safety extensions make Guard's existing shell, Git, filesystem, data-protection, container, Kubernetes,
140
+ encoded-execution, and self-protection behavior inspectable. They are built-in capability boundaries over the same
141
+ parser used by harness hooks, not downloadable regex bundles.
142
+
143
+ Use `command test` for a concise classification and `command explain` for the complete evaluation trace. Both are
144
+ side-effect free: they do not execute the command, evaluate final policy, create an approval, or record a receipt.
145
+ Use `--json` for a stable automation contract.
146
+
147
+ ```bash
148
+ hol-guard command test 'rm -rf ./build'
149
+ hol-guard command explain 'grep "rm -rf|git clean" README.md'
150
+ hol-guard command extensions command.shell-mutations --json
151
+ ```
152
+
143
153
  <details>
144
154
  <summary>Guard commands at a glance</summary>
145
155
 
@@ -201,7 +211,7 @@ See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local fl
201
211
 
202
212
  ## Guard: Protection Levels
203
213
 
204
- HOL Guard is antivirus for AI harnesses. It intercepts every tool action before your files change or your network is contacted, then decides in milliseconds whether to allow or block.
214
+ HOL Guard is antivirus for AI agents. It evaluates supported runtime events and local artifacts, then applies the active policy before execution where the agent provides a pre-action boundary. Other integrations use native approval, managed proxy, launch-time, or post-action evidence surfaces according to the [support matrix](https://github.com/hashgraph-online/hol-guard/blob/main/docs/guard/harness-support.md).
205
215
 
206
216
  Choose a protection level with `hol-guard settings set security-level <level>`:
207
217
 
@@ -128,6 +128,8 @@ For security reviews, sales conversations, and GRC packets, see the
128
128
  | I need to remove Guard from this machine | `hol-guard uninstall --self` | Can Guard disconnect its managed harnesses, remove package shims and local state, then uninstall itself cleanly? |
129
129
  | I need install/connect docs | `hol-guard explain install-connect` | Which local-first setup and optional cloud commands should I share? |
130
130
  | I need to preview one install before I run it | `hol-guard protect npm install <package> --dry-run` | Would Guard allow, warn, review, or block this exact install request right now? |
131
+ | I need to understand command protection | `hol-guard command test '<command>'` or `hol-guard command explain '<command>'` | Which built-in command safety extension recognizes this command, and why, without executing it or creating Guard state? |
132
+ | I need the command protection catalog | `hol-guard command extensions` | Which built-in command safety extensions and action classes are available in this Guard version? |
131
133
  | I need setup or runtime troubleshooting | `hol-guard doctor <harness>` | Why is this harness or Guard runtime not behaving correctly? |
132
134
  | A launch was blocked or changed | `hol-guard diff <harness>` | What changed since the last recorded snapshot? |
133
135
  | I need to resolve a queued block | `hol-guard approvals` | Which requests are waiting, and how do I approve or deny them? |
@@ -4,15 +4,31 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "plugin-scanner"
7
- version = "2.0.1073"
8
- description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, OpenCode, and Pi."
7
+ version = "2.0.1075"
8
+ description = "Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
11
11
  requires-python = ">=3.10"
12
12
  authors = [
13
13
  { name = "HOL", email = "support@hol.org" },
14
14
  ]
15
- keywords = ["plugin", "scanner", "security", "mcp", "cli", "codex", "claude", "gemini", "opencode", "pi", "ecosystem"]
15
+ keywords = [
16
+ "ai antivirus",
17
+ "ai agent security",
18
+ "ai agents",
19
+ "runtime security",
20
+ "mcp security",
21
+ "supply chain security",
22
+ "prompt injection",
23
+ "secrets detection",
24
+ "plugin security",
25
+ "cli",
26
+ "codex",
27
+ "claude",
28
+ "cursor",
29
+ "gemini",
30
+ "opencode",
31
+ ]
16
32
  classifiers = [
17
33
  "Development Status :: 5 - Production/Stable",
18
34
  "Environment :: Console",
@@ -83,9 +99,11 @@ plugin-scanner = "codex_plugin_scanner.cli:main"
83
99
  plugin-ecosystem-scanner = "codex_plugin_scanner.cli:main"
84
100
 
85
101
  [project.urls]
86
- Homepage = "https://github.com/hashgraph-online/hol-guard"
102
+ Homepage = "https://hol.org/guard"
103
+ Documentation = "https://github.com/hashgraph-online/hol-guard/tree/main/docs/guard"
87
104
  Repository = "https://github.com/hashgraph-online/hol-guard"
88
105
  Issues = "https://github.com/hashgraph-online/hol-guard/issues"
106
+ Changelog = "https://github.com/hashgraph-online/hol-guard/releases"
89
107
 
90
108
  [tool.ruff]
91
109
  target-version = "py310"
@@ -4,15 +4,31 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hol-guard"
7
- version = "2.0.1073"
8
- description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, OpenCode, and Pi."
7
+ version = "2.0.1075"
8
+ description = "Open-source antivirus and runtime protection for AI agents, tools, MCP servers, plugins, skills, and package installs."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
11
11
  requires-python = ">=3.10"
12
12
  authors = [
13
13
  { name = "HOL", email = "support@hol.org" },
14
14
  ]
15
- keywords = ["plugin", "scanner", "security", "mcp", "cli", "codex", "claude", "gemini", "opencode", "pi", "ecosystem"]
15
+ keywords = [
16
+ "ai antivirus",
17
+ "ai agent security",
18
+ "ai agents",
19
+ "runtime security",
20
+ "mcp security",
21
+ "supply chain security",
22
+ "prompt injection",
23
+ "secrets detection",
24
+ "plugin security",
25
+ "cli",
26
+ "codex",
27
+ "claude",
28
+ "cursor",
29
+ "gemini",
30
+ "opencode",
31
+ ]
16
32
  classifiers = [
17
33
  "Development Status :: 5 - Production/Stable",
18
34
  "Environment :: Console",
@@ -85,9 +101,11 @@ plugin-guard = "codex_plugin_scanner.cli:main"
85
101
  plugin-ecosystem-scanner = "codex_plugin_scanner.cli:main"
86
102
 
87
103
  [project.urls]
88
- Homepage = "https://github.com/hashgraph-online/hol-guard"
104
+ Homepage = "https://hol.org/guard"
105
+ Documentation = "https://github.com/hashgraph-online/hol-guard/tree/main/docs/guard"
89
106
  Repository = "https://github.com/hashgraph-online/hol-guard"
90
107
  Issues = "https://github.com/hashgraph-online/hol-guard/issues"
108
+ Changelog = "https://github.com/hashgraph-online/hol-guard/releases"
91
109
 
92
110
  [tool.ruff]
93
111
  target-version = "py310"
@@ -248,6 +248,7 @@ def _resolve_legacy_args(
248
248
  "preflight",
249
249
  "diff",
250
250
  "test-eval",
251
+ "command",
251
252
  "receipts",
252
253
  "history",
253
254
  "inventory",
@@ -21,6 +21,31 @@ if TYPE_CHECKING:
21
21
  from ._commands_shared import *
22
22
  from .commands_parser_helpers import *
23
23
 
24
+ def _run_guard_command_inspection_command(
25
+ args: argparse.Namespace,
26
+ *,
27
+ input_text: str | None = None,
28
+ output_stream: TextIO | None = None,
29
+ ) -> int:
30
+ from ..runtime.command_inspection import command_extensions_payload, inspect_command
31
+
32
+ command_command = str(getattr(args, "command_command", ""))
33
+ try:
34
+ if command_command == "extensions":
35
+ payload = command_extensions_payload(getattr(args, "extension_id", None))
36
+ _emit("command-extensions", payload, bool(getattr(args, "json", False)))
37
+ return 0
38
+ if command_command not in {"test", "explain"}:
39
+ print("Choose command test, command explain, or command extensions.", file=sys.stderr)
40
+ return 2
41
+ payload = inspect_command(str(getattr(args, "command_text", "")), cwd=Path.cwd(), home_dir=Path.home())
42
+ except ValueError as error:
43
+ print(f"Error: {error}", file=sys.stderr)
44
+ return 2
45
+ payload["mode"] = command_command
46
+ _emit("command-inspection", payload, bool(getattr(args, "json", False)))
47
+ return 0
48
+
24
49
  def _run_guard_scan_command(
25
50
  args: argparse.Namespace,
26
51
  *,
@@ -392,6 +417,7 @@ def _run_guard_mcp_command(
392
417
  __all__ = [
393
418
  "_run_guard_apps_command",
394
419
  "_run_guard_bootstrap_command",
420
+ "_run_guard_command_inspection_command",
395
421
  "_run_guard_dashboard_command",
396
422
  "_run_guard_detect_command",
397
423
  "_run_guard_init_command",
@@ -51,7 +51,7 @@ def _configure_guard_parser(guard_parser: argparse.ArgumentParser) -> None:
51
51
  parser_class=FriendlyArgumentParser,
52
52
  metavar=(
53
53
  "{start,status,dashboard,init,apps,bootstrap,detect,install,update,uninstall,package-shims,run,protect,preflight,scan,diff,"
54
- "test-eval,"
54
+ "test-eval,command,"
55
55
  "receipts,inventory,abom,aibom,approvals,explain,allow,deny,policies,trust,exceptions,advisories,events,doctor,connect,"
56
56
  "remote-pair,disconnect,"
57
57
  "login,sync,device,commands,bridge,mcp}"
@@ -168,6 +168,28 @@ def _configure_guard_local_parsers(
168
168
  protect_parser.add_argument("--package-shim-ui", action="store_true", help=argparse.SUPPRESS)
169
169
  protect_parser.add_argument("protect_command", nargs=argparse.REMAINDER)
170
170
 
171
+ command_parser = guard_subparsers.add_parser(
172
+ "command",
173
+ help="Inspect commands and built-in command safety extensions without executing anything",
174
+ )
175
+ command_subparsers = command_parser.add_subparsers(dest="command_command", required=True, metavar="COMMAND")
176
+ for command_name in ("test", "explain"):
177
+ inspect_parser = command_subparsers.add_parser(
178
+ command_name,
179
+ help=f"{command_name.title()} how Guard classifies one shell command",
180
+ )
181
+ inspect_parser.add_argument(
182
+ "command_text",
183
+ help="Exact shell command to inspect; quote to preserve shell syntax",
184
+ )
185
+ inspect_parser.add_argument("--json", action="store_true")
186
+ extensions_parser = command_subparsers.add_parser(
187
+ "extensions",
188
+ help="List or inspect built-in command safety extensions",
189
+ )
190
+ extensions_parser.add_argument("extension_id", nargs="?")
191
+ extensions_parser.add_argument("--json", action="store_true")
192
+
171
193
  preflight_parser = guard_subparsers.add_parser(
172
194
  "preflight",
173
195
  help="Scan an artifact before you add it to a harness config or install path",
@@ -16,6 +16,7 @@ from ._commands_shared import *
16
16
  from .commands_parser_helpers import *
17
17
 
18
18
  _EARLY_HANDLERS = {
19
+ "command": "_run_guard_command_inspection_command",
19
20
  "scan": "_run_guard_scan_command",
20
21
  "preflight": "_run_guard_preflight_command",
21
22
  "mcp": "_run_guard_mcp_command",
@@ -14,6 +14,7 @@ if TYPE_CHECKING:
14
14
  from .commands_support_prompts import _prompt_request_classes, _prompt_requires_hard_block
15
15
 
16
16
 
17
+ from ..runtime.command_extensions import risk_classes_for_command_action
17
18
  from ..store import _runtime_scoped_exact_match_key, runtime_tool_action_exact_match_context
18
19
  from ..text import ensure_terminal_punctuation as _ensure_terminal_punctuation
19
20
  from ._commands_shared import *
@@ -434,22 +435,7 @@ def _runtime_artifact_risk_classes(artifact: GuardArtifact) -> list[str]:
434
435
  action_class = artifact.metadata.get("action_class")
435
436
  if not isinstance(action_class, str):
436
437
  return []
437
- action_risk_classes = {
438
- "credential exfiltration shell command": [
439
- "data_flow_exfiltration",
440
- "credential_exfiltration",
441
- "network_egress",
442
- ],
443
- "guard-managed config write": ["destructive_shell"],
444
- "docker-sensitive command": ["network_egress", "destructive_shell"],
445
- "docker client config access": ["local_secret_read"],
446
- "encoded or encrypted shell command": ["encoded_execution"],
447
- "kubernetes secret read command": ["local_secret_read"],
448
- "shell file upload command": ["credential_exfiltration", "network_egress"],
449
- "sensitive local file write": ["destructive_shell", "local_secret_read"],
450
- "destructive shell command": ["destructive_shell"],
451
- }
452
- return action_risk_classes.get(action_class.strip().lower(), [])
438
+ return list(risk_classes_for_command_action(action_class))
453
439
 
454
440
  def _guard_settings_payload(config: GuardConfig) -> dict[str, object]:
455
441
  return {