@yemi33/minions 0.1.1569 → 0.1.1570
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 +2 -1
- package/engine.js +21 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/engine.js
CHANGED
|
@@ -2360,6 +2360,19 @@ function discoverFromWorkItems(config, project) {
|
|
|
2360
2360
|
skipped.gated++; continue;
|
|
2361
2361
|
}
|
|
2362
2362
|
}
|
|
2363
|
+
// Min retry gap (#1770): even when isRetry bypasses the completed-dedup, a
|
|
2364
|
+
// tight retry loop on the same WI burns _retryCount inside one tick window.
|
|
2365
|
+
// Honor a configurable minimum interval since the last retry so an idempotent
|
|
2366
|
+
// agent (e.g. review bailing because a duplicate review already exists)
|
|
2367
|
+
// cannot flip a successfully-posted review into status=failed.
|
|
2368
|
+
if (isRetry && item._lastRetryAt) {
|
|
2369
|
+
const minGap = ENGINE_DEFAULTS.minRetryGapMs;
|
|
2370
|
+
const lastAt = Date.parse(item._lastRetryAt);
|
|
2371
|
+
if (Number.isFinite(lastAt) && (Date.now() - lastAt) < minGap) {
|
|
2372
|
+
if (item._pendingReason !== 'retry_cooldown') { item._pendingReason = 'retry_cooldown'; needsWrite = true; }
|
|
2373
|
+
skipped.gated++; continue;
|
|
2374
|
+
}
|
|
2375
|
+
}
|
|
2363
2376
|
if (isOnCooldown(key, cooldownMs)) {
|
|
2364
2377
|
if (item._pendingReason !== 'cooldown') { item._pendingReason = 'cooldown'; needsWrite = true; }
|
|
2365
2378
|
skipped.gated++; continue;
|
|
@@ -2804,6 +2817,14 @@ function discoverCentralWorkItems(config) {
|
|
|
2804
2817
|
continue;
|
|
2805
2818
|
}
|
|
2806
2819
|
}
|
|
2820
|
+
// Min retry gap (#1770): symmetric with discoverFromWorkItems — even when
|
|
2821
|
+
// isRetry bypasses the completed-dedup, enforce a min interval since
|
|
2822
|
+
// _lastRetryAt so a tight retry loop can't burn _retryCount in one tick.
|
|
2823
|
+
if (isRetry && item._lastRetryAt) {
|
|
2824
|
+
const minGap = ENGINE_DEFAULTS.minRetryGapMs;
|
|
2825
|
+
const lastAt = Date.parse(item._lastRetryAt);
|
|
2826
|
+
if (Number.isFinite(lastAt) && (Date.now() - lastAt) < minGap) continue;
|
|
2827
|
+
}
|
|
2807
2828
|
if (isOnCooldown(key, 0)) continue;
|
|
2808
2829
|
|
|
2809
2830
|
const workType = item.type || 'implement';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1570",
|
|
4
4
|
"description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
|
|
5
5
|
"bin": {
|
|
6
6
|
"minions": "bin/minions.js"
|