@pulsemcp/air-core 0.0.2 → 0.0.4
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/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +144 -4
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +23 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/plugins.schema.json +70 -20
- package/schemas/schemas/plugins.schema.json +70 -20
package/dist/config.d.ts
CHANGED
|
@@ -17,11 +17,36 @@ export interface ResolveOptions {
|
|
|
17
17
|
* Resolve all artifacts from an air.json file.
|
|
18
18
|
* Each artifact property is an array of paths; files merge in order.
|
|
19
19
|
* Remote URIs are delegated to the matching CatalogProvider.
|
|
20
|
+
*
|
|
21
|
+
* All `path` and `file` fields in resolved entries are absolute paths,
|
|
22
|
+
* making artifacts self-contained regardless of source location.
|
|
20
23
|
*/
|
|
21
24
|
export declare function resolveArtifacts(airJsonPath: string, options?: ResolveOptions): Promise<ResolvedArtifacts>;
|
|
22
25
|
/**
|
|
23
26
|
* Merge two resolved artifact sets. Override wins for matching IDs.
|
|
27
|
+
* Composite plugins are re-expanded after merging so that newly
|
|
28
|
+
* added plugins that reference existing ones are fully resolved.
|
|
24
29
|
*/
|
|
25
30
|
export declare function mergeArtifacts(base: ResolvedArtifacts, override: ResolvedArtifacts): ResolvedArtifacts;
|
|
31
|
+
/**
|
|
32
|
+
* Recursively expand plugin references.
|
|
33
|
+
*
|
|
34
|
+
* Each plugin may declare a `plugins` array referencing other plugins by ID.
|
|
35
|
+
* This function resolves those references recursively, merging child plugins'
|
|
36
|
+
* primitives (skills, mcp_servers, hooks) into the parent. The result is a
|
|
37
|
+
* flat set of primitive IDs on each plugin — nesting is author convenience,
|
|
38
|
+
* not a runtime concept.
|
|
39
|
+
*
|
|
40
|
+
* Semantics:
|
|
41
|
+
* - Child plugins are expanded depth-first in declaration order
|
|
42
|
+
* - Parent's direct declarations override children (later wins via dedup)
|
|
43
|
+
* - Circular references are rejected with a clear error message
|
|
44
|
+
* - Plugins without a `plugins` field are returned unchanged
|
|
45
|
+
* - The `plugins` array on each entry is preserved as metadata (e.g., for
|
|
46
|
+
* UI display of the dependency graph) even though primitives are inlined
|
|
47
|
+
*
|
|
48
|
+
* Returns a new ResolvedArtifacts object; the input is not mutated.
|
|
49
|
+
*/
|
|
50
|
+
export declare function expandPlugins(artifacts: ResolvedArtifacts): ResolvedArtifacts;
|
|
26
51
|
export declare function emptyArtifacts(): ResolvedArtifacts;
|
|
27
52
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAOjB,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAOjB,eAAe,EAChB,MAAM,YAAY,CAAC;AAmGpB,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAG5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAG9C;AAED,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CASnB;AAmBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,iBAAiB,CAiF7E;AAED,wBAAgB,cAAc,IAAI,iBAAiB,CASlD"}
|
package/dist/config.js
CHANGED
|
@@ -24,16 +24,39 @@ function getScheme(path) {
|
|
|
24
24
|
return null;
|
|
25
25
|
return scheme;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve relative `path` and `file` fields in artifact entries to absolute paths.
|
|
29
|
+
* sourceDir is the directory containing the index file (local or remote clone).
|
|
30
|
+
*/
|
|
31
|
+
function resolveEntryPaths(entries, sourceDir) {
|
|
32
|
+
const resolved = {};
|
|
33
|
+
for (const [key, entry] of Object.entries(entries)) {
|
|
34
|
+
const e = entry;
|
|
35
|
+
const updated = { ...e };
|
|
36
|
+
if (typeof e.path === "string" && !e.path.startsWith("/")) {
|
|
37
|
+
updated.path = resolve(sourceDir, e.path);
|
|
38
|
+
}
|
|
39
|
+
if (typeof e.file === "string" && !e.file.startsWith("/")) {
|
|
40
|
+
updated.file = resolve(sourceDir, e.file);
|
|
41
|
+
}
|
|
42
|
+
resolved[key] = updated;
|
|
43
|
+
}
|
|
44
|
+
return resolved;
|
|
45
|
+
}
|
|
27
46
|
/**
|
|
28
47
|
* Load and merge entries from an array of index file paths.
|
|
29
48
|
* Local paths are resolved relative to baseDir.
|
|
30
49
|
* URI paths (with schemes) are delegated to the matching CatalogProvider.
|
|
50
|
+
*
|
|
51
|
+
* After loading, relative `path` and `file` fields in entries are resolved
|
|
52
|
+
* to absolute paths, so downstream consumers don't need source directory context.
|
|
31
53
|
*/
|
|
32
54
|
async function loadAndMerge(paths, baseDir, providers) {
|
|
33
55
|
let merged = {};
|
|
34
56
|
for (const p of paths) {
|
|
35
57
|
const scheme = getScheme(p);
|
|
36
58
|
let data;
|
|
59
|
+
let sourceDir;
|
|
37
60
|
if (scheme) {
|
|
38
61
|
const provider = providers.find((prov) => prov.scheme === scheme);
|
|
39
62
|
if (!provider) {
|
|
@@ -41,12 +64,17 @@ async function loadAndMerge(paths, baseDir, providers) {
|
|
|
41
64
|
`Install an extension that handles this scheme.`);
|
|
42
65
|
}
|
|
43
66
|
data = await provider.resolve(p, baseDir);
|
|
67
|
+
// Use provider's resolveSourceDir if available, otherwise fall back to baseDir
|
|
68
|
+
sourceDir = provider.resolveSourceDir?.(p) ?? baseDir;
|
|
44
69
|
}
|
|
45
70
|
else {
|
|
46
|
-
|
|
71
|
+
const resolvedPath = resolve(baseDir, p);
|
|
72
|
+
data = loadJsonFile(resolvedPath);
|
|
73
|
+
sourceDir = dirname(resolvedPath);
|
|
47
74
|
}
|
|
48
75
|
const entries = stripSchema(data);
|
|
49
|
-
|
|
76
|
+
const resolved = resolveEntryPaths(entries, sourceDir);
|
|
77
|
+
merged = { ...merged, ...resolved };
|
|
50
78
|
}
|
|
51
79
|
return merged;
|
|
52
80
|
}
|
|
@@ -72,12 +100,15 @@ export function getAirJsonPath() {
|
|
|
72
100
|
* Resolve all artifacts from an air.json file.
|
|
73
101
|
* Each artifact property is an array of paths; files merge in order.
|
|
74
102
|
* Remote URIs are delegated to the matching CatalogProvider.
|
|
103
|
+
*
|
|
104
|
+
* All `path` and `file` fields in resolved entries are absolute paths,
|
|
105
|
+
* making artifacts self-contained regardless of source location.
|
|
75
106
|
*/
|
|
76
107
|
export async function resolveArtifacts(airJsonPath, options) {
|
|
77
108
|
const airConfig = loadAirConfig(airJsonPath);
|
|
78
109
|
const baseDir = dirname(resolve(airJsonPath));
|
|
79
110
|
const providers = options?.providers || [];
|
|
80
|
-
|
|
111
|
+
const resolved = {
|
|
81
112
|
skills: await loadAndMerge(airConfig.skills || [], baseDir, providers),
|
|
82
113
|
references: await loadAndMerge(airConfig.references || [], baseDir, providers),
|
|
83
114
|
mcp: await loadAndMerge(airConfig.mcp || [], baseDir, providers),
|
|
@@ -85,18 +116,127 @@ export async function resolveArtifacts(airJsonPath, options) {
|
|
|
85
116
|
roots: await loadAndMerge(airConfig.roots || [], baseDir, providers),
|
|
86
117
|
hooks: await loadAndMerge(airConfig.hooks || [], baseDir, providers),
|
|
87
118
|
};
|
|
119
|
+
return expandPlugins(resolved);
|
|
88
120
|
}
|
|
89
121
|
/**
|
|
90
122
|
* Merge two resolved artifact sets. Override wins for matching IDs.
|
|
123
|
+
* Composite plugins are re-expanded after merging so that newly
|
|
124
|
+
* added plugins that reference existing ones are fully resolved.
|
|
91
125
|
*/
|
|
92
126
|
export function mergeArtifacts(base, override) {
|
|
93
|
-
return {
|
|
127
|
+
return expandPlugins({
|
|
94
128
|
skills: { ...base.skills, ...override.skills },
|
|
95
129
|
references: { ...base.references, ...override.references },
|
|
96
130
|
mcp: { ...base.mcp, ...override.mcp },
|
|
97
131
|
plugins: { ...base.plugins, ...override.plugins },
|
|
98
132
|
roots: { ...base.roots, ...override.roots },
|
|
99
133
|
hooks: { ...base.hooks, ...override.hooks },
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Deduplicate an array of strings, keeping the last occurrence of each value.
|
|
138
|
+
* This ensures parent declarations take precedence over child plugin declarations
|
|
139
|
+
* when arrays are concatenated as [...childIds, ...parentIds].
|
|
140
|
+
*/
|
|
141
|
+
function deduplicateIds(arr) {
|
|
142
|
+
const seen = new Set();
|
|
143
|
+
const result = [];
|
|
144
|
+
for (let i = arr.length - 1; i >= 0; i--) {
|
|
145
|
+
if (!seen.has(arr[i])) {
|
|
146
|
+
seen.add(arr[i]);
|
|
147
|
+
result.unshift(arr[i]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Recursively expand plugin references.
|
|
154
|
+
*
|
|
155
|
+
* Each plugin may declare a `plugins` array referencing other plugins by ID.
|
|
156
|
+
* This function resolves those references recursively, merging child plugins'
|
|
157
|
+
* primitives (skills, mcp_servers, hooks) into the parent. The result is a
|
|
158
|
+
* flat set of primitive IDs on each plugin — nesting is author convenience,
|
|
159
|
+
* not a runtime concept.
|
|
160
|
+
*
|
|
161
|
+
* Semantics:
|
|
162
|
+
* - Child plugins are expanded depth-first in declaration order
|
|
163
|
+
* - Parent's direct declarations override children (later wins via dedup)
|
|
164
|
+
* - Circular references are rejected with a clear error message
|
|
165
|
+
* - Plugins without a `plugins` field are returned unchanged
|
|
166
|
+
* - The `plugins` array on each entry is preserved as metadata (e.g., for
|
|
167
|
+
* UI display of the dependency graph) even though primitives are inlined
|
|
168
|
+
*
|
|
169
|
+
* Returns a new ResolvedArtifacts object; the input is not mutated.
|
|
170
|
+
*/
|
|
171
|
+
export function expandPlugins(artifacts) {
|
|
172
|
+
const plugins = artifacts.plugins;
|
|
173
|
+
const expanded = new Map();
|
|
174
|
+
function expand(pluginId, ancestors) {
|
|
175
|
+
if (expanded.has(pluginId)) {
|
|
176
|
+
return expanded.get(pluginId);
|
|
177
|
+
}
|
|
178
|
+
const plugin = plugins[pluginId];
|
|
179
|
+
if (!plugin) {
|
|
180
|
+
throw new Error(`Plugin "${pluginId}" referenced by "${ancestors[ancestors.length - 1]}" not found in resolved artifacts`);
|
|
181
|
+
}
|
|
182
|
+
// Cycle detection
|
|
183
|
+
const cycleIndex = ancestors.indexOf(pluginId);
|
|
184
|
+
if (cycleIndex !== -1) {
|
|
185
|
+
const cycle = [...ancestors.slice(cycleIndex), pluginId].join(" → ");
|
|
186
|
+
throw new Error(`Circular plugin dependency detected: ${cycle}`);
|
|
187
|
+
}
|
|
188
|
+
// No child plugins — return as-is
|
|
189
|
+
if (!plugin.plugins || plugin.plugins.length === 0) {
|
|
190
|
+
expanded.set(pluginId, plugin);
|
|
191
|
+
return plugin;
|
|
192
|
+
}
|
|
193
|
+
// Recursively expand child plugins and collect their primitives
|
|
194
|
+
const childSkills = [];
|
|
195
|
+
const childMcpServers = [];
|
|
196
|
+
const childHooks = [];
|
|
197
|
+
for (const childId of plugin.plugins) {
|
|
198
|
+
const child = expand(childId, [...ancestors, pluginId]);
|
|
199
|
+
if (child.skills)
|
|
200
|
+
childSkills.push(...child.skills);
|
|
201
|
+
if (child.mcp_servers)
|
|
202
|
+
childMcpServers.push(...child.mcp_servers);
|
|
203
|
+
if (child.hooks)
|
|
204
|
+
childHooks.push(...child.hooks);
|
|
205
|
+
}
|
|
206
|
+
// Merge: children first, then parent's direct declarations (parent wins via dedup)
|
|
207
|
+
const mergedSkills = deduplicateIds([
|
|
208
|
+
...childSkills,
|
|
209
|
+
...(plugin.skills || []),
|
|
210
|
+
]);
|
|
211
|
+
const mergedMcpServers = deduplicateIds([
|
|
212
|
+
...childMcpServers,
|
|
213
|
+
...(plugin.mcp_servers || []),
|
|
214
|
+
]);
|
|
215
|
+
const mergedHooks = deduplicateIds([
|
|
216
|
+
...childHooks,
|
|
217
|
+
...(plugin.hooks || []),
|
|
218
|
+
]);
|
|
219
|
+
const expandedPlugin = {
|
|
220
|
+
...plugin,
|
|
221
|
+
skills: mergedSkills.length > 0 ? mergedSkills : undefined,
|
|
222
|
+
mcp_servers: mergedMcpServers.length > 0 ? mergedMcpServers : undefined,
|
|
223
|
+
hooks: mergedHooks.length > 0 ? mergedHooks : undefined,
|
|
224
|
+
};
|
|
225
|
+
expanded.set(pluginId, expandedPlugin);
|
|
226
|
+
return expandedPlugin;
|
|
227
|
+
}
|
|
228
|
+
// Expand all plugins
|
|
229
|
+
for (const pluginId of Object.keys(plugins)) {
|
|
230
|
+
expand(pluginId, []);
|
|
231
|
+
}
|
|
232
|
+
// Build the new plugins record preserving insertion order
|
|
233
|
+
const expandedPlugins = {};
|
|
234
|
+
for (const pluginId of Object.keys(plugins)) {
|
|
235
|
+
expandedPlugins[pluginId] = expanded.get(pluginId);
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
...artifacts,
|
|
239
|
+
plugins: expandedPlugins,
|
|
100
240
|
};
|
|
101
241
|
}
|
|
102
242
|
export function emptyArtifacts() {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAaxC,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAClB,IAA6B;IAE7B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,+DAA+D;IAC/D,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type { AirConfig, ResolvedArtifacts, SkillEntry, ReferenceEntry, McpOAuthConfig, McpServerEntry, PluginEntry, RootEntry, HookEntry, } from "./types.js";
|
|
1
|
+
export type { AirConfig, ResolvedArtifacts, SkillEntry, ReferenceEntry, McpOAuthConfig, McpServerEntry, PluginAuthor, PluginEntry, RootEntry, HookEntry, } from "./types.js";
|
|
2
2
|
export type { AgentAdapter, CatalogProvider, SecretResolver, AirExtension, AgentSessionConfig, StartCommand, PrepareSessionOptions, PreparedSession, } from "./types.js";
|
|
3
|
-
export { loadAirConfig, getDefaultAirJsonPath, getAirJsonPath, resolveArtifacts, mergeArtifacts, emptyArtifacts, } from "./config.js";
|
|
3
|
+
export { loadAirConfig, getDefaultAirJsonPath, getAirJsonPath, resolveArtifacts, mergeArtifacts, expandPlugins, emptyArtifacts, } from "./config.js";
|
|
4
4
|
export type { ResolveOptions } from "./config.js";
|
|
5
5
|
export { validateJson } from "./validator.js";
|
|
6
6
|
export type { ValidationResult, ValidationError } from "./validator.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,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Config resolution
|
|
2
|
-
export { loadAirConfig, getDefaultAirJsonPath, getAirJsonPath, resolveArtifacts, mergeArtifacts, emptyArtifacts, } from "./config.js";
|
|
2
|
+
export { loadAirConfig, getDefaultAirJsonPath, getAirJsonPath, resolveArtifacts, mergeArtifacts, expandPlugins, emptyArtifacts, } from "./config.js";
|
|
3
3
|
// Validation
|
|
4
4
|
export { validateJson } from "./validator.js";
|
|
5
5
|
// Schemas
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0BA,oBAAoB;AACpB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,UAAU;AACV,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,15 +45,26 @@ export interface McpServerEntry {
|
|
|
45
45
|
headers?: Record<string, string>;
|
|
46
46
|
oauth?: McpOAuthConfig;
|
|
47
47
|
}
|
|
48
|
+
export interface PluginAuthor {
|
|
49
|
+
name?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
url?: string;
|
|
52
|
+
}
|
|
48
53
|
export interface PluginEntry {
|
|
49
54
|
id: string;
|
|
50
55
|
title?: string;
|
|
51
56
|
description: string;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
version?: string;
|
|
58
|
+
skills?: string[];
|
|
59
|
+
mcp_servers?: string[];
|
|
60
|
+
hooks?: string[];
|
|
61
|
+
plugins?: string[];
|
|
62
|
+
author?: PluginAuthor;
|
|
63
|
+
homepage?: string;
|
|
64
|
+
repository?: string;
|
|
65
|
+
license?: string;
|
|
66
|
+
logo?: string;
|
|
67
|
+
keywords?: string[];
|
|
57
68
|
}
|
|
58
69
|
export interface RootEntry {
|
|
59
70
|
name: string;
|
|
@@ -110,12 +121,6 @@ export interface PrepareSessionOptions {
|
|
|
110
121
|
root?: RootEntry;
|
|
111
122
|
/** Secret resolvers for ${VAR} interpolation in MCP configs */
|
|
112
123
|
secretResolvers?: SecretResolver[];
|
|
113
|
-
/**
|
|
114
|
-
* Base directory for resolving artifact source paths (skill.path, reference.file).
|
|
115
|
-
* Defaults to the parent of targetDir. Set this to the directory containing air.json
|
|
116
|
-
* when air.json lives separately from the target directory (e.g., orchestrator use case).
|
|
117
|
-
*/
|
|
118
|
-
baseDir?: string;
|
|
119
124
|
/**
|
|
120
125
|
* Override the root's default_skills — only activate these specific skills.
|
|
121
126
|
* When set, this replaces root.default_skills entirely.
|
|
@@ -148,6 +153,13 @@ export interface CatalogProvider {
|
|
|
148
153
|
scheme: string;
|
|
149
154
|
/** Resolve a URI to parsed JSON content */
|
|
150
155
|
resolve(uri: string, baseDir: string): Promise<Record<string, unknown>>;
|
|
156
|
+
/**
|
|
157
|
+
* Return the local directory where files from this URI's source can be found.
|
|
158
|
+
* For git-based providers, this is the clone directory.
|
|
159
|
+
* Used by loadAndMerge to resolve relative path/file fields in artifact entries
|
|
160
|
+
* to absolute paths. Returns undefined if the source isn't locally available.
|
|
161
|
+
*/
|
|
162
|
+
resolveSourceDir?(uri: string): string | undefined;
|
|
151
163
|
}
|
|
152
164
|
/**
|
|
153
165
|
* Secret Resolver — resolves ${VAR} interpolation in config values.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://raw.githubusercontent.com/pulsemcp/air/main/schemas/plugins.schema.json",
|
|
4
4
|
"title": "AIR Plugins Index",
|
|
5
|
-
"description": "Index of agent plugins available in this AIR configuration.
|
|
5
|
+
"description": "Index of agent plugins available in this AIR configuration. A plugin is a named grouping of AIR primitives (skills, MCP servers, hooks) — a compositional unit for bundling and distributing related capabilities. Plugins do not define new artifacts inline; they reference existing artifacts by ID from the corresponding index files.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"$schema": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"$defs": {
|
|
21
21
|
"Plugin": {
|
|
22
22
|
"type": "object",
|
|
23
|
-
"description": "
|
|
23
|
+
"description": "A plugin — a named grouping of AIR primitives (skills, MCP servers, hooks) for bundling and distribution. All referenced artifacts must be defined in their respective index files.",
|
|
24
24
|
"properties": {
|
|
25
25
|
"id": {
|
|
26
26
|
"type": "string",
|
|
@@ -38,38 +38,88 @@
|
|
|
38
38
|
"type": "string",
|
|
39
39
|
"minLength": 1,
|
|
40
40
|
"maxLength": 500,
|
|
41
|
-
"description": "Concise description of what this plugin
|
|
41
|
+
"description": "Concise description of what this plugin provides."
|
|
42
42
|
},
|
|
43
|
-
"
|
|
43
|
+
"version": {
|
|
44
44
|
"type": "string",
|
|
45
|
-
"
|
|
46
|
-
"description": "
|
|
45
|
+
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+([-+][a-zA-Z0-9._-]+)?$",
|
|
46
|
+
"description": "Semantic version of the plugin (e.g., '1.0.0')."
|
|
47
47
|
},
|
|
48
|
-
"
|
|
49
|
-
"type": "
|
|
50
|
-
"
|
|
48
|
+
"skills": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"description": "IDs of skills bundled by this plugin. Must reference skill IDs defined in skills.json indexes."
|
|
51
54
|
},
|
|
52
|
-
"
|
|
55
|
+
"mcp_servers": {
|
|
53
56
|
"type": "array",
|
|
54
57
|
"items": {
|
|
55
58
|
"type": "string"
|
|
56
59
|
},
|
|
57
|
-
"description": "
|
|
60
|
+
"description": "IDs of MCP servers bundled by this plugin. Must reference server IDs defined in mcp.json indexes."
|
|
58
61
|
},
|
|
59
|
-
"
|
|
60
|
-
"type": "
|
|
61
|
-
"
|
|
62
|
+
"hooks": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
62
65
|
"type": "string"
|
|
63
66
|
},
|
|
64
|
-
"description": "
|
|
67
|
+
"description": "IDs of hooks bundled by this plugin. Must reference hook IDs defined in hooks.json indexes."
|
|
68
|
+
},
|
|
69
|
+
"plugins": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"description": "IDs of other plugins to compose into this plugin. Referenced plugins' primitives (skills, mcp_servers, hooks) are recursively expanded and merged with this plugin's direct declarations. Circular references are rejected at resolution time."
|
|
75
|
+
},
|
|
76
|
+
"author": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"description": "Plugin author information.",
|
|
79
|
+
"properties": {
|
|
80
|
+
"name": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "Author's name."
|
|
83
|
+
},
|
|
84
|
+
"email": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"format": "email",
|
|
87
|
+
"description": "Author's email address."
|
|
88
|
+
},
|
|
89
|
+
"url": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"format": "uri",
|
|
92
|
+
"description": "Author's website or profile URL."
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"additionalProperties": false
|
|
96
|
+
},
|
|
97
|
+
"homepage": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"format": "uri",
|
|
100
|
+
"description": "URL to the plugin's homepage or documentation."
|
|
101
|
+
},
|
|
102
|
+
"repository": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "URL or identifier for the plugin's source repository."
|
|
105
|
+
},
|
|
106
|
+
"license": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "SPDX license identifier (e.g., 'MIT', 'Apache-2.0')."
|
|
109
|
+
},
|
|
110
|
+
"logo": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "Path or URL to the plugin's logo image."
|
|
65
113
|
},
|
|
66
|
-
"
|
|
67
|
-
"type": "
|
|
68
|
-
"
|
|
69
|
-
|
|
114
|
+
"keywords": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"items": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
},
|
|
119
|
+
"description": "Keywords for discovery and categorization."
|
|
70
120
|
}
|
|
71
121
|
},
|
|
72
|
-
"required": ["id", "description"
|
|
122
|
+
"required": ["id", "description"],
|
|
73
123
|
"additionalProperties": false
|
|
74
124
|
}
|
|
75
125
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://raw.githubusercontent.com/pulsemcp/air/main/schemas/plugins.schema.json",
|
|
4
4
|
"title": "AIR Plugins Index",
|
|
5
|
-
"description": "Index of agent plugins available in this AIR configuration.
|
|
5
|
+
"description": "Index of agent plugins available in this AIR configuration. A plugin is a named grouping of AIR primitives (skills, MCP servers, hooks) — a compositional unit for bundling and distributing related capabilities. Plugins do not define new artifacts inline; they reference existing artifacts by ID from the corresponding index files.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"$schema": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"$defs": {
|
|
21
21
|
"Plugin": {
|
|
22
22
|
"type": "object",
|
|
23
|
-
"description": "
|
|
23
|
+
"description": "A plugin — a named grouping of AIR primitives (skills, MCP servers, hooks) for bundling and distribution. All referenced artifacts must be defined in their respective index files.",
|
|
24
24
|
"properties": {
|
|
25
25
|
"id": {
|
|
26
26
|
"type": "string",
|
|
@@ -38,38 +38,88 @@
|
|
|
38
38
|
"type": "string",
|
|
39
39
|
"minLength": 1,
|
|
40
40
|
"maxLength": 500,
|
|
41
|
-
"description": "Concise description of what this plugin
|
|
41
|
+
"description": "Concise description of what this plugin provides."
|
|
42
42
|
},
|
|
43
|
-
"
|
|
43
|
+
"version": {
|
|
44
44
|
"type": "string",
|
|
45
|
-
"
|
|
46
|
-
"description": "
|
|
45
|
+
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+([-+][a-zA-Z0-9._-]+)?$",
|
|
46
|
+
"description": "Semantic version of the plugin (e.g., '1.0.0')."
|
|
47
47
|
},
|
|
48
|
-
"
|
|
49
|
-
"type": "
|
|
50
|
-
"
|
|
48
|
+
"skills": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"description": "IDs of skills bundled by this plugin. Must reference skill IDs defined in skills.json indexes."
|
|
51
54
|
},
|
|
52
|
-
"
|
|
55
|
+
"mcp_servers": {
|
|
53
56
|
"type": "array",
|
|
54
57
|
"items": {
|
|
55
58
|
"type": "string"
|
|
56
59
|
},
|
|
57
|
-
"description": "
|
|
60
|
+
"description": "IDs of MCP servers bundled by this plugin. Must reference server IDs defined in mcp.json indexes."
|
|
58
61
|
},
|
|
59
|
-
"
|
|
60
|
-
"type": "
|
|
61
|
-
"
|
|
62
|
+
"hooks": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
62
65
|
"type": "string"
|
|
63
66
|
},
|
|
64
|
-
"description": "
|
|
67
|
+
"description": "IDs of hooks bundled by this plugin. Must reference hook IDs defined in hooks.json indexes."
|
|
68
|
+
},
|
|
69
|
+
"plugins": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"description": "IDs of other plugins to compose into this plugin. Referenced plugins' primitives (skills, mcp_servers, hooks) are recursively expanded and merged with this plugin's direct declarations. Circular references are rejected at resolution time."
|
|
75
|
+
},
|
|
76
|
+
"author": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"description": "Plugin author information.",
|
|
79
|
+
"properties": {
|
|
80
|
+
"name": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "Author's name."
|
|
83
|
+
},
|
|
84
|
+
"email": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"format": "email",
|
|
87
|
+
"description": "Author's email address."
|
|
88
|
+
},
|
|
89
|
+
"url": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"format": "uri",
|
|
92
|
+
"description": "Author's website or profile URL."
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"additionalProperties": false
|
|
96
|
+
},
|
|
97
|
+
"homepage": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"format": "uri",
|
|
100
|
+
"description": "URL to the plugin's homepage or documentation."
|
|
101
|
+
},
|
|
102
|
+
"repository": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "URL or identifier for the plugin's source repository."
|
|
105
|
+
},
|
|
106
|
+
"license": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "SPDX license identifier (e.g., 'MIT', 'Apache-2.0')."
|
|
109
|
+
},
|
|
110
|
+
"logo": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "Path or URL to the plugin's logo image."
|
|
65
113
|
},
|
|
66
|
-
"
|
|
67
|
-
"type": "
|
|
68
|
-
"
|
|
69
|
-
|
|
114
|
+
"keywords": {
|
|
115
|
+
"type": "array",
|
|
116
|
+
"items": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
},
|
|
119
|
+
"description": "Keywords for discovery and categorization."
|
|
70
120
|
}
|
|
71
121
|
},
|
|
72
|
-
"required": ["id", "description"
|
|
122
|
+
"required": ["id", "description"],
|
|
73
123
|
"additionalProperties": false
|
|
74
124
|
}
|
|
75
125
|
}
|