@fudrouter/fsrouter 0.6.56 → 0.6.58
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/open-sse/executors/glm.js +2 -2
- package/dist/open-sse/services/thinkingBudget.js +6 -2
- package/dist/open-sse/translator/index.js +30 -32
- package/dist/open-sse/translator/request/claude-to-kiro.js +1 -1
- package/dist/open-sse/translator/request/openai-to-kiro.js +2 -2
- package/open-sse/executors/glm.js +2 -2
- package/open-sse/services/thinkingBudget.js +6 -2
- package/open-sse/translator/index.js +30 -32
- package/open-sse/translator/request/claude-to-kiro.js +1 -1
- package/open-sse/translator/request/openai-to-kiro.js +2 -2
- package/package.json +1 -1
|
@@ -176,7 +176,7 @@ class GlmExecutor extends DefaultExecutor {
|
|
|
176
176
|
const cleanedBody = super.transformRequest(model, body, stream, credentials);
|
|
177
177
|
return applyGlmRequestDefaults(cleanedBody, this.config.requestDefaults);
|
|
178
178
|
}
|
|
179
|
-
transformForTransport(model, body, stream, credentials, transport) {
|
|
179
|
+
async transformForTransport(model, body, stream, credentials, transport) {
|
|
180
180
|
const effortTier = parseGlm52Effort(model);
|
|
181
181
|
const effectiveModel = effortTier ? effortTier.baseModel : model;
|
|
182
182
|
const transformed = this.transformRequest(effectiveModel, body, stream, credentials);
|
|
@@ -197,7 +197,7 @@ class GlmExecutor extends DefaultExecutor {
|
|
|
197
197
|
}
|
|
198
198
|
return transformed;
|
|
199
199
|
}
|
|
200
|
-
const translated = translateRequest(
|
|
200
|
+
const translated = await translateRequest(
|
|
201
201
|
FORMATS.OPENAI,
|
|
202
202
|
FORMATS.CLAUDE,
|
|
203
203
|
effectiveModel,
|
|
@@ -221,13 +221,18 @@ function applyAdaptiveBudget(body, cfg) {
|
|
|
221
221
|
);
|
|
222
222
|
return setCustomBudget(body, budget);
|
|
223
223
|
}
|
|
224
|
-
function hasThinkingCapableModel(body) {
|
|
224
|
+
export function hasThinkingCapableModel(body) {
|
|
225
225
|
const model = getStringField(toRecord(body), "model");
|
|
226
226
|
const resolved = getResolvedModelCapabilities(model);
|
|
227
227
|
if (resolved.supportsThinking === true) return true;
|
|
228
228
|
if (resolved.supportsThinking === false) return false;
|
|
229
229
|
return model.includes("claude") || model.includes("o1") || model.includes("o3") || model.includes("o4") || model.includes("gemini") || model.endsWith("-thinking") || model.includes("thinking");
|
|
230
230
|
}
|
|
231
|
+
export function resolveKiroThinkingBudget(body, headers, model) {
|
|
232
|
+
return isThinkingEnabled(body, headers, model)
|
|
233
|
+
? KIRO_THINKING_BUDGET_DEFAULT
|
|
234
|
+
: 0;
|
|
235
|
+
}
|
|
231
236
|
export {
|
|
232
237
|
DEFAULT_THINKING_CONFIG,
|
|
233
238
|
EFFORT_BUDGETS,
|
|
@@ -236,7 +241,6 @@ export {
|
|
|
236
241
|
applyThinkingBudget,
|
|
237
242
|
ensureThinkingConfig,
|
|
238
243
|
getThinkingBudgetConfig,
|
|
239
|
-
hasThinkingCapableModel,
|
|
240
244
|
hydrateThinkingBudgetConfig,
|
|
241
245
|
normalizeThinkingLevel,
|
|
242
246
|
setThinkingBudgetConfig
|
|
@@ -10,11 +10,36 @@ import { AntigravityExecutor } from "../executors/antigravity.js";
|
|
|
10
10
|
const requestRegistry = new Map();
|
|
11
11
|
const responseRegistry = new Map();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// Eagerly pre-load all translators at module load time
|
|
14
|
+
// (prevents race condition with mixed sync require() + dynamic import())
|
|
15
|
+
const reqMods = [
|
|
16
|
+
"./request/claude-to-openai.js",
|
|
17
|
+
"./request/openai-to-claude.js",
|
|
18
|
+
"./request/gemini-to-openai.js",
|
|
19
|
+
"./request/openai-to-gemini.js",
|
|
20
|
+
"./request/openai-to-vertex.js",
|
|
21
|
+
"./request/antigravity-to-openai.js",
|
|
22
|
+
"./request/openai-responses.js",
|
|
23
|
+
"./request/openai-to-kiro.js",
|
|
24
|
+
"./request/openai-to-cursor.js",
|
|
25
|
+
"./request/openai-to-ollama.js",
|
|
26
|
+
"./request/openai-to-commandcode.js",
|
|
27
|
+
];
|
|
28
|
+
const resMods = [
|
|
29
|
+
"./response/claude-to-openai.js",
|
|
30
|
+
"./response/openai-to-claude.js",
|
|
31
|
+
"./response/gemini-to-openai.js",
|
|
32
|
+
"./response/openai-to-antigravity.js",
|
|
33
|
+
"./response/openai-responses.js",
|
|
34
|
+
"./response/kiro-to-openai.js",
|
|
35
|
+
"./response/cursor-to-openai.js",
|
|
36
|
+
"./response/ollama-to-openai.js",
|
|
37
|
+
"./response/commandcode-to-openai.js",
|
|
38
|
+
];
|
|
39
|
+
await Promise.all([...reqMods, ...resMods].map(m => import(m)));
|
|
15
40
|
|
|
16
41
|
// Track initialization state
|
|
17
|
-
let initialized =
|
|
42
|
+
let initialized = true;
|
|
18
43
|
|
|
19
44
|
// Register translator
|
|
20
45
|
export function register(from, to, requestFn, responseFn) {
|
|
@@ -27,35 +52,8 @@ export function register(from, to, requestFn, responseFn) {
|
|
|
27
52
|
}
|
|
28
53
|
}
|
|
29
54
|
|
|
30
|
-
// Lazy load translators (
|
|
31
|
-
function ensureInitialized() {
|
|
32
|
-
if (initialized) return;
|
|
33
|
-
initialized = true;
|
|
34
|
-
|
|
35
|
-
// Request translators - sync require pattern for bundler
|
|
36
|
-
require("./request/claude-to-openai.js");
|
|
37
|
-
require("./request/openai-to-claude.js");
|
|
38
|
-
require("./request/gemini-to-openai.js");
|
|
39
|
-
require("./request/openai-to-gemini.js");
|
|
40
|
-
require("./request/openai-to-vertex.js");
|
|
41
|
-
require("./request/antigravity-to-openai.js");
|
|
42
|
-
require("./request/openai-responses.js");
|
|
43
|
-
require("./request/openai-to-kiro.js");
|
|
44
|
-
require("./request/openai-to-cursor.js");
|
|
45
|
-
require("./request/openai-to-ollama.js");
|
|
46
|
-
require("./request/openai-to-commandcode.js");
|
|
47
|
-
|
|
48
|
-
// Response translators
|
|
49
|
-
require("./response/claude-to-openai.js");
|
|
50
|
-
require("./response/openai-to-claude.js");
|
|
51
|
-
require("./response/gemini-to-openai.js");
|
|
52
|
-
require("./response/openai-to-antigravity.js");
|
|
53
|
-
require("./response/openai-responses.js");
|
|
54
|
-
require("./response/kiro-to-openai.js");
|
|
55
|
-
require("./response/cursor-to-openai.js");
|
|
56
|
-
require("./response/ollama-to-openai.js");
|
|
57
|
-
require("./response/commandcode-to-openai.js");
|
|
58
|
-
}
|
|
55
|
+
// Lazy load translators (no-op, loaded eagerly at module level)
|
|
56
|
+
async function ensureInitialized() {}
|
|
59
57
|
|
|
60
58
|
// Strip specific content types from messages (explicit opt-in via strip[] in PROVIDER_MODELS)
|
|
61
59
|
function stripContentTypes(body, stripList = []) {
|
|
@@ -27,11 +27,11 @@ import { FORMATS } from "../formats.js";
|
|
|
27
27
|
import { v4 as uuidv4 } from "uuid";
|
|
28
28
|
import {
|
|
29
29
|
resolveKiroModel,
|
|
30
|
-
resolveKiroThinkingBudget,
|
|
31
30
|
buildThinkingSystemPrefix,
|
|
32
31
|
KIRO_AGENTIC_SYSTEM_PROMPT,
|
|
33
32
|
resolveDefaultProfileArn,
|
|
34
33
|
} from "../../config/kiroConstants.js";
|
|
34
|
+
import { resolveKiroThinkingBudget } from "../../services/thinkingBudget.js";
|
|
35
35
|
import { DEFAULT_IMAGE_MIME } from "../schema/index.js";
|
|
36
36
|
import { ROLE, CLAUDE_BLOCK } from "../schema/index.js";
|
|
37
37
|
|
|
@@ -8,11 +8,11 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
8
8
|
import { resolveSessionId } from "../../utils/sessionManager.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveKiroModel,
|
|
11
|
-
resolveKiroThinkingBudget,
|
|
12
11
|
buildThinkingSystemPrefix,
|
|
13
12
|
KIRO_AGENTIC_SYSTEM_PROMPT,
|
|
14
|
-
resolveDefaultProfileArn
|
|
13
|
+
resolveDefaultProfileArn,
|
|
15
14
|
} from "../../config/kiroConstants.js";
|
|
15
|
+
import { resolveKiroThinkingBudget } from "../../services/thinkingBudget.js";
|
|
16
16
|
import { parseDataUri } from "../concerns/image.js";
|
|
17
17
|
import { DEFAULT_IMAGE_MIME } from "../schema/index.js";
|
|
18
18
|
import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK } from "../schema/index.js";
|
|
@@ -176,7 +176,7 @@ class GlmExecutor extends DefaultExecutor {
|
|
|
176
176
|
const cleanedBody = super.transformRequest(model, body, stream, credentials);
|
|
177
177
|
return applyGlmRequestDefaults(cleanedBody, this.config.requestDefaults);
|
|
178
178
|
}
|
|
179
|
-
transformForTransport(model, body, stream, credentials, transport) {
|
|
179
|
+
async transformForTransport(model, body, stream, credentials, transport) {
|
|
180
180
|
const effortTier = parseGlm52Effort(model);
|
|
181
181
|
const effectiveModel = effortTier ? effortTier.baseModel : model;
|
|
182
182
|
const transformed = this.transformRequest(effectiveModel, body, stream, credentials);
|
|
@@ -197,7 +197,7 @@ class GlmExecutor extends DefaultExecutor {
|
|
|
197
197
|
}
|
|
198
198
|
return transformed;
|
|
199
199
|
}
|
|
200
|
-
const translated = translateRequest(
|
|
200
|
+
const translated = await translateRequest(
|
|
201
201
|
FORMATS.OPENAI,
|
|
202
202
|
FORMATS.CLAUDE,
|
|
203
203
|
effectiveModel,
|
|
@@ -221,13 +221,18 @@ function applyAdaptiveBudget(body, cfg) {
|
|
|
221
221
|
);
|
|
222
222
|
return setCustomBudget(body, budget);
|
|
223
223
|
}
|
|
224
|
-
function hasThinkingCapableModel(body) {
|
|
224
|
+
export function hasThinkingCapableModel(body) {
|
|
225
225
|
const model = getStringField(toRecord(body), "model");
|
|
226
226
|
const resolved = getResolvedModelCapabilities(model);
|
|
227
227
|
if (resolved.supportsThinking === true) return true;
|
|
228
228
|
if (resolved.supportsThinking === false) return false;
|
|
229
229
|
return model.includes("claude") || model.includes("o1") || model.includes("o3") || model.includes("o4") || model.includes("gemini") || model.endsWith("-thinking") || model.includes("thinking");
|
|
230
230
|
}
|
|
231
|
+
export function resolveKiroThinkingBudget(body, headers, model) {
|
|
232
|
+
return isThinkingEnabled(body, headers, model)
|
|
233
|
+
? KIRO_THINKING_BUDGET_DEFAULT
|
|
234
|
+
: 0;
|
|
235
|
+
}
|
|
231
236
|
export {
|
|
232
237
|
DEFAULT_THINKING_CONFIG,
|
|
233
238
|
EFFORT_BUDGETS,
|
|
@@ -236,7 +241,6 @@ export {
|
|
|
236
241
|
applyThinkingBudget,
|
|
237
242
|
ensureThinkingConfig,
|
|
238
243
|
getThinkingBudgetConfig,
|
|
239
|
-
hasThinkingCapableModel,
|
|
240
244
|
hydrateThinkingBudgetConfig,
|
|
241
245
|
normalizeThinkingLevel,
|
|
242
246
|
setThinkingBudgetConfig
|
|
@@ -10,11 +10,36 @@ import { AntigravityExecutor } from "../executors/antigravity.js";
|
|
|
10
10
|
const requestRegistry = new Map();
|
|
11
11
|
const responseRegistry = new Map();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// Eagerly pre-load all translators at module load time
|
|
14
|
+
// (prevents race condition with mixed sync require() + dynamic import())
|
|
15
|
+
const reqMods = [
|
|
16
|
+
"./request/claude-to-openai.js",
|
|
17
|
+
"./request/openai-to-claude.js",
|
|
18
|
+
"./request/gemini-to-openai.js",
|
|
19
|
+
"./request/openai-to-gemini.js",
|
|
20
|
+
"./request/openai-to-vertex.js",
|
|
21
|
+
"./request/antigravity-to-openai.js",
|
|
22
|
+
"./request/openai-responses.js",
|
|
23
|
+
"./request/openai-to-kiro.js",
|
|
24
|
+
"./request/openai-to-cursor.js",
|
|
25
|
+
"./request/openai-to-ollama.js",
|
|
26
|
+
"./request/openai-to-commandcode.js",
|
|
27
|
+
];
|
|
28
|
+
const resMods = [
|
|
29
|
+
"./response/claude-to-openai.js",
|
|
30
|
+
"./response/openai-to-claude.js",
|
|
31
|
+
"./response/gemini-to-openai.js",
|
|
32
|
+
"./response/openai-to-antigravity.js",
|
|
33
|
+
"./response/openai-responses.js",
|
|
34
|
+
"./response/kiro-to-openai.js",
|
|
35
|
+
"./response/cursor-to-openai.js",
|
|
36
|
+
"./response/ollama-to-openai.js",
|
|
37
|
+
"./response/commandcode-to-openai.js",
|
|
38
|
+
];
|
|
39
|
+
await Promise.all([...reqMods, ...resMods].map(m => import(m)));
|
|
15
40
|
|
|
16
41
|
// Track initialization state
|
|
17
|
-
let initialized =
|
|
42
|
+
let initialized = true;
|
|
18
43
|
|
|
19
44
|
// Register translator
|
|
20
45
|
export function register(from, to, requestFn, responseFn) {
|
|
@@ -27,35 +52,8 @@ export function register(from, to, requestFn, responseFn) {
|
|
|
27
52
|
}
|
|
28
53
|
}
|
|
29
54
|
|
|
30
|
-
// Lazy load translators (
|
|
31
|
-
function ensureInitialized() {
|
|
32
|
-
if (initialized) return;
|
|
33
|
-
initialized = true;
|
|
34
|
-
|
|
35
|
-
// Request translators - sync require pattern for bundler
|
|
36
|
-
require("./request/claude-to-openai.js");
|
|
37
|
-
require("./request/openai-to-claude.js");
|
|
38
|
-
require("./request/gemini-to-openai.js");
|
|
39
|
-
require("./request/openai-to-gemini.js");
|
|
40
|
-
require("./request/openai-to-vertex.js");
|
|
41
|
-
require("./request/antigravity-to-openai.js");
|
|
42
|
-
require("./request/openai-responses.js");
|
|
43
|
-
require("./request/openai-to-kiro.js");
|
|
44
|
-
require("./request/openai-to-cursor.js");
|
|
45
|
-
require("./request/openai-to-ollama.js");
|
|
46
|
-
require("./request/openai-to-commandcode.js");
|
|
47
|
-
|
|
48
|
-
// Response translators
|
|
49
|
-
require("./response/claude-to-openai.js");
|
|
50
|
-
require("./response/openai-to-claude.js");
|
|
51
|
-
require("./response/gemini-to-openai.js");
|
|
52
|
-
require("./response/openai-to-antigravity.js");
|
|
53
|
-
require("./response/openai-responses.js");
|
|
54
|
-
require("./response/kiro-to-openai.js");
|
|
55
|
-
require("./response/cursor-to-openai.js");
|
|
56
|
-
require("./response/ollama-to-openai.js");
|
|
57
|
-
require("./response/commandcode-to-openai.js");
|
|
58
|
-
}
|
|
55
|
+
// Lazy load translators (no-op, loaded eagerly at module level)
|
|
56
|
+
async function ensureInitialized() {}
|
|
59
57
|
|
|
60
58
|
// Strip specific content types from messages (explicit opt-in via strip[] in PROVIDER_MODELS)
|
|
61
59
|
function stripContentTypes(body, stripList = []) {
|
|
@@ -27,11 +27,11 @@ import { FORMATS } from "../formats.js";
|
|
|
27
27
|
import { v4 as uuidv4 } from "uuid";
|
|
28
28
|
import {
|
|
29
29
|
resolveKiroModel,
|
|
30
|
-
resolveKiroThinkingBudget,
|
|
31
30
|
buildThinkingSystemPrefix,
|
|
32
31
|
KIRO_AGENTIC_SYSTEM_PROMPT,
|
|
33
32
|
resolveDefaultProfileArn,
|
|
34
33
|
} from "../../config/kiroConstants.js";
|
|
34
|
+
import { resolveKiroThinkingBudget } from "../../services/thinkingBudget.js";
|
|
35
35
|
import { DEFAULT_IMAGE_MIME } from "../schema/index.js";
|
|
36
36
|
import { ROLE, CLAUDE_BLOCK } from "../schema/index.js";
|
|
37
37
|
|
|
@@ -8,11 +8,11 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
8
8
|
import { resolveSessionId } from "../../utils/sessionManager.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveKiroModel,
|
|
11
|
-
resolveKiroThinkingBudget,
|
|
12
11
|
buildThinkingSystemPrefix,
|
|
13
12
|
KIRO_AGENTIC_SYSTEM_PROMPT,
|
|
14
|
-
resolveDefaultProfileArn
|
|
13
|
+
resolveDefaultProfileArn,
|
|
15
14
|
} from "../../config/kiroConstants.js";
|
|
15
|
+
import { resolveKiroThinkingBudget } from "../../services/thinkingBudget.js";
|
|
16
16
|
import { parseDataUri } from "../concerns/image.js";
|
|
17
17
|
import { DEFAULT_IMAGE_MIME } from "../schema/index.js";
|
|
18
18
|
import { ROLE, OPENAI_BLOCK, CLAUDE_BLOCK } from "../schema/index.js";
|