@kody-ade/kody-engine 0.4.593 → 0.4.595
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/bin/kody.js +29 -2
- package/package.json +1 -1
package/dist/bin/kody.js
CHANGED
|
@@ -15,7 +15,7 @@ var init_package = __esm({
|
|
|
15
15
|
"package.json"() {
|
|
16
16
|
package_default = {
|
|
17
17
|
name: "@kody-ade/kody-engine",
|
|
18
|
-
version: "0.4.
|
|
18
|
+
version: "0.4.595",
|
|
19
19
|
description: "kody \u2014 autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative implementation profiles.",
|
|
20
20
|
license: "MIT",
|
|
21
21
|
type: "module",
|
|
@@ -4180,6 +4180,7 @@ async function runAgent(opts) {
|
|
|
4180
4180
|
env.ANTHROPIC_BASE_URL = opts.litellmUrl;
|
|
4181
4181
|
env.ANTHROPIC_API_KEY = getAnthropicApiKeyOrDummy();
|
|
4182
4182
|
}
|
|
4183
|
+
if (opts.stopOnRateLimit) env.CLAUDE_CODE_MAX_RETRIES = "0";
|
|
4183
4184
|
const startedAt = Date.now();
|
|
4184
4185
|
const turnTimeoutMs = resolveTurnTimeoutMs(opts);
|
|
4185
4186
|
const completionGuard = typeof opts.deadlineAtMs === "number" ? createCompletionToolGuard(
|
|
@@ -4220,6 +4221,12 @@ async function runAgent(opts) {
|
|
|
4220
4221
|
let sawTerminalSuccess = false;
|
|
4221
4222
|
let sawLoginRequired = false;
|
|
4222
4223
|
let noWorkSuccess = false;
|
|
4224
|
+
const sdkAbortController = opts.stopOnRateLimit ? new AbortController() : opts.abortController;
|
|
4225
|
+
const forwardOwnerAbort = () => sdkAbortController?.abort(opts.abortController?.signal.reason);
|
|
4226
|
+
if (opts.stopOnRateLimit && opts.abortController) {
|
|
4227
|
+
if (opts.abortController.signal.aborted) forwardOwnerAbort();
|
|
4228
|
+
else opts.abortController.signal.addEventListener("abort", forwardOwnerAbort, { once: true });
|
|
4229
|
+
}
|
|
4223
4230
|
try {
|
|
4224
4231
|
const queryOptions = {
|
|
4225
4232
|
model: opts.litellmUrl ? litellmModelGroup(opts.model) : opts.model.model,
|
|
@@ -4378,7 +4385,7 @@ async function runAgent(opts) {
|
|
|
4378
4385
|
};
|
|
4379
4386
|
}
|
|
4380
4387
|
queryOptions.settingSources = opts.settingSources ?? ["project", "local"];
|
|
4381
|
-
if (
|
|
4388
|
+
if (sdkAbortController) queryOptions.abortController = sdkAbortController;
|
|
4382
4389
|
const stableBinary = ensureStableClaudeBinary();
|
|
4383
4390
|
if (stableBinary) {
|
|
4384
4391
|
const sdkBinaryPathOption = ["pathToClaudeCode", "Exec", "utable"].join("");
|
|
@@ -4441,6 +4448,22 @@ async function runAgent(opts) {
|
|
|
4441
4448
|
`);
|
|
4442
4449
|
}
|
|
4443
4450
|
const m = msg;
|
|
4451
|
+
if (opts.stopOnRateLimit && m.type === "system" && m.subtype === "api_retry" && Number(m.error_status) === 429) {
|
|
4452
|
+
outcome = "failed";
|
|
4453
|
+
outcomeKind = "rate_limit";
|
|
4454
|
+
errorMessage2 = "model rate limited (429)";
|
|
4455
|
+
sdkAbortController?.abort(new Error(errorMessage2));
|
|
4456
|
+
if (typeof iterator.return === "function") {
|
|
4457
|
+
try {
|
|
4458
|
+
await Promise.race([
|
|
4459
|
+
iterator.return(void 0).catch(() => void 0),
|
|
4460
|
+
new Promise((resolve24) => setTimeout(resolve24, 1e3).unref())
|
|
4461
|
+
]);
|
|
4462
|
+
} catch {
|
|
4463
|
+
}
|
|
4464
|
+
}
|
|
4465
|
+
break;
|
|
4466
|
+
}
|
|
4444
4467
|
if (opts.onProgress) {
|
|
4445
4468
|
const blocks = m.message?.content ?? [];
|
|
4446
4469
|
for (const block of blocks) {
|
|
@@ -4533,6 +4556,9 @@ async function runAgent(opts) {
|
|
|
4533
4556
|
errorMessage2 = e instanceof Error ? e.message : String(e);
|
|
4534
4557
|
}
|
|
4535
4558
|
} finally {
|
|
4559
|
+
if (opts.stopOnRateLimit && opts.abortController) {
|
|
4560
|
+
opts.abortController.signal.removeEventListener("abort", forwardOwnerAbort);
|
|
4561
|
+
}
|
|
4536
4562
|
try {
|
|
4537
4563
|
fullLog.end();
|
|
4538
4564
|
} catch {
|
|
@@ -22466,6 +22492,7 @@ async function runImplementation(profileName, input) {
|
|
|
22466
22492
|
verbose: input.verbose,
|
|
22467
22493
|
quiet: input.quiet,
|
|
22468
22494
|
abortController: input.abortController,
|
|
22495
|
+
stopOnRateLimit: candidateIndex < modelCandidates.length - 1,
|
|
22469
22496
|
deadlineAtMs: input.deadlineAtMs,
|
|
22470
22497
|
ndjsonDir,
|
|
22471
22498
|
additionalDirectories: agentTaskArtifacts ? [agentTaskArtifacts.absDir] : void 0,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kody-ade/kody-engine",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.595",
|
|
4
4
|
"description": "kody — autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative implementation profiles.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|