code-mower 0.5.0b5__py3-none-any.whl
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/__init__.py +3 -0
- code_mower/adapters/__init__.py +39 -0
- code_mower/adapters/_base.py +148 -0
- code_mower/adapters/cursor_bugbot.py +97 -0
- code_mower/adapters/gitar.py +111 -0
- code_mower/adapters/greptile.py +191 -0
- code_mower/adapters/qodo.py +140 -0
- code_mower/antigravity_cli_audit_pr.py +241 -0
- code_mower/audit_handoff_log.py +345 -0
- code_mower/audit_labeler_lib.py +311 -0
- code_mower/audit_progress.py +203 -0
- code_mower/blind_review_artifacts.py +562 -0
- code_mower/blind_review_coordinator.py +276 -0
- code_mower/bootstrap.py +524 -0
- code_mower/builder_experiment.py +539 -0
- code_mower/calibration/__init__.py +181 -0
- code_mower/calibration/arms.py +267 -0
- code_mower/calibration/auto_discovery.py +348 -0
- code_mower/calibration/commands.py +192 -0
- code_mower/calibration/context_inputs.py +199 -0
- code_mower/calibration/corpus.py +91 -0
- code_mower/calibration/evidence.py +20 -0
- code_mower/calibration/evidence_report.py +360 -0
- code_mower/calibration/identity.py +27 -0
- code_mower/calibration/metrics.py +18 -0
- code_mower/calibration/overlap.py +103 -0
- code_mower/calibration/planning.py +309 -0
- code_mower/calibration/policy.py +207 -0
- code_mower/calibration/results.py +315 -0
- code_mower/calibration/run_results.py +147 -0
- code_mower/calibration/run_status.py +64 -0
- code_mower/calibration/runner.py +360 -0
- code_mower/calibration/truth.py +188 -0
- code_mower/calibration/value_report.py +142 -0
- code_mower/checks.py +402 -0
- code_mower/claude_audit_pr.py +1126 -0
- code_mower/claude_cli_bounce.py +303 -0
- code_mower/claude_cli_environment.py +73 -0
- code_mower/clear_stale.py +374 -0
- code_mower/cli.py +537 -0
- code_mower/cloud.py +674 -0
- code_mower/cloud_client/__init__.py +173 -0
- code_mower/cloud_client/bundle.py +155 -0
- code_mower/cloud_client/doctor.py +206 -0
- code_mower/cloud_client/dogfood.py +78 -0
- code_mower/cloud_client/endpoints.py +114 -0
- code_mower/cloud_client/errors.py +7 -0
- code_mower/cloud_client/events.py +278 -0
- code_mower/cloud_client/export.py +272 -0
- code_mower/cloud_client/git_metadata.py +46 -0
- code_mower/cloud_client/manifest.py +39 -0
- code_mower/cloud_client/operations.py +448 -0
- code_mower/cloud_client/reports.py +45 -0
- code_mower/cloud_client/setup.py +205 -0
- code_mower/cloud_client/upload.py +97 -0
- code_mower/code_mower_calibration.py +598 -0
- code_mower/code_mower_context_packs.py +591 -0
- code_mower/code_mower_merge.py +227 -0
- code_mower/code_mower_telemetry.py +561 -0
- code_mower/coderabbit_cli_audit_pr.py +526 -0
- code_mower/codex_audit_env_preflight.py +220 -0
- code_mower/codex_audit_pr.py +1738 -0
- code_mower/codex_audit_schema_smoke.py +160 -0
- code_mower/codex_audit_verdict.schema.json +44 -0
- code_mower/config.py +655 -0
- code_mower/doctor.py +161 -0
- code_mower/doctor_checks/__init__.py +104 -0
- code_mower/doctor_checks/cloud.py +129 -0
- code_mower/doctor_checks/common.py +215 -0
- code_mower/doctor_checks/github.py +128 -0
- code_mower/doctor_checks/github_actions.py +11 -0
- code_mower/doctor_checks/github_actions_cost.py +99 -0
- code_mower/doctor_checks/github_actions_cost_summary.py +111 -0
- code_mower/doctor_checks/github_actions_failure_annotations.py +27 -0
- code_mower/doctor_checks/github_actions_failure_models.py +47 -0
- code_mower/doctor_checks/github_actions_failure_scan.py +200 -0
- code_mower/doctor_checks/github_actions_failure_selection.py +63 -0
- code_mower/doctor_checks/github_actions_failures.py +103 -0
- code_mower/doctor_checks/github_actions_permissions.py +55 -0
- code_mower/doctor_checks/github_api.py +79 -0
- code_mower/doctor_checks/github_branch.py +56 -0
- code_mower/doctor_checks/github_config.py +25 -0
- code_mower/doctor_checks/github_provider.py +61 -0
- code_mower/doctor_checks/github_repo.py +120 -0
- code_mower/doctor_checks/groups.py +36 -0
- code_mower/doctor_checks/models.py +96 -0
- code_mower/doctor_checks/output.py +86 -0
- code_mower/doctor_checks/presets.py +64 -0
- code_mower/doctor_checks/privacy.py +20 -0
- code_mower/doctor_checks/provider_api_model.py +138 -0
- code_mower/doctor_checks/provider_api_model_openai.py +29 -0
- code_mower/doctor_checks/provider_api_model_profiles.py +137 -0
- code_mower/doctor_checks/provider_env.py +113 -0
- code_mower/doctor_checks/provider_env_required.py +56 -0
- code_mower/doctor_checks/provider_env_tokens.py +100 -0
- code_mower/doctor_checks/provider_local_cli.py +162 -0
- code_mower/doctor_checks/provider_local_cli_commands.py +47 -0
- code_mower/doctor_checks/provider_local_cli_probe_config.py +70 -0
- code_mower/doctor_checks/provider_probe.py +20 -0
- code_mower/doctor_checks/provider_probe_auth.py +52 -0
- code_mower/doctor_checks/provider_probe_evaluation.py +109 -0
- code_mower/doctor_checks/provider_probe_json.py +45 -0
- code_mower/doctor_checks/provider_probe_remediation.py +39 -0
- code_mower/doctor_checks/providers.py +159 -0
- code_mower/doctor_checks/registry.py +69 -0
- code_mower/doctor_checks/runner.py +188 -0
- code_mower/doctor_checks/runtime.py +89 -0
- code_mower/doctor_checks/runtime_github_auth.py +148 -0
- code_mower/gemini_cli_audit_pr.py +897 -0
- code_mower/hermes_cli_audit_pr.py +436 -0
- code_mower/init.py +888 -0
- code_mower/lane_configs/__init__.py +37 -0
- code_mower/lane_configs/aider.py +32 -0
- code_mower/lane_configs/antigravity_cli.py +35 -0
- code_mower/lane_configs/claude.py +35 -0
- code_mower/lane_configs/codex.py +32 -0
- code_mower/lane_configs/devin.py +33 -0
- code_mower/lane_configs/gemini_cli.py +35 -0
- code_mower/lane_configs/hermes_cli.py +35 -0
- code_mower/lane_configs/local_llm.py +31 -0
- code_mower/local_llm_audit_pr.py +1364 -0
- code_mower/local_llm_bakeoff.py +458 -0
- code_mower/local_llm_calibration.py +441 -0
- code_mower/local_llm_profiles.py +66 -0
- code_mower/migration.py +508 -0
- code_mower/migration_install.py +292 -0
- code_mower/migration_mirror.py +392 -0
- code_mower/migration_readiness.py +237 -0
- code_mower/migration_rehearsal.py +718 -0
- code_mower/next_steps.py +441 -0
- code_mower/package.py +673 -0
- code_mower/package_content.py +444 -0
- code_mower/package_manifest.py +452 -0
- code_mower/package_paths.py +53 -0
- code_mower/package_rendering.py +90 -0
- code_mower/package_static.py +585 -0
- code_mower/prompts.py +267 -0
- code_mower/provider_registry.py +469 -0
- code_mower/provider_runners/__init__.py +60 -0
- code_mower/provider_runners/comments.py +31 -0
- code_mower/provider_runners/git.py +46 -0
- code_mower/provider_runners/github_auth.py +61 -0
- code_mower/provider_runners/github_pr.py +120 -0
- code_mower/provider_runners/process.py +58 -0
- code_mower/provider_runners/repo_paths.py +23 -0
- code_mower/provider_runners/text_schema.py +41 -0
- code_mower/provider_runners/verdict_artifacts.py +103 -0
- code_mower/provider_runners/workspace.py +57 -0
- code_mower/release_readiness.py +549 -0
- code_mower/reviewer_metrics.py +389 -0
- code_mower/saas_reviewer_labeler.py +809 -0
- code_mower/secrets.py +89 -0
- code_mower/templates/builder-experiment.example.json +55 -0
- code_mower/templates/calibration-corpus.example.json +129 -0
- code_mower/templates/calibration-corpus.json +129 -0
- code_mower/templates/code-mower.example.yml +423 -0
- code_mower/templates/context-packs.example.json +150 -0
- code_mower/templates/lane_prompts/base-audit.md +22 -0
- code_mower/templates/lane_prompts/calibration-policy.md +21 -0
- code_mower/templates/lane_prompts/context-driven-quality.md +21 -0
- code_mower/templates/lane_prompts/docs-design.md +12 -0
- code_mower/templates/lane_prompts/generic-programming.md +21 -0
- code_mower/templates/lane_prompts/operability.md +22 -0
- code_mower/templates/lane_prompts/package-runtime.md +12 -0
- code_mower/templates/lane_prompts/security-threat-model.md +22 -0
- code_mower/templates/product-support/code_mower +216 -0
- code_mower/templates/product-support/code_mower_standalone_pin.env +7 -0
- code_mower/templates/product-support/code_mower_standalone_shadow.sh +151 -0
- code_mower/templates/product-support/run_claude_audit_pr.sh +32 -0
- code_mower/templates/product-support/run_codex_audit_pr.sh +32 -0
- code_mower/templates/product-support/safe_gh_comment.py +96 -0
- code_mower/templates/providers.yml +454 -0
- code_mower/templates/reviewer-spend.example.json +28 -0
- code_mower/templates/reviewer-value-report.example.md +20 -0
- code_mower/templates/workflows/private-standalone-shadow.yml.j2 +106 -0
- code_mower/templates/workflows/review-clear-stale.yml.j2 +83 -0
- code_mower/trailer_comment_labeler.py +207 -0
- code_mower/versioning.py +32 -0
- code_mower-0.5.0b5.dist-info/METADATA +302 -0
- code_mower-0.5.0b5.dist-info/RECORD +185 -0
- code_mower-0.5.0b5.dist-info/WHEEL +5 -0
- code_mower-0.5.0b5.dist-info/entry_points.txt +2 -0
- code_mower-0.5.0b5.dist-info/licenses/LICENSE +202 -0
- code_mower-0.5.0b5.dist-info/licenses/NOTICE +10 -0
- code_mower-0.5.0b5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
provider_templates:
|
|
3
|
+
acp_bridge:
|
|
4
|
+
provider: "acp"
|
|
5
|
+
driver: "local_cli"
|
|
6
|
+
type: "audit"
|
|
7
|
+
adapter: null
|
|
8
|
+
trailer_lane: null
|
|
9
|
+
spend_policy: "none"
|
|
10
|
+
merge_authority: false
|
|
11
|
+
informational: true
|
|
12
|
+
enabled_by_default: false
|
|
13
|
+
events: []
|
|
14
|
+
token_env:
|
|
15
|
+
- "GITHUB_TOKEN"
|
|
16
|
+
token_env_any: []
|
|
17
|
+
trigger_policy: "manual"
|
|
18
|
+
provider_config:
|
|
19
|
+
command_env: "CODE_MOWER_ACP_COMMAND"
|
|
20
|
+
protocol: "agent-client-protocol"
|
|
21
|
+
prompt_lenses:
|
|
22
|
+
- "base-audit"
|
|
23
|
+
status: "protocol research lane; no automatic merge authority"
|
|
24
|
+
review_hygiene: {}
|
|
25
|
+
aider:
|
|
26
|
+
provider: "aider"
|
|
27
|
+
driver: "local_cli"
|
|
28
|
+
type: "audit"
|
|
29
|
+
adapter: null
|
|
30
|
+
trailer_lane: null
|
|
31
|
+
spend_policy: "local"
|
|
32
|
+
merge_authority: false
|
|
33
|
+
informational: true
|
|
34
|
+
enabled_by_default: false
|
|
35
|
+
events: []
|
|
36
|
+
token_env:
|
|
37
|
+
- "AIDER_AUDIT_LABEL_TOKEN"
|
|
38
|
+
- "GITHUB_TOKEN"
|
|
39
|
+
token_env_any: []
|
|
40
|
+
trigger_policy: "manual"
|
|
41
|
+
provider_config:
|
|
42
|
+
command: "aider"
|
|
43
|
+
mode: "review-only"
|
|
44
|
+
model_env: "AIDER_MODEL"
|
|
45
|
+
api_base_env: "AIDER_API_BASE"
|
|
46
|
+
status: "optional tool lane; provider-specific invocation belongs in an adapter"
|
|
47
|
+
review_hygiene: {}
|
|
48
|
+
antigravity_cli:
|
|
49
|
+
provider: "antigravity"
|
|
50
|
+
driver: "local_cli"
|
|
51
|
+
type: "audit"
|
|
52
|
+
adapter: null
|
|
53
|
+
trailer_lane: null
|
|
54
|
+
spend_policy: "included"
|
|
55
|
+
merge_authority: false
|
|
56
|
+
informational: true
|
|
57
|
+
enabled_by_default: false
|
|
58
|
+
events: []
|
|
59
|
+
token_env:
|
|
60
|
+
- "GITHUB_TOKEN"
|
|
61
|
+
token_env_any: []
|
|
62
|
+
trigger_policy: "manual"
|
|
63
|
+
provider_config:
|
|
64
|
+
command: "agy"
|
|
65
|
+
alternate_commands:
|
|
66
|
+
- "antigravity"
|
|
67
|
+
command_env: "ANTIGRAVITY_CLI_COMMAND"
|
|
68
|
+
model_env: "ANTIGRAVITY_MODEL"
|
|
69
|
+
prompt_lenses:
|
|
70
|
+
- "base-audit"
|
|
71
|
+
required_env_truthy:
|
|
72
|
+
- "ANTIGRAVITY_CLI_USE_AMBIENT_HOME"
|
|
73
|
+
doctor_probe_args:
|
|
74
|
+
- "--version"
|
|
75
|
+
auth: "run `agy` login/install locally; set ANTIGRAVITY_CLI_USE_AMBIENT_HOME=1 to opt into local OAuth state in trusted environments"
|
|
76
|
+
status: "forward Google CLI research lane; not merge authority until calibrated"
|
|
77
|
+
review_hygiene: {}
|
|
78
|
+
claude_audit:
|
|
79
|
+
provider: "claude"
|
|
80
|
+
driver: "local_cli"
|
|
81
|
+
type: "audit"
|
|
82
|
+
adapter: null
|
|
83
|
+
trailer_lane: "claude"
|
|
84
|
+
spend_policy: "included"
|
|
85
|
+
merge_authority: true
|
|
86
|
+
informational: false
|
|
87
|
+
enabled_by_default: true
|
|
88
|
+
events: []
|
|
89
|
+
token_env:
|
|
90
|
+
- "CLAUDE_AUDIT_LABEL_TOKEN"
|
|
91
|
+
- "GITHUB_TOKEN"
|
|
92
|
+
token_env_any: []
|
|
93
|
+
trigger_policy: "label"
|
|
94
|
+
provider_config:
|
|
95
|
+
command: "claude"
|
|
96
|
+
doctor_probe_args:
|
|
97
|
+
- "--print"
|
|
98
|
+
- "--output-format"
|
|
99
|
+
- "json"
|
|
100
|
+
- "--no-session-persistence"
|
|
101
|
+
- "--setting-sources"
|
|
102
|
+
- "local"
|
|
103
|
+
- "--strict-mcp-config"
|
|
104
|
+
- "--mcp-config"
|
|
105
|
+
- '{"mcpServers":{}}'
|
|
106
|
+
- "--disable-slash-commands"
|
|
107
|
+
- "--tools"
|
|
108
|
+
- ""
|
|
109
|
+
- "--model"
|
|
110
|
+
- "sonnet"
|
|
111
|
+
- "--max-budget-usd"
|
|
112
|
+
- "0.25"
|
|
113
|
+
- "Reply with exactly: ok"
|
|
114
|
+
doctor_probe_timeout_seconds: 30
|
|
115
|
+
doctor_probe_expect_json: true
|
|
116
|
+
doctor_probe_expect_json_field: "result"
|
|
117
|
+
doctor_probe_expect_json_value: "ok"
|
|
118
|
+
doctor_probe_error_fields:
|
|
119
|
+
- "is_error"
|
|
120
|
+
- "api_error_status"
|
|
121
|
+
doctor_probe_auth_status_fields:
|
|
122
|
+
- "api_error_status"
|
|
123
|
+
review_hygiene: {}
|
|
124
|
+
claude_review:
|
|
125
|
+
provider: "claude"
|
|
126
|
+
driver: "manual"
|
|
127
|
+
type: "review"
|
|
128
|
+
adapter: null
|
|
129
|
+
trailer_lane: null
|
|
130
|
+
spend_policy: "none"
|
|
131
|
+
merge_authority: false
|
|
132
|
+
informational: true
|
|
133
|
+
enabled_by_default: true
|
|
134
|
+
events: []
|
|
135
|
+
token_env:
|
|
136
|
+
- "CLAUDE_REVIEW_LABEL_TOKEN"
|
|
137
|
+
token_env_any: []
|
|
138
|
+
trigger_policy: "manual"
|
|
139
|
+
provider_config: {}
|
|
140
|
+
review_hygiene: {}
|
|
141
|
+
coderabbit_cli:
|
|
142
|
+
provider: "coderabbit"
|
|
143
|
+
driver: "local_cli"
|
|
144
|
+
type: "audit"
|
|
145
|
+
adapter: null
|
|
146
|
+
trailer_lane: null
|
|
147
|
+
spend_policy: "included"
|
|
148
|
+
merge_authority: false
|
|
149
|
+
informational: true
|
|
150
|
+
enabled_by_default: false
|
|
151
|
+
events: []
|
|
152
|
+
token_env:
|
|
153
|
+
- "GITHUB_TOKEN"
|
|
154
|
+
token_env_any: []
|
|
155
|
+
trigger_policy: "manual"
|
|
156
|
+
provider_config:
|
|
157
|
+
command: "coderabbit"
|
|
158
|
+
alternate_commands:
|
|
159
|
+
- "cr"
|
|
160
|
+
status: "optional CLI lane for local/on-demand review capture"
|
|
161
|
+
review_hygiene: {}
|
|
162
|
+
codex:
|
|
163
|
+
provider: "codex"
|
|
164
|
+
driver: "local_cli"
|
|
165
|
+
type: "audit"
|
|
166
|
+
adapter: null
|
|
167
|
+
trailer_lane: null
|
|
168
|
+
spend_policy: "included"
|
|
169
|
+
merge_authority: true
|
|
170
|
+
informational: false
|
|
171
|
+
enabled_by_default: true
|
|
172
|
+
events: []
|
|
173
|
+
token_env:
|
|
174
|
+
- "CODEX_AUDIT_LABEL_TOKEN"
|
|
175
|
+
- "GITHUB_TOKEN"
|
|
176
|
+
token_env_any: []
|
|
177
|
+
trigger_policy: "label"
|
|
178
|
+
provider_config:
|
|
179
|
+
command: "codex"
|
|
180
|
+
doctor_probe_args:
|
|
181
|
+
- "--version"
|
|
182
|
+
review_hygiene: {}
|
|
183
|
+
cursor_bugbot:
|
|
184
|
+
provider: "cursor_bugbot"
|
|
185
|
+
driver: "saas_event"
|
|
186
|
+
type: "audit"
|
|
187
|
+
adapter: "cursor_bugbot"
|
|
188
|
+
trailer_lane: null
|
|
189
|
+
spend_policy: "paid"
|
|
190
|
+
merge_authority: false
|
|
191
|
+
informational: true
|
|
192
|
+
enabled_by_default: false
|
|
193
|
+
events:
|
|
194
|
+
- "issue_comment"
|
|
195
|
+
token_env:
|
|
196
|
+
- "CURSOR_BUGBOT_AUDIT_LABEL_TOKEN"
|
|
197
|
+
- "GITHUB_TOKEN"
|
|
198
|
+
token_env_any: []
|
|
199
|
+
trigger_policy: "manual"
|
|
200
|
+
provider_config:
|
|
201
|
+
bot_authors:
|
|
202
|
+
- "cursor[bot]"
|
|
203
|
+
- "cursor"
|
|
204
|
+
trigger_comments:
|
|
205
|
+
- "bugbot run"
|
|
206
|
+
- "@cursor review"
|
|
207
|
+
rules_file: ".cursor/BUGBOT.md"
|
|
208
|
+
status: "manual informational lane; keep calibration-only until enabled BugBot output shape is captured and adjudicated"
|
|
209
|
+
review_hygiene: {}
|
|
210
|
+
devin:
|
|
211
|
+
provider: "devin"
|
|
212
|
+
driver: "hosted_bridge"
|
|
213
|
+
type: "audit"
|
|
214
|
+
adapter: null
|
|
215
|
+
trailer_lane: null
|
|
216
|
+
spend_policy: "paid"
|
|
217
|
+
merge_authority: true
|
|
218
|
+
informational: false
|
|
219
|
+
enabled_by_default: false
|
|
220
|
+
events: []
|
|
221
|
+
token_env:
|
|
222
|
+
- "DEVIN_AUDIT_LABEL_TOKEN"
|
|
223
|
+
- "GITHUB_TOKEN"
|
|
224
|
+
token_env_any: []
|
|
225
|
+
trigger_policy: "manual"
|
|
226
|
+
provider_config: {}
|
|
227
|
+
review_hygiene:
|
|
228
|
+
workflow: ".github/workflows/devin-clear-stale.yml"
|
|
229
|
+
token_env: "GITHUB_TOKEN"
|
|
230
|
+
gemini_cli:
|
|
231
|
+
provider: "gemini"
|
|
232
|
+
driver: "local_cli"
|
|
233
|
+
type: "audit"
|
|
234
|
+
adapter: null
|
|
235
|
+
trailer_lane: null
|
|
236
|
+
spend_policy: "included"
|
|
237
|
+
merge_authority: false
|
|
238
|
+
informational: true
|
|
239
|
+
enabled_by_default: false
|
|
240
|
+
events: []
|
|
241
|
+
token_env:
|
|
242
|
+
- "GITHUB_TOKEN"
|
|
243
|
+
token_env_any:
|
|
244
|
+
- ["GEMINI_API_KEY", "GOOGLE_API_KEY"]
|
|
245
|
+
trigger_policy: "manual"
|
|
246
|
+
provider_config:
|
|
247
|
+
command: "gemini"
|
|
248
|
+
command_env: "GEMINI_CLI_COMMAND"
|
|
249
|
+
model_env: "GEMINI_MODEL"
|
|
250
|
+
prompt_lenses:
|
|
251
|
+
- "base-audit"
|
|
252
|
+
doctor_probe_args:
|
|
253
|
+
- "-p"
|
|
254
|
+
- "Reply with exactly: ok"
|
|
255
|
+
- "--output-format"
|
|
256
|
+
- "json"
|
|
257
|
+
- "--skip-trust"
|
|
258
|
+
doctor_probe_timeout_seconds: 45
|
|
259
|
+
doctor_probe_expect_json: true
|
|
260
|
+
doctor_probe_expect_json_field: "response"
|
|
261
|
+
doctor_probe_expect_json_value: "ok"
|
|
262
|
+
status: "optional third-peer CLI lane; not merge authority until calibrated"
|
|
263
|
+
review_hygiene: {}
|
|
264
|
+
gitar:
|
|
265
|
+
provider: "gitar"
|
|
266
|
+
driver: "saas_event"
|
|
267
|
+
type: "audit"
|
|
268
|
+
adapter: "gitar"
|
|
269
|
+
trailer_lane: null
|
|
270
|
+
spend_policy: "included"
|
|
271
|
+
merge_authority: false
|
|
272
|
+
informational: true
|
|
273
|
+
enabled_by_default: true
|
|
274
|
+
events:
|
|
275
|
+
- "issue_comment"
|
|
276
|
+
token_env:
|
|
277
|
+
- "GITAR_AUDIT_LABEL_TOKEN"
|
|
278
|
+
- "GITHUB_TOKEN"
|
|
279
|
+
token_env_any: []
|
|
280
|
+
trigger_policy: "label"
|
|
281
|
+
provider_config:
|
|
282
|
+
bot_authors:
|
|
283
|
+
- "gitar-ai[bot]"
|
|
284
|
+
- "gitar-bot"
|
|
285
|
+
- "gitar-bot[bot]"
|
|
286
|
+
review_hygiene: {}
|
|
287
|
+
greptile:
|
|
288
|
+
provider: "greptile"
|
|
289
|
+
driver: "saas_event"
|
|
290
|
+
type: "audit"
|
|
291
|
+
adapter: "greptile"
|
|
292
|
+
trailer_lane: null
|
|
293
|
+
spend_policy: "paid"
|
|
294
|
+
merge_authority: false
|
|
295
|
+
informational: true
|
|
296
|
+
enabled_by_default: true
|
|
297
|
+
events:
|
|
298
|
+
- "pull_request_review"
|
|
299
|
+
- "check_run"
|
|
300
|
+
token_env:
|
|
301
|
+
- "GREPTILE_AUDIT_LABEL_TOKEN"
|
|
302
|
+
- "GITHUB_TOKEN"
|
|
303
|
+
token_env_any: []
|
|
304
|
+
trigger_policy: "label"
|
|
305
|
+
provider_config:
|
|
306
|
+
bot_authors:
|
|
307
|
+
- "greptile-apps[bot]"
|
|
308
|
+
- "greptile-apps"
|
|
309
|
+
check_runs:
|
|
310
|
+
- app_slug: "greptile-apps"
|
|
311
|
+
name: "Greptile Review"
|
|
312
|
+
review_hygiene: {}
|
|
313
|
+
hermes_cli:
|
|
314
|
+
provider: "hermes"
|
|
315
|
+
driver: "local_cli"
|
|
316
|
+
type: "audit"
|
|
317
|
+
adapter: null
|
|
318
|
+
trailer_lane: null
|
|
319
|
+
spend_policy: "included"
|
|
320
|
+
merge_authority: false
|
|
321
|
+
informational: true
|
|
322
|
+
enabled_by_default: false
|
|
323
|
+
events: []
|
|
324
|
+
token_env:
|
|
325
|
+
- "GITHUB_TOKEN"
|
|
326
|
+
token_env_any: []
|
|
327
|
+
trigger_policy: "manual"
|
|
328
|
+
provider_config:
|
|
329
|
+
command: "hermes"
|
|
330
|
+
command_env: "HERMES_CLI_COMMAND"
|
|
331
|
+
model_env: "HERMES_INFERENCE_MODEL"
|
|
332
|
+
provider_env: "HERMES_PROVIDER"
|
|
333
|
+
prompt_lenses:
|
|
334
|
+
- "base-audit"
|
|
335
|
+
required_env_truthy:
|
|
336
|
+
- "HERMES_CLI_USE_AMBIENT_HOME"
|
|
337
|
+
doctor_probe_args:
|
|
338
|
+
- "--version"
|
|
339
|
+
auth: "run `hermes setup` or provider login locally; set HERMES_CLI_USE_AMBIENT_HOME=1 to opt into local Hermes auth/session state in trusted environments"
|
|
340
|
+
status: "informational Hermes Agent one-shot lane; not merge authority until calibrated"
|
|
341
|
+
review_hygiene: {}
|
|
342
|
+
local_llm:
|
|
343
|
+
provider: "openai_compatible"
|
|
344
|
+
driver: "api_model"
|
|
345
|
+
type: "audit"
|
|
346
|
+
adapter: null
|
|
347
|
+
trailer_lane: null
|
|
348
|
+
spend_policy: "local"
|
|
349
|
+
merge_authority: false
|
|
350
|
+
informational: true
|
|
351
|
+
enabled_by_default: false
|
|
352
|
+
events: []
|
|
353
|
+
token_env:
|
|
354
|
+
- "LOCAL_LLM_AUDIT_LABEL_TOKEN"
|
|
355
|
+
- "LOCAL_LLM_API_KEY"
|
|
356
|
+
- "GITHUB_TOKEN"
|
|
357
|
+
token_env_any: []
|
|
358
|
+
trigger_policy: "manual"
|
|
359
|
+
provider_config:
|
|
360
|
+
api_base_env: "LOCAL_LLM_API_BASE"
|
|
361
|
+
model_env: "LOCAL_LLM_MODEL"
|
|
362
|
+
bot_authors_env: "LOCAL_LLM_BOT_AUTHORS"
|
|
363
|
+
default_api_base: "http://localhost:1234/v1"
|
|
364
|
+
profile_env: "LOCAL_LLM_PROFILE"
|
|
365
|
+
profiles:
|
|
366
|
+
qwen3-coder-next-lmstudio:
|
|
367
|
+
api_base: "http://localhost:1234/v1"
|
|
368
|
+
model: "qwen/qwen3-coder-next"
|
|
369
|
+
context_window: "128000"
|
|
370
|
+
endpoint: "lmstudio"
|
|
371
|
+
gemma4-ollama:
|
|
372
|
+
api_base: "http://localhost:11434/v1"
|
|
373
|
+
model: "gemma4:e4b-mlx"
|
|
374
|
+
context_window: "128000"
|
|
375
|
+
endpoint: "ollama"
|
|
376
|
+
status: "informational calibration lane, not merge authority"
|
|
377
|
+
review_hygiene: {}
|
|
378
|
+
qodo:
|
|
379
|
+
provider: "qodo"
|
|
380
|
+
driver: "saas_event"
|
|
381
|
+
type: "audit"
|
|
382
|
+
adapter: "qodo"
|
|
383
|
+
trailer_lane: null
|
|
384
|
+
spend_policy: "paid"
|
|
385
|
+
merge_authority: false
|
|
386
|
+
informational: true
|
|
387
|
+
enabled_by_default: false
|
|
388
|
+
events:
|
|
389
|
+
- "issue_comment"
|
|
390
|
+
token_env:
|
|
391
|
+
- "QODO_AUDIT_LABEL_TOKEN"
|
|
392
|
+
- "GITHUB_TOKEN"
|
|
393
|
+
token_env_any: []
|
|
394
|
+
trigger_policy: "manual"
|
|
395
|
+
provider_config:
|
|
396
|
+
bot_authors:
|
|
397
|
+
- "qodo-code-review[bot]"
|
|
398
|
+
- "qodo-code-review"
|
|
399
|
+
spend_policy: "never trigger automatically from generated workflows"
|
|
400
|
+
review_hygiene: {}
|
|
401
|
+
profiles:
|
|
402
|
+
recommended:
|
|
403
|
+
description: "Fast path for most teams; two local CLI peers plus an always-on advisory SaaS reviewer."
|
|
404
|
+
lanes:
|
|
405
|
+
- "codex"
|
|
406
|
+
- "claude_audit"
|
|
407
|
+
- "gitar"
|
|
408
|
+
source: "repo"
|
|
409
|
+
public_oss:
|
|
410
|
+
description: "Public repository starter; use recommended today, swap Gitar for CodeRabbit once the CodeRabbit adapter lands."
|
|
411
|
+
lanes:
|
|
412
|
+
- "codex"
|
|
413
|
+
- "claude_audit"
|
|
414
|
+
- "gitar"
|
|
415
|
+
source: "repo"
|
|
416
|
+
deep_review:
|
|
417
|
+
description: "Higher-scrutiny private repository profile; Greptile remains opt-in and informational to avoid surprise spend."
|
|
418
|
+
lanes:
|
|
419
|
+
- "codex"
|
|
420
|
+
- "claude_audit"
|
|
421
|
+
- "greptile"
|
|
422
|
+
source: "repo"
|
|
423
|
+
privacy:
|
|
424
|
+
description: "Experimental low-cost/private calibration floor; local LLM is informational only until false-positive rates are measured."
|
|
425
|
+
lanes:
|
|
426
|
+
- "local_llm"
|
|
427
|
+
source: "repo"
|
|
428
|
+
tool_lane:
|
|
429
|
+
description: "Optional local tool-lane proof; Aider stays manual and informational until its review adapter is calibrated."
|
|
430
|
+
lanes:
|
|
431
|
+
- "aider"
|
|
432
|
+
source: "repo"
|
|
433
|
+
third_peer:
|
|
434
|
+
description: "Optional third local CLI reviewer calibration profile; Google and Hermes CLI lanes stay informational until catch rate and false positives are measured."
|
|
435
|
+
lanes:
|
|
436
|
+
- "antigravity_cli"
|
|
437
|
+
- "gemini_cli"
|
|
438
|
+
- "hermes_cli"
|
|
439
|
+
source: "repo"
|
|
440
|
+
cli_research:
|
|
441
|
+
description: "Optional local CLI and protocol research profile; use for on-demand review capture, not routine merge gates."
|
|
442
|
+
lanes:
|
|
443
|
+
- "antigravity_cli"
|
|
444
|
+
- "gemini_cli"
|
|
445
|
+
- "hermes_cli"
|
|
446
|
+
- "coderabbit_cli"
|
|
447
|
+
- "acp_bridge"
|
|
448
|
+
source: "repo"
|
|
449
|
+
saas_research:
|
|
450
|
+
description: "Optional manually triggered SaaS reviewer calibration profile; use for capture and value reports, not merge gates."
|
|
451
|
+
lanes:
|
|
452
|
+
- "cursor_bugbot"
|
|
453
|
+
- "qodo"
|
|
454
|
+
source: "repo"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"profiles": {
|
|
3
|
+
"codex-audit": {
|
|
4
|
+
"cost_usd": 0.0,
|
|
5
|
+
"notes": "Set to the incremental cost you want attributed to this calibration batch."
|
|
6
|
+
},
|
|
7
|
+
"claude-audit": {
|
|
8
|
+
"cost_usd": 0.0,
|
|
9
|
+
"notes": "Use your team's billing export or a conservative estimate."
|
|
10
|
+
},
|
|
11
|
+
"gemini-cli": {
|
|
12
|
+
"cost_usd": 0.42,
|
|
13
|
+
"notes": "Example value only. Replace with the cost of the run-results batch."
|
|
14
|
+
},
|
|
15
|
+
"coderabbit-cli": {
|
|
16
|
+
"cost_usd": 0.0,
|
|
17
|
+
"notes": "Often a wrapper around account-level billing; record incremental cost if known."
|
|
18
|
+
},
|
|
19
|
+
"qwen3-coder-next-lmstudio": {
|
|
20
|
+
"cost_usd": 0.0,
|
|
21
|
+
"notes": "Local model run; track hardware or opportunity cost separately if useful."
|
|
22
|
+
},
|
|
23
|
+
"gemma4-ollama": {
|
|
24
|
+
"cost_usd": 0.0,
|
|
25
|
+
"notes": "Local model run; track hardware or opportunity cost separately if useful."
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Code Mower Reviewer Value Report
|
|
2
|
+
|
|
3
|
+
Corpus: `small-known-pr-pilot`
|
|
4
|
+
Items: 5
|
|
5
|
+
Adjudicated evidence: 0
|
|
6
|
+
Finding evidence: 0
|
|
7
|
+
Run dispositions: 0
|
|
8
|
+
Reviewer runs: 1
|
|
9
|
+
|
|
10
|
+
| Reviewer | Runs | Useful | Negative | Useful rate | Known-clean pass | Known-blocked caught/missed | Infra errors | Input gaps | Cost | Sec/run | Cost/useful | Policy | Recommended role |
|
|
11
|
+
| --- | ---: | ---: | ---: | ---: | ---: | --- | ---: | ---: | ---: | ---: | ---: | --- | --- |
|
|
12
|
+
| `codex-audit` | 1 | 0 | 0 | | 1 | 0/0 | 0 | 0 | 0.0 | 120.0 | | `informational` | `informational` |
|
|
13
|
+
|
|
14
|
+
## Recommendations
|
|
15
|
+
- codex-audit: collect human dispositions before comparing reviewer accuracy.
|
|
16
|
+
|
|
17
|
+
## Policy Reasons
|
|
18
|
+
- `codex-audit`: `informational` / `informational` / `manual_or_calibration_only` - needs at least 10 adjudicated findings; needs at least 2 known-clean zero-blocker runs; useful-rate below selective-trigger threshold
|
|
19
|
+
|
|
20
|
+
_Caveat: This is a policy recommendation from calibration evidence, not an automatic repository merge-rule change._
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
name: Code Mower standalone shadow
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- "tools/code_mower"
|
|
7
|
+
- "tools/code_mower_standalone_shadow.sh"
|
|
8
|
+
- "tools/code_mower_standalone_pin.env"
|
|
9
|
+
- "tools/code_mower_*.py"
|
|
10
|
+
- "tools/CODE_MOWER*.md"
|
|
11
|
+
- "code-mower*.yml"
|
|
12
|
+
- ".github/workflows/code-mower-standalone-shadow.yml"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
env:
|
|
19
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
|
20
|
+
CODE_MOWER_STANDALONE_REPO_URL: {{ code_mower_standalone_repo_url | default('https://github.com/OWNER/code-mower.git', true) }}
|
|
21
|
+
CODE_MOWER_STANDALONE_PACKAGE_REPO_URL: {{ code_mower_standalone_package_repo_url | default('git+ssh://git@github.com/OWNER/code-mower.git', true) }}
|
|
22
|
+
CODE_MOWER_STANDALONE_REINSTALL: "1"
|
|
23
|
+
CODE_MOWER_BOOTSTRAP_PYTHON: python3
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
shadow:
|
|
27
|
+
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
timeout-minutes: 10
|
|
30
|
+
steps:
|
|
31
|
+
- name: Check out product repo
|
|
32
|
+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
|
|
33
|
+
with:
|
|
34
|
+
persist-credentials: false
|
|
35
|
+
|
|
36
|
+
- name: Configure Code Mower deploy key
|
|
37
|
+
shell: bash
|
|
38
|
+
env:
|
|
39
|
+
CODE_MOWER_STANDALONE_DEPLOY_KEY: {% raw %}${{ secrets.CODE_MOWER_STANDALONE_DEPLOY_KEY }}{% endraw %}
|
|
40
|
+
run: |
|
|
41
|
+
set -euo pipefail
|
|
42
|
+
if [ -z "${CODE_MOWER_STANDALONE_DEPLOY_KEY}" ]; then
|
|
43
|
+
echo "::error::Missing CODE_MOWER_STANDALONE_DEPLOY_KEY. Add a read-only deploy key for the configured Code Mower standalone repository to this repository's Actions secrets."
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
install -m 700 -d ~/.ssh
|
|
47
|
+
printf '%s\n' "${CODE_MOWER_STANDALONE_DEPLOY_KEY}" > ~/.ssh/code_mower_standalone
|
|
48
|
+
chmod 600 ~/.ssh/code_mower_standalone
|
|
49
|
+
ssh-keyscan github.com > ~/.ssh/known_hosts
|
|
50
|
+
cat > ~/.ssh/config <<'EOF'
|
|
51
|
+
Host github.com
|
|
52
|
+
IdentityFile ~/.ssh/code_mower_standalone
|
|
53
|
+
IdentitiesOnly yes
|
|
54
|
+
StrictHostKeyChecking yes
|
|
55
|
+
EOF
|
|
56
|
+
chmod 600 ~/.ssh/config
|
|
57
|
+
|
|
58
|
+
- name: Run standalone wrapper shadow proof
|
|
59
|
+
shell: bash
|
|
60
|
+
run: |
|
|
61
|
+
set -euo pipefail
|
|
62
|
+
mkdir -p .code-mower
|
|
63
|
+
tools/code_mower --version
|
|
64
|
+
tools/code_mower doctor --easy --json | tee .code-mower/standalone-doctor.json
|
|
65
|
+
tools/code_mower migration wrapper-rehearsal \
|
|
66
|
+
--repo-path "$GITHUB_WORKSPACE" \
|
|
67
|
+
--local-command "env CODE_MOWER_USE_LOCAL=1 tools/code_mower" \
|
|
68
|
+
--package-command "tools/code_mower" \
|
|
69
|
+
--timeout 120 \
|
|
70
|
+
--json | tee .code-mower/standalone-wrapper-rehearsal.json
|
|
71
|
+
code_mower_ref="${CODE_MOWER_STANDALONE_REF:-}"
|
|
72
|
+
if [ -z "${code_mower_ref}" ]; then
|
|
73
|
+
code_mower_ref="$(sed -n 's/^CODE_MOWER_STANDALONE_REF="\([^"]*\)"/\1/p' tools/code_mower_standalone_pin.env)"
|
|
74
|
+
fi
|
|
75
|
+
if [ -z "${code_mower_ref}" ]; then
|
|
76
|
+
echo "::error::tools/code_mower_standalone_pin.env does not define CODE_MOWER_STANDALONE_REF"
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
if [ "${code_mower_ref}" = "<pin-a-reviewed-code-mower-commit-or-tag>" ]; then
|
|
80
|
+
echo "::error::replace the placeholder CODE_MOWER_STANDALONE_REF before package-install rehearsal"
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
if [ "${CODE_MOWER_STANDALONE_PACKAGE_REPO_URL:-}" = "" ] || [ "${CODE_MOWER_STANDALONE_PACKAGE_REPO_URL}" = "git+ssh://git@github.com/OWNER/code-mower.git" ]; then
|
|
84
|
+
echo "::error::replace CODE_MOWER_STANDALONE_PACKAGE_REPO_URL with a pip-installable Code Mower package source"
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
package_spec="${CODE_MOWER_STANDALONE_PACKAGE_REPO_URL}@${code_mower_ref}"
|
|
88
|
+
tools/code_mower migration package-install-rehearsal \
|
|
89
|
+
--package-spec "$package_spec" \
|
|
90
|
+
--repo-path "$GITHUB_WORKSPACE" \
|
|
91
|
+
--local-command "env CODE_MOWER_USE_LOCAL=1 tools/code_mower" \
|
|
92
|
+
--work-dir "$GITHUB_WORKSPACE/.code-mower/package-install-rehearsal" \
|
|
93
|
+
--timeout 180 \
|
|
94
|
+
--json | tee .code-mower/package-install-rehearsal.json
|
|
95
|
+
|
|
96
|
+
- name: Upload shadow proof artifacts
|
|
97
|
+
if: always()
|
|
98
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
|
|
99
|
+
with:
|
|
100
|
+
name: code-mower-standalone-shadow
|
|
101
|
+
path: |
|
|
102
|
+
.code-mower/standalone-doctor.json
|
|
103
|
+
.code-mower/standalone-wrapper-rehearsal.json
|
|
104
|
+
.code-mower/package-install-rehearsal.json
|
|
105
|
+
if-no-files-found: ignore
|
|
106
|
+
retention-days: 7
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Code Mower workflow template: clear stale terminal audit labels on new commits.
|
|
2
|
+
#
|
|
3
|
+
# Defaults to the Devin lane because hosted/paid lanes are the most likely to
|
|
4
|
+
# need explicit re-dispatch. Change CLEAR_STALE_LANE or generate one workflow
|
|
5
|
+
# per merge-authority lane.
|
|
6
|
+
name: Code Mower Clear Stale Audits
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
pull_request_target:
|
|
10
|
+
types: [synchronize]
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
inputs:
|
|
13
|
+
lane:
|
|
14
|
+
description: "Code Mower trailer lane, for example devin"
|
|
15
|
+
required: false
|
|
16
|
+
default: "devin"
|
|
17
|
+
pr:
|
|
18
|
+
description: "Pull request number for manual runs"
|
|
19
|
+
required: false
|
|
20
|
+
head_sha:
|
|
21
|
+
description: "Current PR head SHA for manual runs"
|
|
22
|
+
required: false
|
|
23
|
+
|
|
24
|
+
permissions:
|
|
25
|
+
actions: write
|
|
26
|
+
contents: read
|
|
27
|
+
issues: write
|
|
28
|
+
pull-requests: read
|
|
29
|
+
|
|
30
|
+
concurrency:
|
|
31
|
+
group: {% raw %}code-mower-clear-stale-${{ github.event.pull_request.number || github.event.inputs.pr || github.run_id }}{% endraw %}
|
|
32
|
+
cancel-in-progress: true
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
clear-stale:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
env:
|
|
38
|
+
CLEAR_STALE_LANE: {% raw %}${{ github.event.inputs.lane || 'devin' }}{% endraw %}
|
|
39
|
+
CLEAR_STALE_PR: {% raw %}${{ github.event.pull_request.number || github.event.inputs.pr }}{% endraw %}
|
|
40
|
+
CLEAR_STALE_HEAD_SHA: {% raw %}${{ github.event.pull_request.head.sha || github.event.inputs.head_sha }}{% endraw %}
|
|
41
|
+
# Optional: dispatch the paid/hosted audit bridge directly when this
|
|
42
|
+
# command adds a fresh needs-* label. Keep unset for label-only requeue.
|
|
43
|
+
# CLEAR_STALE_DISPATCH_WORKFLOW: devin-audit-bridge.yml
|
|
44
|
+
# CLEAR_STALE_DISPATCH_REF: main
|
|
45
|
+
# CLEAR_STALE_DISPATCH_INPUTS: |
|
|
46
|
+
# pr_number={pr}
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
|
|
49
|
+
with:
|
|
50
|
+
persist-credentials: false
|
|
51
|
+
|
|
52
|
+
- name: Clear stale Code Mower audit labels
|
|
53
|
+
env:
|
|
54
|
+
GITHUB_TOKEN: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %}
|
|
55
|
+
run: |
|
|
56
|
+
set -euo pipefail
|
|
57
|
+
|
|
58
|
+
if [ -z "${CLEAR_STALE_PR:-}" ] || [ -z "${CLEAR_STALE_HEAD_SHA:-}" ]; then
|
|
59
|
+
echo "::notice::No PR/head SHA available for stale-label cleanup; skipping."
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
extra_args=()
|
|
64
|
+
if [ -n "${CLEAR_STALE_DISPATCH_WORKFLOW:-}" ]; then
|
|
65
|
+
extra_args+=(--dispatch-workflow "${CLEAR_STALE_DISPATCH_WORKFLOW}")
|
|
66
|
+
fi
|
|
67
|
+
if [ -n "${CLEAR_STALE_DISPATCH_REF:-}" ]; then
|
|
68
|
+
extra_args+=(--dispatch-ref "${CLEAR_STALE_DISPATCH_REF}")
|
|
69
|
+
fi
|
|
70
|
+
if [ -n "${CLEAR_STALE_DISPATCH_INPUTS:-}" ]; then
|
|
71
|
+
while IFS= read -r dispatch_input; do
|
|
72
|
+
[ -n "${dispatch_input}" ] || continue
|
|
73
|
+
extra_args+=(--dispatch-input "${dispatch_input}")
|
|
74
|
+
done <<< "${CLEAR_STALE_DISPATCH_INPUTS}"
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
tools/code_mower clear-stale \
|
|
78
|
+
--lane "${CLEAR_STALE_LANE}" \
|
|
79
|
+
--repo "${GITHUB_REPOSITORY}" \
|
|
80
|
+
--pr "${CLEAR_STALE_PR}" \
|
|
81
|
+
--head-sha "${CLEAR_STALE_HEAD_SHA}" \
|
|
82
|
+
--json \
|
|
83
|
+
"${extra_args[@]}"
|