plugin-scanner 2.0.580__tar.gz → 2.0.581__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 (865) hide show
  1. plugin_scanner-2.0.581/.github/workflows/publish-action-repo.yml +195 -0
  2. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/PKG-INFO +2 -2
  3. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/README.md +1 -1
  4. plugin_scanner-2.0.581/action/CONTRIBUTING.md +79 -0
  5. plugin_scanner-2.0.581/action/README.md +280 -0
  6. plugin_scanner-2.0.581/action/SECURITY.md +43 -0
  7. plugin_scanner-2.0.581/action/action.yml +315 -0
  8. plugin_scanner-2.0.581/action/cisco-version.txt +1 -0
  9. plugin_scanner-2.0.581/action/pypi-attestations-version.txt +1 -0
  10. plugin_scanner-2.0.581/action/scanner-sha256.txt +1 -0
  11. plugin_scanner-2.0.581/action/scanner-version.txt +1 -0
  12. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/pyproject.toml +1 -1
  13. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/pyproject.toml.bak +1 -1
  14. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/version.py +1 -1
  15. plugin_scanner-2.0.581/tests/test_action_bundle.py +74 -0
  16. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.clusterfuzzlite/Dockerfile +0 -0
  17. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.clusterfuzzlite/build.sh +0 -0
  18. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.clusterfuzzlite/project.yaml +0 -0
  19. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.clusterfuzzlite/requirements-atheris.txt +0 -0
  20. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.dockerignore +0 -0
  21. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.factory/droids/hol-guard-runner.md +0 -0
  22. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.factory/skills/hol-guard/SKILL.md +0 -0
  23. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/CODEOWNERS +0 -0
  24. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  25. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  26. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  27. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/dependabot.yml +0 -0
  28. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/pr-bodies/claude-permission-request-visible.md +0 -0
  29. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/ci.yml +0 -0
  30. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/codeql.yml +0 -0
  31. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/dependabot-uv-lock.yml +0 -0
  32. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/fuzz.yml +0 -0
  33. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/harness-smoke.yml +0 -0
  34. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/publish.yml +0 -0
  35. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/scorecard.yml +0 -0
  36. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.github/workflows/security-gates.yml +0 -0
  37. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.gitignore +0 -0
  38. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/.pre-commit-hooks.yaml +0 -0
  39. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/CONTRIBUTING.md +0 -0
  40. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/Dockerfile +0 -0
  41. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/LICENSE +0 -0
  42. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/PRODUCT.md +0 -0
  43. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/SECURITY.md +0 -0
  44. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/e2e/fixture-states.ts +0 -0
  45. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/e2e/proof-dir.ts +0 -0
  46. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/e2e/scrg172-states.spec.ts +0 -0
  47. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/e2e/static-server.mjs +0 -0
  48. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/index.html +0 -0
  49. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/package.json +0 -0
  50. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/playwright.config.ts +0 -0
  51. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/pnpm-lock.yaml +0 -0
  52. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/apple-touch-icon.png +0 -0
  53. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
  54. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/brand/Logo_Whole.png +0 -0
  55. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/favicon-16x16.png +0 -0
  56. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/favicon-32x32.png +0 -0
  57. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/public/favicon.ico +0 -0
  58. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-analytics.ts +0 -0
  59. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-content.test.ts +0 -0
  60. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-content.ts +0 -0
  61. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-design.test.ts +0 -0
  62. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-external-links.test.ts +0 -0
  63. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-external-links.ts +0 -0
  64. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-section-shell.test.ts +0 -0
  65. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-types.ts +0 -0
  66. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/about-workspace.tsx +0 -0
  67. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-external-link.tsx +0 -0
  68. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-footer.tsx +0 -0
  69. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-hero.tsx +0 -0
  70. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-runtime-proof-strip.tsx +0 -0
  71. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/data-boundary-panel.tsx +0 -0
  72. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/ecosystem-programs.tsx +0 -0
  73. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/open-standards-map.tsx +0 -0
  74. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/pathway-grid.tsx +0 -0
  75. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/section-shell.tsx +0 -0
  76. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/tracked-action-button.tsx +0 -0
  77. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/about/components/trust-contract-panel.tsx +0 -0
  78. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/app-detail-phase11.test.ts +0 -0
  79. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/app-detail-workspace.test.ts +0 -0
  80. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/app-routing.test.ts +0 -0
  81. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/app.tsx +0 -0
  82. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-layout.test.ts +0 -0
  83. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-layout.tsx +0 -0
  84. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-mobile.test.ts +0 -0
  85. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-primitives.tsx +0 -0
  86. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-review-cards.tsx +0 -0
  87. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-center-utils.ts +0 -0
  88. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-gate-utils.ts +0 -0
  89. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-gate.test.ts +0 -0
  90. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-proof-modal.tsx +0 -0
  91. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-scopes.test.ts +0 -0
  92. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/approval-scopes.ts +0 -0
  93. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/apps/app-catalog.ts +0 -0
  94. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/apps/app-detail-workspace.tsx +0 -0
  95. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/audit-workspace.tsx +0 -0
  96. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/clear-policy-payload.test.ts +0 -0
  97. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/clear-policy-payload.ts +0 -0
  98. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/compare-time-periods.tsx +0 -0
  99. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/data-flow-evidence-card.tsx +0 -0
  100. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/error-boundary.tsx +0 -0
  101. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/app-tab.tsx +0 -0
  102. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/breakdown-card.tsx +0 -0
  103. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/categories.tsx +0 -0
  104. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/category-tab.tsx +0 -0
  105. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/decision-badge.tsx +0 -0
  106. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-action-detail.tsx +0 -0
  107. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-action-list.tsx +0 -0
  108. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap-mini.tsx +0 -0
  109. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap.test.ts +0 -0
  110. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap.tsx +0 -0
  111. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-analytics-panel.tsx +0 -0
  112. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-clear-modal.tsx +0 -0
  113. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-copy.test.ts +0 -0
  114. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-data-provenance-strip.tsx +0 -0
  115. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-detail.test.ts +0 -0
  116. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export-drawer.tsx +0 -0
  117. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export.test.ts +0 -0
  118. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export.ts +0 -0
  119. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filter-bar.tsx +0 -0
  120. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filters.test.ts +0 -0
  121. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filters.ts +0 -0
  122. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-format.test.ts +0 -0
  123. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-format.ts +0 -0
  124. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-hero.tsx +0 -0
  125. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insight-strip.tsx +0 -0
  126. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-headline-bento.test.ts +0 -0
  127. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-headline-bento.tsx +0 -0
  128. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-home-preview.test.ts +0 -0
  129. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-home-preview.tsx +0 -0
  130. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-layout.test.ts +0 -0
  131. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-button.tsx +0 -0
  132. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-errors.ts +0 -0
  133. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-modal.tsx +0 -0
  134. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-sheet.tsx +0 -0
  135. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-surface.tsx +0 -0
  136. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-metrics.test.ts +0 -0
  137. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-metrics.ts +0 -0
  138. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-pagination.test.ts +0 -0
  139. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-pagination.ts +0 -0
  140. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-perf.test.ts +0 -0
  141. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-period.ts +0 -0
  142. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-share-bar.tsx +0 -0
  143. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-sort.test.ts +0 -0
  144. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-sort.ts +0 -0
  145. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-story.test.ts +0 -0
  146. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-table.tsx +0 -0
  147. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-trend-chart.test.ts +0 -0
  148. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-trend-chart.tsx +0 -0
  149. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-types.ts +0 -0
  150. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-url-state.test.ts +0 -0
  151. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-url-state.ts +0 -0
  152. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-view-shell.tsx +0 -0
  153. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/explore-tab.tsx +0 -0
  154. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/guard-stat-metric.tsx +0 -0
  155. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/index.ts +0 -0
  156. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/plain-english.ts +0 -0
  157. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/scoped-evidence-table.test.ts +0 -0
  158. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/scoped-evidence-table.tsx +0 -0
  159. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/sparkline.tsx +0 -0
  160. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/story-tab.tsx +0 -0
  161. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/evidence/use-receipt-analytics.ts +0 -0
  162. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/feed-health-workspace.tsx +0 -0
  163. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace-phase11.test.ts +0 -0
  164. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace.test.ts +0 -0
  165. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace.tsx +0 -0
  166. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-api.test.ts +0 -0
  167. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-api.ts +0 -0
  168. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-demo.ts +0 -0
  169. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-modal-layer.tsx +0 -0
  170. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-types.ts +0 -0
  171. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-update-panel.tsx +0 -0
  172. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/guard-update.test.ts +0 -0
  173. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/help-modal.tsx +0 -0
  174. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/history-analytics.tsx +0 -0
  175. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/history-charts.tsx +0 -0
  176. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/history-export.ts +0 -0
  177. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/home-dashboard.test.ts +0 -0
  178. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/home-dashboard.tsx +0 -0
  179. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/home-protection-module.tsx +0 -0
  180. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/main.tsx +0 -0
  181. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/package-firewall-connect.test.tsx +0 -0
  182. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/package-workbench-panel.tsx +0 -0
  183. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/phase09-review.test.ts +0 -0
  184. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/policy-workspace.tsx +0 -0
  185. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/queue-chip-filter.tsx +0 -0
  186. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/queue-state.test.ts +0 -0
  187. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/queue-state.ts +0 -0
  188. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/receipts-workspace.test.ts +0 -0
  189. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/receipts-workspace.tsx +0 -0
  190. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/review-workspace.tsx +0 -0
  191. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/risk-signal-cards.test.ts +0 -0
  192. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/risk-signal-cards.tsx +0 -0
  193. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/runtime-overview.test.ts +0 -0
  194. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/runtime-overview.tsx +0 -0
  195. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scanner-evidence-badge.tsx +0 -0
  196. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scrg159-170.test.ts +0 -0
  197. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scrg171-172.test.ts +0 -0
  198. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09-next-action.test.ts +0 -0
  199. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09-package-firewall-status.test.ts +0 -0
  200. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09c-evidence-rail.test.ts +0 -0
  201. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09d-intercept-drawer.test.ts +0 -0
  202. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09e-posture-banners.test.ts +0 -0
  203. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09f-mobile-polish.test.ts +0 -0
  204. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09g-cloud-capabilities.test.ts +0 -0
  205. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09h-hero-cards.test.ts +0 -0
  206. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase10-package-workbench.test.ts +0 -0
  207. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/security-fixes.test.ts +0 -0
  208. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-ia.test.ts +0 -0
  209. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-ia.tsx +0 -0
  210. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-row-primitives.tsx +0 -0
  211. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-section-shell.tsx +0 -0
  212. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace-phase11.test.ts +0 -0
  213. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace.test.ts +0 -0
  214. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace.tsx +0 -0
  215. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/styles.css +0 -0
  216. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-audit-findings-summary.tsx +0 -0
  217. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-audit-normalize.ts +0 -0
  218. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-bundle-panel.tsx +0 -0
  219. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-cloud-capabilities-panel.tsx +0 -0
  220. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-cloud-capabilities.ts +0 -0
  221. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-evidence-rail-panel.tsx +0 -0
  222. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-evidence-rail.ts +0 -0
  223. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-action-result.ts +0 -0
  224. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-controls.tsx +0 -0
  225. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-manager-row.tsx +0 -0
  226. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-next-action.ts +0 -0
  227. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-panel.tsx +0 -0
  228. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-views.tsx +0 -0
  229. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-hub-workspace.tsx +0 -0
  230. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-intercept-proof-modal.tsx +0 -0
  231. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-manager-cards.tsx +0 -0
  232. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-manager-drawer.tsx +0 -0
  233. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-posture-banners.tsx +0 -0
  234. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-posture.ts +0 -0
  235. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-protection-stats.ts +0 -0
  236. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-hero-state.ts +0 -0
  237. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-hero.tsx +0 -0
  238. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-layout.ts +0 -0
  239. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace.tsx +0 -0
  240. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/totp-enrollment-qr-panel.tsx +0 -0
  241. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-debounce.ts +0 -0
  242. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-focus-trap.ts +0 -0
  243. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-keyboard-shortcut.ts +0 -0
  244. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-reduced-motion.ts +0 -0
  245. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-resolved-approval-gate.ts +0 -0
  246. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/use-route-focus.ts +0 -0
  247. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/vite-env.d.ts +0 -0
  248. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/watched-app-card.tsx +0 -0
  249. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/src/workspace-page-header.tsx +0 -0
  250. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/tsconfig.json +0 -0
  251. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/dashboard/vite.config.ts +0 -0
  252. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docker-requirements.txt +0 -0
  253. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/SKILL.md +0 -0
  254. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/architecture.md +0 -0
  255. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/cursor-local-cloud-contract.md +0 -0
  256. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/enterprise-event-taxonomy.md +0 -0
  257. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/enterprise-export-examples.md +0 -0
  258. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/enterprise-packet.md +0 -0
  259. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/get-started.md +0 -0
  260. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/harness-support.md +0 -0
  261. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/incident-response.md +0 -0
  262. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/local-vs-cloud.md +0 -0
  263. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/release-checklist.md +0 -0
  264. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/remediation.md +0 -0
  265. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/guard/testing-matrix.md +0 -0
  266. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/trust/mcp-trust-draft.md +0 -0
  267. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/trust/plugin-trust-draft.md +0 -0
  268. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/docs/trust/skill-trust-local.md +0 -0
  269. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/fuzzers/manifest_fuzzer.py +0 -0
  270. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/pr-body.md +0 -0
  271. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/requirements.txt +0 -0
  272. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/schemas/plugin-quality.v1.json +0 -0
  273. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/schemas/scan-result.v1.json +0 -0
  274. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/schemas/verify-result.v1.json +0 -0
  275. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/scripts/codex-auto-resume-smoke.py +0 -0
  276. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/scripts/e2e-cursor-hook-smoke.py +0 -0
  277. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/scripts/emit_supply_chain_daemon_for_browser_proof.py +0 -0
  278. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/scripts/run_supply_chain_local_runtime_proof.py +0 -0
  279. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/__init__.py +0 -0
  280. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/action_runner.py +0 -0
  281. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/argparse_utils.py +0 -0
  282. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/__init__.py +0 -0
  283. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
  284. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/claude.py +0 -0
  285. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
  286. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
  287. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/gemini.py +0 -0
  288. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/manifest.py +0 -0
  289. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
  290. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
  291. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
  292. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/opencode.py +0 -0
  293. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
  294. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/security.py +0 -0
  295. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
  296. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/cli.py +0 -0
  297. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/cli_ui.py +0 -0
  298. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/config.py +0 -0
  299. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
  300. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
  301. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
  302. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
  303. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
  304. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
  305. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
  306. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
  307. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
  308. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/github_reporting.py +0 -0
  309. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/__init__.py +0 -0
  310. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/access_graph_events.py +0 -0
  311. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
  312. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
  313. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
  314. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
  315. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/claude_daemon_hook_bridge.py +0 -0
  316. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cloud_identity.py +0 -0
  317. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
  318. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/contracts.py +0 -0
  319. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
  320. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
  321. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_cli.py +0 -0
  322. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_hooks.py +0 -0
  323. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_native_approval.py +0 -0
  324. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
  325. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
  326. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/hook_python.py +0 -0
  327. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
  328. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw.py +0 -0
  329. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw_config.py +0 -0
  330. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw_support.py +0 -0
  331. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
  332. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
  333. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode_pretool.py +0 -0
  334. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/advisory_model.py +0 -0
  335. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_cli.py +0 -0
  336. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_detection.py +0 -0
  337. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_symlink.py +0 -0
  338. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_trust_metadata.py +0 -0
  339. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approval_gate.py +0 -0
  340. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approval_gate_state.py +0 -0
  341. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approvals.py +0 -0
  342. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
  343. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
  344. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
  345. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
  346. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/approval_gate_prompt.py +0 -0
  347. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
  348. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/commands.py +0 -0
  349. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
  350. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/cursor_actions.py +0 -0
  351. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/dashboard_sync.py +0 -0
  352. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/docs.py +0 -0
  353. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
  354. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/oauth_client.py +0 -0
  355. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
  356. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
  357. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/remote_pair_flow.py +0 -0
  358. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/render.py +0 -0
  359. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
  360. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_app_server.py +0 -0
  361. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
  362. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_resume.py +0 -0
  363. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/config.py +0 -0
  364. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
  365. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
  366. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/contracts/__init__.py +0 -0
  367. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/contracts/supply_chain_decision_evidence_v1.py +0 -0
  368. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
  369. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
  370. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/dashboard_update.py +0 -0
  371. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/dashboard_update_runner.py +0 -0
  372. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
  373. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
  374. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
  375. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/about-workspace.js +0 -0
  376. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-catalog.js +0 -0
  377. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-detail-workspace.js +0 -0
  378. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/audit-workspace.js +0 -0
  379. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/feed-health-workspace.js +0 -0
  380. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/fleet-workspace.js +0 -0
  381. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/help-modal.js +0 -0
  382. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-dashboard.js +0 -0
  383. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-protection-module.js +0 -0
  384. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/policy-workspace.js +0 -0
  385. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/runtime-overview.js +0 -0
  386. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/settings-workspace.js +0 -0
  387. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-hub-workspace.js +0 -0
  388. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-workspace.js +0 -0
  389. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/use-resolved-approval-gate.js +0 -0
  390. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
  391. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
  392. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
  393. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
  394. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
  395. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
  396. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
  397. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
  398. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/desktop_notifications.py +0 -0
  399. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
  400. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/harness_usage.py +0 -0
  401. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/incident.py +0 -0
  402. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/insights.py +0 -0
  403. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/insights_share.py +0 -0
  404. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/inventory_cisco.py +0 -0
  405. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/inventory_contract.py +0 -0
  406. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/launcher.py +0 -0
  407. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/local_dashboard_session.py +0 -0
  408. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/local_supply_chain.py +0 -0
  409. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
  410. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/models.py +0 -0
  411. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_action_rate_limit.py +0 -0
  412. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_entitlement.py +0 -0
  413. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_receipts.py +0 -0
  414. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_shim_status.py +0 -0
  415. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
  416. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
  417. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy_bundle_parser.py +0 -0
  418. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/product_model.py +0 -0
  419. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/protect.py +0 -0
  420. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/provenance.py +0 -0
  421. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
  422. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
  423. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
  424. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
  425. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
  426. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
  427. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/redaction.py +0 -0
  428. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/remote_pairing_constants.py +0 -0
  429. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/risk.py +0 -0
  430. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
  431. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/action_identity.py +0 -0
  432. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/actions.py +0 -0
  433. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/advisory_escalation.py +0 -0
  434. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/advisory_matchers.py +0 -0
  435. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/cisco_evidence.py +0 -0
  436. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/cisco_preflight.py +0 -0
  437. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/composition_rules.py +0 -0
  438. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow.py +0 -0
  439. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow_rules.py +0 -0
  440. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow_variables.py +0 -0
  441. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/decisions.py +0 -0
  442. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/detectors.py +0 -0
  443. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/false_positive_rules.py +0 -0
  444. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/harness_attribution.py +0 -0
  445. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/js_semver.py +0 -0
  446. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/mcp_protection.py +0 -0
  447. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/mcp_skill_firewall.py +0 -0
  448. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent.py +0 -0
  449. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent_common.py +0 -0
  450. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent_parser.py +0 -0
  451. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_manifest_diff.py +0 -0
  452. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/persistence_rules.py +0 -0
  453. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/prompt_injection.py +0 -0
  454. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
  455. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/safe_decode.py +0 -0
  456. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/sandbox.py +0 -0
  457. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/scanner_cache.py +0 -0
  458. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
  459. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_sensitivity.py +0 -0
  460. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_sources.py +0 -0
  461. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/sed_scripts.py +0 -0
  462. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/shell_commands.py +0 -0
  463. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/signals.py +0 -0
  464. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/skill_protection.py +0 -0
  465. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain.py +0 -0
  466. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle.py +0 -0
  467. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_base.py +0 -0
  468. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_models.py +0 -0
  469. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_runtime.py +0 -0
  470. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_package_eval.py +0 -0
  471. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_support.py +0 -0
  472. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
  473. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/temp_files.py +0 -0
  474. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/threat_intel.py +0 -0
  475. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
  476. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
  477. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
  478. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/guard_product_model_v1.json +0 -0
  479. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
  480. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/shim_probe.py +0 -0
  481. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/shims.py +0 -0
  482. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/stable_digest.py +0 -0
  483. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store.py +0 -0
  484. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
  485. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
  486. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_evidence.py +0 -0
  487. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_resume.py +0 -0
  488. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_supply_chain.py +0 -0
  489. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_threat_intel.py +0 -0
  490. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/totp.py +0 -0
  491. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/types.py +0 -0
  492. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
  493. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
  494. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
  495. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/lint_fixes.py +0 -0
  496. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/marketplace_support.py +0 -0
  497. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/models.py +0 -0
  498. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/path_support.py +0 -0
  499. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/policy.py +0 -0
  500. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/quality_artifact.py +0 -0
  501. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/repo_detect.py +0 -0
  502. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/reporting.py +0 -0
  503. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/__init__.py +0 -0
  504. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/registry.py +0 -0
  505. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/specs.py +0 -0
  506. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/scanner.py +0 -0
  507. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/submission.py +0 -0
  508. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/suppressions.py +0 -0
  509. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
  510. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_helpers.py +0 -0
  511. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
  512. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_models.py +0 -0
  513. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
  514. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_scoring.py +0 -0
  515. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
  516. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_specs.py +0 -0
  517. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/verification.py +0 -0
  518. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/__init__.py +0 -0
  519. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/bundle_first_cloud.py +0 -0
  520. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/conftest.py +0 -0
  521. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/e2e_droid_exec.py +0 -0
  522. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/__init__.py +0 -0
  523. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
  524. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/.mcp.json +0 -0
  525. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/secrets.js +0 -0
  526. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
  527. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
  528. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/README.md +0 -0
  529. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
  530. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
  531. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
  532. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/code-quality-bad/evil.js +0 -0
  533. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/code-quality-bad/inject.js +0 -0
  534. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/benign-echo.json +0 -0
  535. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/benign-health-check.json +0 -0
  536. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/expected-permissions.json +0 -0
  537. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-aws-credentials-read.json +0 -0
  538. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-canary-exfil-shell.json +0 -0
  539. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-env-read.json +0 -0
  540. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-mcp-secret-read.json +0 -0
  541. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
  542. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
  543. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/README.md +0 -0
  544. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
  545. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
  546. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
  547. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
  548. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/.codexignore +0 -0
  549. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/LICENSE +0 -0
  550. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/README.md +0 -0
  551. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/SECURITY.md +0 -0
  552. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
  553. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
  554. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
  555. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
  556. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/README.md +0 -0
  557. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-docs-fake-token.py +0 -0
  558. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-health-endpoint.py +0 -0
  559. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-nvmrc-fake-creds.py +0 -0
  560. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-source-search.py +0 -0
  561. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/canary-exfil-encoded.py +0 -0
  562. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/canary-exfil.py +0 -0
  563. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/expected-decisions.json +0 -0
  564. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-dockerfile.txt +0 -0
  565. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-encoded-shell-exfil.py +0 -0
  566. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-github-action.yml +0 -0
  567. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-delete.md +0 -0
  568. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-secret-read.md +0 -0
  569. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-skill-exfil.md +0 -0
  570. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-npm-postinstall.js +0 -0
  571. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-env-read.md +0 -0
  572. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-guard-bypass.md +0 -0
  573. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-npmrc-read.md +0 -0
  574. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-python-setup.py +0 -0
  575. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/smoke-evidence-template.json +0 -0
  576. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
  577. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
  578. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
  579. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
  580. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
  581. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
  582. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
  583. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
  584. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
  585. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
  586. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
  587. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
  588. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
  589. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
  590. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/mcp-canary-server.py +0 -0
  591. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
  592. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
  593. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/mit-license/LICENSE +0 -0
  594. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
  595. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
  596. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
  597. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
  598. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
  599. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
  600. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
  601. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
  602. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
  603. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
  604. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
  605. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
  606. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
  607. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
  608. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
  609. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
  610. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
  611. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
  612. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/LICENSE +0 -0
  613. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/README.md +0 -0
  614. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/SECURITY.md +0 -0
  615. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
  616. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
  617. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
  618. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
  619. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-npm-controls-package.json +0 -0
  620. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-npm-package.json +0 -0
  621. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-pnpm-package.json +0 -0
  622. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-pyproject.toml +0 -0
  623. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/critical-base-image-Dockerfile +0 -0
  624. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-Dockerfile +0 -0
  625. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-action.yml +0 -0
  626. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-env-fs-network-package.json +0 -0
  627. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-obfuscated-package.json +0 -0
  628. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-package.json +0 -0
  629. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-setup.py +0 -0
  630. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-safe/Cargo.lock +0 -0
  631. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-safe/Cargo.toml +0 -0
  632. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-vulnerable/Cargo.lock +0 -0
  633. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-vulnerable/Cargo.toml +0 -0
  634. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-safe/composer.json +0 -0
  635. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-safe/composer.lock +0 -0
  636. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-vulnerable/composer.json +0 -0
  637. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-vulnerable/composer.lock +0 -0
  638. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/go-safe/go.mod +0 -0
  639. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/go-vulnerable/go.mod +0 -0
  640. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-safe/build.gradle +0 -0
  641. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-safe/gradle.lockfile +0 -0
  642. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-vulnerable/build.gradle +0 -0
  643. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-vulnerable/gradle.lockfile +0 -0
  644. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/maven-safe/pom.xml +0 -0
  645. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/maven-vulnerable/pom.xml +0 -0
  646. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-safe/Gemfile +0 -0
  647. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-safe/Gemfile.lock +0 -0
  648. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile +0 -0
  649. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile.lock +0 -0
  650. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
  651. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
  652. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/marketplace.json +0 -0
  653. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/guard_python_phase12_support.py +0 -0
  654. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/guard_tier2_phase13_support.py +0 -0
  655. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/shim_execution_helpers.py +0 -0
  656. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test-trust-scoring.py +0 -0
  657. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test-trust-specs.py +0 -0
  658. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_action_runner.py +0 -0
  659. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_best_practices.py +0 -0
  660. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cisco_install_surfaces.py +0 -0
  661. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_claude_daemon_hook_bridge.py +0 -0
  662. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cli.py +0 -0
  663. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_code_quality.py +0 -0
  664. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_config.py +0 -0
  665. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_coverage_remaining.py +0 -0
  666. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_adapter.py +0 -0
  667. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_cli.py +0 -0
  668. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_completion_gates.py +0 -0
  669. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_headless_fixtures.py +0 -0
  670. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_hooks.py +0 -0
  671. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_cursor_local_actions.py +0 -0
  672. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_dashboard_sync_security.py +0 -0
  673. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_dashboard_update.py +0 -0
  674. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_ecosystems.py +0 -0
  675. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_edge_cases.py +0 -0
  676. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_final_coverage.py +0 -0
  677. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_gemini_adapter.py +0 -0
  678. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_access_graph.py +0 -0
  679. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_action_identity.py +0 -0
  680. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_advisory_escalation.py +0 -0
  681. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_cli.py +0 -0
  682. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_detection.py +0 -0
  683. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_serializer_security.py +0 -0
  684. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_symlink.py +0 -0
  685. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_symlink_negative_matrix.py +0 -0
  686. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_aibom_trust_metadata.py +0 -0
  687. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_continuity.py +0 -0
  688. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_copy_commands.py +0 -0
  689. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_decisions.py +0 -0
  690. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_gate.py +0 -0
  691. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_dedup.py +0 -0
  692. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_phase14.py +0 -0
  693. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_scale.py +0 -0
  694. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_approvals.py +0 -0
  695. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_auto_first_sync.py +0 -0
  696. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_bootstrap.py +0 -0
  697. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_bridge.py +0 -0
  698. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_bypass_detector.py +0 -0
  699. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_canary_fixtures.py +0 -0
  700. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_capabilities.py +0 -0
  701. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_cisco_evidence.py +0 -0
  702. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_cisco_runtime_cli.py +0 -0
  703. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_claude_adapter.py +0 -0
  704. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_cli.py +0 -0
  705. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_cloud_local_sync.py +0 -0
  706. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_app_server.py +0 -0
  707. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_auto_resume_smoke.py +0 -0
  708. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_e2e.py +0 -0
  709. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_install.py +0 -0
  710. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_proxy.py +0 -0
  711. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_resume_commands.py +0 -0
  712. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_codex_resume_endpoints.py +0 -0
  713. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_config_paths.py +0 -0
  714. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_connect_flow.py +0 -0
  715. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_consumer_mode.py +0 -0
  716. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_copilot_adapter.py +0 -0
  717. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_copilot_proxy.py +0 -0
  718. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_cli.py +0 -0
  719. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_manager.py +0 -0
  720. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_perf.py +0 -0
  721. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_registry.py +0 -0
  722. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_repair_perf.py +0 -0
  723. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_daemon_wake.py +0 -0
  724. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_data_flow.py +0 -0
  725. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_decision_propagation.py +0 -0
  726. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_desktop_notifications.py +0 -0
  727. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_detector_fp.py +0 -0
  728. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_docs.py +0 -0
  729. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_event_schema_v1.py +0 -0
  730. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_events.py +0 -0
  731. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_evidence_api_contract.py +0 -0
  732. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_evidence_store.py +0 -0
  733. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_harness_contracts.py +0 -0
  734. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_harness_setup.py +0 -0
  735. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_harness_smoke.py +0 -0
  736. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_hashnet_mcp_canaries.py +0 -0
  737. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_headless_daemon_api.py +0 -0
  738. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_insights.py +0 -0
  739. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_install_workspace.py +0 -0
  740. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_inventory_cisco.py +0 -0
  741. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_inventory_contract.py +0 -0
  742. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_lab_phase11.py +0 -0
  743. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_lockfile_resolution_phase11.py +0 -0
  744. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_package_hook_phase11.py +0 -0
  745. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_package_intent_phase11.py +0 -0
  746. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_semver_phase11.py +0 -0
  747. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_js_supply_chain_phase11.py +0 -0
  748. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_launch_env.py +0 -0
  749. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_legacy_token_fixtures.py +0 -0
  750. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_local_supply_chain_audit_phase16.py +0 -0
  751. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_local_supply_chain_phase15.py +0 -0
  752. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_mcp_detectors.py +0 -0
  753. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_mcp_package_proxy_phase14.py +0 -0
  754. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_mcp_protection.py +0 -0
  755. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_mcp_skill_firewall.py +0 -0
  756. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_oauth_client.py +0 -0
  757. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_oauth_device_connect.py +0 -0
  758. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_oauth_reconnect.py +0 -0
  759. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_opencode_proxy.py +0 -0
  760. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_hook.py +0 -0
  761. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_hook_phase14.py +0 -0
  762. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_intent.py +0 -0
  763. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_resume_phase14.py +0 -0
  764. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_shims.py +0 -0
  765. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_package_shims_cli.py +0 -0
  766. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase03_local_install.py +0 -0
  767. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase03_remainder.py +0 -0
  768. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase04_failure_modes.py +0 -0
  769. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase04_harness_contracts.py +0 -0
  770. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase04_harness_ux.py +0 -0
  771. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase04_install_reason_proofs.py +0 -0
  772. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase05_approval_memory.py +0 -0
  773. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase05_manager_coverage.py +0 -0
  774. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase06_workspace_audit.py +0 -0
  775. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase07_entitlement_daemon_security.py +0 -0
  776. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase07_harness_coverage_matrix.py +0 -0
  777. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase11_package_firewall_receipts.py +0 -0
  778. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_phase11_package_firewall_status.py +0 -0
  779. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_policy_dedup.py +0 -0
  780. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_product_flow.py +0 -0
  781. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_product_model_contracts.py +0 -0
  782. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_prompt_injection.py +0 -0
  783. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_protect.py +0 -0
  784. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_protect_package_spec_parsing.py +0 -0
  785. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_provenance.py +0 -0
  786. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_python_lab_phase12.py +0 -0
  787. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_python_package_hook_phase12.py +0 -0
  788. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_python_package_intent_phase12.py +0 -0
  789. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_python_supply_chain_heuristics_phase12.py +0 -0
  790. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_python_supply_chain_phase12.py +0 -0
  791. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_queue_api_contract.py +0 -0
  792. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_queue_contract.py +0 -0
  793. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_receipt_p5_fields.py +0 -0
  794. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_receipt_persistence.py +0 -0
  795. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_red_team.py +0 -0
  796. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_red_team_e2e.py +0 -0
  797. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_redaction.py +0 -0
  798. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_registry_broker_skills_canaries.py +0 -0
  799. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_remote_pair_flow.py +0 -0
  800. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_render.py +0 -0
  801. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_resolution_copy.py +0 -0
  802. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_risk.py +0 -0
  803. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime.py +0 -0
  804. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_action_harnesses.py +0 -0
  805. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_actions.py +0 -0
  806. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_actions_phase14.py +0 -0
  807. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_decisions.py +0 -0
  808. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_detectors.py +0 -0
  809. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_runtime_signals.py +0 -0
  810. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_safe_decode.py +0 -0
  811. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_sandbox.py +0 -0
  812. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_settings_api.py +0 -0
  813. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_settings_presets.py +0 -0
  814. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_shim_intercept_proofs.py +0 -0
  815. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_shim_truth.py +0 -0
  816. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_skill_protection.py +0 -0
  817. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_skill_protection_phase14.py +0 -0
  818. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_source_view_secret_fixtures.py +0 -0
  819. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_stable_digest.py +0 -0
  820. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_store_migrations.py +0 -0
  821. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain.py +0 -0
  822. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_bundle.py +0 -0
  823. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_daemon.py +0 -0
  824. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_decision_contract.py +0 -0
  825. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_disclosure_reasons.py +0 -0
  826. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_evaluator.py +0 -0
  827. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_sync.py +0 -0
  828. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_surface_server.py +0 -0
  829. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_threat_intel.py +0 -0
  830. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_tier2_labs_phase13.py +0 -0
  831. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_tier2_package_intent_phase13.py +0 -0
  832. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_tier2_supply_chain_phase13.py +0 -0
  833. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_verdicts.py +0 -0
  834. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_web_recovery.py +0 -0
  835. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_guard_wrapper_flows.py +0 -0
  836. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_harness_attribution.py +0 -0
  837. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_hermes_adapter.py +0 -0
  838. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_insights_share.py +0 -0
  839. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_integration.py +0 -0
  840. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_lint_fixes.py +0 -0
  841. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_live_cisco_smoke.py +0 -0
  842. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_manifest.py +0 -0
  843. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_marketplace.py +0 -0
  844. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_mcp_security.py +0 -0
  845. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_openclaw_adapter.py +0 -0
  846. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_opencode_adapter.py +0 -0
  847. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_opencode_hook_python.py +0 -0
  848. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_opencode_pretool.py +0 -0
  849. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_operational_security.py +0 -0
  850. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_policy.py +0 -0
  851. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_policy_bundle_parser.py +0 -0
  852. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_quality_artifact.py +0 -0
  853. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_rule_registry.py +0 -0
  854. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_scanner.py +0 -0
  855. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_schema_contracts.py +0 -0
  856. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_security.py +0 -0
  857. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_security_ops.py +0 -0
  858. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_shim_probe_security.py +0 -0
  859. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_skill_security.py +0 -0
  860. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_submission.py +0 -0
  861. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_trust_scoring.py +0 -0
  862. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_trust_specs.py +0 -0
  863. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_verification.py +0 -0
  864. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/tests/test_versioning.py +0 -0
  865. {plugin_scanner-2.0.580 → plugin_scanner-2.0.581}/uv.lock +0 -0
