@quatcode/agent 0.1.1 → 0.2.0

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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/args.d.ts +13 -1
  4. package/dist/args.d.ts.map +1 -1
  5. package/dist/args.js +25 -5
  6. package/dist/args.js.map +1 -1
  7. package/dist/cli.js +130 -98
  8. package/dist/cli.js.map +1 -1
  9. package/dist/clipboard.d.ts +5 -0
  10. package/dist/clipboard.d.ts.map +1 -0
  11. package/dist/clipboard.js +82 -0
  12. package/dist/clipboard.js.map +1 -0
  13. package/dist/gate.d.ts.map +1 -1
  14. package/dist/gate.js +1 -7
  15. package/dist/gate.js.map +1 -1
  16. package/dist/input.d.ts +56 -0
  17. package/dist/input.d.ts.map +1 -0
  18. package/dist/input.js +283 -0
  19. package/dist/input.js.map +1 -0
  20. package/dist/keyboard.d.ts +68 -0
  21. package/dist/keyboard.d.ts.map +1 -0
  22. package/dist/keyboard.js +390 -0
  23. package/dist/keyboard.js.map +1 -0
  24. package/dist/logo.d.ts +16 -0
  25. package/dist/logo.d.ts.map +1 -0
  26. package/dist/logo.js +131 -0
  27. package/dist/logo.js.map +1 -0
  28. package/dist/markdown.d.ts +14 -0
  29. package/dist/markdown.d.ts.map +1 -0
  30. package/dist/markdown.js +244 -0
  31. package/dist/markdown.js.map +1 -0
  32. package/dist/mcp.d.ts +19 -0
  33. package/dist/mcp.d.ts.map +1 -0
  34. package/dist/mcp.js +206 -0
  35. package/dist/mcp.js.map +1 -0
  36. package/dist/models.d.ts +24 -0
  37. package/dist/models.d.ts.map +1 -0
  38. package/dist/models.js +188 -0
  39. package/dist/models.js.map +1 -0
  40. package/dist/picker.d.ts +40 -0
  41. package/dist/picker.d.ts.map +1 -0
  42. package/dist/picker.js +156 -0
  43. package/dist/picker.js.map +1 -0
  44. package/dist/render.d.ts.map +1 -1
  45. package/dist/render.js +3 -1
  46. package/dist/render.js.map +1 -1
  47. package/dist/screen.d.ts +28 -0
  48. package/dist/screen.d.ts.map +1 -0
  49. package/dist/screen.js +114 -0
  50. package/dist/screen.js.map +1 -0
  51. package/dist/skills.d.ts +21 -0
  52. package/dist/skills.d.ts.map +1 -0
  53. package/dist/skills.js +173 -0
  54. package/dist/skills.js.map +1 -0
  55. package/dist/store.d.ts +31 -1
  56. package/dist/store.d.ts.map +1 -1
  57. package/dist/store.js +192 -1
  58. package/dist/store.js.map +1 -1
  59. package/dist/theme.d.ts +86 -0
  60. package/dist/theme.d.ts.map +1 -0
  61. package/dist/theme.js +315 -0
  62. package/dist/theme.js.map +1 -0
  63. package/dist/tui.d.ts +16 -0
  64. package/dist/tui.d.ts.map +1 -0
  65. package/dist/tui.js +2456 -0
  66. package/dist/tui.js.map +1 -0
  67. package/dist/turn.d.ts +45 -0
  68. package/dist/turn.d.ts.map +1 -0
  69. package/dist/turn.js +198 -0
  70. package/dist/turn.js.map +1 -0
  71. package/dist/version.d.ts +2 -0
  72. package/dist/version.d.ts.map +1 -0
  73. package/dist/version.js +13 -0
  74. package/dist/version.js.map +1 -0
  75. package/package.json +22 -6
