plugin-scanner 2.0.579__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.
- plugin_scanner-2.0.581/.github/workflows/publish-action-repo.yml +195 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/PKG-INFO +2 -2
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/README.md +1 -1
- plugin_scanner-2.0.581/action/CONTRIBUTING.md +79 -0
- plugin_scanner-2.0.581/action/README.md +280 -0
- plugin_scanner-2.0.581/action/SECURITY.md +43 -0
- plugin_scanner-2.0.581/action/action.yml +315 -0
- plugin_scanner-2.0.581/action/cisco-version.txt +1 -0
- plugin_scanner-2.0.581/action/pypi-attestations-version.txt +1 -0
- plugin_scanner-2.0.581/action/scanner-sha256.txt +1 -0
- plugin_scanner-2.0.581/action/scanner-version.txt +1 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/pyproject.toml +1 -1
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/pyproject.toml.bak +1 -1
- plugin_scanner-2.0.581/scripts/emit_supply_chain_daemon_for_browser_proof.py +64 -0
- plugin_scanner-2.0.581/scripts/run_supply_chain_local_runtime_proof.py +231 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/version.py +1 -1
- plugin_scanner-2.0.581/tests/test_action_bundle.py +74 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.clusterfuzzlite/Dockerfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.clusterfuzzlite/build.sh +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.clusterfuzzlite/project.yaml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.clusterfuzzlite/requirements-atheris.txt +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.dockerignore +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.factory/droids/hol-guard-runner.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.factory/skills/hol-guard/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/CODEOWNERS +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/dependabot.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/pr-bodies/claude-permission-request-visible.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/ci.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/codeql.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/dependabot-uv-lock.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/fuzz.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/harness-smoke.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/publish.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/scorecard.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.github/workflows/security-gates.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.gitignore +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/.pre-commit-hooks.yaml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/CONTRIBUTING.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/Dockerfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/PRODUCT.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/e2e/fixture-states.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/e2e/proof-dir.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/e2e/scrg172-states.spec.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/e2e/static-server.mjs +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/index.html +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/playwright.config.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/pnpm-lock.yaml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/public/favicon.ico +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-analytics.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-content.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-content.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-design.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-external-links.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-external-links.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-section-shell.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-types.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/about-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-external-link.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-footer.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-hero.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/about-runtime-proof-strip.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/data-boundary-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/ecosystem-programs.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/open-standards-map.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/pathway-grid.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/section-shell.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/tracked-action-button.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/about/components/trust-contract-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/app-detail-phase11.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/app-detail-workspace.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/app-routing.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/app.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-layout.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-layout.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-mobile.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-primitives.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-review-cards.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-center-utils.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-gate-utils.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-gate.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-proof-modal.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-scopes.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/approval-scopes.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/apps/app-catalog.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/apps/app-detail-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/audit-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/clear-policy-payload.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/clear-policy-payload.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/compare-time-periods.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/data-flow-evidence-card.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/error-boundary.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/app-tab.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/breakdown-card.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/categories.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/category-tab.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/decision-badge.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-action-detail.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-action-list.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap-mini.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-activity-heatmap.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-analytics-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-clear-modal.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-copy.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-data-provenance-strip.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-detail.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export-drawer.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-export.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filter-bar.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filters.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-filters.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-format.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-format.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-hero.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insight-strip.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-headline-bento.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-headline-bento.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-home-preview.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-home-preview.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-layout.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-button.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-errors.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-modal.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-share-sheet.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-insights-surface.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-metrics.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-metrics.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-pagination.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-pagination.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-perf.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-period.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-share-bar.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-sort.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-sort.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-story.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-table.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-trend-chart.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-trend-chart.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-types.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-url-state.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-url-state.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/evidence-view-shell.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/explore-tab.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/guard-stat-metric.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/index.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/plain-english.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/scoped-evidence-table.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/scoped-evidence-table.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/sparkline.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/story-tab.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/evidence/use-receipt-analytics.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/feed-health-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace-phase11.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/fleet-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-api.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-api.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-demo.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-modal-layer.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-types.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-update-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/guard-update.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/help-modal.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/history-analytics.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/history-charts.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/history-export.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/home-dashboard.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/home-dashboard.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/home-protection-module.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/main.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/package-firewall-connect.test.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/package-workbench-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/phase09-review.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/policy-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/queue-chip-filter.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/queue-state.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/queue-state.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/receipts-workspace.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/receipts-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/review-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/risk-signal-cards.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/risk-signal-cards.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/runtime-overview.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/runtime-overview.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scanner-evidence-badge.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scrg159-170.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scrg171-172.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09-next-action.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09-package-firewall-status.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09c-evidence-rail.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09d-intercept-drawer.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09e-posture-banners.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09f-mobile-polish.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09g-cloud-capabilities.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase09h-hero-cards.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/scsr-phase10-package-workbench.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/security-fixes.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-ia.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-ia.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-row-primitives.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings/settings-section-shell.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace-phase11.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace.test.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/settings-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/styles.css +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-audit-findings-summary.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-audit-normalize.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-bundle-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-cloud-capabilities-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-cloud-capabilities.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-evidence-rail-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-evidence-rail.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-action-result.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-controls.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-manager-row.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-next-action.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-firewall-views.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-hub-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-intercept-proof-modal.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-manager-cards.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-manager-drawer.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-posture-banners.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-posture.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-protection-stats.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-hero-state.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-hero.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace-layout.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/supply-chain-workspace.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/totp-enrollment-qr-panel.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-debounce.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-focus-trap.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-keyboard-shortcut.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-reduced-motion.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-resolved-approval-gate.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/use-route-focus.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/vite-env.d.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/watched-app-card.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/src/workspace-page-header.tsx +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/tsconfig.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/dashboard/vite.config.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docker-requirements.txt +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/architecture.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/cursor-local-cloud-contract.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/enterprise-event-taxonomy.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/enterprise-export-examples.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/enterprise-packet.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/get-started.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/harness-support.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/incident-response.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/local-vs-cloud.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/release-checklist.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/remediation.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/guard/testing-matrix.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/trust/mcp-trust-draft.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/trust/plugin-trust-draft.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/docs/trust/skill-trust-local.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/fuzzers/manifest_fuzzer.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/pr-body.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/requirements.txt +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/schemas/plugin-quality.v1.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/schemas/scan-result.v1.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/schemas/verify-result.v1.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/scripts/codex-auto-resume-smoke.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/scripts/e2e-cursor-hook-smoke.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/action_runner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/argparse_utils.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/claude.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/gemini.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/manifest.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/opencode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/cli_ui.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/config.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/github_reporting.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/access_graph_events.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/claude_daemon_hook_bridge.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cloud_identity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/contracts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_hooks.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/cursor_native_approval.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/hook_python.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw_config.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/openclaw_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/adapters/opencode_pretool.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/advisory_model.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_detection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_symlink.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/aibom_trust_metadata.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approval_gate.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approval_gate_state.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/approvals.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/approval_gate_prompt.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/cursor_actions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/dashboard_sync.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/docs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/oauth_client.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/remote_pair_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/render.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_app_server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/codex_resume.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/config.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/contracts/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/contracts/supply_chain_decision_evidence_v1.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/dashboard_update.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/dashboard_update_runner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/about-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-catalog.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/app-detail-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/audit-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/feed-health-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/fleet-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/help-modal.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-dashboard.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/home-protection-module.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/policy-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/runtime-overview.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/settings-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-hub-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/supply-chain-workspace.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/chunks/use-resolved-approval-gate.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/desktop_notifications.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/harness_usage.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/incident.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/insights.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/insights_share.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/inventory_cisco.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/inventory_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/launcher.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/local_dashboard_session.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/local_supply_chain.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/models.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_action_rate_limit.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_entitlement.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_firewall_receipts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/package_shim_status.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/policy_bundle_parser.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/product_model.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/protect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/provenance.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/redaction.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/remote_pairing_constants.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/risk.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/action_identity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/actions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/advisory_escalation.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/advisory_matchers.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/cisco_evidence.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/cisco_preflight.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/composition_rules.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow_rules.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/data_flow_variables.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/decisions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/detectors.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/false_positive_rules.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/harness_attribution.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/js_semver.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/mcp_protection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/mcp_skill_firewall.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent_common.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_intent_parser.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/package_manifest_diff.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/persistence_rules.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/prompt_injection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/safe_decode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/sandbox.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/scanner_cache.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_sensitivity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/secret_sources.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/sed_scripts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/shell_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/signals.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/skill_protection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_base.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_models.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_bundle_runtime.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_package_eval.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/supply_chain_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/temp_files.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/runtime/threat_intel.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/guard_product_model_v1.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/shim_probe.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/shims.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/stable_digest.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_evidence.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_resume.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_supply_chain.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/store_threat_intel.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/totp.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/guard/types.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/lint_fixes.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/marketplace_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/models.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/path_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/policy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/quality_artifact.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/repo_detect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/reporting.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/registry.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/rules/specs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/scanner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/submission.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/suppressions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_helpers.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_models.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/trust_specs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/src/codex_plugin_scanner/verification.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/bundle_first_cloud.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/conftest.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/e2e_droid_exec.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/__init__.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/.mcp.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/bad-plugin/secrets.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/code-quality-bad/evil.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/code-quality-bad/inject.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/benign-echo.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/benign-health-check.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/expected-permissions.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-aws-credentials-read.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-canary-exfil-shell.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-env-read.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/cursor-hooks/malicious-mcp-secret-read.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-docs-fake-token.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-health-endpoint.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-nvmrc-fake-creds.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/benign-source-search.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/canary-exfil-encoded.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/canary-exfil.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/expected-decisions.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-dockerfile.txt +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-encoded-shell-exfil.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-github-action.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-delete.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-secret-read.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-mcp-skill-exfil.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-npm-postinstall.js +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-env-read.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-guard-bypass.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-prompt-npmrc-read.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/malicious-python-setup.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/guard-red-team/smoke-evidence-template.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/mcp-canary-server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/mit-license/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/LICENSE +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/README.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-npm-controls-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-npm-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-pnpm-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/benign-pyproject.toml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/critical-base-image-Dockerfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-Dockerfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-action.yml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-env-fs-network-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-obfuscated-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-npm-package.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/supply-chain/malicious-setup.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-safe/Cargo.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-safe/Cargo.toml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-vulnerable/Cargo.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/cargo-vulnerable/Cargo.toml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-safe/composer.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-safe/composer.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-vulnerable/composer.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/composer-vulnerable/composer.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/go-safe/go.mod +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/go-vulnerable/go.mod +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-safe/build.gradle +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-safe/gradle.lockfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-vulnerable/build.gradle +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/gradle-vulnerable/gradle.lockfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/maven-safe/pom.xml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/maven-vulnerable/pom.xml +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-safe/Gemfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-safe/Gemfile.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/tier2/rubygems-vulnerable/Gemfile.lock +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/fixtures/with-marketplace/marketplace.json +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/guard_python_phase12_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/guard_tier2_phase13_support.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/shim_execution_helpers.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test-trust-scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test-trust-specs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_action_runner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_best_practices.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cisco_install_surfaces.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_claude_daemon_hook_bridge.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_code_quality.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_config.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_coverage_remaining.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_completion_gates.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_headless_fixtures.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_hooks.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_cursor_local_actions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_dashboard_sync_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_dashboard_update.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_ecosystems.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_edge_cases.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_final_coverage.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_gemini_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_access_graph.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_action_identity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_advisory_escalation.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_detection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_serializer_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_symlink.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_symlink_negative_matrix.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_aibom_trust_metadata.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_continuity.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_copy_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_decisions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_gate.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_dedup.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approval_store_scale.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_approvals.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_auto_first_sync.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_bootstrap.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_bridge.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_bypass_detector.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_canary_fixtures.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_capabilities.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_cisco_evidence.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_cisco_runtime_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_claude_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_cloud_local_sync.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_app_server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_auto_resume_smoke.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_e2e.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_install.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_proxy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_resume_commands.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_codex_resume_endpoints.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_config_paths.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_connect_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_consumer_mode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_copilot_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_copilot_proxy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_manager.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_perf.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_registry.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_repair_perf.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_daemon_wake.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_data_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_decision_propagation.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_desktop_notifications.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_detector_fp.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_docs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_event_schema_v1.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_events.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_evidence_api_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_evidence_store.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_harness_contracts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_harness_setup.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_harness_smoke.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_hashnet_mcp_canaries.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_headless_daemon_api.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_insights.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_install_workspace.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_inventory_cisco.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_inventory_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_lab_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_lockfile_resolution_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_package_hook_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_package_intent_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_semver_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_js_supply_chain_phase11.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_launch_env.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_legacy_token_fixtures.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_local_supply_chain_audit_phase16.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_local_supply_chain_phase15.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_mcp_detectors.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_mcp_package_proxy_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_mcp_protection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_mcp_skill_firewall.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_oauth_client.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_oauth_device_connect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_oauth_reconnect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_opencode_proxy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_hook.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_hook_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_intent.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_resume_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_shims.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_package_shims_cli.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase03_local_install.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase03_remainder.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase04_failure_modes.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase04_harness_contracts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase04_harness_ux.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase04_install_reason_proofs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase05_approval_memory.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase05_manager_coverage.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase06_workspace_audit.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase07_entitlement_daemon_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase07_harness_coverage_matrix.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase11_package_firewall_receipts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_phase11_package_firewall_status.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_policy_dedup.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_product_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_product_model_contracts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_prompt_injection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_protect.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_protect_package_spec_parsing.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_provenance.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_python_lab_phase12.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_python_package_hook_phase12.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_python_package_intent_phase12.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_python_supply_chain_heuristics_phase12.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_python_supply_chain_phase12.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_queue_api_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_queue_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_receipt_p5_fields.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_receipt_persistence.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_red_team.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_red_team_e2e.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_redaction.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_registry_broker_skills_canaries.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_remote_pair_flow.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_render.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_resolution_copy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_risk.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_action_harnesses.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_actions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_actions_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_decisions.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_detectors.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_runtime_signals.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_safe_decode.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_sandbox.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_settings_api.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_settings_presets.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_shim_intercept_proofs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_shim_truth.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_skill_protection.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_skill_protection_phase14.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_source_view_secret_fixtures.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_stable_digest.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_store_migrations.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_bundle.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_daemon.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_decision_contract.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_disclosure_reasons.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_evaluator.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_supply_chain_sync.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_surface_server.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_threat_intel.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_tier2_labs_phase13.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_tier2_package_intent_phase13.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_tier2_supply_chain_phase13.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_verdicts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_web_recovery.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_guard_wrapper_flows.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_harness_attribution.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_hermes_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_insights_share.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_integration.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_lint_fixes.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_live_cisco_smoke.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_manifest.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_marketplace.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_mcp_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_openclaw_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_opencode_adapter.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_opencode_hook_python.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_opencode_pretool.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_operational_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_policy.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_policy_bundle_parser.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_quality_artifact.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_rule_registry.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_scanner.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_schema_contracts.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_security_ops.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_shim_probe_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_skill_security.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_submission.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_trust_scoring.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_trust_specs.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_verification.py +0 -0
- {plugin_scanner-2.0.579 → plugin_scanner-2.0.581}/tests/test_versioning.py +0 -0
- {plugin_scanner-2.0.579 → 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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
[](https://github.com/hashgraph-online/ai-plugin-scanner-action/releases/latest)
|
|
4
|
+
[](https://github.com/hashgraph-online/ai-plugin-scanner-action)
|
|
5
|
+
[](https://github.com/hashgraph-online/hol-codex-plugin-scanner-action)
|
|
6
|
+
[](https://github.com/hashgraph-online/hol-guard/tree/main/action)
|
|
7
|
+
[](https://github.com/hashgraph-online/hol-guard/blob/main/LICENSE)
|
|
8
|
+
|
|
9
|
+
|  | 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.
|