@easynet/agent-model 1.0.53

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 (118) hide show
  1. package/README.md +72 -0
  2. package/dist/api/create-agent-llm.d.ts +15 -0
  3. package/dist/api/create-agent-llm.d.ts.map +1 -0
  4. package/dist/api/create-embed-fn.d.ts +10 -0
  5. package/dist/api/create-embed-fn.d.ts.map +1 -0
  6. package/dist/api/get-default-llm-config.d.ts +16 -0
  7. package/dist/api/get-default-llm-config.d.ts.map +1 -0
  8. package/dist/api/get-default-vlm-config.d.ts +15 -0
  9. package/dist/api/get-default-vlm-config.d.ts.map +1 -0
  10. package/dist/chunk-4OLU43SH.js +165 -0
  11. package/dist/chunk-4OLU43SH.js.map +1 -0
  12. package/dist/chunk-5YPJ43HW.js +205 -0
  13. package/dist/chunk-5YPJ43HW.js.map +1 -0
  14. package/dist/chunk-EPVJLBGC.js +118 -0
  15. package/dist/chunk-EPVJLBGC.js.map +1 -0
  16. package/dist/chunk-FZKECZUY.js +148 -0
  17. package/dist/chunk-FZKECZUY.js.map +1 -0
  18. package/dist/chunk-G7MKWPEI.js +14 -0
  19. package/dist/chunk-G7MKWPEI.js.map +1 -0
  20. package/dist/chunk-HCU4AWIV.js +19 -0
  21. package/dist/chunk-HCU4AWIV.js.map +1 -0
  22. package/dist/chunk-HSU6XZOI.js +354 -0
  23. package/dist/chunk-HSU6XZOI.js.map +1 -0
  24. package/dist/chunk-K3JR2N4E.js +250 -0
  25. package/dist/chunk-K3JR2N4E.js.map +1 -0
  26. package/dist/chunk-PZ5AY32C.js +10 -0
  27. package/dist/chunk-PZ5AY32C.js.map +1 -0
  28. package/dist/chunk-SPDXNDDD.js +114 -0
  29. package/dist/chunk-SPDXNDDD.js.map +1 -0
  30. package/dist/chunk-TKIZELZQ.js +255 -0
  31. package/dist/chunk-TKIZELZQ.js.map +1 -0
  32. package/dist/chunk-VBXTOU4S.js +50 -0
  33. package/dist/chunk-VBXTOU4S.js.map +1 -0
  34. package/dist/chunk-YOOYQBGK.js +43 -0
  35. package/dist/chunk-YOOYQBGK.js.map +1 -0
  36. package/dist/cli/index.d.ts +3 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/index.js +11 -0
  39. package/dist/cli/index.js.map +1 -0
  40. package/dist/cli/utils.d.ts +12 -0
  41. package/dist/cli/utils.d.ts.map +1 -0
  42. package/dist/config/index.d.ts +6 -0
  43. package/dist/config/index.d.ts.map +1 -0
  44. package/dist/config/index.js +28 -0
  45. package/dist/config/index.js.map +1 -0
  46. package/dist/config/loader.d.ts +23 -0
  47. package/dist/config/loader.d.ts.map +1 -0
  48. package/dist/config/parser.d.ts +5 -0
  49. package/dist/config/parser.d.ts.map +1 -0
  50. package/dist/config/yaml-utils.d.ts +13 -0
  51. package/dist/config/yaml-utils.d.ts.map +1 -0
  52. package/dist/config/yaml.d.ts +9 -0
  53. package/dist/config/yaml.d.ts.map +1 -0
  54. package/dist/connectivity/check.d.ts +18 -0
  55. package/dist/connectivity/check.d.ts.map +1 -0
  56. package/dist/connectivity/index.d.ts +3 -0
  57. package/dist/connectivity/index.d.ts.map +1 -0
  58. package/dist/connectivity/index.js +12 -0
  59. package/dist/connectivity/index.js.map +1 -0
  60. package/dist/connectivity/types.d.ts +13 -0
  61. package/dist/connectivity/types.d.ts.map +1 -0
  62. package/dist/extensions/index.d.ts +8 -0
  63. package/dist/extensions/index.d.ts.map +1 -0
  64. package/dist/extensions/index.js +38 -0
  65. package/dist/extensions/index.js.map +1 -0
  66. package/dist/extensions/loader.d.ts +12 -0
  67. package/dist/extensions/loader.d.ts.map +1 -0
  68. package/dist/extensions/npm-protocol.d.ts +36 -0
  69. package/dist/extensions/npm-protocol.d.ts.map +1 -0
  70. package/dist/index.d.ts +58 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +133 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/langchain/index.d.ts +17 -0
  75. package/dist/langchain/index.d.ts.map +1 -0
  76. package/dist/langchain/index.js +12 -0
  77. package/dist/langchain/index.js.map +1 -0
  78. package/dist/langchain/openai-compatible.d.ts +21 -0
  79. package/dist/langchain/openai-compatible.d.ts.map +1 -0
  80. package/dist/langchain/tool-choice.d.ts +9 -0
  81. package/dist/langchain/tool-choice.d.ts.map +1 -0
  82. package/dist/model/chat.d.ts +30 -0
  83. package/dist/model/chat.d.ts.map +1 -0
  84. package/dist/model/embed-parser.d.ts +25 -0
  85. package/dist/model/embed-parser.d.ts.map +1 -0
  86. package/dist/model/embedding.d.ts +25 -0
  87. package/dist/model/embedding.d.ts.map +1 -0
  88. package/dist/model/hub.d.ts +29 -0
  89. package/dist/model/hub.d.ts.map +1 -0
  90. package/dist/model/index.d.ts +13 -0
  91. package/dist/model/index.d.ts.map +1 -0
  92. package/dist/model/index.js +18 -0
  93. package/dist/model/index.js.map +1 -0
  94. package/dist/model/llm-parser.d.ts +10 -0
  95. package/dist/model/llm-parser.d.ts.map +1 -0
  96. package/dist/model/types.d.ts +31 -0
  97. package/dist/model/types.d.ts.map +1 -0
  98. package/dist/npm/command.d.ts +37 -0
  99. package/dist/npm/command.d.ts.map +1 -0
  100. package/dist/npm/index.d.ts +5 -0
  101. package/dist/npm/index.d.ts.map +1 -0
  102. package/dist/npm/index.js +40 -0
  103. package/dist/npm/index.js.map +1 -0
  104. package/dist/npm/install.d.ts +9 -0
  105. package/dist/npm/install.d.ts.map +1 -0
  106. package/dist/npm/provider.d.ts +15 -0
  107. package/dist/npm/provider.d.ts.map +1 -0
  108. package/dist/npm/version.d.ts +12 -0
  109. package/dist/npm/version.d.ts.map +1 -0
  110. package/dist/registry/chat-model.d.ts +10 -0
  111. package/dist/registry/chat-model.d.ts.map +1 -0
  112. package/dist/registry/index.d.ts +3 -0
  113. package/dist/registry/index.d.ts.map +1 -0
  114. package/dist/registry/index.js +11 -0
  115. package/dist/registry/index.js.map +1 -0
  116. package/dist/types.d.ts +20 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/package.json +98 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/npm/index.ts","../src/npm/provider.ts","../src/npm/version.ts","../src/npm/install.ts","../src/npm/command.ts"],"sourcesContent":["export {\n NPM_PROTOCOL_PREFIX,\n isNpmProviderSpec,\n parseNpmProvider,\n parseNpmProviderSpec,\n type NpmProviderSpec,\n} from \"./provider.js\";\n\nexport {\n clearVersionCache,\n formatProviderDisplay,\n getInstalledVersion,\n resolveLatestVersionFromRegistry,\n resolveNpmPackageVersion,\n type ResolveNpmVersionOptions,\n} from \"./version.js\";\n\nexport {\n ensureNpmPackageInstalled,\n type EnsureNpmPackageInstalledOptions,\n} from \"./install.js\";\n\nexport {\n assertNpmCommandSuccess,\n npmInstall,\n npmPublish,\n npmRoot,\n npmRunScript,\n npmSearchJson,\n runNpmCommand,\n type NpmCommandResult,\n type NpmInstallOptions,\n type NpmPublishOptions,\n type RunNpmCommandOptions,\n} from \"./command.js\";\n","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":"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","names":["execFileSync","execFileSync"]}
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ export {
8
+ __export
9
+ };
10
+ //# sourceMappingURL=chunk-PZ5AY32C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,114 @@
1
+ // src/model/llm-parser.ts
2
+ var DEFAULT_LLM_ID = "default";
3
+ var RESERVED_KEYS = /* @__PURE__ */ new Set([
4
+ "default",
5
+ "instances",
6
+ "catalog",
7
+ "provider",
8
+ "model",
9
+ "temperature",
10
+ "apiKey",
11
+ "baseURL",
12
+ "base_url",
13
+ "type",
14
+ "id"
15
+ ]);
16
+ function parseLlmSection(section) {
17
+ if (section == null || typeof section !== "object") {
18
+ return { defaultId: DEFAULT_LLM_ID, configs: [] };
19
+ }
20
+ if (Array.isArray(section)) {
21
+ const configs = section.filter((i) => i != null && typeof i === "object").map((item, i) => normalizeLlmConfig({ ...item, id: item.id ?? item.name ?? String(i) })).filter((c) => c != null);
22
+ const defaultId = configs.length > 0 ? configs[0].id : DEFAULT_LLM_ID;
23
+ return { defaultId, configs };
24
+ }
25
+ const s = section;
26
+ const flatEntries = Object.entries(s).filter(
27
+ ([k, v]) => !RESERVED_KEYS.has(k) && v != null && typeof v === "object" && !Array.isArray(v)
28
+ );
29
+ if (flatEntries.length > 0) {
30
+ const configs = [];
31
+ for (const [id, entry] of flatEntries) {
32
+ const c = entryToLlmConfig(id, entry);
33
+ if (c) configs.push(c);
34
+ }
35
+ const defaultId = typeof s.default === "string" && s.default && flatEntries.some(([k]) => k === s.default) ? s.default : configs.length > 0 ? configs[0].id : DEFAULT_LLM_ID;
36
+ return { defaultId, configs };
37
+ }
38
+ if (Array.isArray(s.instances)) {
39
+ const configs = s.instances.filter((i) => i != null && typeof i === "object").map((i) => normalizeLlmConfig(i)).filter((c) => c != null);
40
+ const defaultId = typeof s.default === "string" && s.default ? s.default : configs.length > 0 ? configs[0].id : DEFAULT_LLM_ID;
41
+ return { defaultId, configs };
42
+ }
43
+ if (typeof s.provider === "string" || typeof s.model === "string" || typeof s.name === "string") {
44
+ const one = singleObjectToLlmConfig(s);
45
+ return { defaultId: one.id, configs: [one] };
46
+ }
47
+ return { defaultId: DEFAULT_LLM_ID, configs: [] };
48
+ }
49
+ var EXTENSION_OPTION_KEYS = ["featureKey", "tenant", "authToken", "verifySSL", "bypassAuth", "host", "resolveHost", "timeoutMs", "options"];
50
+ function entryToLlmConfig(id, entry) {
51
+ const opts = entry.options;
52
+ const baseURL = typeof entry.base_url === "string" ? entry.base_url : typeof entry.baseURL === "string" ? entry.baseURL : void 0;
53
+ const model = typeof entry.name === "string" ? entry.name : typeof entry.model === "string" ? entry.model : void 0;
54
+ const provider = typeof entry.provider === "string" && entry.provider ? entry.provider : "openai";
55
+ const config = {
56
+ id,
57
+ type: "chat",
58
+ provider,
59
+ model,
60
+ temperature: typeof opts?.temperature === "number" ? opts.temperature : typeof entry.temperature === "number" ? entry.temperature : void 0,
61
+ apiKey: typeof opts?.apiKey === "string" ? opts.apiKey : typeof entry.apiKey === "string" ? entry.apiKey : void 0,
62
+ baseURL
63
+ };
64
+ if (typeof entry.type === "string" && entry.type === "image") config.type = "image";
65
+ if (opts && typeof opts === "object") config.options = opts;
66
+ for (const k of EXTENSION_OPTION_KEYS) {
67
+ if (entry[k] !== void 0) config[k] = entry[k];
68
+ else if (opts && opts[k] !== void 0) config[k] = opts[k];
69
+ }
70
+ return config;
71
+ }
72
+ function singleObjectToLlmConfig(s) {
73
+ const one = {
74
+ id: DEFAULT_LLM_ID,
75
+ type: "chat",
76
+ provider: typeof s.provider === "string" ? s.provider : "openai",
77
+ model: typeof s.model === "string" ? s.model : typeof s.name === "string" ? s.name : void 0,
78
+ temperature: typeof s.temperature === "number" ? s.temperature : void 0,
79
+ apiKey: typeof s.apiKey === "string" ? s.apiKey : void 0,
80
+ baseURL: typeof s.baseURL === "string" ? s.baseURL : typeof s.base_url === "string" ? s.base_url : void 0
81
+ };
82
+ Object.keys(s).forEach((k) => {
83
+ if (!["id", "type", "provider", "model", "name", "temperature", "apiKey", "baseURL", "base_url", "default", "instances"].includes(k)) {
84
+ one[k] = s[k];
85
+ }
86
+ });
87
+ return one;
88
+ }
89
+ function normalizeLlmConfig(o) {
90
+ const id = typeof o.id === "string" && o.id ? o.id : DEFAULT_LLM_ID;
91
+ const type = o.type === "image" ? "image" : "chat";
92
+ const provider = typeof o.provider === "string" && o.provider ? o.provider : "openai";
93
+ const opts = o.options;
94
+ const config = {
95
+ id,
96
+ type,
97
+ provider,
98
+ model: typeof o.model === "string" ? o.model : typeof o.name === "string" ? o.name : void 0,
99
+ temperature: typeof o.temperature === "number" ? o.temperature : typeof opts?.temperature === "number" ? opts.temperature : void 0,
100
+ apiKey: typeof o.apiKey === "string" ? o.apiKey : typeof opts?.apiKey === "string" ? opts.apiKey : void 0,
101
+ baseURL: typeof o.baseURL === "string" ? o.baseURL : typeof o.base_url === "string" ? o.base_url : void 0
102
+ };
103
+ Object.keys(o).forEach((k) => {
104
+ if (!["id", "type", "provider", "model", "name", "temperature", "apiKey", "baseURL", "base_url"].includes(k)) {
105
+ config[k] = o[k];
106
+ }
107
+ });
108
+ return config;
109
+ }
110
+
111
+ export {
112
+ parseLlmSection
113
+ };
114
+ //# sourceMappingURL=chunk-SPDXNDDD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model/llm-parser.ts"],"sourcesContent":["/**\n * Parse agent.yaml llm section into normalized LLMConfig[] and default id.\n * Supports: flat (each model keyed by name), instances[], or single object.\n */\n\nimport type { LLMConfig } from \"./types.js\";\n\nconst DEFAULT_LLM_ID = \"default\";\n\nconst RESERVED_KEYS = new Set([\n \"default\",\n \"instances\",\n \"catalog\",\n \"provider\",\n \"model\",\n \"temperature\",\n \"apiKey\",\n \"baseURL\",\n \"base_url\",\n \"type\",\n \"id\",\n]);\n\nexport function parseLlmSection(section: unknown): { defaultId: string; configs: LLMConfig[] } {\n if (section == null || typeof section !== \"object\") {\n return { defaultId: DEFAULT_LLM_ID, configs: [] };\n }\n\n if (Array.isArray(section)) {\n const configs = section\n .filter((i): i is Record<string, unknown> => i != null && typeof i === \"object\")\n .map((item, i) => normalizeLlmConfig({ ...item, id: item.id ?? item.name ?? String(i) }))\n .filter((c): c is LLMConfig => c != null);\n const defaultId = configs.length > 0 ? configs[0]!.id : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n const s = section as Record<string, unknown>;\n\n const flatEntries = Object.entries(s).filter(\n ([k, v]) => !RESERVED_KEYS.has(k) && v != null && typeof v === \"object\" && !Array.isArray(v)\n );\n if (flatEntries.length > 0) {\n const configs: LLMConfig[] = [];\n for (const [id, entry] of flatEntries) {\n const c = entryToLlmConfig(id, entry as Record<string, unknown>);\n if (c) configs.push(c);\n }\n const defaultId =\n typeof s.default === \"string\" && s.default && flatEntries.some(([k]) => k === s.default)\n ? s.default\n : configs.length > 0\n ? configs[0]!.id\n : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n if (Array.isArray(s.instances)) {\n const configs = (s.instances as unknown[])\n .filter((i): i is Record<string, unknown> => i != null && typeof i === \"object\")\n .map((i) => normalizeLlmConfig(i))\n .filter((c): c is LLMConfig => c != null);\n const defaultId =\n typeof s.default === \"string\" && s.default\n ? s.default\n : configs.length > 0\n ? configs[0]!.id\n : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n if (typeof s.provider === \"string\" || typeof s.model === \"string\" || typeof (s as { name?: string }).name === \"string\") {\n const one = singleObjectToLlmConfig(s);\n return { defaultId: one.id, configs: [one] };\n }\n\n return { defaultId: DEFAULT_LLM_ID, configs: [] };\n}\n\nconst EXTENSION_OPTION_KEYS = [\"featureKey\", \"tenant\", \"authToken\", \"verifySSL\", \"bypassAuth\", \"host\", \"resolveHost\", \"timeoutMs\", \"options\"];\n\nfunction entryToLlmConfig(id: string, entry: Record<string, unknown>): LLMConfig | null {\n const opts = entry.options as Record<string, unknown> | undefined;\n const baseURL =\n typeof entry.base_url === \"string\"\n ? entry.base_url\n : typeof entry.baseURL === \"string\"\n ? entry.baseURL\n : undefined;\n const model = typeof entry.name === \"string\" ? entry.name : typeof entry.model === \"string\" ? entry.model : undefined;\n const provider = typeof entry.provider === \"string\" && entry.provider ? entry.provider : \"openai\";\n const config: LLMConfig = {\n id,\n type: \"chat\",\n provider,\n model,\n temperature: typeof opts?.temperature === \"number\" ? opts.temperature : typeof entry.temperature === \"number\" ? entry.temperature : undefined,\n apiKey: typeof opts?.apiKey === \"string\" ? opts.apiKey : typeof entry.apiKey === \"string\" ? entry.apiKey : undefined,\n baseURL,\n };\n if (typeof entry.type === \"string\" && entry.type === \"image\") config.type = \"image\";\n if (opts && typeof opts === \"object\") (config as Record<string, unknown>).options = opts;\n for (const k of EXTENSION_OPTION_KEYS) {\n if (entry[k] !== undefined) (config as Record<string, unknown>)[k] = entry[k];\n else if (opts && opts[k] !== undefined) (config as Record<string, unknown>)[k] = opts[k];\n }\n return config;\n}\n\nfunction singleObjectToLlmConfig(s: Record<string, unknown>): LLMConfig {\n const one: LLMConfig = {\n id: DEFAULT_LLM_ID,\n type: \"chat\",\n provider: typeof s.provider === \"string\" ? s.provider : \"openai\",\n model: typeof s.model === \"string\" ? s.model : (typeof (s as { name?: string }).name === \"string\" ? (s as { name: string }).name : undefined),\n temperature: typeof s.temperature === \"number\" ? s.temperature : undefined,\n apiKey: typeof s.apiKey === \"string\" ? s.apiKey : undefined,\n baseURL:\n typeof s.baseURL === \"string\" ? s.baseURL : typeof s.base_url === \"string\" ? s.base_url : undefined,\n };\n Object.keys(s).forEach((k) => {\n if (![\"id\", \"type\", \"provider\", \"model\", \"name\", \"temperature\", \"apiKey\", \"baseURL\", \"base_url\", \"default\", \"instances\"].includes(k)) {\n (one as Record<string, unknown>)[k] = s[k];\n }\n });\n return one;\n}\n\nfunction normalizeLlmConfig(o: Record<string, unknown>): LLMConfig | null {\n const id = typeof o.id === \"string\" && o.id ? o.id : DEFAULT_LLM_ID;\n const type = o.type === \"image\" ? \"image\" : \"chat\";\n const provider = typeof o.provider === \"string\" && o.provider ? o.provider : \"openai\";\n const opts = o.options as Record<string, unknown> | undefined;\n const config: LLMConfig = {\n id,\n type,\n provider,\n model: typeof o.model === \"string\" ? o.model : (typeof o.name === \"string\" ? o.name : undefined),\n temperature:\n typeof o.temperature === \"number\"\n ? o.temperature\n : typeof opts?.temperature === \"number\"\n ? opts.temperature\n : undefined,\n apiKey:\n typeof o.apiKey === \"string\"\n ? o.apiKey\n : typeof opts?.apiKey === \"string\"\n ? opts.apiKey\n : undefined,\n baseURL: typeof o.baseURL === \"string\" ? o.baseURL : (typeof o.base_url === \"string\" ? o.base_url : undefined),\n };\n Object.keys(o).forEach((k) => {\n if (![\"id\", \"type\", \"provider\", \"model\", \"name\", \"temperature\", \"apiKey\", \"baseURL\", \"base_url\"].includes(k)) {\n (config as Record<string, unknown>)[k] = o[k];\n }\n });\n return config;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,255 @@
1
+ import {
2
+ loadModelsConfig
3
+ } from "./chunk-FZKECZUY.js";
4
+ import {
5
+ buildUnreachableError,
6
+ checkEndpointConnectivity
7
+ } from "./chunk-EPVJLBGC.js";
8
+ import {
9
+ resolveLlmSectionWithNpm
10
+ } from "./chunk-HSU6XZOI.js";
11
+ import {
12
+ createChatModelFromLlmConfig
13
+ } from "./chunk-4OLU43SH.js";
14
+ import {
15
+ parseLlmSection
16
+ } from "./chunk-SPDXNDDD.js";
17
+
18
+ // src/cli/index.ts
19
+ var cli_exports = {};
20
+
21
+ // src/api/create-agent-llm.ts
22
+ import { join } from "path";
23
+ function applyDefaultToolChoice(model) {
24
+ const m = model;
25
+ const orig = m.bindTools?.bind(model);
26
+ if (!orig) return;
27
+ m.bindTools = function(tools2, opts) {
28
+ return orig(tools2, { ...opts, tool_choice: "auto" });
29
+ };
30
+ }
31
+ var CIS_DEFAULT_RESOLVE_HOST = "s0010-ml-https.s0010.us-west-2.awswd";
32
+ var CIS_DEFAULT_RESOLVE_IP = "10.210.98.124";
33
+ function buildEndpointConnectivityOptions(config) {
34
+ const opts = config.options ?? config;
35
+ const provider = typeof config.provider === "string" ? config.provider : "";
36
+ const baseURL = config.baseURL;
37
+ const isCis = provider === "cis" || provider.includes("cis");
38
+ const useCisDefault = isCis && baseURL.includes(CIS_DEFAULT_RESOLVE_HOST) && opts?.resolveHost == null;
39
+ const resolveHost = opts?.resolveHost != null && typeof opts.resolveHost.from === "string" ? opts.resolveHost : useCisDefault ? { from: CIS_DEFAULT_RESOLVE_HOST, to: CIS_DEFAULT_RESOLVE_IP } : void 0;
40
+ const host = typeof opts?.host === "string" ? opts.host : resolveHost ? resolveHost.from : void 0;
41
+ if (resolveHost == null && host == null) return void 0;
42
+ const verifySSL = opts?.verifySSL === true;
43
+ const bypassAuth = opts?.bypassAuth !== false;
44
+ return {
45
+ resolveHost,
46
+ host,
47
+ verifySSL: resolveHost != null ? false : verifySSL ? true : void 0,
48
+ bypassAuth: bypassAuth ? true : void 0,
49
+ featureKey: typeof opts?.featureKey === "string" ? opts.featureKey : void 0
50
+ };
51
+ }
52
+ function resolveDefaultConfigPath() {
53
+ return join(process.cwd(), "models.yaml");
54
+ }
55
+ function normalizeOptions(configPathOrOptions) {
56
+ if (configPathOrOptions == null) return {};
57
+ if (typeof configPathOrOptions === "string") return { configPath: configPathOrOptions };
58
+ return configPathOrOptions;
59
+ }
60
+ function normalizeError(e, context) {
61
+ if (e instanceof Error) return new Error(`${context}: ${e.message}`, { cause: e });
62
+ return new Error(`${context}: ${String(e)}`);
63
+ }
64
+ async function ensureConnectivity(resolvedLlmSection, options) {
65
+ let configs;
66
+ try {
67
+ const parsed = parseLlmSection(resolvedLlmSection ?? null);
68
+ configs = parsed.configs.filter(
69
+ (c) => typeof c.baseURL === "string" && c.baseURL.length > 0 && (c.baseURL.startsWith("http://") || c.baseURL.startsWith("https://")) && !c.baseURL.includes("${")
70
+ );
71
+ } catch {
72
+ return;
73
+ }
74
+ const shouldCheck = options.checkConnectivity !== false && configs.length > 0;
75
+ if (!shouldCheck) return;
76
+ const report = (status) => options.onConnectionStatus?.(status);
77
+ const timeoutMs = options.connectivityTimeoutMs ?? 8e3;
78
+ for (const config of configs) {
79
+ const { id, baseURL } = config;
80
+ report({
81
+ phase: "checking",
82
+ endpointId: id,
83
+ baseURL,
84
+ message: "Checking connection..."
85
+ });
86
+ const endpointOpts = buildEndpointConnectivityOptions(config);
87
+ const result = await checkEndpointConnectivity(baseURL, {
88
+ timeoutMs,
89
+ ...endpointOpts
90
+ });
91
+ if (result.reachable) {
92
+ report({
93
+ phase: "reachable",
94
+ endpointId: id,
95
+ baseURL,
96
+ message: result.message ?? "Connected"
97
+ });
98
+ } else {
99
+ report({
100
+ phase: "unreachable",
101
+ endpointId: id,
102
+ baseURL,
103
+ message: result.message ?? "Unreachable"
104
+ });
105
+ throw new Error(buildUnreachableError(id, baseURL, result.message));
106
+ }
107
+ }
108
+ }
109
+ async function createAgentLlm(configPathOrOptions) {
110
+ try {
111
+ const options = normalizeOptions(configPathOrOptions);
112
+ const configPath = options.configPath ?? resolveDefaultConfigPath();
113
+ const modelsConfig = loadModelsConfig(configPath);
114
+ if (modelsConfig?.llm == null) {
115
+ throw new Error(
116
+ `No LLM config at ${configPath}. Add models.yaml in the current directory, or pass configPath.`
117
+ );
118
+ }
119
+ const resolvedSection = await resolveLlmSectionWithNpm(modelsConfig.llm, {
120
+ installNpmIfMissing: options.installNpmIfMissing !== false,
121
+ cwd: process.cwd()
122
+ });
123
+ const checkConnectivity = options.checkConnectivity ?? modelsConfig.runtime.check_connectivity;
124
+ await ensureConnectivity(resolvedSection, {
125
+ checkConnectivity,
126
+ onConnectionStatus: options.onConnectionStatus,
127
+ connectivityTimeoutMs: options.connectivityTimeoutMs
128
+ });
129
+ const model = createChatModelFromLlmConfig({ llmSection: resolvedSection });
130
+ applyDefaultToolChoice(model);
131
+ return model;
132
+ } catch (e) {
133
+ if (e instanceof Error && e.message.includes("No LLM config")) throw e;
134
+ if (e instanceof Error && e.message.includes("Cannot connect to")) throw e;
135
+ throw normalizeError(e, "createAgentLlm failed");
136
+ }
137
+ }
138
+
139
+ // src/cli/utils.ts
140
+ function messageContentToString(content) {
141
+ if (typeof content === "string") return content;
142
+ if (Array.isArray(content)) {
143
+ return content.map((c) => "text" in c && c.text ? c.text : "").join("");
144
+ }
145
+ return String(content ?? "");
146
+ }
147
+
148
+ // src/cli/index.ts
149
+ import { tool } from "@langchain/core/tools";
150
+ import { z } from "zod";
151
+ import { HumanMessage, ToolMessage } from "@langchain/core/messages";
152
+ function parseArgv() {
153
+ const args = process.argv.slice(2);
154
+ let configPath;
155
+ let useTools = false;
156
+ const rest = [];
157
+ for (let i = 0; i < args.length; i++) {
158
+ if (args[i] === "--config" && args[i + 1]) {
159
+ configPath = args[i + 1];
160
+ i++;
161
+ } else if (args[i] === "--tools") {
162
+ useTools = true;
163
+ } else {
164
+ rest.push(args[i]);
165
+ }
166
+ }
167
+ const query = rest.join(" ").trim() || "hi";
168
+ return { configPath, useTools, query };
169
+ }
170
+ var getWeather = tool(
171
+ (input) => {
172
+ const loc = input.location.toLowerCase();
173
+ if (["sf", "sf bay"].includes(loc)) return "It's 60\xB0F and foggy in the Bay Area.";
174
+ if (["ny", "new york"].includes(loc)) return "It's 72\xB0F and partly cloudy in New York.";
175
+ return `Weather for ${input.location}: 70\xB0F and sunny.`;
176
+ },
177
+ {
178
+ name: "get_weather",
179
+ description: "Get the current weather for a location.",
180
+ schema: z.object({
181
+ location: z.string().describe("City or place name (e.g. SF, New York)")
182
+ })
183
+ }
184
+ );
185
+ var addNumbers = tool(
186
+ (input) => String(input.a + input.b),
187
+ {
188
+ name: "add_numbers",
189
+ description: "Add two numbers.",
190
+ schema: z.object({
191
+ a: z.number().describe("First number"),
192
+ b: z.number().describe("Second number")
193
+ })
194
+ }
195
+ );
196
+ var tools = [getWeather, addNumbers];
197
+ var toolsByName = new Map(tools.map((t) => [t.name, t]));
198
+ var MAX_TURNS = 10;
199
+ async function runSimpleChat(model, query) {
200
+ const messages = [new HumanMessage(query)];
201
+ const response = await model.invoke(messages);
202
+ return messageContentToString(response.content);
203
+ }
204
+ async function runAgentWithTools(model, query) {
205
+ const withTools = model.bindTools?.(tools, { tool_choice: "auto" });
206
+ const messages = [new HumanMessage(query)];
207
+ if (!withTools) return runSimpleChat(model, query);
208
+ for (let turn = 0; turn < MAX_TURNS; turn++) {
209
+ const response = await withTools.invoke(messages);
210
+ const aiMessage = response;
211
+ if (!aiMessage.tool_calls?.length) {
212
+ return messageContentToString(aiMessage.content);
213
+ }
214
+ messages.push(aiMessage);
215
+ for (const tc of aiMessage.tool_calls) {
216
+ const id = tc.id ?? `call_${turn}_${tc.name}`;
217
+ const toolFn = toolsByName.get(tc.name);
218
+ let result;
219
+ if (toolFn) {
220
+ try {
221
+ const out = await toolFn.invoke(
222
+ tc.args
223
+ );
224
+ result = typeof out === "string" ? out : JSON.stringify(out);
225
+ } catch (err) {
226
+ result = `Error: ${err instanceof Error ? err.message : String(err)}`;
227
+ }
228
+ } else {
229
+ result = `Unknown tool: ${tc.name}`;
230
+ }
231
+ messages.push(new ToolMessage({ content: result, tool_call_id: id }));
232
+ }
233
+ }
234
+ return "Agent reached max turns without a final answer.";
235
+ }
236
+ async function main() {
237
+ const { configPath, useTools, query } = parseArgv();
238
+ const model = await createAgentLlm(configPath ? { configPath } : void 0);
239
+ console.log("Query:", query);
240
+ console.log("---");
241
+ const answer = useTools ? await runAgentWithTools(model, query) : await runSimpleChat(model, query);
242
+ console.log("Answer:", answer);
243
+ console.log("---");
244
+ console.log("Done.");
245
+ }
246
+ main().catch((err) => {
247
+ console.error(err);
248
+ process.exit(1);
249
+ });
250
+
251
+ export {
252
+ createAgentLlm,
253
+ cli_exports
254
+ };
255
+ //# sourceMappingURL=chunk-TKIZELZQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/api/create-agent-llm.ts","../src/cli/utils.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * CLI for @easynet/agent-model: chat with the configured LLM (LangChain ChatOpenAI).\n * Usage: agent-model \"your question\"\n * or: agent-model --config ./models.yaml \"hi\"\n * or: agent-model --tools \"what is the weather in SF?\"\n */\nimport { createAgentLlm } from \"../api/create-agent-llm.js\";\nimport { messageContentToString } from \"./utils.js\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { tool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { HumanMessage, AIMessage, ToolMessage } from \"@langchain/core/messages\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\n\nfunction parseArgv(): { configPath: string | undefined; useTools: boolean; query: string } {\n const args = process.argv.slice(2);\n let configPath: string | undefined;\n let useTools = false;\n const rest: string[] = [];\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--config\" && args[i + 1]) {\n configPath = args[i + 1];\n i++;\n } else if (args[i] === \"--tools\") {\n useTools = true;\n } else {\n rest.push(args[i]);\n }\n }\n const query = rest.join(\" \").trim() || \"hi\";\n return { configPath, useTools, query };\n}\n\nconst getWeather = tool(\n (input: { location: string }) => {\n const loc = input.location.toLowerCase();\n if ([\"sf\", \"sf bay\"].includes(loc)) return \"It's 60°F and foggy in the Bay Area.\";\n if ([\"ny\", \"new york\"].includes(loc)) return \"It's 72°F and partly cloudy in New York.\";\n return `Weather for ${input.location}: 70°F and sunny.`;\n },\n {\n name: \"get_weather\",\n description: \"Get the current weather for a location.\",\n schema: z.object({\n location: z.string().describe(\"City or place name (e.g. SF, New York)\"),\n }),\n }\n);\n\nconst addNumbers = tool(\n (input: { a: number; b: number }) => String(input.a + input.b),\n {\n name: \"add_numbers\",\n description: \"Add two numbers.\",\n schema: z.object({\n a: z.number().describe(\"First number\"),\n b: z.number().describe(\"Second number\"),\n }),\n }\n);\n\nconst tools = [getWeather, addNumbers];\nconst toolsByName = new Map(tools.map((t) => [t.name, t]));\nconst MAX_TURNS = 10;\n\nasync function runSimpleChat(model: BaseChatModel, query: string): Promise<string> {\n const messages: BaseMessage[] = [new HumanMessage(query)];\n const response = await model.invoke(messages);\n return messageContentToString(response.content);\n}\n\nasync function runAgentWithTools(model: BaseChatModel, query: string): Promise<string> {\n const withTools = model.bindTools?.(tools, { tool_choice: \"auto\" });\n const messages: BaseMessage[] = [new HumanMessage(query)];\n if (!withTools) return runSimpleChat(model, query);\n\n for (let turn = 0; turn < MAX_TURNS; turn++) {\n const response = await withTools.invoke(messages);\n const aiMessage = response as AIMessage;\n\n if (!aiMessage.tool_calls?.length) {\n return messageContentToString(aiMessage.content);\n }\n\n messages.push(aiMessage);\n for (const tc of aiMessage.tool_calls) {\n const id = tc.id ?? `call_${turn}_${tc.name}`;\n const toolFn = toolsByName.get(tc.name as \"get_weather\" | \"add_numbers\");\n let result: string;\n if (toolFn) {\n try {\n const out = await (toolFn as { invoke: (args: Record<string, unknown>) => Promise<unknown> }).invoke(\n tc.args as Record<string, unknown>\n );\n result = typeof out === \"string\" ? out : JSON.stringify(out);\n } catch (err) {\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n } else {\n result = `Unknown tool: ${tc.name}`;\n }\n messages.push(new ToolMessage({ content: result, tool_call_id: id }));\n }\n }\n return \"Agent reached max turns without a final answer.\";\n}\n\nasync function main() {\n const { configPath, useTools, query } = parseArgv();\n const model = await createAgentLlm(configPath ? { configPath } : undefined);\n\n console.log(\"Query:\", query);\n console.log(\"---\");\n const answer = useTools\n ? await runAgentWithTools(model, query)\n : await runSimpleChat(model, query);\n console.log(\"Answer:\", answer);\n console.log(\"---\");\n console.log(\"Done.\");\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n","/**\n * Simple API: create LangChain ChatModel from models.yaml config.\n * Supports OpenAI-compatible providers with optional connectivity check and npm: provider resolution.\n */\nimport { join } from \"node:path\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport {\n checkEndpointConnectivity,\n buildUnreachableError,\n type EndpointConnectivityOptions,\n type ConnectionStatus,\n} from \"../connectivity/index.js\";\nimport { parseLlmSection } from \"../model/llm-parser.js\";\nimport type { LLMConfig } from \"../model/types.js\";\nimport { createChatModelFromLlmConfig } from \"../langchain/index.js\";\nimport { resolveLlmSectionWithNpm } from \"../extensions/npm-protocol.js\";\nimport { loadModelsConfig } from \"../config/loader.js\";\n\n/**\n * Ensure bindTools always receives tool_choice: \"auto\" when tools are bound.\n * Fixes \"Tool choice is none, but model called a tool\" when using this model\n * with LangChain createAgent (AgentNode leaves tool_choice undefined for non-structured tools).\n * Mutates the model in place so it still passes isBaseChatModel / bindTools checks.\n */\nfunction applyDefaultToolChoice(model: BaseChatModel): void {\n const m = model as {\n bindTools?: (tools: unknown, opts?: Record<string, unknown>) => unknown;\n };\n const orig = m.bindTools?.bind(model);\n if (!orig) return;\n m.bindTools = function (tools: unknown, opts?: Record<string, unknown>) {\n return orig(tools, { ...opts, tool_choice: \"auto\" });\n };\n}\n\nconst CIS_DEFAULT_RESOLVE_HOST = \"s0010-ml-https.s0010.us-west-2.awswd\";\nconst CIS_DEFAULT_RESOLVE_IP = \"10.210.98.124\";\n\nfunction buildEndpointConnectivityOptions(\n config: LLMConfig & { baseURL: string }\n): EndpointConnectivityOptions | undefined {\n const opts = (config.options as Record<string, unknown> | undefined) ?? config;\n const provider = typeof config.provider === \"string\" ? config.provider : \"\";\n const baseURL = config.baseURL;\n const isCis = provider === \"cis\" || provider.includes(\"cis\");\n const useCisDefault =\n isCis &&\n baseURL.includes(CIS_DEFAULT_RESOLVE_HOST) &&\n opts?.resolveHost == null;\n\n const resolveHost =\n opts?.resolveHost != null && typeof (opts.resolveHost as { from?: string; to?: string }).from === \"string\"\n ? (opts.resolveHost as { from: string; to: string })\n : useCisDefault\n ? { from: CIS_DEFAULT_RESOLVE_HOST, to: CIS_DEFAULT_RESOLVE_IP }\n : undefined;\n const host = typeof opts?.host === \"string\" ? opts.host : (resolveHost ? resolveHost.from : undefined);\n if (resolveHost == null && host == null) return undefined;\n\n const verifySSL = opts?.verifySSL === true;\n const bypassAuth = opts?.bypassAuth !== false;\n\n return {\n resolveHost,\n host,\n verifySSL: resolveHost != null ? false : (verifySSL ? true : undefined),\n bypassAuth: bypassAuth ? true : undefined,\n featureKey: typeof opts?.featureKey === \"string\" ? opts.featureKey : undefined,\n };\n}\n\nexport interface CreateAgentLlmOptions {\n configPath?: string;\n installNpmIfMissing?: boolean;\n checkConnectivity?: boolean;\n onConnectionStatus?: (status: ConnectionStatus) => void;\n connectivityTimeoutMs?: number;\n}\n\nfunction resolveDefaultConfigPath(): string {\n return join(process.cwd(), \"models.yaml\");\n}\n\nfunction normalizeOptions(\n configPathOrOptions?: string | CreateAgentLlmOptions\n): CreateAgentLlmOptions {\n if (configPathOrOptions == null) return {};\n if (typeof configPathOrOptions === \"string\") return { configPath: configPathOrOptions };\n return configPathOrOptions;\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\nasync function ensureConnectivity(\n resolvedLlmSection: unknown,\n options: {\n checkConnectivity?: boolean;\n onConnectionStatus?: (status: ConnectionStatus) => void;\n connectivityTimeoutMs?: number;\n }\n): Promise<void> {\n let configs: Array<LLMConfig & { baseURL: string }>;\n try {\n const parsed = parseLlmSection(resolvedLlmSection ?? null);\n configs = parsed.configs.filter(\n (c: LLMConfig): c is LLMConfig & { baseURL: string } =>\n typeof c.baseURL === \"string\" &&\n c.baseURL.length > 0 &&\n (c.baseURL.startsWith(\"http://\") || c.baseURL.startsWith(\"https://\")) &&\n !c.baseURL.includes(\"${\")\n );\n } catch {\n return;\n }\n const shouldCheck = options.checkConnectivity !== false && configs.length > 0;\n if (!shouldCheck) return;\n\n const report = (status: ConnectionStatus) => options.onConnectionStatus?.(status);\n const timeoutMs = options.connectivityTimeoutMs ?? 8000;\n\n for (const config of configs) {\n const { id, baseURL } = config;\n report({\n phase: \"checking\",\n endpointId: id,\n baseURL,\n message: \"Checking connection...\",\n });\n\n const endpointOpts = buildEndpointConnectivityOptions(config);\n const result = await checkEndpointConnectivity(baseURL, {\n timeoutMs,\n ...endpointOpts,\n });\n\n if (result.reachable) {\n report({\n phase: \"reachable\",\n endpointId: id,\n baseURL,\n message: result.message ?? \"Connected\",\n });\n } else {\n report({\n phase: \"unreachable\",\n endpointId: id,\n baseURL,\n message: result.message ?? \"Unreachable\",\n });\n throw new Error(buildUnreachableError(id, baseURL, result.message));\n }\n }\n}\n\n/**\n * Create a LangChain ChatModel from models.yaml config.\n * Returns BaseChatModel compatible with LangChain's createAgent and other tools.\n */\nexport async function createAgentLlm(\n configPathOrOptions?: string | CreateAgentLlmOptions\n): Promise<BaseChatModel> {\n try {\n const options = normalizeOptions(configPathOrOptions);\n const configPath = options.configPath ?? resolveDefaultConfigPath();\n const modelsConfig = loadModelsConfig(configPath);\n\n if (modelsConfig?.llm == null) {\n throw new Error(\n `No LLM config at ${configPath}. Add models.yaml in the current directory, or pass configPath.`\n );\n }\n\n const resolvedSection = await resolveLlmSectionWithNpm(modelsConfig.llm, {\n installNpmIfMissing: options.installNpmIfMissing !== false,\n cwd: process.cwd(),\n });\n\n // Priority: caller option > YAML runtime > default (true)\n const checkConnectivity =\n options.checkConnectivity ?? modelsConfig.runtime.check_connectivity;\n\n await ensureConnectivity(resolvedSection, {\n checkConnectivity,\n onConnectionStatus: options.onConnectionStatus,\n connectivityTimeoutMs: options.connectivityTimeoutMs,\n });\n\n const model = createChatModelFromLlmConfig({ llmSection: resolvedSection });\n applyDefaultToolChoice(model);\n return model;\n } catch (e) {\n if (e instanceof Error && e.message.includes(\"No LLM config\")) throw e;\n if (e instanceof Error && e.message.includes(\"Cannot connect to\")) throw e;\n throw normalizeError(e, \"createAgentLlm failed\");\n }\n}\n","/**\n * Shared CLI helpers for agent-model and provider CLIs.\n */\n\n/**\n * Turn LangChain message content (string | array of parts) into a single string.\n */\nexport function messageContentToString(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return (content as { type?: string; text?: string }[])\n .map((c) => (\"text\" in c && c.text ? c.text : \"\"))\n .join(\"\");\n }\n return String(content ?? \"\");\n}\n\n/**\n * Log error and exit. Use in CLIs for consistent error handling.\n */\nexport function exitWithError(err: unknown, code = 1): never {\n console.error(\"Error:\", err instanceof Error ? err.message : String(err));\n process.exit(code);\n}\n"],"mappings":"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","names":["tools"]}
@@ -0,0 +1,50 @@
1
+ import {
2
+ clearYamlFileCache,
3
+ loadLlmConfig,
4
+ loadYamlFile,
5
+ loadYamlFileSync,
6
+ parseLlmYaml,
7
+ parseYamlContent,
8
+ substituteEnv
9
+ } from "./chunk-FZKECZUY.js";
10
+ import {
11
+ parseLlmSection
12
+ } from "./chunk-SPDXNDDD.js";
13
+ import {
14
+ __export
15
+ } from "./chunk-PZ5AY32C.js";
16
+
17
+ // src/config/index.ts
18
+ var config_exports = {};
19
+ __export(config_exports, {
20
+ clearYamlFileCache: () => clearYamlFileCache,
21
+ loadLlmConfig: () => loadLlmConfig,
22
+ loadYamlConfig: () => loadYamlConfig,
23
+ loadYamlFile: () => loadYamlFile,
24
+ loadYamlFileSync: () => loadYamlFileSync,
25
+ parseLlmSection: () => parseLlmSection,
26
+ parseLlmYaml: () => parseLlmYaml,
27
+ parseYamlContent: () => parseYamlContent,
28
+ substituteEnv: () => substituteEnv
29
+ });
30
+
31
+ // src/config/yaml.ts
32
+ function loadYamlConfig(filePath) {
33
+ try {
34
+ const parsed = loadYamlFileSync(filePath, {
35
+ substituteEnv: true,
36
+ missingEnv: "keep",
37
+ cache: true
38
+ });
39
+ return parsed ?? {};
40
+ } catch (e) {
41
+ const msg = e instanceof Error ? e.message : String(e);
42
+ throw new Error(`Failed to load YAML config from ${filePath}: ${msg}`, { cause: e });
43
+ }
44
+ }
45
+
46
+ export {
47
+ loadYamlConfig,
48
+ config_exports
49
+ };
50
+ //# sourceMappingURL=chunk-VBXTOU4S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/index.ts","../src/config/yaml.ts"],"sourcesContent":["export { parseLlmSection } from \"./parser.js\";\nexport { loadLlmConfig, parseLlmYaml, substituteEnv } from \"./loader.js\";\nexport { loadYamlConfig } from \"./yaml.js\";\nexport {\n loadYamlFile,\n loadYamlFileSync,\n parseYamlContent,\n clearYamlFileCache,\n type LoadYamlOptions,\n type YamlEnvOptions,\n} from \"./yaml-utils.js\";\nexport type { LoadLlmConfigOptions } from \"./loader.js\";\n","/**\n * Generic YAML file loader utility.\n */\n\nimport { loadYamlFileSync } from \"./yaml-utils.js\";\n\n/**\n * Load and parse a YAML file into a typed object.\n * Returns empty object if file doesn't exist.\n */\nexport function loadYamlConfig<T = Record<string, unknown>>(filePath: string): T {\n try {\n const parsed = loadYamlFileSync<T>(filePath, {\n substituteEnv: true,\n missingEnv: \"keep\",\n cache: true,\n });\n return (parsed ?? ({} as T)) as T;\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Failed to load YAML config from ${filePath}: ${msg}`, { cause: e });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,SAAS,eAA4C,UAAqB;AAC/E,MAAI;AACF,UAAM,SAAS,iBAAoB,UAAU;AAAA,MAC3C,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,IACT,CAAC;AACD,WAAQ,UAAW,CAAC;AAAA,EACtB,SAAS,GAAG;AACV,UAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD,UAAM,IAAI,MAAM,mCAAmC,QAAQ,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,EACrF;AACF;","names":[]}
@@ -0,0 +1,43 @@
1
+ import {
2
+ createChatModelWithNpm,
3
+ discoverLLMExtensions,
4
+ ensureNpmPackageInstalled,
5
+ getInstalledVersion,
6
+ getLatestVersion,
7
+ loadDiscoveredExtensions,
8
+ loadLLMExtensions,
9
+ resolveLLMExtensionPackages,
10
+ resolveLlmSectionWithNpm,
11
+ resolveNpmProvider
12
+ } from "./chunk-HSU6XZOI.js";
13
+ import {
14
+ NPM_PROTOCOL_PREFIX,
15
+ isNpmProviderSpec,
16
+ parseNpmProviderSpec
17
+ } from "./chunk-K3JR2N4E.js";
18
+ import {
19
+ __export
20
+ } from "./chunk-PZ5AY32C.js";
21
+
22
+ // src/extensions/index.ts
23
+ var extensions_exports = {};
24
+ __export(extensions_exports, {
25
+ NPM_PROTOCOL_PREFIX: () => NPM_PROTOCOL_PREFIX,
26
+ createChatModelWithNpm: () => createChatModelWithNpm,
27
+ discoverLLMExtensions: () => discoverLLMExtensions,
28
+ ensureNpmPackageInstalled: () => ensureNpmPackageInstalled,
29
+ getInstalledVersion: () => getInstalledVersion,
30
+ getLatestVersion: () => getLatestVersion,
31
+ isNpmProviderSpec: () => isNpmProviderSpec,
32
+ loadDiscoveredExtensions: () => loadDiscoveredExtensions,
33
+ loadLLMExtensions: () => loadLLMExtensions,
34
+ parseNpmProviderSpec: () => parseNpmProviderSpec,
35
+ resolveLLMExtensionPackages: () => resolveLLMExtensionPackages,
36
+ resolveLlmSectionWithNpm: () => resolveLlmSectionWithNpm,
37
+ resolveNpmProvider: () => resolveNpmProvider
38
+ });
39
+
40
+ export {
41
+ extensions_exports
42
+ };
43
+ //# sourceMappingURL=chunk-YOOYQBGK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/index.ts"],"sourcesContent":["/**\n * Extensions: npm: protocol and extension loading.\n */\n\nexport {\n NPM_PROTOCOL_PREFIX,\n parseNpmProviderSpec,\n isNpmProviderSpec,\n resolveNpmProvider,\n createChatModelWithNpm,\n ensureNpmPackageInstalled,\n getLatestVersion,\n getInstalledVersion,\n resolveLlmSectionWithNpm,\n} from \"./npm-protocol.js\";\nexport type {\n ResolveNpmProviderOptions,\n CreateChatModelWithNpmOptions,\n EnsureNpmPackageInstalledOptions,\n ResolveLlmSectionWithNpmOptions,\n} from \"./npm-protocol.js\";\n\nexport {\n loadLLMExtensions,\n resolveLLMExtensionPackages,\n discoverLLMExtensions,\n loadDiscoveredExtensions,\n} from \"./loader.js\";\nexport type { LoadLLMExtensionsOptions } from \"./loader.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import "../chunk-TKIZELZQ.js";
3
+ import "../chunk-FZKECZUY.js";
4
+ import "../chunk-EPVJLBGC.js";
5
+ import "../chunk-HSU6XZOI.js";
6
+ import "../chunk-4OLU43SH.js";
7
+ import "../chunk-G7MKWPEI.js";
8
+ import "../chunk-SPDXNDDD.js";
9
+ import "../chunk-K3JR2N4E.js";
10
+ import "../chunk-PZ5AY32C.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared CLI helpers for agent-model and provider CLIs.
3
+ */
4
+ /**
5
+ * Turn LangChain message content (string | array of parts) into a single string.
6
+ */
7
+ export declare function messageContentToString(content: unknown): string;
8
+ /**
9
+ * Log error and exit. Use in CLIs for consistent error handling.
10
+ */
11
+ export declare function exitWithError(err: unknown, code?: number): never;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,SAAI,GAAG,KAAK,CAG3D"}
@@ -0,0 +1,6 @@
1
+ export { parseLlmSection } from "./parser.js";
2
+ export { loadLlmConfig, parseLlmYaml, substituteEnv } from "./loader.js";
3
+ export { loadYamlConfig } from "./yaml.js";
4
+ export { loadYamlFile, loadYamlFileSync, parseYamlContent, clearYamlFileCache, type LoadYamlOptions, type YamlEnvOptions, } from "./yaml-utils.js";
5
+ export type { LoadLlmConfigOptions } from "./loader.js";
6
+ //# sourceMappingURL=index.d.ts.map