plugin-scanner 2.0.75__tar.gz → 2.0.76__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.75 → plugin_scanner-2.0.76}/PKG-INFO +1 -1
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/receipts-workspace.tsx +40 -28
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/pyproject.toml +1 -1
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/pyproject.toml.bak +1 -1
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/version.py +1 -1
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.clusterfuzzlite/Dockerfile +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.clusterfuzzlite/build.sh +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.clusterfuzzlite/project.yaml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.clusterfuzzlite/requirements-atheris.txt +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.dockerignore +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/CODEOWNERS +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/dependabot.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/ci.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/codeql.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/dependabot-uv-lock.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/fuzz.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/harness-smoke.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/publish.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.github/workflows/scorecard.yml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.gitignore +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/.pre-commit-hooks.yaml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/CONTRIBUTING.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/Dockerfile +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/index.html +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/package.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/pnpm-lock.yaml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/public/favicon.ico +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/app.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/approval-center-layout.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/approval-center-primitives.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/approval-center-utils.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/fleet-workspace.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/guard-api.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/guard-demo.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/guard-types.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/main.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/runtime-overview.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/settings-workspace.tsx +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/styles.css +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/vite-env.d.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/tsconfig.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/vite.config.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docker-requirements.txt +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/approval-audit.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/architecture.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/get-started.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/harness-support.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/local-vs-cloud.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/guard/testing-matrix.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/trust/mcp-trust-draft.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/trust/plugin-trust-draft.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/docs/trust/skill-trust-local.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/fuzzers/manifest_fuzzer.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/requirements.txt +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/schemas/plugin-quality.v1.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/schemas/scan-result.v1.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/schemas/verify-result.v1.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/action_runner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/argparse_utils.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/claude.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/gemini.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/manifest.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/opencode.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/cli.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/cli_ui.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/config.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/github_reporting.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/approvals.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/commands.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/render.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/config.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/incident.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/launcher.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/models.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/protect.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/risk.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/shims.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/store.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/types.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/lint_fixes.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/marketplace_support.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/models.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/path_support.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/policy.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/quality_artifact.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/repo_detect.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/reporting.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/rules/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/rules/registry.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/rules/specs.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/scanner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/submission.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/suppressions.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_helpers.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_models.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/trust_specs.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/verification.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/conftest.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/__init__.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/bad-plugin/.mcp.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/bad-plugin/secrets.js +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/code-quality-bad/evil.js +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/code-quality-bad/inject.js +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/guard-codex-malicious-mcp/.codex/config.toml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/mcp-canary-server.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/mit-license/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/LICENSE +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/README.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/fixtures/with-marketplace/marketplace.json +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test-trust-scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test-trust-specs.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_action_runner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_best_practices.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_cisco_install_surfaces.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_cli.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_code_quality.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_config.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_coverage_remaining.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_ecosystems.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_edge_cases.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_final_coverage.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_approvals.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_bootstrap.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_capabilities.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_claude_adapter.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_cli.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_codex_e2e.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_codex_install.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_codex_proxy.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_config_paths.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_connect_flow.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_consumer_mode.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_copilot_adapter.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_copilot_proxy.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_daemon_manager.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_event_schema_v1.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_events.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_launch_env.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_opencode_proxy.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_product_flow.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_protect.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_render.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_risk.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_runtime.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_store_migrations.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_surface_server.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_guard_verdicts.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_hermes_adapter.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_integration.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_lint_fixes.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_live_cisco_smoke.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_manifest.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_marketplace.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_mcp_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_operational_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_policy.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_quality_artifact.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_rule_registry.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_scanner.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_schema_contracts.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_security_ops.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_skill_security.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_submission.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_trust_scoring.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_trust_specs.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_verification.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/tests/test_versioning.py +0 -0
- {plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plugin-scanner
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.76
|
|
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/ai-plugin-scanner
|
|
6
6
|
Project-URL: Repository, https://github.com/hashgraph-online/ai-plugin-scanner
|
|
@@ -19,6 +19,7 @@ type ReceiptsState =
|
|
|
19
19
|
| { kind: "ready"; items: GuardReceipt[] };
|
|
20
20
|
|
|
21
21
|
const receiptPageSize = 8;
|
|
22
|
+
const EMPTY_RECEIPTS: GuardReceipt[] = [];
|
|
22
23
|
|
|
23
24
|
export function ReceiptsWorkspace(props: { receipts: ReceiptsState }) {
|
|
24
25
|
const [searchTerm, setSearchTerm] = useState("");
|
|
@@ -47,32 +48,18 @@ export function ReceiptsWorkspace(props: { receipts: ReceiptsState }) {
|
|
|
47
48
|
setPage(1);
|
|
48
49
|
}, [decisionFilter, harnessFilter, searchTerm, receiptCount]);
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
</Surface>
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
if (props.receipts.items.length === 0) {
|
|
66
|
-
return (
|
|
67
|
-
<EmptyState
|
|
68
|
-
title="No history yet"
|
|
69
|
-
body="Saved choices appear here after HOL Guard reviews or blocks an action."
|
|
70
|
-
/>
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
const receiptItems = props.receipts.items;
|
|
74
|
-
const harnesses = Array.from(new Set(receiptItems.map((receipt) => receipt.harness))).sort();
|
|
75
|
-
const decisions = Array.from(new Set(receiptItems.map((receipt) => receipt.policy_decision))).sort();
|
|
51
|
+
const receiptItems = props.receipts.kind === "ready" ? props.receipts.items : EMPTY_RECEIPTS;
|
|
52
|
+
|
|
53
|
+
const harnesses = useMemo(
|
|
54
|
+
() => Array.from(new Set(receiptItems.map((receipt) => receipt.harness))).sort(),
|
|
55
|
+
[receiptItems],
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const decisions = useMemo(
|
|
59
|
+
() => Array.from(new Set(receiptItems.map((receipt) => receipt.policy_decision))).sort(),
|
|
60
|
+
[receiptItems],
|
|
61
|
+
);
|
|
62
|
+
|
|
76
63
|
const filteredReceipts = useMemo(() => {
|
|
77
64
|
const normalizedSearchTerm = searchTerm.trim().toLowerCase();
|
|
78
65
|
return receiptItems.filter((receipt) => {
|
|
@@ -97,14 +84,39 @@ export function ReceiptsWorkspace(props: { receipts: ReceiptsState }) {
|
|
|
97
84
|
return searchable.includes(normalizedSearchTerm);
|
|
98
85
|
});
|
|
99
86
|
}, [decisionFilter, harnessFilter, receiptItems, searchTerm]);
|
|
87
|
+
|
|
100
88
|
const totalPages = Math.max(1, Math.ceil(filteredReceipts.length / receiptPageSize));
|
|
101
89
|
const currentPage = Math.min(page, totalPages);
|
|
102
90
|
const pageStart = (currentPage - 1) * receiptPageSize;
|
|
103
91
|
const visibleReceipts = filteredReceipts.slice(pageStart, pageStart + receiptPageSize);
|
|
104
92
|
|
|
105
|
-
const handleNextPage = () => {
|
|
93
|
+
const handleNextPage = useCallback(() => {
|
|
106
94
|
setPage((value) => Math.min(totalPages, value + 1));
|
|
107
|
-
};
|
|
95
|
+
}, [totalPages]);
|
|
96
|
+
|
|
97
|
+
if (props.receipts.kind === "loading") {
|
|
98
|
+
return (
|
|
99
|
+
<div className="space-y-4">
|
|
100
|
+
<div className="guard-skeleton h-8 w-64" />
|
|
101
|
+
<div className="guard-skeleton h-32 w-full" />
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
if (props.receipts.kind === "error") {
|
|
106
|
+
return (
|
|
107
|
+
<Surface tone="danger">
|
|
108
|
+
<p className="text-sm text-brand-purple">{props.receipts.message}</p>
|
|
109
|
+
</Surface>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
if (receiptItems.length === 0) {
|
|
113
|
+
return (
|
|
114
|
+
<EmptyState
|
|
115
|
+
title="No history yet"
|
|
116
|
+
body="Saved choices appear here after HOL Guard reviews or blocks an action."
|
|
117
|
+
/>
|
|
118
|
+
);
|
|
119
|
+
}
|
|
108
120
|
|
|
109
121
|
return (
|
|
110
122
|
<div className="space-y-6">
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plugin-scanner"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.76"
|
|
8
8
|
description = "Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hol-guard"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.76"
|
|
8
8
|
description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/dashboard/src/approval-center-primitives.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/best_practices.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/code_quality.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/ecosystem_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/manifest_support.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/marketplace.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/mcp_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/checks/skill_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/claude.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/codex.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/detect.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/gemini.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/opencode.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/registry.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/ecosystems/types.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/github_reporting.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/base.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/codex.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/copilot.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/cursor.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/gemini.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/hermes.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/adapters/opencode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/bridge/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/capabilities.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/bootstrap.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/commands.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/connect_flow.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/product.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/prompt.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/cli/render.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/codex_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/consumer/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/consumer/service.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/client.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/manager.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/daemon/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/edge_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/mcp_tool_calls.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/policy/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/policy/engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/remote.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/proxy/stdio.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/receipts/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/receipts/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/runtime/runner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/store_approvals.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/guard/store_connect.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/integrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/marketplace_support.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.75 → plugin_scanner-2.0.76}/src/codex_plugin_scanner/quality_artifact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|