@pulsemcp/air-cli 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/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -40
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +20 -17
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/prepare.d.ts.map +1 -1
- package/dist/commands/prepare.js +23 -45
- package/dist/commands/prepare.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +17 -35
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +16 -44
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -3
- package/dist/adapter-registry.d.ts +0 -11
- package/dist/adapter-registry.d.ts.map +0 -1
- package/dist/adapter-registry.js +0 -52
- package/dist/adapter-registry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,WAAW,IAAI,OAAO,CAuBrC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,51 +1,22 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { resolve, dirname } from "path";
|
|
4
|
-
import { getDefaultAirJsonPath } from "@pulsemcp/air-core";
|
|
2
|
+
import { initConfig } from "@pulsemcp/air-sdk";
|
|
5
3
|
export function initCommand() {
|
|
6
4
|
const cmd = new Command("init")
|
|
7
5
|
.description("Initialize a new AIR configuration at ~/.air/")
|
|
8
6
|
.action(() => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
mkdirSync(airDir, { recursive: true });
|
|
16
|
-
const airJson = {
|
|
17
|
-
name: "my-config",
|
|
18
|
-
description: "",
|
|
19
|
-
skills: ["./skills/skills.json"],
|
|
20
|
-
references: ["./references/references.json"],
|
|
21
|
-
mcp: ["./mcp/mcp.json"],
|
|
22
|
-
plugins: ["./plugins/plugins.json"],
|
|
23
|
-
roots: ["./roots/roots.json"],
|
|
24
|
-
hooks: ["./hooks/hooks.json"],
|
|
25
|
-
};
|
|
26
|
-
const emptyIndex = () => "{}\n";
|
|
27
|
-
writeFileSync(airJsonPath, JSON.stringify(airJson, null, 2) + "\n");
|
|
28
|
-
const files = [
|
|
29
|
-
["skills/skills.json", emptyIndex()],
|
|
30
|
-
["references/references.json", emptyIndex()],
|
|
31
|
-
["mcp/mcp.json", emptyIndex()],
|
|
32
|
-
["plugins/plugins.json", emptyIndex()],
|
|
33
|
-
["roots/roots.json", emptyIndex()],
|
|
34
|
-
["hooks/hooks.json", emptyIndex()],
|
|
35
|
-
];
|
|
36
|
-
for (const [filename, content] of files) {
|
|
37
|
-
const filePath = resolve(airDir, filename);
|
|
38
|
-
mkdirSync(dirname(filePath), { recursive: true });
|
|
39
|
-
if (!existsSync(filePath)) {
|
|
40
|
-
writeFileSync(filePath, content);
|
|
7
|
+
try {
|
|
8
|
+
const result = initConfig();
|
|
9
|
+
console.log(`Initialized AIR configuration at ${result.airDir}/:`);
|
|
10
|
+
for (const file of result.files) {
|
|
11
|
+
console.log(` ${file}`);
|
|
41
12
|
}
|
|
13
|
+
console.log("\nEdit air.json to configure your setup. Run 'air validate ~/.air/air.json' to check.");
|
|
42
14
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
15
|
+
catch (err) {
|
|
16
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
17
|
+
console.error(`Error: ${message}`);
|
|
18
|
+
process.exit(1);
|
|
47
19
|
}
|
|
48
|
-
console.log("\nEdit air.json to configure your setup. Run 'air validate ~/.air/air.json' to check.");
|
|
49
20
|
});
|
|
50
21
|
return cmd;
|
|
51
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;SAC5B,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,CAAC,GAAG,CACT,uFAAuF,CACxF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,WAAW,IAAI,OAAO,CA8JrC"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
const VALID_TYPES = [
|
|
4
|
-
"skills",
|
|
5
|
-
"mcp",
|
|
6
|
-
"plugins",
|
|
7
|
-
"roots",
|
|
8
|
-
"hooks",
|
|
9
|
-
"references",
|
|
10
|
-
];
|
|
2
|
+
import { listArtifacts, } from "@pulsemcp/air-sdk";
|
|
11
3
|
export function listCommand() {
|
|
12
4
|
const cmd = new Command("list")
|
|
13
5
|
.description("List available artifacts (skills, mcp, plugins, roots, hooks, references)")
|
|
14
6
|
.argument("<type>", "Artifact type to list: skills, mcp, plugins, roots, hooks, references")
|
|
15
7
|
.action(async (type) => {
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
let result;
|
|
9
|
+
try {
|
|
10
|
+
result = await listArtifacts(type);
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
14
|
+
console.error(`Error: ${message}`);
|
|
18
15
|
process.exit(1);
|
|
19
16
|
}
|
|
20
|
-
const
|
|
21
|
-
const artifacts = airJsonPath
|
|
22
|
-
? await resolveArtifacts(airJsonPath)
|
|
23
|
-
: emptyArtifacts();
|
|
17
|
+
const { artifacts } = result;
|
|
24
18
|
const listType = type;
|
|
25
19
|
switch (listType) {
|
|
26
20
|
case "skills": {
|
|
@@ -68,9 +62,18 @@ export function listCommand() {
|
|
|
68
62
|
console.log(`Plugins (${entries.length}):\n`);
|
|
69
63
|
for (const [id, plugin] of entries) {
|
|
70
64
|
const title = plugin.title ? ` (${plugin.title})` : "";
|
|
71
|
-
|
|
65
|
+
const version = plugin.version ? ` v${plugin.version}` : "";
|
|
66
|
+
console.log(` ${id}${title}${version}`);
|
|
72
67
|
console.log(` ${plugin.description}`);
|
|
73
|
-
|
|
68
|
+
if (plugin.skills?.length) {
|
|
69
|
+
console.log(` Skills: ${plugin.skills.join(", ")}`);
|
|
70
|
+
}
|
|
71
|
+
if (plugin.mcp_servers?.length) {
|
|
72
|
+
console.log(` MCP Servers: ${plugin.mcp_servers.join(", ")}`);
|
|
73
|
+
}
|
|
74
|
+
if (plugin.hooks?.length) {
|
|
75
|
+
console.log(` Hooks: ${plugin.hooks.join(", ")}`);
|
|
76
|
+
}
|
|
74
77
|
console.log();
|
|
75
78
|
}
|
|
76
79
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,cAAc,IAAI,OAAO,CAmExC"}
|
package/dist/commands/prepare.js
CHANGED
|
@@ -1,61 +1,39 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { getAirJsonPath, resolveArtifacts, } from "@pulsemcp/air-core";
|
|
4
|
-
import { findAdapter, listAvailableAdapters } from "../adapter-registry.js";
|
|
2
|
+
import { prepareSession } from "@pulsemcp/air-sdk";
|
|
5
3
|
export function prepareCommand() {
|
|
6
4
|
const cmd = new Command("prepare")
|
|
7
5
|
.description("Prepare a target directory for an agent session (write .mcp.json, inject skills) without starting the agent")
|
|
8
6
|
.option("--config <path>", "Path to air.json (defaults to AIR_CONFIG env or ~/.air/air.json)")
|
|
9
|
-
.option("--root <name>", "Root to activate (
|
|
7
|
+
.option("--root <name>", "Root to activate (auto-detected from cwd when omitted)")
|
|
10
8
|
.option("--target <dir>", "Target directory to prepare (defaults to cwd)", process.cwd())
|
|
11
9
|
.option("--adapter <name>", "Agent adapter to use (e.g., claude)", "claude")
|
|
12
10
|
.option("--skills <ids>", "Comma-separated skill IDs (overrides root defaults)")
|
|
13
11
|
.option("--mcp-servers <ids>", "Comma-separated MCP server IDs (overrides root defaults)")
|
|
14
12
|
.action(async (options) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
:
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
try {
|
|
14
|
+
const result = await prepareSession({
|
|
15
|
+
config: options.config,
|
|
16
|
+
root: options.root,
|
|
17
|
+
target: options.target,
|
|
18
|
+
adapter: options.adapter,
|
|
19
|
+
skills: options.skills
|
|
20
|
+
? options.skills.split(",").map((s) => s.trim())
|
|
21
|
+
: undefined,
|
|
22
|
+
mcpServers: options.mcpServers
|
|
23
|
+
? options.mcpServers.split(",").map((s) => s.trim())
|
|
24
|
+
: undefined,
|
|
25
|
+
});
|
|
26
|
+
if (result.rootAutoDetected && result.root) {
|
|
27
|
+
console.error(`Auto-detected root: ${result.root.name}`);
|
|
28
|
+
}
|
|
29
|
+
// Output structured JSON to stdout for orchestrator consumption
|
|
30
|
+
console.log(JSON.stringify(result.session, null, 2));
|
|
24
31
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
console.error("Error: No air.json found. Specify --config or set AIR_CONFIG env var.");
|
|
32
|
+
catch (err) {
|
|
33
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
34
|
+
console.error(`Error: ${message}`);
|
|
29
35
|
process.exit(1);
|
|
30
36
|
}
|
|
31
|
-
// Load and resolve all artifacts
|
|
32
|
-
const artifacts = await resolveArtifacts(airJsonPath);
|
|
33
|
-
const baseDir = dirname(airJsonPath);
|
|
34
|
-
// Resolve root if specified
|
|
35
|
-
let root;
|
|
36
|
-
if (options.root) {
|
|
37
|
-
root = artifacts.roots[options.root];
|
|
38
|
-
if (!root) {
|
|
39
|
-
console.error(`Error: Root "${options.root}" not found. Available roots: ${Object.keys(artifacts.roots).join(", ") || "(none)"}`);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// Parse overrides
|
|
44
|
-
const skillOverrides = options.skills
|
|
45
|
-
? options.skills.split(",").map((s) => s.trim())
|
|
46
|
-
: undefined;
|
|
47
|
-
const mcpServerOverrides = options.mcpServers
|
|
48
|
-
? options.mcpServers.split(",").map((s) => s.trim())
|
|
49
|
-
: undefined;
|
|
50
|
-
// Prepare the session
|
|
51
|
-
const result = await adapter.prepareSession(artifacts, options.target, {
|
|
52
|
-
root,
|
|
53
|
-
baseDir,
|
|
54
|
-
skillOverrides,
|
|
55
|
-
mcpServerOverrides,
|
|
56
|
-
});
|
|
57
|
-
// Output structured JSON to stdout for orchestrator consumption
|
|
58
|
-
console.log(JSON.stringify(result, null, 2));
|
|
59
37
|
});
|
|
60
38
|
return cmd;
|
|
61
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SAC/B,WAAW,CACV,6GAA6G,CAC9G;SACA,MAAM,CACL,iBAAiB,EACjB,kEAAkE,CACnE;SACA,MAAM,CAAC,eAAe,EAAE,wDAAwD,CAAC;SACjF,MAAM,CACL,gBAAgB,EAChB,+CAA+C,EAC/C,OAAO,CAAC,GAAG,EAAE,CACd;SACA,MAAM,CACL,kBAAkB,EAClB,qCAAqC,EACrC,QAAQ,CACT;SACA,MAAM,CACL,gBAAgB,EAChB,qDAAqD,CACtD;SACA,MAAM,CACL,qBAAqB,EACrB,0DAA0D,CAC3D;SACA,MAAM,CACL,KAAK,EAAE,OAON,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACpB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChD,CAAC,CAAC,SAAS;gBACb,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC5B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpD,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,gEAAgE;YAChE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,YAAY,IAAI,OAAO,CAwDtC"}
|
package/dist/commands/start.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { findAdapter, listAvailableAdapters } from "../adapter-registry.js";
|
|
2
|
+
import { startSession, } from "@pulsemcp/air-sdk";
|
|
4
3
|
export function startCommand() {
|
|
5
4
|
const cmd = new Command("start")
|
|
6
5
|
.description("Start an agent session with AIR configs loaded")
|
|
@@ -9,48 +8,31 @@ export function startCommand() {
|
|
|
9
8
|
.option("--dry-run", "Show what would be activated without starting")
|
|
10
9
|
.option("--skip-confirmation", "Don't prompt for confirmation before starting")
|
|
11
10
|
.action(async (agent, options) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
: "No adapters installed";
|
|
19
|
-
console.error(`Error: No adapter found for "${agent}". ${availableMsg}.\n` +
|
|
20
|
-
`Install an adapter: npm install @pulsemcp/air-adapter-${agent}`);
|
|
21
|
-
process.exit(1);
|
|
11
|
+
let result;
|
|
12
|
+
try {
|
|
13
|
+
result = await startSession(agent, {
|
|
14
|
+
root: options.root,
|
|
15
|
+
checkAvailability: !options.dryRun,
|
|
16
|
+
});
|
|
22
17
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
: emptyArtifacts();
|
|
28
|
-
// Resolve root if specified
|
|
29
|
-
let root;
|
|
30
|
-
if (options.root) {
|
|
31
|
-
root = artifacts.roots[options.root];
|
|
32
|
-
if (!root) {
|
|
33
|
-
console.error(`Error: Root "${options.root}" not found. Available roots: ${Object.keys(artifacts.roots).join(", ") || "(none)"}`);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
20
|
+
console.error(`Error: ${message}`);
|
|
21
|
+
process.exit(1);
|
|
36
22
|
}
|
|
37
|
-
// Generate config
|
|
38
|
-
const sessionConfig = adapter.generateConfig(artifacts, root);
|
|
39
23
|
// Dry run
|
|
40
24
|
if (options.dryRun) {
|
|
41
|
-
printDryRun(agent, artifacts, root);
|
|
25
|
+
printDryRun(agent, result.artifacts, result.root);
|
|
42
26
|
process.exit(0);
|
|
43
27
|
}
|
|
44
28
|
// Check if agent is available
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
console.error(`Error: ${adapter.displayName} is not installed or not in PATH.`);
|
|
29
|
+
if (!result.agentAvailable) {
|
|
30
|
+
console.error(`Error: ${result.adapterDisplayName} is not installed or not in PATH.`);
|
|
48
31
|
process.exit(1);
|
|
49
32
|
}
|
|
50
|
-
printDryRun(agent, artifacts, root);
|
|
51
|
-
|
|
52
|
-
console.log(
|
|
53
|
-
console.log(`Command: ${startCmd.command} ${startCmd.args.join(" ")}`);
|
|
33
|
+
printDryRun(agent, result.artifacts, result.root);
|
|
34
|
+
console.log(`\nStarting ${result.adapterDisplayName}...`);
|
|
35
|
+
console.log(`Command: ${result.startCommand.command} ${result.startCommand.args.join(" ")}`);
|
|
54
36
|
});
|
|
55
37
|
return cmd;
|
|
56
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,eAAe,IAAI,OAAO,CAoCzC"}
|
|
@@ -1,59 +1,31 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import {
|
|
3
|
-
import { resolve } from "path";
|
|
4
|
-
import { detectSchemaType, detectSchemaFromValue, isValidSchemaType, validateJson, } from "@pulsemcp/air-core";
|
|
2
|
+
import { validateFile } from "@pulsemcp/air-sdk";
|
|
5
3
|
export function validateCommand() {
|
|
6
4
|
const cmd = new Command("validate")
|
|
7
5
|
.description("Validate a JSON file against its AIR schema")
|
|
8
6
|
.argument("<file>", "Path to the JSON file to validate")
|
|
9
7
|
.option("--schema <type>", "Override schema detection (air, skills, references, mcp, plugins, roots, hooks)")
|
|
10
8
|
.action((file, options) => {
|
|
11
|
-
const filePath = resolve(process.cwd(), file);
|
|
12
|
-
let data;
|
|
13
9
|
try {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const message = err instanceof Error ? err.message : "Unknown error";
|
|
19
|
-
console.error(`Error: Could not read or parse "${file}": ${message}`);
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
// Determine schema type: --schema flag > $schema in JSON > filename substring
|
|
23
|
-
let schemaType = null;
|
|
24
|
-
if (options.schema) {
|
|
25
|
-
if (!isValidSchemaType(options.schema)) {
|
|
26
|
-
console.error(`Error: Unknown schema type "${options.schema}". Valid types: air, skills, references, mcp, plugins, roots, hooks`);
|
|
27
|
-
process.exit(1);
|
|
10
|
+
const result = validateFile(file, { schema: options.schema });
|
|
11
|
+
if (result.valid) {
|
|
12
|
+
console.log(`\u2713 ${file} is valid (schema: ${result.schemaType})`);
|
|
13
|
+
process.exit(0);
|
|
28
14
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const schemaValue = data.$schema;
|
|
36
|
-
if (typeof schemaValue === "string") {
|
|
37
|
-
schemaType = detectSchemaFromValue(schemaValue);
|
|
15
|
+
else {
|
|
16
|
+
console.error(`\u2717 ${file} has validation errors (schema: ${result.schemaType}):`);
|
|
17
|
+
for (const error of result.validation.errors) {
|
|
18
|
+
console.error(` ${error.path}: ${error.message}`);
|
|
19
|
+
}
|
|
20
|
+
process.exit(1);
|
|
38
21
|
}
|
|
39
22
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
console.error(`Error: Could not detect schema type for "${file}". Use --schema to specify.`);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
const result = validateJson(data, schemaType);
|
|
48
|
-
if (result.valid) {
|
|
49
|
-
console.log(`\u2713 ${file} is valid (schema: ${schemaType})`);
|
|
50
|
-
process.exit(0);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
console.error(`\u2717 ${file} has validation errors (schema: ${schemaType}):`);
|
|
54
|
-
for (const error of result.errors) {
|
|
55
|
-
console.error(` ${error.path}: ${error.message}`);
|
|
23
|
+
catch (err) {
|
|
24
|
+
let message = err instanceof Error ? err.message : "Unknown error";
|
|
25
|
+
if (message.includes("Could not detect schema type")) {
|
|
26
|
+
message += " Use --schema to specify.";
|
|
56
27
|
}
|
|
28
|
+
console.error(`Error: ${message}`);
|
|
57
29
|
process.exit(1);
|
|
58
30
|
}
|
|
59
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;SAChC,WAAW,CAAC,6CAA6C,CAAC;SAC1D,QAAQ,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACvD,MAAM,CACL,iBAAiB,EACjB,iFAAiF,CAClF;SACA,MAAM,CAAC,CAAC,IAAY,EAAE,OAA4B,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAE9D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,sBAAsB,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,UAAU,IAAI,mCAAmC,MAAM,CAAC,UAAU,IAAI,CACvE,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,GACT,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,2BAA2B,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ const program = new Command();
|
|
|
9
9
|
program
|
|
10
10
|
.name("air")
|
|
11
11
|
.description("AIR \u2014 Agent Infrastructure Repository CLI")
|
|
12
|
-
.version("0.0.
|
|
12
|
+
.version("0.0.3");
|
|
13
13
|
program.addCommand(validateCommand());
|
|
14
14
|
program.addCommand(startCommand());
|
|
15
15
|
program.addCommand(prepareCommand());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pulsemcp/air-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -26,8 +26,7 @@
|
|
|
26
26
|
"lint": "tsc --noEmit"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@pulsemcp/air-
|
|
30
|
-
"@pulsemcp/air-adapter-claude": "0.0.2",
|
|
29
|
+
"@pulsemcp/air-sdk": "0.0.4",
|
|
31
30
|
"commander": "^12.1.0",
|
|
32
31
|
"chalk": "^5.3.0"
|
|
33
32
|
},
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { AgentAdapter } from "@pulsemcp/air-core";
|
|
2
|
-
/**
|
|
3
|
-
* Find an adapter by agent name.
|
|
4
|
-
* Returns null if the adapter package isn't installed.
|
|
5
|
-
*/
|
|
6
|
-
export declare function findAdapter(name: string): Promise<AgentAdapter | null>;
|
|
7
|
-
/**
|
|
8
|
-
* List all available adapter names (installed packages only).
|
|
9
|
-
*/
|
|
10
|
-
export declare function listAvailableAdapters(): Promise<string[]>;
|
|
11
|
-
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAUrE;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsB9B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW/D"}
|
package/dist/adapter-registry.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Known adapter packages. The CLI tries to dynamically import each one.
|
|
3
|
-
* If the package is installed, its adapter is available. If not, it's skipped.
|
|
4
|
-
*/
|
|
5
|
-
const KNOWN_ADAPTERS = [
|
|
6
|
-
{ name: "claude", packageName: "@pulsemcp/air-adapter-claude" },
|
|
7
|
-
];
|
|
8
|
-
/**
|
|
9
|
-
* Find an adapter by agent name.
|
|
10
|
-
* Returns null if the adapter package isn't installed.
|
|
11
|
-
*/
|
|
12
|
-
export async function findAdapter(name) {
|
|
13
|
-
// Check known adapters first
|
|
14
|
-
for (const known of KNOWN_ADAPTERS) {
|
|
15
|
-
if (known.name === name) {
|
|
16
|
-
try {
|
|
17
|
-
const mod = await import(known.packageName);
|
|
18
|
-
const ext = mod.default;
|
|
19
|
-
return ext?.adapter ?? null;
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// Try convention-based package name: @pulsemcp/air-adapter-{name}
|
|
27
|
-
try {
|
|
28
|
-
const mod = await import(`@pulsemcp/air-adapter-${name}`);
|
|
29
|
-
const ext = mod.default;
|
|
30
|
-
return ext?.adapter ?? null;
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* List all available adapter names (installed packages only).
|
|
38
|
-
*/
|
|
39
|
-
export async function listAvailableAdapters() {
|
|
40
|
-
const available = [];
|
|
41
|
-
for (const known of KNOWN_ADAPTERS) {
|
|
42
|
-
try {
|
|
43
|
-
await import(known.packageName);
|
|
44
|
-
available.push(known.name);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// Not installed
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return available;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../src/adapter-registry.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,cAAc,GAA4C;IAC9D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;CAChE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY;IAEZ,6BAA6B;IAC7B,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAmC,CAAC;gBACpD,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,OAAmC,CAAC;QACpD,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|