@easynet/agent-model 1.0.71 → 1.0.73
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 +8 -4
- package/config/model.yaml +12 -4
- package/dist/api/chat-model.d.ts +9 -0
- package/dist/api/chat-model.d.ts.map +1 -0
- package/dist/api/connectivity.d.ts +8 -0
- package/dist/api/connectivity.d.ts.map +1 -0
- package/dist/api/create-agent-llm.d.ts +1 -1
- package/dist/api/create-agent-llm.d.ts.map +1 -1
- package/dist/api/create-agent-model-registry.d.ts +1 -1
- package/dist/api/create-agent-model-registry.d.ts.map +1 -1
- package/dist/api/register-model.d.ts +1 -0
- package/dist/api/register-model.d.ts.map +1 -1
- package/dist/{chunk-RRZDREGU.js → chunk-NAH4USJ2.js} +20 -27
- package/dist/chunk-NAH4USJ2.js.map +1 -0
- package/dist/chunk-OQPM73A7.js +133 -0
- package/dist/chunk-OQPM73A7.js.map +1 -0
- package/dist/{chunk-6EQCGQTV.js → chunk-UVIUQUYJ.js} +4 -4
- package/dist/cli/index.js +6 -85
- package/dist/cli/index.js.map +1 -1
- package/dist/config/loader.d.ts +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/yaml-utils.d.ts +1 -12
- package/dist/config/yaml-utils.d.ts.map +1 -1
- package/dist/extensions/index.d.ts +2 -2
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +6 -14
- package/dist/extensions/npm-protocol.d.ts +1 -8
- package/dist/extensions/npm-protocol.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -83
- package/dist/index.js.map +1 -1
- package/dist/langchain/index.js +2 -2
- package/package.json +3 -2
- package/dist/api/create-embed-fn.d.ts +0 -10
- package/dist/api/create-embed-fn.d.ts.map +0 -1
- package/dist/api/get-default-llm-config.d.ts +0 -16
- package/dist/api/get-default-llm-config.d.ts.map +0 -1
- package/dist/api/get-default-vlm-config.d.ts +0 -15
- package/dist/api/get-default-vlm-config.d.ts.map +0 -1
- package/dist/chunk-3HA2CHZN.js +0 -149
- package/dist/chunk-3HA2CHZN.js.map +0 -1
- package/dist/chunk-AUQEXHUP.js +0 -105
- package/dist/chunk-AUQEXHUP.js.map +0 -1
- package/dist/chunk-KE7IMUSA.js +0 -223
- package/dist/chunk-KE7IMUSA.js.map +0 -1
- package/dist/chunk-RRZDREGU.js.map +0 -1
- package/dist/config/index.d.ts +0 -18
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -71
- package/dist/config/index.js.map +0 -1
- package/dist/config/ref.d.ts +0 -7
- package/dist/config/ref.d.ts.map +0 -1
- package/dist/connectivity/check.d.ts +0 -18
- package/dist/connectivity/check.d.ts.map +0 -1
- package/dist/connectivity/index.d.ts +0 -3
- package/dist/connectivity/index.d.ts.map +0 -1
- package/dist/connectivity/index.js +0 -11
- package/dist/connectivity/index.js.map +0 -1
- package/dist/connectivity/types.d.ts +0 -13
- package/dist/connectivity/types.d.ts.map +0 -1
- package/dist/npm/command.d.ts +0 -37
- package/dist/npm/command.d.ts.map +0 -1
- package/dist/npm/index.d.ts +0 -5
- package/dist/npm/index.d.ts.map +0 -1
- package/dist/npm/index.js +0 -39
- package/dist/npm/index.js.map +0 -1
- package/dist/npm/install.d.ts +0 -9
- package/dist/npm/install.d.ts.map +0 -1
- package/dist/npm/provider.d.ts +0 -15
- package/dist/npm/provider.d.ts.map +0 -1
- package/dist/npm/version.d.ts +0 -12
- package/dist/npm/version.d.ts.map +0 -1
- /package/dist/{chunk-6EQCGQTV.js.map → chunk-UVIUQUYJ.js.map} +0 -0
package/dist/chunk-3HA2CHZN.js
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
// src/config/yaml-utils.ts
|
|
2
|
-
import { existsSync, readFileSync, statSync } from "fs";
|
|
3
|
-
import { readFile, stat } from "fs/promises";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import { parse as parseYaml } from "yaml";
|
|
6
|
-
var YAML_CACHE = /* @__PURE__ */ new Map();
|
|
7
|
-
function clearYamlFileCache() {
|
|
8
|
-
YAML_CACHE.clear();
|
|
9
|
-
}
|
|
10
|
-
function substituteEnvInString(input, env, missingEnv) {
|
|
11
|
-
return input.replace(/\$\{(\w+)\}/g, (_, name) => {
|
|
12
|
-
const value = env[name];
|
|
13
|
-
if (value !== void 0) return value;
|
|
14
|
-
return missingEnv === "empty" ? "" : `\${${name}}`;
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
function substituteEnvInValue(input, options) {
|
|
18
|
-
if (typeof input === "string") {
|
|
19
|
-
return substituteEnvInString(input, options.env, options.missingEnv);
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(input)) {
|
|
22
|
-
return input.map((item) => substituteEnvInValue(item, options));
|
|
23
|
-
}
|
|
24
|
-
if (input && typeof input === "object") {
|
|
25
|
-
const out = {};
|
|
26
|
-
for (const [k, v] of Object.entries(input)) {
|
|
27
|
-
out[k] = substituteEnvInValue(v, options);
|
|
28
|
-
}
|
|
29
|
-
return out;
|
|
30
|
-
}
|
|
31
|
-
return input;
|
|
32
|
-
}
|
|
33
|
-
function parseYamlContent(content, options = {}) {
|
|
34
|
-
const parsed = parseYaml(content);
|
|
35
|
-
if (options.substituteEnv === false) return parsed;
|
|
36
|
-
return substituteEnvInValue(parsed, {
|
|
37
|
-
env: options.env ?? process.env,
|
|
38
|
-
missingEnv: options.missingEnv ?? "keep"
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
function readFromCache(filePath, mtimeMs) {
|
|
42
|
-
const cached = YAML_CACHE.get(filePath);
|
|
43
|
-
if (!cached) return void 0;
|
|
44
|
-
if (cached.mtimeMs !== mtimeMs) return void 0;
|
|
45
|
-
return cached.value;
|
|
46
|
-
}
|
|
47
|
-
function writeCache(filePath, mtimeMs, value) {
|
|
48
|
-
YAML_CACHE.set(filePath, { mtimeMs, value });
|
|
49
|
-
}
|
|
50
|
-
function loadYamlFileSync(filePath, options = {}) {
|
|
51
|
-
const absPath = path.resolve(filePath);
|
|
52
|
-
if (!existsSync(absPath)) return void 0;
|
|
53
|
-
const useCache = options.cache === true;
|
|
54
|
-
const fileStat = statSync(absPath);
|
|
55
|
-
if (useCache) {
|
|
56
|
-
const cached = readFromCache(absPath, fileStat.mtimeMs);
|
|
57
|
-
if (cached !== void 0) return cached;
|
|
58
|
-
}
|
|
59
|
-
const content = readFileSync(absPath, "utf-8");
|
|
60
|
-
const parsed = parseYamlContent(content, options);
|
|
61
|
-
if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);
|
|
62
|
-
return parsed;
|
|
63
|
-
}
|
|
64
|
-
async function loadYamlFile(filePath, options = {}) {
|
|
65
|
-
const absPath = path.resolve(filePath);
|
|
66
|
-
let fileStat;
|
|
67
|
-
try {
|
|
68
|
-
fileStat = await stat(absPath);
|
|
69
|
-
} catch (err) {
|
|
70
|
-
if (err?.code === "ENOENT") return void 0;
|
|
71
|
-
throw err;
|
|
72
|
-
}
|
|
73
|
-
const useCache = options.cache === true;
|
|
74
|
-
if (useCache) {
|
|
75
|
-
const cached = readFromCache(absPath, fileStat.mtimeMs);
|
|
76
|
-
if (cached !== void 0) return cached;
|
|
77
|
-
}
|
|
78
|
-
const content = await readFile(absPath, "utf-8");
|
|
79
|
-
const parsed = parseYamlContent(content, options);
|
|
80
|
-
if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);
|
|
81
|
-
return parsed;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// src/config/loader.ts
|
|
85
|
-
function substituteEnv(obj) {
|
|
86
|
-
if (obj === null || obj === void 0) return obj;
|
|
87
|
-
if (typeof obj === "string") {
|
|
88
|
-
const m = obj.match(/^\$\{(\w+)\}$/);
|
|
89
|
-
return m ? process.env[m[1]] ?? obj : obj;
|
|
90
|
-
}
|
|
91
|
-
if (Array.isArray(obj)) return obj.map(substituteEnv);
|
|
92
|
-
if (typeof obj === "object") {
|
|
93
|
-
const out = {};
|
|
94
|
-
for (const [k, v] of Object.entries(obj)) out[k] = substituteEnv(v);
|
|
95
|
-
return out;
|
|
96
|
-
}
|
|
97
|
-
return obj;
|
|
98
|
-
}
|
|
99
|
-
function parseLlmYaml(content, options = {}) {
|
|
100
|
-
const { substituteEnv: doSub = true } = options;
|
|
101
|
-
const parsed = parseYamlContent(content, {
|
|
102
|
-
substituteEnv: doSub,
|
|
103
|
-
missingEnv: "keep"
|
|
104
|
-
});
|
|
105
|
-
const llm = parsed?.spec?.llm ?? parsed?.llm;
|
|
106
|
-
if (llm == null) return void 0;
|
|
107
|
-
return llm;
|
|
108
|
-
}
|
|
109
|
-
function loadModelConfig(filePath, options = {}) {
|
|
110
|
-
if (typeof filePath !== "string" || filePath.trim().length === 0) {
|
|
111
|
-
throw new Error("agent-model: loadModelConfig requires a non-empty file path");
|
|
112
|
-
}
|
|
113
|
-
try {
|
|
114
|
-
const parsed = loadYamlFileSync(filePath, {
|
|
115
|
-
substituteEnv: options.substituteEnv !== false,
|
|
116
|
-
missingEnv: "keep",
|
|
117
|
-
cache: true
|
|
118
|
-
});
|
|
119
|
-
if (parsed == null) return null;
|
|
120
|
-
const source = parsed.spec ?? parsed;
|
|
121
|
-
return {
|
|
122
|
-
llm: source.llm ?? null,
|
|
123
|
-
vlm: source.vlm ?? null,
|
|
124
|
-
embed: source.embed ?? null,
|
|
125
|
-
runtime: {
|
|
126
|
-
check_connectivity: typeof source.runtime?.check_connectivity === "boolean" ? source.runtime.check_connectivity : void 0
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
} catch (e) {
|
|
130
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
131
|
-
throw new Error(`agent-model: failed to parse config file ${filePath}: ${msg}`, { cause: e });
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function loadLlmConfig(filePath, options = {}) {
|
|
135
|
-
const result = loadModelConfig(filePath, options);
|
|
136
|
-
return result?.llm ?? null;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export {
|
|
140
|
-
clearYamlFileCache,
|
|
141
|
-
parseYamlContent,
|
|
142
|
-
loadYamlFileSync,
|
|
143
|
-
loadYamlFile,
|
|
144
|
-
substituteEnv,
|
|
145
|
-
parseLlmYaml,
|
|
146
|
-
loadModelConfig,
|
|
147
|
-
loadLlmConfig
|
|
148
|
-
};
|
|
149
|
-
//# sourceMappingURL=chunk-3HA2CHZN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/yaml-utils.ts","../src/config/loader.ts"],"sourcesContent":["import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nexport interface YamlEnvOptions {\n substituteEnv?: boolean;\n missingEnv?: \"keep\" | \"empty\";\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface LoadYamlOptions extends YamlEnvOptions {\n cache?: boolean;\n}\n\ninterface CacheEntry {\n mtimeMs: number;\n value: unknown;\n}\n\nconst YAML_CACHE = new Map<string, CacheEntry>();\n\nexport function clearYamlFileCache(): void {\n YAML_CACHE.clear();\n}\n\nfunction substituteEnvInString(\n input: string,\n env: NodeJS.ProcessEnv,\n missingEnv: \"keep\" | \"empty\",\n): string {\n return input.replace(/\\$\\{(\\w+)\\}/g, (_, name: string) => {\n const value = env[name];\n if (value !== undefined) return value;\n return missingEnv === \"empty\" ? \"\" : `\\${${name}}`;\n });\n}\n\nfunction substituteEnvInValue(\n input: unknown,\n options: { env: NodeJS.ProcessEnv; missingEnv: \"keep\" | \"empty\" },\n): unknown {\n if (typeof input === \"string\") {\n return substituteEnvInString(input, options.env, options.missingEnv);\n }\n if (Array.isArray(input)) {\n return input.map((item) => substituteEnvInValue(item, options));\n }\n if (input && typeof input === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(input)) {\n out[k] = substituteEnvInValue(v, options);\n }\n return out;\n }\n return input;\n}\n\nexport function parseYamlContent<T = unknown>(\n content: string,\n options: YamlEnvOptions = {},\n): T {\n const parsed = parseYaml(content) as unknown;\n if (options.substituteEnv === false) return parsed as T;\n return substituteEnvInValue(parsed, {\n env: options.env ?? process.env,\n missingEnv: options.missingEnv ?? \"keep\",\n }) as T;\n}\n\nfunction readFromCache(filePath: string, mtimeMs: number): unknown | undefined {\n const cached = YAML_CACHE.get(filePath);\n if (!cached) return undefined;\n if (cached.mtimeMs !== mtimeMs) return undefined;\n return cached.value;\n}\n\nfunction writeCache(filePath: string, mtimeMs: number, value: unknown): void {\n YAML_CACHE.set(filePath, { mtimeMs, value });\n}\n\nexport function loadYamlFileSync<T = unknown>(\n filePath: string,\n options: LoadYamlOptions = {},\n): T | undefined {\n const absPath = path.resolve(filePath);\n if (!existsSync(absPath)) return undefined;\n const useCache = options.cache === true;\n const fileStat = statSync(absPath);\n if (useCache) {\n const cached = readFromCache(absPath, fileStat.mtimeMs);\n if (cached !== undefined) return cached as T;\n }\n const content = readFileSync(absPath, \"utf-8\");\n const parsed = parseYamlContent<T>(content, options);\n if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);\n return parsed;\n}\n\nexport async function loadYamlFile<T = unknown>(\n filePath: string,\n options: LoadYamlOptions = {},\n): Promise<T | undefined> {\n const absPath = path.resolve(filePath);\n let fileStat;\n try {\n fileStat = await stat(absPath);\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return undefined;\n throw err;\n }\n const useCache = options.cache === true;\n if (useCache) {\n const cached = readFromCache(absPath, fileStat.mtimeMs);\n if (cached !== undefined) return cached as T;\n }\n const content = await readFile(absPath, \"utf-8\");\n const parsed = parseYamlContent<T>(content, options);\n if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);\n return parsed;\n}\n","/**\n * Load and parse LLM config from YAML (e.g. model.yaml).\n * Supports ${VAR} substitution from process.env.\n */\nimport { loadYamlFileSync, parseYamlContent } from \"./yaml-utils.js\";\n\nexport interface LoadLlmConfigOptions {\n substituteEnv?: boolean;\n}\n\nexport function substituteEnv(obj: unknown): unknown {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === \"string\") {\n const m = obj.match(/^\\$\\{(\\w+)\\}$/);\n return m ? (process.env[m[1]] ?? obj) : obj;\n }\n if (Array.isArray(obj)) return obj.map(substituteEnv);\n if (typeof obj === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) out[k] = substituteEnv(v);\n return out;\n }\n return obj;\n}\n\nexport function parseLlmYaml(\n content: string,\n options: LoadLlmConfigOptions = {}\n): unknown {\n const { substituteEnv: doSub = true } = options;\n const parsed = parseYamlContent<{ llm?: unknown; spec?: { llm?: unknown } }>(content, {\n substituteEnv: doSub,\n missingEnv: \"keep\",\n });\n const llm = parsed?.spec?.llm ?? parsed?.llm;\n if (llm == null) return undefined;\n return llm;\n}\n\nexport interface ModelConfigResult {\n llm: unknown;\n vlm: unknown;\n embed: unknown;\n runtime: { check_connectivity?: boolean };\n}\n\n/**\n * Load the full model.yaml config, returning llm, vlm, embed, and runtime sections.\n */\nexport function loadModelConfig(\n filePath: string,\n options: LoadLlmConfigOptions = {},\n): ModelConfigResult | null {\n if (typeof filePath !== \"string\" || filePath.trim().length === 0) {\n throw new Error(\"agent-model: loadModelConfig requires a non-empty file path\");\n }\n try {\n const parsed = loadYamlFileSync<{\n llm?: unknown;\n vlm?: unknown;\n embed?: unknown;\n runtime?: Record<string, unknown>;\n spec?: {\n llm?: unknown;\n vlm?: unknown;\n embed?: unknown;\n runtime?: Record<string, unknown>;\n };\n }>(filePath, {\n substituteEnv: options.substituteEnv !== false,\n missingEnv: \"keep\",\n cache: true,\n });\n if (parsed == null) return null;\n const source = parsed.spec ?? parsed;\n return {\n llm: source.llm ?? null,\n vlm: source.vlm ?? null,\n embed: source.embed ?? null,\n runtime: {\n check_connectivity:\n typeof source.runtime?.check_connectivity === \"boolean\"\n ? source.runtime.check_connectivity\n : undefined,\n },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`agent-model: failed to parse config file ${filePath}: ${msg}`, { cause: e });\n }\n}\n\n/**\n * Load only the llm section from a YAML config file.\n * @deprecated Use loadModelConfig() instead.\n */\nexport function loadLlmConfig(\n filePath: string,\n options: LoadLlmConfigOptions = {}\n): unknown | null {\n const result = loadModelConfig(filePath, options);\n return result?.llm ?? null;\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-AUQEXHUP.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
// src/connectivity/check.ts
|
|
2
|
-
import https from "https";
|
|
3
|
-
var DEFAULT_TIMEOUT_MS = 8e3;
|
|
4
|
-
function probePath(baseURL) {
|
|
5
|
-
const base = baseURL.replace(/\/+$/, "");
|
|
6
|
-
if (base.endsWith("/v1")) return `${base}/models`;
|
|
7
|
-
return base.includes("/v1") ? `${base}/models` : `${base}/v1/models`;
|
|
8
|
-
}
|
|
9
|
-
function resolveProbeRequest(baseURL, endpointOptions) {
|
|
10
|
-
let path = probePath(baseURL);
|
|
11
|
-
const urlObj = new URL(path);
|
|
12
|
-
const resolveFrom = endpointOptions?.resolveHost?.from;
|
|
13
|
-
const resolveTo = endpointOptions?.resolveHost?.to;
|
|
14
|
-
let hostHeader = endpointOptions?.host;
|
|
15
|
-
if (resolveFrom && resolveTo && urlObj.hostname) {
|
|
16
|
-
urlObj.hostname = urlObj.hostname.replace(resolveFrom, resolveTo);
|
|
17
|
-
hostHeader = hostHeader ?? resolveFrom;
|
|
18
|
-
}
|
|
19
|
-
const searchParams = new URLSearchParams(urlObj.search);
|
|
20
|
-
if (endpointOptions?.bypassAuth === true) searchParams.set("bypass_auth", "true");
|
|
21
|
-
urlObj.search = searchParams.toString();
|
|
22
|
-
return { url: urlObj.toString(), hostHeader };
|
|
23
|
-
}
|
|
24
|
-
function checkWithHttps(url, hostHeader, options) {
|
|
25
|
-
return new Promise((resolve) => {
|
|
26
|
-
const u = new URL(url);
|
|
27
|
-
const reqOpts = {
|
|
28
|
-
hostname: u.hostname,
|
|
29
|
-
port: u.port || (u.protocol === "https:" ? 443 : 80),
|
|
30
|
-
path: u.pathname + u.search,
|
|
31
|
-
method: "GET",
|
|
32
|
-
headers: { Accept: "application/json" },
|
|
33
|
-
rejectUnauthorized: options.verifySSL
|
|
34
|
-
};
|
|
35
|
-
if (hostHeader) reqOpts.headers = { ...reqOpts.headers, Host: hostHeader };
|
|
36
|
-
const timeoutId = setTimeout(() => {
|
|
37
|
-
req.destroy();
|
|
38
|
-
resolve({ reachable: false, message: "Connection timed out" });
|
|
39
|
-
}, options.timeoutMs);
|
|
40
|
-
const req = https.request(reqOpts, (res) => {
|
|
41
|
-
clearTimeout(timeoutId);
|
|
42
|
-
resolve({
|
|
43
|
-
reachable: true,
|
|
44
|
-
message: res.statusCode === 200 ? "OK" : `HTTP ${res.statusCode}`,
|
|
45
|
-
statusCode: res.statusCode
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
req.on("error", (err) => {
|
|
49
|
-
clearTimeout(timeoutId);
|
|
50
|
-
resolve({ reachable: false, message: err.message || "Connection failed" });
|
|
51
|
-
});
|
|
52
|
-
req.end();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
async function checkEndpointConnectivity(baseURL, options) {
|
|
56
|
-
const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
57
|
-
const useHttps = options?.resolveHost != null || options?.verifySSL === false || options?.host != null || options?.bypassAuth === true;
|
|
58
|
-
if (useHttps) {
|
|
59
|
-
const { url: url2, hostHeader } = resolveProbeRequest(baseURL, options);
|
|
60
|
-
return checkWithHttps(url2, hostHeader, {
|
|
61
|
-
timeoutMs,
|
|
62
|
-
verifySSL: options?.verifySSL === true
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
const url = probePath(baseURL);
|
|
66
|
-
const controller = new AbortController();
|
|
67
|
-
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
68
|
-
try {
|
|
69
|
-
const res = await fetch(url, {
|
|
70
|
-
method: "GET",
|
|
71
|
-
signal: controller.signal,
|
|
72
|
-
headers: { Accept: "application/json" }
|
|
73
|
-
});
|
|
74
|
-
clearTimeout(timeoutId);
|
|
75
|
-
return {
|
|
76
|
-
reachable: true,
|
|
77
|
-
message: res.ok ? "OK" : `HTTP ${res.status}`,
|
|
78
|
-
statusCode: res.status
|
|
79
|
-
};
|
|
80
|
-
} catch (err) {
|
|
81
|
-
clearTimeout(timeoutId);
|
|
82
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
-
const isTimeout = err instanceof Error && err.name === "AbortError";
|
|
84
|
-
return {
|
|
85
|
-
reachable: false,
|
|
86
|
-
message: isTimeout ? "Connection timed out" : message || "Connection failed"
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
var CIS_UNREACHABLE_REMINDER = "Please ensure you are connected to Secure VPN and try again.";
|
|
91
|
-
function buildUnreachableError(endpointId, baseURL, detail) {
|
|
92
|
-
const parts = [
|
|
93
|
-
`Cannot connect to CIS (endpoint: ${endpointId}, base URL: ${baseURL}).`,
|
|
94
|
-
detail && ` ${detail}`,
|
|
95
|
-
` ${CIS_UNREACHABLE_REMINDER}`
|
|
96
|
-
];
|
|
97
|
-
return parts.filter(Boolean).join("").trim();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export {
|
|
101
|
-
checkEndpointConnectivity,
|
|
102
|
-
CIS_UNREACHABLE_REMINDER,
|
|
103
|
-
buildUnreachableError
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=chunk-AUQEXHUP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connectivity/check.ts"],"sourcesContent":["/**\n * Check connectivity to OpenAI-compatible / CIS endpoints.\n */\nimport https from \"node:https\";\nimport type { CheckConnectivityResult } from \"./types.js\";\n\nconst DEFAULT_TIMEOUT_MS = 8000;\n\nexport interface EndpointConnectivityOptions {\n timeoutMs?: number;\n resolveHost?: { from: string; to: string };\n host?: string;\n verifySSL?: boolean;\n bypassAuth?: boolean;\n featureKey?: string;\n}\n\nfunction probePath(baseURL: string): string {\n const base = baseURL.replace(/\\/+$/, \"\");\n if (base.endsWith(\"/v1\")) return `${base}/models`;\n return base.includes(\"/v1\") ? `${base}/models` : `${base}/v1/models`;\n}\n\nfunction resolveProbeRequest(\n baseURL: string,\n endpointOptions?: EndpointConnectivityOptions | null\n): { url: string; hostHeader: string | undefined } {\n let path = probePath(baseURL);\n const urlObj = new URL(path);\n const resolveFrom = endpointOptions?.resolveHost?.from;\n const resolveTo = endpointOptions?.resolveHost?.to;\n let hostHeader = endpointOptions?.host;\n if (resolveFrom && resolveTo && urlObj.hostname) {\n urlObj.hostname = urlObj.hostname.replace(resolveFrom, resolveTo);\n hostHeader = hostHeader ?? resolveFrom;\n }\n const searchParams = new URLSearchParams(urlObj.search);\n if (endpointOptions?.bypassAuth === true) searchParams.set(\"bypass_auth\", \"true\");\n urlObj.search = searchParams.toString();\n return { url: urlObj.toString(), hostHeader };\n}\n\nfunction checkWithHttps(\n url: string,\n hostHeader: string | undefined,\n options: { timeoutMs: number; verifySSL: boolean }\n): Promise<CheckConnectivityResult> {\n return new Promise((resolve) => {\n const u = new URL(url);\n const reqOpts: https.RequestOptions = {\n hostname: u.hostname,\n port: u.port || (u.protocol === \"https:\" ? 443 : 80),\n path: u.pathname + u.search,\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n rejectUnauthorized: options.verifySSL,\n };\n if (hostHeader) reqOpts.headers = { ...reqOpts.headers, Host: hostHeader };\n\n const timeoutId = setTimeout(() => {\n req.destroy();\n resolve({ reachable: false, message: \"Connection timed out\" });\n }, options.timeoutMs);\n\n const req = https.request(reqOpts, (res) => {\n clearTimeout(timeoutId);\n resolve({\n reachable: true,\n message: res.statusCode === 200 ? \"OK\" : `HTTP ${res.statusCode}`,\n statusCode: res.statusCode,\n });\n });\n req.on(\"error\", (err) => {\n clearTimeout(timeoutId);\n resolve({ reachable: false, message: err.message || \"Connection failed\" });\n });\n req.end();\n });\n}\n\nexport async function checkEndpointConnectivity(\n baseURL: string,\n options?: { timeoutMs?: number } & EndpointConnectivityOptions\n): Promise<CheckConnectivityResult> {\n const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const useHttps =\n options?.resolveHost != null ||\n options?.verifySSL === false ||\n options?.host != null ||\n options?.bypassAuth === true;\n\n if (useHttps) {\n const { url, hostHeader } = resolveProbeRequest(baseURL, options);\n return checkWithHttps(url, hostHeader, {\n timeoutMs,\n verifySSL: options?.verifySSL === true,\n });\n }\n\n const url = probePath(baseURL);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, {\n method: \"GET\",\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n });\n clearTimeout(timeoutId);\n return {\n reachable: true,\n message: res.ok ? \"OK\" : `HTTP ${res.status}`,\n statusCode: res.status,\n };\n } catch (err) {\n clearTimeout(timeoutId);\n const message = err instanceof Error ? err.message : String(err);\n const isTimeout = err instanceof Error && err.name === \"AbortError\";\n return {\n reachable: false,\n message: isTimeout ? \"Connection timed out\" : message || \"Connection failed\",\n };\n }\n}\n\nexport const CIS_UNREACHABLE_REMINDER =\n \"Please ensure you are connected to Secure VPN and try again.\";\n\nexport function buildUnreachableError(\n endpointId: string,\n baseURL: string,\n detail?: string\n): string {\n const parts = [\n `Cannot connect to CIS (endpoint: ${endpointId}, base URL: ${baseURL}).`,\n detail && ` ${detail}`,\n ` ${CIS_UNREACHABLE_REMINDER}`,\n ];\n return parts.filter(Boolean).join(\"\").trim();\n}\n"],"mappings":"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","names":["url"]}
|
package/dist/chunk-KE7IMUSA.js
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
// src/npm/provider.ts
|
|
2
|
-
var NPM_PROTOCOL_PREFIX = "npm:";
|
|
3
|
-
function isNpmProviderSpec(spec) {
|
|
4
|
-
return typeof spec === "string" && spec.startsWith(NPM_PROTOCOL_PREFIX);
|
|
5
|
-
}
|
|
6
|
-
function parseNpmProvider(provider) {
|
|
7
|
-
if (!isNpmProviderSpec(provider)) return null;
|
|
8
|
-
const rest = provider.slice(NPM_PROTOCOL_PREFIX.length);
|
|
9
|
-
const hashIdx = rest.indexOf("#");
|
|
10
|
-
const fragment = hashIdx >= 0 ? rest.slice(hashIdx + 1) : void 0;
|
|
11
|
-
const beforeHash = hashIdx >= 0 ? rest.slice(0, hashIdx) : rest;
|
|
12
|
-
const atIdx = beforeHash.startsWith("@") ? beforeHash.indexOf("@", 1) : beforeHash.lastIndexOf("@");
|
|
13
|
-
const pkg = atIdx > 0 ? beforeHash.slice(0, atIdx) : beforeHash;
|
|
14
|
-
const tag = atIdx > 0 ? beforeHash.slice(atIdx + 1) : void 0;
|
|
15
|
-
return { pkg: pkg || beforeHash, tag: tag || void 0, fragment };
|
|
16
|
-
}
|
|
17
|
-
function parseNpmProviderSpec(spec) {
|
|
18
|
-
const parsed = parseNpmProvider(spec);
|
|
19
|
-
if (!parsed) return null;
|
|
20
|
-
return {
|
|
21
|
-
packageName: parsed.pkg,
|
|
22
|
-
version: parsed.tag,
|
|
23
|
-
provider: parsed.fragment
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// src/npm/version.ts
|
|
28
|
-
import { execFileSync } from "child_process";
|
|
29
|
-
import { existsSync, readFileSync } from "fs";
|
|
30
|
-
import path from "path";
|
|
31
|
-
var versionCache = /* @__PURE__ */ new Map();
|
|
32
|
-
var CACHE_TTL = 5 * 60 * 1e3;
|
|
33
|
-
function clearVersionCache() {
|
|
34
|
-
versionCache.clear();
|
|
35
|
-
}
|
|
36
|
-
function resolveNpmPackageVersion(pkg, tag, options = {}) {
|
|
37
|
-
const cacheKey = tag ? `${pkg}@${tag}` : pkg;
|
|
38
|
-
const cached = versionCache.get(cacheKey);
|
|
39
|
-
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
|
|
40
|
-
return cached.version;
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
const spec = tag ? `${pkg}@${tag}` : pkg;
|
|
44
|
-
const out = execFileSync("npm", ["view", spec, "version"], {
|
|
45
|
-
cwd: options.cwd ?? process.cwd(),
|
|
46
|
-
encoding: "utf-8",
|
|
47
|
-
timeout: options.timeoutMs ?? 8e3,
|
|
48
|
-
stdio: ["ignore", "pipe", "pipe"]
|
|
49
|
-
});
|
|
50
|
-
const version = out?.trim() ?? null;
|
|
51
|
-
if (version) {
|
|
52
|
-
versionCache.set(cacheKey, { version, timestamp: Date.now() });
|
|
53
|
-
}
|
|
54
|
-
return version;
|
|
55
|
-
} catch {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function resolveLatestVersionFromRegistry(packageName, options = {}) {
|
|
60
|
-
const version = resolveNpmPackageVersion(packageName, void 0, options);
|
|
61
|
-
if (!version) {
|
|
62
|
-
throw new Error(`Failed to resolve latest version for ${packageName}`);
|
|
63
|
-
}
|
|
64
|
-
return version;
|
|
65
|
-
}
|
|
66
|
-
function formatProviderDisplay(provider) {
|
|
67
|
-
const parsed = parseNpmProvider(provider);
|
|
68
|
-
if (parsed == null) return provider;
|
|
69
|
-
const resolved = resolveNpmPackageVersion(parsed.pkg, parsed.tag);
|
|
70
|
-
const version = resolved ?? parsed.tag ?? "latest";
|
|
71
|
-
const frag = parsed.fragment ? `#${parsed.fragment}` : "";
|
|
72
|
-
return `npm:${parsed.pkg}@${version}${frag}`;
|
|
73
|
-
}
|
|
74
|
-
function getInstalledVersion(packageName, options = {}) {
|
|
75
|
-
let dir = path.resolve(options.cwd ?? process.cwd());
|
|
76
|
-
const segs = packageName.split("/");
|
|
77
|
-
while (true) {
|
|
78
|
-
const pkgJsonPath = path.join(dir, "node_modules", ...segs, "package.json");
|
|
79
|
-
if (existsSync(pkgJsonPath)) {
|
|
80
|
-
try {
|
|
81
|
-
const j = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
82
|
-
return typeof j.version === "string" ? j.version : null;
|
|
83
|
-
} catch {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const parent = path.dirname(dir);
|
|
88
|
-
if (parent === dir) return null;
|
|
89
|
-
dir = parent;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// src/npm/install.ts
|
|
94
|
-
import { execFileSync as execFileSync2 } from "child_process";
|
|
95
|
-
var VERSION_LATEST = "latest";
|
|
96
|
-
async function resolveInstallVersion(packageName, version, cwd) {
|
|
97
|
-
const isLatestOrEmpty = version === void 0 || version === "" || typeof version === "string" && version.toLowerCase() === VERSION_LATEST;
|
|
98
|
-
if (isLatestOrEmpty) {
|
|
99
|
-
return resolveLatestVersionFromRegistry(packageName, { cwd });
|
|
100
|
-
}
|
|
101
|
-
return version;
|
|
102
|
-
}
|
|
103
|
-
async function ensureNpmPackageInstalled(packageName, options = {}) {
|
|
104
|
-
if (typeof packageName !== "string" || packageName.trim().length === 0) {
|
|
105
|
-
throw new Error("ensureNpmPackageInstalled requires a non-empty package name");
|
|
106
|
-
}
|
|
107
|
-
const cwd = options.cwd ?? process.cwd();
|
|
108
|
-
const resolvedVersion = await resolveInstallVersion(packageName, options.version, cwd);
|
|
109
|
-
const installedVersion = getInstalledVersion(packageName, { cwd });
|
|
110
|
-
if (installedVersion === resolvedVersion) return;
|
|
111
|
-
const installSpec = `${packageName}@${resolvedVersion}`;
|
|
112
|
-
const prefix = options.logPrefix ?? "[agent-model]";
|
|
113
|
-
if (installedVersion === null) {
|
|
114
|
-
console.info(`${prefix} Installing provider: ${installSpec}`);
|
|
115
|
-
} else {
|
|
116
|
-
console.info(`${prefix} Updating provider: ${packageName} ${installedVersion} -> ${resolvedVersion}`);
|
|
117
|
-
}
|
|
118
|
-
const args = ["install", installSpec];
|
|
119
|
-
if (options.noPackageLock !== false) args.push("--no-package-lock");
|
|
120
|
-
const stdio = options.stdio === "pipe" ? ["ignore", "pipe", "pipe"] : options.stdio ?? "inherit";
|
|
121
|
-
try {
|
|
122
|
-
execFileSync2("npm", args, {
|
|
123
|
-
cwd,
|
|
124
|
-
stdio,
|
|
125
|
-
encoding: "utf-8"
|
|
126
|
-
});
|
|
127
|
-
} catch (e) {
|
|
128
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
129
|
-
throw new Error(`npm install failed for ${installSpec}: ${msg}`, { cause: e });
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// src/npm/command.ts
|
|
134
|
-
import { spawnSync } from "child_process";
|
|
135
|
-
function normalizeOutput(v) {
|
|
136
|
-
return typeof v === "string" ? v : "";
|
|
137
|
-
}
|
|
138
|
-
function runNpmCommand(args, options = {}) {
|
|
139
|
-
const result = spawnSync("npm", args, {
|
|
140
|
-
cwd: options.cwd ?? process.cwd(),
|
|
141
|
-
env: options.env ?? process.env,
|
|
142
|
-
encoding: "utf-8",
|
|
143
|
-
timeout: options.timeoutMs,
|
|
144
|
-
stdio: options.stdio ?? "pipe",
|
|
145
|
-
shell: options.shell ?? false
|
|
146
|
-
});
|
|
147
|
-
return {
|
|
148
|
-
args,
|
|
149
|
-
status: result.status,
|
|
150
|
-
stdout: normalizeOutput(result.stdout),
|
|
151
|
-
stderr: normalizeOutput(result.stderr),
|
|
152
|
-
signal: result.signal,
|
|
153
|
-
error: result.error ?? void 0
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
function assertNpmCommandSuccess(result, context) {
|
|
157
|
-
if (!result.error && result.status === 0) return;
|
|
158
|
-
const details = result.error?.message || result.stderr.trim() || (result.status == null ? "terminated" : `exit code ${result.status}`);
|
|
159
|
-
throw new Error(`${context} failed: npm ${result.args.join(" ")} (${details})`);
|
|
160
|
-
}
|
|
161
|
-
function npmSearchJson(query, options = {}) {
|
|
162
|
-
const result = runNpmCommand(["search", query, "--json"], options);
|
|
163
|
-
if (result.error || result.status !== 0) return [];
|
|
164
|
-
const text = result.stdout.trim();
|
|
165
|
-
if (!text) return [];
|
|
166
|
-
try {
|
|
167
|
-
const parsed = JSON.parse(text);
|
|
168
|
-
return Array.isArray(parsed) ? parsed : [];
|
|
169
|
-
} catch {
|
|
170
|
-
return [];
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
function npmInstall(options = {}) {
|
|
174
|
-
const args = ["install"];
|
|
175
|
-
if (options.global) args.push("-g");
|
|
176
|
-
if (options.registry) args.push("--registry", options.registry);
|
|
177
|
-
if (options.legacyPeerDeps) args.push("--legacy-peer-deps");
|
|
178
|
-
if (options.noPackageLock) args.push("--no-package-lock");
|
|
179
|
-
if (Array.isArray(options.packages) && options.packages.length > 0) {
|
|
180
|
-
args.push(...options.packages);
|
|
181
|
-
}
|
|
182
|
-
const result = runNpmCommand(args, options);
|
|
183
|
-
assertNpmCommandSuccess(result, "npm install");
|
|
184
|
-
}
|
|
185
|
-
function npmRunScript(script, options = {}) {
|
|
186
|
-
const result = runNpmCommand(["run", script], options);
|
|
187
|
-
assertNpmCommandSuccess(result, `npm run ${script}`);
|
|
188
|
-
}
|
|
189
|
-
function npmPublish(options = {}) {
|
|
190
|
-
const args = ["publish"];
|
|
191
|
-
if (options.tag) args.push("--tag", options.tag);
|
|
192
|
-
if (options.access) args.push("--access", options.access);
|
|
193
|
-
if (options.registry) args.push("--registry", options.registry);
|
|
194
|
-
const result = runNpmCommand(args, options);
|
|
195
|
-
assertNpmCommandSuccess(result, "npm publish");
|
|
196
|
-
}
|
|
197
|
-
function npmRoot(options = {}) {
|
|
198
|
-
const args = ["root", ...options.global ? ["-g"] : []];
|
|
199
|
-
const result = runNpmCommand(args, options);
|
|
200
|
-
assertNpmCommandSuccess(result, "npm root");
|
|
201
|
-
return result.stdout.trim();
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
export {
|
|
205
|
-
NPM_PROTOCOL_PREFIX,
|
|
206
|
-
isNpmProviderSpec,
|
|
207
|
-
parseNpmProvider,
|
|
208
|
-
parseNpmProviderSpec,
|
|
209
|
-
clearVersionCache,
|
|
210
|
-
resolveNpmPackageVersion,
|
|
211
|
-
resolveLatestVersionFromRegistry,
|
|
212
|
-
formatProviderDisplay,
|
|
213
|
-
getInstalledVersion,
|
|
214
|
-
ensureNpmPackageInstalled,
|
|
215
|
-
runNpmCommand,
|
|
216
|
-
assertNpmCommandSuccess,
|
|
217
|
-
npmSearchJson,
|
|
218
|
-
npmInstall,
|
|
219
|
-
npmRunScript,
|
|
220
|
-
npmPublish,
|
|
221
|
-
npmRoot
|
|
222
|
-
};
|
|
223
|
-
//# sourceMappingURL=chunk-KE7IMUSA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/npm/provider.ts","../src/npm/version.ts","../src/npm/install.ts","../src/npm/command.ts"],"sourcesContent":["export const NPM_PROTOCOL_PREFIX = \"npm:\";\n\nexport interface NpmProviderInfo {\n pkg: string;\n tag?: string;\n fragment?: string;\n}\n\nexport interface NpmProviderSpec {\n packageName: string;\n version?: string;\n provider?: string;\n}\n\nexport function isNpmProviderSpec(spec: unknown): spec is string {\n return typeof spec === \"string\" && spec.startsWith(NPM_PROTOCOL_PREFIX);\n}\n\nexport function parseNpmProvider(provider: string): NpmProviderInfo | null {\n if (!isNpmProviderSpec(provider)) return null;\n const rest = provider.slice(NPM_PROTOCOL_PREFIX.length);\n const hashIdx = rest.indexOf(\"#\");\n const fragment = hashIdx >= 0 ? rest.slice(hashIdx + 1) : undefined;\n const beforeHash = hashIdx >= 0 ? rest.slice(0, hashIdx) : rest;\n const atIdx = beforeHash.startsWith(\"@\") ? beforeHash.indexOf(\"@\", 1) : beforeHash.lastIndexOf(\"@\");\n const pkg = atIdx > 0 ? beforeHash.slice(0, atIdx) : beforeHash;\n const tag = atIdx > 0 ? beforeHash.slice(atIdx + 1) : undefined;\n return { pkg: pkg || beforeHash, tag: tag || undefined, fragment };\n}\n\nexport function parseNpmProviderSpec(spec: string): NpmProviderSpec | null {\n const parsed = parseNpmProvider(spec);\n if (!parsed) return null;\n return {\n packageName: parsed.pkg,\n version: parsed.tag,\n provider: parsed.fragment,\n };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { parseNpmProvider } from \"./provider.js\";\n\ninterface VersionCacheEntry {\n version: string;\n timestamp: number;\n}\n\nconst versionCache = new Map<string, VersionCacheEntry>();\nconst CACHE_TTL = 5 * 60 * 1000;\n\nexport interface ResolveNpmVersionOptions {\n cwd?: string;\n timeoutMs?: number;\n}\n\nexport function clearVersionCache(): void {\n versionCache.clear();\n}\n\nexport function resolveNpmPackageVersion(pkg: string, tag?: string, options: ResolveNpmVersionOptions = {}): string | null {\n const cacheKey = tag ? `${pkg}@${tag}` : pkg;\n const cached = versionCache.get(cacheKey);\n if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n return cached.version;\n }\n\n try {\n const spec = tag ? `${pkg}@${tag}` : pkg;\n const out = execFileSync(\"npm\", [\"view\", spec, \"version\"], {\n cwd: options.cwd ?? process.cwd(),\n encoding: \"utf-8\",\n timeout: options.timeoutMs ?? 8000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const version = out?.trim() ?? null;\n if (version) {\n versionCache.set(cacheKey, { version, timestamp: Date.now() });\n }\n return version;\n } catch {\n return null;\n }\n}\n\nexport function resolveLatestVersionFromRegistry(packageName: string, options: ResolveNpmVersionOptions = {}): string {\n const version = resolveNpmPackageVersion(packageName, undefined, options);\n if (!version) {\n throw new Error(`Failed to resolve latest version for ${packageName}`);\n }\n return version;\n}\n\nexport function formatProviderDisplay(provider: string): string {\n const parsed = parseNpmProvider(provider);\n if (parsed == null) return provider;\n\n const resolved = resolveNpmPackageVersion(parsed.pkg, parsed.tag);\n const version = resolved ?? parsed.tag ?? \"latest\";\n const frag = parsed.fragment ? `#${parsed.fragment}` : \"\";\n return `npm:${parsed.pkg}@${version}${frag}`;\n}\n\nexport function getInstalledVersion(packageName: string, options: { cwd?: string } = {}): string | null {\n let dir = path.resolve(options.cwd ?? process.cwd());\n const segs = packageName.split(\"/\");\n while (true) {\n const pkgJsonPath = path.join(dir, \"node_modules\", ...segs, \"package.json\");\n if (existsSync(pkgJsonPath)) {\n try {\n const j = JSON.parse(readFileSync(pkgJsonPath, \"utf-8\")) as { version?: string };\n return typeof j.version === \"string\" ? j.version : null;\n } catch {\n return null;\n }\n }\n const parent = path.dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n","import { execFileSync, type ExecFileSyncOptions } from \"node:child_process\";\nimport { getInstalledVersion, resolveLatestVersionFromRegistry } from \"./version.js\";\n\nconst VERSION_LATEST = \"latest\";\n\nexport interface EnsureNpmPackageInstalledOptions {\n version?: string;\n cwd?: string;\n stdio?: \"inherit\" | \"pipe\";\n noPackageLock?: boolean;\n logPrefix?: string;\n}\n\nasync function resolveInstallVersion(\n packageName: string,\n version: string | undefined,\n cwd: string,\n): Promise<string> {\n const isLatestOrEmpty =\n version === undefined ||\n version === \"\" ||\n (typeof version === \"string\" && version.toLowerCase() === VERSION_LATEST);\n if (isLatestOrEmpty) {\n return resolveLatestVersionFromRegistry(packageName, { cwd });\n }\n return version;\n}\n\nexport async function ensureNpmPackageInstalled(\n packageName: string,\n options: EnsureNpmPackageInstalledOptions = {},\n): Promise<void> {\n if (typeof packageName !== \"string\" || packageName.trim().length === 0) {\n throw new Error(\"ensureNpmPackageInstalled requires a non-empty package name\");\n }\n\n const cwd = options.cwd ?? process.cwd();\n const resolvedVersion = await resolveInstallVersion(packageName, options.version, cwd);\n const installedVersion = getInstalledVersion(packageName, { cwd });\n\n if (installedVersion === resolvedVersion) return;\n\n const installSpec = `${packageName}@${resolvedVersion}`;\n const prefix = options.logPrefix ?? \"[agent-model]\";\n if (installedVersion === null) {\n console.info(`${prefix} Installing provider: ${installSpec}`);\n } else {\n console.info(`${prefix} Updating provider: ${packageName} ${installedVersion} -> ${resolvedVersion}`);\n }\n\n const args = [\"install\", installSpec];\n if (options.noPackageLock !== false) args.push(\"--no-package-lock\");\n\n const stdio: ExecFileSyncOptions[\"stdio\"] =\n options.stdio === \"pipe\"\n ? [\"ignore\", \"pipe\", \"pipe\"]\n : options.stdio ?? \"inherit\";\n\n try {\n execFileSync(\"npm\", args, {\n cwd,\n stdio,\n encoding: \"utf-8\",\n });\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`npm install failed for ${installSpec}: ${msg}`, { cause: e });\n }\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport interface RunNpmCommandOptions {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n timeoutMs?: number;\n stdio?: \"pipe\" | \"inherit\";\n shell?: boolean;\n}\n\nexport interface NpmCommandResult {\n args: string[];\n status: number | null;\n stdout: string;\n stderr: string;\n signal: NodeJS.Signals | null;\n error?: Error;\n}\n\nexport interface NpmInstallOptions extends RunNpmCommandOptions {\n packages?: string[];\n global?: boolean;\n noPackageLock?: boolean;\n legacyPeerDeps?: boolean;\n registry?: string;\n}\n\nexport interface NpmPublishOptions extends RunNpmCommandOptions {\n tag?: string;\n access?: \"public\" | \"restricted\";\n registry?: string;\n}\n\nfunction normalizeOutput(v: unknown): string {\n return typeof v === \"string\" ? v : \"\";\n}\n\nexport function runNpmCommand(args: string[], options: RunNpmCommandOptions = {}): NpmCommandResult {\n const result = spawnSync(\"npm\", args, {\n cwd: options.cwd ?? process.cwd(),\n env: options.env ?? process.env,\n encoding: \"utf-8\",\n timeout: options.timeoutMs,\n stdio: options.stdio ?? \"pipe\",\n shell: options.shell ?? false,\n });\n\n return {\n args,\n status: result.status,\n stdout: normalizeOutput(result.stdout),\n stderr: normalizeOutput(result.stderr),\n signal: result.signal,\n error: result.error ?? undefined,\n };\n}\n\nexport function assertNpmCommandSuccess(result: NpmCommandResult, context: string): void {\n if (!result.error && result.status === 0) return;\n const details =\n result.error?.message ||\n result.stderr.trim() ||\n (result.status == null ? \"terminated\" : `exit code ${result.status}`);\n throw new Error(`${context} failed: npm ${result.args.join(\" \")} (${details})`);\n}\n\nexport function npmSearchJson(query: string, options: RunNpmCommandOptions = {}): unknown[] {\n const result = runNpmCommand([\"search\", query, \"--json\"], options);\n if (result.error || result.status !== 0) return [];\n const text = result.stdout.trim();\n if (!text) return [];\n try {\n const parsed = JSON.parse(text) as unknown;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\nexport function npmInstall(options: NpmInstallOptions = {}): void {\n const args: string[] = [\"install\"];\n if (options.global) args.push(\"-g\");\n if (options.registry) args.push(\"--registry\", options.registry);\n if (options.legacyPeerDeps) args.push(\"--legacy-peer-deps\");\n if (options.noPackageLock) args.push(\"--no-package-lock\");\n if (Array.isArray(options.packages) && options.packages.length > 0) {\n args.push(...options.packages);\n }\n const result = runNpmCommand(args, options);\n assertNpmCommandSuccess(result, \"npm install\");\n}\n\nexport function npmRunScript(script: string, options: RunNpmCommandOptions = {}): void {\n const result = runNpmCommand([\"run\", script], options);\n assertNpmCommandSuccess(result, `npm run ${script}`);\n}\n\nexport function npmPublish(options: NpmPublishOptions = {}): void {\n const args: string[] = [\"publish\"];\n if (options.tag) args.push(\"--tag\", options.tag);\n if (options.access) args.push(\"--access\", options.access);\n if (options.registry) args.push(\"--registry\", options.registry);\n const result = runNpmCommand(args, options);\n assertNpmCommandSuccess(result, \"npm publish\");\n}\n\nexport function npmRoot(options: RunNpmCommandOptions & { global?: boolean } = {}): string {\n const args = [\"root\", ...(options.global ? [\"-g\"] : [])];\n const result = runNpmCommand(args, options);\n assertNpmCommandSuccess(result, \"npm root\");\n return result.stdout.trim();\n}\n"],"mappings":";AAAO,IAAM,sBAAsB;AAc5B,SAAS,kBAAkB,MAA+B;AAC/D,SAAO,OAAO,SAAS,YAAY,KAAK,WAAW,mBAAmB;AACxE;AAEO,SAAS,iBAAiB,UAA0C;AACzE,MAAI,CAAC,kBAAkB,QAAQ,EAAG,QAAO;AACzC,QAAM,OAAO,SAAS,MAAM,oBAAoB,MAAM;AACtD,QAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,QAAM,WAAW,WAAW,IAAI,KAAK,MAAM,UAAU,CAAC,IAAI;AAC1D,QAAM,aAAa,WAAW,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI;AAC3D,QAAM,QAAQ,WAAW,WAAW,GAAG,IAAI,WAAW,QAAQ,KAAK,CAAC,IAAI,WAAW,YAAY,GAAG;AAClG,QAAM,MAAM,QAAQ,IAAI,WAAW,MAAM,GAAG,KAAK,IAAI;AACrD,QAAM,MAAM,QAAQ,IAAI,WAAW,MAAM,QAAQ,CAAC,IAAI;AACtD,SAAO,EAAE,KAAK,OAAO,YAAY,KAAK,OAAO,QAAW,SAAS;AACnE;AAEO,SAAS,qBAAqB,MAAsC;AACzE,QAAM,SAAS,iBAAiB,IAAI;AACpC,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,UAAU,OAAO;AAAA,EACnB;AACF;;;ACtCA,SAAS,oBAAoB;AAC7B,SAAS,YAAY,oBAAoB;AACzC,OAAO,UAAU;AAQjB,IAAM,eAAe,oBAAI,IAA+B;AACxD,IAAM,YAAY,IAAI,KAAK;AAOpB,SAAS,oBAA0B;AACxC,eAAa,MAAM;AACrB;AAEO,SAAS,yBAAyB,KAAa,KAAc,UAAoC,CAAC,GAAkB;AACzH,QAAM,WAAW,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK;AACzC,QAAM,SAAS,aAAa,IAAI,QAAQ;AACxC,MAAI,UAAU,KAAK,IAAI,IAAI,OAAO,YAAY,WAAW;AACvD,WAAO,OAAO;AAAA,EAChB;AAEA,MAAI;AACF,UAAM,OAAO,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK;AACrC,UAAM,MAAM,aAAa,OAAO,CAAC,QAAQ,MAAM,SAAS,GAAG;AAAA,MACzD,KAAK,QAAQ,OAAO,QAAQ,IAAI;AAAA,MAChC,UAAU;AAAA,MACV,SAAS,QAAQ,aAAa;AAAA,MAC9B,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IAClC,CAAC;AACD,UAAM,UAAU,KAAK,KAAK,KAAK;AAC/B,QAAI,SAAS;AACX,mBAAa,IAAI,UAAU,EAAE,SAAS,WAAW,KAAK,IAAI,EAAE,CAAC;AAAA,IAC/D;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iCAAiC,aAAqB,UAAoC,CAAC,GAAW;AACpH,QAAM,UAAU,yBAAyB,aAAa,QAAW,OAAO;AACxE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wCAAwC,WAAW,EAAE;AAAA,EACvE;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,UAA0B;AAC9D,QAAM,SAAS,iBAAiB,QAAQ;AACxC,MAAI,UAAU,KAAM,QAAO;AAE3B,QAAM,WAAW,yBAAyB,OAAO,KAAK,OAAO,GAAG;AAChE,QAAM,UAAU,YAAY,OAAO,OAAO;AAC1C,QAAM,OAAO,OAAO,WAAW,IAAI,OAAO,QAAQ,KAAK;AACvD,SAAO,OAAO,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI;AAC5C;AAEO,SAAS,oBAAoB,aAAqB,UAA4B,CAAC,GAAkB;AACtG,MAAI,MAAM,KAAK,QAAQ,QAAQ,OAAO,QAAQ,IAAI,CAAC;AACnD,QAAM,OAAO,YAAY,MAAM,GAAG;AAClC,SAAO,MAAM;AACX,UAAM,cAAc,KAAK,KAAK,KAAK,gBAAgB,GAAG,MAAM,cAAc;AAC1E,QAAI,WAAW,WAAW,GAAG;AAC3B,UAAI;AACF,cAAM,IAAI,KAAK,MAAM,aAAa,aAAa,OAAO,CAAC;AACvD,eAAO,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AAAA,MACrD,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,SAAS,KAAK,QAAQ,GAAG;AAC/B,QAAI,WAAW,IAAK,QAAO;AAC3B,UAAM;AAAA,EACR;AACF;;;AClFA,SAAS,gBAAAA,qBAA8C;AAGvD,IAAM,iBAAiB;AAUvB,eAAe,sBACb,aACA,SACA,KACiB;AACjB,QAAM,kBACJ,YAAY,UACZ,YAAY,MACX,OAAO,YAAY,YAAY,QAAQ,YAAY,MAAM;AAC5D,MAAI,iBAAiB;AACnB,WAAO,iCAAiC,aAAa,EAAE,IAAI,CAAC;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,eAAsB,0BACpB,aACA,UAA4C,CAAC,GAC9B;AACf,MAAI,OAAO,gBAAgB,YAAY,YAAY,KAAK,EAAE,WAAW,GAAG;AACtE,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAEA,QAAM,MAAM,QAAQ,OAAO,QAAQ,IAAI;AACvC,QAAM,kBAAkB,MAAM,sBAAsB,aAAa,QAAQ,SAAS,GAAG;AACrF,QAAM,mBAAmB,oBAAoB,aAAa,EAAE,IAAI,CAAC;AAEjE,MAAI,qBAAqB,gBAAiB;AAE1C,QAAM,cAAc,GAAG,WAAW,IAAI,eAAe;AACrD,QAAM,SAAS,QAAQ,aAAa;AACpC,MAAI,qBAAqB,MAAM;AAC7B,YAAQ,KAAK,GAAG,MAAM,yBAAyB,WAAW,EAAE;AAAA,EAC9D,OAAO;AACL,YAAQ,KAAK,GAAG,MAAM,uBAAuB,WAAW,IAAI,gBAAgB,OAAO,eAAe,EAAE;AAAA,EACtG;AAEA,QAAM,OAAO,CAAC,WAAW,WAAW;AACpC,MAAI,QAAQ,kBAAkB,MAAO,MAAK,KAAK,mBAAmB;AAElE,QAAM,QACJ,QAAQ,UAAU,SACd,CAAC,UAAU,QAAQ,MAAM,IACzB,QAAQ,SAAS;AAEvB,MAAI;AACF,IAAAC,cAAa,OAAO,MAAM;AAAA,MACxB;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD,UAAM,IAAI,MAAM,0BAA0B,WAAW,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,EAC/E;AACF;;;ACpEA,SAAS,iBAAiB;AAiC1B,SAAS,gBAAgB,GAAoB;AAC3C,SAAO,OAAO,MAAM,WAAW,IAAI;AACrC;AAEO,SAAS,cAAc,MAAgB,UAAgC,CAAC,GAAqB;AAClG,QAAM,SAAS,UAAU,OAAO,MAAM;AAAA,IACpC,KAAK,QAAQ,OAAO,QAAQ,IAAI;AAAA,IAChC,KAAK,QAAQ,OAAO,QAAQ;AAAA,IAC5B,UAAU;AAAA,IACV,SAAS,QAAQ;AAAA,IACjB,OAAO,QAAQ,SAAS;AAAA,IACxB,OAAO,QAAQ,SAAS;AAAA,EAC1B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,QAAQ,gBAAgB,OAAO,MAAM;AAAA,IACrC,QAAQ,gBAAgB,OAAO,MAAM;AAAA,IACrC,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO,SAAS;AAAA,EACzB;AACF;AAEO,SAAS,wBAAwB,QAA0B,SAAuB;AACvF,MAAI,CAAC,OAAO,SAAS,OAAO,WAAW,EAAG;AAC1C,QAAM,UACJ,OAAO,OAAO,WACd,OAAO,OAAO,KAAK,MAClB,OAAO,UAAU,OAAO,eAAe,aAAa,OAAO,MAAM;AACpE,QAAM,IAAI,MAAM,GAAG,OAAO,gBAAgB,OAAO,KAAK,KAAK,GAAG,CAAC,KAAK,OAAO,GAAG;AAChF;AAEO,SAAS,cAAc,OAAe,UAAgC,CAAC,GAAc;AAC1F,QAAM,SAAS,cAAc,CAAC,UAAU,OAAO,QAAQ,GAAG,OAAO;AACjE,MAAI,OAAO,SAAS,OAAO,WAAW,EAAG,QAAO,CAAC;AACjD,QAAM,OAAO,OAAO,OAAO,KAAK;AAChC,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,WAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC;AAAA,EAC3C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,WAAW,UAA6B,CAAC,GAAS;AAChE,QAAM,OAAiB,CAAC,SAAS;AACjC,MAAI,QAAQ,OAAQ,MAAK,KAAK,IAAI;AAClC,MAAI,QAAQ,SAAU,MAAK,KAAK,cAAc,QAAQ,QAAQ;AAC9D,MAAI,QAAQ,eAAgB,MAAK,KAAK,oBAAoB;AAC1D,MAAI,QAAQ,cAAe,MAAK,KAAK,mBAAmB;AACxD,MAAI,MAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS,SAAS,GAAG;AAClE,SAAK,KAAK,GAAG,QAAQ,QAAQ;AAAA,EAC/B;AACA,QAAM,SAAS,cAAc,MAAM,OAAO;AAC1C,0BAAwB,QAAQ,aAAa;AAC/C;AAEO,SAAS,aAAa,QAAgB,UAAgC,CAAC,GAAS;AACrF,QAAM,SAAS,cAAc,CAAC,OAAO,MAAM,GAAG,OAAO;AACrD,0BAAwB,QAAQ,WAAW,MAAM,EAAE;AACrD;AAEO,SAAS,WAAW,UAA6B,CAAC,GAAS;AAChE,QAAM,OAAiB,CAAC,SAAS;AACjC,MAAI,QAAQ,IAAK,MAAK,KAAK,SAAS,QAAQ,GAAG;AAC/C,MAAI,QAAQ,OAAQ,MAAK,KAAK,YAAY,QAAQ,MAAM;AACxD,MAAI,QAAQ,SAAU,MAAK,KAAK,cAAc,QAAQ,QAAQ;AAC9D,QAAM,SAAS,cAAc,MAAM,OAAO;AAC1C,0BAAwB,QAAQ,aAAa;AAC/C;AAEO,SAAS,QAAQ,UAAuD,CAAC,GAAW;AACzF,QAAM,OAAO,CAAC,QAAQ,GAAI,QAAQ,SAAS,CAAC,IAAI,IAAI,CAAC,CAAE;AACvD,QAAM,SAAS,cAAc,MAAM,OAAO;AAC1C,0BAAwB,QAAQ,UAAU;AAC1C,SAAO,OAAO,OAAO,KAAK;AAC5B;","names":["execFileSync","execFileSync"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/loader.ts","../src/types.ts","../src/extensions/npm-protocol.ts"],"sourcesContent":["/**\n * Load LLM extensions by npm package name or by dynamic discovery.\n * Extensions register a ChatModel factory via registerChatModelProvider.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { ILLMExtension } from \"../types.js\";\nimport { AGENT_LLM_PROVIDER_FIELD } from \"../types.js\";\nimport { registerChatModelProvider, type ChatModelFactory } from \"../registry/chat-model.js\";\n\nconst loadedPackages = new Set<string>();\n\nfunction isLLMExtension(m: unknown): m is ILLMExtension {\n if (m == null || typeof m !== \"object\") return false;\n const e = m as ILLMExtension;\n if (typeof e.providerName !== \"string\") return false;\n const hasRegister = typeof e.register === \"function\";\n const hasChatModel = typeof e.createChatModel === \"function\";\n return hasRegister || hasChatModel;\n}\n\nfunction registerExtension(ext: ILLMExtension): void {\n if (typeof ext.createChatModel === \"function\") {\n registerChatModelProvider(ext.providerName, ext.createChatModel as ChatModelFactory);\n return;\n }\n if (typeof ext.register === \"function\") {\n ext.register();\n }\n}\n\nfunction getExtensionFromModule(m: Record<string, unknown>): ILLMExtension | null {\n if (isLLMExtension(m)) return m;\n if (typeof m.getLLMExtension === \"function\") {\n const ext = m.getLLMExtension();\n return isLLMExtension(ext) ? ext : null;\n }\n if (isLLMExtension(m.default)) return m.default;\n return null;\n}\n\nexport function resolveLLMExtensionPackages(types?: string | string[]): string[] {\n if (types == null) return [];\n const typeList = Array.isArray(types) ? types : [types];\n return typeList.filter(\n (t): t is string => typeof t === \"string\" && String(t).trim().length > 0\n );\n}\n\nfunction readPackageProviderName(pkgPath: string): string | null {\n if (!existsSync(pkgPath)) return null;\n try {\n const raw = readFileSync(pkgPath, \"utf-8\");\n const pkg = JSON.parse(raw) as { agentLlmProvider?: boolean; keywords?: string[]; name?: string };\n const declared =\n pkg[AGENT_LLM_PROVIDER_FIELD] === true ||\n (Array.isArray(pkg.keywords) && pkg.keywords.includes(\"agent-model-provider\"));\n return declared && typeof pkg.name === \"string\" ? pkg.name : null;\n } catch {\n return null;\n }\n}\n\nexport function discoverLLMExtensions(cwd: string = process.cwd()): string[] {\n const dir = typeof cwd === \"string\" && cwd.trim().length > 0 ? cwd : process.cwd();\n const nodeModules = join(dir, \"node_modules\");\n if (!existsSync(nodeModules)) return [];\n const names: string[] = [];\n const seen = new Set<string>();\n try {\n const entries = readdirSync(nodeModules, { withFileTypes: true });\n for (const e of entries) {\n if (e.name.startsWith(\".\") || e.name === \"node\") continue;\n if (e.name.startsWith(\"@\") && e.isDirectory()) {\n const scopePath = join(nodeModules, e.name);\n const scopeEntries = readdirSync(scopePath, { withFileTypes: true });\n for (const se of scopeEntries) {\n if (!se.isDirectory()) continue;\n const name = readPackageProviderName(join(scopePath, se.name, \"package.json\"));\n if (name && !seen.has(name)) {\n seen.add(name);\n names.push(name);\n }\n }\n continue;\n }\n const name = readPackageProviderName(join(nodeModules, e.name, \"package.json\"));\n if (name && !seen.has(name)) {\n seen.add(name);\n names.push(name);\n }\n }\n } catch {\n // no node_modules or not readable\n }\n return names;\n}\n\nasync function loadModuleFromPath(pkgDir: string): Promise<Record<string, unknown>> {\n const pkgJsonPath = join(pkgDir, \"package.json\");\n if (!existsSync(pkgJsonPath)) {\n throw new Error(`package.json not found in ${pkgDir}`);\n }\n const pkgJson = JSON.parse(readFileSync(pkgJsonPath, \"utf-8\")) as { main?: string };\n const main = pkgJson?.main ?? \"index.js\";\n const entryPath = join(pkgDir, main);\n if (!existsSync(entryPath)) {\n throw new Error(`Entry ${main} not found in ${pkgDir}`);\n }\n const entryUrl = pathToFileURL(entryPath).href;\n return (await import(/* @vite-ignore */ entryUrl)) as Record<string, unknown>;\n}\n\n/**\n * Resolve package main entry from cwd so we load the copy in cwd's node_modules,\n * not a different copy from bare import (e.g. under @wallee/agent).\n */\nfunction resolvePackageEntryFromCwd(pkg: string, cwd: string): string | null {\n const pkgDir = join(cwd, \"node_modules\", pkg);\n const pkgJsonPath = join(pkgDir, \"package.json\");\n if (!existsSync(pkgJsonPath)) return null;\n try {\n const req = createRequire(pkgJsonPath);\n return req.resolve(pkg);\n } catch {\n return null;\n }\n}\n\nexport interface LoadLLMExtensionsOptions {\n cwd?: string;\n}\n\nexport async function loadLLMExtensions(\n extensionPackages?: string[],\n options?: LoadLLMExtensionsOptions\n): Promise<void> {\n const packages = Array.isArray(extensionPackages)\n ? extensionPackages.filter((p): p is string => typeof p === \"string\" && String(p).trim().length > 0)\n : [];\n const cwd = options?.cwd ?? process.cwd();\n for (const pkg of packages) {\n if (loadedPackages.has(pkg)) continue;\n loadedPackages.add(pkg);\n let loaded = false;\n const cwdPkgDir = join(cwd, \"node_modules\", pkg);\n const cwdIsProject =\n existsSync(join(cwd, \"package.json\")) &&\n (() => {\n try {\n const name = (JSON.parse(readFileSync(join(cwd, \"package.json\"), \"utf-8\")) as { name?: string }).name;\n return name === pkg;\n } catch {\n return false;\n }\n })();\n const dirsToTry = [cwdPkgDir, ...(cwdIsProject ? [cwd] : [])];\n for (const pkgDir of dirsToTry) {\n if (!existsSync(join(pkgDir, \"package.json\"))) continue;\n try {\n const m = await loadModuleFromPath(pkgDir);\n const ext = getExtensionFromModule(m);\n if (ext) {\n registerExtension(ext);\n loaded = true;\n break;\n }\n if (typeof (m as { registerLLMExtension?: () => void }).registerLLMExtension === \"function\") {\n (m as { registerLLMExtension: () => void }).registerLLMExtension();\n loaded = true;\n break;\n }\n } catch {\n // try next path\n }\n }\n if (loaded) continue;\n // Prefer cwd-resolved entry so we load the copy just installed, not another copy from bare import\n const resolvedEntry = resolvePackageEntryFromCwd(pkg, cwd);\n if (resolvedEntry) {\n try {\n const entryUrl = pathToFileURL(resolvedEntry).href;\n const m = (await import(/* @vite-ignore */ entryUrl)) as Record<string, unknown>;\n const ext = getExtensionFromModule(m);\n if (ext) {\n registerExtension(ext);\n continue;\n }\n if (typeof (m as { registerLLMExtension?: () => void }).registerLLMExtension === \"function\") {\n (m as { registerLLMExtension: () => void }).registerLLMExtension();\n continue;\n }\n } catch {\n // fall through to bare import\n }\n }\n try {\n const m = await import(/* @vite-ignore */ pkg) as Record<string, unknown>;\n const ext = getExtensionFromModule(m);\n if (ext) {\n registerExtension(ext);\n continue;\n }\n if (typeof (m as { registerLLMExtension?: () => void }).registerLLMExtension === \"function\") {\n (m as { registerLLMExtension: () => void }).registerLLMExtension();\n }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n if (typeof process !== \"undefined\" && process.emitWarning) {\n process.emitWarning(`[agent-model] Failed to load extension \"${pkg}\": ${msg}`, { code: \"AGENT_LLM_EXTENSION_LOAD\" });\n }\n }\n }\n}\n\nexport async function loadDiscoveredExtensions(cwd: string = process.cwd()): Promise<string[]> {\n const dir = typeof cwd === \"string\" && cwd.trim().length > 0 ? cwd : process.cwd();\n const names = discoverLLMExtensions(dir);\n await loadLLMExtensions(names);\n return names;\n}\n","/**\n * Agent LLM: OpenAI-compatible config.\n * Returns LangChain BaseChatModel instances.\n */\n\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\n\n// LLM types now live locally in agent-model\nexport type { LLMType, LLMConfig, AgentConfigLlmSection } from \"./model/types.js\";\n\n/** package.json field: when true, the package is an agent-model provider (legacy name kept for compatibility). */\nexport const AGENT_LLM_PROVIDER_FIELD = \"agentLlmProvider\";\n\n/**\n * Extension interface: register a ChatModel factory by provider name.\n * Extensions implement getLLMExtension(); framework registers the factory when loading.\n */\nexport interface ILLMExtension {\n readonly providerName: string;\n /** ChatModel factory. Framework calls registerChatModelProvider(providerName, createChatModel). */\n readonly createChatModel?: (config: import(\"./model/types.js\").LLMConfig) => BaseChatModel;\n /** Legacy: if extension provides register(), framework calls it. */\n register?(): void;\n}\n","/**\n * npm: protocol in provider — specify an npm package name (and optional version) in config's provider.\n * When installNpmIfMissing is true, the framework will run npm install <package>[@version] if the package is not found.\n */\n\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { loadLLMExtensions } from \"./loader.js\";\nimport { getChatModelFactory } from \"../registry/chat-model.js\";\nimport { createChatModelFromLlmConfig } from \"../langchain/index.js\";\nimport type { CreateChatModelOptions } from \"../langchain/index.js\";\nimport {\n NPM_PROTOCOL_PREFIX,\n parseNpmProviderSpec,\n isNpmProviderSpec,\n resolveLatestVersionFromRegistry,\n getInstalledVersion as getInstalledVersionFromCommon,\n ensureNpmPackageInstalled as ensureNpmPackageInstalledFromCommon,\n} from \"../npm/index.js\";\n\nexport { NPM_PROTOCOL_PREFIX, parseNpmProviderSpec, isNpmProviderSpec };\n\nexport async function getLatestVersion(\n packageName: string,\n options: { cwd?: string } = {}\n): Promise<string> {\n return resolveLatestVersionFromRegistry(packageName, { cwd: options.cwd ?? process.cwd() });\n}\n\nexport function getInstalledVersion(packageName: string, options: { cwd?: string } = {}): string | null {\n return getInstalledVersionFromCommon(packageName, options);\n}\n\nexport interface EnsureNpmPackageInstalledOptions {\n version?: string;\n cwd?: string;\n}\n\nfunction isModuleNotFoundError(err: unknown): boolean {\n const msg = err instanceof Error ? err.message : String(err);\n return (\n msg.includes(\"Cannot find module\") ||\n msg.includes(\"Cannot find package\") ||\n msg.includes(\"MODULE_NOT_FOUND\") ||\n msg.includes(\"ERR_MODULE_NOT_FOUND\") ||\n msg.includes(\"Failed to load url\") ||\n msg.includes(\"Does the file exist\")\n );\n}\n\n/**\n * Ensure the npm package is installed at the required version.\n * We only use version numbers for management; \"latest\" is always resolved to the actual\n * version from the registry, then we install that version if missing or different.\n */\nexport async function ensureNpmPackageInstalled(\n packageName: string,\n options: EnsureNpmPackageInstalledOptions = {}\n): Promise<void> {\n await ensureNpmPackageInstalledFromCommon(packageName, {\n version: options.version,\n cwd: options.cwd,\n stdio: \"inherit\",\n noPackageLock: true,\n logPrefix: \"[agent-model]\",\n });\n}\n\nexport interface ResolveNpmProviderOptions {\n installNpmIfMissing?: boolean;\n cwd?: string;\n}\n\nfunction normalizeError(e: unknown, context: string): Error {\n if (e instanceof Error) return new Error(`${context}: ${e.message}`, { cause: e });\n return new Error(`${context}: ${String(e)}`);\n}\n\nexport async function resolveNpmProvider(\n spec: string,\n options: ResolveNpmProviderOptions = {}\n): Promise<string | null> {\n if (typeof spec !== \"string\" || spec.trim().length === 0) return null;\n const parsed = parseNpmProviderSpec(spec);\n if (!parsed) return null;\n const { packageName, version, provider: fragmentProvider } = parsed;\n const installNpmIfMissing = options.installNpmIfMissing !== false;\n const cwd = options.cwd ?? process.cwd();\n\n const load = async (): Promise<void> => {\n await loadLLMExtensions([packageName], { cwd });\n };\n\n if (installNpmIfMissing) {\n await ensureNpmPackageInstalled(packageName, { version, cwd });\n }\n\n try {\n await load();\n } catch (err) {\n if (installNpmIfMissing && isModuleNotFoundError(err)) {\n try {\n await ensureNpmPackageInstalled(packageName, { version, cwd });\n await load();\n } catch (installErr) {\n throw normalizeError(installErr, `Failed to install or load npm provider \"${packageName}\"`);\n }\n } else {\n throw normalizeError(err, `Failed to load npm provider \"${packageName}\"`);\n }\n }\n\n if (fragmentProvider && !getChatModelFactory(fragmentProvider)) {\n if (installNpmIfMissing) {\n await ensureNpmPackageInstalled(packageName, { version, cwd });\n await load();\n }\n if (!getChatModelFactory(fragmentProvider)) {\n throw new Error(`Package \"${packageName}\" was installed but did not register provider \"${fragmentProvider}\". Check that the package exports getLLMExtension() or registerLLMExtension().`);\n }\n }\n\n if (fragmentProvider) return fragmentProvider;\n\n try {\n const m = await import(/* @vite-ignore */ packageName);\n if (typeof (m as { getDefaultProviderName?: () => string }).getDefaultProviderName === \"function\") {\n return (m as { getDefaultProviderName: () => string }).getDefaultProviderName();\n }\n } catch {\n // ignore\n }\n throw new Error(\n `Provider spec ${spec} has no #provider fragment and the package does not export getDefaultProviderName(). Use e.g. npm:${packageName}#<provider-name>.`\n );\n}\n\nexport interface ResolveLlmSectionWithNpmOptions extends ResolveNpmProviderOptions {}\n\nexport async function resolveLlmSectionWithNpm(\n llmSection: unknown,\n options: ResolveLlmSectionWithNpmOptions = {}\n): Promise<unknown> {\n if (llmSection == null) return llmSection;\n if (Array.isArray(llmSection)) {\n const out: unknown[] = [];\n for (let i = 0; i < llmSection.length; i++) {\n try {\n out.push(await resolveLlmSectionWithNpm(llmSection[i], options));\n } catch (e) {\n throw normalizeError(e, `Failed to resolve llm section at index ${i}`);\n }\n }\n return out;\n }\n if (typeof llmSection === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(llmSection)) {\n if (k === \"provider\" && isNpmProviderSpec(v)) {\n try {\n const resolved = await resolveNpmProvider(v as string, options);\n out[k] = resolved ?? v;\n } catch (e) {\n throw normalizeError(e, `Failed to resolve provider \"${String(v)}\"`);\n }\n continue;\n }\n try {\n out[k] = await resolveLlmSectionWithNpm(v, options);\n } catch (e) {\n throw normalizeError(e, `Failed to resolve llm section key \"${k}\"`);\n }\n }\n return out;\n }\n return llmSection;\n}\n\nexport interface CreateChatModelWithNpmOptions\n extends CreateChatModelOptions,\n ResolveNpmProviderOptions {}\n\nexport async function createChatModelWithNpm(\n options: CreateChatModelWithNpmOptions = {}\n): Promise<BaseChatModel> {\n try {\n const { installNpmIfMissing, cwd, ...rest } = options;\n const resolvedSection = await resolveLlmSectionWithNpm(options.llmSection ?? null, {\n installNpmIfMissing,\n cwd,\n });\n return createChatModelFromLlmConfig({\n ...rest,\n llmSection: resolvedSection,\n });\n } catch (e) {\n throw normalizeError(e, \"createChatModelWithNpm failed\");\n }\n}\n"],"mappings":"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","names":["name","getInstalledVersion","ensureNpmPackageInstalled"]}
|
package/dist/config/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type LoadLlmConfigOptions, type ModelConfigResult } from "./loader.js";
|
|
2
|
-
export { parseLlmSection } from "./parser.js";
|
|
3
|
-
export { loadLlmConfig, parseLlmYaml, substituteEnv } from "./loader.js";
|
|
4
|
-
export { loadYamlConfig } from "./yaml.js";
|
|
5
|
-
export { normalizeAgentModelConfigRef } from "./ref.js";
|
|
6
|
-
export { loadYamlFile, loadYamlFileSync, parseYamlContent, clearYamlFileCache, type LoadYamlOptions, type YamlEnvOptions, } from "./yaml-utils.js";
|
|
7
|
-
export type { LoadLlmConfigOptions, ModelConfigResult } from "./loader.js";
|
|
8
|
-
export type { AgentModelConfigRef } from "./ref.js";
|
|
9
|
-
export interface LoadModelConfigOptions {
|
|
10
|
-
configPath?: string;
|
|
11
|
-
loadOptions?: LoadLlmConfigOptions;
|
|
12
|
-
}
|
|
13
|
-
export interface CreateModelConfigOptions extends LoadModelConfigOptions {
|
|
14
|
-
overrides?: Partial<ModelConfigResult>;
|
|
15
|
-
}
|
|
16
|
-
export declare function loadModelRuntimeConfig(options?: LoadModelConfigOptions): ModelConfigResult | null;
|
|
17
|
-
export declare function createModelConfig(options?: CreateModelConfigOptions): ModelConfigResult | null;
|
|
18
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,sBAA2B,GAAG,iBAAiB,GAAG,IAAI,CAGrG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,iBAAiB,GAAG,IAAI,CAKlG"}
|