@datename/fastcode-termux 0.1.6-beta → 0.1.6
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/README.md +6 -24
- package/dist/agent/guards.d.ts +0 -8
- package/dist/agent/guards.js +0 -195
- package/dist/agent/protocol.js +1 -4
- package/dist/agent/tools.d.ts +1 -3
- package/dist/agent/tools.js +377 -2
- package/dist/app.js +103 -335
- package/dist/cli.js +311 -362
- package/dist/commands/index.js +0 -22
- package/dist/commands/login.d.ts +2 -4
- package/dist/commands/login.js +10 -12
- package/dist/commands/logout.js +16 -8
- package/dist/commands/model.d.ts +0 -13
- package/dist/commands/model.js +22 -42
- package/dist/commands/provider.d.ts +0 -13
- package/dist/commands/provider.js +9 -20
- package/dist/commands/whoami.js +5 -6
- package/dist/config/store.d.ts +12 -32
- package/dist/config/store.js +65 -117
- package/dist/config/trust.d.ts +8 -21
- package/dist/config/trust.js +13 -99
- package/dist/lib/diagnostics.d.ts +4 -29
- package/dist/lib/diagnostics.js +4 -60
- package/dist/lib/http.d.ts +1 -11
- package/dist/lib/http.js +4 -62
- package/dist/providers/anthropic.d.ts +0 -1
- package/dist/providers/anthropic.js +0 -12
- package/dist/providers/custom.d.ts +0 -9
- package/dist/providers/deepseek.d.ts +0 -10
- package/dist/providers/deepseek.js +1 -2
- package/dist/providers/google.d.ts +0 -9
- package/dist/providers/groq.d.ts +0 -10
- package/dist/providers/groq.js +1 -2
- package/dist/providers/index.d.ts +201 -10
- package/dist/providers/index.js +0 -30
- package/dist/providers/mistral.d.ts +0 -10
- package/dist/providers/mistral.js +1 -2
- package/dist/providers/moonshot.d.ts +0 -10
- package/dist/providers/moonshot.js +1 -2
- package/dist/providers/ollama.d.ts +0 -9
- package/dist/providers/openai.d.ts +0 -10
- package/dist/providers/openai.js +1 -2
- package/dist/providers/openaiCompatible.d.ts +0 -9
- package/dist/providers/openaiCompatible.js +10 -58
- package/dist/providers/openrouter.d.ts +0 -10
- package/dist/providers/openrouter.js +1 -2
- package/dist/providers/qwen.d.ts +0 -10
- package/dist/providers/qwen.js +1 -2
- package/dist/providers/xai.d.ts +0 -10
- package/dist/providers/xai.js +1 -2
- package/dist/providers/zhipu.d.ts +0 -10
- package/dist/providers/zhipu.js +1 -2
- package/dist/session/log.d.ts +12 -35
- package/dist/session/log.js +10 -206
- package/dist/types.d.ts +1 -60
- package/dist/ui/Message.d.ts +7 -1
- package/dist/ui/Message.js +2 -13
- package/dist/ui/Prompt.d.ts +2 -1
- package/dist/ui/Prompt.js +2 -2
- package/dist/ui/Spinner.js +5 -11
- package/dist/ui/StatusBar.d.ts +1 -2
- package/dist/ui/StatusBar.js +5 -6
- package/package.json +1 -1
- package/src/agent/guards.ts +0 -196
- package/src/agent/protocol.ts +1 -4
- package/src/agent/tools.ts +377 -3
- package/src/app.ts +103 -335
- package/src/cli.ts +3 -30
- package/src/commands/index.ts +0 -22
- package/src/commands/login.ts +10 -12
- package/src/commands/logout.ts +16 -8
- package/src/commands/model.ts +22 -42
- package/src/commands/provider.ts +9 -20
- package/src/commands/whoami.ts +5 -6
- package/src/config/store.ts +69 -122
- package/src/config/trust.ts +21 -137
- package/src/lib/diagnostics.ts +4 -60
- package/src/lib/http.ts +4 -66
- package/src/providers/anthropic.ts +1 -13
- package/src/providers/deepseek.ts +1 -2
- package/src/providers/groq.ts +1 -2
- package/src/providers/index.ts +1 -32
- package/src/providers/mistral.ts +1 -2
- package/src/providers/moonshot.ts +1 -2
- package/src/providers/openai.ts +1 -2
- package/src/providers/openaiCompatible.ts +10 -58
- package/src/providers/openrouter.ts +1 -2
- package/src/providers/qwen.ts +1 -2
- package/src/providers/xai.ts +1 -2
- package/src/providers/zhipu.ts +1 -2
- package/src/session/log.ts +28 -267
- package/src/types.ts +1 -63
- package/src/ui/Message.ts +2 -13
- package/src/ui/Prompt.ts +2 -2
- package/src/ui/Spinner.ts +5 -11
- package/src/ui/StatusBar.ts +5 -6
- package/dist/agent/approval.d.ts +0 -50
- package/dist/agent/approval.js +0 -7
- package/dist/agent/compaction.d.ts +0 -39
- package/dist/agent/compaction.js +0 -227
- package/dist/agent/context.d.ts +0 -29
- package/dist/agent/context.js +0 -62
- package/dist/agent/ignore.d.ts +0 -11
- package/dist/agent/ignore.js +0 -129
- package/dist/agent/process-tree.d.ts +0 -2
- package/dist/agent/process-tree.js +0 -31
- package/dist/agent/protocol-mode.d.ts +0 -6
- package/dist/agent/protocol-mode.js +0 -51
- package/dist/agent/registry.d.ts +0 -17
- package/dist/agent/registry.js +0 -90
- package/dist/agent/runner.d.ts +0 -106
- package/dist/agent/runner.js +0 -352
- package/dist/agent/shell-session.d.ts +0 -37
- package/dist/agent/shell-session.js +0 -400
- package/dist/agent/stream.d.ts +0 -29
- package/dist/agent/stream.js +0 -103
- package/dist/agent/tool-schemas.d.ts +0 -2
- package/dist/agent/tool-schemas.js +0 -63
- package/dist/agent/tools/append_file.d.ts +0 -2
- package/dist/agent/tools/append_file.js +0 -26
- package/dist/agent/tools/apply_patch.d.ts +0 -10
- package/dist/agent/tools/apply_patch.js +0 -52
- package/dist/agent/tools/copy_file.d.ts +0 -2
- package/dist/agent/tools/copy_file.js +0 -30
- package/dist/agent/tools/delete_file.d.ts +0 -2
- package/dist/agent/tools/delete_file.js +0 -24
- package/dist/agent/tools/grep.d.ts +0 -2
- package/dist/agent/tools/grep.js +0 -23
- package/dist/agent/tools/index.d.ts +0 -2
- package/dist/agent/tools/index.js +0 -32
- package/dist/agent/tools/list_files.d.ts +0 -2
- package/dist/agent/tools/list_files.js +0 -17
- package/dist/agent/tools/make_dir.d.ts +0 -2
- package/dist/agent/tools/make_dir.js +0 -24
- package/dist/agent/tools/move_path.d.ts +0 -2
- package/dist/agent/tools/move_path.js +0 -47
- package/dist/agent/tools/paths.d.ts +0 -7
- package/dist/agent/tools/paths.js +0 -84
- package/dist/agent/tools/pwd.d.ts +0 -2
- package/dist/agent/tools/pwd.js +0 -10
- package/dist/agent/tools/read_file.d.ts +0 -2
- package/dist/agent/tools/read_file.js +0 -21
- package/dist/agent/tools/read_many.d.ts +0 -2
- package/dist/agent/tools/read_many.js +0 -25
- package/dist/agent/tools/readers.d.ts +0 -6
- package/dist/agent/tools/readers.js +0 -216
- package/dist/agent/tools/replace_in_file.d.ts +0 -2
- package/dist/agent/tools/replace_in_file.js +0 -30
- package/dist/agent/tools/shell.d.ts +0 -2
- package/dist/agent/tools/shell.js +0 -48
- package/dist/agent/tools/stat_path.d.ts +0 -2
- package/dist/agent/tools/stat_path.js +0 -31
- package/dist/agent/tools/types.d.ts +0 -39
- package/dist/agent/tools/types.js +0 -1
- package/dist/agent/tools/validate.d.ts +0 -6
- package/dist/agent/tools/validate.js +0 -29
- package/dist/agent/tools/write_file.d.ts +0 -2
- package/dist/agent/tools/write_file.js +0 -26
- package/dist/commands/attach.d.ts +0 -9
- package/dist/commands/attach.js +0 -15
- package/dist/commands/bg.d.ts +0 -7
- package/dist/commands/bg.js +0 -9
- package/dist/commands/cancel.d.ts +0 -10
- package/dist/commands/cancel.js +0 -10
- package/dist/commands/compact.d.ts +0 -10
- package/dist/commands/compact.js +0 -22
- package/dist/commands/context.d.ts +0 -7
- package/dist/commands/context.js +0 -24
- package/dist/commands/edit.d.ts +0 -10
- package/dist/commands/edit.js +0 -36
- package/dist/commands/effort.d.ts +0 -25
- package/dist/commands/effort.js +0 -48
- package/dist/commands/expand.d.ts +0 -10
- package/dist/commands/expand.js +0 -8
- package/dist/commands/jobs.d.ts +0 -7
- package/dist/commands/jobs.js +0 -16
- package/dist/commands/kill.d.ts +0 -7
- package/dist/commands/kill.js +0 -11
- package/dist/commands/steer.d.ts +0 -11
- package/dist/commands/steer.js +0 -13
- package/dist/lib/model-meta.d.ts +0 -19
- package/dist/lib/model-meta.js +0 -113
- package/dist/lib/native-tools.d.ts +0 -12
- package/dist/lib/native-tools.js +0 -21
- package/dist/lib/net.d.ts +0 -33
- package/dist/lib/net.js +0 -168
- package/dist/patch/apply.d.ts +0 -15
- package/dist/patch/apply.js +0 -172
- package/dist/patch/parse.d.ts +0 -29
- package/dist/patch/parse.js +0 -112
- package/dist/patch/plan.d.ts +0 -49
- package/dist/patch/plan.js +0 -273
- package/dist/session/projection.d.ts +0 -43
- package/dist/session/projection.js +0 -257
- package/dist/ui/Picker.d.ts +0 -8
- package/dist/ui/Picker.js +0 -24
- package/src/agent/approval.ts +0 -47
- package/src/agent/compaction.ts +0 -276
- package/src/agent/context.ts +0 -97
- package/src/agent/ignore.ts +0 -147
- package/src/agent/process-tree.ts +0 -32
- package/src/agent/protocol-mode.ts +0 -59
- package/src/agent/registry.ts +0 -98
- package/src/agent/runner.ts +0 -443
- package/src/agent/shell-session.ts +0 -449
- package/src/agent/stream.ts +0 -143
- package/src/agent/tool-schemas.ts +0 -67
- package/src/agent/tools/append_file.ts +0 -28
- package/src/agent/tools/apply_patch.ts +0 -54
- package/src/agent/tools/copy_file.ts +0 -32
- package/src/agent/tools/delete_file.ts +0 -26
- package/src/agent/tools/grep.ts +0 -25
- package/src/agent/tools/index.ts +0 -34
- package/src/agent/tools/list_files.ts +0 -19
- package/src/agent/tools/make_dir.ts +0 -26
- package/src/agent/tools/move_path.ts +0 -50
- package/src/agent/tools/paths.ts +0 -92
- package/src/agent/tools/pwd.ts +0 -12
- package/src/agent/tools/read_file.ts +0 -23
- package/src/agent/tools/read_many.ts +0 -27
- package/src/agent/tools/readers.ts +0 -228
- package/src/agent/tools/replace_in_file.ts +0 -32
- package/src/agent/tools/shell.ts +0 -53
- package/src/agent/tools/stat_path.ts +0 -33
- package/src/agent/tools/types.ts +0 -42
- package/src/agent/tools/validate.ts +0 -35
- package/src/agent/tools/write_file.ts +0 -28
- package/src/commands/attach.ts +0 -16
- package/src/commands/bg.ts +0 -9
- package/src/commands/cancel.ts +0 -10
- package/src/commands/compact.ts +0 -23
- package/src/commands/context.ts +0 -25
- package/src/commands/edit.ts +0 -37
- package/src/commands/effort.ts +0 -49
- package/src/commands/expand.ts +0 -8
- package/src/commands/jobs.ts +0 -17
- package/src/commands/kill.ts +0 -12
- package/src/commands/steer.ts +0 -13
- package/src/lib/model-meta.ts +0 -138
- package/src/lib/native-tools.ts +0 -32
- package/src/lib/net.ts +0 -204
- package/src/patch/apply.ts +0 -194
- package/src/patch/parse.ts +0 -131
- package/src/patch/plan.ts +0 -317
- package/src/session/projection.ts +0 -308
- package/src/ui/Picker.ts +0 -24
package/dist/lib/http.js
CHANGED
|
@@ -16,17 +16,8 @@ export async function fetchJson(url, init = {}) {
|
|
|
16
16
|
}
|
|
17
17
|
return (await res.json());
|
|
18
18
|
}
|
|
19
|
-
export class NetworkStallError extends Error {
|
|
20
|
-
code = "NETWORK_STALL";
|
|
21
|
-
bytesReceived;
|
|
22
|
-
constructor(message, bytesReceived = 0) {
|
|
23
|
-
super(message);
|
|
24
|
-
this.name = "NetworkStallError";
|
|
25
|
-
this.bytesReceived = bytesReceived;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
19
|
/** Async iterator over SSE events from a streaming HTTP response. */
|
|
29
|
-
export async function* streamSSE(res
|
|
20
|
+
export async function* streamSSE(res) {
|
|
30
21
|
if (!res.ok) {
|
|
31
22
|
const body = await res.text().catch(() => "");
|
|
32
23
|
throw new Error(`${res.status} ${res.statusText}: ${body.slice(0, 500)}`);
|
|
@@ -35,50 +26,19 @@ export async function* streamSSE(res, options = {}) {
|
|
|
35
26
|
throw new Error("Empty response body");
|
|
36
27
|
const reader = res.body.getReader();
|
|
37
28
|
const decoder = new TextDecoder("utf-8");
|
|
38
|
-
const envIdle = Number(process.env["FASTCODE_SSE_IDLE_MS"]);
|
|
39
|
-
const idleMs = positive(options.idleTimeoutMs, positive(envIdle, 25_000));
|
|
40
|
-
const totalMs = positive(options.totalTimeoutMs, 0);
|
|
41
|
-
const startedAt = Date.now();
|
|
42
|
-
let bytesReceived = 0;
|
|
43
29
|
let buffer = "";
|
|
44
30
|
while (true) {
|
|
45
|
-
const
|
|
46
|
-
if (remaining <= 0)
|
|
47
|
-
throw new NetworkStallError(`SSE total timeout after ${totalMs}ms`, bytesReceived);
|
|
48
|
-
const boundedByTotal = remaining <= idleMs;
|
|
49
|
-
const waitMs = boundedByTotal ? Math.max(1, remaining) : idleMs;
|
|
50
|
-
let timer;
|
|
51
|
-
const timeout = new Promise((_resolve, reject) => {
|
|
52
|
-
timer = setTimeout(() => {
|
|
53
|
-
reject(new NetworkStallError(boundedByTotal
|
|
54
|
-
? `SSE total timeout after ${totalMs}ms`
|
|
55
|
-
: `SSE idle timeout after ${idleMs}ms (no data received; set FASTCODE_SSE_IDLE_MS to wait longer)`, bytesReceived));
|
|
56
|
-
}, waitMs);
|
|
57
|
-
});
|
|
58
|
-
let chunk;
|
|
59
|
-
try {
|
|
60
|
-
chunk = await Promise.race([reader.read(), timeout]);
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
await reader.cancel().catch(() => undefined);
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
if (timer)
|
|
68
|
-
clearTimeout(timer);
|
|
69
|
-
}
|
|
70
|
-
const { value, done } = chunk;
|
|
31
|
+
const { value, done } = await reader.read();
|
|
71
32
|
if (done)
|
|
72
33
|
break;
|
|
73
|
-
bytesReceived += value?.byteLength ?? 0;
|
|
74
34
|
// Normalize CR/LF so both "\n\n" and "\r\n\r\n" frame separators
|
|
75
35
|
// are detected, including a CR/LF split across two chunks.
|
|
76
36
|
buffer = (buffer + decoder.decode(value, { stream: true })).replace(/\r\n?/g, "\n");
|
|
77
37
|
let sep = buffer.indexOf("\n\n");
|
|
78
38
|
while (sep !== -1) {
|
|
79
|
-
const
|
|
39
|
+
const chunk = buffer.slice(0, sep);
|
|
80
40
|
buffer = buffer.slice(sep + 2);
|
|
81
|
-
const ev = parseSseChunk(
|
|
41
|
+
const ev = parseSseChunk(chunk);
|
|
82
42
|
if (ev)
|
|
83
43
|
yield ev;
|
|
84
44
|
sep = buffer.indexOf("\n\n");
|
|
@@ -92,24 +52,6 @@ export async function* streamSSE(res, options = {}) {
|
|
|
92
52
|
yield ev;
|
|
93
53
|
}
|
|
94
54
|
}
|
|
95
|
-
export async function probeConnectivity(url, timeoutMs = 3000) {
|
|
96
|
-
const controller = new AbortController();
|
|
97
|
-
const timer = setTimeout(() => controller.abort(), positive(timeoutMs, 3000));
|
|
98
|
-
try {
|
|
99
|
-
const res = await fetch(url, { signal: controller.signal });
|
|
100
|
-
await res.body?.cancel().catch(() => undefined);
|
|
101
|
-
return res.ok;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
finally {
|
|
107
|
-
clearTimeout(timer);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
function positive(value, fallback) {
|
|
111
|
-
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : fallback;
|
|
112
|
-
}
|
|
113
55
|
function parseSseChunk(chunk) {
|
|
114
56
|
let event;
|
|
115
57
|
const dataLines = [];
|
|
@@ -10,16 +10,12 @@ const STATIC_MODELS = [
|
|
|
10
10
|
{ id: "claude-haiku-4.5", label: "Claude Haiku 4.5" },
|
|
11
11
|
];
|
|
12
12
|
const BASE = "https://api.anthropic.com/v1";
|
|
13
|
-
const THINKING_BUDGETS = { low: 1024, medium: 4096, high: 8192, max: 16000 };
|
|
14
13
|
export const anthropicProvider = {
|
|
15
14
|
id: "anthropic",
|
|
16
15
|
label: "Anthropic (Claude)",
|
|
17
16
|
authEnv: ["ANTHROPIC_API_KEY", "CLAUDE_API_KEY"],
|
|
18
17
|
baseUrl: BASE,
|
|
19
18
|
defaultModel: "claude-sonnet-5.5",
|
|
20
|
-
supportsReasoning() {
|
|
21
|
-
return true;
|
|
22
|
-
},
|
|
23
19
|
async listModels(apiKey) {
|
|
24
20
|
// Query the live model list; fall back to the built-in list offline.
|
|
25
21
|
if (apiKey) {
|
|
@@ -57,14 +53,6 @@ export const anthropicProvider = {
|
|
|
57
53
|
max_tokens: req.maxOutputTokens ?? 4096,
|
|
58
54
|
...(req.temperature !== undefined ? { temperature: req.temperature } : {}),
|
|
59
55
|
};
|
|
60
|
-
if (req.reasoningEffort && req.reasoningEffort !== "auto") {
|
|
61
|
-
const budget = THINKING_BUDGETS[req.reasoningEffort] ?? THINKING_BUDGETS.medium;
|
|
62
|
-
body.thinking = { type: "enabled", budget_tokens: budget };
|
|
63
|
-
// max_tokens must exceed the thinking budget.
|
|
64
|
-
body.max_tokens = Math.max(body.max_tokens, budget + 1024);
|
|
65
|
-
// Extended thinking is incompatible with a custom temperature.
|
|
66
|
-
delete body.temperature;
|
|
67
|
-
}
|
|
68
56
|
const res = await fetch(BASE + "/messages", {
|
|
69
57
|
method: "POST",
|
|
70
58
|
headers: {
|
|
@@ -10,24 +10,15 @@ export declare const customProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
24
|
};
|
|
@@ -10,25 +10,15 @@ export declare const deepseekProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
|
-
supportsReasoning: () => boolean;
|
|
34
24
|
};
|
|
@@ -11,6 +11,5 @@ export const deepseekProvider = {
|
|
|
11
11
|
baseUrl: BASE,
|
|
12
12
|
defaultModel: "deepseek-v4-pro",
|
|
13
13
|
listModels: (apiKey) => listModelsHttp({ baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
14
|
-
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC
|
|
15
|
-
supportsReasoning: () => true,
|
|
14
|
+
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
16
15
|
};
|
|
@@ -10,24 +10,15 @@ export declare const googleProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
24
|
};
|
package/dist/providers/groq.d.ts
CHANGED
|
@@ -10,25 +10,15 @@ export declare const groqProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
|
-
supportsReasoning: () => boolean;
|
|
34
24
|
};
|
package/dist/providers/groq.js
CHANGED
|
@@ -16,6 +16,5 @@ export const groqProvider = {
|
|
|
16
16
|
baseUrl: BASE,
|
|
17
17
|
defaultModel: "llama-3.3-70b-versatile",
|
|
18
18
|
listModels: (apiKey) => listModelsHttp({ baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
19
|
-
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC
|
|
20
|
-
supportsReasoning: () => true,
|
|
19
|
+
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
21
20
|
};
|
|
@@ -1,10 +1,201 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export declare const PROVIDERS: ({
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
authEnv: string[];
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
defaultModel: string;
|
|
7
|
+
listModels(apiKey: any): Promise<any>;
|
|
8
|
+
stream(req: any, apiKey: any): AsyncGenerator<{
|
|
9
|
+
delta: any;
|
|
10
|
+
done: boolean;
|
|
11
|
+
usage?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
delta: string;
|
|
14
|
+
done: boolean;
|
|
15
|
+
usage: {
|
|
16
|
+
inputTokens: number;
|
|
17
|
+
outputTokens: number;
|
|
18
|
+
costUsd: number;
|
|
19
|
+
};
|
|
20
|
+
}, void, unknown>;
|
|
21
|
+
} | {
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
authEnv: string[];
|
|
25
|
+
readonly baseUrl: string;
|
|
26
|
+
defaultModel: string;
|
|
27
|
+
listModels: (apiKey: any) => Promise<any>;
|
|
28
|
+
stream: (req: any, apiKey: any) => AsyncGenerator<{
|
|
29
|
+
delta: string;
|
|
30
|
+
done: boolean;
|
|
31
|
+
reasoning?: undefined;
|
|
32
|
+
usage?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
delta: string;
|
|
35
|
+
done: boolean;
|
|
36
|
+
reasoning: string;
|
|
37
|
+
usage?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
delta: string;
|
|
40
|
+
done: boolean;
|
|
41
|
+
usage: any;
|
|
42
|
+
reasoning?: undefined;
|
|
43
|
+
}, void, unknown>;
|
|
44
|
+
} | {
|
|
45
|
+
id: string;
|
|
46
|
+
label: string;
|
|
47
|
+
authEnv: any[];
|
|
48
|
+
readonly baseUrl: string;
|
|
49
|
+
defaultModel: string;
|
|
50
|
+
listModels: () => Promise<any>;
|
|
51
|
+
stream: (req: any) => AsyncGenerator<{
|
|
52
|
+
delta: string;
|
|
53
|
+
done: boolean;
|
|
54
|
+
reasoning?: undefined;
|
|
55
|
+
usage?: undefined;
|
|
56
|
+
} | {
|
|
57
|
+
delta: string;
|
|
58
|
+
done: boolean;
|
|
59
|
+
reasoning: string;
|
|
60
|
+
usage?: undefined;
|
|
61
|
+
} | {
|
|
62
|
+
delta: string;
|
|
63
|
+
done: boolean;
|
|
64
|
+
usage: any;
|
|
65
|
+
reasoning?: undefined;
|
|
66
|
+
}, void, unknown>;
|
|
67
|
+
})[];
|
|
68
|
+
export declare function getProvider(id: any): {
|
|
69
|
+
id: string;
|
|
70
|
+
label: string;
|
|
71
|
+
authEnv: string[];
|
|
72
|
+
baseUrl: string;
|
|
73
|
+
defaultModel: string;
|
|
74
|
+
listModels(apiKey: any): Promise<any>;
|
|
75
|
+
stream(req: any, apiKey: any): AsyncGenerator<{
|
|
76
|
+
delta: any;
|
|
77
|
+
done: boolean;
|
|
78
|
+
usage?: undefined;
|
|
79
|
+
} | {
|
|
80
|
+
delta: string;
|
|
81
|
+
done: boolean;
|
|
82
|
+
usage: {
|
|
83
|
+
inputTokens: number;
|
|
84
|
+
outputTokens: number;
|
|
85
|
+
costUsd: number;
|
|
86
|
+
};
|
|
87
|
+
}, void, unknown>;
|
|
88
|
+
} | {
|
|
89
|
+
id: string;
|
|
90
|
+
label: string;
|
|
91
|
+
authEnv: string[];
|
|
92
|
+
readonly baseUrl: string;
|
|
93
|
+
defaultModel: string;
|
|
94
|
+
listModels: (apiKey: any) => Promise<any>;
|
|
95
|
+
stream: (req: any, apiKey: any) => AsyncGenerator<{
|
|
96
|
+
delta: string;
|
|
97
|
+
done: boolean;
|
|
98
|
+
reasoning?: undefined;
|
|
99
|
+
usage?: undefined;
|
|
100
|
+
} | {
|
|
101
|
+
delta: string;
|
|
102
|
+
done: boolean;
|
|
103
|
+
reasoning: string;
|
|
104
|
+
usage?: undefined;
|
|
105
|
+
} | {
|
|
106
|
+
delta: string;
|
|
107
|
+
done: boolean;
|
|
108
|
+
usage: any;
|
|
109
|
+
reasoning?: undefined;
|
|
110
|
+
}, void, unknown>;
|
|
111
|
+
} | {
|
|
112
|
+
id: string;
|
|
113
|
+
label: string;
|
|
114
|
+
authEnv: any[];
|
|
115
|
+
readonly baseUrl: string;
|
|
116
|
+
defaultModel: string;
|
|
117
|
+
listModels: () => Promise<any>;
|
|
118
|
+
stream: (req: any) => AsyncGenerator<{
|
|
119
|
+
delta: string;
|
|
120
|
+
done: boolean;
|
|
121
|
+
reasoning?: undefined;
|
|
122
|
+
usage?: undefined;
|
|
123
|
+
} | {
|
|
124
|
+
delta: string;
|
|
125
|
+
done: boolean;
|
|
126
|
+
reasoning: string;
|
|
127
|
+
usage?: undefined;
|
|
128
|
+
} | {
|
|
129
|
+
delta: string;
|
|
130
|
+
done: boolean;
|
|
131
|
+
usage: any;
|
|
132
|
+
reasoning?: undefined;
|
|
133
|
+
}, void, unknown>;
|
|
134
|
+
};
|
|
135
|
+
export declare function getProviderOrThrow(id: any): {
|
|
136
|
+
id: string;
|
|
137
|
+
label: string;
|
|
138
|
+
authEnv: string[];
|
|
139
|
+
baseUrl: string;
|
|
140
|
+
defaultModel: string;
|
|
141
|
+
listModels(apiKey: any): Promise<any>;
|
|
142
|
+
stream(req: any, apiKey: any): AsyncGenerator<{
|
|
143
|
+
delta: any;
|
|
144
|
+
done: boolean;
|
|
145
|
+
usage?: undefined;
|
|
146
|
+
} | {
|
|
147
|
+
delta: string;
|
|
148
|
+
done: boolean;
|
|
149
|
+
usage: {
|
|
150
|
+
inputTokens: number;
|
|
151
|
+
outputTokens: number;
|
|
152
|
+
costUsd: number;
|
|
153
|
+
};
|
|
154
|
+
}, void, unknown>;
|
|
155
|
+
} | {
|
|
156
|
+
id: string;
|
|
157
|
+
label: string;
|
|
158
|
+
authEnv: string[];
|
|
159
|
+
readonly baseUrl: string;
|
|
160
|
+
defaultModel: string;
|
|
161
|
+
listModels: (apiKey: any) => Promise<any>;
|
|
162
|
+
stream: (req: any, apiKey: any) => AsyncGenerator<{
|
|
163
|
+
delta: string;
|
|
164
|
+
done: boolean;
|
|
165
|
+
reasoning?: undefined;
|
|
166
|
+
usage?: undefined;
|
|
167
|
+
} | {
|
|
168
|
+
delta: string;
|
|
169
|
+
done: boolean;
|
|
170
|
+
reasoning: string;
|
|
171
|
+
usage?: undefined;
|
|
172
|
+
} | {
|
|
173
|
+
delta: string;
|
|
174
|
+
done: boolean;
|
|
175
|
+
usage: any;
|
|
176
|
+
reasoning?: undefined;
|
|
177
|
+
}, void, unknown>;
|
|
178
|
+
} | {
|
|
179
|
+
id: string;
|
|
180
|
+
label: string;
|
|
181
|
+
authEnv: any[];
|
|
182
|
+
readonly baseUrl: string;
|
|
183
|
+
defaultModel: string;
|
|
184
|
+
listModels: () => Promise<any>;
|
|
185
|
+
stream: (req: any) => AsyncGenerator<{
|
|
186
|
+
delta: string;
|
|
187
|
+
done: boolean;
|
|
188
|
+
reasoning?: undefined;
|
|
189
|
+
usage?: undefined;
|
|
190
|
+
} | {
|
|
191
|
+
delta: string;
|
|
192
|
+
done: boolean;
|
|
193
|
+
reasoning: string;
|
|
194
|
+
usage?: undefined;
|
|
195
|
+
} | {
|
|
196
|
+
delta: string;
|
|
197
|
+
done: boolean;
|
|
198
|
+
usage: any;
|
|
199
|
+
reasoning?: undefined;
|
|
200
|
+
}, void, unknown>;
|
|
201
|
+
};
|
package/dist/providers/index.js
CHANGED
|
@@ -35,33 +35,3 @@ export function getProviderOrThrow(id) {
|
|
|
35
35
|
throw new Error("Unknown provider: " + id);
|
|
36
36
|
return p;
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Cheap connectivity check used by the model picker to label a list "offline".
|
|
40
|
-
* `listModels()` silently falls back to the static list, so without this probe
|
|
41
|
-
* the UI cannot tell a live catalog from a cached one.
|
|
42
|
-
*/
|
|
43
|
-
export async function probeProvider(provider, apiKey, timeoutMs = 4000) {
|
|
44
|
-
const controller = new AbortController();
|
|
45
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
46
|
-
try {
|
|
47
|
-
const base = String(provider.baseUrl).replace(/[/]+$/, "");
|
|
48
|
-
const headers = { accept: "application/json" };
|
|
49
|
-
if (apiKey) {
|
|
50
|
-
if (provider.id === "anthropic") {
|
|
51
|
-
headers["x-api-key"] = apiKey;
|
|
52
|
-
headers["anthropic-version"] = "2023-06-01";
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
headers["authorization"] = "Bearer " + apiKey;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const res = await fetch(base + "/models", { headers, signal: controller.signal });
|
|
59
|
-
return res.ok;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
clearTimeout(timer);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -10,25 +10,15 @@ export declare const mistralProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
|
-
supportsReasoning: () => boolean;
|
|
34
24
|
};
|
|
@@ -15,6 +15,5 @@ export const mistralProvider = {
|
|
|
15
15
|
baseUrl: BASE,
|
|
16
16
|
defaultModel: "mistral-small-latest",
|
|
17
17
|
listModels: (apiKey) => listModelsHttp({ baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
18
|
-
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC
|
|
19
|
-
supportsReasoning: () => true,
|
|
18
|
+
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
20
19
|
};
|
|
@@ -10,25 +10,15 @@ export declare const moonshotProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
|
-
supportsReasoning: () => boolean;
|
|
34
24
|
};
|
|
@@ -18,6 +18,5 @@ export const moonshotProvider = {
|
|
|
18
18
|
},
|
|
19
19
|
defaultModel: "kimi-k3",
|
|
20
20
|
listModels: (apiKey) => listModelsHttp({ baseUrl: baseUrl(), apiKey, staticModels: STATIC }),
|
|
21
|
-
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: baseUrl(), apiKey, staticModels: STATIC
|
|
22
|
-
supportsReasoning: () => true,
|
|
21
|
+
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: baseUrl(), apiKey, staticModels: STATIC }),
|
|
23
22
|
};
|
|
@@ -10,24 +10,15 @@ export declare const ollamaProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
24
|
};
|
|
@@ -10,25 +10,15 @@ export declare const openaiProvider: {
|
|
|
10
10
|
done: boolean;
|
|
11
11
|
reasoning?: undefined;
|
|
12
12
|
usage?: undefined;
|
|
13
|
-
toolCalls?: undefined;
|
|
14
13
|
} | {
|
|
15
14
|
delta: string;
|
|
16
15
|
done: boolean;
|
|
17
16
|
reasoning: string;
|
|
18
17
|
usage?: undefined;
|
|
19
|
-
toolCalls?: undefined;
|
|
20
18
|
} | {
|
|
21
19
|
delta: string;
|
|
22
20
|
done: boolean;
|
|
23
21
|
usage: any;
|
|
24
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
25
22
|
reasoning?: undefined;
|
|
26
|
-
} | {
|
|
27
|
-
delta: string;
|
|
28
|
-
done: boolean;
|
|
29
|
-
usage: any;
|
|
30
|
-
reasoning?: undefined;
|
|
31
|
-
toolCalls?: undefined;
|
|
32
23
|
}, void, unknown>;
|
|
33
|
-
supportsReasoning: (model: any) => boolean;
|
|
34
24
|
};
|
package/dist/providers/openai.js
CHANGED
|
@@ -21,6 +21,5 @@ export const openaiProvider = {
|
|
|
21
21
|
baseUrl: BASE,
|
|
22
22
|
defaultModel: "gpt-6-luna",
|
|
23
23
|
listModels: (apiKey) => listModelsHttp({ baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
24
|
-
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC
|
|
25
|
-
supportsReasoning: (model) => /^(o\d|gpt-5|gpt-6)/i.test(model),
|
|
24
|
+
stream: (req, apiKey) => streamChatCompletion(req, { baseUrl: BASE, apiKey, staticModels: STATIC }),
|
|
26
25
|
};
|
|
@@ -3,24 +3,15 @@ export declare function streamChatCompletion(req: any, opts: any): AsyncGenerato
|
|
|
3
3
|
done: boolean;
|
|
4
4
|
reasoning?: undefined;
|
|
5
5
|
usage?: undefined;
|
|
6
|
-
toolCalls?: undefined;
|
|
7
6
|
} | {
|
|
8
7
|
delta: string;
|
|
9
8
|
done: boolean;
|
|
10
9
|
reasoning: string;
|
|
11
10
|
usage?: undefined;
|
|
12
|
-
toolCalls?: undefined;
|
|
13
11
|
} | {
|
|
14
12
|
delta: string;
|
|
15
13
|
done: boolean;
|
|
16
14
|
usage: any;
|
|
17
|
-
toolCalls: import("../types.js").NativeToolCall[];
|
|
18
15
|
reasoning?: undefined;
|
|
19
|
-
} | {
|
|
20
|
-
delta: string;
|
|
21
|
-
done: boolean;
|
|
22
|
-
usage: any;
|
|
23
|
-
reasoning?: undefined;
|
|
24
|
-
toolCalls?: undefined;
|
|
25
16
|
}, void, unknown>;
|
|
26
17
|
export declare function listModelsHttp(opts: any): Promise<any>;
|