agenticros 0.3.3 → 0.3.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/README.md +8 -5
- package/dist/__tests__/claude-config.test.d.ts +2 -0
- package/dist/__tests__/claude-config.test.d.ts.map +1 -0
- package/dist/__tests__/claude-config.test.js +77 -0
- package/dist/__tests__/claude-config.test.js.map +1 -0
- package/dist/__tests__/mcp-setup.test.d.ts +2 -0
- package/dist/__tests__/mcp-setup.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-setup.test.js +23 -0
- package/dist/__tests__/mcp-setup.test.js.map +1 -0
- package/dist/commands/claude.d.ts +16 -0
- package/dist/commands/claude.d.ts.map +1 -0
- package/dist/commands/claude.js +30 -0
- package/dist/commands/claude.js.map +1 -0
- package/dist/commands/codex.d.ts +4 -4
- package/dist/commands/codex.d.ts.map +1 -1
- package/dist/commands/codex.js +21 -90
- package/dist/commands/codex.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +22 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hermes.d.ts +3 -3
- package/dist/commands/hermes.d.ts.map +1 -1
- package/dist/commands/hermes.js +13 -76
- package/dist/commands/hermes.js.map +1 -1
- package/dist/commands/init.d.ts +2 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +16 -38
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +20 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +31 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -1
- package/dist/util/claude-config.d.ts +47 -0
- package/dist/util/claude-config.d.ts.map +1 -0
- package/dist/util/claude-config.js +227 -0
- package/dist/util/claude-config.js.map +1 -0
- package/dist/util/mcp-setup.d.ts +55 -0
- package/dist/util/mcp-setup.d.ts.map +1 -0
- package/dist/util/mcp-setup.js +235 -0
- package/dist/util/mcp-setup.js.map +1 -0
- package/package.json +1 -1
- package/runtime/BUNDLE.json +1 -1
- package/runtime/docs/cli.md +53 -13
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read/write helpers for Claude MCP config (`.mcp.json` and Claude Desktop JSON).
|
|
3
|
+
*
|
|
4
|
+
* Claude Code uses project `.mcp.json` (or user scope via `claude mcp add`).
|
|
5
|
+
* Claude Desktop uses `claude_desktop_config.json` under OS-specific paths.
|
|
6
|
+
* We only manage the `agenticros` entry — other servers are preserved.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { homedir, platform } from "node:os";
|
|
10
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
11
|
+
const AGENTICROS_SERVER_KEY = "agenticros";
|
|
12
|
+
/** Project-scoped MCP config: `<cwd>/.mcp.json`. */
|
|
13
|
+
export function projectMcpJsonPath(cwd = process.cwd()) {
|
|
14
|
+
return join(cwd, ".mcp.json");
|
|
15
|
+
}
|
|
16
|
+
/** Claude Desktop MCP config (macOS / Windows). */
|
|
17
|
+
export function claudeDesktopConfigPath() {
|
|
18
|
+
const home = homedir();
|
|
19
|
+
if (platform() === "win32") {
|
|
20
|
+
const appData = process.env["APPDATA"] ?? join(home, "AppData", "Roaming");
|
|
21
|
+
return join(appData, "Claude", "claude_desktop_config.json");
|
|
22
|
+
}
|
|
23
|
+
return join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
24
|
+
}
|
|
25
|
+
export function resolveClaudeConfigPath(target, cwd = process.cwd()) {
|
|
26
|
+
return target === "project" ? projectMcpJsonPath(cwd) : claudeDesktopConfigPath();
|
|
27
|
+
}
|
|
28
|
+
/** Agenticros MCP server block (stdio + sh -c wrapper for log redirection). */
|
|
29
|
+
export function buildAgenticrosMcpServerEntry(mcpEntryAbs, namespace = "") {
|
|
30
|
+
const escaped = mcpEntryAbs.replace(/\\/g, "\\\\");
|
|
31
|
+
const shellCmd = `node ${escaped} 2>>/tmp/agenticros-mcp.log`;
|
|
32
|
+
return {
|
|
33
|
+
type: "stdio",
|
|
34
|
+
command: "sh",
|
|
35
|
+
args: ["-c", shellCmd],
|
|
36
|
+
env: {
|
|
37
|
+
AGENTICROS_ROBOT_NAMESPACE: namespace,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Merge agenticros into an MCP JSON document, preserving other keys and $comment. */
|
|
42
|
+
export function upsertAgenticrosMcpJson(existingContent, serverEntry) {
|
|
43
|
+
let root = {};
|
|
44
|
+
if (existingContent?.trim()) {
|
|
45
|
+
try {
|
|
46
|
+
const parsed = JSON.parse(existingContent);
|
|
47
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
48
|
+
root = { ...parsed };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
root = {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const servers = root["mcpServers"] && typeof root["mcpServers"] === "object" && !Array.isArray(root["mcpServers"])
|
|
56
|
+
? { ...root["mcpServers"] }
|
|
57
|
+
: {};
|
|
58
|
+
servers[AGENTICROS_SERVER_KEY] = serverEntry;
|
|
59
|
+
root["mcpServers"] = servers;
|
|
60
|
+
return `${JSON.stringify(root, null, 2)}\n`;
|
|
61
|
+
}
|
|
62
|
+
export function writeClaudeAgenticrosConfig(configPath, mcpEntryAbs, options) {
|
|
63
|
+
const abs = resolve(mcpEntryAbs);
|
|
64
|
+
const entry = buildAgenticrosMcpServerEntry(abs, options?.namespace ?? "");
|
|
65
|
+
const existing = existsSync(configPath) ? readFileSync(configPath, "utf8") : null;
|
|
66
|
+
const merged = upsertAgenticrosMcpJson(existing, entry);
|
|
67
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
68
|
+
writeFileSync(configPath, merged, "utf8");
|
|
69
|
+
}
|
|
70
|
+
export function readClaudeAgenticrosConfig(configPath, target) {
|
|
71
|
+
const base = { configPath, exists: existsSync(configPath), target };
|
|
72
|
+
if (!base.exists)
|
|
73
|
+
return base;
|
|
74
|
+
let content;
|
|
75
|
+
try {
|
|
76
|
+
content = readFileSync(configPath, "utf8");
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return base;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const root = JSON.parse(content);
|
|
83
|
+
const servers = root["mcpServers"];
|
|
84
|
+
const entry = servers?.[AGENTICROS_SERVER_KEY];
|
|
85
|
+
if (!entry)
|
|
86
|
+
return base;
|
|
87
|
+
base.command = typeof entry["command"] === "string" ? entry["command"] : undefined;
|
|
88
|
+
base.args = Array.isArray(entry["args"])
|
|
89
|
+
? entry["args"].filter((a) => typeof a === "string")
|
|
90
|
+
: undefined;
|
|
91
|
+
base.env =
|
|
92
|
+
entry["env"] && typeof entry["env"] === "object" && !Array.isArray(entry["env"])
|
|
93
|
+
? Object.fromEntries(Object.entries(entry["env"]).filter((e) => typeof e[1] === "string"))
|
|
94
|
+
: undefined;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return base;
|
|
98
|
+
}
|
|
99
|
+
return base;
|
|
100
|
+
}
|
|
101
|
+
export function validateClaudeAgenticrosConfig(cfg, mcpEntryExpected) {
|
|
102
|
+
const issues = [];
|
|
103
|
+
const setupHint = cfg.target === "desktop"
|
|
104
|
+
? "Run `agenticros claude setup --desktop` or `agenticros mcp setup --claude --desktop`."
|
|
105
|
+
: "Run `agenticros claude setup` or `agenticros mcp setup --claude`.";
|
|
106
|
+
if (!cfg.exists) {
|
|
107
|
+
issues.push({
|
|
108
|
+
severity: "yellow",
|
|
109
|
+
message: `Claude MCP config missing (${cfg.configPath})`,
|
|
110
|
+
hint: setupHint,
|
|
111
|
+
});
|
|
112
|
+
return { ok: false, issues };
|
|
113
|
+
}
|
|
114
|
+
if (!cfg.command && (!cfg.args || cfg.args.length === 0)) {
|
|
115
|
+
issues.push({
|
|
116
|
+
severity: "red",
|
|
117
|
+
message: `Claude mcpServers.agenticros has no command or args (${cfg.target})`,
|
|
118
|
+
hint: setupHint,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const mcpPath = extractMcpPathFromArgs(cfg.args ?? []);
|
|
122
|
+
if (mcpPath && !isAbsolute(mcpPath.split(/\s/)[0] ?? mcpPath)) {
|
|
123
|
+
issues.push({
|
|
124
|
+
severity: "red",
|
|
125
|
+
message: "Claude MCP path is relative — Claude cwd is not the repo root",
|
|
126
|
+
hint: setupHint,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (mcpEntryExpected && mcpPath) {
|
|
130
|
+
const expected = resolve(mcpEntryExpected);
|
|
131
|
+
const actual = resolve(mcpPath.split(/\s/)[0] ?? mcpPath);
|
|
132
|
+
if (actual !== expected && !existsSync(actual)) {
|
|
133
|
+
issues.push({
|
|
134
|
+
severity: "red",
|
|
135
|
+
message: "Claude MCP path does not point to a built server",
|
|
136
|
+
hint: `Expected ${expected}. ${setupHint}`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else if (actual !== expected) {
|
|
140
|
+
issues.push({
|
|
141
|
+
severity: "yellow",
|
|
142
|
+
message: "Claude MCP path differs from the CLI-resolved MCP entry",
|
|
143
|
+
hint: `CLI expects ${expected}. ${setupHint}`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (mcpEntryExpected && !mcpPath) {
|
|
148
|
+
issues.push({
|
|
149
|
+
severity: "yellow",
|
|
150
|
+
message: "Could not parse MCP server path from Claude config",
|
|
151
|
+
hint: setupHint,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const ns = (cfg.env?.["AGENTICROS_ROBOT_NAMESPACE"] ?? "").trim();
|
|
155
|
+
if (ns.length > 0) {
|
|
156
|
+
issues.push({
|
|
157
|
+
severity: "yellow",
|
|
158
|
+
message: `Claude AGENTICROS_ROBOT_NAMESPACE is hardcoded ('${ns}')`,
|
|
159
|
+
hint: 'Leave it empty so `agenticros mode real|sim` drives the namespace (same as Codex/Hermes).',
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const hasRed = issues.some((i) => i.severity === "red");
|
|
163
|
+
return { ok: !hasRed && issues.length === 0, issues };
|
|
164
|
+
}
|
|
165
|
+
export function buildClaudeDoctorChecks(mcpEntryExpected, repoRoot) {
|
|
166
|
+
const checks = [];
|
|
167
|
+
const candidates = [
|
|
168
|
+
{ id: "claude-config-desktop", label: "Claude Desktop MCP", target: "desktop", path: claudeDesktopConfigPath() },
|
|
169
|
+
];
|
|
170
|
+
if (repoRoot) {
|
|
171
|
+
candidates.unshift({
|
|
172
|
+
id: "claude-config-project",
|
|
173
|
+
label: "Claude Code project MCP",
|
|
174
|
+
target: "project",
|
|
175
|
+
path: projectMcpJsonPath(repoRoot),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
for (const c of candidates) {
|
|
179
|
+
const cfg = readClaudeAgenticrosConfig(c.path, c.target);
|
|
180
|
+
if (!cfg.exists) {
|
|
181
|
+
if (c.target === "desktop") {
|
|
182
|
+
checks.push({
|
|
183
|
+
id: c.id,
|
|
184
|
+
label: "Claude Desktop MCP config missing",
|
|
185
|
+
severity: "yellow",
|
|
186
|
+
hint: "Run `agenticros mcp setup --claude` or `agenticros claude setup --desktop`.",
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const v = validateClaudeAgenticrosConfig(cfg, mcpEntryExpected);
|
|
192
|
+
if (v.ok) {
|
|
193
|
+
checks.push({
|
|
194
|
+
id: c.id,
|
|
195
|
+
label: `${c.label} OK`,
|
|
196
|
+
severity: "green",
|
|
197
|
+
detail: c.path,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
const worst = v.issues.some((i) => i.severity === "red") ? "red" : "yellow";
|
|
202
|
+
const first = v.issues[0];
|
|
203
|
+
checks.push({
|
|
204
|
+
id: c.id,
|
|
205
|
+
label: `${c.label}: ${first.message}`,
|
|
206
|
+
severity: worst,
|
|
207
|
+
hint: first.hint ?? "Run `agenticros mcp doctor`.",
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return checks;
|
|
212
|
+
}
|
|
213
|
+
function extractMcpPathFromArgs(args) {
|
|
214
|
+
if (args.length === 0)
|
|
215
|
+
return undefined;
|
|
216
|
+
if (args[0] === "-c" && args[1]) {
|
|
217
|
+
const nodeMatch = args[1].match(/node\s+(\S+)/);
|
|
218
|
+
return nodeMatch?.[1];
|
|
219
|
+
}
|
|
220
|
+
if (args[0] === "node" || args[0]?.endsWith("/node")) {
|
|
221
|
+
return args[1];
|
|
222
|
+
}
|
|
223
|
+
const joined = args.join(" ");
|
|
224
|
+
const nodeMatch = joined.match(/node\s+(\S+)/);
|
|
225
|
+
return nodeMatch?.[1];
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=claude-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../../src/util/claude-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified MCP host setup for Codex, Hermes, and Claude (Option C).
|
|
3
|
+
*
|
|
4
|
+
* All hosts register the same `@agenticros/claude-code` stdio server with an
|
|
5
|
+
* absolute path and empty AGENTICROS_ROBOT_NAMESPACE.
|
|
6
|
+
*/
|
|
7
|
+
import { type CodexConfigScope } from "./codex-config.js";
|
|
8
|
+
import { type ClaudeConfigTarget } from "./claude-config.js";
|
|
9
|
+
export type McpHostId = "codex" | "hermes" | "claude";
|
|
10
|
+
export interface McpSetupOptions {
|
|
11
|
+
/** Configure all hosts (default when no host flags). */
|
|
12
|
+
all?: boolean;
|
|
13
|
+
codex?: boolean;
|
|
14
|
+
hermes?: boolean;
|
|
15
|
+
claude?: boolean;
|
|
16
|
+
/** Codex project `.codex/config.toml` and/or Claude `.mcp.json` in repo root. */
|
|
17
|
+
project?: boolean;
|
|
18
|
+
/** Claude Desktop `claude_desktop_config.json` only (with --claude). */
|
|
19
|
+
desktop?: boolean;
|
|
20
|
+
/** Codex scope when only codex is targeted via legacy `codex setup --project`. */
|
|
21
|
+
codexScope?: CodexConfigScope;
|
|
22
|
+
quiet?: boolean;
|
|
23
|
+
repoRoot?: string;
|
|
24
|
+
cwd?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface McpDoctorOptions {
|
|
27
|
+
json?: boolean;
|
|
28
|
+
quiet?: boolean;
|
|
29
|
+
hosts?: McpHostId[];
|
|
30
|
+
repoRoot?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function codexOnPath(): Promise<boolean>;
|
|
33
|
+
export declare function hermesOnPath(): Promise<boolean>;
|
|
34
|
+
export declare function claudeOnPath(): Promise<boolean>;
|
|
35
|
+
export declare function resolveMcpHosts(opts: McpSetupOptions): McpHostId[];
|
|
36
|
+
export declare function requireMcpEntry(): string;
|
|
37
|
+
export declare function setupCodexMcp(mcpEntry: string, scope: CodexConfigScope, cwd?: string): string;
|
|
38
|
+
export declare function setupHermesMcp(mcpEntry: string): string;
|
|
39
|
+
export declare function setupClaudeMcp(mcpEntry: string, target: ClaudeConfigTarget, cwd?: string): string;
|
|
40
|
+
export declare function mcpSetupCommand(opts?: McpSetupOptions): Promise<void>;
|
|
41
|
+
export declare function buildMcpDoctorChecks(mcpEntryExpected: string | undefined, repoRoot?: string, hosts?: McpHostId[]): Array<{
|
|
42
|
+
id: string;
|
|
43
|
+
label: string;
|
|
44
|
+
severity: "green" | "yellow" | "red";
|
|
45
|
+
hint?: string;
|
|
46
|
+
detail?: string;
|
|
47
|
+
}>;
|
|
48
|
+
export interface McpDoctorResult {
|
|
49
|
+
hosts: McpHostId[];
|
|
50
|
+
mcpEntry: string | undefined;
|
|
51
|
+
checks: ReturnType<typeof buildMcpDoctorChecks>;
|
|
52
|
+
exitCode: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function mcpDoctorCommand(opts?: McpDoctorOptions): Promise<number>;
|
|
55
|
+
//# sourceMappingURL=mcp-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/util/mcp-setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAYrD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAYrD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,CAQlE;AAED,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,kBAAkB,EAC1B,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAKR;AAED,wBAAsB,eAAe,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE/E;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,SAAS,EAAE,GAClB,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5G;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwEnF"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified MCP host setup for Codex, Hermes, and Claude (Option C).
|
|
3
|
+
*
|
|
4
|
+
* All hosts register the same `@agenticros/claude-code` stdio server with an
|
|
5
|
+
* absolute path and empty AGENTICROS_ROBOT_NAMESPACE.
|
|
6
|
+
*/
|
|
7
|
+
import { execa } from "execa";
|
|
8
|
+
import { buildCodexDoctorChecks, globalCodexConfigPath, projectCodexConfigPath, writeCodexAgenticrosConfig, } from "./codex-config.js";
|
|
9
|
+
import { buildHermesDoctorChecks, globalHermesConfigPath, writeHermesAgenticrosConfig, } from "./hermes-config.js";
|
|
10
|
+
import { buildClaudeDoctorChecks, claudeDesktopConfigPath, projectMcpJsonPath, writeClaudeAgenticrosConfig, } from "./claude-config.js";
|
|
11
|
+
import { findMcpEntry } from "./mcp-discovery.js";
|
|
12
|
+
import { colors, info, ok, warn, err } from "./logger.js";
|
|
13
|
+
export async function codexOnPath() {
|
|
14
|
+
try {
|
|
15
|
+
const { exitCode } = await execa("codex", ["--version"], { reject: false });
|
|
16
|
+
return exitCode === 0;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function hermesOnPath() {
|
|
23
|
+
try {
|
|
24
|
+
const { exitCode } = await execa("hermes", ["--version"], { reject: false });
|
|
25
|
+
return exitCode === 0;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
try {
|
|
29
|
+
const { exitCode } = await execa("hermes", ["--help"], { reject: false });
|
|
30
|
+
return exitCode === 0;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function claudeOnPath() {
|
|
38
|
+
try {
|
|
39
|
+
const { exitCode } = await execa("claude", ["--version"], { reject: false });
|
|
40
|
+
return exitCode === 0;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
try {
|
|
44
|
+
const { exitCode } = await execa("claude", ["--help"], { reject: false });
|
|
45
|
+
return exitCode === 0;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function resolveMcpHosts(opts) {
|
|
53
|
+
if (opts.codexScope === "project" && opts.codex !== false) {
|
|
54
|
+
return ["codex"];
|
|
55
|
+
}
|
|
56
|
+
const explicit = ["codex", "hermes", "claude"].filter((h) => opts[h]);
|
|
57
|
+
if (explicit.length > 0)
|
|
58
|
+
return [...explicit];
|
|
59
|
+
if (opts.all !== false)
|
|
60
|
+
return ["codex", "hermes", "claude"];
|
|
61
|
+
return ["codex", "hermes", "claude"];
|
|
62
|
+
}
|
|
63
|
+
export function requireMcpEntry() {
|
|
64
|
+
const mcpEntry = findMcpEntry();
|
|
65
|
+
if (!mcpEntry) {
|
|
66
|
+
err("AgenticROS MCP server is not built.");
|
|
67
|
+
info("Run `pnpm --filter @agenticros/claude-code build` or `agenticros init` first.");
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
return mcpEntry;
|
|
71
|
+
}
|
|
72
|
+
export function setupCodexMcp(mcpEntry, scope, cwd) {
|
|
73
|
+
const configPath = scope === "global" ? globalCodexConfigPath() : projectCodexConfigPath(cwd);
|
|
74
|
+
writeCodexAgenticrosConfig(configPath, mcpEntry, { namespace: "" });
|
|
75
|
+
return configPath;
|
|
76
|
+
}
|
|
77
|
+
export function setupHermesMcp(mcpEntry) {
|
|
78
|
+
const configPath = globalHermesConfigPath();
|
|
79
|
+
writeHermesAgenticrosConfig(configPath, mcpEntry, { namespace: "" });
|
|
80
|
+
return configPath;
|
|
81
|
+
}
|
|
82
|
+
export function setupClaudeMcp(mcpEntry, target, cwd) {
|
|
83
|
+
const configPath = target === "project" ? projectMcpJsonPath(cwd) : claudeDesktopConfigPath();
|
|
84
|
+
writeClaudeAgenticrosConfig(configPath, mcpEntry, { namespace: "" });
|
|
85
|
+
return configPath;
|
|
86
|
+
}
|
|
87
|
+
export async function mcpSetupCommand(opts = {}) {
|
|
88
|
+
const mcpEntry = requireMcpEntry();
|
|
89
|
+
const hosts = resolveMcpHosts(opts);
|
|
90
|
+
const repoRoot = opts.repoRoot;
|
|
91
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
92
|
+
if (!opts.quiet) {
|
|
93
|
+
info(`Configuring AgenticROS MCP for: ${hosts.join(", ")}`);
|
|
94
|
+
info(`MCP server: ${mcpEntry}\n`);
|
|
95
|
+
}
|
|
96
|
+
const written = [];
|
|
97
|
+
const explicitHosts = ["codex", "hermes", "claude"].filter((h) => opts[h]);
|
|
98
|
+
const isFullSetup = explicitHosts.length === 0 || explicitHosts.length === 3;
|
|
99
|
+
if (hosts.includes("codex")) {
|
|
100
|
+
if (opts.codexScope === "project") {
|
|
101
|
+
written.push(setupCodexMcp(mcpEntry, "project", repoRoot ?? cwd));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
written.push(setupCodexMcp(mcpEntry, "global"));
|
|
105
|
+
if (opts.project || (isFullSetup && repoRoot)) {
|
|
106
|
+
written.push(setupCodexMcp(mcpEntry, "project", repoRoot ?? cwd));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (hosts.includes("hermes")) {
|
|
111
|
+
written.push(setupHermesMcp(mcpEntry));
|
|
112
|
+
}
|
|
113
|
+
if (hosts.includes("claude")) {
|
|
114
|
+
const desktopOnly = opts.desktop && !opts.project;
|
|
115
|
+
const projectOnly = opts.project && !opts.desktop;
|
|
116
|
+
if (!projectOnly) {
|
|
117
|
+
written.push(setupClaudeMcp(mcpEntry, "desktop"));
|
|
118
|
+
}
|
|
119
|
+
if (!desktopOnly && (opts.project || (isFullSetup && repoRoot) || projectOnly)) {
|
|
120
|
+
written.push(setupClaudeMcp(mcpEntry, "project", repoRoot ?? cwd));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
for (const path of written) {
|
|
124
|
+
ok(`Wrote: ${path}`);
|
|
125
|
+
}
|
|
126
|
+
if (hosts.includes("codex")) {
|
|
127
|
+
const hasCodex = await codexOnPath();
|
|
128
|
+
if (hasCodex) {
|
|
129
|
+
info("Codex CLI detected — verify with `/mcp` in a Codex session.");
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
warn("Codex CLI not on PATH.");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (hosts.includes("hermes")) {
|
|
136
|
+
const hasHermes = await hermesOnPath();
|
|
137
|
+
if (hasHermes) {
|
|
138
|
+
info("Hermes detected — run `/reload-mcp` or `hermes mcp test agenticros`.");
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
warn("Hermes CLI not on PATH.");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (hosts.includes("claude")) {
|
|
145
|
+
const hasClaude = await claudeOnPath();
|
|
146
|
+
if (hasClaude) {
|
|
147
|
+
info("Claude Code CLI detected — run `claude` from the project with `.mcp.json`.");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
warn("Claude CLI not on PATH (Desktop config may still apply).");
|
|
151
|
+
}
|
|
152
|
+
info("Restart Claude Desktop fully (Cmd+Q) after desktop config changes.");
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export function buildMcpDoctorChecks(mcpEntryExpected, repoRoot, hosts) {
|
|
156
|
+
const active = hosts ?? ["codex", "hermes", "claude"];
|
|
157
|
+
const checks = [];
|
|
158
|
+
if (active.includes("codex")) {
|
|
159
|
+
checks.push(...buildCodexDoctorChecks(mcpEntryExpected, repoRoot));
|
|
160
|
+
}
|
|
161
|
+
if (active.includes("hermes")) {
|
|
162
|
+
checks.push(...buildHermesDoctorChecks(mcpEntryExpected));
|
|
163
|
+
}
|
|
164
|
+
if (active.includes("claude")) {
|
|
165
|
+
checks.push(...buildClaudeDoctorChecks(mcpEntryExpected, repoRoot));
|
|
166
|
+
}
|
|
167
|
+
return checks;
|
|
168
|
+
}
|
|
169
|
+
export async function mcpDoctorCommand(opts = {}) {
|
|
170
|
+
const mcpEntry = findMcpEntry();
|
|
171
|
+
const hosts = opts.hosts ?? ["codex", "hermes", "claude"];
|
|
172
|
+
const checks = buildMcpDoctorChecks(mcpEntry, opts.repoRoot, hosts);
|
|
173
|
+
const cliChecks = [];
|
|
174
|
+
if (hosts.includes("codex")) {
|
|
175
|
+
const on = await codexOnPath();
|
|
176
|
+
cliChecks.push({
|
|
177
|
+
id: "codex-cli",
|
|
178
|
+
label: on ? "Codex CLI installed" : "Codex CLI not detected",
|
|
179
|
+
severity: on ? "green" : "yellow",
|
|
180
|
+
hint: on ? undefined : "Install from https://developers.openai.com/codex/",
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
if (hosts.includes("hermes")) {
|
|
184
|
+
const on = await hermesOnPath();
|
|
185
|
+
cliChecks.push({
|
|
186
|
+
id: "hermes-cli",
|
|
187
|
+
label: on ? "Hermes CLI installed" : "Hermes CLI not detected",
|
|
188
|
+
severity: on ? "green" : "yellow",
|
|
189
|
+
hint: on ? undefined : "Install from https://github.com/NousResearch/hermes-agent",
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (hosts.includes("claude")) {
|
|
193
|
+
const on = await claudeOnPath();
|
|
194
|
+
cliChecks.push({
|
|
195
|
+
id: "claude-cli",
|
|
196
|
+
label: on ? "Claude Code CLI installed" : "Claude Code CLI not detected",
|
|
197
|
+
severity: on ? "green" : "yellow",
|
|
198
|
+
hint: on ? undefined : "Install from https://claude.com/product/claude-code",
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
const allChecks = [...checks, ...cliChecks];
|
|
202
|
+
const exitCode = allChecks.some((c) => c.severity === "red")
|
|
203
|
+
? 1
|
|
204
|
+
: allChecks.some((c) => c.severity === "yellow")
|
|
205
|
+
? 0
|
|
206
|
+
: 0;
|
|
207
|
+
if (opts.json) {
|
|
208
|
+
process.stdout.write(JSON.stringify({ hosts, mcpEntry, checks: allChecks }, null, 2) + "\n");
|
|
209
|
+
return allChecks.some((c) => c.severity === "red") ? 1 : 0;
|
|
210
|
+
}
|
|
211
|
+
if (!opts.quiet) {
|
|
212
|
+
process.stdout.write(`${colors.bold("MCP doctor")}\n`);
|
|
213
|
+
if (!mcpEntry) {
|
|
214
|
+
err("MCP server not built.");
|
|
215
|
+
return 1;
|
|
216
|
+
}
|
|
217
|
+
info(`Expected MCP entry: ${mcpEntry}\n`);
|
|
218
|
+
}
|
|
219
|
+
for (const c of allChecks) {
|
|
220
|
+
const icon = c.severity === "green"
|
|
221
|
+
? colors.green("✓")
|
|
222
|
+
: c.severity === "red"
|
|
223
|
+
? colors.red("✗")
|
|
224
|
+
: colors.yellow("○");
|
|
225
|
+
process.stdout.write(` ${icon} ${c.label}\n`);
|
|
226
|
+
if ("detail" in c && c.detail) {
|
|
227
|
+
process.stdout.write(` ${colors.dim(c.detail)}\n`);
|
|
228
|
+
}
|
|
229
|
+
if (c.hint) {
|
|
230
|
+
process.stdout.write(` ${colors.dim("→ " + c.hint)}\n`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return allChecks.some((c) => c.severity === "red") ? 1 : 0;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=mcp-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/util/mcp-setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/runtime/BUNDLE.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packedAt": "2026-07-
|
|
2
|
+
"packedAt": "2026-07-06T14:26:08.936Z",
|
|
3
3
|
"repo": "https://github.com/PlaiPin/agenticros",
|
|
4
4
|
"note": "This directory is a snapshot of the agenticros monorepo source. `agenticros init` will copy it to ~/agenticros and run pnpm install + colcon build there.",
|
|
5
5
|
"layout": {
|