code-mower 0.5.0b20__tar.gz → 0.5.0b22__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.
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/PKG-INFO +6 -6
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/README.md +5 -5
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/pyproject.toml +1 -1
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/__init__.py +1 -1
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cli.py +1 -1
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/export.py +9 -1
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_registry.py +12 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/providers/provenance.py +22 -2
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/code-mower.example.yml +21 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/providers.yml +21 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/PKG-INFO +6 -6
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers.yml +21 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_cloud_client.py +65 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_local_cli.py +108 -1
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_release_hygiene.py +34 -34
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/CODE_OF_CONDUCT.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/LICENSE +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/MANIFEST.in +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/NOTICE +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/SUPPORT.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/requirements/requirements.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/setup.cfg +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/_base.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/cursor_bugbot.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/gitar.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/greptile.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/adapters/qodo.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/antigravity_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/audit_handoff_log.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/audit_labeler_lib.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/audit_progress.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/blind_review_artifacts.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/blind_review_coordinator.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/bootstrap.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/builder_experiment.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/arms.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/auto_discovery.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/commands.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/context_inputs.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/corpus.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/effect_report.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/evidence.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/evidence_report.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/identity.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/metrics.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/overlap.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/planning.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/policy.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/results.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/run_results.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/run_status.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/runner.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/truth.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/calibration/value_report.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/checks.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/claude_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/claude_cli_environment.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/clear_stale.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/bundle.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/doctor.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/dogfood.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/endpoints.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/errors.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/events.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/git_metadata.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/manifest.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/operations.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/reports.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/setup.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/cloud_client/upload.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/code_mower_calibration.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/code_mower_context_packs.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/code_mower_merge.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/code_mower_telemetry.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/codex_audit_env_preflight.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/codex_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/codex_audit_schema_smoke.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/codex_audit_verdict.schema.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/config.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/cloud.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/common.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_cost.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_failure_annotations.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_failure_models.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_failure_scan.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_failures.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_actions_permissions.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_api.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_branch.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_config.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_provider.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/github_repo.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/groups.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/models.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/output.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/presets.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/privacy.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_api_model.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_api_model_openai.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_api_model_profiles.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_env.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_env_required.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_env_tokens.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_local_cli.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_local_cli_commands.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_local_cli_probe_config.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_probe.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_probe_auth.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_probe_evaluation.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_probe_json.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_probe_remediation.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/providers.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/registry.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/runner.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/runtime.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/doctor_checks/runtime_github_auth.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/gemini_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/hermes_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/init.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/aider.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/antigravity_cli.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/claude.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/codex.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/devin.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/gemini_cli.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/hermes_cli.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/lane_configs/local_llm.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/local_llm_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/local_llm_bakeoff.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/local_llm_calibration.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/local_llm_profiles.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/migration.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/migration_install.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/migration_mirror.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/migration_readiness.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/migration_rehearsal.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/next_steps.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package_content.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package_manifest.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package_paths.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package_rendering.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/package_static.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/prompts.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/comments.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/git.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/github_auth.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/github_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/pr_worktree.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/process.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/repo_paths.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/text_schema.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/verdict_artifacts.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/provider_runners/workspace.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/providers/__init__.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/providers/local_cli.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/release_readiness.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/reviewer_metrics.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/saas_reviewer_labeler.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/secrets.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/base-audit.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/calibration-policy.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/context-driven-quality.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/docs-design.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/generic-programming.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/operability.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/package-runtime.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/lane_prompts/security-threat-model.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/code_mower +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/code_mower_standalone_pin.env +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/code_mower_standalone_shadow.sh +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/run_claude_audit_pr.sh +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/run_codex_audit_pr.sh +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/product-support/safe_gh_comment.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/trailer_comment_labeler.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower/versioning.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/SOURCES.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/dependency_links.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/entry_points.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/requires.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/src/code_mower.egg-info/top_level.txt +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/builder-experiment.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/calibration-corpus.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/calibration-corpus.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/code-mower.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/context-packs.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/cursor/BUGBOT.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/acp_bridge.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/aider.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/antigravity_cli.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/claude_audit.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/claude_review.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/coderabbit_cli.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/codex.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/cursor_bugbot.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/devin.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/gemini_cli.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/gitar.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/greptile.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/hermes_cli.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/local_llm.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/providers/qodo.yml +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/reviewer-spend.example.json +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/reviewer-value-report.example.md +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/audit-label-cleanup.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/blind-review-artifacts-dry-run.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/hosted-bridge.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/local-cli-audit.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/private-standalone-shadow.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/review-clear-stale.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/saas-reviewer-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/templates/workflows/trailer-comment-labeler.yml.j2 +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_calibration_effect_report.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_calibration_truth.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_checks.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_claude_cli_bounce.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_clear_stale.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_cloud_git_metadata.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_cloud_manifest.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_cloud_reports.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_coderabbit_cli_audit_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_actions_cost_summary.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_actions_failure_selection.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_boundaries.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_github_checks.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_output.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_privacy.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_provider_env_required.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_provider_env_tokens.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_provider_probe.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_provider_review_hygiene.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_doctor_registry.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_local_llm_github_helpers.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_comments.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_git.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_github_pr.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_pr_worktree.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_process.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_repo_paths.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_text_schema.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_provider_runners_workspace.py +0 -0
- {code_mower-0.5.0b20 → code_mower-0.5.0b22}/tests/test_reviewer_metrics_core.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b22
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -101,11 +101,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
101
101
|
|
|
102
102
|
```bash
|
|
103
103
|
python3.12 --version
|
|
104
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
104
|
+
pipx install --python python3.12 code-mower==0.5.0b22
|
|
105
105
|
code-mower --version
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
-
`0.5.
|
|
108
|
+
`0.5.0b22` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
109
109
|
line, use the explicit beta version above or allow prereleases with:
|
|
110
110
|
|
|
111
111
|
```bash
|
|
@@ -148,7 +148,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
148
148
|
|
|
149
149
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
150
150
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
151
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
151
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b22`.
|
|
152
152
|
|
|
153
153
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
154
154
|
|
|
@@ -253,9 +253,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
253
253
|
|
|
254
254
|
## Installation Status
|
|
255
255
|
|
|
256
|
-
The current public beta is `v0.5.0-beta.
|
|
256
|
+
The current public beta is `v0.5.0-beta.22` from
|
|
257
257
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
258
|
-
as `code-mower==0.5.
|
|
258
|
+
as `code-mower==0.5.0b22` on [PyPI](https://pypi.org/project/code-mower/).
|
|
259
259
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
260
260
|
release notes.
|
|
261
261
|
|
|
@@ -86,11 +86,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
88
|
python3.12 --version
|
|
89
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
89
|
+
pipx install --python python3.12 code-mower==0.5.0b22
|
|
90
90
|
code-mower --version
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
`0.5.
|
|
93
|
+
`0.5.0b22` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
94
94
|
line, use the explicit beta version above or allow prereleases with:
|
|
95
95
|
|
|
96
96
|
```bash
|
|
@@ -133,7 +133,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
133
133
|
|
|
134
134
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
135
135
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
136
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
136
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b22`.
|
|
137
137
|
|
|
138
138
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
139
139
|
|
|
@@ -238,9 +238,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
238
238
|
|
|
239
239
|
## Installation Status
|
|
240
240
|
|
|
241
|
-
The current public beta is `v0.5.0-beta.
|
|
241
|
+
The current public beta is `v0.5.0-beta.22` from
|
|
242
242
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
243
|
-
as `code-mower==0.5.
|
|
243
|
+
as `code-mower==0.5.0b22` on [PyPI](https://pypi.org/project/code-mower/).
|
|
244
244
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
245
245
|
release notes.
|
|
246
246
|
|
|
@@ -14,7 +14,7 @@ from pathlib import Path
|
|
|
14
14
|
if __package__ in {None, ""}:
|
|
15
15
|
raise SystemExit(
|
|
16
16
|
"code_mower.cli is a packaged entrypoint. Install Code Mower with "
|
|
17
|
-
"`pipx install code-mower==0.5.
|
|
17
|
+
"`pipx install code-mower==0.5.0b22`, or run source checkouts with "
|
|
18
18
|
"`PYTHONPATH=src python -m code_mower.cli`."
|
|
19
19
|
)
|
|
20
20
|
|
|
@@ -266,7 +266,9 @@ def build_provenance_summary(events: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
266
266
|
if not model and not model_version_raw and model_source in {"", "missing"}:
|
|
267
267
|
missing_model_events += 1
|
|
268
268
|
if not tool_version:
|
|
269
|
-
|
|
269
|
+
version_source = str(tool.get("version_source") or "").strip()
|
|
270
|
+
if version_source in {"", "missing"}:
|
|
271
|
+
missing_tool_version_events += 1
|
|
270
272
|
key = (tool_name or "unknown", provider or "unknown", model or "")
|
|
271
273
|
row = tools.setdefault(
|
|
272
274
|
key,
|
|
@@ -276,6 +278,8 @@ def build_provenance_summary(events: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
276
278
|
"model": key[2],
|
|
277
279
|
"events": 0,
|
|
278
280
|
"versions": set(),
|
|
281
|
+
"model_sources": set(),
|
|
282
|
+
"version_sources": set(),
|
|
279
283
|
"roles": set(),
|
|
280
284
|
"lenses": set(),
|
|
281
285
|
},
|
|
@@ -283,6 +287,8 @@ def build_provenance_summary(events: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
283
287
|
row["events"] += 1
|
|
284
288
|
for field, target in (
|
|
285
289
|
("tool_version", "versions"),
|
|
290
|
+
("model_source", "model_sources"),
|
|
291
|
+
("version_source", "version_sources"),
|
|
286
292
|
("role", "roles"),
|
|
287
293
|
("lens", "lenses"),
|
|
288
294
|
):
|
|
@@ -298,6 +304,8 @@ def build_provenance_summary(events: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
298
304
|
"model": row["model"],
|
|
299
305
|
"events": row["events"],
|
|
300
306
|
"versions": sorted(row["versions"]),
|
|
307
|
+
"model_sources": sorted(row["model_sources"]),
|
|
308
|
+
"version_sources": sorted(row["version_sources"]),
|
|
301
309
|
"roles": sorted(row["roles"]),
|
|
302
310
|
"lenses": sorted(row["lenses"]),
|
|
303
311
|
}
|
|
@@ -85,6 +85,11 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
85
85
|
merge_authority=True,
|
|
86
86
|
provider_config={
|
|
87
87
|
"command": "codex",
|
|
88
|
+
"model_env_any": (
|
|
89
|
+
"CODE_MOWER_CODEX_MODEL",
|
|
90
|
+
"CODEX_MODEL",
|
|
91
|
+
"OPENAI_MODEL",
|
|
92
|
+
),
|
|
88
93
|
"doctor_probe_args": ("--version",),
|
|
89
94
|
},
|
|
90
95
|
),
|
|
@@ -273,6 +278,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
273
278
|
provider_config={
|
|
274
279
|
"api_base_env": "LOCAL_LLM_API_BASE",
|
|
275
280
|
"model_env": "LOCAL_LLM_MODEL",
|
|
281
|
+
"model_env_any": ("CODE_MOWER_LOCAL_LLM_MODEL",),
|
|
276
282
|
"bot_authors_env": "LOCAL_LLM_BOT_AUTHORS",
|
|
277
283
|
"default_api_base": "http://localhost:1234/v1",
|
|
278
284
|
"profile_env": "LOCAL_LLM_PROFILE",
|
|
@@ -301,6 +307,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
301
307
|
"command": "aider",
|
|
302
308
|
"mode": "review-only",
|
|
303
309
|
"model_env": "AIDER_MODEL",
|
|
310
|
+
"model_env_any": ("CODE_MOWER_AIDER_MODEL", "AIDER_CHAT_MODEL"),
|
|
304
311
|
"api_base_env": "AIDER_API_BASE",
|
|
305
312
|
"status": "optional tool lane; provider-specific invocation belongs in an adapter",
|
|
306
313
|
},
|
|
@@ -326,6 +333,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
326
333
|
"command": "gemini",
|
|
327
334
|
"command_env": "GEMINI_CLI_COMMAND",
|
|
328
335
|
"model_env": "GEMINI_MODEL",
|
|
336
|
+
"model_env_any": ("CODE_MOWER_GEMINI_MODEL", "GOOGLE_GENAI_MODEL"),
|
|
329
337
|
"prompt_lenses": ("base-audit",),
|
|
330
338
|
"doctor_probe_args": (
|
|
331
339
|
"-p",
|
|
@@ -362,6 +370,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
362
370
|
"alternate_commands": ("antigravity",),
|
|
363
371
|
"command_env": "ANTIGRAVITY_CLI_COMMAND",
|
|
364
372
|
"model_env": "ANTIGRAVITY_MODEL",
|
|
373
|
+
"model_env_any": ("CODE_MOWER_ANTIGRAVITY_MODEL",),
|
|
365
374
|
"prompt_lenses": ("base-audit",),
|
|
366
375
|
"required_env_truthy": ("ANTIGRAVITY_CLI_USE_AMBIENT_HOME",),
|
|
367
376
|
"doctor_probe_args": ("--version",),
|
|
@@ -396,6 +405,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
396
405
|
"command": "hermes",
|
|
397
406
|
"command_env": "HERMES_CLI_COMMAND",
|
|
398
407
|
"model_env": "HERMES_INFERENCE_MODEL",
|
|
408
|
+
"model_env_any": ("CODE_MOWER_HERMES_MODEL", "HERMES_MODEL"),
|
|
399
409
|
"provider_env": "HERMES_PROVIDER",
|
|
400
410
|
"prompt_lenses": ("base-audit",),
|
|
401
411
|
"required_env_truthy": ("HERMES_CLI_USE_AMBIENT_HOME",),
|
|
@@ -430,6 +440,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
430
440
|
provider_config={
|
|
431
441
|
"command": "coderabbit",
|
|
432
442
|
"alternate_commands": ("cr",),
|
|
443
|
+
"model_env_any": ("CODE_MOWER_CODERABBIT_MODEL", "CODERABBIT_MODEL"),
|
|
433
444
|
"status": "optional CLI lane for local/on-demand review capture",
|
|
434
445
|
},
|
|
435
446
|
),
|
|
@@ -451,6 +462,7 @@ REFERENCE_PROVIDERS: dict[str, ProviderLane] = {
|
|
|
451
462
|
spend_policy="none",
|
|
452
463
|
provider_config={
|
|
453
464
|
"command_env": "CODE_MOWER_ACP_COMMAND",
|
|
465
|
+
"model_env": "CODE_MOWER_ACP_MODEL",
|
|
454
466
|
"protocol": "agent-client-protocol",
|
|
455
467
|
"prompt_lenses": ("base-audit",),
|
|
456
468
|
"status": "protocol research lane; no automatic merge authority",
|
|
@@ -119,6 +119,8 @@ def build_code_mower_tool_provenance(
|
|
|
119
119
|
"tool_name": "code-mower",
|
|
120
120
|
"tool_version": version,
|
|
121
121
|
"provider": "code-mower",
|
|
122
|
+
"model_source": "not_applicable",
|
|
123
|
+
"version_source": "package_version",
|
|
122
124
|
"integration": source,
|
|
123
125
|
"source": source,
|
|
124
126
|
}
|
|
@@ -166,6 +168,21 @@ def _env_value(config: Mapping[str, Any], key: str) -> str:
|
|
|
166
168
|
return _safe_text(os.environ.get(env_name)) if env_name else ""
|
|
167
169
|
|
|
168
170
|
|
|
171
|
+
def _env_value_any(config: Mapping[str, Any], key: str, any_key: str) -> str:
|
|
172
|
+
env_names = []
|
|
173
|
+
primary = _safe_text(config.get(key))
|
|
174
|
+
if primary:
|
|
175
|
+
env_names.append(primary)
|
|
176
|
+
for env_name in _text_values(config.get(any_key)):
|
|
177
|
+
if env_name not in env_names:
|
|
178
|
+
env_names.append(env_name)
|
|
179
|
+
for env_name in env_names:
|
|
180
|
+
value = _safe_text(os.environ.get(env_name))
|
|
181
|
+
if value:
|
|
182
|
+
return value
|
|
183
|
+
return ""
|
|
184
|
+
|
|
185
|
+
|
|
169
186
|
def _profile_model(config: Mapping[str, Any]) -> tuple[str, str]:
|
|
170
187
|
profile_env = _safe_text(config.get("profile_env"))
|
|
171
188
|
profile_id = _safe_text(os.environ.get(profile_env)) if profile_env else ""
|
|
@@ -182,7 +199,7 @@ _VENDOR_HIDDEN_MODEL_DRIVERS = frozenset({"hosted_bridge", "manual", "saas_event
|
|
|
182
199
|
|
|
183
200
|
|
|
184
201
|
def _configured_model(config: Mapping[str, Any], driver: str) -> tuple[str, str]:
|
|
185
|
-
env_model =
|
|
202
|
+
env_model = _env_value_any(config, "model_env", "model_env_any")
|
|
186
203
|
if env_model:
|
|
187
204
|
return env_model, "env"
|
|
188
205
|
profile_model, profile_id = _profile_model(config)
|
|
@@ -256,6 +273,7 @@ def build_provider_lane_tool_provenance(
|
|
|
256
273
|
if driver == "local_cli"
|
|
257
274
|
else _safe_text(_lane_value(lane, "adapter")) or provider
|
|
258
275
|
)
|
|
276
|
+
hidden_vendor_version = driver in _VENDOR_HIDDEN_MODEL_DRIVERS
|
|
259
277
|
detail: dict[str, Any] = {
|
|
260
278
|
"lane_id": lane_id,
|
|
261
279
|
"driver": driver,
|
|
@@ -264,7 +282,9 @@ def build_provider_lane_tool_provenance(
|
|
|
264
282
|
"model_known": bool(model),
|
|
265
283
|
"model_source": model_source,
|
|
266
284
|
"version_known": False,
|
|
267
|
-
"version_source": "
|
|
285
|
+
"version_source": "vendor_hidden"
|
|
286
|
+
if hidden_vendor_version
|
|
287
|
+
else ("not_applicable" if driver == "api_model" else "missing"),
|
|
268
288
|
}
|
|
269
289
|
tool_version = ""
|
|
270
290
|
if driver == "local_cli" and include_version_probe and command:
|
|
@@ -24,6 +24,10 @@ lanes:
|
|
|
24
24
|
- GITHUB_TOKEN
|
|
25
25
|
provider_config:
|
|
26
26
|
command: codex
|
|
27
|
+
model_env_any:
|
|
28
|
+
- CODE_MOWER_CODEX_MODEL
|
|
29
|
+
- CODEX_MODEL
|
|
30
|
+
- OPENAI_MODEL
|
|
27
31
|
doctor_probe_args:
|
|
28
32
|
- --version
|
|
29
33
|
review_hygiene:
|
|
@@ -207,6 +211,8 @@ lanes:
|
|
|
207
211
|
provider_config:
|
|
208
212
|
api_base_env: LOCAL_LLM_API_BASE
|
|
209
213
|
model_env: LOCAL_LLM_MODEL
|
|
214
|
+
model_env_any:
|
|
215
|
+
- CODE_MOWER_LOCAL_LLM_MODEL
|
|
210
216
|
bot_authors_env: LOCAL_LLM_BOT_AUTHORS
|
|
211
217
|
default_api_base: http://localhost:1234/v1
|
|
212
218
|
profile_env: LOCAL_LLM_PROFILE
|
|
@@ -242,6 +248,9 @@ lanes:
|
|
|
242
248
|
command: aider
|
|
243
249
|
mode: review-only
|
|
244
250
|
model_env: AIDER_MODEL
|
|
251
|
+
model_env_any:
|
|
252
|
+
- CODE_MOWER_AIDER_MODEL
|
|
253
|
+
- AIDER_CHAT_MODEL
|
|
245
254
|
api_base_env: AIDER_API_BASE
|
|
246
255
|
status: optional tool lane; provider-specific invocation belongs in an adapter
|
|
247
256
|
|
|
@@ -264,6 +273,9 @@ lanes:
|
|
|
264
273
|
command: gemini
|
|
265
274
|
command_env: GEMINI_CLI_COMMAND
|
|
266
275
|
model_env: GEMINI_MODEL
|
|
276
|
+
model_env_any:
|
|
277
|
+
- CODE_MOWER_GEMINI_MODEL
|
|
278
|
+
- GOOGLE_GENAI_MODEL
|
|
267
279
|
prompt_lenses:
|
|
268
280
|
- base-audit
|
|
269
281
|
doctor_probe_args:
|
|
@@ -298,6 +310,8 @@ lanes:
|
|
|
298
310
|
- antigravity
|
|
299
311
|
command_env: ANTIGRAVITY_CLI_COMMAND
|
|
300
312
|
model_env: ANTIGRAVITY_MODEL
|
|
313
|
+
model_env_any:
|
|
314
|
+
- CODE_MOWER_ANTIGRAVITY_MODEL
|
|
301
315
|
prompt_lenses:
|
|
302
316
|
- base-audit
|
|
303
317
|
required_env_truthy:
|
|
@@ -325,6 +339,9 @@ lanes:
|
|
|
325
339
|
command: hermes
|
|
326
340
|
command_env: HERMES_CLI_COMMAND
|
|
327
341
|
model_env: HERMES_INFERENCE_MODEL
|
|
342
|
+
model_env_any:
|
|
343
|
+
- CODE_MOWER_HERMES_MODEL
|
|
344
|
+
- HERMES_MODEL
|
|
328
345
|
provider_env: HERMES_PROVIDER
|
|
329
346
|
prompt_lenses:
|
|
330
347
|
- base-audit
|
|
@@ -353,6 +370,9 @@ lanes:
|
|
|
353
370
|
command: coderabbit
|
|
354
371
|
alternate_commands:
|
|
355
372
|
- cr
|
|
373
|
+
model_env_any:
|
|
374
|
+
- CODE_MOWER_CODERABBIT_MODEL
|
|
375
|
+
- CODERABBIT_MODEL
|
|
356
376
|
status: optional CLI lane for local/on-demand review capture
|
|
357
377
|
|
|
358
378
|
acp_bridge:
|
|
@@ -371,6 +391,7 @@ lanes:
|
|
|
371
391
|
- GITHUB_TOKEN
|
|
372
392
|
provider_config:
|
|
373
393
|
command_env: CODE_MOWER_ACP_COMMAND
|
|
394
|
+
model_env: CODE_MOWER_ACP_MODEL
|
|
374
395
|
protocol: agent-client-protocol
|
|
375
396
|
prompt_lenses:
|
|
376
397
|
- base-audit
|
|
@@ -17,6 +17,7 @@ provider_templates:
|
|
|
17
17
|
trigger_policy: "manual"
|
|
18
18
|
provider_config:
|
|
19
19
|
command_env: "CODE_MOWER_ACP_COMMAND"
|
|
20
|
+
model_env: "CODE_MOWER_ACP_MODEL"
|
|
20
21
|
protocol: "agent-client-protocol"
|
|
21
22
|
prompt_lenses:
|
|
22
23
|
- "base-audit"
|
|
@@ -42,6 +43,9 @@ provider_templates:
|
|
|
42
43
|
command: "aider"
|
|
43
44
|
mode: "review-only"
|
|
44
45
|
model_env: "AIDER_MODEL"
|
|
46
|
+
model_env_any:
|
|
47
|
+
- "CODE_MOWER_AIDER_MODEL"
|
|
48
|
+
- "AIDER_CHAT_MODEL"
|
|
45
49
|
api_base_env: "AIDER_API_BASE"
|
|
46
50
|
status: "optional tool lane; provider-specific invocation belongs in an adapter"
|
|
47
51
|
review_hygiene: {}
|
|
@@ -66,6 +70,8 @@ provider_templates:
|
|
|
66
70
|
- "antigravity"
|
|
67
71
|
command_env: "ANTIGRAVITY_CLI_COMMAND"
|
|
68
72
|
model_env: "ANTIGRAVITY_MODEL"
|
|
73
|
+
model_env_any:
|
|
74
|
+
- "CODE_MOWER_ANTIGRAVITY_MODEL"
|
|
69
75
|
prompt_lenses:
|
|
70
76
|
- "base-audit"
|
|
71
77
|
required_env_truthy:
|
|
@@ -161,6 +167,9 @@ provider_templates:
|
|
|
161
167
|
command: "coderabbit"
|
|
162
168
|
alternate_commands:
|
|
163
169
|
- "cr"
|
|
170
|
+
model_env_any:
|
|
171
|
+
- "CODE_MOWER_CODERABBIT_MODEL"
|
|
172
|
+
- "CODERABBIT_MODEL"
|
|
164
173
|
status: "optional CLI lane for local/on-demand review capture"
|
|
165
174
|
review_hygiene: {}
|
|
166
175
|
codex:
|
|
@@ -181,6 +190,10 @@ provider_templates:
|
|
|
181
190
|
trigger_policy: "label"
|
|
182
191
|
provider_config:
|
|
183
192
|
command: "codex"
|
|
193
|
+
model_env_any:
|
|
194
|
+
- "CODE_MOWER_CODEX_MODEL"
|
|
195
|
+
- "CODEX_MODEL"
|
|
196
|
+
- "OPENAI_MODEL"
|
|
184
197
|
doctor_probe_args:
|
|
185
198
|
- "--version"
|
|
186
199
|
review_hygiene:
|
|
@@ -253,6 +266,9 @@ provider_templates:
|
|
|
253
266
|
command: "gemini"
|
|
254
267
|
command_env: "GEMINI_CLI_COMMAND"
|
|
255
268
|
model_env: "GEMINI_MODEL"
|
|
269
|
+
model_env_any:
|
|
270
|
+
- "CODE_MOWER_GEMINI_MODEL"
|
|
271
|
+
- "GOOGLE_GENAI_MODEL"
|
|
256
272
|
prompt_lenses:
|
|
257
273
|
- "base-audit"
|
|
258
274
|
doctor_probe_args:
|
|
@@ -335,6 +351,9 @@ provider_templates:
|
|
|
335
351
|
command: "hermes"
|
|
336
352
|
command_env: "HERMES_CLI_COMMAND"
|
|
337
353
|
model_env: "HERMES_INFERENCE_MODEL"
|
|
354
|
+
model_env_any:
|
|
355
|
+
- "CODE_MOWER_HERMES_MODEL"
|
|
356
|
+
- "HERMES_MODEL"
|
|
338
357
|
provider_env: "HERMES_PROVIDER"
|
|
339
358
|
prompt_lenses:
|
|
340
359
|
- "base-audit"
|
|
@@ -365,6 +384,8 @@ provider_templates:
|
|
|
365
384
|
provider_config:
|
|
366
385
|
api_base_env: "LOCAL_LLM_API_BASE"
|
|
367
386
|
model_env: "LOCAL_LLM_MODEL"
|
|
387
|
+
model_env_any:
|
|
388
|
+
- "CODE_MOWER_LOCAL_LLM_MODEL"
|
|
368
389
|
bot_authors_env: "LOCAL_LLM_BOT_AUTHORS"
|
|
369
390
|
default_api_base: "http://localhost:1234/v1"
|
|
370
391
|
profile_env: "LOCAL_LLM_PROFILE"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-mower
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0b22
|
|
4
4
|
Summary: Multi-reviewer AI code audit orchestration
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -101,11 +101,11 @@ Code Mower currently targets Python 3.11+; Python 3.12 is recommended.
|
|
|
101
101
|
|
|
102
102
|
```bash
|
|
103
103
|
python3.12 --version
|
|
104
|
-
pipx install --python python3.12 code-mower==0.5.
|
|
104
|
+
pipx install --python python3.12 code-mower==0.5.0b22
|
|
105
105
|
code-mower --version
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
-
`0.5.
|
|
108
|
+
`0.5.0b22` is a beta release. Until Code Mower publishes a stable `1.0`
|
|
109
109
|
line, use the explicit beta version above or allow prereleases with:
|
|
110
110
|
|
|
111
111
|
```bash
|
|
@@ -148,7 +148,7 @@ First-time command map: [docs/launch-command-surface.md](docs/launch-command-sur
|
|
|
148
148
|
|
|
149
149
|
The current PyPI beta has been rehearsed end-to-end from a clean install:
|
|
150
150
|
[First-User Install Rehearsal](docs/first-user-install-rehearsal.md) records
|
|
151
|
-
the latest 10/10 public-package readiness proof for `code-mower==0.5.
|
|
151
|
+
the latest 10/10 public-package readiness proof for `code-mower==0.5.0b22`.
|
|
152
152
|
|
|
153
153
|
## Why Not Just Run Codex Or Claude Yourself?
|
|
154
154
|
|
|
@@ -253,9 +253,9 @@ best?" to "which AI builder plus reviewer loop ships best on this product?" See
|
|
|
253
253
|
|
|
254
254
|
## Installation Status
|
|
255
255
|
|
|
256
|
-
The current public beta is `v0.5.0-beta.
|
|
256
|
+
The current public beta is `v0.5.0-beta.22` from
|
|
257
257
|
[codemower-ai/code-mower](https://github.com/codemower-ai/code-mower), published
|
|
258
|
-
as `code-mower==0.5.
|
|
258
|
+
as `code-mower==0.5.0b22` on [PyPI](https://pypi.org/project/code-mower/).
|
|
259
259
|
GitHub releases remain the auditable source for tags, build artifacts, and
|
|
260
260
|
release notes.
|
|
261
261
|
|
|
@@ -17,6 +17,7 @@ provider_templates:
|
|
|
17
17
|
trigger_policy: "manual"
|
|
18
18
|
provider_config:
|
|
19
19
|
command_env: "CODE_MOWER_ACP_COMMAND"
|
|
20
|
+
model_env: "CODE_MOWER_ACP_MODEL"
|
|
20
21
|
protocol: "agent-client-protocol"
|
|
21
22
|
prompt_lenses:
|
|
22
23
|
- "base-audit"
|
|
@@ -42,6 +43,9 @@ provider_templates:
|
|
|
42
43
|
command: "aider"
|
|
43
44
|
mode: "review-only"
|
|
44
45
|
model_env: "AIDER_MODEL"
|
|
46
|
+
model_env_any:
|
|
47
|
+
- "CODE_MOWER_AIDER_MODEL"
|
|
48
|
+
- "AIDER_CHAT_MODEL"
|
|
45
49
|
api_base_env: "AIDER_API_BASE"
|
|
46
50
|
status: "optional tool lane; provider-specific invocation belongs in an adapter"
|
|
47
51
|
review_hygiene: {}
|
|
@@ -66,6 +70,8 @@ provider_templates:
|
|
|
66
70
|
- "antigravity"
|
|
67
71
|
command_env: "ANTIGRAVITY_CLI_COMMAND"
|
|
68
72
|
model_env: "ANTIGRAVITY_MODEL"
|
|
73
|
+
model_env_any:
|
|
74
|
+
- "CODE_MOWER_ANTIGRAVITY_MODEL"
|
|
69
75
|
prompt_lenses:
|
|
70
76
|
- "base-audit"
|
|
71
77
|
required_env_truthy:
|
|
@@ -161,6 +167,9 @@ provider_templates:
|
|
|
161
167
|
command: "coderabbit"
|
|
162
168
|
alternate_commands:
|
|
163
169
|
- "cr"
|
|
170
|
+
model_env_any:
|
|
171
|
+
- "CODE_MOWER_CODERABBIT_MODEL"
|
|
172
|
+
- "CODERABBIT_MODEL"
|
|
164
173
|
status: "optional CLI lane for local/on-demand review capture"
|
|
165
174
|
review_hygiene: {}
|
|
166
175
|
codex:
|
|
@@ -181,6 +190,10 @@ provider_templates:
|
|
|
181
190
|
trigger_policy: "label"
|
|
182
191
|
provider_config:
|
|
183
192
|
command: "codex"
|
|
193
|
+
model_env_any:
|
|
194
|
+
- "CODE_MOWER_CODEX_MODEL"
|
|
195
|
+
- "CODEX_MODEL"
|
|
196
|
+
- "OPENAI_MODEL"
|
|
184
197
|
doctor_probe_args:
|
|
185
198
|
- "--version"
|
|
186
199
|
review_hygiene:
|
|
@@ -253,6 +266,9 @@ provider_templates:
|
|
|
253
266
|
command: "gemini"
|
|
254
267
|
command_env: "GEMINI_CLI_COMMAND"
|
|
255
268
|
model_env: "GEMINI_MODEL"
|
|
269
|
+
model_env_any:
|
|
270
|
+
- "CODE_MOWER_GEMINI_MODEL"
|
|
271
|
+
- "GOOGLE_GENAI_MODEL"
|
|
256
272
|
prompt_lenses:
|
|
257
273
|
- "base-audit"
|
|
258
274
|
doctor_probe_args:
|
|
@@ -335,6 +351,9 @@ provider_templates:
|
|
|
335
351
|
command: "hermes"
|
|
336
352
|
command_env: "HERMES_CLI_COMMAND"
|
|
337
353
|
model_env: "HERMES_INFERENCE_MODEL"
|
|
354
|
+
model_env_any:
|
|
355
|
+
- "CODE_MOWER_HERMES_MODEL"
|
|
356
|
+
- "HERMES_MODEL"
|
|
338
357
|
provider_env: "HERMES_PROVIDER"
|
|
339
358
|
prompt_lenses:
|
|
340
359
|
- "base-audit"
|
|
@@ -365,6 +384,8 @@ provider_templates:
|
|
|
365
384
|
provider_config:
|
|
366
385
|
api_base_env: "LOCAL_LLM_API_BASE"
|
|
367
386
|
model_env: "LOCAL_LLM_MODEL"
|
|
387
|
+
model_env_any:
|
|
388
|
+
- "CODE_MOWER_LOCAL_LLM_MODEL"
|
|
368
389
|
bot_authors_env: "LOCAL_LLM_BOT_AUTHORS"
|
|
369
390
|
default_api_base: "http://localhost:1234/v1"
|
|
370
391
|
profile_env: "LOCAL_LLM_PROFILE"
|
|
@@ -277,6 +277,71 @@ def test_provenance_summary_treats_vendor_hidden_model_as_known_source() -> None
|
|
|
277
277
|
|
|
278
278
|
assert summary["events_with_model_provenance"] == 1
|
|
279
279
|
assert summary["events_missing_model_provenance"] == 0
|
|
280
|
+
assert summary["events_with_tool_version_provenance"] == 1
|
|
281
|
+
assert summary["events_missing_tool_version_provenance"] == 0
|
|
282
|
+
assert summary["tools"][0]["model_sources"] == ["vendor_hidden"]
|
|
283
|
+
assert summary["tools"][0]["version_sources"] == ["not_probed"]
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def test_provenance_summary_preserves_source_quality_fields() -> None:
|
|
287
|
+
summary = build_provenance_summary(
|
|
288
|
+
[
|
|
289
|
+
normalize_event(
|
|
290
|
+
{
|
|
291
|
+
"schema": EVENT_SCHEMA,
|
|
292
|
+
"event_id": "evt-code-mower",
|
|
293
|
+
"event_type": "dogfood_upload",
|
|
294
|
+
"created_at": "2026-01-01T00:00:00Z",
|
|
295
|
+
"repo_slug": "owner/repo",
|
|
296
|
+
"team_id": "team",
|
|
297
|
+
"install_id": "install",
|
|
298
|
+
"source": "unit-test",
|
|
299
|
+
"tool": {
|
|
300
|
+
"role": "reporter",
|
|
301
|
+
"tool_name": "code-mower",
|
|
302
|
+
"tool_version": "0.5.0b22",
|
|
303
|
+
"provider": "code-mower",
|
|
304
|
+
"model": "",
|
|
305
|
+
"model_source": "not_applicable",
|
|
306
|
+
"version_source": "package_version",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
"dogfood_upload",
|
|
310
|
+
),
|
|
311
|
+
normalize_event(
|
|
312
|
+
{
|
|
313
|
+
"schema": EVENT_SCHEMA,
|
|
314
|
+
"event_id": "evt-gemini",
|
|
315
|
+
"event_type": "provider_catalog_snapshot",
|
|
316
|
+
"created_at": "2026-01-01T00:00:00Z",
|
|
317
|
+
"repo_slug": "owner/repo",
|
|
318
|
+
"team_id": "team",
|
|
319
|
+
"install_id": "install",
|
|
320
|
+
"source": "unit-test",
|
|
321
|
+
"tool": {
|
|
322
|
+
"role": "reviewer",
|
|
323
|
+
"tool_name": "gemini",
|
|
324
|
+
"tool_version": "0.45.2",
|
|
325
|
+
"provider": "gemini",
|
|
326
|
+
"model": "",
|
|
327
|
+
"model_source": "missing",
|
|
328
|
+
"version_source": "cli_version_probe",
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
"provider_catalog_snapshot",
|
|
332
|
+
),
|
|
333
|
+
]
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
assert summary["events_with_model_provenance"] == 1
|
|
337
|
+
assert summary["events_missing_model_provenance"] == 1
|
|
338
|
+
assert summary["events_with_tool_version_provenance"] == 2
|
|
339
|
+
assert summary["events_missing_tool_version_provenance"] == 0
|
|
340
|
+
rows = {row["tool_name"]: row for row in summary["tools"]}
|
|
341
|
+
assert rows["code-mower"]["model_sources"] == ["not_applicable"]
|
|
342
|
+
assert rows["code-mower"]["version_sources"] == ["package_version"]
|
|
343
|
+
assert rows["gemini"]["model_sources"] == ["missing"]
|
|
344
|
+
assert rows["gemini"]["version_sources"] == ["cli_version_probe"]
|
|
280
345
|
|
|
281
346
|
|
|
282
347
|
def test_dogfood_dry_run_preserves_version_probe(monkeypatch, tmp_path: Path) -> None:
|