@@ -0,0 +1,195 @@
1
+ name: Publish GitHub Action Repository
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ scanner_version:
7
+ description: "Optional plugin-scanner version to publish (defaults to latest hol-guard release)"
8
+ required: false
9
+ default: ""
10
+ workflow_run:
11
+ workflows: ["Publish to PyPI"]
12
+ types: [completed]
13
+ branches: [main]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ concurrency:
19
+ group: ai-plugin-scanner-action-repo-${{ github.ref }}
20
+ cancel-in-progress: false
21
+
22
+ jobs:
23
+ publish-action-repo:
24
+ name: Sync action repo + publish release notes
25
+ if: >-
26
+ github.event_name == 'workflow_dispatch' ||
27
+ (github.event.workflow_run.conclusion == 'success' &&
28
+ github.event.workflow_run.event == 'push' &&
29
+ github.event.workflow_run.head_branch == 'main')
30
+ runs-on: ubuntu-latest
31
+ permissions:
32
+ contents: read
33
+ env:
34
+ ACTION_REPOSITORY: ${{ vars.ACTION_REPOSITORY != '' && vars.ACTION_REPOSITORY || 'hashgraph-online/ai-plugin-scanner-action' }}
35
+ SOURCE_REF: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
36
+ SOURCE_REPOSITORY: ${{ github.repository }}
37
+ SOURCE_SERVER_URL: ${{ github.server_url }}
38
+ steps:
39
+ - name: Validate publication credentials
40
+ env:
41
+ ACTION_REPO_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
42
+ run: |
43
+ if [ -z "$ACTION_REPO_TOKEN" ]; then
44
+ echo "ACTION_REPO_TOKEN must be configured to publish the GitHub Action repository." >&2
45
+ exit 1
46
+ fi
47
+
48
+ - name: Checkout source repository
49
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
50
+ with:
51
+ ref: ${{ env.SOURCE_REF }}
52
+ fetch-depth: 0
53
+
54
+ - name: Resolve published scanner version
55
+ id: scanner_version
56
+ env:
57
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58
+ REQUESTED_VERSION: ${{ inputs.scanner_version }}
59
+ run: |
60
+ if [ -n "$REQUESTED_VERSION" ]; then
61
+ VERSION="$REQUESTED_VERSION"
62
+ else
63
+ VERSION="$(gh release list --repo "$SOURCE_REPOSITORY" --limit 1 --json tagName --jq '.[0].tagName | ltrimstr("v")')"
64
+ fi
65
+
66
+ if [ -z "$VERSION" ]; then
67
+ echo "Could not resolve plugin-scanner version to publish." >&2
68
+ exit 1
69
+ fi
70
+
71
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
72
+
73
+ - name: Compute scanner wheel SHA256
74
+ id: scanner_sha256
75
+ env:
76
+ SCANNER_VERSION: ${{ steps.scanner_version.outputs.version }}
77
+ run: |
78
+ python3 -m pip install --disable-pip-version-check --no-input "pypi-attestations==$(tr -d '[:space:]' < action/pypi-attestations-version.txt)"
79
+ DIST_DIR="${RUNNER_TEMP}/scanner-wheel"
80
+ mkdir -p "$DIST_DIR"
81
+ python3 -m pip download --disable-pip-version-check --no-input --only-binary=:all: --no-deps --dest "$DIST_DIR" "plugin-scanner==${SCANNER_VERSION}"
82
+ WHEEL_PATH="$(find "$DIST_DIR" -maxdepth 1 -name 'plugin_scanner-*.whl' -print | sort | head -n1)"
83
+ if [ -z "$WHEEL_PATH" ]; then
84
+ echo "Could not download plugin-scanner wheel for version ${SCANNER_VERSION}." >&2
85
+ exit 1
86
+ fi
87
+ SHA256="$(python3 -c "import hashlib,sys; print(hashlib.sha256(open(sys.argv[1],'rb').read()).hexdigest())" "$WHEEL_PATH")"
88
+ echo "sha256=$SHA256" >> "$GITHUB_OUTPUT"
89
+
90
+ - name: Compute next action release tag
91
+ id: version
92
+ env:
93
+ GH_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
94
+ run: |
95
+ LAST_TAG=$(gh release list --repo "$ACTION_REPOSITORY" --limit 1 --json tagName --jq '.[0].tagName // ""')
96
+
97
+ if [ -z "$LAST_TAG" ]; then
98
+ TAG="v1.0.0"
99
+ else
100
+ IFS=. read -r MAJOR MINOR PATCH <<< "${LAST_TAG#v}"
101
+ if [ -z "$MAJOR" ] || [ -z "$MINOR" ] || [ -z "$PATCH" ]; then
102
+ echo "Unsupported release tag format: $LAST_TAG" >&2
103
+ exit 1
104
+ fi
105
+ TAG="v${MAJOR}.${MINOR}.$((PATCH + 1))"
106
+ fi
107
+
108
+ echo "tag=$TAG" >> "$GITHUB_OUTPUT"
109
+
110
+ - name: Clone action repository
111
+ env:
112
+ GH_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
113
+ run: gh repo clone "$ACTION_REPOSITORY" action-repo -- --depth 1
114
+
115
+ - name: Configure authenticated action repository remote
116
+ working-directory: action-repo
117
+ env:
118
+ ACTION_REPO_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
119
+ run: |
120
+ git remote set-url origin "https://x-access-token:${ACTION_REPO_TOKEN}@github.com/${ACTION_REPOSITORY}.git"
121
+
122
+ - name: Sync root-ready action bundle
123
+ working-directory: action-repo
124
+ run: |
125
+ cp "${GITHUB_WORKSPACE}/action/action.yml" action.yml
126
+ cp "${GITHUB_WORKSPACE}/action/README.md" README.md
127
+ cp "${GITHUB_WORKSPACE}/action/CONTRIBUTING.md" CONTRIBUTING.md
128
+ cp "${GITHUB_WORKSPACE}/action/SECURITY.md" SECURITY.md
129
+ printf '%s\n' "${{ steps.scanner_version.outputs.version }}" > scanner-version.txt
130
+ printf '%s\n' "${{ steps.scanner_sha256.outputs.sha256 }}" > scanner-sha256.txt
131
+ cp "${GITHUB_WORKSPACE}/action/cisco-version.txt" cisco-version.txt
132
+ cp "${GITHUB_WORKSPACE}/action/pypi-attestations-version.txt" pypi-attestations-version.txt
133
+ cp "${GITHUB_WORKSPACE}/LICENSE" LICENSE
134
+
135
+ - name: Detect sync changes
136
+ id: diff
137
+ working-directory: action-repo
138
+ run: |
139
+ if [ -n "$(git status --short -- action.yml README.md CONTRIBUTING.md SECURITY.md scanner-version.txt scanner-sha256.txt cisco-version.txt pypi-attestations-version.txt LICENSE)" ]; then
140
+ echo "changed=true" >> "$GITHUB_OUTPUT"
141
+ else
142
+ echo "changed=false" >> "$GITHUB_OUTPUT"
143
+ fi
144
+
145
+ - name: Commit synced bundle
146
+ if: steps.diff.outputs.changed == 'true'
147
+ working-directory: action-repo
148
+ run: |
149
+ git config user.name "github-actions[bot]"
150
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
151
+ git add action.yml README.md CONTRIBUTING.md SECURITY.md scanner-version.txt scanner-sha256.txt cisco-version.txt pypi-attestations-version.txt LICENSE
152
+ git commit -m "chore: publish action bundle ${{ steps.version.outputs.tag }} (plugin-scanner ${{ steps.scanner_version.outputs.version }})"
153
+
154
+ - name: Push action repository branch and tags
155
+ if: steps.diff.outputs.changed == 'true'
156
+ working-directory: action-repo
157
+ run: |
158
+ TAG="${{ steps.version.outputs.tag }}"
159
+ git push origin HEAD:main
160
+ git tag "$TAG"
161
+ git push origin "refs/tags/${TAG}"
162
+ git tag -fa v1 -m "Update floating major tag to ${TAG}"
163
+ git push origin refs/tags/v1 --force
164
+
165
+ - name: Check action release state
166
+ id: release_state
167
+ working-directory: action-repo
168
+ env:
169
+ GH_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
170
+ run: |
171
+ TAG="${{ steps.version.outputs.tag }}"
172
+
173
+ if gh release view "${TAG}" --repo "$ACTION_REPOSITORY" >/dev/null 2>&1; then
174
+ echo "release_exists=true" >> "$GITHUB_OUTPUT"
175
+ else
176
+ echo "release_exists=false" >> "$GITHUB_OUTPUT"
177
+ fi
178
+
179
+ if git ls-remote --tags origin "refs/tags/${TAG}" | grep -q .; then
180
+ echo "tag_exists=true" >> "$GITHUB_OUTPUT"
181
+ else
182
+ echo "tag_exists=false" >> "$GITHUB_OUTPUT"
183
+ fi
184
+
185
+ - name: Create action repository release
186
+ if: steps.release_state.outputs.release_exists == 'false' && (steps.diff.outputs.changed == 'true' || steps.release_state.outputs.tag_exists == 'true')
187
+ env:
188
+ GH_TOKEN: ${{ secrets.ACTION_REPO_TOKEN }}
189
+ run: |
190
+ TAG="${{ steps.version.outputs.tag }}"
191
+ gh release create "${TAG}" \
192
+ --repo "$ACTION_REPOSITORY" \
193
+ --title "$TAG" \
194
+ --generate-notes \
195
+ --notes "Published automatically from ${SOURCE_SERVER_URL}/${SOURCE_REPOSITORY}/tree/${SOURCE_REF} with plugin-scanner ${{ steps.scanner_version.outputs.version }}."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plugin-scanner
3
- Version: 2.0.580
3
+ Version: 2.0.581
4
4
  Summary: Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows.
