jonah-fleet 1.30.1 → 1.30.2
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.
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/templates/scripts/run-with-loop-guard.js +5 -0
- package/templates/workflows/analytics-review-cron.yml +19 -6
- package/templates/workflows/autowork-cron.yml +20 -7
- package/templates/workflows/dependency-check-cron.yml +18 -5
- package/templates/workflows/issues-housekeeping-cron.yml +18 -5
- package/templates/workflows/prompt-optimizer-cron.yml +19 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to `jonah-fleet` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.30.2](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.1...v1.30.2) (2026-09-30)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **workflows:** respect routine toggle flags in agents-manifest.json during scheduled cron runs ([#509](https://github.com/Jonah-Projects/jonah-fleet/issues/509)) ([dfb188a](https://github.com/Jonah-Projects/jonah-fleet/commit/dfb188a7a4189875e6fb61efb8ea0f0093bbed65))
|
|
14
|
+
|
|
8
15
|
## [1.30.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.0...v1.30.1) (2026-09-25)
|
|
9
16
|
|
|
10
17
|
|
package/package.json
CHANGED
|
@@ -453,6 +453,11 @@ async function main() {
|
|
|
453
453
|
}
|
|
454
454
|
} else if (parsed.event === 'result' && parsed.result?.response) {
|
|
455
455
|
console.log(`\n${parsed.result.response}\n`);
|
|
456
|
+
} else if (parsed.event === 'error' || parsed.error) {
|
|
457
|
+
const errMsg =
|
|
458
|
+
parsed.error?.message ||
|
|
459
|
+
(typeof parsed.error === 'string' ? parsed.error : JSON.stringify(parsed.error || parsed));
|
|
460
|
+
console.error(`\n[agent:error] ${errMsg}`);
|
|
456
461
|
}
|
|
457
462
|
return;
|
|
458
463
|
}
|
|
@@ -128,6 +128,7 @@ jobs:
|
|
|
128
128
|
|
|
129
129
|
MODEL="$DEFAULT_MODEL"
|
|
130
130
|
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
131
|
+
ENABLED="true"
|
|
131
132
|
|
|
132
133
|
if [ -f "agents-manifest.json" ]; then
|
|
133
134
|
CONFIG_JSON=$(node -e '
|
|
@@ -137,14 +138,16 @@ jobs:
|
|
|
137
138
|
const r = process.argv[1];
|
|
138
139
|
const model = m.models?.[r] || m.models?.default;
|
|
139
140
|
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
140
|
-
|
|
141
|
+
const enabled = m.routines?.[r] !== false;
|
|
142
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "", enabled }));
|
|
141
143
|
} catch (e) {
|
|
142
|
-
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
144
|
+
console.log(JSON.stringify({ model: "", timeout: "", enabled: true }));
|
|
143
145
|
}
|
|
144
146
|
' "$ROUTINE")
|
|
145
147
|
|
|
146
148
|
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
147
149
|
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
150
|
+
RESOLVED_ENABLED=$(node -e "try { console.log(JSON.parse(process.argv[1]).enabled); } catch {}" "$CONFIG_JSON")
|
|
148
151
|
|
|
149
152
|
if [ -n "$RESOLVED_MODEL" ]; then
|
|
150
153
|
MODEL="$RESOLVED_MODEL"
|
|
@@ -152,13 +155,22 @@ jobs:
|
|
|
152
155
|
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
153
156
|
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
154
157
|
fi
|
|
158
|
+
if [ -n "$RESOLVED_ENABLED" ]; then
|
|
159
|
+
ENABLED="$RESOLVED_ENABLED"
|
|
160
|
+
fi
|
|
155
161
|
fi
|
|
156
162
|
|
|
157
163
|
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
158
164
|
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
159
|
-
echo "
|
|
165
|
+
echo "enabled=$ENABLED" >> "$GITHUB_OUTPUT"
|
|
166
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m, enabled=$ENABLED"
|
|
167
|
+
|
|
168
|
+
if [ "$ENABLED" = "false" ] && [ "${{ github.event_name }}" = "schedule" ]; then
|
|
169
|
+
echo "⏸️ Routine '$ROUTINE' is disabled in agents-manifest.json. Skipping scheduled run."
|
|
170
|
+
fi
|
|
160
171
|
|
|
161
172
|
- name: Initialize Routine Run Issue
|
|
173
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
162
174
|
id: run-issue
|
|
163
175
|
env:
|
|
164
176
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
@@ -183,6 +195,7 @@ jobs:
|
|
|
183
195
|
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
184
196
|
|
|
185
197
|
- name: Run Analytics Review
|
|
198
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
186
199
|
timeout-minutes: 50
|
|
187
200
|
env:
|
|
188
201
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
@@ -224,7 +237,7 @@ jobs:
|
|
|
224
237
|
fi
|
|
225
238
|
|
|
226
239
|
- name: Emit run summary
|
|
227
|
-
if: always()
|
|
240
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
228
241
|
run: |
|
|
229
242
|
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
230
243
|
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -238,7 +251,7 @@ jobs:
|
|
|
238
251
|
fi
|
|
239
252
|
|
|
240
253
|
- name: Emit Fleet Telemetry (Opt-in)
|
|
241
|
-
if: always()
|
|
254
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
242
255
|
env:
|
|
243
256
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
244
257
|
TELEMETRY_ENDPOINT: ${{ secrets.JONAH_FLEET_TELEMETRY_ENDPOINT }}
|
|
@@ -252,7 +265,7 @@ jobs:
|
|
|
252
265
|
fi
|
|
253
266
|
|
|
254
267
|
- name: Reconcile Routine Run Issue
|
|
255
|
-
if: always()
|
|
268
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
256
269
|
env:
|
|
257
270
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
258
271
|
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
@@ -130,6 +130,7 @@ jobs:
|
|
|
130
130
|
|
|
131
131
|
MODEL="$DEFAULT_MODEL"
|
|
132
132
|
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
133
|
+
ENABLED="true"
|
|
133
134
|
|
|
134
135
|
if [ -f "agents-manifest.json" ]; then
|
|
135
136
|
CONFIG_JSON=$(node -e '
|
|
@@ -139,14 +140,16 @@ jobs:
|
|
|
139
140
|
const r = process.argv[1];
|
|
140
141
|
const model = m.models?.[r] || m.models?.default;
|
|
141
142
|
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
142
|
-
|
|
143
|
+
const enabled = m.routines?.[r] !== false;
|
|
144
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "", enabled }));
|
|
143
145
|
} catch (e) {
|
|
144
|
-
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
146
|
+
console.log(JSON.stringify({ model: "", timeout: "", enabled: true }));
|
|
145
147
|
}
|
|
146
148
|
' "$ROUTINE")
|
|
147
149
|
|
|
148
150
|
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
149
151
|
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
152
|
+
RESOLVED_ENABLED=$(node -e "try { console.log(JSON.parse(process.argv[1]).enabled); } catch {}" "$CONFIG_JSON")
|
|
150
153
|
|
|
151
154
|
if [ -n "$RESOLVED_MODEL" ]; then
|
|
152
155
|
MODEL="$RESOLVED_MODEL"
|
|
@@ -154,13 +157,22 @@ jobs:
|
|
|
154
157
|
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
155
158
|
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
156
159
|
fi
|
|
160
|
+
if [ -n "$RESOLVED_ENABLED" ]; then
|
|
161
|
+
ENABLED="$RESOLVED_ENABLED"
|
|
162
|
+
fi
|
|
157
163
|
fi
|
|
158
164
|
|
|
159
165
|
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
160
166
|
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
161
|
-
echo "
|
|
167
|
+
echo "enabled=$ENABLED" >> "$GITHUB_OUTPUT"
|
|
168
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m, enabled=$ENABLED"
|
|
169
|
+
|
|
170
|
+
if [ "$ENABLED" = "false" ] && [ "${{ github.event_name }}" = "schedule" ]; then
|
|
171
|
+
echo "⏸️ Routine '$ROUTINE' is disabled in agents-manifest.json. Skipping scheduled run."
|
|
172
|
+
fi
|
|
162
173
|
|
|
163
174
|
- name: Initialize Routine Run Issue
|
|
175
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
164
176
|
id: run-issue
|
|
165
177
|
env:
|
|
166
178
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
@@ -190,6 +202,7 @@ jobs:
|
|
|
190
202
|
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
191
203
|
|
|
192
204
|
- name: Run Autowork
|
|
205
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
193
206
|
timeout-minutes: 60
|
|
194
207
|
env:
|
|
195
208
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
@@ -234,7 +247,7 @@ jobs:
|
|
|
234
247
|
fi
|
|
235
248
|
|
|
236
249
|
- name: Emit run summary
|
|
237
|
-
if: always()
|
|
250
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
238
251
|
run: |
|
|
239
252
|
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
240
253
|
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -248,7 +261,7 @@ jobs:
|
|
|
248
261
|
fi
|
|
249
262
|
|
|
250
263
|
- name: Emit Fleet Telemetry (Opt-in)
|
|
251
|
-
if: always()
|
|
264
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
252
265
|
env:
|
|
253
266
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
254
267
|
TELEMETRY_ENDPOINT: ${{ secrets.JONAH_FLEET_TELEMETRY_ENDPOINT }}
|
|
@@ -262,7 +275,7 @@ jobs:
|
|
|
262
275
|
fi
|
|
263
276
|
|
|
264
277
|
- name: Verify Atomic Handoff Invariant (PR Existence Guard)
|
|
265
|
-
if: always()
|
|
278
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
266
279
|
env:
|
|
267
280
|
GH_TOKEN: ${{ github.token }}
|
|
268
281
|
run: |
|
|
@@ -283,7 +296,7 @@ jobs:
|
|
|
283
296
|
fi
|
|
284
297
|
|
|
285
298
|
- name: Reconcile Routine Run Issue
|
|
286
|
-
if: always()
|
|
299
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
287
300
|
env:
|
|
288
301
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
289
302
|
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
@@ -91,6 +91,7 @@ jobs:
|
|
|
91
91
|
|
|
92
92
|
MODEL="$DEFAULT_MODEL"
|
|
93
93
|
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
94
|
+
ENABLED="true"
|
|
94
95
|
|
|
95
96
|
if [ -f "agents-manifest.json" ]; then
|
|
96
97
|
CONFIG_JSON=$(node -e '
|
|
@@ -100,14 +101,16 @@ jobs:
|
|
|
100
101
|
const r = process.argv[1];
|
|
101
102
|
const model = m.models?.[r] || m.models?.default;
|
|
102
103
|
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
103
|
-
|
|
104
|
+
const enabled = m.routines?.[r] !== false;
|
|
105
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "", enabled }));
|
|
104
106
|
} catch (e) {
|
|
105
|
-
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
107
|
+
console.log(JSON.stringify({ model: "", timeout: "", enabled: true }));
|
|
106
108
|
}
|
|
107
109
|
' "$ROUTINE")
|
|
108
110
|
|
|
109
111
|
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
110
112
|
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
113
|
+
RESOLVED_ENABLED=$(node -e "try { console.log(JSON.parse(process.argv[1]).enabled); } catch {}" "$CONFIG_JSON")
|
|
111
114
|
|
|
112
115
|
if [ -n "$RESOLVED_MODEL" ]; then
|
|
113
116
|
MODEL="$RESOLVED_MODEL"
|
|
@@ -115,13 +118,22 @@ jobs:
|
|
|
115
118
|
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
116
119
|
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
117
120
|
fi
|
|
121
|
+
if [ -n "$RESOLVED_ENABLED" ]; then
|
|
122
|
+
ENABLED="$RESOLVED_ENABLED"
|
|
123
|
+
fi
|
|
118
124
|
fi
|
|
119
125
|
|
|
120
126
|
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
121
127
|
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
122
|
-
echo "
|
|
128
|
+
echo "enabled=$ENABLED" >> "$GITHUB_OUTPUT"
|
|
129
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m, enabled=$ENABLED"
|
|
130
|
+
|
|
131
|
+
if [ "$ENABLED" = "false" ] && [ "${{ github.event_name }}" = "schedule" ]; then
|
|
132
|
+
echo "⏸️ Routine '$ROUTINE' is disabled in agents-manifest.json. Skipping scheduled run."
|
|
133
|
+
fi
|
|
123
134
|
|
|
124
135
|
- name: Initialize Routine Run Issue
|
|
136
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
125
137
|
id: run-issue
|
|
126
138
|
env:
|
|
127
139
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
@@ -146,6 +158,7 @@ jobs:
|
|
|
146
158
|
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
147
159
|
|
|
148
160
|
- name: Run Dependency Update Check
|
|
161
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
149
162
|
timeout-minutes: 25
|
|
150
163
|
env:
|
|
151
164
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
@@ -184,7 +197,7 @@ jobs:
|
|
|
184
197
|
fi
|
|
185
198
|
|
|
186
199
|
- name: Emit run summary
|
|
187
|
-
if: always()
|
|
200
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
188
201
|
run: |
|
|
189
202
|
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
190
203
|
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -198,7 +211,7 @@ jobs:
|
|
|
198
211
|
fi
|
|
199
212
|
|
|
200
213
|
- name: Reconcile Routine Run Issue
|
|
201
|
-
if: always()
|
|
214
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
202
215
|
env:
|
|
203
216
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
204
217
|
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
@@ -91,6 +91,7 @@ jobs:
|
|
|
91
91
|
|
|
92
92
|
MODEL="$DEFAULT_MODEL"
|
|
93
93
|
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
94
|
+
ENABLED="true"
|
|
94
95
|
|
|
95
96
|
if [ -f "agents-manifest.json" ]; then
|
|
96
97
|
CONFIG_JSON=$(node -e '
|
|
@@ -100,14 +101,16 @@ jobs:
|
|
|
100
101
|
const r = process.argv[1];
|
|
101
102
|
const model = m.models?.[r] || m.models?.default;
|
|
102
103
|
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
103
|
-
|
|
104
|
+
const enabled = m.routines?.[r] !== false;
|
|
105
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "", enabled }));
|
|
104
106
|
} catch (e) {
|
|
105
|
-
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
107
|
+
console.log(JSON.stringify({ model: "", timeout: "", enabled: true }));
|
|
106
108
|
}
|
|
107
109
|
' "$ROUTINE")
|
|
108
110
|
|
|
109
111
|
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
110
112
|
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
113
|
+
RESOLVED_ENABLED=$(node -e "try { console.log(JSON.parse(process.argv[1]).enabled); } catch {}" "$CONFIG_JSON")
|
|
111
114
|
|
|
112
115
|
if [ -n "$RESOLVED_MODEL" ]; then
|
|
113
116
|
MODEL="$RESOLVED_MODEL"
|
|
@@ -115,13 +118,22 @@ jobs:
|
|
|
115
118
|
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
116
119
|
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
117
120
|
fi
|
|
121
|
+
if [ -n "$RESOLVED_ENABLED" ]; then
|
|
122
|
+
ENABLED="$RESOLVED_ENABLED"
|
|
123
|
+
fi
|
|
118
124
|
fi
|
|
119
125
|
|
|
120
126
|
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
121
127
|
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
122
|
-
echo "
|
|
128
|
+
echo "enabled=$ENABLED" >> "$GITHUB_OUTPUT"
|
|
129
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m, enabled=$ENABLED"
|
|
130
|
+
|
|
131
|
+
if [ "$ENABLED" = "false" ] && [ "${{ github.event_name }}" = "schedule" ]; then
|
|
132
|
+
echo "⏸️ Routine '$ROUTINE' is disabled in agents-manifest.json. Skipping scheduled run."
|
|
133
|
+
fi
|
|
123
134
|
|
|
124
135
|
- name: Initialize Routine Run Issue
|
|
136
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
125
137
|
id: run-issue
|
|
126
138
|
env:
|
|
127
139
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
@@ -146,6 +158,7 @@ jobs:
|
|
|
146
158
|
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
147
159
|
|
|
148
160
|
- name: Run Issues Housekeeping
|
|
161
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
149
162
|
timeout-minutes: 40
|
|
150
163
|
env:
|
|
151
164
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
@@ -184,7 +197,7 @@ jobs:
|
|
|
184
197
|
fi
|
|
185
198
|
|
|
186
199
|
- name: Emit run summary
|
|
187
|
-
if: always()
|
|
200
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
188
201
|
run: |
|
|
189
202
|
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
190
203
|
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -198,7 +211,7 @@ jobs:
|
|
|
198
211
|
fi
|
|
199
212
|
|
|
200
213
|
- name: Reconcile Routine Run Issue
|
|
201
|
-
if: always()
|
|
214
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
202
215
|
env:
|
|
203
216
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
204
217
|
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
@@ -91,6 +91,7 @@ jobs:
|
|
|
91
91
|
|
|
92
92
|
MODEL="$DEFAULT_MODEL"
|
|
93
93
|
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
94
|
+
ENABLED="true"
|
|
94
95
|
|
|
95
96
|
if [ -f "agents-manifest.json" ]; then
|
|
96
97
|
CONFIG_JSON=$(node -e '
|
|
@@ -100,14 +101,16 @@ jobs:
|
|
|
100
101
|
const r = process.argv[1];
|
|
101
102
|
const model = m.models?.[r] || m.models?.default;
|
|
102
103
|
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
103
|
-
|
|
104
|
+
const enabled = m.routines?.[r] !== false;
|
|
105
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "", enabled }));
|
|
104
106
|
} catch (e) {
|
|
105
|
-
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
107
|
+
console.log(JSON.stringify({ model: "", timeout: "", enabled: true }));
|
|
106
108
|
}
|
|
107
109
|
' "$ROUTINE")
|
|
108
110
|
|
|
109
111
|
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
110
112
|
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
113
|
+
RESOLVED_ENABLED=$(node -e "try { console.log(JSON.parse(process.argv[1]).enabled); } catch {}" "$CONFIG_JSON")
|
|
111
114
|
|
|
112
115
|
if [ -n "$RESOLVED_MODEL" ]; then
|
|
113
116
|
MODEL="$RESOLVED_MODEL"
|
|
@@ -115,13 +118,22 @@ jobs:
|
|
|
115
118
|
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
116
119
|
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
117
120
|
fi
|
|
121
|
+
if [ -n "$RESOLVED_ENABLED" ]; then
|
|
122
|
+
ENABLED="$RESOLVED_ENABLED"
|
|
123
|
+
fi
|
|
118
124
|
fi
|
|
119
125
|
|
|
120
126
|
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
121
127
|
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
122
|
-
echo "
|
|
128
|
+
echo "enabled=$ENABLED" >> "$GITHUB_OUTPUT"
|
|
129
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m, enabled=$ENABLED"
|
|
130
|
+
|
|
131
|
+
if [ "$ENABLED" = "false" ] && [ "${{ github.event_name }}" = "schedule" ]; then
|
|
132
|
+
echo "⏸️ Routine '\''$ROUTINE'\'' is disabled in agents-manifest.json. Skipping scheduled run."
|
|
133
|
+
fi
|
|
123
134
|
|
|
124
135
|
- name: Initialize Routine Run Issue
|
|
136
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
125
137
|
id: run-issue
|
|
126
138
|
env:
|
|
127
139
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
@@ -146,6 +158,7 @@ jobs:
|
|
|
146
158
|
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
147
159
|
|
|
148
160
|
- name: Run Prompt Optimizer
|
|
161
|
+
if: steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule'
|
|
149
162
|
timeout-minutes: 35
|
|
150
163
|
env:
|
|
151
164
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
@@ -184,7 +197,7 @@ jobs:
|
|
|
184
197
|
fi
|
|
185
198
|
|
|
186
199
|
- name: Emit run summary
|
|
187
|
-
if: always()
|
|
200
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
188
201
|
run: |
|
|
189
202
|
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
190
203
|
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -198,7 +211,7 @@ jobs:
|
|
|
198
211
|
fi
|
|
199
212
|
|
|
200
213
|
- name: Emit Fleet Telemetry (Opt-in)
|
|
201
|
-
if: always()
|
|
214
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
202
215
|
env:
|
|
203
216
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
204
217
|
TELEMETRY_ENDPOINT: ${{ secrets.JONAH_FLEET_TELEMETRY_ENDPOINT }}
|
|
@@ -212,7 +225,7 @@ jobs:
|
|
|
212
225
|
fi
|
|
213
226
|
|
|
214
227
|
- name: Reconcile Routine Run Issue
|
|
215
|
-
if: always()
|
|
228
|
+
if: always() && (steps.routine-config.outputs.enabled != 'false' || github.event_name != 'schedule')
|
|
216
229
|
env:
|
|
217
230
|
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
218
231
|
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|