plugin-scanner 2.0.87__tar.gz → 2.0.88__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.87 → plugin_scanner-2.0.88}/PKG-INFO +1 -1
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/pyproject.toml +1 -1
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/pyproject.toml.bak +1 -1
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/commands.py +91 -3
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/version.py +1 -1
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_runtime.py +455 -1
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.clusterfuzzlite/Dockerfile +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.clusterfuzzlite/build.sh +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.clusterfuzzlite/project.yaml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.clusterfuzzlite/requirements-atheris.txt +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.dockerignore +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/CODEOWNERS +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/dependabot.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/ci.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/codeql.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/dependabot-uv-lock.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/fuzz.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/harness-smoke.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/publish.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.github/workflows/scorecard.yml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.gitignore +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/.pre-commit-hooks.yaml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/CONTRIBUTING.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/Dockerfile +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/index.html +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/package.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/pnpm-lock.yaml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/public/favicon.ico +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/app.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/approval-center-layout.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/approval-center-primitives.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/approval-center-utils.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/fleet-workspace.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/guard-api.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/guard-demo.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/guard-types.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/main.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/receipts-workspace.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/runtime-overview.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/settings-workspace.tsx +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/styles.css +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/src/vite-env.d.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/tsconfig.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/dashboard/vite.config.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docker-requirements.txt +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/approval-audit.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/architecture.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/get-started.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/harness-support.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/local-vs-cloud.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/guard/testing-matrix.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/trust/mcp-trust-draft.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/trust/plugin-trust-draft.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/docs/trust/skill-trust-local.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/fuzzers/manifest_fuzzer.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/requirements.txt +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/schemas/plugin-quality.v1.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/schemas/scan-result.v1.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/schemas/verify-result.v1.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/action_runner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/argparse_utils.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/claude.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/gemini.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/manifest.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/mcp_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/opencode.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/cli.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/cli_ui.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/config.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/github_reporting.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/antigravity.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/copilot.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/hermes.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/mcp_servers.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/adapters/opencode_artifacts.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/advisory_model.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/approvals.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/bridge/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/capabilities.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/approval_commands.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/bootstrap.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/connect_flow.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/install_commands.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/product.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/prompt.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/render.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/update_commands.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/codex_config.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/config.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/client.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/manager.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/apple-touch-icon.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Icon_Dark.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/favicon-16x16.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/favicon-32x32.png +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/favicon.ico +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/daemon/static/index.html +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/edge_events.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/incident.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/launcher.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/mcp_tool_calls.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/models.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/protect.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/proxy/runtime_mcp.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/redaction.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/risk.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/runtime/secret_file_requests.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/runtime/surface_server.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/schemas/guard_event_v1.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/schemas/surface_server.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/shims.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/store.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/store_approvals.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/store_connect.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/types.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/integrations/cisco_mcp_scanner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/lint_fixes.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/marketplace_support.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/models.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/path_support.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/policy.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/quality_artifact.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/repo_detect.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/reporting.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/rules/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/rules/registry.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/rules/specs.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/scanner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/submission.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/suppressions.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_helpers.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_models.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/trust_specs.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/verification.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/conftest.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/__init__.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/bad-plugin/.mcp.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/bad-plugin/secrets.js +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/code-quality-bad/evil.js +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/code-quality-bad/inject.js +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/guard-codex-malicious-mcp/.codex/config.toml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/config.yaml +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/mcp_servers.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/skills/security/malicious/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/references/api-setup.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/skills/stealth/sneaky/scripts/deploy.sh +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/hermes-plugin-evil/skills/utils/benign/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/malicious-skill-plugin/skills/leaky-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/mcp-canary-server.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/mit-license/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/LICENSE +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/README.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/fixtures/with-marketplace/marketplace.json +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test-trust-scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test-trust-specs.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_action_runner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_best_practices.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_cisco_install_surfaces.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_cli.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_code_quality.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_config.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_coverage_remaining.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_ecosystems.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_edge_cases.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_final_coverage.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_approvals.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_bootstrap.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_capabilities.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_claude_adapter.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_cli.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_codex_e2e.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_codex_install.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_codex_proxy.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_config_paths.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_connect_flow.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_consumer_mode.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_copilot_adapter.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_copilot_proxy.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_daemon_manager.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_event_schema_v1.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_events.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_launch_env.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_opencode_proxy.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_product_flow.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_protect.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_render.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_risk.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_store_migrations.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_surface_server.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_guard_verdicts.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_hermes_adapter.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_integration.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_lint_fixes.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_live_cisco_smoke.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_manifest.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_marketplace.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_mcp_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_operational_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_policy.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_quality_artifact.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_rule_registry.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_scanner.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_schema_contracts.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_security_ops.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_skill_security.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_submission.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_trust_scoring.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_trust_specs.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_verification.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/tests/test_versioning.py +0 -0
- {plugin_scanner-2.0.87 → plugin_scanner-2.0.88}/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.88
|
|
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.88"
|
|
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.88"
|
|
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.87 → plugin_scanner-2.0.88}/src/codex_plugin_scanner/guard/cli/commands.py
RENAMED
|
@@ -1601,8 +1601,9 @@ def run_guard_command(
|
|
|
1601
1601
|
}
|
|
1602
1602
|
]
|
|
1603
1603
|
}
|
|
1604
|
+
browser_approval_daemon_client = None
|
|
1604
1605
|
try:
|
|
1605
|
-
|
|
1606
|
+
browser_approval_daemon_client = load_guard_surface_daemon_client(guard_home)
|
|
1606
1607
|
except RuntimeError:
|
|
1607
1608
|
queued = queue_blocked_approvals(
|
|
1608
1609
|
detection=runtime_detection,
|
|
@@ -1612,7 +1613,7 @@ def run_guard_command(
|
|
|
1612
1613
|
now=_now(),
|
|
1613
1614
|
)
|
|
1614
1615
|
else:
|
|
1615
|
-
session =
|
|
1616
|
+
session = browser_approval_daemon_client.start_session(
|
|
1616
1617
|
harness=args.harness,
|
|
1617
1618
|
surface="harness-adapter",
|
|
1618
1619
|
workspace=str(workspace) if workspace else None,
|
|
@@ -1622,7 +1623,7 @@ def run_guard_command(
|
|
|
1622
1623
|
capabilities=["approval-resolution", "receipt-view"],
|
|
1623
1624
|
)
|
|
1624
1625
|
response_payload["session_id"] = str(session["session_id"])
|
|
1625
|
-
blocked_operation =
|
|
1626
|
+
blocked_operation = browser_approval_daemon_client.queue_blocked_operation(
|
|
1626
1627
|
session_id=str(session["session_id"]),
|
|
1627
1628
|
operation_type="tool_call",
|
|
1628
1629
|
harness=args.harness,
|
|
@@ -1674,6 +1675,27 @@ def run_guard_command(
|
|
|
1674
1675
|
output_stream=output_stream,
|
|
1675
1676
|
)
|
|
1676
1677
|
return 0
|
|
1678
|
+
codex_browser_decision = _codex_browser_approval_decision(
|
|
1679
|
+
args=args,
|
|
1680
|
+
event_name=event_name,
|
|
1681
|
+
policy_action=policy_action,
|
|
1682
|
+
response_payload=response_payload,
|
|
1683
|
+
store=store,
|
|
1684
|
+
config=config,
|
|
1685
|
+
daemon_client=locals().get("browser_approval_daemon_client"),
|
|
1686
|
+
)
|
|
1687
|
+
if codex_browser_decision == "allow":
|
|
1688
|
+
if event_name != "PreToolUse":
|
|
1689
|
+
_emit_native_hook_response(
|
|
1690
|
+
harness=args.harness,
|
|
1691
|
+
policy_action="allow",
|
|
1692
|
+
event_name=event_name,
|
|
1693
|
+
reason="",
|
|
1694
|
+
output_stream=output_stream,
|
|
1695
|
+
)
|
|
1696
|
+
return 0
|
|
1697
|
+
if codex_browser_decision == "block":
|
|
1698
|
+
policy_action = "block"
|
|
1677
1699
|
if _should_emit_native_hook_exit_block(args, event_name=event_name, policy_action=policy_action):
|
|
1678
1700
|
_emit_native_hook_block_stderr(
|
|
1679
1701
|
_native_hook_reason_for_harness(
|
|
@@ -1920,6 +1942,72 @@ def _should_emit_native_hook_exit_block(args: argparse.Namespace, *, event_name:
|
|
|
1920
1942
|
)
|
|
1921
1943
|
|
|
1922
1944
|
|
|
1945
|
+
def _codex_browser_approval_decision(
|
|
1946
|
+
*,
|
|
1947
|
+
args: argparse.Namespace,
|
|
1948
|
+
event_name: str,
|
|
1949
|
+
policy_action: str,
|
|
1950
|
+
response_payload: dict[str, object],
|
|
1951
|
+
store: GuardStore,
|
|
1952
|
+
config: GuardConfig,
|
|
1953
|
+
daemon_client: object | None = None,
|
|
1954
|
+
) -> str | None:
|
|
1955
|
+
if _canonical_harness_name(args.harness) != "codex":
|
|
1956
|
+
return None
|
|
1957
|
+
if getattr(args, "json", False):
|
|
1958
|
+
return None
|
|
1959
|
+
if event_name not in {"PreToolUse", "PostToolUse", "UserPromptSubmit"}:
|
|
1960
|
+
return None
|
|
1961
|
+
if policy_action not in {"block", "sandbox-required", "require-reapproval"}:
|
|
1962
|
+
return None
|
|
1963
|
+
approval_requests = response_payload.get("approval_requests")
|
|
1964
|
+
if not isinstance(approval_requests, list):
|
|
1965
|
+
return None
|
|
1966
|
+
request_ids = [
|
|
1967
|
+
item["request_id"]
|
|
1968
|
+
for item in approval_requests
|
|
1969
|
+
if isinstance(item, dict) and isinstance(item.get("request_id"), str)
|
|
1970
|
+
]
|
|
1971
|
+
if not request_ids:
|
|
1972
|
+
return None
|
|
1973
|
+
has_daemon_operation = isinstance(response_payload.get("operation_id"), str)
|
|
1974
|
+
wait_timeout_seconds = min(config.approval_wait_timeout_seconds, 25 if has_daemon_operation else 5)
|
|
1975
|
+
wait_result = wait_for_approval_requests(
|
|
1976
|
+
store=store,
|
|
1977
|
+
request_ids=request_ids,
|
|
1978
|
+
timeout_seconds=wait_timeout_seconds,
|
|
1979
|
+
)
|
|
1980
|
+
response_payload["approval_wait"] = wait_result
|
|
1981
|
+
if not bool(wait_result.get("resolved")):
|
|
1982
|
+
response_payload["review_hint"] = (
|
|
1983
|
+
"Approval is still pending in HOL Guard. Approve it in the browser, then retry the same Codex action."
|
|
1984
|
+
)
|
|
1985
|
+
return None
|
|
1986
|
+
resolved_items = [item for item in wait_result.get("items", []) if isinstance(item, dict)]
|
|
1987
|
+
if any(str(item.get("resolution_action")) == "block" for item in resolved_items):
|
|
1988
|
+
_update_codex_browser_operation_status(response_payload, daemon_client, "blocked")
|
|
1989
|
+
response_payload["review_hint"] = "Browser decision saved. HOL Guard kept this Codex action blocked."
|
|
1990
|
+
return "block"
|
|
1991
|
+
_update_codex_browser_operation_status(response_payload, daemon_client, "completed")
|
|
1992
|
+
response_payload["review_hint"] = "Approval received in HOL Guard. Codex is resuming this action."
|
|
1993
|
+
return "allow"
|
|
1994
|
+
|
|
1995
|
+
|
|
1996
|
+
def _update_codex_browser_operation_status(
|
|
1997
|
+
response_payload: dict[str, object],
|
|
1998
|
+
daemon_client: object | None,
|
|
1999
|
+
status: str,
|
|
2000
|
+
) -> None:
|
|
2001
|
+
operation_id = response_payload.get("operation_id")
|
|
2002
|
+
if daemon_client is None or not isinstance(operation_id, str) or not operation_id:
|
|
2003
|
+
return
|
|
2004
|
+
update_operation_status = getattr(daemon_client, "update_operation_status", None)
|
|
2005
|
+
if not callable(update_operation_status):
|
|
2006
|
+
return
|
|
2007
|
+
with suppress(Exception):
|
|
2008
|
+
update_operation_status(operation_id=operation_id, status=status)
|
|
2009
|
+
|
|
2010
|
+
|
|
1923
2011
|
def _should_emit_prequeue_native_hook_response(
|
|
1924
2012
|
args: argparse.Namespace,
|
|
1925
2013
|
*,
|