hermes-action-bridge 0.4.0 → 0.6.1
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/CHANGELOG.md +61 -0
- package/README.md +140 -15
- package/dist/adapters/hermes-cli.d.ts +14 -0
- package/dist/adapters/hermes-cli.js +80 -19
- package/dist/adapters/hermes-cli.js.map +1 -1
- package/dist/approvals.d.ts +35 -0
- package/dist/approvals.js +96 -0
- package/dist/approvals.js.map +1 -0
- package/dist/audit-log.d.ts +21 -0
- package/dist/audit-log.js +31 -0
- package/dist/audit-log.js.map +1 -0
- package/dist/capabilities.d.ts +29 -0
- package/dist/capabilities.js +24 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/cli.js +205 -18
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +8 -1
- package/dist/doctor.js +76 -13
- package/dist/doctor.js.map +1 -1
- package/dist/execution-gate.d.ts +5 -0
- package/dist/execution-gate.js +20 -0
- package/dist/execution-gate.js.map +1 -0
- package/dist/http-server.d.ts +18 -0
- package/dist/http-server.js +310 -0
- package/dist/http-server.js.map +1 -0
- package/dist/install/launcher.d.ts +3 -0
- package/dist/install/launcher.js +7 -0
- package/dist/install/launcher.js.map +1 -0
- package/dist/install/mcp-service.d.ts +44 -0
- package/dist/install/mcp-service.js +172 -0
- package/dist/install/mcp-service.js.map +1 -0
- package/dist/install/templates.js +38 -32
- package/dist/install/templates.js.map +1 -1
- package/dist/install/types.d.ts +1 -0
- package/dist/jobs.d.ts +51 -0
- package/dist/jobs.js +244 -0
- package/dist/jobs.js.map +1 -0
- package/dist/mcp-server.d.ts +32 -0
- package/dist/mcp-server.js +382 -25
- package/dist/mcp-server.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/validation.d.ts +1 -0
- package/dist/validation.js +8 -0
- package/dist/validation.js.map +1 -0
- package/docs/ARCHITECTURE.md +88 -7
- package/docs/FUNCTIONAL-TESTS.md +45 -12
- package/docs/SMITHERY.md +23 -0
- package/docs/distribution-runbook.md +515 -0
- package/examples/claude-code/SKILL.md +35 -29
- package/examples/codex/SKILL.md +35 -29
- package/package.json +12 -4
- package/plugins/hermes-action/.claude-plugin/plugin.json +12 -0
- package/plugins/hermes-action/.codex-plugin/plugin.json +30 -0
- package/plugins/hermes-action/.mcp.json +8 -0
- package/plugins/hermes-action/assets/app-icon.png +0 -0
- package/plugins/hermes-action/skills/hermes-action-bridge/SKILL.md +61 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BridgeMode, RiskCategory } from "./types.js";
|
|
2
|
+
export type AuditPhase = "prepared" | "approved" | "rejected" | "submitted" | "completed" | "cancelled" | "expired";
|
|
3
|
+
/** Deliberately narrow: prompts, context, tool output, credentials and bearer tokens are not representable. */
|
|
4
|
+
export interface AuditEvent {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
phase: AuditPhase;
|
|
7
|
+
requestId: string;
|
|
8
|
+
principalId: string;
|
|
9
|
+
transport: "stdio" | "http";
|
|
10
|
+
requestedMode: BridgeMode;
|
|
11
|
+
effectiveMode: BridgeMode;
|
|
12
|
+
presetName: string;
|
|
13
|
+
detectedRisks: RiskCategory[];
|
|
14
|
+
promptFingerprint: string;
|
|
15
|
+
exitCode?: number | undefined;
|
|
16
|
+
outcome?: "succeeded" | "failed" | "cancelled" | "timed_out" | undefined;
|
|
17
|
+
}
|
|
18
|
+
/** SHA-256 lets related events be correlated without retaining the private handoff. */
|
|
19
|
+
export declare function fingerprintPrompt(prompt: string): string;
|
|
20
|
+
/** Append a restricted audit record as a single JSONL line. The directory and file are owner-only. */
|
|
21
|
+
export declare function appendAuditEvent(file: string, event: AuditEvent): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { appendFileSync, chmodSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
/** SHA-256 lets related events be correlated without retaining the private handoff. */
|
|
5
|
+
export function fingerprintPrompt(prompt) {
|
|
6
|
+
return createHash("sha256").update(prompt, "utf8").digest("hex");
|
|
7
|
+
}
|
|
8
|
+
/** Append a restricted audit record as a single JSONL line. The directory and file are owner-only. */
|
|
9
|
+
export function appendAuditEvent(file, event) {
|
|
10
|
+
mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
|
|
11
|
+
const line = `${JSON.stringify(sanitizeEvent(event))}\n`;
|
|
12
|
+
appendFileSync(file, line, { encoding: "utf8", mode: 0o600 });
|
|
13
|
+
chmodSync(file, 0o600);
|
|
14
|
+
}
|
|
15
|
+
function sanitizeEvent(event) {
|
|
16
|
+
return {
|
|
17
|
+
timestamp: event.timestamp,
|
|
18
|
+
phase: event.phase,
|
|
19
|
+
requestId: event.requestId,
|
|
20
|
+
principalId: event.principalId,
|
|
21
|
+
transport: event.transport,
|
|
22
|
+
requestedMode: event.requestedMode,
|
|
23
|
+
effectiveMode: event.effectiveMode,
|
|
24
|
+
presetName: event.presetName,
|
|
25
|
+
detectedRisks: [...event.detectedRisks],
|
|
26
|
+
promptFingerprint: event.promptFingerprint,
|
|
27
|
+
...(event.exitCode === undefined ? {} : { exitCode: event.exitCode }),
|
|
28
|
+
...(event.outcome === undefined ? {} : { outcome: event.outcome }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=audit-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../src/audit-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAiB;IAC9D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;QACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BridgeConfig, PresetConfig } from "./types.js";
|
|
2
|
+
export interface BridgeCapabilities {
|
|
3
|
+
bridge: {
|
|
4
|
+
version: string;
|
|
5
|
+
transport: "stdio" | "http";
|
|
6
|
+
};
|
|
7
|
+
runtime: {
|
|
8
|
+
available: boolean;
|
|
9
|
+
command: string;
|
|
10
|
+
version?: string | undefined;
|
|
11
|
+
error?: string | undefined;
|
|
12
|
+
};
|
|
13
|
+
presets: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
} & PresetConfig>;
|
|
16
|
+
policy: {
|
|
17
|
+
yoloEnabled: boolean;
|
|
18
|
+
approvalRequiredForExecute: boolean;
|
|
19
|
+
};
|
|
20
|
+
liveDiscovery: {
|
|
21
|
+
supported: false;
|
|
22
|
+
reason: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Return only configuration-backed capabilities. Hermes CLI has no stable discovery contract here, so
|
|
27
|
+
* this deliberately never claims that a configured skill or toolset is live on the current runtime.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getBridgeCapabilities(config: BridgeConfig, transport?: "stdio" | "http"): BridgeCapabilities;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { checkHermesStatus } from "./status.js";
|
|
2
|
+
import { version } from "./version.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return only configuration-backed capabilities. Hermes CLI has no stable discovery contract here, so
|
|
5
|
+
* this deliberately never claims that a configured skill or toolset is live on the current runtime.
|
|
6
|
+
*/
|
|
7
|
+
export function getBridgeCapabilities(config, transport = "stdio") {
|
|
8
|
+
const status = checkHermesStatus(config);
|
|
9
|
+
return {
|
|
10
|
+
bridge: { version, transport },
|
|
11
|
+
runtime: {
|
|
12
|
+
available: status.available,
|
|
13
|
+
command: config.runtime.command,
|
|
14
|
+
...(status.available ? { version: status.version } : { error: status.error }),
|
|
15
|
+
},
|
|
16
|
+
presets: Object.entries(config.presets).map(([name, preset]) => ({ name, ...structuredClone(preset) })),
|
|
17
|
+
policy: { yoloEnabled: config.policy.yolo, approvalRequiredForExecute: config.policy.requireApprovalFor.length > 0 },
|
|
18
|
+
liveDiscovery: {
|
|
19
|
+
supported: false,
|
|
20
|
+
reason: "Hermes CLI capability discovery is not configured; presets are declarative rather than a live inventory.",
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWvC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,YAA8B,OAAO;IAC/F,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC9B,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;YAC/B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;SAC9E;QACD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvG,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QACpH,aAAa,EAAE;YACb,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,0GAA0G;SACnH;KACF,CAAC;AACJ,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, realpathSync, rmdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { dirname, join, resolve } from "node:path";
|
|
5
5
|
import { Argument, Command, Option } from "commander";
|
|
6
6
|
import { defaultProjectConfig, loadConfig } from "./config.js";
|
|
7
7
|
import { buildEffectiveRun } from "./run.js";
|
|
8
8
|
import { runHermesCli } from "./adapters/hermes-cli.js";
|
|
9
9
|
import { checkHermesStatus } from "./status.js";
|
|
10
10
|
import { startMcpServer } from "./mcp-server.js";
|
|
11
|
+
import { startBridgeHttpServer } from "./http-server.js";
|
|
11
12
|
import { version } from "./version.js";
|
|
12
13
|
import { installHint, installSkills, previewSkills, uninstallHint, uninstallSkills } from "./install/install-service.js";
|
|
14
|
+
import { bridgeMcpLauncher } from "./install/launcher.js";
|
|
13
15
|
import { mcpSnippets, removeMcpJson, writeMcpJson } from "./install/mcp-config.js";
|
|
14
|
-
import {
|
|
16
|
+
import { installMcp, uninstallMcp } from "./install/mcp-service.js";
|
|
17
|
+
import { coreChecks, formatDoctor, mcpHandshakeCheck, probeCheck, toReport } from "./doctor.js";
|
|
15
18
|
const program = new Command();
|
|
16
19
|
program
|
|
17
20
|
.name("hermes-action")
|
|
@@ -116,19 +119,39 @@ program
|
|
|
116
119
|
});
|
|
117
120
|
program
|
|
118
121
|
.command("mcp")
|
|
119
|
-
.description("Run
|
|
122
|
+
.description("Run the local stdio MCP server")
|
|
120
123
|
.option("--config <path>", "config file path")
|
|
121
124
|
.action(async (options) => {
|
|
122
125
|
await startMcpServer(options.config);
|
|
123
126
|
});
|
|
127
|
+
program
|
|
128
|
+
.command("serve")
|
|
129
|
+
.description("Run the opt-in Streamable HTTP MCP server")
|
|
130
|
+
.option("--config <path>", "config file path")
|
|
131
|
+
.option("--listen <address>", "listen address", "127.0.0.1")
|
|
132
|
+
.option("--port <number>", "listen port", parsePort, 8765)
|
|
133
|
+
.option("--allow-tailnet", "allow direct listening on a Tailscale 100.64.0.0/10 address", false)
|
|
134
|
+
.option("--token-env <name>", "environment variable containing a bearer token")
|
|
135
|
+
.action(async (options) => {
|
|
136
|
+
const config = loadConfig(process.cwd(), options.config);
|
|
137
|
+
const handle = await startBridgeHttpServer({
|
|
138
|
+
config,
|
|
139
|
+
listen: options.listen,
|
|
140
|
+
port: options.port,
|
|
141
|
+
allowTailnet: options.allowTailnet,
|
|
142
|
+
tokenEnv: options.tokenEnv,
|
|
143
|
+
});
|
|
144
|
+
console.log(`Hermes Action Bridge HTTP MCP listening on http://${handle.host}:${handle.port}/mcp`);
|
|
145
|
+
await waitForShutdown(handle);
|
|
146
|
+
});
|
|
124
147
|
program
|
|
125
148
|
.command("install")
|
|
126
|
-
.description("Install the
|
|
149
|
+
.description("Install the Hermes skill and MCP server for a coding agent")
|
|
127
150
|
.addArgument(new Argument("<target>", "which agent").choices(["claude-code", "codex", "all", "mcp"]))
|
|
128
151
|
.option("--project", "install a project-local skill instead of the global one", false)
|
|
129
152
|
.option("--project-hint", "also add a hint block to CLAUDE.md / AGENTS.md", false)
|
|
130
|
-
.option("--mcp", "also print
|
|
131
|
-
.option("--write", "for the mcp target, write/merge the project .mcp.json
|
|
153
|
+
.option("--mcp", "with --project, also print MCP config snippets", false)
|
|
154
|
+
.option("--write", "for the mcp target, write/merge the project .mcp.json instead of global registration", false)
|
|
132
155
|
.option("--force", "replace an existing managed skill", false)
|
|
133
156
|
.option("--dry-run", "print planned operations, write nothing", false)
|
|
134
157
|
.option("--print", "print the generated skill content, write nothing", false)
|
|
@@ -139,7 +162,7 @@ program
|
|
|
139
162
|
if (options.write)
|
|
140
163
|
reportChange(writeMcpJson(mcpJsonPath(ctx), options.dryRun), options.dryRun);
|
|
141
164
|
else
|
|
142
|
-
|
|
165
|
+
reportMcpResults(installMcp("all", { launcher: bridgeLauncher(), dryRun: options.dryRun }));
|
|
143
166
|
return;
|
|
144
167
|
}
|
|
145
168
|
const skillTarget = target;
|
|
@@ -154,20 +177,24 @@ program
|
|
|
154
177
|
return;
|
|
155
178
|
}
|
|
156
179
|
const opts = serviceOptions(options, scope);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
180
|
+
if (options.project) {
|
|
181
|
+
const results = installSkills(skillTarget, ctx, opts);
|
|
182
|
+
if (options.projectHint)
|
|
183
|
+
results.push(...installHint(skillTarget, ctx, opts));
|
|
184
|
+
reportResults(results, options.dryRun);
|
|
185
|
+
if (options.mcp)
|
|
186
|
+
printMcpSnippets();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
installGlobalAgentIntegration(skillTarget, ctx, opts, options.projectHint);
|
|
163
190
|
});
|
|
164
191
|
program
|
|
165
192
|
.command("uninstall")
|
|
166
|
-
.description("Remove the
|
|
193
|
+
.description("Remove the managed Hermes skill and MCP registration for a coding agent")
|
|
167
194
|
.addArgument(new Argument("<target>", "which agent").choices(["claude-code", "codex", "all", "mcp"]))
|
|
168
195
|
.option("--project", "remove a project-local skill instead of the global one", false)
|
|
169
196
|
.option("--project-hint", "also remove the CLAUDE.md / AGENTS.md hint block", false)
|
|
170
|
-
.option("--write", "for the mcp target, remove hermes-action from the project .mcp.json", false)
|
|
197
|
+
.option("--write", "for the mcp target, remove hermes-action from the project .mcp.json instead of global registration", false)
|
|
171
198
|
.option("--force", "remove even a locally modified skill", false)
|
|
172
199
|
.option("--dry-run", "print planned removals, write nothing", false)
|
|
173
200
|
.option("--yes", "non-interactive", false)
|
|
@@ -177,7 +204,7 @@ program
|
|
|
177
204
|
if (options.write)
|
|
178
205
|
reportChange(removeMcpJson(mcpJsonPath(ctx), options.dryRun), options.dryRun);
|
|
179
206
|
else
|
|
180
|
-
|
|
207
|
+
reportMcpResults(uninstallMcp("all", { launcher: bridgeLauncher(), dryRun: options.dryRun }));
|
|
181
208
|
return;
|
|
182
209
|
}
|
|
183
210
|
const skillTarget = target;
|
|
@@ -187,6 +214,8 @@ program
|
|
|
187
214
|
if (options.projectHint)
|
|
188
215
|
results.push(...uninstallHint(skillTarget, ctx, opts));
|
|
189
216
|
reportResults(results, options.dryRun);
|
|
217
|
+
if (!options.project)
|
|
218
|
+
reportMcpResults(uninstallMcp(skillTarget, { launcher: bridgeLauncher(), dryRun: options.dryRun }));
|
|
190
219
|
});
|
|
191
220
|
program
|
|
192
221
|
.command("doctor")
|
|
@@ -204,7 +233,9 @@ program
|
|
|
204
233
|
catch (error) {
|
|
205
234
|
configError = error instanceof Error ? error.message : String(error);
|
|
206
235
|
}
|
|
207
|
-
const checks = coreChecks(config, ctx, configError);
|
|
236
|
+
const checks = coreChecks(config, ctx, configError, { launcher: bridgeLauncher() });
|
|
237
|
+
if (config)
|
|
238
|
+
checks.push(await mcpHandshakeCheck(config));
|
|
208
239
|
if (options.probe && config) {
|
|
209
240
|
try {
|
|
210
241
|
checks.push(await probeCheck(config));
|
|
@@ -227,12 +258,25 @@ function parsePositiveInt(value) {
|
|
|
227
258
|
throw new Error(`Expected a positive integer, got: ${value}`);
|
|
228
259
|
return parsed;
|
|
229
260
|
}
|
|
261
|
+
function parsePort(value) {
|
|
262
|
+
const parsed = Number.parseInt(value, 10);
|
|
263
|
+
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65_535)
|
|
264
|
+
throw new Error(`Expected a port from 1 to 65535, got: ${value}`);
|
|
265
|
+
return parsed;
|
|
266
|
+
}
|
|
230
267
|
function pathContext() {
|
|
231
268
|
return { homeDir: homedir(), cwd: process.cwd() };
|
|
232
269
|
}
|
|
233
270
|
function mcpJsonPath(ctx) {
|
|
234
271
|
return resolve(ctx.cwd, ".mcp.json");
|
|
235
272
|
}
|
|
273
|
+
/** Resolve the installed launcher target once so MCP clients do not depend on an interactive shell PATH. */
|
|
274
|
+
function bridgeLauncher() {
|
|
275
|
+
const script = process.argv[1];
|
|
276
|
+
if (!script)
|
|
277
|
+
throw new Error("Could not resolve the hermes-action executable path.");
|
|
278
|
+
return bridgeMcpLauncher(realpathSync(resolve(script)));
|
|
279
|
+
}
|
|
236
280
|
function serviceOptions(options, scope) {
|
|
237
281
|
return { scope, force: options.force, dryRun: options.dryRun };
|
|
238
282
|
}
|
|
@@ -268,4 +312,147 @@ function reportResults(results, dryRun) {
|
|
|
268
312
|
}
|
|
269
313
|
process.exitCode = results.every((result) => result.ok) ? 0 : 1;
|
|
270
314
|
}
|
|
315
|
+
function reportMcpResults(results) {
|
|
316
|
+
for (const result of results) {
|
|
317
|
+
const { change } = result;
|
|
318
|
+
if (change.action === "refused") {
|
|
319
|
+
console.error(`${result.agent} MCP: refused (${change.reason ?? "unknown reason"})`);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
console.log(`${result.agent} MCP: ${change.action}${result.dryRun ? " (dry-run)" : ""}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (!results.every((result) => result.ok))
|
|
326
|
+
process.exitCode = 1;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Refuse the whole global install before writing when either a skill or MCP
|
|
330
|
+
* registration conflicts. Native agent CLIs remain the source of truth for
|
|
331
|
+
* MCP configuration, while the preflight prevents a predictable half-install.
|
|
332
|
+
*/
|
|
333
|
+
function installGlobalAgentIntegration(target, ctx, options, includeProjectHint) {
|
|
334
|
+
const launcher = bridgeLauncher();
|
|
335
|
+
const preflightOptions = { ...options, dryRun: true };
|
|
336
|
+
const skillPlan = installSkills(target, ctx, preflightOptions);
|
|
337
|
+
const hintPlan = includeProjectHint ? installHint(target, ctx, preflightOptions) : [];
|
|
338
|
+
const filePlan = [...skillPlan, ...hintPlan];
|
|
339
|
+
const mcpPlan = installMcp(target, { launcher, dryRun: true });
|
|
340
|
+
if (!filePlan.every((result) => result.ok) || !mcpPlan.every((result) => result.ok)) {
|
|
341
|
+
reportResults(filePlan, true);
|
|
342
|
+
reportMcpResults(mcpPlan);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (options.dryRun) {
|
|
346
|
+
reportResults(filePlan, true);
|
|
347
|
+
reportMcpResults(mcpPlan);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const installSnapshot = captureInstallSnapshot(skillPlan, hintPlan);
|
|
351
|
+
const mcpResults = installMcp(target, { launcher, dryRun: false });
|
|
352
|
+
if (!mcpResults.every((result) => result.ok)) {
|
|
353
|
+
reportMcpResults(mcpResults);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const skillResults = installSkills(target, ctx, options);
|
|
357
|
+
const hintResults = includeProjectHint ? installHint(target, ctx, options) : [];
|
|
358
|
+
const fileResults = [...skillResults, ...hintResults];
|
|
359
|
+
if (!fileResults.every((result) => result.ok)) {
|
|
360
|
+
reportResults(fileResults, false);
|
|
361
|
+
restoreInstallSnapshot(installSnapshot);
|
|
362
|
+
rollbackCreatedMcp(mcpResults, launcher);
|
|
363
|
+
process.exitCode = 1;
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
reportResults(fileResults, false);
|
|
367
|
+
reportMcpResults(mcpResults);
|
|
368
|
+
}
|
|
369
|
+
function captureInstallSnapshot(skillPlan, hintPlan) {
|
|
370
|
+
const files = new Map();
|
|
371
|
+
const skillDirs = new Set();
|
|
372
|
+
for (const result of skillPlan) {
|
|
373
|
+
if (!result.changes.some(isWriteAction))
|
|
374
|
+
continue;
|
|
375
|
+
for (const change of result.changes) {
|
|
376
|
+
const dir = dirname(change.path);
|
|
377
|
+
skillDirs.add(dir);
|
|
378
|
+
captureFile(files, change.path);
|
|
379
|
+
captureFile(files, join(dir, ".hermes-action-managed.json"));
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
for (const result of hintPlan) {
|
|
383
|
+
for (const change of result.changes.filter(isWriteAction))
|
|
384
|
+
captureFile(files, change.path);
|
|
385
|
+
}
|
|
386
|
+
return { files, skillDirs };
|
|
387
|
+
}
|
|
388
|
+
function captureFile(snapshots, path) {
|
|
389
|
+
if (snapshots.has(path))
|
|
390
|
+
return;
|
|
391
|
+
if (!existsSync(path)) {
|
|
392
|
+
snapshots.set(path, { path, existed: false });
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
snapshots.set(path, {
|
|
396
|
+
path,
|
|
397
|
+
existed: true,
|
|
398
|
+
content: readFileSync(path),
|
|
399
|
+
mode: statSync(path).mode & 0o777,
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
function restoreInstallSnapshot(snapshot) {
|
|
403
|
+
console.error("Restoring skill and instruction files changed by this failed install.");
|
|
404
|
+
for (const [path, file] of snapshot.files) {
|
|
405
|
+
try {
|
|
406
|
+
restoreFile(file);
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
console.error(`Rollback could not restore ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
for (const dir of snapshot.skillDirs) {
|
|
413
|
+
try {
|
|
414
|
+
rmdirSync(dir);
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
// Removing an empty directory is cosmetic; never remove a non-empty or concurrently changed directory.
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
function restoreFile(snapshot) {
|
|
422
|
+
if (!snapshot.existed) {
|
|
423
|
+
if (existsSync(snapshot.path))
|
|
424
|
+
unlinkSync(snapshot.path);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
if (!snapshot.content || snapshot.mode === undefined)
|
|
428
|
+
throw new Error(`Incomplete rollback snapshot: ${snapshot.path}`);
|
|
429
|
+
mkdirSync(dirname(snapshot.path), { recursive: true });
|
|
430
|
+
writeFileSync(snapshot.path, snapshot.content);
|
|
431
|
+
chmodSync(snapshot.path, snapshot.mode);
|
|
432
|
+
}
|
|
433
|
+
function isWriteAction(change) {
|
|
434
|
+
return change.action === "created" || change.action === "updated";
|
|
435
|
+
}
|
|
436
|
+
function rollbackCreatedMcp(results, launcher) {
|
|
437
|
+
const created = results.filter((result) => result.change.action === "created");
|
|
438
|
+
if (created.length === 0)
|
|
439
|
+
return;
|
|
440
|
+
console.error("Rolling back MCP registrations created by this failed install.");
|
|
441
|
+
for (const result of created) {
|
|
442
|
+
reportMcpResults(uninstallMcp(result.agent, { launcher, dryRun: false }));
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
function waitForShutdown(handle) {
|
|
446
|
+
return new Promise((resolve, reject) => {
|
|
447
|
+
let closing = false;
|
|
448
|
+
const shutdown = () => {
|
|
449
|
+
if (closing)
|
|
450
|
+
return;
|
|
451
|
+
closing = true;
|
|
452
|
+
void handle.close().then(resolve, reject);
|
|
453
|
+
};
|
|
454
|
+
process.once("SIGINT", shutdown);
|
|
455
|
+
process.once("SIGTERM", shutdown);
|
|
456
|
+
});
|
|
457
|
+
}
|
|
271
458
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type McpCommandRunner, type McpLauncher } from "./install/mcp-service.js";
|
|
1
2
|
import type { BridgeConfig } from "./types.js";
|
|
2
3
|
import type { PathContext } from "./install/types.js";
|
|
3
4
|
export type CheckStatus = "pass" | "warn" | "fail";
|
|
@@ -10,9 +11,15 @@ export interface DoctorReport {
|
|
|
10
11
|
ok: boolean;
|
|
11
12
|
checks: DoctorCheck[];
|
|
12
13
|
}
|
|
14
|
+
export interface DoctorOptions {
|
|
15
|
+
launcher?: McpLauncher | undefined;
|
|
16
|
+
commandRunner?: McpCommandRunner | undefined;
|
|
17
|
+
}
|
|
13
18
|
/** Synchronous environment checks. The optional `--probe` check is added separately by the caller. */
|
|
14
|
-
export declare function coreChecks(config: BridgeConfig | null, ctx: PathContext, configError?: string): DoctorCheck[];
|
|
19
|
+
export declare function coreChecks(config: BridgeConfig | null, ctx: PathContext, configError?: string, options?: DoctorOptions): DoctorCheck[];
|
|
15
20
|
export declare function toReport(checks: DoctorCheck[]): DoctorReport;
|
|
16
21
|
/** Optional live check (spends provider tokens): ask Hermes to echo a sentinel through the full pipeline. */
|
|
17
22
|
export declare function probeCheck(config: BridgeConfig): Promise<DoctorCheck>;
|
|
23
|
+
/** Token-free MCP initialize/list-tools handshake against the current server implementation. */
|
|
24
|
+
export declare function mcpHandshakeCheck(config: BridgeConfig): Promise<DoctorCheck>;
|
|
18
25
|
export declare function formatDoctor(report: DoctorReport): string;
|
package/dist/doctor.js
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
3
|
+
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
2
4
|
import { defaultConfig } from "./config.js";
|
|
3
5
|
import { checkHermesStatus, versionProbeTimeoutMs } from "./status.js";
|
|
4
6
|
import { buildEffectiveRun, defaultTimeoutSeconds } from "./run.js";
|
|
5
7
|
import { runHermesCli } from "./adapters/hermes-cli.js";
|
|
6
8
|
import { skillStates } from "./install/install-service.js";
|
|
9
|
+
import { inspectMcp } from "./install/mcp-service.js";
|
|
10
|
+
import { createBridgeMcpServer } from "./mcp-server.js";
|
|
7
11
|
const minNodeMajor = 20;
|
|
8
12
|
const agentCommand = { "claude-code": "claude", codex: "codex" };
|
|
9
13
|
/** Synchronous environment checks. The optional `--probe` check is added separately by the caller. */
|
|
10
|
-
export function coreChecks(config, ctx, configError) {
|
|
14
|
+
export function coreChecks(config, ctx, configError, options = {}) {
|
|
11
15
|
const checks = [nodeCheck(), configCheck(config, configError), hermesCheck(config ?? defaultConfig), limitsCheck(config ?? defaultConfig)];
|
|
16
|
+
const skills = new Map(skillStates(ctx, "global").map(({ agent, state }) => [agent, state]));
|
|
12
17
|
for (const agent of Object.keys(agentCommand)) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
const availability = agentAvailabilityCheck(agent, options.commandRunner);
|
|
19
|
+
const skillState = skills.get(agent) ?? "absent";
|
|
20
|
+
const registration = options.launcher
|
|
21
|
+
? inspectMcp(agent, options.launcher, options.commandRunner)
|
|
22
|
+
: undefined;
|
|
23
|
+
checks.push(availability.check);
|
|
24
|
+
checks.push(skillCheck(agent, skillState, availability.available, registration));
|
|
25
|
+
if (registration)
|
|
26
|
+
checks.push(mcpCheck(registration, skillState));
|
|
17
27
|
}
|
|
18
28
|
return checks;
|
|
19
29
|
}
|
|
@@ -34,6 +44,30 @@ export async function probeCheck(config) {
|
|
|
34
44
|
const ok = result.ok && `${result.stdout}${result.stderr}`.includes("BRIDGE_OK");
|
|
35
45
|
return { id: "probe", status: ok ? "pass" : "warn", detail: ok ? "Hermes responded" : `exit ${result.exitCode}` };
|
|
36
46
|
}
|
|
47
|
+
/** Token-free MCP initialize/list-tools handshake against the current server implementation. */
|
|
48
|
+
export async function mcpHandshakeCheck(config) {
|
|
49
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
50
|
+
const server = createBridgeMcpServer(config);
|
|
51
|
+
const client = new Client({ name: "hermes-action-doctor", version: "1.0.0" });
|
|
52
|
+
try {
|
|
53
|
+
await server.connect(serverTransport);
|
|
54
|
+
await client.connect(clientTransport);
|
|
55
|
+
const tools = await client.listTools();
|
|
56
|
+
const names = new Set(tools.tools.map((tool) => tool.name));
|
|
57
|
+
const required = ["hermes_run", "hermes_plan", "hermes_capabilities", "hermes_status"];
|
|
58
|
+
const missing = required.filter((name) => !names.has(name));
|
|
59
|
+
return missing.length === 0
|
|
60
|
+
? { id: "mcp:handshake", status: "pass", detail: `${tools.tools.length} tools available` }
|
|
61
|
+
: { id: "mcp:handshake", status: "fail", detail: `missing tools: ${missing.join(", ")}` };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return { id: "mcp:handshake", status: "fail", detail: error instanceof Error ? error.message : String(error) };
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
await client.close().catch(() => undefined);
|
|
68
|
+
await server.close().catch(() => undefined);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
37
71
|
export function formatDoctor(report) {
|
|
38
72
|
const label = { pass: "ok", warn: "warn", fail: "FAIL" };
|
|
39
73
|
const lines = report.checks.map((check) => `[${label[check.status]}] ${check.id}${check.detail ? `: ${check.detail}` : ""}`);
|
|
@@ -62,14 +96,23 @@ function limitsCheck(config) {
|
|
|
62
96
|
: `${defaultTimeoutSeconds("plan")}s plan / ${defaultTimeoutSeconds("execute")}s execute`;
|
|
63
97
|
return { id: "limits", status: "pass", detail: `context ≤ ${config.runtime.maxContextBytes} bytes, timeout ${timeout}` };
|
|
64
98
|
}
|
|
65
|
-
function agentAvailabilityCheck(agent) {
|
|
99
|
+
function agentAvailabilityCheck(agent, runner) {
|
|
66
100
|
const command = agentCommand[agent];
|
|
67
|
-
const result =
|
|
101
|
+
const result = runner
|
|
102
|
+
? runner(command, ["--version"])
|
|
103
|
+
: (() => {
|
|
104
|
+
const process = spawnSync(command, ["--version"], { encoding: "utf8", timeout: versionProbeTimeoutMs });
|
|
105
|
+
const error = process.error
|
|
106
|
+
? { code: process.error.code, message: process.error.message }
|
|
107
|
+
: undefined;
|
|
108
|
+
return { status: process.status, stdout: process.stdout ?? "", stderr: process.stderr ?? "", ...(error ? { error } : {}) };
|
|
109
|
+
})();
|
|
68
110
|
if (result.error)
|
|
69
|
-
return { id: agent, status: "warn", detail: `${command} not found on PATH` };
|
|
70
|
-
if (result.status !== 0)
|
|
71
|
-
return { id: agent, status: "warn", detail: `${command} --version exited with ${result.status ??
|
|
72
|
-
|
|
111
|
+
return { check: { id: agent, status: "warn", detail: `${command} not found on PATH` }, available: false };
|
|
112
|
+
if (result.status !== 0) {
|
|
113
|
+
return { check: { id: agent, status: "warn", detail: `${command} --version exited with ${result.status ?? "unknown status"}` }, available: false };
|
|
114
|
+
}
|
|
115
|
+
return { check: { id: agent, status: "pass", detail: result.stdout.trim() || result.stderr.trim() }, available: true };
|
|
73
116
|
}
|
|
74
117
|
const skillStateDetail = {
|
|
75
118
|
current: "up to date",
|
|
@@ -78,7 +121,27 @@ const skillStateDetail = {
|
|
|
78
121
|
"user-modified": "modified locally",
|
|
79
122
|
foreign: "a non-managed file is present",
|
|
80
123
|
};
|
|
81
|
-
function skillCheck(agent, state) {
|
|
82
|
-
|
|
124
|
+
function skillCheck(agent, state, agentAvailable, registration) {
|
|
125
|
+
const unusedTarget = state === "absent" && !agentAvailable && (!registration || registration.state === "unavailable");
|
|
126
|
+
return {
|
|
127
|
+
id: `skill:${agent}`,
|
|
128
|
+
status: state === "current" ? "pass" : unusedTarget ? "warn" : "fail",
|
|
129
|
+
detail: skillStateDetail[state],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function mcpCheck(registration, skillState) {
|
|
133
|
+
const unusedTarget = registration.state === "unavailable" && skillState === "absent";
|
|
134
|
+
const detail = {
|
|
135
|
+
absent: "not registered (run: hermes-action install all)",
|
|
136
|
+
current: "registered with the current bridge launcher",
|
|
137
|
+
conflict: registration.detail ?? "a different hermes-action registration is present",
|
|
138
|
+
unavailable: registration.detail ?? "agent CLI is unavailable",
|
|
139
|
+
error: registration.detail ?? "registration could not be inspected",
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
id: `mcp:${registration.agent}`,
|
|
143
|
+
status: registration.state === "current" ? "pass" : unusedTarget ? "warn" : "fail",
|
|
144
|
+
detail: detail[registration.state],
|
|
145
|
+
};
|
|
83
146
|
}
|
|
84
147
|
//# sourceMappingURL=doctor.js.map
|