@easynet/agent-tool 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/adapters/LangChainToolsHub.d.ts.map +1 -1
- package/dist/api/createAgentTools.d.ts.map +1 -1
- package/dist/api/extension/dynamicImportAdapter.d.ts +6 -2
- package/dist/api/extension/dynamicImportAdapter.d.ts.map +1 -1
- package/dist/api/extension/generateExtensionManifest.d.ts +3 -3
- package/dist/api/extension/generateExtensionManifest.d.ts.map +1 -1
- package/dist/api/extension/loadToolYaml.d.ts +1 -0
- package/dist/api/extension/loadToolYaml.d.ts.map +1 -1
- package/dist/api/extension/registerExtension.d.ts.map +1 -1
- package/dist/api/extension/registerFromManifest.d.ts.map +1 -1
- package/dist/api/main.cjs +14 -14
- package/dist/api/main.js +3 -3
- package/dist/api/runtimeFromConfig.d.ts +8 -0
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/{chunk-PKUSCCS6.cjs → chunk-2WDDJYR7.cjs} +243 -135
- package/dist/chunk-2WDDJYR7.cjs.map +1 -0
- package/dist/{chunk-GYUELFVR.js → chunk-DDIGAOYI.js} +3 -3
- package/dist/{chunk-GYUELFVR.js.map → chunk-DDIGAOYI.js.map} +1 -1
- package/dist/{chunk-ETZKGTTF.cjs → chunk-P25NBSPT.cjs} +7 -7
- package/dist/{chunk-ETZKGTTF.cjs.map → chunk-P25NBSPT.cjs.map} +1 -1
- package/dist/{chunk-UUQGKFSG.js → chunk-PSVSVTHY.js} +241 -136
- package/dist/chunk-PSVSVTHY.js.map +1 -0
- package/dist/{chunk-6UOHURU4.js → chunk-RRVM6JBA.js} +42 -5
- package/dist/chunk-RRVM6JBA.js.map +1 -0
- package/dist/{chunk-YP6GRCQG.cjs → chunk-S27O27OH.cjs} +53 -16
- package/dist/chunk-S27O27OH.cjs.map +1 -0
- package/dist/{chunk-FHHD4FSI.js → chunk-U3CAAURW.js} +3 -3
- package/dist/{chunk-FHHD4FSI.js.map → chunk-U3CAAURW.js.map} +1 -1
- package/dist/{chunk-LOGUQGCL.cjs → chunk-Z5STQ2JO.cjs} +9 -9
- package/dist/{chunk-LOGUQGCL.cjs.map → chunk-Z5STQ2JO.cjs.map} +1 -1
- package/dist/index.cjs +111 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -28
- package/dist/index.js.map +1 -1
- package/dist/tools/util/toolConfig.d.ts +11 -3
- package/dist/tools/util/toolConfig.d.ts.map +1 -1
- package/dist/tools/util/toolDescriptor.d.ts +29 -5
- package/dist/tools/util/toolDescriptor.d.ts.map +1 -1
- package/dist/utils/cli/index.cjs +17 -17
- package/dist/utils/cli/index.js +3 -3
- package/dist/utils/npmCache.d.ts +14 -0
- package/dist/utils/npmCache.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-6UOHURU4.js.map +0 -1
- package/dist/chunk-PKUSCCS6.cjs.map +0 -1
- package/dist/chunk-UUQGKFSG.js.map +0 -1
- package/dist/chunk-YP6GRCQG.cjs.map +0 -1
|
@@ -6,7 +6,7 @@ import { bulkhead, circuitBreaker, handleAll, ConsecutiveBreaker } from 'cockati
|
|
|
6
6
|
import { EventEmitter } from 'eventemitter3';
|
|
7
7
|
import { v4 } from 'uuid';
|
|
8
8
|
import pTimeout from 'p-timeout';
|
|
9
|
-
import { readFileSync, existsSync, mkdirSync, readdirSync,
|
|
9
|
+
import { readFileSync, existsSync, rmSync, mkdirSync, readdirSync, renameSync, statSync } from 'fs';
|
|
10
10
|
import { join, resolve, dirname, isAbsolute, basename } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
12
|
import yaml from 'js-yaml';
|
|
@@ -1509,8 +1509,20 @@ function npmDescriptorToRegistryPrefix(descriptor, resolvedVersion) {
|
|
|
1509
1509
|
const lastAt = beforeHash.lastIndexOf("@");
|
|
1510
1510
|
const scopeAndPackage = lastAt <= 0 ? beforeHash : beforeHash.slice(0, lastAt);
|
|
1511
1511
|
let version = lastAt <= 0 ? "latest" : beforeHash.slice(lastAt + 1).trim() || "latest";
|
|
1512
|
-
if (
|
|
1513
|
-
|
|
1512
|
+
if (version === "latest" || !version) {
|
|
1513
|
+
const resolved = (resolvedVersion ?? "").trim();
|
|
1514
|
+
if (resolved !== "" && resolved.toLowerCase() !== "latest") {
|
|
1515
|
+
version = resolved;
|
|
1516
|
+
} else {
|
|
1517
|
+
throw new Error(
|
|
1518
|
+
`Registry prefix requires a concrete version when descriptor uses latest (${descriptor}). Resolve version from registry (e.g. resolveLatestVersionFromRegistry) and pass as resolvedVersion.`
|
|
1519
|
+
);
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
if (!version || version.toLowerCase() === "latest") {
|
|
1523
|
+
throw new Error(
|
|
1524
|
+
`Registry never uses "latest"; pass resolved concrete version for npm descriptor: ${descriptor}`
|
|
1525
|
+
);
|
|
1514
1526
|
}
|
|
1515
1527
|
const slashIdx = scopeAndPackage.indexOf("/");
|
|
1516
1528
|
const scope = slashIdx < 0 ? scopeAndPackage : scopeAndPackage.slice(0, slashIdx).replace(/^@/, "");
|
|
@@ -1520,6 +1532,23 @@ function npmDescriptorToRegistryPrefix(descriptor, resolvedVersion) {
|
|
|
1520
1532
|
if (!normalized) return "";
|
|
1521
1533
|
return "npm." + normalized + ".";
|
|
1522
1534
|
}
|
|
1535
|
+
function npmDescriptorToPackagePrefixWithVersion(descriptor) {
|
|
1536
|
+
const s = descriptor.trim();
|
|
1537
|
+
if (typeof s !== "string" || !s.startsWith("npm:")) return "";
|
|
1538
|
+
const rest = s.slice(4).trim();
|
|
1539
|
+
const hashIdx = rest.indexOf("#");
|
|
1540
|
+
const beforeHash = hashIdx < 0 ? rest : rest.slice(0, hashIdx);
|
|
1541
|
+
const lastAt = beforeHash.lastIndexOf("@");
|
|
1542
|
+
const scopeAndPackage = lastAt <= 0 ? beforeHash : beforeHash.slice(0, lastAt);
|
|
1543
|
+
const version = lastAt <= 0 ? "" : beforeHash.slice(lastAt + 1).trim();
|
|
1544
|
+
const slashIdx = scopeAndPackage.indexOf("/");
|
|
1545
|
+
const scope = slashIdx < 0 ? scopeAndPackage : scopeAndPackage.slice(0, slashIdx).replace(/^@/, "");
|
|
1546
|
+
const pkg = slashIdx < 0 ? "" : scopeAndPackage.slice(slashIdx + 1);
|
|
1547
|
+
const segment = [scope, pkg, version].filter(Boolean).join(".");
|
|
1548
|
+
const normalized = normalizeToolName(segment);
|
|
1549
|
+
if (!normalized) return "";
|
|
1550
|
+
return "npm." + normalized;
|
|
1551
|
+
}
|
|
1523
1552
|
function isNpmToolDescriptor(descriptor) {
|
|
1524
1553
|
return isToolPath(descriptor) && parseToolPath(descriptor)?.protocol === "npm";
|
|
1525
1554
|
}
|
|
@@ -1588,6 +1617,18 @@ function normalizeToolList(descriptors) {
|
|
|
1588
1617
|
}
|
|
1589
1618
|
return out;
|
|
1590
1619
|
}
|
|
1620
|
+
function fileDescriptorToPackagePrefix(descriptor) {
|
|
1621
|
+
const path = parseToolPath(descriptor.trim());
|
|
1622
|
+
if (!path || path.protocol !== "file") return "";
|
|
1623
|
+
const pathPart = `${path.scope}/${path.packageWithVersion}`;
|
|
1624
|
+
const normalized = normalizeToolName(pathPart);
|
|
1625
|
+
if (!normalized) return "";
|
|
1626
|
+
return "file." + normalized;
|
|
1627
|
+
}
|
|
1628
|
+
function fileDescriptorToRegistryPrefix(descriptor) {
|
|
1629
|
+
const prefix = fileDescriptorToPackagePrefix(descriptor);
|
|
1630
|
+
return prefix ? prefix + "." : "";
|
|
1631
|
+
}
|
|
1591
1632
|
function loadToolConfig(toolYamlPath) {
|
|
1592
1633
|
const abs = resolve(toolYamlPath);
|
|
1593
1634
|
const raw = readFileSync(abs, "utf8");
|
|
@@ -1595,20 +1636,29 @@ function loadToolConfig(toolYamlPath) {
|
|
|
1595
1636
|
if (!parsed || typeof parsed !== "object") return {};
|
|
1596
1637
|
const toolsBlock = parsed.tools;
|
|
1597
1638
|
if (toolsBlock != null && typeof toolsBlock === "object" && !Array.isArray(toolsBlock)) {
|
|
1639
|
+
const toolDefaults = toolsBlock.defaults != null && typeof toolsBlock.defaults === "object" && !Array.isArray(toolsBlock.defaults) ? toolsBlock.defaults : void 0;
|
|
1640
|
+
const packageToolDefaults2 = toolsBlock.packages != null && typeof toolsBlock.packages === "object" && !Array.isArray(toolsBlock.packages) ? toolsBlock.packages : void 0;
|
|
1641
|
+
const list2 = Array.isArray(toolsBlock.list) && toolsBlock.list.length > 0 ? toolsBlock.list : void 0;
|
|
1598
1642
|
return {
|
|
1599
|
-
tools:
|
|
1643
|
+
tools: list2 ?? (packageToolDefaults2 ? Object.keys(packageToolDefaults2) : void 0),
|
|
1600
1644
|
sandboxedPath: typeof toolsBlock.sandboxedPath === "string" ? toolsBlock.sandboxedPath : parsed.sandboxedPath,
|
|
1601
1645
|
allowedHosts: Array.isArray(toolsBlock.allowedHosts) ? toolsBlock.allowedHosts : parsed.allowedHosts,
|
|
1602
1646
|
blockedHosts: Array.isArray(toolsBlock.blockedHosts) ? toolsBlock.blockedHosts : parsed.blockedHosts,
|
|
1603
|
-
blockedCidrs: Array.isArray(toolsBlock.blockedCidrs) ? toolsBlock.blockedCidrs : parsed.blockedCidrs
|
|
1647
|
+
blockedCidrs: Array.isArray(toolsBlock.blockedCidrs) ? toolsBlock.blockedCidrs : parsed.blockedCidrs,
|
|
1648
|
+
toolDefaults,
|
|
1649
|
+
packageToolDefaults: packageToolDefaults2
|
|
1604
1650
|
};
|
|
1605
1651
|
}
|
|
1652
|
+
const packageToolDefaults = typeof parsed.packageToolDefaults === "object" && !Array.isArray(parsed.packageToolDefaults) ? parsed.packageToolDefaults : void 0;
|
|
1653
|
+
const list = Array.isArray(parsed.tools) && parsed.tools.length > 0 ? parsed.tools : void 0;
|
|
1606
1654
|
return {
|
|
1607
|
-
tools:
|
|
1655
|
+
tools: list ?? (packageToolDefaults ? Object.keys(packageToolDefaults) : void 0),
|
|
1608
1656
|
sandboxedPath: parsed.sandboxedPath,
|
|
1609
1657
|
allowedHosts: Array.isArray(parsed.allowedHosts) ? parsed.allowedHosts : void 0,
|
|
1610
1658
|
blockedHosts: Array.isArray(parsed.blockedHosts) ? parsed.blockedHosts : void 0,
|
|
1611
|
-
blockedCidrs: Array.isArray(parsed.blockedCidrs) ? parsed.blockedCidrs : void 0
|
|
1659
|
+
blockedCidrs: Array.isArray(parsed.blockedCidrs) ? parsed.blockedCidrs : void 0,
|
|
1660
|
+
toolDefaults: typeof parsed.toolDefaults === "object" && !Array.isArray(parsed.toolDefaults) ? parsed.toolDefaults : void 0,
|
|
1661
|
+
packageToolDefaults
|
|
1612
1662
|
};
|
|
1613
1663
|
}
|
|
1614
1664
|
function resolveSandboxedPath(toolYamlPath, sandboxedPath) {
|
|
@@ -1635,6 +1685,37 @@ function findAndLoadToolConfig(dir) {
|
|
|
1635
1685
|
return {};
|
|
1636
1686
|
}
|
|
1637
1687
|
var DEFAULT_CACHE_BASE = join(homedir(), ".agent", "cache");
|
|
1688
|
+
function isLatestRequest(version) {
|
|
1689
|
+
const v = (version ?? "").trim().toLowerCase();
|
|
1690
|
+
return v === "" || v === "latest";
|
|
1691
|
+
}
|
|
1692
|
+
function resolveLatestVersionFromRegistry(packageName) {
|
|
1693
|
+
const quoted = packageName.includes(" ") ? `"${packageName}"` : packageName;
|
|
1694
|
+
try {
|
|
1695
|
+
const out = execSync(`npm view ${quoted} version`, {
|
|
1696
|
+
encoding: "utf-8",
|
|
1697
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
1698
|
+
});
|
|
1699
|
+
const version = (out ?? "").trim();
|
|
1700
|
+
if (!version) {
|
|
1701
|
+
throw new Error(`npm view ${packageName} version returned empty`);
|
|
1702
|
+
}
|
|
1703
|
+
return version;
|
|
1704
|
+
} catch (err) {
|
|
1705
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1706
|
+
throw new Error(`Failed to resolve latest version for ${packageName}: ${msg}`);
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
function getCachedPackageVersion(cacheDir) {
|
|
1710
|
+
const pkgPath = join(cacheDir, "package.json");
|
|
1711
|
+
if (!existsSync(pkgPath)) return void 0;
|
|
1712
|
+
try {
|
|
1713
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
1714
|
+
return typeof pkg.version === "string" ? pkg.version : void 0;
|
|
1715
|
+
} catch {
|
|
1716
|
+
return void 0;
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1638
1719
|
function packagePathSegments(name) {
|
|
1639
1720
|
const withoutScope = name.replace(/^@/, "");
|
|
1640
1721
|
return withoutScope.split("/").filter(Boolean);
|
|
@@ -1643,17 +1724,29 @@ function resolveCacheDir(cacheBase, packageName, version) {
|
|
|
1643
1724
|
const segments = packagePathSegments(packageName);
|
|
1644
1725
|
return join(cacheBase, ...segments, version);
|
|
1645
1726
|
}
|
|
1646
|
-
function getVersionFromTarball(tgzName) {
|
|
1647
|
-
const base = tgzName.replace(/\.tgz$/i, "");
|
|
1648
|
-
const match = base.match(/-(\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?)$/);
|
|
1649
|
-
return match ? match[1] : base;
|
|
1650
|
-
}
|
|
1651
1727
|
function ensurePackageInCache(packageName, version = "latest", options = {}) {
|
|
1652
1728
|
const cacheBase = options.cacheBase ?? DEFAULT_CACHE_BASE;
|
|
1729
|
+
let resolvedVersion;
|
|
1730
|
+
if (isLatestRequest(version)) {
|
|
1731
|
+
resolvedVersion = resolveLatestVersionFromRegistry(packageName);
|
|
1732
|
+
} else {
|
|
1733
|
+
resolvedVersion = version;
|
|
1734
|
+
}
|
|
1735
|
+
const cacheDir = resolveCacheDir(cacheBase, packageName, resolvedVersion);
|
|
1736
|
+
const packageJsonPath = join(cacheDir, "package.json");
|
|
1737
|
+
const nodeModulesPath = join(cacheDir, "node_modules");
|
|
1738
|
+
if (existsSync(packageJsonPath) && existsSync(nodeModulesPath)) {
|
|
1739
|
+
const cachedVersion = getCachedPackageVersion(cacheDir);
|
|
1740
|
+
if (cachedVersion === resolvedVersion) {
|
|
1741
|
+
options.afterInstall?.(cacheDir, packageName);
|
|
1742
|
+
return cacheDir;
|
|
1743
|
+
}
|
|
1744
|
+
rmSync(cacheDir, { recursive: true, force: true });
|
|
1745
|
+
}
|
|
1653
1746
|
const packDest = join(cacheBase, ".pack-tmp", packageName.replace(/@/g, "").replace(/\//g, "_"));
|
|
1654
1747
|
mkdirSync(packDest, { recursive: true });
|
|
1655
1748
|
try {
|
|
1656
|
-
execSync(`npm pack ${packageName}@${
|
|
1749
|
+
execSync(`npm pack ${packageName}@${resolvedVersion} --pack-destination "${packDest}"`, {
|
|
1657
1750
|
cwd: process.cwd(),
|
|
1658
1751
|
stdio: "pipe",
|
|
1659
1752
|
encoding: "utf-8"
|
|
@@ -1663,15 +1756,6 @@ function ensurePackageInCache(packageName, version = "latest", options = {}) {
|
|
|
1663
1756
|
if (!tgz) {
|
|
1664
1757
|
throw new Error(`npm pack did not produce a .tgz in ${packDest}`);
|
|
1665
1758
|
}
|
|
1666
|
-
const resolvedVersion = getVersionFromTarball(tgz);
|
|
1667
|
-
const cacheDir = resolveCacheDir(cacheBase, packageName, resolvedVersion);
|
|
1668
|
-
const packageJsonPath = join(cacheDir, "package.json");
|
|
1669
|
-
const nodeModulesPath = join(cacheDir, "node_modules");
|
|
1670
|
-
if (existsSync(packageJsonPath) && existsSync(nodeModulesPath)) {
|
|
1671
|
-
options.afterInstall?.(cacheDir, packageName);
|
|
1672
|
-
rmSync(packDest, { recursive: true, force: true });
|
|
1673
|
-
return cacheDir;
|
|
1674
|
-
}
|
|
1675
1759
|
const extractDir = join(packDest, "extract");
|
|
1676
1760
|
mkdirSync(extractDir, { recursive: true });
|
|
1677
1761
|
execSync(`tar -xzf "${join(packDest, tgz)}" -C "${extractDir}"`, {
|
|
@@ -1808,34 +1892,95 @@ function parseNpmDescriptor(entry) {
|
|
|
1808
1892
|
const version = rest.slice(at + 1).split("#")[0]?.trim() || "latest";
|
|
1809
1893
|
return { packageName, version };
|
|
1810
1894
|
}
|
|
1811
|
-
function
|
|
1895
|
+
function loadExtensionFromFileDescriptorSync(descriptor, configFilePath, stepLog) {
|
|
1896
|
+
const entryStr = descriptor.trim();
|
|
1897
|
+
const path = parseToolPath(entryStr);
|
|
1898
|
+
if (!path || path.protocol !== "file") return null;
|
|
1899
|
+
const localPath = isAbsolute(configFilePath) ? configFilePath : resolve(process.cwd(), configFilePath);
|
|
1900
|
+
const configDir = dirname(localPath);
|
|
1901
|
+
const pathPart = `${path.scope}/${path.packageWithVersion}`;
|
|
1902
|
+
const resolvedPath = resolve(configDir, pathPart);
|
|
1903
|
+
if (!existsSync(resolvedPath) || !statSync(resolvedPath).isDirectory()) return null;
|
|
1904
|
+
try {
|
|
1905
|
+
const entryPath = getPackageEntryPath(resolvedPath);
|
|
1906
|
+
const req = createRequire(join(resolvedPath, "package.json"));
|
|
1907
|
+
const mod = req(entryPath);
|
|
1908
|
+
const fn = getRegisterFn(mod);
|
|
1909
|
+
if (typeof fn === "function") {
|
|
1910
|
+
if (stepLog) stepLog(`Loaded local extension from ${resolvedPath}`);
|
|
1911
|
+
return { register: fn, descriptor: entryStr, resolvedVersion: "local" };
|
|
1912
|
+
}
|
|
1913
|
+
} catch {
|
|
1914
|
+
}
|
|
1915
|
+
return null;
|
|
1916
|
+
}
|
|
1917
|
+
function loadExtensionForDescriptorSync(descriptor, configFilePath, stepLog) {
|
|
1918
|
+
const entryStr = descriptor.trim();
|
|
1919
|
+
const parsed = parseNpmDescriptor(entryStr);
|
|
1920
|
+
if (!parsed) return null;
|
|
1812
1921
|
const localPath = isAbsolute(configFilePath) ? configFilePath : resolve(process.cwd(), configFilePath);
|
|
1813
|
-
if (!existsSync(localPath)) return null;
|
|
1814
|
-
const config = loadToolConfig(localPath);
|
|
1815
|
-
const tools = config.tools;
|
|
1816
|
-
if (!Array.isArray(tools) || tools.length === 0) return null;
|
|
1817
1922
|
const configDir = dirname(localPath);
|
|
1818
1923
|
const packageJsonPath = join(configDir, "package.json");
|
|
1819
|
-
|
|
1820
|
-
const configRequire = createRequire(packageJsonPath);
|
|
1821
|
-
if (
|
|
1822
|
-
for (const entry of tools) {
|
|
1823
|
-
const entryStr = String(entry).trim();
|
|
1824
|
-
const parsed = parseNpmDescriptor(entryStr);
|
|
1825
|
-
if (!parsed) continue;
|
|
1924
|
+
const useNodeModules = existsSync(packageJsonPath);
|
|
1925
|
+
const configRequire = useNodeModules ? createRequire(packageJsonPath) : null;
|
|
1926
|
+
if (configRequire) {
|
|
1826
1927
|
try {
|
|
1827
1928
|
const mod = configRequire(parsed.packageName);
|
|
1828
1929
|
const fn = getRegisterFn(mod);
|
|
1829
1930
|
if (typeof fn === "function") {
|
|
1830
|
-
const
|
|
1931
|
+
const installed = getInstalledPackageVersionFromRequire(parsed.packageName, configRequire);
|
|
1932
|
+
const requested = parsed.version === "latest" || !parsed.version?.trim() ? null : parsed.version;
|
|
1933
|
+
const resolvedVersion = installed ?? (requested === null ? resolveLatestVersionFromRegistry(parsed.packageName) : requested);
|
|
1934
|
+
if (requested === null || installed === requested) {
|
|
1935
|
+
if (stepLog) stepLog(`Loaded ${parsed.packageName}@${resolvedVersion} from node_modules`);
|
|
1936
|
+
return { register: fn, descriptor: entryStr, resolvedVersion };
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
} catch {
|
|
1940
|
+
}
|
|
1941
|
+
}
|
|
1942
|
+
const cacheBase = getCacheBaseFromToolConfig(localPath);
|
|
1943
|
+
const cacheOpts = cacheBase ? { cacheBase } : {};
|
|
1944
|
+
for (const opts of [cacheOpts, {}]) {
|
|
1945
|
+
try {
|
|
1946
|
+
const cacheDir = ensurePackageInCache(parsed.packageName, parsed.version, opts);
|
|
1947
|
+
if (stepLog) stepLog(`Loaded ${parsed.packageName} from cache: ${cacheDir}`);
|
|
1948
|
+
const entryPath = getPackageEntryPath(cacheDir);
|
|
1949
|
+
const req = createRequire(join(cacheDir, "package.json"));
|
|
1950
|
+
const mod = req(entryPath);
|
|
1951
|
+
const fn = getRegisterFn(mod);
|
|
1952
|
+
if (typeof fn === "function") {
|
|
1953
|
+
const resolvedVersion = basename(cacheDir);
|
|
1831
1954
|
return { register: fn, descriptor: entryStr, resolvedVersion };
|
|
1832
1955
|
}
|
|
1956
|
+
break;
|
|
1833
1957
|
} catch {
|
|
1834
|
-
continue;
|
|
1958
|
+
if (Object.keys(opts).length > 0) continue;
|
|
1959
|
+
break;
|
|
1835
1960
|
}
|
|
1836
1961
|
}
|
|
1837
1962
|
return null;
|
|
1838
1963
|
}
|
|
1964
|
+
function loadAllExtensionsFromToolYamlSync(configFilePath, stepLog) {
|
|
1965
|
+
const localPath = isAbsolute(configFilePath) ? configFilePath : resolve(process.cwd(), configFilePath);
|
|
1966
|
+
if (!existsSync(localPath)) return [];
|
|
1967
|
+
const config = loadToolConfig(localPath);
|
|
1968
|
+
const tools = config.tools;
|
|
1969
|
+
if (!Array.isArray(tools) || tools.length === 0) return [];
|
|
1970
|
+
if (stepLog) stepLog("Loading extensions from tool.yaml (npm + file)");
|
|
1971
|
+
const loaded = [];
|
|
1972
|
+
for (const entry of tools) {
|
|
1973
|
+
const entryStr = String(entry).trim();
|
|
1974
|
+
if (entryStr.startsWith("npm:")) {
|
|
1975
|
+
const result = loadExtensionForDescriptorSync(entryStr, configFilePath, stepLog);
|
|
1976
|
+
if (result) loaded.push(result);
|
|
1977
|
+
} else if (entryStr.startsWith("file:")) {
|
|
1978
|
+
const result = loadExtensionFromFileDescriptorSync(entryStr, configFilePath, stepLog);
|
|
1979
|
+
if (result) loaded.push(result);
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1982
|
+
return loaded;
|
|
1983
|
+
}
|
|
1839
1984
|
function getInstalledPackageVersionFromRequire(packageName, req) {
|
|
1840
1985
|
try {
|
|
1841
1986
|
const pkgJsonPath = req.resolve(`${packageName}/package.json`);
|
|
@@ -1846,114 +1991,84 @@ function getInstalledPackageVersionFromRequire(packageName, req) {
|
|
|
1846
1991
|
return null;
|
|
1847
1992
|
}
|
|
1848
1993
|
}
|
|
1849
|
-
function
|
|
1994
|
+
async function loadExtensionForDescriptorAsync(descriptor, configFilePath, stepLog) {
|
|
1995
|
+
const syncResult = loadExtensionForDescriptorSync(descriptor, configFilePath, stepLog);
|
|
1996
|
+
if (syncResult) return syncResult;
|
|
1997
|
+
const entryStr = descriptor.trim();
|
|
1998
|
+
const parsed = parseNpmDescriptor(entryStr);
|
|
1999
|
+
if (!parsed) return null;
|
|
1850
2000
|
const localPath = isAbsolute(configFilePath) ? configFilePath : resolve(process.cwd(), configFilePath);
|
|
1851
|
-
if (!existsSync(localPath)) return null;
|
|
1852
|
-
const config = loadToolConfig(localPath);
|
|
1853
|
-
const tools = config.tools;
|
|
1854
|
-
if (!Array.isArray(tools)) return null;
|
|
1855
2001
|
const cacheBase = getCacheBaseFromToolConfig(localPath);
|
|
1856
2002
|
const cacheOpts = cacheBase ? { cacheBase } : {};
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
if (stepLog) stepLog(`Using cache: ${cacheDir}`);
|
|
1867
|
-
const entryPath = getPackageEntryPath(cacheDir);
|
|
1868
|
-
const req = createRequire(join(cacheDir, "package.json"));
|
|
1869
|
-
const mod = req(entryPath);
|
|
1870
|
-
const fn = getRegisterFn(mod);
|
|
1871
|
-
if (typeof fn === "function") {
|
|
1872
|
-
const resolvedVersion = basename(cacheDir);
|
|
1873
|
-
return { register: fn, descriptor: entryStr, resolvedVersion };
|
|
1874
|
-
}
|
|
1875
|
-
break;
|
|
1876
|
-
} catch {
|
|
1877
|
-
if (Object.keys(opts).length > 0) continue;
|
|
1878
|
-
break;
|
|
2003
|
+
for (const opts of [cacheOpts, {}]) {
|
|
2004
|
+
try {
|
|
2005
|
+
const cacheDir = ensurePackageInCache(parsed.packageName, parsed.version, opts);
|
|
2006
|
+
if (stepLog) stepLog(`Loaded ${parsed.packageName} from cache (async): ${cacheDir}`);
|
|
2007
|
+
const mod = await importFromCache(cacheDir);
|
|
2008
|
+
const fn = getRegisterFn(mod);
|
|
2009
|
+
if (typeof fn === "function") {
|
|
2010
|
+
const resolvedVersion = basename(cacheDir);
|
|
2011
|
+
return { register: fn, descriptor: entryStr, resolvedVersion };
|
|
1879
2012
|
}
|
|
2013
|
+
break;
|
|
2014
|
+
} catch {
|
|
2015
|
+
if (Object.keys(opts).length > 0) continue;
|
|
2016
|
+
break;
|
|
1880
2017
|
}
|
|
1881
2018
|
}
|
|
1882
2019
|
return null;
|
|
1883
2020
|
}
|
|
1884
|
-
async function
|
|
2021
|
+
async function loadAllExtensionsFromToolYamlAsync(configFilePath, stepLog) {
|
|
1885
2022
|
const localPath = isAbsolute(configFilePath) ? configFilePath : resolve(process.cwd(), configFilePath);
|
|
1886
|
-
if (!existsSync(localPath)) return
|
|
2023
|
+
if (!existsSync(localPath)) return [];
|
|
1887
2024
|
const config = loadToolConfig(localPath);
|
|
1888
2025
|
const tools = config.tools;
|
|
1889
|
-
if (!Array.isArray(tools)) return
|
|
1890
|
-
|
|
1891
|
-
const
|
|
1892
|
-
if (stepLog) stepLog("Loading extension from tool.yaml cache (async)");
|
|
2026
|
+
if (!Array.isArray(tools) || tools.length === 0) return [];
|
|
2027
|
+
if (stepLog) stepLog("Loading extensions from tool.yaml (async)");
|
|
2028
|
+
const loaded = [];
|
|
1893
2029
|
for (const entry of tools) {
|
|
1894
2030
|
const entryStr = String(entry).trim();
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
if (stepLog) stepLog(`Using cache: ${cacheDir}`);
|
|
1902
|
-
const mod = await importFromCache(cacheDir);
|
|
1903
|
-
const fn = getRegisterFn(mod);
|
|
1904
|
-
if (typeof fn === "function") {
|
|
1905
|
-
const resolvedVersion = basename(cacheDir);
|
|
1906
|
-
return { register: fn, descriptor: entryStr, resolvedVersion };
|
|
1907
|
-
}
|
|
1908
|
-
break;
|
|
1909
|
-
} catch {
|
|
1910
|
-
if (Object.keys(opts).length > 0) continue;
|
|
1911
|
-
break;
|
|
1912
|
-
}
|
|
2031
|
+
if (entryStr.startsWith("npm:")) {
|
|
2032
|
+
const result = await loadExtensionForDescriptorAsync(entryStr, configFilePath, stepLog);
|
|
2033
|
+
if (result) loaded.push(result);
|
|
2034
|
+
} else if (entryStr.startsWith("file:")) {
|
|
2035
|
+
const result = loadExtensionFromFileDescriptorSync(entryStr, configFilePath, stepLog);
|
|
2036
|
+
if (result) loaded.push(result);
|
|
1913
2037
|
}
|
|
1914
2038
|
}
|
|
1915
|
-
return
|
|
2039
|
+
return loaded;
|
|
1916
2040
|
}
|
|
1917
2041
|
function createRuntimeFromConfigSync(options = {}) {
|
|
1918
2042
|
const registry = new ToolRegistry();
|
|
1919
2043
|
const stepLog = options.stepLog;
|
|
1920
2044
|
if (options.coreTools !== void 0) {
|
|
2045
|
+
if (options.configFilePath) {
|
|
2046
|
+
const all = loadAllExtensionsFromToolYamlSync(options.configFilePath, stepLog);
|
|
2047
|
+
if (all.length > 0) {
|
|
2048
|
+
if (stepLog) stepLog(`Registered ${all.length} extension(s) from tool.yaml`);
|
|
2049
|
+
const runtime3 = new PTCRuntime({ registry });
|
|
2050
|
+
for (const ext of all) {
|
|
2051
|
+
const prefix = ext.descriptor.startsWith("file:") ? fileDescriptorToRegistryPrefix(ext.descriptor) : npmDescriptorToRegistryPrefix(ext.descriptor, ext.resolvedVersion);
|
|
2052
|
+
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
2053
|
+
const adapter = ext.register(reg, options.coreTools);
|
|
2054
|
+
runtime3.registerAdapter(adapter);
|
|
2055
|
+
}
|
|
2056
|
+
return { runtime: runtime3, registry };
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
1921
2059
|
if (stepLog) stepLog("Trying extension from node_modules");
|
|
1922
|
-
|
|
2060
|
+
const extensionNode = loadExtensionFromNodeModules();
|
|
1923
2061
|
if (extensionNode) {
|
|
1924
2062
|
if (stepLog) stepLog("Registered extension from node_modules");
|
|
1925
2063
|
const descriptor = `npm:${extensionNode.packageName}`;
|
|
1926
|
-
const resolvedVersion = getInstalledPackageVersion(extensionNode.packageName);
|
|
1927
|
-
const prefix = npmDescriptorToRegistryPrefix(descriptor, resolvedVersion
|
|
2064
|
+
const resolvedVersion = getInstalledPackageVersion(extensionNode.packageName) ?? resolveLatestVersionFromRegistry(extensionNode.packageName);
|
|
2065
|
+
const prefix = npmDescriptorToRegistryPrefix(descriptor, resolvedVersion);
|
|
1928
2066
|
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
1929
2067
|
const coreAdapter = extensionNode.register(reg, options.coreTools);
|
|
1930
2068
|
const runtime3 = new PTCRuntime({ registry });
|
|
1931
2069
|
runtime3.registerAdapter(coreAdapter);
|
|
1932
2070
|
return { runtime: runtime3, registry };
|
|
1933
2071
|
}
|
|
1934
|
-
if (options.configFilePath) {
|
|
1935
|
-
const extensionFromNodeModules = loadExtensionFromToolYamlNodeModules(options.configFilePath, stepLog);
|
|
1936
|
-
if (extensionFromNodeModules) {
|
|
1937
|
-
if (stepLog) stepLog("Registered extension from tool.yaml list (node_modules)");
|
|
1938
|
-
const prefix = npmDescriptorToRegistryPrefix(extensionFromNodeModules.descriptor, extensionFromNodeModules.resolvedVersion);
|
|
1939
|
-
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
1940
|
-
const coreAdapter = extensionFromNodeModules.register(reg, options.coreTools);
|
|
1941
|
-
const runtime3 = new PTCRuntime({ registry });
|
|
1942
|
-
runtime3.registerAdapter(coreAdapter);
|
|
1943
|
-
return { runtime: runtime3, registry };
|
|
1944
|
-
}
|
|
1945
|
-
if (stepLog) stepLog("No extension in node_modules, loading from tool.yaml cache");
|
|
1946
|
-
const extensionCache = loadExtensionFromToolYamlCache(options.configFilePath, stepLog);
|
|
1947
|
-
if (extensionCache) {
|
|
1948
|
-
if (stepLog) stepLog("Registered extension from cache");
|
|
1949
|
-
const prefix = npmDescriptorToRegistryPrefix(extensionCache.descriptor, extensionCache.resolvedVersion);
|
|
1950
|
-
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
1951
|
-
const coreAdapter = extensionCache.register(reg, options.coreTools);
|
|
1952
|
-
const runtime3 = new PTCRuntime({ registry });
|
|
1953
|
-
runtime3.registerAdapter(coreAdapter);
|
|
1954
|
-
return { runtime: runtime3, registry };
|
|
1955
|
-
}
|
|
1956
|
-
}
|
|
1957
2072
|
const runtime2 = new PTCRuntime({ registry });
|
|
1958
2073
|
return { runtime: runtime2, registry };
|
|
1959
2074
|
}
|
|
@@ -1962,27 +2077,17 @@ function createRuntimeFromConfigSync(options = {}) {
|
|
|
1962
2077
|
}
|
|
1963
2078
|
async function createRuntimeFromConfig(options = {}) {
|
|
1964
2079
|
if (options.coreTools !== void 0 && options.configFilePath) {
|
|
1965
|
-
const
|
|
1966
|
-
if (
|
|
1967
|
-
if (options.stepLog) options.stepLog(
|
|
2080
|
+
const all = await loadAllExtensionsFromToolYamlAsync(options.configFilePath, options.stepLog);
|
|
2081
|
+
if (all.length > 0) {
|
|
2082
|
+
if (options.stepLog) options.stepLog(`Registered ${all.length} extension(s) from tool.yaml`);
|
|
1968
2083
|
const registry = new ToolRegistry();
|
|
1969
|
-
const prefix = npmDescriptorToRegistryPrefix(fromNodeModules.descriptor, fromNodeModules.resolvedVersion);
|
|
1970
|
-
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
1971
|
-
const coreAdapter = fromNodeModules.register(reg, options.coreTools);
|
|
1972
2084
|
const runtime = new PTCRuntime({ registry });
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
if (options.stepLog) options.stepLog("Registered extension from cache");
|
|
1980
|
-
const registry = new ToolRegistry();
|
|
1981
|
-
const prefix = npmDescriptorToRegistryPrefix(fromCache.descriptor, fromCache.resolvedVersion);
|
|
1982
|
-
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
1983
|
-
const coreAdapter = fromCache.register(reg, options.coreTools);
|
|
1984
|
-
const runtime = new PTCRuntime({ registry });
|
|
1985
|
-
runtime.registerAdapter(coreAdapter);
|
|
2085
|
+
for (const ext of all) {
|
|
2086
|
+
const prefix = ext.descriptor.startsWith("file:") ? fileDescriptorToRegistryPrefix(ext.descriptor) : npmDescriptorToRegistryPrefix(ext.descriptor, ext.resolvedVersion);
|
|
2087
|
+
const reg = prefix ? createPrefixingRegistry(registry, prefix) : registry;
|
|
2088
|
+
const adapter = ext.register(reg, options.coreTools);
|
|
2089
|
+
runtime.registerAdapter(adapter);
|
|
2090
|
+
}
|
|
1986
2091
|
return { runtime, registry };
|
|
1987
2092
|
}
|
|
1988
2093
|
}
|
|
@@ -1996,6 +2101,6 @@ var MCP_KIND = "mcp";
|
|
|
1996
2101
|
var LANGCHAIN_KIND = "langchain";
|
|
1997
2102
|
var LANGCHAIN_DIR_NAME = "langchain";
|
|
1998
2103
|
|
|
1999
|
-
export { BudgetManager, EventLog, LANGCHAIN_DIR_NAME, LANGCHAIN_KIND, MCP_KIND, Metrics, PTCRuntime, PolicyDeniedError, PolicyEngine, SchemaValidationError, SchemaValidator, Tracing, buildEvidence, createLogger, createRuntimeFromConfig, createRuntimeFromConfigSync, ensurePackageInCache, expandToolDescriptorsToRegistryNames, findAndLoadToolConfig, getDisplayScope, getPackageEntryPath, importFromCache, isBarePackageDescriptor, isNpmToolDescriptor, loadToolConfig, normalizeToolList, npmDescriptorToRegistryPrefix, parseNpmToolDescriptor, resolveNpmToolDescriptor, resolveSandboxedPath, resolveToolDescriptor, sanitizeForLog, summarizeForLog };
|
|
2000
|
-
//# sourceMappingURL=chunk-
|
|
2001
|
-
//# sourceMappingURL=chunk-
|
|
2104
|
+
export { BudgetManager, EventLog, LANGCHAIN_DIR_NAME, LANGCHAIN_KIND, MCP_KIND, Metrics, PTCRuntime, PolicyDeniedError, PolicyEngine, SchemaValidationError, SchemaValidator, Tracing, buildEvidence, createLogger, createRuntimeFromConfig, createRuntimeFromConfigSync, ensurePackageInCache, expandToolDescriptorsToRegistryNames, fileDescriptorToPackagePrefix, findAndLoadToolConfig, getDisplayScope, getPackageEntryPath, importFromCache, isBarePackageDescriptor, isNpmToolDescriptor, loadToolConfig, normalizeToolList, npmDescriptorToPackagePrefixWithVersion, npmDescriptorToRegistryPrefix, parseNpmToolDescriptor, resolveLatestVersionFromRegistry, resolveNpmToolDescriptor, resolveSandboxedPath, resolveToolDescriptor, sanitizeForLog, summarizeForLog };
|
|
2105
|
+
//# sourceMappingURL=chunk-PSVSVTHY.js.map
|
|
2106
|
+
//# sourceMappingURL=chunk-PSVSVTHY.js.map
|