@@ -0,0 +1,244 @@
1
+ import { bold, clipAnsi, glyphs, italic, stringWidth, tone, underline } from "./theme.js";
2
+ const TOKEN_RE = /(`[^`]+`|\*\*[^*]+\*\*|__[^_]+__|\*[^*\n]+\*|_[^_\n]+_|\[[^\]]+\]\([^)]+\)|https?:\/\/[^\s)]+)/g;
3
+ export function parseInline(text) {
4
+ const segments = [];
5
+ let last = 0;
6
+ TOKEN_RE.lastIndex = 0;
7
+ let match;
8
+ while ((match = TOKEN_RE.exec(text)) !== null) {
9
+ if (match.index > last) {
10
+ segments.push({ text: text.slice(last, match.index), kind: "plain" });
11
+ }
12
+ const token = match[0];
13
+ if (token.startsWith("`")) {
14
+ segments.push({ text: token.slice(1, -1), kind: "code" });
15
+ }
16
+ else if (token.startsWith("**") || token.startsWith("__")) {
17
+ segments.push({ text: token.slice(2, -2), kind: "bold" });
18
+ }
19
+ else if (token.startsWith("[")) {
20
+ const link = /^\[([^\]]+)\]\(([^)]+)\)$/.exec(token);
21
+ if (link) {
22
+ const label = link[1];
23
+ const url = link[2];
24
+ segments.push({ text: label, kind: "link" });
25
+ if (url !== label)
26
+ segments.push({ text: ` (${url})`, kind: "dim" });
27
+ }
28
+ }
29
+ else if (/^https?:/.test(token)) {
30
+ segments.push({ text: token, kind: "link" });
31
+ }
32
+ else if (token.startsWith("*")) {
33
+ segments.push({ text: token.slice(1, -1), kind: "italic" });
34
+ }
35
+ else {
36
+ segments.push({ text: token.slice(1, -1), kind: "italic" });
37
+ }
38
+ last = match.index + token.length;
39
+ }
40
+ if (last < text.length)
41
+ segments.push({ text: text.slice(last), kind: "plain" });
42
+ return segments;
43
+ }
44
+ export function styleSegment(segment) {
45
+ switch (segment.kind) {
46
+ case "plain":
47
+ return tone.bone(segment.text);
48
+ case "bold":
49
+ return bold(tone.bone(segment.text));
50
+ case "italic":
51
+ return italic(tone.silver(segment.text));
52
+ case "code":
53
+ return tone.code(segment.text);
54
+ case "dim":
55
+ return tone.mist(segment.text);
56
+ case "link":
57
+ return underline(tone.silver(segment.text));
58
+ }
59
+ }
60
+ function toPieces(segments) {
61
+ const pieces = [];
62
+ for (const segment of segments) {
63
+ for (const part of segment.text.split(/(\s+)/)) {
64
+ if (part === "")
65
+ continue;
66
+ pieces.push({ text: part, kind: segment.kind, space: /^\s+$/.test(part) });
67
+ }
68
+ }
69
+ return pieces;
70
+ }
71
+ export function wrapSegments(segments, firstPrefix, nextPrefix, width) {
72
+ const out = [];
73
+ let line = [];
74
+ let prefix = firstPrefix;
75
+ let lineWidth = 0;
76
+ let pendingSpace = false;
77
+ const available = () => Math.max(4, width - stringWidth(prefix));
78
+ const flush = () => {
79
+ if (line.length === 0) {
80
+ pendingSpace = false;
81
+ return;
82
+ }
83
+ out.push(prefix + line.map(styleSegment).join(""));
84
+ line = [];
85
+ prefix = nextPrefix;
86
+ lineWidth = 0;
87
+ pendingSpace = false;
88
+ };
89
+ const add = (text, kind) => {
90
+ if (pendingSpace && line.length > 0) {
91
+ lineWidth += 1;
92
+ const lastSpace = line[line.length - 1];
93
+ if (lastSpace.kind === "plain")
94
+ lastSpace.text += " ";
95
+ else
96
+ line.push({ text: " ", kind: "plain" });
97
+ pendingSpace = false;
98
+ }
99
+ const last = line[line.length - 1];
100
+ if (last && last.kind === kind)
101
+ last.text += text;
102
+ else
103
+ line.push({ text, kind });
104
+ lineWidth += stringWidth(text);
105
+ };
106
+ for (const piece of toPieces(segments)) {
107
+ if (piece.space) {
108
+ if (line.length > 0)
109
+ pendingSpace = true;
110
+ continue;
111
+ }
112
+ let text = piece.text;
113
+ while (text.length > 0) {
114
+ const room = available() - lineWidth - (pendingSpace && line.length > 0 ? 1 : 0);
115
+ if (room <= 0) {
116
+ flush();
117
+ continue;
118
+ }
119
+ if (stringWidth(text) <= room) {
120
+ add(text, piece.kind);
121
+ text = "";
122
+ break;
123
+ }
124
+ let cut = 0;
125
+ let cutWidth = 0;
126
+ for (const ch of text) {
127
+ const chWidth = stringWidth(ch);
128
+ if (cutWidth + chWidth > room)
129
+ break;
130
+ cutWidth += chWidth;
131
+ cut += ch.length;
132
+ }
133
+ if (cut === 0) {
134
+ flush();
135
+ continue;
136
+ }
137
+ add(text.slice(0, cut), piece.kind);
138
+ text = text.slice(cut);
139
+ flush();
140
+ }
141
+ }
142
+ flush();
143
+ return out;
144
+ }
145
+ export function renderMarkdown(text, options) {
146
+ const width = Math.max(20, options.width);
147
+ const indent = options.indent ?? 2;
148
+ const pad = " ".repeat(indent);
149
+ const out = [];
150
+ const rawLines = text.replace(/\r\n?/g, "\n").split("\n");
151
+ let inCode = false;
152
+ let codeLang = "";
153
+ let paragraph = [];
154
+ const pushBlank = () => {
155
+ if (out.length > 0 && out[out.length - 1] !== "")
156
+ out.push("");
157
+ };
158
+ const flushParagraph = () => {
159
+ if (paragraph.length === 0)
160
+ return;
161
+ const joined = paragraph.join(" ").trim();
162
+ paragraph = [];
163
+ if (!joined)
164
+ return;
165
+ out.push(...wrapSegments(parseInline(joined), pad, pad, width));
166
+ };
167
+ for (const raw of rawLines) {
168
+ const line = raw.replace(/\s+$/, "");
169
+ const fence = /^```(.*)$/.exec(line);
170
+ if (fence) {
171
+ if (!inCode) {
172
+ flushParagraph();
173
+ inCode = true;
174
+ codeLang = (fence[1] ?? "").trim();
175
+ out.push(`${pad}${tone.mist(`// ${codeLang || "code"}`)}`);
176
+ }
177
+ else {
178
+ inCode = false;
179
+ codeLang = "";
180
+ pushBlank();
181
+ }
182
+ continue;
183
+ }
184
+ if (inCode) {
185
+ out.push(`${pad}${tone.steel("│")} ${tone.silver(line)}`);
186
+ continue;
187
+ }
188
+ const trimmed = line.trim();
189
+ if (trimmed === "") {
190
+ flushParagraph();
191
+ pushBlank();
192
+ continue;
193
+ }
194
+ const heading = /^(#{1,6})\s+(.*)$/.exec(trimmed);
195
+ if (heading) {
196
+ flushParagraph();
197
+ pushBlank();
198
+ const title = (heading[2] ?? "").trim();
199
+ out.push(...wrapSegments([{ text: title, kind: "bold" }], pad, pad, width));
200
+ if ((heading[1] ?? "").length <= 2 && title !== "") {
201
+ out.push(`${pad}${tone.steel("─".repeat(Math.min(width - indent, stringWidth(title))))}`);
202
+ }
203
+ pushBlank();
204
+ continue;
205
+ }
206
+ if (/^(-{3,}|\*{3,}|_{3,})$/.test(trimmed)) {
207
+ flushParagraph();
208
+ pushBlank();
209
+ out.push(`${pad}${tone.steel("─".repeat(Math.max(8, width - indent)))}`);
210
+ pushBlank();
211
+ continue;
212
+ }
213
+ const bullet = /^[-*+]\s+(.*)$/.exec(trimmed);
214
+ if (bullet) {
215
+ flushParagraph();
216
+ out.push(...wrapSegments(parseInline(bullet[1] ?? ""), `${pad}${tone.mist(glyphs.bullet)} `, `${pad} `, width));
217
+ continue;
218
+ }
219
+ const numbered = /^(\d{1,3})[.)]\s+(.*)$/.exec(trimmed);
220
+ if (numbered) {
221
+ flushParagraph();
222
+ out.push(...wrapSegments(parseInline(numbered[2] ?? ""), `${pad}${tone.mist(`${numbered[1]}.`)} `, `${pad} `, width));
223
+ continue;
224
+ }
225
+ const quote = /^>\s?(.*)$/.exec(trimmed);
226
+ if (quote) {
227
+ flushParagraph();
228
+ const bar = `${pad}${tone.steel("│ ")}`;
229
+ out.push(...wrapSegments(parseInline(quote[1] ?? ""), bar, bar, width));
230
+ continue;
231
+ }
232
+ if (trimmed.startsWith("|")) {
233
+ flushParagraph();
234
+ out.push(`${pad}${tone.mist(clipAnsi(trimmed, width - indent))}`);
235
+ continue;
236
+ }
237
+ paragraph.push(trimmed);
238
+ }
239
+ flushParagraph();
240
+ while (out.length > 0 && out[out.length - 1] === "")
241
+ out.pop();
242
+ return out;
243
+ }
244
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { McpServerConfig } from "@quatcode/tools";
2
+ export type McpAddResult = {
3
+ ok: true;
4
+ name: string;
5
+ config: McpServerConfig;
6
+ } | {
7
+ ok: false;
8
+ error: string;
9
+ };
10
+ export declare const MCP_USAGE = "/mcp [list] \u00B7 /mcp add <name> <command...> \u00B7 /mcp add <name> <url> \u00B7 /mcp add <url> \u00B7 /mcp remove <name> \u00B7 /mcp enable|disable <name> \u00B7 /mcp reconnect [name] \u00B7 /mcp tools [name]";
11
+ export declare function isMcpUrl(value: string): boolean;
12
+ export declare function mcpNameFromUrl(value: string): string;
13
+ export declare function tokenizeArgs(input: string): string[];
14
+ export declare function parseMcpAdd(rest: string): McpAddResult;
15
+ export declare function mcpInstructionsSection(entries: Array<{
16
+ name: string;
17
+ text: string;
18
+ }>): string;
19
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,eAAO,MAAM,SAAS,yNAC+J,CAAC;AAEtL,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BpD;AAqBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2GtD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAU7F"}
package/dist/mcp.js ADDED
@@ -0,0 +1,206 @@
1
+ export const MCP_USAGE = "/mcp [list] · /mcp add <name> <command...> · /mcp add <name> <url> · /mcp add <url> · /mcp remove <name> · /mcp enable|disable <name> · /mcp reconnect [name] · /mcp tools [name]";
2
+ export function isMcpUrl(value) {
3
+ return /^https?:\/\/\S+$/i.test(value.trim());
4
+ }
5
+ export function mcpNameFromUrl(value) {
6
+ try {
7
+ const host = new URL(value.trim()).hostname.replace(/^www\./i, "");
8
+ const slug = host.replace(/[^A-Za-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
9
+ return slug || "mcp";
10
+ }
11
+ catch {
12
+ return "mcp";
13
+ }
14
+ }
15
+ export function tokenizeArgs(input) {
16
+ const out = [];
17
+ let current = "";
18
+ let quote = null;
19
+ let hasContent = false;
20
+ for (const char of input) {
21
+ if (quote) {
22
+ if (char === quote)
23
+ quote = null;
24
+ else
25
+ current += char;
26
+ hasContent = true;
27
+ }
28
+ else if (char === '"' || char === "'") {
29
+ quote = char;
30
+ hasContent = true;
31
+ }
32
+ else if (/\s/.test(char)) {
33
+ if (current || hasContent) {
34
+ out.push(current);
35
+ current = "";
36
+ hasContent = false;
37
+ }
38
+ }
39
+ else {
40
+ current += char;
41
+ hasContent = true;
42
+ }
43
+ }
44
+ if (current || hasContent)
45
+ out.push(current);
46
+ return out;
47
+ }
48
+ function parseHeader(raw) {
49
+ let separator = raw.indexOf(":");
50
+ if (separator === -1)
51
+ separator = raw.indexOf("=");
52
+ if (separator <= 0)
53
+ return null;
54
+ const key = raw.slice(0, separator).trim();
55
+ const value = raw.slice(separator + 1).trim();
56
+ if (!key || !value)
57
+ return null;
58
+ return { key, value };
59
+ }
60
+ function parseEnvPair(raw) {
61
+ const separator = raw.indexOf("=");
62
+ if (separator <= 0)
63
+ return null;
64
+ const key = raw.slice(0, separator).trim();
65
+ const value = raw.slice(separator + 1).trim();
66
+ if (!key)
67
+ return null;
68
+ return { key, value };
69
+ }
70
+ export function parseMcpAdd(rest) {
71
+ const tokens = tokenizeArgs(rest.trim());
72
+ let name = tokens.shift();
73
+ if (!name)
74
+ return { ok: false, error: "a name or url is required: /mcp add <name> <command...>" };
75
+ let url;
76
+ if (isMcpUrl(name)) {
77
+ url = name;
78
+ name = mcpNameFromUrl(name);
79
+ }
80
+ if (!/^[A-Za-z0-9_-]+$/.test(name)) {
81
+ return { ok: false, error: "the server name may only contain letters, digits, - and _" };
82
+ }
83
+ let command;
84
+ let type;
85
+ let cwd;
86
+ let verbatim = false;
87
+ const args = [];
88
+ const headers = {};
89
+ const env = {};
90
+ for (let index = 0; index < tokens.length; index++) {
91
+ const token = tokens[index] ?? "";
92
+ if (token === "--") {
93
+ const after = tokens.slice(index + 1);
94
+ if (command) {
95
+ args.push(...after);
96
+ }
97
+ else if (after[0]) {
98
+ command = after[0];
99
+ args.push(...after.slice(1));
100
+ }
101
+ break;
102
+ }
103
+ if (verbatim) {
104
+ args.push(token);
105
+ continue;
106
+ }
107
+ const takeValue = () => {
108
+ if (index + 1 >= tokens.length)
109
+ return null;
110
+ index += 1;
111
+ return tokens[index] ?? null;
112
+ };
113
+ if (token === "--url" || token === "--http" || token === "--sse") {
114
+ const value = takeValue();
115
+ if (!value)
116
+ return { ok: false, error: `${token} needs a value` };
117
+ url = value;
118
+ if (token === "--sse")
119
+ type = "sse";
120
+ else if (token === "--http")
121
+ type = "http";
122
+ continue;
123
+ }
124
+ if (token === "--command" || token === "--cmd") {
125
+ const value = takeValue();
126
+ if (!value)
127
+ return { ok: false, error: `${token} needs a value` };
128
+ command = value;
129
+ continue;
130
+ }
131
+ if (token === "--header" || token === "-H") {
132
+ const value = takeValue();
133
+ if (!value)
134
+ return { ok: false, error: "--header needs a value like \"Name: value\"" };
135
+ const header = parseHeader(value);
136
+ if (!header)
137
+ return { ok: false, error: `invalid header: ${value}` };
138
+ headers[header.key] = header.value;
139
+ continue;
140
+ }
141
+ if (token === "--env") {
142
+ const value = takeValue();
143
+ if (!value)
144
+ return { ok: false, error: "--env needs a value like KEY=VALUE" };
145
+ const pair = parseEnvPair(value);
146
+ if (!pair)
147
+ return { ok: false, error: `invalid env pair: ${value}` };
148
+ env[pair.key] = pair.value;
149
+ continue;
150
+ }
151
+ if (token === "--cwd") {
152
+ const value = takeValue();
153
+ if (!value)
154
+ return { ok: false, error: "--cwd needs a value" };
155
+ cwd = value;
156
+ continue;
157
+ }
158
+ if (token.startsWith("--"))
159
+ return { ok: false, error: `unknown option: ${token}` };
160
+ if (url)
161
+ return { ok: false, error: "url servers do not take positional arguments" };
162
+ if (isMcpUrl(token)) {
163
+ url = token;
164
+ continue;
165
+ }
166
+ if (!command) {
167
+ command = token;
168
+ verbatim = true;
169
+ continue;
170
+ }
171
+ args.push(token);
172
+ }
173
+ const config = {};
174
+ if (command) {
175
+ config.type = type ?? "stdio";
176
+ config.command = command;
177
+ if (args.length > 0)
178
+ config.args = args;
179
+ }
180
+ else if (url) {
181
+ if (type)
182
+ config.type = type;
183
+ config.url = url;
184
+ }
185
+ else {
186
+ return { ok: false, error: "provide a command or a url" };
187
+ }
188
+ if (cwd)
189
+ config.cwd = cwd;
190
+ if (Object.keys(headers).length > 0)
191
+ config.headers = headers;
192
+ if (Object.keys(env).length > 0)
193
+ config.env = env;
194
+ return { ok: true, name, config };
195
+ }
196
+ export function mcpInstructionsSection(entries) {
197
+ if (entries.length === 0)
198
+ return "";
199
+ const blocks = entries.map((entry) => `<mcp-server name="${entry.name}">\n${entry.text}\n</mcp-server>`);
200
+ return [
201
+ "# mcp servers",
202
+ "External MCP servers are connected; their tools are registered alongside the built-in tools. Follow each server's instructions when using its tools.",
203
+ ...blocks,
204
+ ].join("\n");
205
+ }
206
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ModelProvider } from "@quatcode/core";
2
+ export type ProviderId = "anthropic" | "openai" | "gemini";
3
+ export type ModelEntry = {
4
+ id: string;
5
+ label?: string;
6
+ };
7
+ export type ProviderMeta = {
8
+ id: ProviderId;
9
+ label: string;
10
+ envKey: string;
11
+ defaultModel: string;
12
+ models: ModelEntry[];
13
+ };
14
+ export declare const PROVIDERS: ProviderMeta[];
15
+ export declare const CUSTOM_MODEL = "__custom__";
16
+ export declare function effortsForModel(model: string): string[] | null;
17
+ export declare function providerMeta(id: string): ProviderMeta | undefined;
18
+ export declare function resolveProviderForModel(model: string): ProviderId | null;
19
+ export declare function defaultModelFor(id: ProviderId): string;
20
+ export declare function hasKey(id: ProviderId, env?: Record<string, string | undefined>): boolean;
21
+ export declare function keyEnvFor(id: ProviderId): string;
22
+ export declare function buildProvider(id: ProviderId, model: string): ModelProvider;
23
+ export declare function fetchProviderModels(id: ProviderId, env?: Record<string, string | undefined>): Promise<ModelEntry[]>;
24
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EA6DnC,CAAC;AAEF,eAAO,MAAM,YAAY,eAAe,CAAC;AAEzC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAY9D;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAexE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAEtD;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO,CAGrG;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAEhD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAE1E;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,UAAU,EACd,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,OAAO,CAAC,UAAU,EAAE,CAAC,CAQvB"}