plugin-scanner 2.0.2__tar.gz → 2.0.4__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.4/.github/dependabot.yml +59 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/ci.yml +2 -2
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/codeql.yml +2 -2
- plugin_scanner-2.0.4/.github/workflows/dependabot-uv-lock.yml +54 -0
- plugin_scanner-2.0.4/.github/workflows/harness-smoke.yml +114 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/publish.yml +74 -7
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/scorecard.yml +1 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.gitignore +6 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/PKG-INFO +107 -81
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/README.md +102 -78
- plugin_scanner-2.0.4/dashboard/index.html +38 -0
- plugin_scanner-2.0.4/dashboard/package.json +22 -0
- plugin_scanner-2.0.4/dashboard/pnpm-lock.yaml +1449 -0
- plugin_scanner-2.0.4/dashboard/public/brand/Logo_Whole.png +0 -0
- plugin_scanner-2.0.4/dashboard/src/app.tsx +184 -0
- plugin_scanner-2.0.4/dashboard/src/approval-center-layout.tsx +485 -0
- plugin_scanner-2.0.4/dashboard/src/approval-center-primitives.tsx +342 -0
- plugin_scanner-2.0.4/dashboard/src/approval-center-utils.ts +187 -0
- plugin_scanner-2.0.4/dashboard/src/guard-api.ts +118 -0
- plugin_scanner-2.0.4/dashboard/src/guard-demo.ts +146 -0
- plugin_scanner-2.0.4/dashboard/src/guard-types.ts +67 -0
- plugin_scanner-2.0.4/dashboard/src/main.tsx +17 -0
- plugin_scanner-2.0.4/dashboard/src/styles.css +201 -0
- plugin_scanner-2.0.4/dashboard/src/vite-env.d.ts +1 -0
- plugin_scanner-2.0.4/dashboard/tsconfig.json +20 -0
- plugin_scanner-2.0.4/dashboard/vite.config.ts +41 -0
- plugin_scanner-2.0.4/docs/guard/approval-audit.md +66 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/guard/architecture.md +5 -5
- plugin_scanner-2.0.4/docs/guard/competitive-parity-matrix.md +48 -0
- plugin_scanner-2.0.4/docs/guard/get-started.md +153 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/guard/harness-support.md +11 -0
- plugin_scanner-2.0.4/docs/guard/local-dashboard-failure-ledger.md +102 -0
- plugin_scanner-2.0.4/docs/guard/local-dashboard-redesign-todo.md +98 -0
- plugin_scanner-2.0.4/docs/guard/local-vs-cloud.md +25 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/guard/testing-matrix.md +18 -10
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/pyproject.toml +8 -9
- plugin_scanner-2.0.4/pyproject.toml.bak +86 -0
- plugin_scanner-2.0.4/requirements.txt +1 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/skill_security.py +1 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/cli.py +41 -9
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/base.py +10 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/claude_code.py +5 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/codex.py +3 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/cursor.py +5 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/gemini.py +5 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/opencode.py +5 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/approvals.py +273 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/cli/__init__.py +5 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/cli/approval_commands.py +63 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/cli/commands.py +331 -19
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/cli/product.py +24 -8
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/cli/prompt.py +2 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/cli/render.py +246 -7
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/config.py +42 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/consumer/service.py +166 -14
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/__init__.py +6 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/manager.py +131 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/server.py +349 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js +9 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/static/assets/index.css +1 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/static/brand/Logo_Whole.png +0 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/daemon/static/index.html +39 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/incident.py +128 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/models.py +52 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/policy/engine.py +1 -1
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/protect.py +591 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/receipts/manager.py +2 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/risk.py +83 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/runtime/runner.py +32 -2
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +50 -8
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/store.py +1022 -0
- plugin_scanner-2.0.4/src/codex_plugin_scanner/guard/store_approvals.py +284 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +1 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/version.py +1 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_action_bundle.py +50 -20
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_cli.py +9 -7
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_coverage_remaining.py +2 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_ecosystems.py +1 -3
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_edge_cases.py +3 -2
- plugin_scanner-2.0.4/tests/test_guard_approvals.py +1061 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_guard_cli.py +367 -3
- plugin_scanner-2.0.4/tests/test_guard_events.py +124 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_guard_product_flow.py +79 -2
- plugin_scanner-2.0.4/tests/test_guard_protect.py +308 -0
- plugin_scanner-2.0.4/tests/test_guard_risk.py +178 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_guard_runtime.py +497 -15
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_integration.py +8 -6
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_live_cisco_smoke.py +5 -4
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_scanner.py +3 -2
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_skill_security.py +1 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_submission.py +2 -1
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_trust_scoring.py +3 -9
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/uv.lock +36 -42
- plugin_scanner-2.0.2/.github/dependabot.yml +0 -12
- plugin_scanner-2.0.2/docs/guard/get-started.md +0 -82
- plugin_scanner-2.0.2/docs/guard/local-vs-cloud.md +0 -22
- plugin_scanner-2.0.2/src/codex_plugin_scanner/guard/cli/__init__.py +0 -5
- plugin_scanner-2.0.2/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -5
- plugin_scanner-2.0.2/src/codex_plugin_scanner/guard/daemon/server.py +0 -67
- plugin_scanner-2.0.2/src/codex_plugin_scanner/guard/store.py +0 -420
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.clusterfuzzlite/Dockerfile +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.clusterfuzzlite/build.sh +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.clusterfuzzlite/project.yaml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.clusterfuzzlite/requirements-atheris.txt +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.dockerignore +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/CODEOWNERS +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/e2e-test.yml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/fuzz.yml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.github/workflows/publish-action-repo.yml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/.pre-commit-hooks.yaml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/CONTRIBUTING.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/Dockerfile +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/README.legacy.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/action.yml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/cisco-version.txt +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/pypi-attestations-version.txt +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/action/scanner-version.txt +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docker-requirements.txt +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/guard/repo-boundaries.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/trust/mcp-trust-draft.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/trust/plugin-trust-draft.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/docs/trust/skill-trust-local.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/fuzzers/manifest_fuzzer.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/schemas/plugin-quality.v1.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/schemas/scan-result.v1.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/schemas/verify-result.v1.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/action_runner.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/claude.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/gemini.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/manifest.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/opencode.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/checks/security.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/config.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/guard/shims.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/lint_fixes.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/marketplace_support.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/models.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/path_support.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/policy.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/quality_artifact.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/repo_detect.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/reporting.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/rules/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/rules/registry.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/rules/specs.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/scanner.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/submission.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/suppressions.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_helpers.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_models.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/trust_specs.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/src/codex_plugin_scanner/verification.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/__init__.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/bad-plugin/.mcp.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/bad-plugin/secrets.js +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/code-quality-bad/evil.js +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/code-quality-bad/inject.js +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/mit-license/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/LICENSE +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/README.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/SECURITY.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/fixtures/with-marketplace/marketplace.json +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test-trust-scoring.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test-trust-specs.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_action_runner.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_best_practices.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_code_quality.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_config.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_final_coverage.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_guard_launch_env.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_lint_fixes.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_manifest.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_marketplace.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_operational_security.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_policy.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_quality_artifact.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_rule_registry.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_schema_contracts.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_security.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_security_ops.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_trust_specs.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_verification.py +0 -0
- {plugin_scanner-2.0.2 → plugin_scanner-2.0.4}/tests/test_versioning.py +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
day: "monday"
|
|
8
|
+
time: "05:00"
|
|
9
|
+
timezone: "America/New_York"
|
|
10
|
+
open-pull-requests-limit: 10
|
|
11
|
+
labels:
|
|
12
|
+
- "dependencies"
|
|
13
|
+
- "python"
|
|
14
|
+
commit-message:
|
|
15
|
+
prefix: "deps(pip)"
|
|
16
|
+
groups:
|
|
17
|
+
pip-patch-minor:
|
|
18
|
+
update-types:
|
|
19
|
+
- "minor"
|
|
20
|
+
- "patch"
|
|
21
|
+
pip-major:
|
|
22
|
+
update-types:
|
|
23
|
+
- "major"
|
|
24
|
+
|
|
25
|
+
- package-ecosystem: "github-actions"
|
|
26
|
+
directory: "/"
|
|
27
|
+
schedule:
|
|
28
|
+
interval: "weekly"
|
|
29
|
+
day: "monday"
|
|
30
|
+
time: "05:15"
|
|
31
|
+
timezone: "America/New_York"
|
|
32
|
+
open-pull-requests-limit: 10
|
|
33
|
+
labels:
|
|
34
|
+
- "dependencies"
|
|
35
|
+
- "github-actions"
|
|
36
|
+
commit-message:
|
|
37
|
+
prefix: "deps(actions)"
|
|
38
|
+
groups:
|
|
39
|
+
github-actions-all:
|
|
40
|
+
patterns:
|
|
41
|
+
- "*"
|
|
42
|
+
|
|
43
|
+
- package-ecosystem: "docker"
|
|
44
|
+
directory: "/"
|
|
45
|
+
schedule:
|
|
46
|
+
interval: "weekly"
|
|
47
|
+
day: "monday"
|
|
48
|
+
time: "05:30"
|
|
49
|
+
timezone: "America/New_York"
|
|
50
|
+
open-pull-requests-limit: 10
|
|
51
|
+
labels:
|
|
52
|
+
- "dependencies"
|
|
53
|
+
- "docker"
|
|
54
|
+
commit-message:
|
|
55
|
+
prefix: "deps(docker)"
|
|
56
|
+
groups:
|
|
57
|
+
docker-all:
|
|
58
|
+
patterns:
|
|
59
|
+
- "*"
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
20
20
|
with:
|
|
21
21
|
python-version: ${{ matrix.python-version }}
|
|
22
|
-
- uses: astral-sh/setup-uv@
|
|
22
|
+
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57
|
|
23
23
|
with:
|
|
24
24
|
enable-cache: true
|
|
25
25
|
- run: uv sync --frozen --extra dev --python ${{ matrix.python-version }}
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
39
39
|
with:
|
|
40
40
|
python-version: ${{ matrix.python-version }}
|
|
41
|
-
- uses: astral-sh/setup-uv@
|
|
41
|
+
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57
|
|
42
42
|
with:
|
|
43
43
|
enable-cache: true
|
|
44
44
|
- run: uv sync --frozen --extra dev --python ${{ matrix.python-version }}
|
|
@@ -31,11 +31,11 @@ jobs:
|
|
|
31
31
|
LEGACY_ROOT="/home/runner/work/codex-plugin-scanner"
|
|
32
32
|
mkdir -p "$LEGACY_ROOT"
|
|
33
33
|
ln -sfn "$GITHUB_WORKSPACE" "$LEGACY_ROOT/codex-plugin-scanner"
|
|
34
|
-
- uses: github/codeql-action/init@
|
|
34
|
+
- uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13
|
|
35
35
|
with:
|
|
36
36
|
languages: ${{ matrix.language }}
|
|
37
37
|
build-mode: none
|
|
38
38
|
source-root: .
|
|
39
|
-
- uses: github/codeql-action/analyze@
|
|
39
|
+
- uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13
|
|
40
40
|
with:
|
|
41
41
|
category: /language:${{ matrix.language }}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Dependabot Lockfile Sync
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- synchronize
|
|
8
|
+
- reopened
|
|
9
|
+
paths:
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
- "requirements.txt"
|
|
12
|
+
- "docker-requirements.txt"
|
|
13
|
+
- ".github/dependabot.yml"
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
sync-lockfile:
|
|
20
|
+
if: github.actor == 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.repository
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout PR branch
|
|
24
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
25
|
+
with:
|
|
26
|
+
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
|
27
|
+
ref: ${{ github.event.pull_request.head.ref }}
|
|
28
|
+
fetch-depth: 0
|
|
29
|
+
|
|
30
|
+
- name: Set up Python
|
|
31
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.12"
|
|
34
|
+
|
|
35
|
+
- name: Set up uv
|
|
36
|
+
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
|
|
37
|
+
with:
|
|
38
|
+
enable-cache: true
|
|
39
|
+
|
|
40
|
+
- name: Refresh lockfile
|
|
41
|
+
run: uv lock --no-build
|
|
42
|
+
|
|
43
|
+
- name: Commit lockfile updates
|
|
44
|
+
run: |
|
|
45
|
+
if git diff --quiet -- uv.lock; then
|
|
46
|
+
echo "uv.lock unchanged"
|
|
47
|
+
exit 0
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
git config user.name "github-actions[bot]"
|
|
51
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
52
|
+
git add uv.lock
|
|
53
|
+
git commit -m "chore: sync uv.lock for dependabot"
|
|
54
|
+
git push
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
name: Guard Harness Smoke
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: "17 7 * * *"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
codex-release-gate:
|
|
13
|
+
name: Codex release gate
|
|
14
|
+
runs-on:
|
|
15
|
+
- self-hosted
|
|
16
|
+
- linux
|
|
17
|
+
- guard
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
20
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
|
|
24
|
+
with:
|
|
25
|
+
enable-cache: true
|
|
26
|
+
- name: Prepare Guard environment
|
|
27
|
+
run: |
|
|
28
|
+
uv sync --frozen --extra dev
|
|
29
|
+
mkdir -p .guard-ci/codex-home/.codex .guard-ci/codex-workspace/.codex
|
|
30
|
+
cat > .guard-ci/codex-home/.codex/config.toml <<'EOF'
|
|
31
|
+
[mcp_servers.global_tools]
|
|
32
|
+
command = "python3"
|
|
33
|
+
args = ["-m", "http.server", "9000"]
|
|
34
|
+
EOF
|
|
35
|
+
cat > .guard-ci/codex-workspace/.codex/config.toml <<'EOF'
|
|
36
|
+
[mcp_servers.workspace_skill]
|
|
37
|
+
command = "node"
|
|
38
|
+
args = ["workspace-skill.js"]
|
|
39
|
+
EOF
|
|
40
|
+
- name: Guard detect and install for Codex
|
|
41
|
+
run: |
|
|
42
|
+
uv run hol-guard detect codex --home .guard-ci/codex-home --workspace .guard-ci/codex-workspace --json
|
|
43
|
+
uv run hol-guard install codex --home .guard-ci/codex-home --workspace .guard-ci/codex-workspace --json
|
|
44
|
+
uv run hol-guard run codex --home .guard-ci/codex-home --workspace .guard-ci/codex-workspace --dry-run --default-action allow --json
|
|
45
|
+
- name: Verify Codex runtime is available
|
|
46
|
+
run: |
|
|
47
|
+
command -v codex
|
|
48
|
+
codex mcp list
|
|
49
|
+
|
|
50
|
+
macos-release-gate:
|
|
51
|
+
name: Claude or Cursor release gate
|
|
52
|
+
runs-on:
|
|
53
|
+
- self-hosted
|
|
54
|
+
- macOS
|
|
55
|
+
- guard
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
58
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
59
|
+
with:
|
|
60
|
+
python-version: "3.12"
|
|
61
|
+
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
|
|
62
|
+
with:
|
|
63
|
+
enable-cache: true
|
|
64
|
+
- name: Prepare Guard environment
|
|
65
|
+
run: uv sync --frozen --extra dev
|
|
66
|
+
- name: Guard detect for Claude Code
|
|
67
|
+
run: uv run hol-guard detect claude-code --json
|
|
68
|
+
- name: Guard detect for Cursor
|
|
69
|
+
run: uv run hol-guard detect cursor --json
|
|
70
|
+
- name: Verify Claude Code or Cursor runtime
|
|
71
|
+
run: |
|
|
72
|
+
if command -v claude >/dev/null 2>&1; then
|
|
73
|
+
claude --help >/dev/null
|
|
74
|
+
exit 0
|
|
75
|
+
fi
|
|
76
|
+
command -v cursor-agent
|
|
77
|
+
cursor-agent mcp list
|
|
78
|
+
|
|
79
|
+
windows-release-gate:
|
|
80
|
+
name: Gemini or OpenCode release gate
|
|
81
|
+
runs-on:
|
|
82
|
+
- self-hosted
|
|
83
|
+
- windows
|
|
84
|
+
- guard
|
|
85
|
+
steps:
|
|
86
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
87
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
88
|
+
with:
|
|
89
|
+
python-version: "3.12"
|
|
90
|
+
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
|
|
91
|
+
with:
|
|
92
|
+
enable-cache: true
|
|
93
|
+
- name: Prepare Guard environment
|
|
94
|
+
shell: pwsh
|
|
95
|
+
run: uv sync --frozen --extra dev
|
|
96
|
+
- name: Guard detect for Gemini
|
|
97
|
+
shell: pwsh
|
|
98
|
+
run: uv run hol-guard detect gemini --json
|
|
99
|
+
- name: Guard detect for OpenCode
|
|
100
|
+
shell: pwsh
|
|
101
|
+
run: uv run hol-guard detect opencode --json
|
|
102
|
+
- name: Verify Gemini or OpenCode runtime
|
|
103
|
+
shell: pwsh
|
|
104
|
+
run: |
|
|
105
|
+
$gemini = Get-Command gemini -ErrorAction SilentlyContinue
|
|
106
|
+
if ($null -ne $gemini) {
|
|
107
|
+
gemini --help | Out-Null
|
|
108
|
+
exit 0
|
|
109
|
+
}
|
|
110
|
+
$opencode = Get-Command opencode -ErrorAction SilentlyContinue
|
|
111
|
+
if ($null -eq $opencode) {
|
|
112
|
+
throw "Expected gemini or opencode on the Windows Guard runner."
|
|
113
|
+
}
|
|
114
|
+
opencode --help | Out-Null
|
|
@@ -20,7 +20,7 @@ permissions:
|
|
|
20
20
|
id-token: write
|
|
21
21
|
|
|
22
22
|
concurrency:
|
|
23
|
-
group:
|
|
23
|
+
group: hol-guard-publish-${{ github.ref }}
|
|
24
24
|
cancel-in-progress: false
|
|
25
25
|
|
|
26
26
|
jobs:
|
|
@@ -36,11 +36,11 @@ jobs:
|
|
|
36
36
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
37
37
|
with:
|
|
38
38
|
python-version: "3.12"
|
|
39
|
-
- uses: astral-sh/setup-uv@
|
|
39
|
+
- uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57
|
|
40
40
|
with:
|
|
41
41
|
enable-cache: true
|
|
42
42
|
- name: Install dependencies
|
|
43
|
-
run: uv sync --frozen --extra dev --
|
|
43
|
+
run: uv sync --frozen --extra dev --extra publish
|
|
44
44
|
- name: Compute publish version
|
|
45
45
|
id: version
|
|
46
46
|
env:
|
|
@@ -70,12 +70,75 @@ jobs:
|
|
|
70
70
|
run: |
|
|
71
71
|
sed -i "1,/^version = /{s/^version = .*/version = \"$VERSION\"/}" pyproject.toml
|
|
72
72
|
sed -i "1,/^__version__ = /{s/^__version__ = .*/__version__ = \"$VERSION\"/}" src/codex_plugin_scanner/version.py
|
|
73
|
-
- name: Build
|
|
74
|
-
run: uv run --no-sync python -m build
|
|
75
|
-
- name: Build legacy compatibility package (codex-plugin-scanner)
|
|
73
|
+
- name: Build Guard package (hol-guard)
|
|
76
74
|
run: |
|
|
77
75
|
cp pyproject.toml pyproject.toml.bak
|
|
78
|
-
|
|
76
|
+
python3 - <<'PY'
|
|
77
|
+
from pathlib import Path
|
|
78
|
+
|
|
79
|
+
path = Path("pyproject.toml")
|
|
80
|
+
text = path.read_text(encoding="utf-8")
|
|
81
|
+
text = text.replace('name = "hol-guard"', 'name = "hol-guard"', 1)
|
|
82
|
+
text = text.replace(
|
|
83
|
+
'description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."',
|
|
84
|
+
'description = "Protect local AI harnesses with HOL Guard before tools run in Codex, Claude Code, Cursor, Gemini, and OpenCode."',
|
|
85
|
+
1,
|
|
86
|
+
)
|
|
87
|
+
start = text.index("[project.scripts]")
|
|
88
|
+
end = text.index("\n\n[project.urls]")
|
|
89
|
+
scripts = "[project.scripts]\n" \
|
|
90
|
+
'hol-guard = "codex_plugin_scanner.cli:main"\n' \
|
|
91
|
+
'plugin-guard = "codex_plugin_scanner.cli:main"'
|
|
92
|
+
text = text[:start] + scripts + text[end:]
|
|
93
|
+
path.write_text(text, encoding="utf-8")
|
|
94
|
+
PY
|
|
95
|
+
uv run --no-sync python -m build
|
|
96
|
+
mv pyproject.toml.bak pyproject.toml
|
|
97
|
+
- name: Build scanner package (plugin-scanner)
|
|
98
|
+
run: |
|
|
99
|
+
cp pyproject.toml pyproject.toml.bak
|
|
100
|
+
python3 - <<'PY'
|
|
101
|
+
from pathlib import Path
|
|
102
|
+
|
|
103
|
+
path = Path("pyproject.toml")
|
|
104
|
+
text = path.read_text(encoding="utf-8")
|
|
105
|
+
text = text.replace('name = "hol-guard"', 'name = "plugin-scanner"', 1)
|
|
106
|
+
text = text.replace(
|
|
107
|
+
'description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."',
|
|
108
|
+
'description = "Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows."',
|
|
109
|
+
1,
|
|
110
|
+
)
|
|
111
|
+
start = text.index("[project.scripts]")
|
|
112
|
+
end = text.index("\n\n[project.urls]")
|
|
113
|
+
scripts = "[project.scripts]\n" \
|
|
114
|
+
'plugin-scanner = "codex_plugin_scanner.cli:main"\n' \
|
|
115
|
+
'plugin-ecosystem-scanner = "codex_plugin_scanner.cli:main"'
|
|
116
|
+
text = text[:start] + scripts + text[end:]
|
|
117
|
+
path.write_text(text, encoding="utf-8")
|
|
118
|
+
PY
|
|
119
|
+
uv run --no-sync python -m build
|
|
120
|
+
mv pyproject.toml.bak pyproject.toml
|
|
121
|
+
- name: Build codex compatibility alias (codex-plugin-scanner)
|
|
122
|
+
run: |
|
|
123
|
+
cp pyproject.toml pyproject.toml.bak
|
|
124
|
+
python3 - <<'PY'
|
|
125
|
+
from pathlib import Path
|
|
126
|
+
|
|
127
|
+
path = Path("pyproject.toml")
|
|
128
|
+
text = path.read_text(encoding="utf-8")
|
|
129
|
+
text = text.replace('name = "hol-guard"', 'name = "codex-plugin-scanner"', 1)
|
|
130
|
+
text = text.replace(
|
|
131
|
+
'description = "Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode."',
|
|
132
|
+
'description = "Compatibility alias for teams still pinned to the codex-plugin-scanner package name."',
|
|
133
|
+
1,
|
|
134
|
+
)
|
|
135
|
+
start = text.index("[project.scripts]")
|
|
136
|
+
end = text.index("\n\n[project.urls]")
|
|
137
|
+
scripts = "[project.scripts]\n" \
|
|
138
|
+
'codex-plugin-scanner = "codex_plugin_scanner.cli:main"'
|
|
139
|
+
text = text[:start] + scripts + text[end:]
|
|
140
|
+
path.write_text(text, encoding="utf-8")
|
|
141
|
+
PY
|
|
79
142
|
uv run --no-sync python -m build
|
|
80
143
|
mv pyproject.toml.bak pyproject.toml
|
|
81
144
|
- name: Verify distributions
|
|
@@ -171,6 +234,10 @@ jobs:
|
|
|
171
234
|
${LOG}
|
|
172
235
|
|
|
173
236
|
### Installation
|
|
237
|
+
\`\`\`bash
|
|
238
|
+
uv tool install hol-guard==${VERSION}
|
|
239
|
+
\`\`\`
|
|
240
|
+
|
|
174
241
|
\`\`\`bash
|
|
175
242
|
uv tool install plugin-scanner==${VERSION}
|
|
176
243
|
\`\`\`
|
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
results_file: results.sarif
|
|
22
22
|
results_format: sarif
|
|
23
23
|
publish_results: true
|
|
24
|
-
- uses: github/codeql-action/upload-sarif@
|
|
24
|
+
- uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13
|
|
25
25
|
with:
|
|
26
26
|
sarif_file: results.sarif
|
|
27
27
|
if: always()
|