@pulsemcp/air-sdk 0.0.12 → 0.0.14
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/adapter-registry.d.ts +17 -2
- package/dist/adapter-registry.d.ts.map +1 -1
- package/dist/adapter-registry.js +65 -21
- package/dist/adapter-registry.js.map +1 -1
- package/dist/esm-resolve.d.ts +14 -0
- package/dist/esm-resolve.d.ts.map +1 -0
- package/dist/esm-resolve.js +44 -0
- package/dist/esm-resolve.js.map +1 -0
- package/dist/extension-loader.d.ts.map +1 -1
- package/dist/extension-loader.js +39 -2
- package/dist/extension-loader.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init-from-repo.d.ts +8 -0
- package/dist/init-from-repo.d.ts.map +1 -1
- package/dist/init-from-repo.js +78 -2
- package/dist/init-from-repo.js.map +1 -1
- package/dist/prepare.d.ts +3 -3
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +16 -15
- package/dist/prepare.js.map +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +29 -7
- package/dist/start.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import type { AgentAdapter } from "@pulsemcp/air-core";
|
|
2
|
+
export interface FindAdapterOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Additional directories to search for adapter packages.
|
|
5
|
+
* Typically the directory containing air.json (e.g. ~/.air/) so that
|
|
6
|
+
* packages installed via `air install` are discoverable.
|
|
7
|
+
*/
|
|
8
|
+
searchDirs?: string[];
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
11
|
* Find an adapter by agent name.
|
|
4
12
|
* Returns null if the adapter package isn't installed.
|
|
13
|
+
*
|
|
14
|
+
* Pass `searchDirs` to also look in directories outside the normal
|
|
15
|
+
* Node resolution chain (e.g. the ~/.air/ directory where `air install`
|
|
16
|
+
* places packages).
|
|
5
17
|
*/
|
|
6
|
-
export declare function findAdapter(name: string): Promise<AgentAdapter | null>;
|
|
18
|
+
export declare function findAdapter(name: string, options?: FindAdapterOptions): Promise<AgentAdapter | null>;
|
|
7
19
|
/**
|
|
8
20
|
* List all available adapter names (installed packages only).
|
|
21
|
+
*
|
|
22
|
+
* Pass `searchDirs` to also look in directories outside the normal
|
|
23
|
+
* Node resolution chain.
|
|
9
24
|
*/
|
|
10
|
-
export declare function listAvailableAdapters(): Promise<string[]>;
|
|
25
|
+
export declare function listAvailableAdapters(options?: FindAdapterOptions): Promise<string[]>;
|
|
11
26
|
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAWrE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAkDD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAiB9B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB"}
|
package/dist/adapter-registry.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { createRequire } from "module";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { pathToFileURL } from "url";
|
|
4
|
+
import { resolveEsmEntry } from "./esm-resolve.js";
|
|
1
5
|
/**
|
|
2
6
|
* Known adapter packages. The SDK tries to dynamically import each one.
|
|
3
7
|
* If the package is installed, its adapter is available. If not, it's skipped.
|
|
@@ -6,46 +10,86 @@ const KNOWN_ADAPTERS = [
|
|
|
6
10
|
{ name: "claude", packageName: "@pulsemcp/air-adapter-claude" },
|
|
7
11
|
];
|
|
8
12
|
/**
|
|
9
|
-
*
|
|
10
|
-
* Returns null if the
|
|
13
|
+
* Try to import a package by name, optionally searching additional directories.
|
|
14
|
+
* Returns the default export or null if the package isn't found.
|
|
15
|
+
*
|
|
16
|
+
* Uses createRequire for CJS packages and falls back to direct ESM entry
|
|
17
|
+
* resolution for packages that only define `exports.import`.
|
|
11
18
|
*/
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
async function tryImportPackage(packageName, searchDirs) {
|
|
20
|
+
// Try each search directory first (e.g. ~/.air/node_modules/)
|
|
21
|
+
if (searchDirs) {
|
|
22
|
+
for (const dir of searchDirs) {
|
|
16
23
|
try {
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
|
|
24
|
+
const req = createRequire(join(dir, "__placeholder.js"));
|
|
25
|
+
const resolved = req.resolve(packageName);
|
|
26
|
+
const mod = await import(pathToFileURL(resolved).href);
|
|
27
|
+
return mod.default ?? null;
|
|
20
28
|
}
|
|
21
|
-
catch {
|
|
22
|
-
|
|
29
|
+
catch (err) {
|
|
30
|
+
// For ESM-only packages, CJS resolution fails with
|
|
31
|
+
// ERR_PACKAGE_PATH_NOT_EXPORTED. Try resolving the ESM entry directly.
|
|
32
|
+
const code = err?.code;
|
|
33
|
+
if (code === "ERR_PACKAGE_PATH_NOT_EXPORTED") {
|
|
34
|
+
const esmEntry = resolveEsmEntry(packageName, dir);
|
|
35
|
+
if (esmEntry) {
|
|
36
|
+
try {
|
|
37
|
+
const mod = await import(pathToFileURL(esmEntry).href);
|
|
38
|
+
return mod.default ?? null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Fall through to next directory or SDK-local
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Not found in this directory, try next
|
|
23
46
|
}
|
|
24
47
|
}
|
|
25
48
|
}
|
|
26
|
-
//
|
|
49
|
+
// Fall back to SDK-local resolution
|
|
27
50
|
try {
|
|
28
|
-
const mod = await import(
|
|
29
|
-
|
|
30
|
-
return ext?.adapter ?? null;
|
|
51
|
+
const mod = await import(packageName);
|
|
52
|
+
return mod.default ?? null;
|
|
31
53
|
}
|
|
32
54
|
catch {
|
|
33
55
|
return null;
|
|
34
56
|
}
|
|
35
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Find an adapter by agent name.
|
|
60
|
+
* Returns null if the adapter package isn't installed.
|
|
61
|
+
*
|
|
62
|
+
* Pass `searchDirs` to also look in directories outside the normal
|
|
63
|
+
* Node resolution chain (e.g. the ~/.air/ directory where `air install`
|
|
64
|
+
* places packages).
|
|
65
|
+
*/
|
|
66
|
+
export async function findAdapter(name, options) {
|
|
67
|
+
const { searchDirs } = options ?? {};
|
|
68
|
+
// Check known adapters first
|
|
69
|
+
for (const known of KNOWN_ADAPTERS) {
|
|
70
|
+
if (known.name === name) {
|
|
71
|
+
const ext = await tryImportPackage(known.packageName, searchDirs);
|
|
72
|
+
return ext?.adapter ?? null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Try convention-based package name: @pulsemcp/air-adapter-{name}
|
|
76
|
+
const ext = await tryImportPackage(`@pulsemcp/air-adapter-${name}`, searchDirs);
|
|
77
|
+
return ext?.adapter ?? null;
|
|
78
|
+
}
|
|
36
79
|
/**
|
|
37
80
|
* List all available adapter names (installed packages only).
|
|
81
|
+
*
|
|
82
|
+
* Pass `searchDirs` to also look in directories outside the normal
|
|
83
|
+
* Node resolution chain.
|
|
38
84
|
*/
|
|
39
|
-
export async function listAvailableAdapters() {
|
|
85
|
+
export async function listAvailableAdapters(options) {
|
|
86
|
+
const { searchDirs } = options ?? {};
|
|
40
87
|
const available = [];
|
|
41
88
|
for (const known of KNOWN_ADAPTERS) {
|
|
42
|
-
|
|
43
|
-
|
|
89
|
+
const ext = await tryImportPackage(known.packageName, searchDirs);
|
|
90
|
+
if (ext) {
|
|
44
91
|
available.push(known.name);
|
|
45
92
|
}
|
|
46
|
-
catch {
|
|
47
|
-
// Not installed
|
|
48
|
-
}
|
|
49
93
|
}
|
|
50
94
|
return available;
|
|
51
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the ESM entry point for a package installed in `dir/node_modules/`.
|
|
3
|
+
*
|
|
4
|
+
* Reads the package's `package.json` and inspects the `exports` and `module`
|
|
5
|
+
* fields to find a usable ESM entry point. Handles:
|
|
6
|
+
* - `exports` as a bare string
|
|
7
|
+
* - `exports["."].import` as a string or `{ default: "..." }` object
|
|
8
|
+
* - `exports.import` as a string or `{ default: "..." }` object
|
|
9
|
+
* - `module` field fallback
|
|
10
|
+
*
|
|
11
|
+
* @returns Absolute path to the ESM entry file, or `null` if not resolvable.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveEsmEntry(packageName: string, dir: string): string | null;
|
|
14
|
+
//# sourceMappingURL=esm-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-resolve.d.ts","sourceRoot":"","sources":["../src/esm-resolve.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CA6Bf"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the ESM entry point for a package installed in `dir/node_modules/`.
|
|
5
|
+
*
|
|
6
|
+
* Reads the package's `package.json` and inspects the `exports` and `module`
|
|
7
|
+
* fields to find a usable ESM entry point. Handles:
|
|
8
|
+
* - `exports` as a bare string
|
|
9
|
+
* - `exports["."].import` as a string or `{ default: "..." }` object
|
|
10
|
+
* - `exports.import` as a string or `{ default: "..." }` object
|
|
11
|
+
* - `module` field fallback
|
|
12
|
+
*
|
|
13
|
+
* @returns Absolute path to the ESM entry file, or `null` if not resolvable.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveEsmEntry(packageName, dir) {
|
|
16
|
+
try {
|
|
17
|
+
const packageDir = join(dir, "node_modules", packageName);
|
|
18
|
+
const pkgJson = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf-8"));
|
|
19
|
+
const exports = pkgJson.exports;
|
|
20
|
+
let entry;
|
|
21
|
+
if (typeof exports === "string") {
|
|
22
|
+
entry = exports;
|
|
23
|
+
}
|
|
24
|
+
else if (exports?.["."]?.import) {
|
|
25
|
+
const imp = exports["."].import;
|
|
26
|
+
entry = typeof imp === "string" ? imp : imp?.default;
|
|
27
|
+
}
|
|
28
|
+
else if (exports?.import) {
|
|
29
|
+
const imp = exports.import;
|
|
30
|
+
entry = typeof imp === "string" ? imp : imp?.default;
|
|
31
|
+
}
|
|
32
|
+
else if (pkgJson.module) {
|
|
33
|
+
entry = pkgJson.module;
|
|
34
|
+
}
|
|
35
|
+
if (entry) {
|
|
36
|
+
return resolve(packageDir, entry);
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=esm-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-resolve.js","sourceRoot":"","sources":["../src/esm-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACxD,CAAC;QAEF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,KAAyB,CAAC;QAE9B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAChC,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-loader.d.ts","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-loader.d.ts","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAGzE,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,yCAAyC;IACzC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,iEAAiE;IACjE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,iDAAiD;IACjD,GAAG,EAAE,YAAY,EAAE,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B"}
|
package/dist/extension-loader.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRequire } from "module";
|
|
2
|
+
import { join, resolve } from "path";
|
|
2
3
|
import { pathToFileURL } from "url";
|
|
4
|
+
import { resolveEsmEntry } from "./esm-resolve.js";
|
|
3
5
|
/**
|
|
4
6
|
* Load extensions from the `extensions` array in air.json.
|
|
5
7
|
*
|
|
@@ -40,7 +42,42 @@ async function loadSingleExtension(specifier, airJsonDir) {
|
|
|
40
42
|
mod = await import(fileUrl);
|
|
41
43
|
}
|
|
42
44
|
else {
|
|
43
|
-
|
|
45
|
+
// Try resolving npm packages from the project directory (airJsonDir)
|
|
46
|
+
// first, then fall back to the SDK's own resolution. When the CLI is
|
|
47
|
+
// installed globally, `air install` puts packages under
|
|
48
|
+
// <airJsonDir>/node_modules/ which Node's default resolution from the
|
|
49
|
+
// SDK bundle would never find. The fallback covers the local
|
|
50
|
+
// development / workspace case where packages live in the SDK's own
|
|
51
|
+
// node_modules tree.
|
|
52
|
+
try {
|
|
53
|
+
const projectRequire = createRequire(join(airJsonDir, "__placeholder.js"));
|
|
54
|
+
const resolved = projectRequire.resolve(specifier);
|
|
55
|
+
mod = await import(pathToFileURL(resolved).href);
|
|
56
|
+
}
|
|
57
|
+
catch (projectErr) {
|
|
58
|
+
// Only fall back when the package wasn't found or can't be resolved
|
|
59
|
+
// via CJS resolution. Re-throw other errors (e.g. syntax errors in
|
|
60
|
+
// the resolved module) so they aren't masked.
|
|
61
|
+
const code = projectErr?.code;
|
|
62
|
+
if (code === "ERR_PACKAGE_PATH_NOT_EXPORTED") {
|
|
63
|
+
// CJS resolution can't resolve ESM-only packages. Try resolving
|
|
64
|
+
// the ESM entry point directly from the package.json exports.
|
|
65
|
+
const esmEntry = resolveEsmEntry(specifier, airJsonDir);
|
|
66
|
+
if (esmEntry) {
|
|
67
|
+
mod = await import(pathToFileURL(esmEntry).href);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
mod = await import(specifier);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (code === "MODULE_NOT_FOUND" ||
|
|
74
|
+
code === "ERR_MODULE_NOT_FOUND") {
|
|
75
|
+
mod = await import(specifier);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw projectErr;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
44
81
|
}
|
|
45
82
|
}
|
|
46
83
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-loader.js","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"extension-loader.js","sourceRoot":"","sources":["../src/extension-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { loadAirConfig, getDefaultAirJsonPath, getAirJsonPath, resolveArtifacts, mergeArtifacts, expandPlugins, emptyArtifacts, validateJson, getSchemasDir, getSchemaPath, loadSchema, detectSchemaType, detectSchemaFromValue, getAllSchemaTypes, isValidSchemaType, } from "@pulsemcp/air-core";
|
|
2
2
|
export type { AirConfig, ResolvedArtifacts, SkillEntry, ReferenceEntry, McpOAuthConfig, McpServerEntry, PluginAuthor, PluginEntry, RootEntry, HookEntry, AgentAdapter, CatalogProvider, AirExtension, PrepareTransform, McpConfig, TransformContext, ExtensionCliOption, AgentSessionConfig, StartCommand, PrepareSessionOptions as CorePrepareSessionOptions, PreparedSession, ValidationResult, ValidationError, ResolveOptions, SchemaType, } from "@pulsemcp/air-core";
|
|
3
|
-
export { findAdapter, listAvailableAdapters } from "./adapter-registry.js";
|
|
3
|
+
export { findAdapter, listAvailableAdapters, type FindAdapterOptions, } from "./adapter-registry.js";
|
|
4
4
|
export { normalizeGitUrl, detectRoot } from "./root-detection.js";
|
|
5
5
|
export { validateFile } from "./validate.js";
|
|
6
6
|
export type { ValidateFileOptions, ValidateFileResult } from "./validate.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,EAEd,YAAY,EAEZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAEV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EAET,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,IAAI,yBAAyB,EAClD,eAAe,EAEf,gBAAgB,EAChB,eAAe,EAEf,cAAc,EAEd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,EAEd,YAAY,EAEZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAEV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EAET,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,IAAI,yBAAyB,EAClD,eAAe,EAEf,gBAAgB,EAChB,eAAe,EAEf,cAAc,EAEd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjF,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EACV,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ validateJson,
|
|
|
7
7
|
// Schemas
|
|
8
8
|
getSchemasDir, getSchemaPath, loadSchema, detectSchemaType, detectSchemaFromValue, getAllSchemaTypes, isValidSchemaType, } from "@pulsemcp/air-core";
|
|
9
9
|
// Adapter registry
|
|
10
|
-
export { findAdapter, listAvailableAdapters } from "./adapter-registry.js";
|
|
10
|
+
export { findAdapter, listAvailableAdapters, } from "./adapter-registry.js";
|
|
11
11
|
// Root detection
|
|
12
12
|
export { normalizeGitUrl, detectRoot } from "./root-detection.js";
|
|
13
13
|
// High-level operations
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO;AACL,oBAAoB;AACpB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc;AACd,aAAa;AACb,YAAY;AACZ,UAAU;AACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAoC5B,mBAAmB;AACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO;AACL,oBAAoB;AACpB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc;AACd,aAAa;AACb,YAAY;AACZ,UAAU;AACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAoC5B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAE/B,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAElE,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AASjF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAM9C,sBAAsB;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
package/dist/init-from-repo.d.ts
CHANGED
|
@@ -38,6 +38,10 @@ export interface InitFromRepoResult {
|
|
|
38
38
|
discovered: DiscoveredArtifact[];
|
|
39
39
|
/** Whether an existing config was overwritten. */
|
|
40
40
|
overwritten: boolean;
|
|
41
|
+
/** Absolute path to the auto-generated roots.json, if created. */
|
|
42
|
+
generatedRootsPath: string;
|
|
43
|
+
/** Name/key of the auto-generated root entry. */
|
|
44
|
+
generatedRootName: string;
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* Parse a git remote URL and extract the GitHub owner/repo.
|
|
@@ -70,6 +74,10 @@ export declare function discoverArtifacts(repoRoot: string, repo: string, branch
|
|
|
70
74
|
* detects the GitHub remote, and generates an air.json with github:// URIs
|
|
71
75
|
* pointing to the repository's default branch.
|
|
72
76
|
*
|
|
77
|
+
* Also auto-generates a roots.json entry describing the current repo,
|
|
78
|
+
* populated with default_skills, default_mcp_servers, and default_hooks
|
|
79
|
+
* from the discovered artifacts.
|
|
80
|
+
*
|
|
73
81
|
* @throws Error if not in a git repo, no GitHub remote, no artifacts found,
|
|
74
82
|
* or air.json already exists (unless force is true).
|
|
75
83
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-from-repo.d.ts","sourceRoot":"","sources":["../src/init-from-repo.ts"],"names":[],"mappings":"AASA,OAAO,EAKL,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"init-from-repo.d.ts","sourceRoot":"","sources":["../src/init-from-repo.ts"],"names":[],"mappings":"AASA,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAQ5B,+CAA+C;AAC/C,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,cAAc,CAAC;AAEnB;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,IAAI,EAAE,qBAAqB;gBAD3C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,qBAAqB;CAK9C;AAED,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,IAAI,EAAE,UAAU,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,kDAAkD;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAaD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAaD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiCvD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,kBAAkB,EAAE,CA8CtB;AA6BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,kBAAkB,CA+IpB;AAED,yDAAyD;AACzD,MAAM,MAAM,eAAe,GACvB,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACvC;IACE,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CA4BxE"}
|
package/dist/init-from-repo.js
CHANGED
|
@@ -148,6 +148,31 @@ export function discoverArtifacts(repoRoot, repo, branch) {
|
|
|
148
148
|
}
|
|
149
149
|
return discovered;
|
|
150
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Extract artifact entry IDs from discovered artifact files.
|
|
153
|
+
* Reads each file, parses the JSON, and collects the top-level keys (IDs).
|
|
154
|
+
*/
|
|
155
|
+
function extractArtifactIds(discovered, repoRoot) {
|
|
156
|
+
const ids = {};
|
|
157
|
+
for (const artifact of discovered) {
|
|
158
|
+
const filePath = resolve(repoRoot, artifact.repoPath);
|
|
159
|
+
try {
|
|
160
|
+
const content = readFileSync(filePath, "utf-8");
|
|
161
|
+
const data = JSON.parse(content);
|
|
162
|
+
const { $schema, ...entries } = data;
|
|
163
|
+
const entryIds = Object.keys(entries);
|
|
164
|
+
if (entryIds.length > 0) {
|
|
165
|
+
if (!ids[artifact.type])
|
|
166
|
+
ids[artifact.type] = [];
|
|
167
|
+
ids[artifact.type].push(...entryIds);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return ids;
|
|
175
|
+
}
|
|
151
176
|
/**
|
|
152
177
|
* Initialize an AIR config from artifact files discovered in a git repository.
|
|
153
178
|
*
|
|
@@ -155,6 +180,10 @@ export function discoverArtifacts(repoRoot, repo, branch) {
|
|
|
155
180
|
* detects the GitHub remote, and generates an air.json with github:// URIs
|
|
156
181
|
* pointing to the repository's default branch.
|
|
157
182
|
*
|
|
183
|
+
* Also auto-generates a roots.json entry describing the current repo,
|
|
184
|
+
* populated with default_skills, default_mcp_servers, and default_hooks
|
|
185
|
+
* from the discovered artifacts.
|
|
186
|
+
*
|
|
158
187
|
* @throws Error if not in a git repo, no GitHub remote, no artifacts found,
|
|
159
188
|
* or air.json already exists (unless force is true).
|
|
160
189
|
*/
|
|
@@ -210,10 +239,50 @@ export function initFromRepo(options) {
|
|
|
210
239
|
// Derive config name from repo name
|
|
211
240
|
const repoName = repo.split("/")[1] || "my-config";
|
|
212
241
|
const configName = repoName.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
213
|
-
//
|
|
242
|
+
// Auto-generate roots.json for the current repo.
|
|
243
|
+
// Write to the repo directory (not ~/.air/) so it can be committed and
|
|
244
|
+
// referenced via github:// URI, consistent with other artifact types.
|
|
245
|
+
const artifactIds = extractArtifactIds(discovered, repoRoot);
|
|
246
|
+
const rootEntry = {
|
|
247
|
+
display_name: configName,
|
|
248
|
+
description: `Agent root for ${repo}.`,
|
|
249
|
+
url: remoteUrl.trim(),
|
|
250
|
+
default_branch: branch,
|
|
251
|
+
...(artifactIds.skills?.length && { default_skills: artifactIds.skills }),
|
|
252
|
+
...(artifactIds.mcp?.length && { default_mcp_servers: artifactIds.mcp }),
|
|
253
|
+
...(artifactIds.plugins?.length && { default_plugins: artifactIds.plugins }),
|
|
254
|
+
...(artifactIds.hooks?.length && { default_hooks: artifactIds.hooks }),
|
|
255
|
+
};
|
|
256
|
+
// Determine path for generated roots.json in the repo
|
|
257
|
+
const rootsRelPath = "roots/roots.json";
|
|
258
|
+
const rootsPath = resolve(repoRoot, rootsRelPath);
|
|
259
|
+
const hasExistingRoots = existsSync(rootsPath);
|
|
260
|
+
// Only write if the repo doesn't already have a roots.json at this path
|
|
261
|
+
if (!hasExistingRoots) {
|
|
262
|
+
mkdirSync(resolve(repoRoot, "roots"), { recursive: true });
|
|
263
|
+
const rootsJson = {
|
|
264
|
+
$schema: "https://raw.githubusercontent.com/pulsemcp/air/main/schemas/roots.schema.json",
|
|
265
|
+
[configName]: rootEntry,
|
|
266
|
+
};
|
|
267
|
+
writeFileSync(rootsPath, JSON.stringify(rootsJson, null, 2) + "\n");
|
|
268
|
+
}
|
|
269
|
+
// Add github:// URI for the generated roots to the grouped artifacts
|
|
270
|
+
const generatedRootsUri = `github://${repo}@${branch}/${rootsRelPath}`;
|
|
271
|
+
if (!hasExistingRoots) {
|
|
272
|
+
if (!grouped.roots)
|
|
273
|
+
grouped.roots = [];
|
|
274
|
+
// Prepend so discovered roots from other locations can override
|
|
275
|
+
grouped.roots.unshift(generatedRootsUri);
|
|
276
|
+
}
|
|
277
|
+
// Build air.json — all artifact types use github:// URIs consistently
|
|
214
278
|
const airJson = {
|
|
215
279
|
name: configName,
|
|
216
|
-
extensions: [
|
|
280
|
+
extensions: [
|
|
281
|
+
"@pulsemcp/air-adapter-claude",
|
|
282
|
+
"@pulsemcp/air-provider-github",
|
|
283
|
+
"@pulsemcp/air-secrets-env",
|
|
284
|
+
"@pulsemcp/air-secrets-file",
|
|
285
|
+
],
|
|
217
286
|
};
|
|
218
287
|
for (const type of ARTIFACT_TYPES) {
|
|
219
288
|
if (grouped[type]) {
|
|
@@ -230,6 +299,8 @@ export function initFromRepo(options) {
|
|
|
230
299
|
branch,
|
|
231
300
|
discovered,
|
|
232
301
|
overwritten,
|
|
302
|
+
generatedRootsPath: rootsPath,
|
|
303
|
+
generatedRootName: configName,
|
|
233
304
|
};
|
|
234
305
|
}
|
|
235
306
|
/**
|
|
@@ -257,6 +328,11 @@ export function smartInit(options) {
|
|
|
257
328
|
if (existsSync(targetPath)) {
|
|
258
329
|
unlinkSync(targetPath);
|
|
259
330
|
}
|
|
331
|
+
// Clean up auto-generated roots.json from a previous repo-mode init
|
|
332
|
+
const rootsPath = resolve(dirname(targetPath), "roots", "roots.json");
|
|
333
|
+
if (existsSync(rootsPath)) {
|
|
334
|
+
unlinkSync(rootsPath);
|
|
335
|
+
}
|
|
260
336
|
}
|
|
261
337
|
const result = initConfig({ path: options?.path });
|
|
262
338
|
return { mode: "blank", ...result };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-from-repo.js","sourceRoot":"","sources":["../src/init-from-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"init-from-repo.js","sourceRoot":"","sources":["../src/init-from-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/prepare.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export interface PrepareSessionOptions {
|
|
|
7
7
|
root?: string;
|
|
8
8
|
/** Target directory to prepare. Defaults to process.cwd(). */
|
|
9
9
|
target?: string;
|
|
10
|
-
/** Agent adapter name.
|
|
11
|
-
adapter
|
|
10
|
+
/** Agent adapter name (e.g., "claude"). Required. */
|
|
11
|
+
adapter: string;
|
|
12
12
|
/** Skill IDs to activate (overrides root defaults). */
|
|
13
13
|
skills?: string[];
|
|
14
14
|
/** MCP server IDs to activate (overrides root defaults). */
|
|
@@ -53,5 +53,5 @@ export interface PrepareSessionResult {
|
|
|
53
53
|
*
|
|
54
54
|
* @throws Error if the adapter is not found, air.json is not found, or the specified root doesn't exist.
|
|
55
55
|
*/
|
|
56
|
-
export declare function prepareSession(options
|
|
56
|
+
export declare function prepareSession(options: PrepareSessionOptions): Promise<PrepareSessionResult>;
|
|
57
57
|
//# sourceMappingURL=prepare.d.ts.map
|
package/dist/prepare.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAS9E,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAS9E,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,OAAO,EAAE,eAAe,CAAC;IACzB,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAwG/B"}
|
package/dist/prepare.js
CHANGED
|
@@ -16,29 +16,30 @@ import { findUnresolvedVars, unresolvedVarsMessage, } from "./validate-config.js
|
|
|
16
16
|
* @throws Error if the adapter is not found, air.json is not found, or the specified root doesn't exist.
|
|
17
17
|
*/
|
|
18
18
|
export async function prepareSession(options) {
|
|
19
|
-
const airJsonPath = options
|
|
19
|
+
const airJsonPath = options.config ?? getAirJsonPath();
|
|
20
20
|
if (!airJsonPath) {
|
|
21
21
|
throw new Error("No air.json found. Specify a config path or set AIR_CONFIG env var.");
|
|
22
22
|
}
|
|
23
|
+
const airJsonDir = dirname(resolve(airJsonPath));
|
|
24
|
+
const searchDirs = [airJsonDir];
|
|
23
25
|
// Use pre-loaded extensions or load from air.json
|
|
24
26
|
let loaded;
|
|
25
|
-
if (options
|
|
27
|
+
if (options.extensions) {
|
|
26
28
|
loaded = options.extensions;
|
|
27
29
|
}
|
|
28
30
|
else {
|
|
29
31
|
const airConfig = loadAirConfig(airJsonPath);
|
|
30
|
-
const airJsonDir = dirname(resolve(airJsonPath));
|
|
31
32
|
loaded = await loadExtensions(airConfig.extensions || [], airJsonDir);
|
|
32
33
|
}
|
|
33
34
|
// Find adapter: prefer extension-provided, fall back to registry
|
|
34
|
-
const adapterName = options
|
|
35
|
+
const adapterName = options.adapter;
|
|
35
36
|
let adapter = loaded.adapters.find((ext) => ext.adapter?.name === adapterName)?.adapter ??
|
|
36
37
|
null;
|
|
37
38
|
if (!adapter) {
|
|
38
|
-
adapter = await findAdapter(adapterName);
|
|
39
|
+
adapter = await findAdapter(adapterName, { searchDirs });
|
|
39
40
|
}
|
|
40
41
|
if (!adapter) {
|
|
41
|
-
const available = await listAvailableAdapters();
|
|
42
|
+
const available = await listAvailableAdapters({ searchDirs });
|
|
42
43
|
const availableMsg = available.length > 0
|
|
43
44
|
? `Available: ${available.join(", ")}`
|
|
44
45
|
: "No adapters installed";
|
|
@@ -52,25 +53,25 @@ export async function prepareSession(options) {
|
|
|
52
53
|
// Detect or validate root
|
|
53
54
|
let root;
|
|
54
55
|
let rootAutoDetected = false;
|
|
55
|
-
if (options
|
|
56
|
+
if (options.root) {
|
|
56
57
|
root = artifacts.roots[options.root];
|
|
57
58
|
if (!root) {
|
|
58
59
|
throw new Error(`Root "${options.root}" not found. Available roots: ${Object.keys(artifacts.roots).join(", ") || "(none)"}`);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
else {
|
|
62
|
-
const targetDir = resolve(options
|
|
63
|
+
const targetDir = resolve(options.target ?? process.cwd());
|
|
63
64
|
root = detectRoot(artifacts.roots, targetDir);
|
|
64
65
|
if (root) {
|
|
65
66
|
rootAutoDetected = true;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
// Adapter writes .mcp.json and injects skills (no secret resolution)
|
|
69
|
-
const session = await adapter.prepareSession(artifacts, options
|
|
70
|
+
const session = await adapter.prepareSession(artifacts, options.target ?? process.cwd(), {
|
|
70
71
|
root,
|
|
71
|
-
skillOverrides: options
|
|
72
|
-
mcpServerOverrides: options
|
|
73
|
-
skipSubagentMerge: options
|
|
72
|
+
skillOverrides: options.skills,
|
|
73
|
+
mcpServerOverrides: options.mcpServers,
|
|
74
|
+
skipSubagentMerge: options.skipSubagentMerge,
|
|
74
75
|
});
|
|
75
76
|
// Run transforms in extension-list order on the written .mcp.json
|
|
76
77
|
const mcpConfigPath = session.configFiles.find((f) => f.endsWith(".mcp.json"));
|
|
@@ -78,14 +79,14 @@ export async function prepareSession(options) {
|
|
|
78
79
|
await runTransforms({
|
|
79
80
|
transforms: loaded.transforms,
|
|
80
81
|
mcpConfigPath,
|
|
81
|
-
targetDir: options
|
|
82
|
+
targetDir: options.target ?? process.cwd(),
|
|
82
83
|
root,
|
|
83
84
|
artifacts,
|
|
84
|
-
extensionOptions: options
|
|
85
|
+
extensionOptions: options.extensionOptions ?? {},
|
|
85
86
|
});
|
|
86
87
|
}
|
|
87
88
|
// Final validation: ensure no unresolved ${VAR} patterns remain
|
|
88
|
-
if (!options
|
|
89
|
+
if (!options.skipValidation && mcpConfigPath) {
|
|
89
90
|
const config = JSON.parse(readFileSync(mcpConfigPath, "utf-8"));
|
|
90
91
|
const unresolved = findUnresolvedVars(config);
|
|
91
92
|
if (unresolved.length > 0) {
|
package/dist/prepare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAyB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAgD9B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAyB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAgD9B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;IAEhC,kDAAkD;IAClD,IAAI,MAAwB,CAAC;IAC7B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,iEAAiE;IACjE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,IAAI,OAAO,GACT,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC,EAAE,OAAO;QACzE,IAAI,CAAC;IACP,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,MAAM,YAAY,GAChB,SAAS,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,cAAc,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC,CAAC,CAAC,uBAAuB,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,MAAM,YAAY,GAAG,CAC1D,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;SAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAS,CAAC;SAC3B,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAErE,0BAA0B;IAC1B,IAAI,IAA2B,CAAC;IAChC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,SAAS,OAAO,CAAC,IAAI,iCAAiC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAC5G,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAC1C,SAAS,EACT,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EAC/B;QACE,IAAI;QACJ,cAAc,EAAE,OAAO,CAAC,MAAM;QAC9B,kBAAkB,EAAE,OAAO,CAAC,UAAU;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CACF,CAAC;IAEF,kEAAkE;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CACxB,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;QAClD,MAAM,aAAa,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,aAAa;YACb,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;YAC1C,IAAI;YACJ,SAAS;YACT,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;SACjD,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,aAAa,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAClC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CACrC,CAAC;QACF,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAC7C,CAAC"}
|
package/dist/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,gCAAgC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oCAAoC;IACpC,aAAa,EAAE,kBAAkB,CAAC;IAClC,4FAA4F;IAC5F,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,sCAAsC;IACtC,YAAY,EAAE,YAAY,CAAC;IAC3B,sCAAsC;IACtC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAqE7B"}
|
package/dist/start.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolve, dirname } from "path";
|
|
2
|
+
import { getAirJsonPath, loadAirConfig, resolveArtifacts, emptyArtifacts, } from "@pulsemcp/air-core";
|
|
2
3
|
import { findAdapter, listAvailableAdapters } from "./adapter-registry.js";
|
|
4
|
+
import { loadExtensions } from "./extension-loader.js";
|
|
3
5
|
/**
|
|
4
6
|
* Prepare to start an agent session.
|
|
5
7
|
*
|
|
@@ -9,19 +11,39 @@ import { findAdapter, listAvailableAdapters } from "./adapter-registry.js";
|
|
|
9
11
|
* @throws Error if the adapter is not found or the specified root doesn't exist.
|
|
10
12
|
*/
|
|
11
13
|
export async function startSession(agent, options) {
|
|
12
|
-
const
|
|
14
|
+
const airJsonPath = options?.config || getAirJsonPath();
|
|
15
|
+
const airJsonDir = airJsonPath ? dirname(resolve(airJsonPath)) : undefined;
|
|
16
|
+
const searchDirs = airJsonDir ? [airJsonDir] : undefined;
|
|
17
|
+
// Load extensions first so extension-provided adapters are found
|
|
18
|
+
let artifacts;
|
|
19
|
+
let adapter = null;
|
|
20
|
+
if (airJsonPath) {
|
|
21
|
+
const airConfig = loadAirConfig(airJsonPath);
|
|
22
|
+
const loaded = await loadExtensions(airConfig.extensions || [], airJsonDir);
|
|
23
|
+
// Check extension-provided adapters first
|
|
24
|
+
adapter =
|
|
25
|
+
loaded.adapters.find((ext) => ext.adapter?.name === agent)?.adapter ??
|
|
26
|
+
null;
|
|
27
|
+
const providers = loaded.providers
|
|
28
|
+
.map((ext) => ext.provider)
|
|
29
|
+
.filter(Boolean);
|
|
30
|
+
artifacts = await resolveArtifacts(airJsonPath, { providers });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
artifacts = emptyArtifacts();
|
|
34
|
+
}
|
|
35
|
+
// Fall back to registry lookup with search dirs
|
|
13
36
|
if (!adapter) {
|
|
14
|
-
|
|
37
|
+
adapter = await findAdapter(agent, { searchDirs });
|
|
38
|
+
}
|
|
39
|
+
if (!adapter) {
|
|
40
|
+
const available = await listAvailableAdapters({ searchDirs });
|
|
15
41
|
const availableMsg = available.length > 0
|
|
16
42
|
? `Available: ${available.join(", ")}`
|
|
17
43
|
: "No adapters installed";
|
|
18
44
|
throw new Error(`No adapter found for "${agent}". ${availableMsg}.\n` +
|
|
19
45
|
`Install an adapter: npm install @pulsemcp/air-adapter-${agent}`);
|
|
20
46
|
}
|
|
21
|
-
const airJsonPath = options?.config || getAirJsonPath();
|
|
22
|
-
const artifacts = airJsonPath
|
|
23
|
-
? await resolveArtifacts(airJsonPath)
|
|
24
|
-
: emptyArtifacts();
|
|
25
47
|
let root;
|
|
26
48
|
if (options?.root) {
|
|
27
49
|
root = artifacts.roots[options.root];
|
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,GAKf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.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.14",
|
|
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.14"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.10.0",
|