compact-agent 1.24.1 → 1.24.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/dist/key-rotation.d.ts +16 -3
- package/dist/key-rotation.js +38 -3
- package/dist/key-rotation.js.map +1 -1
- package/package.json +1 -1
package/dist/key-rotation.d.ts
CHANGED
|
@@ -29,9 +29,22 @@ export declare function setPool(primary: string, extras?: string[]): void;
|
|
|
29
29
|
*/
|
|
30
30
|
export declare function pickKey(): string | null;
|
|
31
31
|
/**
|
|
32
|
-
* Mark a key as failed. The classifier
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* Mark a key as failed. The classifier distinguishes:
|
|
33
|
+
*
|
|
34
|
+
* KEY problems (cool the key down):
|
|
35
|
+
* - quota/credit exhausted → 1h cool
|
|
36
|
+
* - auth rejected → 1h cool
|
|
37
|
+
* - rate-limited → 60s cool
|
|
38
|
+
*
|
|
39
|
+
* NOT key problems (don't touch the key — surface upward instead):
|
|
40
|
+
* - 404 model-not-found → model name wrong, no key swap helps
|
|
41
|
+
* - 5xx server errors → provider issue, retry-here doesn't help
|
|
42
|
+
* - timeout / network → may be transient, but not key-specific
|
|
43
|
+
* - any other 4xx (bad request, content filter)
|
|
44
|
+
*
|
|
45
|
+
* The previous version defaulted unknown errors to a 60s cool, which
|
|
46
|
+
* pooled BOTH keys into "cooling" when the user typo'd a model name —
|
|
47
|
+
* a false positive that made it look like both keys were dead.
|
|
35
48
|
*/
|
|
36
49
|
export declare function reportFailure(key: string, err: unknown): void;
|
|
37
50
|
/** Mark a key as having succeeded — clears any cool-down + records stat. */
|
package/dist/key-rotation.js
CHANGED
|
@@ -63,9 +63,22 @@ export function pickKey() {
|
|
|
63
63
|
return null;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* Mark a key as failed. The classifier
|
|
67
|
-
*
|
|
68
|
-
*
|
|
66
|
+
* Mark a key as failed. The classifier distinguishes:
|
|
67
|
+
*
|
|
68
|
+
* KEY problems (cool the key down):
|
|
69
|
+
* - quota/credit exhausted → 1h cool
|
|
70
|
+
* - auth rejected → 1h cool
|
|
71
|
+
* - rate-limited → 60s cool
|
|
72
|
+
*
|
|
73
|
+
* NOT key problems (don't touch the key — surface upward instead):
|
|
74
|
+
* - 404 model-not-found → model name wrong, no key swap helps
|
|
75
|
+
* - 5xx server errors → provider issue, retry-here doesn't help
|
|
76
|
+
* - timeout / network → may be transient, but not key-specific
|
|
77
|
+
* - any other 4xx (bad request, content filter)
|
|
78
|
+
*
|
|
79
|
+
* The previous version defaulted unknown errors to a 60s cool, which
|
|
80
|
+
* pooled BOTH keys into "cooling" when the user typo'd a model name —
|
|
81
|
+
* a false positive that made it look like both keys were dead.
|
|
69
82
|
*/
|
|
70
83
|
export function reportFailure(key, err) {
|
|
71
84
|
const state = pool.find((s) => s.key === key);
|
|
@@ -73,6 +86,19 @@ export function reportFailure(key, err) {
|
|
|
73
86
|
return;
|
|
74
87
|
const msg = err instanceof Error ? err.message : String(err);
|
|
75
88
|
const lower = msg.toLowerCase();
|
|
89
|
+
// Filter out non-key errors FIRST — these should bump the failure count
|
|
90
|
+
// (for visibility) but NOT actually cool the key.
|
|
91
|
+
const isNotKeyProblem = /404|model.*not.found|no endpoints found/.test(lower) ||
|
|
92
|
+
/5\d\d|server.?error|bad.gateway|gateway.*timeout/.test(lower) ||
|
|
93
|
+
/content.?filter|safety|moderation/.test(lower) ||
|
|
94
|
+
/context.*overflow|too.many.*tokens|context.?length/.test(lower);
|
|
95
|
+
if (isNotKeyProblem) {
|
|
96
|
+
// Record for diagnostics, don't cool. The error surfaces to the
|
|
97
|
+
// user via printApiError; key stays available for the next call.
|
|
98
|
+
state.failures++;
|
|
99
|
+
state.lastReason = msg.slice(0, 80);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
76
102
|
let cooldown = COOL_DOWN_MS;
|
|
77
103
|
let reason = msg.slice(0, 80);
|
|
78
104
|
if (/quota|insufficient|credit|payment|billing/.test(lower)) {
|
|
@@ -87,6 +113,15 @@ export function reportFailure(key, err) {
|
|
|
87
113
|
cooldown = COOL_DOWN_MS;
|
|
88
114
|
reason = 'rate limited';
|
|
89
115
|
}
|
|
116
|
+
else {
|
|
117
|
+
// Unknown error pattern — DON'T cool. Defaulting to cool was the
|
|
118
|
+
// original bug. Record the failure for diagnostics; the next
|
|
119
|
+
// request can try the same key, or the auto-fallback model logic
|
|
120
|
+
// can step in if the error truly indicates a model-side problem.
|
|
121
|
+
state.failures++;
|
|
122
|
+
state.lastReason = reason;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
90
125
|
state.coolUntil = Date.now() + cooldown;
|
|
91
126
|
state.lastReason = reason;
|
|
92
127
|
state.failures++;
|
package/dist/key-rotation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-rotation.js","sourceRoot":"","sources":["../src/key-rotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,CAAa,uCAAuC;AAChF,MAAM,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAC,CAAE,sCAAsC;AAa/E,IAAI,IAAI,GAAe,EAAE,CAAC;AAC1B,IAAI,MAAM,GAAG,CAAC,CAAC,CAAK,iDAAiD;AAErE;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,SAAmB,EAAE;IAC5D,8CAA8C;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtD,CAAC;IACD,qDAAqD;IACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QACvC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;KAChD,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,0CAA0C;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YAC/B,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAG,gCAAgC;YACpE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"key-rotation.js","sourceRoot":"","sources":["../src/key-rotation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "compact-agent",
|
|
3
|
-
"version": "1.24.
|
|
3
|
+
"version": "1.24.2",
|
|
4
4
|
"description": "A dense, feature-rich AI coding agent for the terminal. Built-in voice dictation (Whisper) + TTS readout (ElevenLabs) + screen-reader mode for blind / low-vision users. 80+ slash commands, 9 modes including Hermes self-improving loop, multi-agent orchestration, bundled everything-claude-code skills library, learning system, and observable LLM transport. Works with OpenRouter, OpenAI, Anthropic-compatible, Ollama, LM Studio, DeepSeek, or any OpenAI-compatible API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|