5
5
  Project-URL: Homepage, https://github.com/hashgraph-online/hol-guard
6
6
  Project-URL: Repository, https://github.com/hashgraph-online/hol-guard
@@ -641,7 +641,7 @@ repos:
641
641
 
642
642
  The Marketplace action lives in the dedicated repository [hashgraph-online/ai-plugin-scanner-action](https://github.com/hashgraph-online/ai-plugin-scanner-action).
643
643
 
644
- This repository no longer vendors a local action bundle. Use the standalone action repository for `action.yml`, release notes, and action-specific documentation. The legacy alias [hashgraph-online/hol-codex-plugin-scanner-action](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action) remains available for existing workflows.
644
+ The Marketplace action bundle is maintained in [`action/`](./action) and published automatically to [hashgraph-online/ai-plugin-scanner-action](https://github.com/hashgraph-online/ai-plugin-scanner-action) by [`.github/workflows/publish-action-repo.yml`](./.github/workflows/publish-action-repo.yml) after each PyPI release. The legacy alias [hashgraph-online/hol-codex-plugin-scanner-action](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action) remains available for existing workflows.
645
645
  When you run the scanner in your own job instead of the packaged action, install `plugin-scanner[cisco]` on Python 3.11+ and set `CISCO_MCP_SCAN=auto` or `CISCO_MCP_SCAN=on` for full Cisco MCP coverage.
646
646
 
647
647
  ### Plugin Author Submission Flow
@@ -599,7 +599,7 @@ repos:
599
599
 
600
600
  The Marketplace action lives in the dedicated repository [hashgraph-online/ai-plugin-scanner-action](https://github.com/hashgraph-online/ai-plugin-scanner-action).
601
601
 
602
- This repository no longer vendors a local action bundle. Use the standalone action repository for `action.yml`, release notes, and action-specific documentation. The legacy alias [hashgraph-online/hol-codex-plugin-scanner-action](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action) remains available for existing workflows.
602
+ The Marketplace action bundle is maintained in [`action/`](./action) and published automatically to [hashgraph-online/ai-plugin-scanner-action](https://github.com/hashgraph-online/ai-plugin-scanner-action) by [`.github/workflows/publish-action-repo.yml`](./.github/workflows/publish-action-repo.yml) after each PyPI release. The legacy alias [hashgraph-online/hol-codex-plugin-scanner-action](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action) remains available for existing workflows.
603
603
  When you run the scanner in your own job instead of the packaged action, install `plugin-scanner[cisco]` on Python 3.11+ and set `CISCO_MCP_SCAN=auto` or `CISCO_MCP_SCAN=on` for full Cisco MCP coverage.
604
604
 
605
605
  ### Plugin Author Submission Flow
@@ -0,0 +1,79 @@
1
+ # Contributing to AI Plugin Scanner
2
+
3
+ Thanks for contributing to `ai-plugin-scanner`.
4
+
5
+ This repository ships:
6
+
7
+ - `hol-guard` for local harness protection
8
+ - `plugin-scanner` for CI and maintainer checks across supported AI plugin ecosystems
9
+ - `codex-plugin-scanner` as a compatibility package alias
10
+
11
+ ## Before You Start
12
+
13
+ - Search existing [issues](https://github.com/hashgraph-online/ai-plugin-scanner/issues) before opening a new report.
14
+ - Use [discussions](https://github.com/hashgraph-online/ai-plugin-scanner/discussions) for design questions, proposals, and broader feedback.
15
+ - Open a pull request for code or documentation changes. PRs against `main` are the normal contribution path.
16
+
17
+ ## Development Setup
18
+
19
+ ```bash
20
+ git clone https://github.com/hashgraph-online/ai-plugin-scanner.git
21
+ cd ai-plugin-scanner
22
+ uv sync --extra dev
23
+ ```
24
+
25
+ If you prefer a virtualenv-first workflow, the repository can also be installed in editable mode:
26
+
27
+ ```bash
28
+ python -m venv .venv
29
+ source .venv/bin/activate
30
+ pip install -e ".[dev]"
31
+ ```
32
+
33
+ ## Validation Requirements
34
+
35
+ All non-trivial changes should include or update automated tests.
36
+
37
+ Run the standard validation commands before opening or updating a pull request:
38
+
39
+ ```bash
40
+ # If using uv:
41
+ uv run python -m ruff check src tests
42
+ uv run python -m ruff format --check src tests
43
+ uv run pytest --tb=short
44
+
45
+ # If using pip (with the virtualenv activated):
46
+ python -m ruff check src tests
47
+ python -m ruff format --check src tests
48
+ pytest --tb=short
49
+ ```
50
+
51
+ If you changed packaging or release logic, also verify the build:
52
+
53
+ ```bash
54
+ # If using uv:
55
+ uv run python -m build
56
+
57
+ # If using pip:
58
+ python -m build
59
+ ```
60
+
61
+ ## Contribution Process
62
+
63
+ 1. Fork the repository.
64
+ 2. Create a feature branch from `main`.
65
+ 3. Make the smallest coherent change that fixes the issue or adds the feature.
66
+ 4. Add or update tests for new functionality and changed behavior.
67
+ 5. Run the validation commands above.
68
+ 6. Open a pull request against `main` with a clear summary of what changed and why.
69
+
70
+ ## Contribution Expectations
71
+
72
+ - Python code should remain compatible with the versions declared in `pyproject.toml`.
73
+ - Keep command examples and package names aligned with the current product names: `hol-guard`, `plugin-scanner`, and `ai-plugin-scanner`.
74
+ - Update user-facing docs when the CLI surface, GitHub Action contract, trust scoring behavior, or published workflows change.
75
+ - Do not commit secrets, credentials, or local environment files.
76
+
77
+ ## License
78
+
79
+ By contributing, you agree that your contributions will be licensed under Apache-2.0.
@@ -0,0 +1,280 @@
1
+ # HOL AI Plugin Scanner GitHub Action
2
+
3
+ [![Latest Release](https://img.shields.io/github/v/release/hashgraph-online/ai-plugin-scanner-action?display_name=tag)](https://github.com/hashgraph-online/ai-plugin-scanner-action/releases/latest)
4
+ [![Marketplace Repository](https://img.shields.io/badge/github-marketplace_repo-0A84FF)](https://github.com/hashgraph-online/ai-plugin-scanner-action)
5
+ [![Compatibility Alias](https://img.shields.io/badge/compat-hol--codex--plugin--scanner--action-6b7280)](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action)
6
+ [![Source of Truth](https://img.shields.io/badge/source-hol--guard-111827)](https://github.com/hashgraph-online/hol-guard/tree/main/action)
7
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://github.com/hashgraph-online/hol-guard/blob/main/LICENSE)
8
+
9
+ | ![Hashgraph Online Logo](https://hol.org/brand/Logo_Whole_Dark.png) | Marketplace-ready GitHub Action for scanning AI plugin repositories across Codex, Claude, Gemini, and OpenCode ecosystems for security, publishability, runtime readiness, and trust signals. The action emits structured reports, SARIF, policy results, and submission metadata while staying aligned to the main scanner release train.<br><br>[Latest Release](https://github.com/hashgraph-online/ai-plugin-scanner-action/releases/latest)<br>[Marketplace Repository](https://github.com/hashgraph-online/ai-plugin-scanner-action)<br>[Compatibility Alias](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action)<br>[Scanner Source of Truth](https://github.com/hashgraph-online/hol-guard/tree/main/action)<br>[Report an Issue](https://github.com/hashgraph-online/hol-guard/issues) |
10
+ | :--- | :--- |
11
+
12
+ This repository is the canonical Marketplace-facing wrapper for the scanner action. The hol-guard repository remains the source of truth, while this published action bundle keeps the required root `action.yml` layout for GitHub Marketplace.
13
+
14
+ The legacy action slug `hashgraph-online/hol-codex-plugin-scanner-action@v1` remains supported as a compatibility alias for existing workflows. New integrations should use `hashgraph-online/ai-plugin-scanner-action@v1`.
15
+
16
+ The default Marketplace install path uses an exact `plugin-scanner` PyPI release, verifies its PyPI provenance against `hashgraph-online/hol-guard`, and only then installs it. After installation, the default `scan`, `lint`, and offline `verify` paths operate on local repository content only. Live network probing and submission automation remain explicit opt-in features.
17
+
18
+ Advanced distribution paths are available when you need them:
19
+
20
+ - `install_source: local` is the explicit dogfood path for `uses: ./action` inside the source repo.
21
+ - `ghcr.io/hashgraph-online/hol-guard` is the container distribution for enterprise runners that prefer a reviewed OCI image over runtime package installation.
22
+
23
+ ## Usage
24
+
25
+ ```yaml
26
+ - name: Scan AI Plugin Repository
27
+ uses: hashgraph-online/ai-plugin-scanner-action@v1
28
+ with:
29
+ plugin_dir: "./my-plugin"
30
+ min_score: 70
31
+ fail_on_severity: high
32
+ ```
33
+
34
+ ## Inputs
35
+
36
+ | Input | Description | Default |
37
+ |-------|-------------|---------|
38
+ | `plugin_dir` | Path to a single plugin directory or a repo marketplace root | `.` |
39
+ | `mode` | Execution mode: `scan`, `lint`, `verify`, or `submit` | `scan` |
40
+ | `format` | Output format: `text`, `json`, `markdown`, `sarif` | `text` |
41
+ | `output` | Write report to this file path | `""` |
42
+ | `profile` | Policy profile: `default`, `public-marketplace`, or `strict-security` | `default` |
43
+ | `config` | Optional path to a scanner config file such as `.plugin-scanner.toml` | `""` |
44
+ | `baseline` | Optional path to a baseline suppression file | `""` |
45
+ | `online` | Enable live network probing for `verify` mode | `false` |
46
+ | `upload_sarif` | Upload the generated SARIF report to GitHub code scanning when `mode: scan` | `false` |
47
+ | `sarif_category` | SARIF category used during GitHub code scanning upload | `ai-plugin-scanner` |
48
+ | `write_step_summary` | Write a concise markdown summary to the GitHub Actions job summary | `true` |
49
+ | `registry_payload_output` | Write a machine-readable plugin ecosystem payload JSON file for registry or awesome-list automation | `""` |
50
+ | `min_score` | Fail if score is below this threshold (0-100) | `0` |
51
+ | `fail_on_severity` | Fail on findings at or above this severity: `none`, `critical`, `high`, `medium`, `low`, `info` | `none` |
52
+ | `cisco_skill_scan` | Cisco skill-scanner mode: `auto`, `on`, `off` | `auto` |
53
+ | `cisco_policy` | Cisco policy preset: `permissive`, `balanced`, `strict` | `balanced` |
54
+ | `install_cisco` | Install the opt-in Cisco skill-scanner dependency used by this repo | `false` |
55
+ | `install_source` | Package install source: `pypi` for the reviewed release path, or `local` for source-repo dogfooding | `pypi` |
56
+ | `submission_enabled` | Open submission issues for awesome-list and registry automation when the plugin clears the submission threshold | `false` |
57
+ | `submission_score_threshold` | Minimum score required before a submission issue is created | `80` |
58
+ | `submission_repos` | Comma-separated GitHub repositories that should receive the submission issue | `hashgraph-online/awesome-codex-plugins` |
59
+ | `submission_token` | Required when `submission_enabled` is `true`; use a token with `issues:write` access to the submission repositories | `""` |
60
+ | `submission_labels` | Comma-separated labels to apply when creating submission issues | `plugin-submission` |
61
+ | `submission_category` | Listing category included in the submission issue body | `Community Plugins` |
62
+ | `submission_plugin_name` | Override the plugin name used in the submission issue | `""` |
63
+ | `submission_plugin_url` | Override the plugin repository URL used in the submission issue | `""` |
64
+ | `submission_plugin_description` | Override the plugin description used in the submission issue | `""` |
65
+ | `submission_author` | Override the plugin author used in the submission issue | `""` |
66
+ | `pr_comment` | PR comment mode: `auto`, `always`, or `off` | `auto` |
67
+ | `pr_comment_style` | PR comment style: `concise` or `detailed` | `concise` |
68
+ | `pr_comment_max_findings` | Maximum findings to include in PR comment summaries | `5` |
69
+
70
+ ## Outputs
71
+
72
+ | Output | Description |
73
+ |--------|-------------|
74
+ | `score` | Numeric score (0-100) |
75
+ | `grade` | Letter grade (A-F) |
76
+ | `grade_label` | Human-readable grade label |
77
+ | `policy_pass` | `true` when the selected policy profile passed |
78
+ | `verify_pass` | `true` when runtime verification passed |
79
+ | `max_severity` | Highest finding severity, or `none` |
80
+ | `findings_total` | Total number of findings across all severities |
81
+ | `report_path` | Path to the rendered report file, if `output` was set |
82
+ | `registry_payload_path` | Path to the machine-readable plugin ecosystem payload file, if requested |
83
+ | `submission_eligible` | `true` when the plugin met the submission threshold and passed the configured severity gate |
84
+ | `submission_performed` | `true` when a submission issue was created or an existing one was reused |
85
+ | `submission_issue_urls` | Comma-separated submission issue URLs |
86
+ | `submission_issue_numbers` | Comma-separated submission issue numbers |
87
+ | `action_exit_code` | Action execution exit code |
88
+ | `pr_comment_status` | PR comment status (`created`, `updated`, `unchanged`, `skipped`, `disabled`) |
89
+ | `pr_comment_id` | PR comment ID when available |
90
+ | `pr_comment_url` | PR comment URL when available |
91
+
92
+ The action also writes a concise summary to `GITHUB_STEP_SUMMARY` by default. The full report is written to the job log for `text` output, or to the file you pass through `output` for `json`, `markdown`, or `sarif`.
93
+
94
+ Mode notes:
95
+
96
+ - `scan` and `lint` respect `profile`, `config`, and `baseline`.
97
+ - `verify` respects `online` and writes a human-readable report for `format: text`.
98
+ - `submit` writes the plugin-quality artifact to `output` when provided, otherwise `plugin-quality.json`. `registry_payload_output` remains dedicated to the separate HOL registry payload.
99
+ - `online`, `submission_enabled`, and `upload_sarif` are the only common paths that intentionally reach beyond the runner after the scanner package itself has been installed.
100
+ - `pr_comment_status` currently defaults to `skipped` in this Marketplace wrapper path.
101
+
102
+ ## Examples
103
+
104
+ ### Basic scan with minimum score gate
105
+
106
+ ```yaml
107
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
108
+ with:
109
+ plugin_dir: "."
110
+ min_score: 70
111
+ ```
112
+
113
+ ### SARIF output for GitHub Code Scanning
114
+
115
+ ```yaml
116
+ permissions:
117
+ contents: read
118
+ security-events: write
119
+
120
+ jobs:
121
+ scan:
122
+ runs-on: ubuntu-latest
123
+ steps:
124
+ - uses: actions/checkout@v4
125
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
126
+ with:
127
+ plugin_dir: "."
128
+ mode: scan
129
+ format: sarif
130
+ fail_on_severity: high
131
+ upload_sarif: true
132
+ ```
133
+
134
+ This `plugin_dir: "."` pattern is correct for both single-plugin repositories and multi-plugin marketplace repositories. When `.agents/plugins/marketplace.json` exists, the action switches into repository mode and scans each local plugin entry declared under `./plugins/...`.
135
+
136
+ ### With Cisco skill scanning
137
+
138
+ ```yaml
139
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
140
+ with:
141
+ plugin_dir: "."
142
+ cisco_skill_scan: on
143
+ cisco_policy: strict
144
+ install_cisco: true
145
+ ```
146
+
147
+ ### Dogfood the source-repo action bundle
148
+
149
+ Use this only inside `hashgraph-online/hol-guard`, where the action can install the adjacent source tree directly.
150
+
151
+ ```yaml
152
+ - uses: ./action
153
+ with:
154
+ plugin_dir: "."
155
+ install_source: local
156
+ ```
157
+
158
+ ### Export registry payload for ecosystem automation
159
+
160
+ ```yaml
161
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
162
+ id: scan
163
+ with:
164
+ plugin_dir: "."
165
+ format: sarif
166
+ upload_sarif: true
167
+ registry_payload_output: ai-plugin-registry-payload.json
168
+
169
+ - name: Show trust signals
170
+ run: |
171
+ echo "Score: ${{ steps.scan.outputs.score }}"
172
+ echo "Grade: ${{ steps.scan.outputs.grade_label }}"
173
+ echo "Max severity: ${{ steps.scan.outputs.max_severity }}"
174
+ ```
175
+
176
+ The registry payload mirrors the submission metadata used by HOL ecosystem automation, so the same scan can feed trust scoring, registry ingestion, badges, or awesome-list processing without reparsing the terminal output.
177
+
178
+ ### Score 80+ and auto-file an awesome-list submission issue
179
+
180
+ When the scan reaches `80+` and does not trip the configured severity gate, the action opens or reuses a submission issue in `hashgraph-online/awesome-codex-plugins`. The issue body includes a machine-readable registry payload so downstream registry automation can ingest the same submission event.
181
+
182
+ ```yaml
183
+ permissions:
184
+ contents: read
185
+
186
+ jobs:
187
+ scan:
188
+ runs-on: ubuntu-latest
189
+ steps:
190
+ - uses: actions/checkout@v4
191
+
192
+ - name: Scan plugin and submit if eligible
193
+ id: scan
194
+ uses: hashgraph-online/ai-plugin-scanner-action@v1
195
+ with:
196
+ plugin_dir: "."
197
+ min_score: 80
198
+ fail_on_severity: high
199
+ submission_enabled: true
200
+ submission_score_threshold: 80
201
+ submission_token: ${{ secrets.AWESOME_CODEX_PLUGINS_TOKEN }}
202
+
203
+ - name: Show submission issue
204
+ if: steps.scan.outputs.submission_performed == 'true'
205
+ run: echo "${{ steps.scan.outputs.submission_issue_urls }}"
206
+ ```
207
+
208
+ Use a fine-grained token with `issues:write` on `hashgraph-online/awesome-codex-plugins`. `submission_token` is required when `submission_enabled: true`. The action deduplicates by an exact hidden plugin URL marker in the issue body, so repeated pushes reuse the open submission issue instead of opening duplicates.
209
+
210
+ ### Markdown report as PR comment
211
+
212
+ ```yaml
213
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
214
+ id: scan
215
+ with:
216
+ plugin_dir: "."
217
+ format: markdown
218
+ output: scan-report.md
219
+
220
+ - name: Comment PR
221
+ uses: actions/github-script@v7
222
+ with:
223
+ script: |
224
+ const fs = require('fs');
225
+ const report = fs.readFileSync('scan-report.md', 'utf8');
226
+ github.rest.issues.createComment({
227
+ issue_number: context.issue.number,
228
+ owner: context.repo.owner,
229
+ repo: context.repo.repo,
230
+ body: report
231
+ });
232
+ ```
233
+
234
+ ## Release Management
235
+
236
+ - Publish immutable releases for this Marketplace wrapper repository automatically from the source scanner repo when `action/` changes merge to `main`.
237
+ - Move the floating major tag `v1` to the latest compatible release.
238
+ - Keep the canonical action in its own public repository for GitHub Marketplace publication.
239
+ - Keep the legacy action repository synchronized as a compatibility alias for existing consumers.
240
+ - Configure `ACTION_REPO_TOKEN` as a secret in the source repository so `publish-action-repo.yml` can automatically sync the canonical and legacy action repositories, create releases, and publish autogenerated release notes.
241
+ - Optionally set `ACTION_CANONICAL_REPOSITORY` or `ACTION_COMPAT_REPOSITORY` in the source repository if the targets differ from the defaults.
242
+ - Sync the install metadata files (`scanner-version.txt`, `cisco-version.txt`, and `pypi-attestations-version.txt`) with the action bundle so both action repositories always install the same reviewed scanner release.
243
+
244
+ ## Source of Truth
245
+
246
+ The source bundle for this action lives in the main scanner repository under `action/`. Release artifacts from that repository should export a root-ready action bundle for the dedicated action repositories.
247
+
248
+ Direct edits in published action repositories should stay limited to Marketplace-specific copy or metadata. Functional changes and release publication logic belong in `hashgraph-online/ai-plugin-scanner` so merges there can publish matching action releases automatically.
249
+
250
+ ## License
251
+
252
+ [Apache-2.0](https://github.com/hashgraph-online/hol-guard/blob/main/LICENSE)
253
+
254
+ ## Mode-based workflow
255
+
256
+ Set `mode` to one of `scan`, `lint`, `verify`, or `submit`.
257
+
258
+ ```yaml
259
+ - uses: hashgraph-online/ai-plugin-scanner-action@v1
260
+ with:
261
+ mode: verify
262
+ plugin_dir: "."
263
+ ```
264
+
265
+ For `submit` mode, point `plugin_dir` at one concrete plugin directory. Repository-mode discovery is supported for `scan`, `lint`, and `verify`, but `submit` intentionally remains single-plugin.
266
+
267
+ For `scan` mode, set `upload_sarif: true` to emit and upload SARIF automatically instead of wiring a separate upload step by hand.
268
+
269
+ ## Container Distribution
270
+
271
+ The scanner is also published as an OCI image for container-first environments:
272
+
273
+ ```bash
274
+ docker run --rm \
275
+ -v "$PWD:/workspace" \
276
+ ghcr.io/hashgraph-online/hol-guard:<version> \
277
+ scan /workspace --format text
278
+ ```
279
+
280
+ The image installs the scanner from the reviewed source tree at release build time. It is separate from the Marketplace action so teams that prefer `docker://` or explicit `docker run` flows can use a pinned image without changing the secure default action path.
@@ -0,0 +1,43 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ | Version | Supported |
6
+ |---------|-----------|
7
+ | 2.x | Yes |
8
+ | 1.x | No |
9
+
10
+ ## Reporting a Vulnerability
11
+
12
+ If you discover a security vulnerability in `ai-plugin-scanner`, please report it privately:
13
+
14
+ 1. Do not open a public issue for the vulnerability.
15
+ 2. Email `security@hol.org`.
16
+ 3. Include the affected package or surface (`hol-guard`, `plugin-scanner`, GitHub Action, container image, or release workflow).
17
+ 4. Include reproduction steps, impact, and any known mitigations.
18
+
19
+ We aim to:
20
+
21
+ - acknowledge vulnerability reports within 48 hours
22
+ - provide an initial triage response within 14 days
23
+ - resolve confirmed issues as quickly as practical based on severity and release risk
24
+
25
+ ## Scope
26
+
27
+ This policy covers:
28
+
29
+ - the Python packages published from this repository
30
+ - the reviewed container image
31
+ - the GitHub Action bundle sourced from this repository
32
+ - release and automation workflows maintained in this repository
33
+
34
+ ## Secure Use Guidance
35
+
36
+ For users of the project:
37
+
38
+ - keep the scanner and Guard packages updated to the latest supported release line
39
+ - review plugin code and MCP configuration before enabling it in a local harness
40
+ - avoid committing secrets, API keys, or local environment files into plugin repositories
41
+ - prefer HTTPS-only remote endpoints and pinned GitHub Actions in plugin repositories
42
+
43
+ The scanner and Guard help identify risky patterns, but they are not a substitute for manual review or a full secure development lifecycle.