@pulsemcp/air-sdk 0.0.23 → 0.0.24
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/update.d.ts +5 -3
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +114 -13
- package/dist/update.js.map +1 -1
- package/package.json +2 -2
package/dist/update.d.ts
CHANGED
|
@@ -10,10 +10,12 @@ export interface UpdateProviderCachesResult {
|
|
|
10
10
|
/**
|
|
11
11
|
* Refresh all provider caches.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Discovers providers in two ways:
|
|
14
|
+
* 1. From air.json extensions (if air.json exists)
|
|
15
|
+
* 2. By scanning ~/.air/cache/ for known provider cache directories
|
|
15
16
|
*
|
|
16
|
-
*
|
|
17
|
+
* This ensures cached data is refreshed even when the provider isn't
|
|
18
|
+
* explicitly listed in air.json's extensions array.
|
|
17
19
|
*/
|
|
18
20
|
export declare function updateProviderCaches(options?: UpdateProviderCachesOptions): Promise<UpdateProviderCachesResult>;
|
|
19
21
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,WAAW,2BAA2B;IAC1C,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;CAC/C;AAqED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,0BAA0B,CAAC,CA6CrC"}
|
package/dist/update.js
CHANGED
|
@@ -1,28 +1,129 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createRequire } from "module";
|
|
2
|
+
import { existsSync, readdirSync } from "fs";
|
|
3
|
+
import { dirname, join, resolve } from "path";
|
|
4
|
+
import { pathToFileURL } from "url";
|
|
5
|
+
import { loadAirConfig, getAirJsonPath, getDefaultAirJsonPath, } from "@pulsemcp/air-core";
|
|
3
6
|
import { loadExtensions } from "./extension-loader.js";
|
|
7
|
+
import { resolveEsmEntry } from "./esm-resolve.js";
|
|
8
|
+
/**
|
|
9
|
+
* Known provider packages, keyed by their cache directory name (scheme).
|
|
10
|
+
* Used to auto-discover providers when air.json doesn't list them.
|
|
11
|
+
*/
|
|
12
|
+
const KNOWN_PROVIDERS = {
|
|
13
|
+
github: "@pulsemcp/air-provider-github",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Get the AIR cache root directory (~/.air/cache).
|
|
17
|
+
* Derived from getDefaultAirJsonPath() to stay in sync with core's
|
|
18
|
+
* notion of the AIR home directory.
|
|
19
|
+
*/
|
|
20
|
+
function getCacheRoot() {
|
|
21
|
+
return resolve(dirname(getDefaultAirJsonPath()), "cache");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Scan ~/.air/cache/ for subdirectories, each representing a provider scheme
|
|
25
|
+
* that has cached data on disk.
|
|
26
|
+
*/
|
|
27
|
+
function discoverCachedSchemes() {
|
|
28
|
+
const cacheRoot = getCacheRoot();
|
|
29
|
+
if (!existsSync(cacheRoot))
|
|
30
|
+
return [];
|
|
31
|
+
try {
|
|
32
|
+
return readdirSync(cacheRoot, { withFileTypes: true })
|
|
33
|
+
.filter((d) => d.isDirectory())
|
|
34
|
+
.map((d) => d.name);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Try to load a provider extension by package name, searching the given
|
|
42
|
+
* directories for the installed package. Handles CJS, ESM-only, and
|
|
43
|
+
* standard Node resolution.
|
|
44
|
+
*/
|
|
45
|
+
async function tryLoadProvider(packageName, searchDirs) {
|
|
46
|
+
for (const dir of searchDirs) {
|
|
47
|
+
try {
|
|
48
|
+
const req = createRequire(join(dir, "__placeholder.js"));
|
|
49
|
+
const resolved = req.resolve(packageName);
|
|
50
|
+
const mod = await import(pathToFileURL(resolved).href);
|
|
51
|
+
return mod.default?.provider ?? null;
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const code = err?.code;
|
|
55
|
+
if (code === "ERR_PACKAGE_PATH_NOT_EXPORTED") {
|
|
56
|
+
const esmEntry = resolveEsmEntry(packageName, dir);
|
|
57
|
+
if (esmEntry) {
|
|
58
|
+
try {
|
|
59
|
+
const mod = await import(pathToFileURL(esmEntry).href);
|
|
60
|
+
return mod.default?.provider ?? null;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Fall through to next directory
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Not found in this directory, try next
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Fall back to standard Node resolution
|
|
71
|
+
try {
|
|
72
|
+
const mod = await import(packageName);
|
|
73
|
+
return mod.default?.provider ?? null;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
4
79
|
/**
|
|
5
80
|
* Refresh all provider caches.
|
|
6
81
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
82
|
+
* Discovers providers in two ways:
|
|
83
|
+
* 1. From air.json extensions (if air.json exists)
|
|
84
|
+
* 2. By scanning ~/.air/cache/ for known provider cache directories
|
|
9
85
|
*
|
|
10
|
-
*
|
|
86
|
+
* This ensures cached data is refreshed even when the provider isn't
|
|
87
|
+
* explicitly listed in air.json's extensions array.
|
|
11
88
|
*/
|
|
12
89
|
export async function updateProviderCaches(options) {
|
|
13
90
|
const airJsonPath = options?.config ?? getAirJsonPath();
|
|
14
|
-
|
|
15
|
-
|
|
91
|
+
const providers = new Map();
|
|
92
|
+
let airJsonDir = null;
|
|
93
|
+
// Load providers from air.json extensions if available
|
|
94
|
+
if (airJsonPath) {
|
|
95
|
+
airJsonDir = dirname(resolve(airJsonPath));
|
|
96
|
+
const airConfig = loadAirConfig(airJsonPath);
|
|
97
|
+
const loaded = await loadExtensions(airConfig.extensions || [], airJsonDir);
|
|
98
|
+
for (const ext of loaded.providers) {
|
|
99
|
+
const provider = ext.provider;
|
|
100
|
+
providers.set(provider.scheme, provider);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Discover additional providers from cache directory
|
|
104
|
+
const cachedSchemes = discoverCachedSchemes();
|
|
105
|
+
for (const scheme of cachedSchemes) {
|
|
106
|
+
if (providers.has(scheme))
|
|
107
|
+
continue;
|
|
108
|
+
const packageName = KNOWN_PROVIDERS[scheme];
|
|
109
|
+
if (!packageName)
|
|
110
|
+
continue;
|
|
111
|
+
const searchDirs = [];
|
|
112
|
+
if (airJsonDir)
|
|
113
|
+
searchDirs.push(airJsonDir);
|
|
114
|
+
const defaultAirDir = dirname(getDefaultAirJsonPath());
|
|
115
|
+
if (defaultAirDir !== airJsonDir)
|
|
116
|
+
searchDirs.push(defaultAirDir);
|
|
117
|
+
const provider = await tryLoadProvider(packageName, searchDirs);
|
|
118
|
+
if (provider?.refreshCache) {
|
|
119
|
+
providers.set(scheme, provider);
|
|
120
|
+
}
|
|
16
121
|
}
|
|
17
|
-
const airJsonDir = dirname(resolve(airJsonPath));
|
|
18
|
-
const airConfig = loadAirConfig(airJsonPath);
|
|
19
|
-
const loaded = await loadExtensions(airConfig.extensions || [], airJsonDir);
|
|
20
122
|
const results = {};
|
|
21
|
-
for (const
|
|
22
|
-
const provider = ext.provider;
|
|
123
|
+
for (const [scheme, provider] of providers) {
|
|
23
124
|
if (!provider.refreshCache)
|
|
24
125
|
continue;
|
|
25
|
-
results[
|
|
126
|
+
results[scheme] = await provider.refreshCache();
|
|
26
127
|
}
|
|
27
128
|
return { results };
|
|
28
129
|
}
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pulsemcp/air-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"lint": "tsc --noEmit"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@pulsemcp/air-core": "0.0.
|
|
32
|
+
"@pulsemcp/air-core": "0.0.24"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.10.0",
|