@pulsemcp/air-cli 0.0.1 → 0.0.3
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.
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type RootEntry } from "@pulsemcp/air-core";
|
|
3
|
+
/**
|
|
4
|
+
* Normalize a git remote URL to a comparable form: "github.com/owner/repo"
|
|
5
|
+
* Handles HTTPS, SSH (git@), and trailing .git.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeGitUrl(url: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Detect which root matches the current git repository and subdirectory.
|
|
10
|
+
*
|
|
11
|
+
* Algorithm:
|
|
12
|
+
* 1. Get the git remote URL and relative subdirectory from targetDir
|
|
13
|
+
* 2. Normalize the URL and compare against all root URLs
|
|
14
|
+
* 3. Among roots with matching URLs, pick the best subdirectory match:
|
|
15
|
+
* - Exact match (root.subdirectory === current subdirectory)
|
|
16
|
+
* - Longest prefix match
|
|
17
|
+
* - Root-level (no subdirectory / empty subdirectory)
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectRoot(roots: Record<string, RootEntry>, targetDir: string): RootEntry | undefined;
|
|
20
|
+
export declare function prepareCommand(): Command;
|
|
21
|
+
//# sourceMappingURL=prepare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAC;AAG5B;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,SAAS,EAAE,MAAM,GAChB,SAAS,GAAG,SAAS,CAkEvB;AAED,wBAAgB,cAAc,IAAI,OAAO,CA2GxC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
import { getAirJsonPath, resolveArtifacts, } from "@pulsemcp/air-core";
|
|
5
|
+
import { findAdapter, listAvailableAdapters } from "../adapter-registry.js";
|
|
6
|
+
/**
|
|
7
|
+
* Normalize a git remote URL to a comparable form: "github.com/owner/repo"
|
|
8
|
+
* Handles HTTPS, SSH (git@), and trailing .git.
|
|
9
|
+
*/
|
|
10
|
+
export function normalizeGitUrl(url) {
|
|
11
|
+
let normalized = url.trim();
|
|
12
|
+
// SSH format: git@github.com:owner/repo.git → github.com/owner/repo
|
|
13
|
+
const sshMatch = normalized.match(/^git@([^:]+):(.+)$/);
|
|
14
|
+
if (sshMatch) {
|
|
15
|
+
normalized = `${sshMatch[1]}/${sshMatch[2]}`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// HTTPS format: https://github.com/owner/repo.git → github.com/owner/repo
|
|
19
|
+
normalized = normalized.replace(/^https?:\/\//, "");
|
|
20
|
+
}
|
|
21
|
+
// Strip trailing .git
|
|
22
|
+
normalized = normalized.replace(/\.git$/, "");
|
|
23
|
+
// Strip trailing slash
|
|
24
|
+
normalized = normalized.replace(/\/$/, "");
|
|
25
|
+
return normalized;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detect which root matches the current git repository and subdirectory.
|
|
29
|
+
*
|
|
30
|
+
* Algorithm:
|
|
31
|
+
* 1. Get the git remote URL and relative subdirectory from targetDir
|
|
32
|
+
* 2. Normalize the URL and compare against all root URLs
|
|
33
|
+
* 3. Among roots with matching URLs, pick the best subdirectory match:
|
|
34
|
+
* - Exact match (root.subdirectory === current subdirectory)
|
|
35
|
+
* - Longest prefix match
|
|
36
|
+
* - Root-level (no subdirectory / empty subdirectory)
|
|
37
|
+
*/
|
|
38
|
+
export function detectRoot(roots, targetDir) {
|
|
39
|
+
let remoteUrl;
|
|
40
|
+
let relativeDir;
|
|
41
|
+
try {
|
|
42
|
+
remoteUrl = execSync("git remote get-url origin", {
|
|
43
|
+
cwd: targetDir,
|
|
44
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
45
|
+
encoding: "utf-8",
|
|
46
|
+
}).trim();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Not in a git repo or no remote — can't auto-detect
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
relativeDir = execSync("git rev-parse --show-prefix", {
|
|
54
|
+
cwd: targetDir,
|
|
55
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
56
|
+
encoding: "utf-8",
|
|
57
|
+
}).trim();
|
|
58
|
+
// Remove trailing slash
|
|
59
|
+
relativeDir = relativeDir.replace(/\/$/, "");
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
relativeDir = "";
|
|
63
|
+
}
|
|
64
|
+
const normalizedRemote = normalizeGitUrl(remoteUrl);
|
|
65
|
+
// Find all roots whose URL matches this repo
|
|
66
|
+
const matchingRoots = [];
|
|
67
|
+
for (const root of Object.values(roots)) {
|
|
68
|
+
if (!root.url)
|
|
69
|
+
continue;
|
|
70
|
+
const normalizedRootUrl = normalizeGitUrl(root.url);
|
|
71
|
+
if (normalizedRemote === normalizedRootUrl) {
|
|
72
|
+
matchingRoots.push(root);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (matchingRoots.length === 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
// Find best subdirectory match
|
|
78
|
+
// Priority: exact match → longest prefix → root-level (no/empty subdirectory)
|
|
79
|
+
const rootSubdir = (r) => (r.subdirectory || "").replace(/\/$/, "");
|
|
80
|
+
// 1. Exact match
|
|
81
|
+
const exact = matchingRoots.find((r) => rootSubdir(r) === relativeDir);
|
|
82
|
+
if (exact)
|
|
83
|
+
return exact;
|
|
84
|
+
// 2. Longest prefix match (current dir is within root's subdirectory)
|
|
85
|
+
const prefixMatches = matchingRoots
|
|
86
|
+
.filter((r) => {
|
|
87
|
+
const sub = rootSubdir(r);
|
|
88
|
+
if (!sub)
|
|
89
|
+
return false;
|
|
90
|
+
return relativeDir.startsWith(sub + "/") || relativeDir === sub;
|
|
91
|
+
})
|
|
92
|
+
.sort((a, b) => rootSubdir(b).length - rootSubdir(a).length);
|
|
93
|
+
if (prefixMatches.length > 0)
|
|
94
|
+
return prefixMatches[0];
|
|
95
|
+
// 3. Root-level fallback (root with no subdirectory)
|
|
96
|
+
const rootLevel = matchingRoots.find((r) => !rootSubdir(r));
|
|
97
|
+
if (rootLevel)
|
|
98
|
+
return rootLevel;
|
|
99
|
+
// 4. Any matching root as last resort
|
|
100
|
+
return matchingRoots[0];
|
|
101
|
+
}
|
|
102
|
+
export function prepareCommand() {
|
|
103
|
+
const cmd = new Command("prepare")
|
|
104
|
+
.description("Prepare a target directory for an agent session (write .mcp.json, inject skills) without starting the agent")
|
|
105
|
+
.option("--config <path>", "Path to air.json (defaults to AIR_CONFIG env or ~/.air/air.json)")
|
|
106
|
+
.option("--root <name>", "Root to activate (auto-detected from cwd when omitted)")
|
|
107
|
+
.option("--target <dir>", "Target directory to prepare (defaults to cwd)", process.cwd())
|
|
108
|
+
.option("--adapter <name>", "Agent adapter to use (e.g., claude)", "claude")
|
|
109
|
+
.option("--skills <ids>", "Comma-separated skill IDs (overrides root defaults)")
|
|
110
|
+
.option("--mcp-servers <ids>", "Comma-separated MCP server IDs (overrides root defaults)")
|
|
111
|
+
.action(async (options) => {
|
|
112
|
+
// Find the adapter
|
|
113
|
+
const adapter = await findAdapter(options.adapter);
|
|
114
|
+
if (!adapter) {
|
|
115
|
+
const available = await listAvailableAdapters();
|
|
116
|
+
const availableMsg = available.length > 0
|
|
117
|
+
? `Available: ${available.join(", ")}`
|
|
118
|
+
: "No adapters installed";
|
|
119
|
+
console.error(`Error: No adapter found for "${options.adapter}". ${availableMsg}.`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
// Resolve air.json path
|
|
123
|
+
const airJsonPath = options.config || getAirJsonPath();
|
|
124
|
+
if (!airJsonPath) {
|
|
125
|
+
console.error("Error: No air.json found. Specify --config or set AIR_CONFIG env var.");
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
// Load and resolve all artifacts
|
|
129
|
+
const artifacts = await resolveArtifacts(airJsonPath);
|
|
130
|
+
// Resolve root: explicit --root, auto-detect, or none
|
|
131
|
+
let root;
|
|
132
|
+
if (options.root) {
|
|
133
|
+
root = artifacts.roots[options.root];
|
|
134
|
+
if (!root) {
|
|
135
|
+
console.error(`Error: Root "${options.root}" not found. Available roots: ${Object.keys(artifacts.roots).join(", ") || "(none)"}`);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Auto-detect from target directory's git context
|
|
141
|
+
const targetDir = resolve(options.target);
|
|
142
|
+
root = detectRoot(artifacts.roots, targetDir);
|
|
143
|
+
if (root) {
|
|
144
|
+
console.error(`Auto-detected root: ${root.name}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Parse overrides
|
|
148
|
+
const skillOverrides = options.skills
|
|
149
|
+
? options.skills.split(",").map((s) => s.trim())
|
|
150
|
+
: undefined;
|
|
151
|
+
const mcpServerOverrides = options.mcpServers
|
|
152
|
+
? options.mcpServers.split(",").map((s) => s.trim())
|
|
153
|
+
: undefined;
|
|
154
|
+
// Prepare the session
|
|
155
|
+
const result = await adapter.prepareSession(artifacts, options.target, {
|
|
156
|
+
root,
|
|
157
|
+
skillOverrides,
|
|
158
|
+
mcpServerOverrides,
|
|
159
|
+
});
|
|
160
|
+
// Output structured JSON to stdout for orchestrator consumption
|
|
161
|
+
console.log(JSON.stringify(result, null, 2));
|
|
162
|
+
});
|
|
163
|
+
return cmd;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { validateCommand } from "./commands/validate.js";
|
|
4
4
|
import { startCommand } from "./commands/start.js";
|
|
5
|
+
import { prepareCommand } from "./commands/prepare.js";
|
|
5
6
|
import { listCommand } from "./commands/list.js";
|
|
6
7
|
import { initCommand } from "./commands/init.js";
|
|
7
8
|
const program = new Command();
|
|
8
9
|
program
|
|
9
10
|
.name("air")
|
|
10
11
|
.description("AIR \u2014 Agent Infrastructure Repository CLI")
|
|
11
|
-
.version("0.0.
|
|
12
|
+
.version("0.0.3");
|
|
12
13
|
program.addCommand(validateCommand());
|
|
13
14
|
program.addCommand(startCommand());
|
|
15
|
+
program.addCommand(prepareCommand());
|
|
14
16
|
program.addCommand(listCommand());
|
|
15
17
|
program.addCommand(initCommand());
|
|
16
18
|
program.parseAsync();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pulsemcp/air-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"lint": "tsc --noEmit"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@pulsemcp/air-core": "0.0.
|
|
30
|
-
"@pulsemcp/air-adapter-claude": "0.0.
|
|
29
|
+
"@pulsemcp/air-core": "0.0.3",
|
|
30
|
+
"@pulsemcp/air-adapter-claude": "0.0.3",
|
|
31
31
|
"commander": "^12.1.0",
|
|
32
32
|
"chalk": "^5.3.0"
|
|
33
33
|
},
|