chore(release): v3.7.5 — integrate remaining PRs and finalize stability

This commit is contained in:
diegosouzapw
2026-04-29 17:19:29 -03:00
parent 505394efab
commit 0578d8a2db
4 changed files with 103 additions and 0 deletions

View File

@@ -22,6 +22,10 @@
- **fix(kiro):** support organization IDC OAuth with regional endpoints and refresh (#1754)
- **fix(combo):** include 429 in provider circuit breaker to stop infinite retry loops on exhausted quotas (#1767)
- **fix(claude):** respect client-set thinking/effort params — only inject adaptive thinking and high effort when the client hasn't explicitly set them, preventing forced quota drain on Claude Max accounts (#1761)
- **fix(blackbox-web):** correct cookie name and populate session/subscription fields (#1776)
- **fix(codex):** align client identity metadata (#1778)
- **fix(claude):** fix support for claude-cli using Gemini provider (#1779)
- **test(reasoning-cache):** isolate DB state using mkdtempSync to prevent 401 middleware errors
### 🛠️ Maintenance

21
patch.js Normal file
View File

@@ -0,0 +1,21 @@
const fs = require("fs");
let file = fs.readFileSync("tests/unit/reasoning-cache.test.ts", "utf8");
// Insert import for updateSettings
if (!file.includes("updateSettings")) {
file = file.replace(
"import { getDbInstance }",
'import { getDbInstance } from "../../src/lib/db/core.ts";\nimport { updateSettings, getSettings } from "../../src/lib/db/settings.ts";\n// import { getDbInstance }'
);
}
// Add DB update logic
file = file.replace(
'process.env.REQUIRE_LOGIN = "false";',
'process.env.REQUIRE_LOGIN = "false";\n await updateSettings({ requireLogin: false });'
);
// We need to make `before()` async
file = file.replace(" before(() => {", " before(async () => {");
fs.writeFileSync("tests/unit/reasoning-cache.test.ts", file);

35
patch2.js Normal file
View File

@@ -0,0 +1,35 @@
const fs = require("fs");
let file = fs.readFileSync("tests/unit/reasoning-cache.test.ts", "utf8");
// Replace the before/after blocks
file = file.replace(
/describe\("Reasoning Replay Cache — API Route", \(\) => {[\s\S]*?(?= it\("should return stats)/m,
`describe("Reasoning Replay Cache — API Route", () => {
before(() => {
clearReasoningCacheAll();
try {
getDbInstance().prepare(
"INSERT OR IGNORE INTO api_keys (key, name, role, is_active) VALUES ('test-admin-key', 'test', 'admin', 1)"
).run();
} catch (e) {}
});
after(() => {
clearReasoningCacheAll();
try {
getDbInstance().prepare("DELETE FROM api_keys WHERE key = 'test-admin-key'").run();
} catch (e) {}
});\n\n`
);
// Add Headers
file = file.replace(
/new Request\("http:\/\/localhost\/api\/cache\/reasoning\?provider=deepseek"\)/g,
'new Request("http://localhost/api/cache/reasoning?provider=deepseek", { headers: { Authorization: "Bearer test-admin-key" } })'
);
file = file.replace(
/new Request\("http:\/\/localhost\/api\/cache\/reasoning\?toolCallId=call_api_delete_1"\)/g,
'new Request("http://localhost/api/cache/reasoning?toolCallId=call_api_delete_1", { headers: { Authorization: "Bearer test-admin-key" } })'
);
fs.writeFileSync("tests/unit/reasoning-cache.test.ts", file);

43
patch3.js Normal file
View File

@@ -0,0 +1,43 @@
const fs = require("fs");
let file = fs.readFileSync("tests/unit/reasoning-cache.test.ts", "utf8");
file = file.replace(
/describe\("Reasoning Replay Cache — API Route", \(\) => \{[\s\S]*?(?= it\("should return stats)/m,
`describe("Reasoning Replay Cache — API Route", () => {
let originalInitialPassword;
let originalRequireLogin;
before(async () => {
clearReasoningCacheAll();
originalInitialPassword = process.env.INITIAL_PASSWORD;
originalRequireLogin = process.env.REQUIRE_LOGIN;
process.env.INITIAL_PASSWORD = "";
process.env.REQUIRE_LOGIN = "false";
try {
const { getDbInstance } = await import("../../src/lib/db/core.ts");
getDbInstance().prepare(
"INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'requireLogin', 'false')"
).run();
getDbInstance().prepare(
"DELETE FROM key_value WHERE namespace = 'settings' AND key = 'password'"
).run();
} catch (e) {}
});
after(async () => {
clearReasoningCacheAll();
process.env.INITIAL_PASSWORD = originalInitialPassword;
process.env.REQUIRE_LOGIN = originalRequireLogin;
try {
const { getDbInstance } = await import("../../src/lib/db/core.ts");
getDbInstance().prepare(
"INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', 'requireLogin', 'true')"
).run();
} catch (e) {}
});\n\n`
);
file = file.replace(/, \{ headers: \{ Authorization: "Bearer test-admin-key" \} \}/g, "");
fs.writeFileSync("tests/unit/reasoning-cache.test.ts", file);