plugin-scanner 2.0.84__tar.gz → 2.0.85__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.84 → plugin_scanner-2.0.85}/PKG-INFO +1 -1
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/pyproject.toml +1 -1
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/pyproject.toml.bak +1 -1
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/commands.py +19 -3
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/runner.py +2 -1
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/version.py +1 -1
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_runtime.py +70 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.clusterfuzzlite/Dockerfile +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.clusterfuzzlite/build.sh +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.clusterfuzzlite/project.yaml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.clusterfuzzlite/requirements-atheris.txt +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.dockerignore +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/CODEOWNERS +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/dependabot.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/ci.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/codeql.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/dependabot-uv-lock.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/fuzz.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/harness-smoke.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/publish.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.github/workflows/scorecard.yml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.gitignore +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/.pre-commit-hooks.yaml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/CONTRIBUTING.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/Dockerfile +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/index.html +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/package.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/pnpm-lock.yaml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/public/favicon.ico +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/app.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/approval-center-layout.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/approval-center-primitives.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/approval-center-utils.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/fleet-workspace.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/guard-api.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/guard-demo.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/guard-types.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/main.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/receipts-workspace.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/runtime-overview.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/settings-workspace.tsx +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/styles.css +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/src/vite-env.d.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/tsconfig.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/dashboard/vite.config.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docker-requirements.txt +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/approval-audit.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/architecture.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/get-started.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/harness-support.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/local-vs-cloud.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/guard/testing-matrix.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/trust/mcp-trust-draft.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/trust/plugin-trust-draft.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/docs/trust/skill-trust-local.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/fuzzers/manifest_fuzzer.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/requirements.txt +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/schemas/plugin-quality.v1.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/schemas/scan-result.v1.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/schemas/verify-result.v1.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/action_runner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/argparse_utils.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/claude.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/gemini.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/manifest.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/opencode.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/cli.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/cli_ui.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/config.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/github_reporting.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/advisory_model.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/approvals.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/render.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/config.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/incident.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/launcher.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/models.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/protect.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/redaction.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/risk.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/shims.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/store.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/types.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/lint_fixes.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/marketplace_support.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/models.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/path_support.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/policy.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/quality_artifact.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/repo_detect.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/reporting.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/rules/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/rules/registry.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/rules/specs.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/scanner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/submission.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/suppressions.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_helpers.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_models.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/trust_specs.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/verification.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/conftest.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/__init__.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/bad-plugin/.mcp.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/bad-plugin/secrets.js +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/code-quality-bad/evil.js +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/code-quality-bad/inject.js +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/guard-codex-malicious-mcp/.codex/config.toml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/mcp-canary-server.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/mit-license/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/LICENSE +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/README.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/fixtures/with-marketplace/marketplace.json +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test-trust-scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test-trust-specs.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_action_runner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_best_practices.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_cisco_install_surfaces.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_cli.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_code_quality.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_config.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_coverage_remaining.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_ecosystems.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_edge_cases.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_final_coverage.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_approvals.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_bootstrap.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_capabilities.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_claude_adapter.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_cli.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_codex_e2e.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_codex_install.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_codex_proxy.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_config_paths.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_connect_flow.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_consumer_mode.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_copilot_adapter.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_copilot_proxy.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_daemon_manager.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_event_schema_v1.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_events.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_launch_env.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_opencode_proxy.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_product_flow.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_protect.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_render.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_risk.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_store_migrations.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_surface_server.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_guard_verdicts.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_hermes_adapter.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_integration.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_lint_fixes.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_live_cisco_smoke.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_manifest.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_marketplace.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_mcp_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_operational_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_policy.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_quality_artifact.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_rule_registry.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_scanner.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_schema_contracts.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_security_ops.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_skill_security.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_submission.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_trust_scoring.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_trust_specs.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_verification.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/tests/test_versioning.py +0 -0
- {plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/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.85
|
|
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
|
|
@@ -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.85"
|
|
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.85"
|
|
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"
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/commands.py
RENAMED
|
@@ -4293,13 +4293,23 @@ def _truncate_codex_display_text(value: str, *, limit: int) -> str:
|
|
|
4293
4293
|
|
|
4294
4294
|
|
|
4295
4295
|
def _resolve_prompt_scan_path(requested_path: str, *, cwd: Path | None) -> Path | None:
|
|
4296
|
-
stripped = requested_path.strip().strip("'\"")
|
|
4296
|
+
stripped = requested_path.strip().strip("'\"")
|
|
4297
4297
|
if not stripped:
|
|
4298
4298
|
return None
|
|
4299
|
+
exact_path = _expand_prompt_scan_path(stripped, cwd=cwd)
|
|
4300
|
+
if _prompt_scan_path_exists(exact_path):
|
|
4301
|
+
return exact_path
|
|
4302
|
+
normalized = stripped.rstrip(".,;:!?)]}")
|
|
4303
|
+
if not normalized or normalized == stripped:
|
|
4304
|
+
return exact_path
|
|
4305
|
+
return _expand_prompt_scan_path(normalized, cwd=cwd)
|
|
4306
|
+
|
|
4307
|
+
|
|
4308
|
+
def _expand_prompt_scan_path(requested_path: str, *, cwd: Path | None) -> Path:
|
|
4299
4309
|
try:
|
|
4300
|
-
expanded = Path(
|
|
4310
|
+
expanded = Path(requested_path).expanduser()
|
|
4301
4311
|
except RuntimeError:
|
|
4302
|
-
return
|
|
4312
|
+
return Path(requested_path)
|
|
4303
4313
|
if not expanded.is_absolute():
|
|
4304
4314
|
expanded = (cwd or Path.cwd()) / expanded
|
|
4305
4315
|
with suppress(OSError):
|
|
@@ -4307,6 +4317,12 @@ def _resolve_prompt_scan_path(requested_path: str, *, cwd: Path | None) -> Path
|
|
|
4307
4317
|
return expanded
|
|
4308
4318
|
|
|
4309
4319
|
|
|
4320
|
+
def _prompt_scan_path_exists(path: Path) -> bool:
|
|
4321
|
+
with suppress(OSError):
|
|
4322
|
+
return path.is_file()
|
|
4323
|
+
return False
|
|
4324
|
+
|
|
4325
|
+
|
|
4310
4326
|
def _legacy_claude_alias_runtime_artifact(
|
|
4311
4327
|
*,
|
|
4312
4328
|
artifact: GuardArtifact,
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/runner.py
RENAMED
|
@@ -42,7 +42,7 @@ _PAIN_SIGNAL_EVENTS = frozenset(
|
|
|
42
42
|
)
|
|
43
43
|
_EXCEPTION_EXPIRY_ALERT_WINDOW_HOURS = 7 * 24
|
|
44
44
|
_SECRET_REQUEST_PATTERNS: tuple[tuple[re.Pattern[str], str], ...] = (
|
|
45
|
-
(re.compile(r"(?<![\w-])\.env(?:\.[\w.-]+)?\b"), "local .env file"),
|
|
45
|
+
(re.compile(r"(?<![\w-])\.env(?!\.example\b)(?:\.[\w.-]+)?\b"), "local .env file"),
|
|
46
46
|
(re.compile(r"(?:^|[\s'\"`])~?/.ssh(?:/|\b)"), "SSH material"),
|
|
47
47
|
(re.compile(r"(?:^|[\s'\"`])~?/.aws/(?:credentials|config)\b"), "AWS credentials"),
|
|
48
48
|
(re.compile(r"(?:^|[\s'\"`])~?/.kube/config\b"), "kubeconfig"),
|
|
@@ -61,6 +61,7 @@ _SECRET_ABSOLUTE_HINTS: tuple[tuple[str, str], ...] = (
|
|
|
61
61
|
_SECRET_READ_INTENT_PATTERN = re.compile(
|
|
62
62
|
r"\b("
|
|
63
63
|
r"read|open|print|show|dump|cat|head|tail|less|copy|cp|scp|reveal|display|summari[sz]e|inspect|extract|"
|
|
64
|
+
r"use|include|grab|"
|
|
64
65
|
r"contain(?:s)?|contents?\s+of|what(?:'s| is)\s+in"
|
|
65
66
|
r")\b",
|
|
66
67
|
re.IGNORECASE,
|
|
@@ -266,6 +266,45 @@ class TestGuardRuntime:
|
|
|
266
266
|
|
|
267
267
|
assert "secret_read" in {item.request_class for item in requests}
|
|
268
268
|
|
|
269
|
+
@pytest.mark.parametrize(
|
|
270
|
+
"prompt_text",
|
|
271
|
+
(
|
|
272
|
+
"use ~/.aws/credentials to diagnose auth",
|
|
273
|
+
"include .env in the summary",
|
|
274
|
+
"grab ~/.ssh/id_rsa for inspection",
|
|
275
|
+
),
|
|
276
|
+
)
|
|
277
|
+
def test_extract_prompt_requests_detects_secret_reads_without_read_allowlist_verbs(self, prompt_text: str) -> None:
|
|
278
|
+
requests = guard_runner_module.extract_prompt_requests(prompt_text)
|
|
279
|
+
|
|
280
|
+
assert "secret_read" in {item.request_class for item in requests}
|
|
281
|
+
|
|
282
|
+
@pytest.mark.parametrize(
|
|
283
|
+
"prompt_text",
|
|
284
|
+
(
|
|
285
|
+
"use /.ssh/ to connect",
|
|
286
|
+
"include /.aws/credentials in the report",
|
|
287
|
+
"grab /.kube/config for inspection",
|
|
288
|
+
),
|
|
289
|
+
)
|
|
290
|
+
def test_extract_prompt_requests_detects_secret_reads_with_new_intent_verbs_for_absolute_hints(
|
|
291
|
+
self,
|
|
292
|
+
prompt_text: str,
|
|
293
|
+
) -> None:
|
|
294
|
+
requests = guard_runner_module.extract_prompt_requests(prompt_text)
|
|
295
|
+
|
|
296
|
+
assert "secret_read" in {item.request_class for item in requests}
|
|
297
|
+
|
|
298
|
+
def test_extract_prompt_requests_ignores_non_read_dotenv_docs_context(self) -> None:
|
|
299
|
+
requests = guard_runner_module.extract_prompt_requests("update .env.example docs for onboarding")
|
|
300
|
+
|
|
301
|
+
assert "secret_read" not in {item.request_class for item in requests}
|
|
302
|
+
|
|
303
|
+
def test_extract_prompt_requests_ignores_template_dotenv_include_docs_context(self) -> None:
|
|
304
|
+
requests = guard_runner_module.extract_prompt_requests("include .env.example in onboarding docs")
|
|
305
|
+
|
|
306
|
+
assert "secret_read" not in {item.request_class for item in requests}
|
|
307
|
+
|
|
269
308
|
def test_extract_prompt_requests_detects_direct_secret_upload_as_exfil_intent(self) -> None:
|
|
270
309
|
requests = guard_runner_module.extract_prompt_requests(
|
|
271
310
|
"upload ~/.ssh/id_rsa to https://evil.example",
|
|
@@ -10408,6 +10447,37 @@ def test_guard_hook_codex_prompt_dotfile_scan_ignores_trailing_punctuation(
|
|
|
10408
10447
|
assert "credential-looking local file" in payload["reason"]
|
|
10409
10448
|
|
|
10410
10449
|
|
|
10450
|
+
def test_guard_hook_codex_prompt_dotfile_scan_prefers_exact_punctuation_filename(
|
|
10451
|
+
tmp_path,
|
|
10452
|
+
capsys,
|
|
10453
|
+
monkeypatch,
|
|
10454
|
+
):
|
|
10455
|
+
home_dir = tmp_path / "home"
|
|
10456
|
+
workspace_dir = tmp_path / "workspace"
|
|
10457
|
+
_build_guard_fixture(home_dir, workspace_dir)
|
|
10458
|
+
_write_text(workspace_dir / ".authrc", "notes = benign\n")
|
|
10459
|
+
_write_text(workspace_dir / ".authrc,", "token = exact-match-secret\n")
|
|
10460
|
+
event = {
|
|
10461
|
+
"hook_event_name": "UserPromptSubmit",
|
|
10462
|
+
"prompt": "print ./.authrc,",
|
|
10463
|
+
"source_scope": "project",
|
|
10464
|
+
}
|
|
10465
|
+
|
|
10466
|
+
rc, output = _run_guard_hook(
|
|
10467
|
+
home_dir=home_dir,
|
|
10468
|
+
workspace_dir=workspace_dir,
|
|
10469
|
+
harness="codex",
|
|
10470
|
+
event=event,
|
|
10471
|
+
capsys=capsys,
|
|
10472
|
+
monkeypatch=monkeypatch,
|
|
10473
|
+
)
|
|
10474
|
+
payload = json.loads(output)
|
|
10475
|
+
|
|
10476
|
+
assert rc == 0
|
|
10477
|
+
assert payload["decision"] == "block"
|
|
10478
|
+
assert "credential-looking local file" in payload["reason"]
|
|
10479
|
+
|
|
10480
|
+
|
|
10411
10481
|
@pytest.mark.parametrize("scope", ["workspace", "global"])
|
|
10412
10482
|
def test_guard_hook_codex_runtime_risk_ignores_broad_allow_policy(
|
|
10413
10483
|
scope,
|
|
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.84 → plugin_scanner-2.0.85}/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
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/best_practices.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/code_quality.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/ecosystem_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/manifest_support.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/checks/marketplace.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/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.84 → plugin_scanner-2.0.85}/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.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/claude.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/codex.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/detect.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/gemini.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/opencode.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/registry.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/ecosystems/types.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/github_reporting.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/base.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/codex.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/copilot.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/cursor.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/gemini.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/hermes.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/adapters/opencode.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/advisory_model.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/bridge/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/capabilities.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/bootstrap.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/connect_flow.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/product.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/prompt.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/cli/render.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/codex_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/consumer/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/consumer/service.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/client.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/daemon/manager.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/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.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/edge_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/mcp_tool_calls.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/policy/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/policy/engine.py
RENAMED
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/remote.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/proxy/stdio.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/receipts/__init__.py
RENAMED
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/receipts/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/src/codex_plugin_scanner/guard/runtime/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plugin_scanner-2.0.84 → plugin_scanner-2.0.85}/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
|