hermes-action-bridge 0.2.3 → 0.4.0
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 +62 -0
- package/README.md +56 -13
- package/dist/adapters/hermes-cli.d.ts +1 -1
- package/dist/adapters/hermes-cli.js +89 -10
- package/dist/adapters/hermes-cli.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.js +22 -11
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +7 -1
- package/dist/context.js +22 -7
- package/dist/context.js.map +1 -1
- package/dist/doctor.js +11 -4
- package/dist/doctor.js.map +1 -1
- package/dist/install/mcp-config.js +12 -3
- package/dist/install/mcp-config.js.map +1 -1
- package/dist/mcp-server.js +32 -6
- package/dist/mcp-server.js.map +1 -1
- package/dist/policy.js +9 -2
- package/dist/policy.js.map +1 -1
- package/dist/run.d.ts +6 -1
- package/dist/run.js +14 -3
- package/dist/run.js.map +1 -1
- package/dist/status.d.ts +2 -0
- package/dist/status.js +3 -1
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +12 -4
- package/docs/ARCHITECTURE.md +16 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,68 @@ All notable changes to this project are documented here. The format is based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.4.0] - 2026-07-03
|
|
8
|
+
|
|
9
|
+
Deterministic security model, per-call MCP overrides, and installer hardening.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- MCP `hermes_run` now accepts `model`, `provider`, `maxTurns`, and `timeoutSeconds` overrides, so a
|
|
14
|
+
caller can pick a faster model or cap the tool-calling budget per request (previously only settable via a
|
|
15
|
+
preset).
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- `install mcp --write` on an empty or whitespace-only `.mcp.json` (e.g. after `touch`) now initializes it
|
|
20
|
+
instead of failing with "not valid JSON".
|
|
21
|
+
- `install mcp --write` no longer silently overwrites a customized `hermes-action` entry in `.mcp.json`; it
|
|
22
|
+
refuses with an actionable message so a custom command/args is never lost.
|
|
23
|
+
- Removed the non-functional `profile` option (`--profile`, `defaults.profile`, `preset.profile`). The
|
|
24
|
+
Hermes CLI has no per-invocation profile flag — profiles are switched globally with `hermes profile use`
|
|
25
|
+
— so a configured profile made the bridge emit an invalid `hermes --profile … chat` command. Target a
|
|
26
|
+
specific Hermes profile via `runtime.command` (e.g. a `hermes profile alias` wrapper) instead.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **Policy is now deterministic and language-agnostic.** In `execute` mode the bridge downgrades to
|
|
31
|
+
`request-approval` by default — regardless of the prompt's wording or language — unless the preset is
|
|
32
|
+
explicitly trusted (empty `require_approval_for`) or `--yolo` is set. Previously the downgrade fired only
|
|
33
|
+
when an English keyword was detected, so non-English side-effecting prompts (e.g. `supprime…`, `paie…`)
|
|
34
|
+
silently ran in `execute`. Keyword risk detection is retained but is now **informational only** (surfaced
|
|
35
|
+
in the prompt envelope), never a security control. The real barrier is the host agent's approval prompt.
|
|
36
|
+
|
|
37
|
+
### Documentation
|
|
38
|
+
|
|
39
|
+
- Documented the security model: host-agent approval is the deterministic barrier; do not allowlist
|
|
40
|
+
`hermes-action run` (`execute`/`yolo`) in the coding agent.
|
|
41
|
+
|
|
42
|
+
## [0.3.0] - 2026-06-30
|
|
43
|
+
|
|
44
|
+
Execution robustness and large-context support.
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- Aggregate context budget (`runtime.max_context_bytes`, default ~768 KiB) on top of the
|
|
49
|
+
per-file cap, with an actionable error instead of a cryptic `E2BIG` spawn failure.
|
|
50
|
+
- Large-context delivery: an envelope above ~896 KiB is written to a `0600` temp file and read
|
|
51
|
+
by Hermes (with an injected `file` toolset), sidestepping the OS argument-size limit. The temp
|
|
52
|
+
dir is cleaned up on every exit path.
|
|
53
|
+
- Per-run timeouts: `--timeout <seconds>` and `runtime.timeout_seconds`, with per-mode defaults
|
|
54
|
+
(180s plan/draft, 600s execute/request-approval). The Hermes child is reaped with `SIGTERM`
|
|
55
|
+
then `SIGKILL`; the result is flagged when it times out.
|
|
56
|
+
- Per-preset `require_approval_for` overrides (e.g. an empty list to relax a trusted preset),
|
|
57
|
+
resolved over the global policy.
|
|
58
|
+
- Diagnostics: `doctor` reports the effective limits, and `run --dry-run` reports the computed
|
|
59
|
+
prompt size (`promptBytes` / `promptChars`) and the delivery mode (`argv` / `temp-file`).
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- Every MCP tool (`hermes_run`, `hermes_plan`, `hermes_presets`, `hermes_status`) is wrapped in
|
|
64
|
+
a single error boundary, so bad input (unknown preset, missing/oversized context) returns a
|
|
65
|
+
structured `isError` result instead of crashing the server.
|
|
66
|
+
- `status` and `doctor` version probes use a short `spawnSync` timeout so a hanging Hermes cannot
|
|
67
|
+
block them.
|
|
68
|
+
|
|
7
69
|
## [0.2.3] - 2026-06-30
|
|
8
70
|
|
|
9
71
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/TheBlueHouse75/hermes-action-bridge/main/assets/logo.png" alt="Hermes Action Bridge" width="128" height="128" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# Hermes Action Bridge
|
|
2
6
|
|
|
3
7
|
[](https://www.npmjs.com/package/hermes-action-bridge) [](https://github.com/TheBlueHouse75/hermes-action-bridge/actions/workflows/ci.yml)
|
|
@@ -19,11 +23,13 @@ If an agent needs to do something outside its local coding session — research,
|
|
|
19
23
|
## Features
|
|
20
24
|
|
|
21
25
|
- Generic `hermes-action run` command for one-shot delegation.
|
|
22
|
-
- Configurable presets for skills, toolsets, provider/model,
|
|
23
|
-
-
|
|
26
|
+
- Configurable presets for skills, toolsets, provider/model, source, and max turns.
|
|
27
|
+
- Deterministic, language-agnostic safety policy: downgrades `execute` to `request-approval` by default, with per-preset trust overrides.
|
|
24
28
|
- Explicit `--yolo` mode for users who intentionally want to bypass bridge-level policy.
|
|
25
|
-
- Context file injection with
|
|
26
|
-
-
|
|
29
|
+
- Context file injection with a per-file cap and a configurable aggregate budget (clear error instead of a cryptic `E2BIG`).
|
|
30
|
+
- Automatic large-context delivery: an oversized prompt is handed to Hermes through a secure temp file instead of overflowing the command line.
|
|
31
|
+
- Per-run timeouts (configurable, with per-mode defaults) that always reap the Hermes child process.
|
|
32
|
+
- Dry-run mode for debugging the exact Hermes command, prompt, and computed prompt size.
|
|
27
33
|
- Minimal MCP server exposing delegation tools: `hermes_run`, `hermes_plan`, `hermes_presets`, and `hermes_status`.
|
|
28
34
|
- No project-specific assumptions. All behavior is configured through YAML and CLI flags.
|
|
29
35
|
|
|
@@ -102,9 +108,9 @@ hermes-action run --dry-run --json "Summarize this project."
|
|
|
102
108
|
- `execute`: Hermes may execute allowed actions, while still following Hermes' own safety rules.
|
|
103
109
|
- `request-approval`: Hermes prepares the action and asks the human for approval before irreversible external effects.
|
|
104
110
|
|
|
105
|
-
|
|
111
|
+
The guard is deterministic and language-agnostic: in `execute` mode the bridge switches to `request-approval` by default — regardless of the prompt's wording or language — unless the preset is explicitly trusted (empty `require_approval_for`) or `--yolo` is set. It does not try to infer risk from keywords. See [Security model](#security-model) for why the real barrier is your coding agent's own approval prompt.
|
|
106
112
|
|
|
107
|
-
Risk categories
|
|
113
|
+
Risk categories below are **informational only**: the bridge surfaces the ones it recognizes in the prompt envelope to help you and Hermes decide, but they never drive the mode. (Keyword matching is English-biased and trivially evaded, so it must not be a security control.)
|
|
108
114
|
|
|
109
115
|
- `publish_external`
|
|
110
116
|
- `send_message`
|
|
@@ -152,6 +158,12 @@ Example:
|
|
|
152
158
|
runtime:
|
|
153
159
|
adapter: hermes-cli
|
|
154
160
|
command: hermes
|
|
161
|
+
# Aggregate budget across all --context files, in bytes (default ~768 KiB).
|
|
162
|
+
# Raising this above ~896 KiB switches large prompts to temp-file delivery.
|
|
163
|
+
max_context_bytes: 786432
|
|
164
|
+
# Optional overall per-run timeout in seconds. When unset, per-mode defaults
|
|
165
|
+
# apply: 180s for plan/draft, 600s for execute/request-approval.
|
|
166
|
+
# timeout_seconds: 600
|
|
155
167
|
|
|
156
168
|
defaults:
|
|
157
169
|
mode: plan
|
|
@@ -169,6 +181,9 @@ presets:
|
|
|
169
181
|
description: General research and synthesis.
|
|
170
182
|
skills: []
|
|
171
183
|
toolsets: [web, terminal, file]
|
|
184
|
+
# Per-preset override: relax approvals for a trusted preset.
|
|
185
|
+
# An empty list never downgrades execute to request-approval.
|
|
186
|
+
# require_approval_for: []
|
|
172
187
|
|
|
173
188
|
coding:
|
|
174
189
|
description: Repository inspection and runtime validation.
|
|
@@ -177,6 +192,7 @@ presets:
|
|
|
177
192
|
|
|
178
193
|
policy:
|
|
179
194
|
yolo: false
|
|
195
|
+
# Global default; a preset's own require_approval_for takes precedence when set.
|
|
180
196
|
require_approval_for:
|
|
181
197
|
- publish_external
|
|
182
198
|
- send_message
|
|
@@ -187,6 +203,17 @@ policy:
|
|
|
187
203
|
- credential_change
|
|
188
204
|
```
|
|
189
205
|
|
|
206
|
+
## Limits, timeouts, and large context
|
|
207
|
+
|
|
208
|
+
The bridge builds one prompt envelope (policy header + your request + every `<context>` block) and hands it to Hermes. Two guardrails keep that reliable:
|
|
209
|
+
|
|
210
|
+
- **Aggregate context budget** (`runtime.max_context_bytes`, default ~768 KiB, plus a fixed 250 KiB per-file cap). Exceeding it fails fast with an actionable message — `Context total N bytes exceeds the limit ... Split your handoff or raise runtime.max_context_bytes.` — instead of a cryptic `E2BIG` spawn crash. The default leaves headroom under the operating system's argument-size limit.
|
|
211
|
+
- **Large-context delivery.** If you raise the budget and the envelope grows past ~896 KiB, the adapter writes it to a `0600` temp file and tells Hermes to read that file (injecting a `file` toolset for the call). This sidesteps the OS argument limit. Two caveats: it adds one tool-calling turn, and the real ceiling becomes the model's context window — a multi-megabyte file may only be partially read. The temp file is removed after the run; only an uncatchable kill of the bridge process itself could leave it behind (mitigated by the `0600` mode and the OS temp reaper).
|
|
212
|
+
|
|
213
|
+
Every run is bounded by a timeout (default 180s for `plan`/`draft`, 600s for `execute`/`request-approval`). Override per run with `--timeout <seconds>` or globally with `runtime.timeout_seconds`. On expiry the Hermes child is sent `SIGTERM`, then `SIGKILL` after a short grace, and the result is marked as timed out.
|
|
214
|
+
|
|
215
|
+
`hermes-action doctor` prints the effective limits, and `hermes-action run --dry-run --json` reports the computed prompt size (`promptBytes`, `promptChars`) and whether delivery would use `argv` or a `temp-file`.
|
|
216
|
+
|
|
190
217
|
## CLI reference
|
|
191
218
|
|
|
192
219
|
```bash
|
|
@@ -207,10 +234,10 @@ Common `run` options:
|
|
|
207
234
|
--preset <name>
|
|
208
235
|
--context <path...>
|
|
209
236
|
--config <path>
|
|
210
|
-
--profile <name>
|
|
211
237
|
--provider <name>
|
|
212
238
|
--model <name>
|
|
213
239
|
--max-turns <number>
|
|
240
|
+
--timeout <seconds>
|
|
214
241
|
--source <name>
|
|
215
242
|
--yolo
|
|
216
243
|
--dry-run
|
|
@@ -233,6 +260,19 @@ Install behavior is safe by default: it never modifies `CLAUDE.md` / `AGENTS.md`
|
|
|
233
260
|
|
|
234
261
|
The generated skill is shown in [`examples/claude-code/SKILL.md`](examples/claude-code/SKILL.md). Project-hint usage is documented in [`examples/claude-code/CLAUDE.md`](examples/claude-code/CLAUDE.md) and [`examples/codex/AGENTS.md`](examples/codex/AGENTS.md).
|
|
235
262
|
|
|
263
|
+
## Codex plugin (one-line install)
|
|
264
|
+
|
|
265
|
+
Codex users can install the delegation skill and the MCP server together as a plugin:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
codex plugin marketplace add TheBlueHouse75/hermes-action-bridge
|
|
269
|
+
codex plugin add hermes-action@hermes-action-bridge
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
This registers the `hermes-action` MCP server and the Hermes delegation skill in Codex. Hermes Agent must be installed locally — the plugin runs `npx -y hermes-action-bridge mcp`.
|
|
273
|
+
|
|
274
|
+
> **Faster MCP startup:** `npx` re-resolves the package on every server start (~200 ms overhead, more on a cold cache). If you install the package globally (`npm install -g hermes-action-bridge`), point the MCP config at the binary — `command: "hermes-action"`, `args: ["mcp"]` — which is what `hermes-action install mcp` generates.
|
|
275
|
+
|
|
236
276
|
## MCP configuration
|
|
237
277
|
|
|
238
278
|
Print the config snippet for your client (Claude Code / Cursor / VS Code use JSON; Codex uses TOML):
|
|
@@ -283,7 +323,7 @@ hermes-action mcp
|
|
|
283
323
|
|
|
284
324
|
Exposed tools:
|
|
285
325
|
|
|
286
|
-
- `hermes_run`: delegate a request to Hermes.
|
|
326
|
+
- `hermes_run`: delegate a request to Hermes. Optional overrides: `mode`, `preset`, `contextFiles`, `yolo`, `dryRun`, and — to trade cost for speed on simple tasks — `model`, `provider`, `maxTurns`, `timeoutSeconds`.
|
|
287
327
|
- `hermes_plan`: shortcut for `hermes_run` with `mode=plan`.
|
|
288
328
|
- `hermes_presets`: list configured presets.
|
|
289
329
|
- `hermes_status`: check the configured Hermes runtime command.
|
|
@@ -309,12 +349,15 @@ Functional tests use a fake Hermes binary to verify command construction, prompt
|
|
|
309
349
|
- [Changelog](CHANGELOG.md): release history.
|
|
310
350
|
- [Security policy](SECURITY.md): how to report a vulnerability.
|
|
311
351
|
|
|
312
|
-
## Security
|
|
352
|
+
## Security model
|
|
353
|
+
|
|
354
|
+
The bridge assumes a **supervised host agent**: Claude Code / Codex ask you to approve each `hermes-action` command (or `hermes_run` tool call) before it runs. That host approval — not the keyword detection — is the real, deterministic, language-agnostic barrier, and it is what makes a French, German, or paraphrased request as safe as an English one.
|
|
355
|
+
|
|
356
|
+
The bridge's own guard is a secondary net: `execute` is downgraded to `request-approval` by default unless a preset is trusted (empty `require_approval_for`) or `--yolo` is set. The bridge never injects `--yolo` or a bypass flag on its own.
|
|
313
357
|
|
|
314
|
-
- Do not
|
|
315
|
-
- Keep provider credentials in Hermes Agent, your OS keychain, or the
|
|
316
|
-
-
|
|
317
|
-
- Treat `--yolo` as a trusted-local-mode escape hatch, not as a default.
|
|
358
|
+
- **Do not allowlist / auto-approve `hermes-action run` (especially `--mode execute` or `--yolo`)** in your coding agent. A command-pattern allowlist cannot tell `run --mode plan` (safe) from `run --mode execute` (side effects); at most, `status`, `presets`, and `--dry-run` are safe to auto-approve.
|
|
359
|
+
- Do not put secrets in `.hermes-action.yaml`. Keep provider credentials in Hermes Agent, your OS keychain, or the platform's secure store.
|
|
360
|
+
- Treat `--yolo` as a trusted-local escape hatch, not a default.
|
|
318
361
|
|
|
319
362
|
## Also by the author
|
|
320
363
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { AdapterResult, BridgeConfig, EffectiveRun } from "../types.js";
|
|
2
|
-
export declare function buildHermesCliArgs(run: EffectiveRun, prompt?: string): string[];
|
|
2
|
+
export declare function buildHermesCliArgs(run: EffectiveRun, prompt?: string, extraToolsets?: string[]): string[];
|
|
3
3
|
export declare function runHermesCli(config: BridgeConfig, run: EffectiveRun, dryRun: boolean): Promise<AdapterResult>;
|
|
@@ -1,33 +1,107 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
2
5
|
import { buildHermesPrompt } from "../prompt.js";
|
|
3
|
-
|
|
6
|
+
/** Grace period between SIGTERM and SIGKILL when a run exceeds its timeout. */
|
|
7
|
+
const killGraceMs = 2000;
|
|
8
|
+
/** A delay past the 32-bit signed-int limit makes setTimeout fire immediately; clamp so a huge timeout never kills the run on startup. */
|
|
9
|
+
const maxTimeoutMs = 2_147_483_647;
|
|
10
|
+
/**
|
|
11
|
+
* ~896 KiB: above this the envelope risks E2BIG as a `-q` argv, so deliver it via a temp file the child
|
|
12
|
+
* reads itself. Sits below the ~1 MiB ARG_MAX. The default context budget (~768 KiB) keeps envelopes
|
|
13
|
+
* under this, so the temp-file path is opt-in — reached only when runtime.max_context_bytes is raised.
|
|
14
|
+
*/
|
|
15
|
+
const largePromptThresholdBytes = 917_504;
|
|
16
|
+
export function buildHermesCliArgs(run, prompt = buildHermesPrompt(run), extraToolsets = []) {
|
|
4
17
|
const args = ["chat", "-Q", "--source", run.source, "--max-turns", String(run.maxTurns)];
|
|
5
|
-
if (run.profile)
|
|
6
|
-
args.unshift("--profile", run.profile);
|
|
7
18
|
if (run.provider)
|
|
8
19
|
args.push("--provider", run.provider);
|
|
9
20
|
if (run.model)
|
|
10
21
|
args.push("--model", run.model);
|
|
11
22
|
if (run.preset.skills.length)
|
|
12
23
|
args.push("--skills", run.preset.skills.join(","));
|
|
13
|
-
|
|
14
|
-
|
|
24
|
+
const toolsets = [...new Set([...run.preset.toolsets, ...extraToolsets])];
|
|
25
|
+
if (toolsets.length)
|
|
26
|
+
args.push("--toolsets", toolsets.join(","));
|
|
15
27
|
if (run.yolo)
|
|
16
28
|
args.push("--yolo");
|
|
17
29
|
args.push("-q", prompt);
|
|
18
30
|
return args;
|
|
19
31
|
}
|
|
32
|
+
/** Short query that points Hermes at the file holding the full envelope (used for the large-payload path). */
|
|
33
|
+
function filePointerPrompt(path) {
|
|
34
|
+
return [
|
|
35
|
+
"Your full instructions, the user's request, and all context are in this file:",
|
|
36
|
+
path,
|
|
37
|
+
"Read it completely with your file tool before doing anything, then follow the instructions inside it.",
|
|
38
|
+
"Never reveal secrets.",
|
|
39
|
+
].join("\n");
|
|
40
|
+
}
|
|
20
41
|
export async function runHermesCli(config, run, dryRun) {
|
|
21
42
|
const prompt = buildHermesPrompt(run);
|
|
22
|
-
const
|
|
23
|
-
const
|
|
43
|
+
const promptBytes = Buffer.byteLength(prompt, "utf8");
|
|
44
|
+
const isLarge = promptBytes > largePromptThresholdBytes;
|
|
24
45
|
if (dryRun) {
|
|
25
|
-
|
|
46
|
+
const args = isLarge ? buildHermesCliArgs(run, filePointerPrompt("<temp-file>"), ["file"]) : buildHermesCliArgs(run, prompt);
|
|
47
|
+
const command = [config.runtime.command, ...args];
|
|
48
|
+
const stdout = JSON.stringify({ command, prompt, promptBytes, promptChars: prompt.length, delivery: isLarge ? "temp-file" : "argv" }, null, 2);
|
|
49
|
+
return { ok: true, exitCode: 0, stdout, stderr: "", command, prompt, dryRun: true };
|
|
26
50
|
}
|
|
51
|
+
// Large envelopes can't ride argv (E2BIG); write them to a secure temp file the child reads itself.
|
|
52
|
+
// tmpDir is set only after a successful write so a failed write cleans up and never leaks an empty dir.
|
|
53
|
+
let tmpDir;
|
|
54
|
+
const args = (() => {
|
|
55
|
+
if (!isLarge)
|
|
56
|
+
return buildHermesCliArgs(run, prompt);
|
|
57
|
+
const dir = mkdtempSync(join(tmpdir(), "hermes-action-bridge-"));
|
|
58
|
+
try {
|
|
59
|
+
const promptFile = join(dir, "prompt.md");
|
|
60
|
+
writeFileSync(promptFile, prompt, { mode: 0o600 });
|
|
61
|
+
// Inject "file" so Hermes can read the temp file even when the preset declares no file-capable toolset.
|
|
62
|
+
const built = buildHermesCliArgs(run, filePointerPrompt(promptFile), ["file"]);
|
|
63
|
+
tmpDir = dir;
|
|
64
|
+
return built;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
rmSync(dir, { recursive: true, force: true });
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
})();
|
|
71
|
+
const command = [config.runtime.command, ...args];
|
|
27
72
|
return new Promise((resolve) => {
|
|
28
73
|
const child = spawn(config.runtime.command, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
29
74
|
let stdout = "";
|
|
30
75
|
let stderr = "";
|
|
76
|
+
let timedOut = false;
|
|
77
|
+
let killTimer;
|
|
78
|
+
const timeoutMs = Math.min(run.timeoutSeconds * 1000, maxTimeoutMs);
|
|
79
|
+
const timer = setTimeout(() => {
|
|
80
|
+
timedOut = true;
|
|
81
|
+
child.kill("SIGTERM");
|
|
82
|
+
killTimer = setTimeout(() => child.kill("SIGKILL"), killGraceMs);
|
|
83
|
+
}, timeoutMs);
|
|
84
|
+
// 'error' and 'close' can both fire (e.g. spawn ENOENT); guard so cleanup and resolve run exactly once.
|
|
85
|
+
// The temp file is removed here on every settle path. Only an uncatchable SIGKILL of the bridge itself
|
|
86
|
+
// would leave it behind; mkdtemp + 0600 + the OS temp reaper bound that residual risk.
|
|
87
|
+
let settled = false;
|
|
88
|
+
const settle = (result) => {
|
|
89
|
+
if (settled)
|
|
90
|
+
return;
|
|
91
|
+
settled = true;
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
if (killTimer)
|
|
94
|
+
clearTimeout(killTimer);
|
|
95
|
+
if (tmpDir) {
|
|
96
|
+
try {
|
|
97
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
/* best-effort cleanup */
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
resolve(result);
|
|
104
|
+
};
|
|
31
105
|
child.stdout.setEncoding("utf8");
|
|
32
106
|
child.stderr.setEncoding("utf8");
|
|
33
107
|
child.stdout.on("data", (chunk) => {
|
|
@@ -37,11 +111,16 @@ export async function runHermesCli(config, run, dryRun) {
|
|
|
37
111
|
stderr += chunk;
|
|
38
112
|
});
|
|
39
113
|
child.on("error", (error) => {
|
|
40
|
-
|
|
114
|
+
settle({ ok: false, exitCode: 127, stdout, stderr: `${stderr}${error.message}`, command, prompt, dryRun: false });
|
|
41
115
|
});
|
|
42
116
|
child.on("close", (code) => {
|
|
117
|
+
if (timedOut) {
|
|
118
|
+
const message = `Hermes timed out after ${run.timeoutSeconds}s and was terminated.`;
|
|
119
|
+
settle({ ok: false, exitCode: code ?? 124, stdout, stderr: stderr ? `${stderr}\n${message}` : message, command, prompt, dryRun: false, timedOut: true });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
43
122
|
const exitCode = code ?? 1;
|
|
44
|
-
|
|
123
|
+
settle({ ok: exitCode === 0, exitCode, stdout, stderr, command, prompt, dryRun: false });
|
|
45
124
|
});
|
|
46
125
|
});
|
|
47
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-cli.js","sourceRoot":"","sources":["../../src/adapters/hermes-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"hermes-cli.js","sourceRoot":"","sources":["../../src/adapters/hermes-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -49,10 +49,10 @@ program
|
|
|
49
49
|
.option("--preset <name>", "config preset")
|
|
50
50
|
.option("--context <path...>", "context file(s) to include", [])
|
|
51
51
|
.option("--config <path>", "config file path")
|
|
52
|
-
.option("--profile <name>", "Hermes profile")
|
|
53
52
|
.option("--provider <name>", "Hermes provider")
|
|
54
53
|
.option("--model <name>", "Hermes model")
|
|
55
54
|
.option("--max-turns <number>", "Hermes max tool-calling iterations", parsePositiveInt)
|
|
55
|
+
.option("--timeout <seconds>", "max seconds before Hermes is terminated", parsePositiveInt)
|
|
56
56
|
.option("--source <name>", "Hermes source tag")
|
|
57
57
|
.option("--yolo", "bypass bridge policy and pass --yolo to Hermes", false)
|
|
58
58
|
.option("--dry-run", "print the Hermes command and prompt without executing", false)
|
|
@@ -67,11 +67,11 @@ program
|
|
|
67
67
|
yolo: options.yolo,
|
|
68
68
|
dryRun: options.dryRun,
|
|
69
69
|
json: options.json,
|
|
70
|
-
profile: options.profile,
|
|
71
70
|
provider: options.provider,
|
|
72
71
|
model: options.model,
|
|
73
72
|
maxTurns: options.maxTurns,
|
|
74
73
|
source: options.source,
|
|
74
|
+
timeoutSeconds: options.timeout,
|
|
75
75
|
});
|
|
76
76
|
const result = await runHermesCli(config, run, options.dryRun);
|
|
77
77
|
if (options.json) {
|
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/config.js
CHANGED
|
@@ -22,17 +22,20 @@ const defaultRequireApprovalFor = [
|
|
|
22
22
|
"git_push",
|
|
23
23
|
"credential_change",
|
|
24
24
|
];
|
|
25
|
+
/** ~768 KiB: bounds total context with headroom under the ~1 MiB ARG_MAX for the header + prompt the envelope adds on top. */
|
|
26
|
+
const defaultMaxContextBytes = 786_432;
|
|
25
27
|
const rawConfigSchema = z.object({
|
|
26
28
|
runtime: z
|
|
27
29
|
.object({
|
|
28
30
|
adapter: z.literal("hermes-cli").default("hermes-cli"),
|
|
29
31
|
command: z.string().min(1).default("hermes"),
|
|
32
|
+
max_context_bytes: z.number().int().positive().default(defaultMaxContextBytes),
|
|
33
|
+
timeout_seconds: z.number().int().positive().optional(),
|
|
30
34
|
})
|
|
31
|
-
.default({ adapter: "hermes-cli", command: "hermes" }),
|
|
35
|
+
.default({ adapter: "hermes-cli", command: "hermes", max_context_bytes: defaultMaxContextBytes }),
|
|
32
36
|
defaults: z
|
|
33
37
|
.object({
|
|
34
38
|
mode: modeSchema.default("plan"),
|
|
35
|
-
profile: z.string().min(1).optional(),
|
|
36
39
|
source: z.string().min(1).default("external-agent"),
|
|
37
40
|
max_turns: z.number().int().positive().default(30),
|
|
38
41
|
preset: z.string().min(1).default("default"),
|
|
@@ -45,9 +48,9 @@ const rawConfigSchema = z.object({
|
|
|
45
48
|
toolsets: z.array(z.string()).default([]),
|
|
46
49
|
provider: z.string().optional(),
|
|
47
50
|
model: z.string().optional(),
|
|
48
|
-
profile: z.string().optional(),
|
|
49
51
|
max_turns: z.number().int().positive().optional(),
|
|
50
52
|
source: z.string().optional(),
|
|
53
|
+
require_approval_for: z.array(riskSchema).optional(),
|
|
51
54
|
}))
|
|
52
55
|
.default({ default: { skills: [], toolsets: [] } }),
|
|
53
56
|
policy: z
|
|
@@ -58,7 +61,7 @@ const rawConfigSchema = z.object({
|
|
|
58
61
|
.default({ yolo: false, require_approval_for: defaultRequireApprovalFor }),
|
|
59
62
|
});
|
|
60
63
|
export const defaultConfig = {
|
|
61
|
-
runtime: { adapter: "hermes-cli", command: "hermes" },
|
|
64
|
+
runtime: { adapter: "hermes-cli", command: "hermes", maxContextBytes: defaultMaxContextBytes },
|
|
62
65
|
defaults: { mode: "plan", source: "external-agent", maxTurns: 30, preset: "default" },
|
|
63
66
|
presets: { default: { skills: [], toolsets: [] } },
|
|
64
67
|
policy: {
|
|
@@ -68,7 +71,7 @@ export const defaultConfig = {
|
|
|
68
71
|
};
|
|
69
72
|
export function defaultProjectConfig() {
|
|
70
73
|
return YAML.stringify({
|
|
71
|
-
runtime: { adapter: "hermes-cli", command: "hermes" },
|
|
74
|
+
runtime: { adapter: "hermes-cli", command: "hermes", max_context_bytes: defaultMaxContextBytes },
|
|
72
75
|
defaults: { mode: "plan", source: "external-agent", max_turns: 30, preset: "default" },
|
|
73
76
|
presets: {
|
|
74
77
|
default: { description: "No extra skills or toolsets. Uses the active Hermes profile.", skills: [], toolsets: [] },
|
|
@@ -119,10 +122,14 @@ function isPlainObject(value) {
|
|
|
119
122
|
}
|
|
120
123
|
function toRaw(config) {
|
|
121
124
|
return {
|
|
122
|
-
runtime:
|
|
125
|
+
runtime: {
|
|
126
|
+
adapter: config.runtime.adapter,
|
|
127
|
+
command: config.runtime.command,
|
|
128
|
+
max_context_bytes: config.runtime.maxContextBytes,
|
|
129
|
+
timeout_seconds: config.runtime.timeoutSeconds,
|
|
130
|
+
},
|
|
123
131
|
defaults: {
|
|
124
132
|
mode: config.defaults.mode,
|
|
125
|
-
profile: config.defaults.profile,
|
|
126
133
|
source: config.defaults.source,
|
|
127
134
|
max_turns: config.defaults.maxTurns,
|
|
128
135
|
preset: config.defaults.preset,
|
|
@@ -135,9 +142,9 @@ function toRaw(config) {
|
|
|
135
142
|
toolsets: preset.toolsets,
|
|
136
143
|
provider: preset.provider,
|
|
137
144
|
model: preset.model,
|
|
138
|
-
profile: preset.profile,
|
|
139
145
|
max_turns: preset.maxTurns,
|
|
140
146
|
source: preset.source,
|
|
147
|
+
require_approval_for: preset.requireApprovalFor,
|
|
141
148
|
},
|
|
142
149
|
])),
|
|
143
150
|
policy: { yolo: config.policy.yolo, require_approval_for: config.policy.requireApprovalFor },
|
|
@@ -145,10 +152,14 @@ function toRaw(config) {
|
|
|
145
152
|
}
|
|
146
153
|
function normalizeConfig(raw) {
|
|
147
154
|
return {
|
|
148
|
-
runtime:
|
|
155
|
+
runtime: {
|
|
156
|
+
adapter: raw.runtime.adapter,
|
|
157
|
+
command: raw.runtime.command,
|
|
158
|
+
maxContextBytes: raw.runtime.max_context_bytes,
|
|
159
|
+
timeoutSeconds: raw.runtime.timeout_seconds,
|
|
160
|
+
},
|
|
149
161
|
defaults: {
|
|
150
162
|
mode: raw.defaults.mode,
|
|
151
|
-
profile: raw.defaults.profile,
|
|
152
163
|
source: raw.defaults.source,
|
|
153
164
|
maxTurns: raw.defaults.max_turns,
|
|
154
165
|
preset: raw.defaults.preset,
|
|
@@ -161,9 +172,9 @@ function normalizeConfig(raw) {
|
|
|
161
172
|
toolsets: preset.toolsets,
|
|
162
173
|
provider: preset.provider,
|
|
163
174
|
model: preset.model,
|
|
164
|
-
profile: preset.profile,
|
|
165
175
|
maxTurns: preset.max_turns,
|
|
166
176
|
source: preset.source,
|
|
177
|
+
requireApprovalFor: preset.require_approval_for,
|
|
167
178
|
},
|
|
168
179
|
])),
|
|
169
180
|
policy: { yolo: raw.policy.yolo, requireApprovalFor: raw.policy.require_approval_for },
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;IACxB,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,UAAU;IACV,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAmB;IAChD,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,UAAU;IACV,mBAAmB;CACpB,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import type { ContextDocument } from "./types.js";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Read context files, enforcing a per-file cap and an aggregate budget so the
|
|
4
|
+
* total context is bounded and fails with a clear, actionable message. The
|
|
5
|
+
* default budget leaves headroom under ARG_MAX for the rest of the envelope
|
|
6
|
+
* (header + user prompt); the precise envelope-size check lives in the adapter.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readContextFiles(paths: string[], maxTotalBytes: number, cwd?: string): ContextDocument[];
|
package/dist/context.js
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/** Hard per-file safety cap, independent of the aggregate budget. */
|
|
4
|
+
const maxFileBytes = 250_000;
|
|
5
|
+
/**
|
|
6
|
+
* Read context files, enforcing a per-file cap and an aggregate budget so the
|
|
7
|
+
* total context is bounded and fails with a clear, actionable message. The
|
|
8
|
+
* default budget leaves headroom under ARG_MAX for the rest of the envelope
|
|
9
|
+
* (header + user prompt); the precise envelope-size check lives in the adapter.
|
|
10
|
+
*/
|
|
11
|
+
export function readContextFiles(paths, maxTotalBytes, cwd = process.cwd()) {
|
|
12
|
+
const documents = [];
|
|
13
|
+
let total = 0;
|
|
14
|
+
for (const inputPath of paths) {
|
|
6
15
|
const path = resolve(cwd, inputPath);
|
|
7
16
|
const stat = statSync(path);
|
|
8
17
|
if (!stat.isFile())
|
|
9
18
|
throw new Error(`Context path is not a file: ${inputPath}`);
|
|
10
|
-
if (stat.size >
|
|
11
|
-
throw new Error(`Context file is too large (${stat.size} bytes, max ${
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
if (stat.size > maxFileBytes) {
|
|
20
|
+
throw new Error(`Context file is too large (${stat.size} bytes, max ${maxFileBytes} per file): ${inputPath}`);
|
|
21
|
+
}
|
|
22
|
+
total += stat.size;
|
|
23
|
+
if (total > maxTotalBytes) {
|
|
24
|
+
throw new Error(`Context total ${total} bytes exceeds the limit of ${maxTotalBytes}. Split your handoff or raise runtime.max_context_bytes.`);
|
|
25
|
+
}
|
|
26
|
+
documents.push({ path, content: readFileSync(path, "utf8") });
|
|
27
|
+
}
|
|
28
|
+
return documents;
|
|
14
29
|
}
|
|
15
30
|
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qEAAqE;AACrE,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,aAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC1F,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,eAAe,YAAY,eAAe,SAAS,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;QACnB,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,+BAA+B,aAAa,0DAA0D,CAC7H,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/doctor.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { defaultConfig } from "./config.js";
|
|
3
|
-
import { checkHermesStatus } from "./status.js";
|
|
4
|
-
import { buildEffectiveRun } from "./run.js";
|
|
3
|
+
import { checkHermesStatus, versionProbeTimeoutMs } from "./status.js";
|
|
4
|
+
import { buildEffectiveRun, defaultTimeoutSeconds } from "./run.js";
|
|
5
5
|
import { runHermesCli } from "./adapters/hermes-cli.js";
|
|
6
6
|
import { skillStates } from "./install/install-service.js";
|
|
7
7
|
const minNodeMajor = 20;
|
|
8
8
|
const agentCommand = { "claude-code": "claude", codex: "codex" };
|
|
9
9
|
/** Synchronous environment checks. The optional `--probe` check is added separately by the caller. */
|
|
10
10
|
export function coreChecks(config, ctx, configError) {
|
|
11
|
-
const checks = [nodeCheck(), configCheck(config, configError), hermesCheck(config ?? defaultConfig)];
|
|
11
|
+
const checks = [nodeCheck(), configCheck(config, configError), hermesCheck(config ?? defaultConfig), limitsCheck(config ?? defaultConfig)];
|
|
12
12
|
for (const agent of Object.keys(agentCommand)) {
|
|
13
13
|
checks.push(agentAvailabilityCheck(agent));
|
|
14
14
|
}
|
|
@@ -55,9 +55,16 @@ function hermesCheck(config) {
|
|
|
55
55
|
return { id: "hermes", status: "pass", detail: status.version };
|
|
56
56
|
return { id: "hermes", status: "fail", detail: status.error };
|
|
57
57
|
}
|
|
58
|
+
/** Surfaces the effective runtime limits so users can see why a large run is rejected or timed out. */
|
|
59
|
+
function limitsCheck(config) {
|
|
60
|
+
const timeout = config.runtime.timeoutSeconds
|
|
61
|
+
? `${config.runtime.timeoutSeconds}s (configured)`
|
|
62
|
+
: `${defaultTimeoutSeconds("plan")}s plan / ${defaultTimeoutSeconds("execute")}s execute`;
|
|
63
|
+
return { id: "limits", status: "pass", detail: `context ≤ ${config.runtime.maxContextBytes} bytes, timeout ${timeout}` };
|
|
64
|
+
}
|
|
58
65
|
function agentAvailabilityCheck(agent) {
|
|
59
66
|
const command = agentCommand[agent];
|
|
60
|
-
const result = spawnSync(command, ["--version"], { encoding: "utf8" });
|
|
67
|
+
const result = spawnSync(command, ["--version"], { encoding: "utf8", timeout: versionProbeTimeoutMs });
|
|
61
68
|
if (result.error)
|
|
62
69
|
return { id: agent, status: "warn", detail: `${command} not found on PATH` };
|
|
63
70
|
if (result.status !== 0)
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,10 @@ function canonical(value) {
|
|
|
19
19
|
}
|
|
20
20
|
/** Add the hermes-action server to a Claude Code `.mcp.json`, preserving every other key. */
|
|
21
21
|
export function mergeMcpJson(existing) {
|
|
22
|
-
|
|
22
|
+
// Absent or empty/whitespace-only (e.g. `touch .mcp.json`) is treated as a fresh file, not a parse error.
|
|
23
|
+
if (existing === null || existing.trim() === "") {
|
|
23
24
|
return { content: render({ mcpServers: { [mcpServerName]: mcpServerEntry } }), action: "created" };
|
|
25
|
+
}
|
|
24
26
|
let parsed;
|
|
25
27
|
try {
|
|
26
28
|
parsed = JSON.parse(existing);
|
|
@@ -34,13 +36,20 @@ export function mergeMcpJson(existing) {
|
|
|
34
36
|
return { content: existing, action: "refused", reason: "existing .mcp.json has a non-object mcpServers; refusing to overwrite" };
|
|
35
37
|
}
|
|
36
38
|
const servers = isObject(parsed.mcpServers) ? parsed.mcpServers : {};
|
|
37
|
-
|
|
39
|
+
const current = servers[mcpServerName];
|
|
40
|
+
if (canonical(current) === canonical(mcpServerEntry))
|
|
38
41
|
return { content: existing, action: "unchanged" };
|
|
42
|
+
// A different entry under our name is either a user customization (custom command/args) or a stale
|
|
43
|
+
// hand-edit. There is no --force path here, so refuse rather than silently discarding it; the user can
|
|
44
|
+
// remove the entry (or run `uninstall mcp --write`) and re-run.
|
|
45
|
+
if (current !== undefined) {
|
|
46
|
+
return { content: existing, action: "refused", reason: `existing .mcp.json already has a different "${mcpServerName}" entry; refusing to overwrite it` };
|
|
47
|
+
}
|
|
39
48
|
return { content: render({ ...parsed, mcpServers: { ...servers, [mcpServerName]: mcpServerEntry } }), action: "updated" };
|
|
40
49
|
}
|
|
41
50
|
/** Remove the hermes-action server from a Claude Code `.mcp.json`, leaving other servers in place. */
|
|
42
51
|
export function unmergeMcpJson(existing) {
|
|
43
|
-
if (existing === null)
|
|
52
|
+
if (existing === null || existing.trim() === "")
|
|
44
53
|
return { content: "", action: "unchanged" };
|
|
45
54
|
let parsed;
|
|
46
55
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/install/mcp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAShE,6GAA6G;AAC7G,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,EAAE,MAAM,EAAE,gCAAgC,EAAE,QAAQ,EAAE,2CAA2C,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;QAC9H,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE;KACtF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,4FAA4F;AAC5F,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CACzC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAC/G,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,QAAuB;IAClD,IAAI,QAAQ,KAAK,IAAI;
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/install/mcp-config.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -7,6 +7,20 @@ import { runHermesCli } from "./adapters/hermes-cli.js";
|
|
|
7
7
|
import { checkHermesStatus } from "./status.js";
|
|
8
8
|
import { version } from "./version.js";
|
|
9
9
|
const modeSchema = z.enum(["plan", "draft", "execute", "request-approval"]);
|
|
10
|
+
/**
|
|
11
|
+
* Single error boundary for every tool handler: any thrown error (bad preset,
|
|
12
|
+
* missing/oversized context, adapter failure, serialization) becomes a clean
|
|
13
|
+
* structured MCP error instead of crashing the server.
|
|
14
|
+
*/
|
|
15
|
+
async function guard(produce) {
|
|
16
|
+
try {
|
|
17
|
+
return await produce();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
21
|
+
return { content: [{ type: "text", text: `Bridge error: ${message}` }], isError: true };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
10
24
|
async function delegate(config, options) {
|
|
11
25
|
const dryRun = options.dryRun ?? false;
|
|
12
26
|
const run = buildEffectiveRun(config, {
|
|
@@ -17,6 +31,10 @@ async function delegate(config, options) {
|
|
|
17
31
|
yolo: options.yolo ?? false,
|
|
18
32
|
dryRun,
|
|
19
33
|
json: false,
|
|
34
|
+
provider: options.provider,
|
|
35
|
+
model: options.model,
|
|
36
|
+
maxTurns: options.maxTurns,
|
|
37
|
+
timeoutSeconds: options.timeoutSeconds,
|
|
20
38
|
});
|
|
21
39
|
const result = await runHermesCli(config, run, dryRun);
|
|
22
40
|
const sections = [result.stdout, result.stderr].filter((section) => section.trim().length > 0);
|
|
@@ -37,33 +55,41 @@ export async function startMcpServer(configPath) {
|
|
|
37
55
|
contextFiles: z.array(z.string()).optional(),
|
|
38
56
|
yolo: z.boolean().optional(),
|
|
39
57
|
dryRun: z.boolean().optional(),
|
|
58
|
+
provider: z.string().optional(),
|
|
59
|
+
model: z.string().optional(),
|
|
60
|
+
maxTurns: z.number().int().positive().optional(),
|
|
61
|
+
timeoutSeconds: z.number().int().positive().optional(),
|
|
40
62
|
},
|
|
41
|
-
}, (args) => delegate(config, {
|
|
63
|
+
}, (args) => guard(() => delegate(config, {
|
|
42
64
|
prompt: args.prompt,
|
|
43
65
|
mode: args.mode,
|
|
44
66
|
preset: args.preset,
|
|
45
67
|
contextFiles: args.contextFiles,
|
|
46
68
|
yolo: args.yolo,
|
|
47
69
|
dryRun: args.dryRun,
|
|
48
|
-
|
|
70
|
+
provider: args.provider,
|
|
71
|
+
model: args.model,
|
|
72
|
+
maxTurns: args.maxTurns,
|
|
73
|
+
timeoutSeconds: args.timeoutSeconds,
|
|
74
|
+
})));
|
|
49
75
|
server.registerTool("hermes_plan", {
|
|
50
76
|
title: "Ask Hermes for a plan",
|
|
51
77
|
description: "Shortcut for hermes_run with mode=plan.",
|
|
52
78
|
inputSchema: { prompt: z.string().min(1), preset: z.string().optional(), contextFiles: z.array(z.string()).optional() },
|
|
53
|
-
}, (args) => delegate(config, {
|
|
79
|
+
}, (args) => guard(() => delegate(config, {
|
|
54
80
|
prompt: args.prompt,
|
|
55
81
|
mode: "plan",
|
|
56
82
|
preset: args.preset,
|
|
57
83
|
contextFiles: args.contextFiles,
|
|
58
|
-
}));
|
|
84
|
+
})));
|
|
59
85
|
server.registerTool("hermes_presets", {
|
|
60
86
|
title: "List presets",
|
|
61
87
|
description: "List configured hermes-action-bridge presets.",
|
|
62
|
-
}, () => ({ content: [{ type: "text", text: JSON.stringify(config.presets, null, 2) }] }));
|
|
88
|
+
}, () => guard(() => ({ content: [{ type: "text", text: JSON.stringify(config.presets, null, 2) }] })));
|
|
63
89
|
server.registerTool("hermes_status", {
|
|
64
90
|
title: "Check Hermes runtime status",
|
|
65
91
|
description: "Check whether the configured Hermes command is available.",
|
|
66
|
-
}, () => ({ content: [{ type: "text", text: JSON.stringify(checkHermesStatus(config), null, 2) }] }));
|
|
92
|
+
}, () => guard(() => ({ content: [{ type: "text", text: JSON.stringify(checkHermesStatus(config), null, 2) }] })));
|
|
67
93
|
await server.connect(new StdioServerTransport());
|
|
68
94
|
}
|
|
69
95
|
//# sourceMappingURL=mcp-server.js.map
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.js
CHANGED
|
@@ -16,10 +16,17 @@ export function detectRisks(text) {
|
|
|
16
16
|
return [...risks];
|
|
17
17
|
}
|
|
18
18
|
export function applyPolicy(requestedMode, policy, prompt, yoloFlag) {
|
|
19
|
+
// Detected risks are informative only: they are surfaced to the human and to Hermes, but they never
|
|
20
|
+
// decide the mode. Keyword matching cannot be a security barrier — it is English-biased and trivially
|
|
21
|
+
// evaded by paraphrase. The real, deterministic, language-agnostic barrier is the host agent's approval
|
|
22
|
+
// prompt (Claude Code / Codex asking the human before the call runs). See docs/ARCHITECTURE.md.
|
|
19
23
|
const detectedRisks = detectRisks(prompt);
|
|
20
24
|
const yolo = yoloFlag || policy.yolo;
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
// Deterministic guard: any `execute` is downgraded to request-approval unless this context is explicitly
|
|
26
|
+
// trusted (empty requireApprovalFor) or yolo is set. Independent of the prompt's language or wording.
|
|
27
|
+
const guardActive = policy.requireApprovalFor.length > 0;
|
|
28
|
+
const approvalRequired = !yolo && guardActive && requestedMode === "execute";
|
|
29
|
+
const mode = approvalRequired ? "request-approval" : requestedMode;
|
|
23
30
|
return { mode, requestedMode, detectedRisks, approvalRequired };
|
|
24
31
|
}
|
|
25
32
|
//# sourceMappingURL=policy.js.map
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAmD;IACnE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,iEAAiE,EAAE;IACxG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4DAA4D,EAAE;IAC/F,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,8CAA8C,EAAE;IAC/E,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iDAAiD,EAAE;IAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gEAAgE,EAAE;IAC9F,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mEAAmE,EAAE;IAClG,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,gEAAgE,EAAE;CACzG,CAAC;AASF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAyB,EAAE,MAAoB,EAAE,MAAc,EAAE,QAAiB;IAC5G,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC;IACrC,MAAM,
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAmD;IACnE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,iEAAiE,EAAE;IACxG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4DAA4D,EAAE;IAC/F,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,8CAA8C,EAAE;IAC/E,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iDAAiD,EAAE;IAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gEAAgE,EAAE;IAC9F,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mEAAmE,EAAE;IAClG,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,gEAAgE,EAAE;CACzG,CAAC;AASF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAyB,EAAE,MAAoB,EAAE,MAAc,EAAE,QAAiB;IAC5G,oGAAoG;IACpG,sGAAsG;IACtG,wGAAwG;IACxG,gGAAgG;IAChG,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC;IACrC,yGAAyG;IACzG,sGAAsG;IACtG,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,CAAC,IAAI,IAAI,WAAW,IAAI,aAAa,KAAK,SAAS,CAAC;IAC7E,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAClE,CAAC"}
|
package/dist/run.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import type { BridgeConfig, EffectiveRun, RunOptions } from "./types.js";
|
|
1
|
+
import type { BridgeConfig, BridgeMode, EffectiveRun, RunOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Per-mode timeout defaults (seconds): plan/draft are cheap; execute/request-approval may run real tools.
|
|
4
|
+
* The timeout covers the whole session (chat -Q has no streaming), so defaults stay generous.
|
|
5
|
+
*/
|
|
6
|
+
export declare function defaultTimeoutSeconds(mode: BridgeMode): number;
|
|
2
7
|
export declare function buildEffectiveRun(config: BridgeConfig, options: RunOptions): EffectiveRun;
|
package/dist/run.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { applyPolicy } from "./policy.js";
|
|
2
2
|
import { readContextFiles } from "./context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-mode timeout defaults (seconds): plan/draft are cheap; execute/request-approval may run real tools.
|
|
5
|
+
* The timeout covers the whole session (chat -Q has no streaming), so defaults stay generous.
|
|
6
|
+
*/
|
|
7
|
+
export function defaultTimeoutSeconds(mode) {
|
|
8
|
+
return mode === "execute" || mode === "request-approval" ? 600 : 180;
|
|
9
|
+
}
|
|
3
10
|
export function buildEffectiveRun(config, options) {
|
|
4
11
|
const presetName = options.preset || config.defaults.preset;
|
|
5
12
|
const preset = config.presets[presetName];
|
|
@@ -7,7 +14,11 @@ export function buildEffectiveRun(config, options) {
|
|
|
7
14
|
throw new Error(`Unknown preset: ${presetName}`);
|
|
8
15
|
const requestedMode = options.mode || config.defaults.mode;
|
|
9
16
|
const yolo = options.yolo || config.policy.yolo;
|
|
10
|
-
const
|
|
17
|
+
const effectivePolicy = {
|
|
18
|
+
yolo: config.policy.yolo,
|
|
19
|
+
requireApprovalFor: preset.requireApprovalFor ?? config.policy.requireApprovalFor,
|
|
20
|
+
};
|
|
21
|
+
const decision = applyPolicy(requestedMode, effectivePolicy, options.prompt, yolo);
|
|
11
22
|
return {
|
|
12
23
|
mode: decision.mode,
|
|
13
24
|
requestedMode: decision.requestedMode,
|
|
@@ -15,13 +26,13 @@ export function buildEffectiveRun(config, options) {
|
|
|
15
26
|
preset,
|
|
16
27
|
prompt: options.prompt,
|
|
17
28
|
source: options.source || preset.source || config.defaults.source,
|
|
18
|
-
profile: options.profile || preset.profile || config.defaults.profile,
|
|
19
29
|
provider: options.provider || preset.provider,
|
|
20
30
|
model: options.model || preset.model,
|
|
21
31
|
maxTurns: options.maxTurns || preset.maxTurns || config.defaults.maxTurns,
|
|
22
32
|
yolo,
|
|
23
33
|
detectedRisks: decision.detectedRisks,
|
|
24
|
-
contextDocuments: readContextFiles(options.contextFiles),
|
|
34
|
+
contextDocuments: readContextFiles(options.contextFiles, config.runtime.maxContextBytes),
|
|
35
|
+
timeoutSeconds: options.timeoutSeconds ?? config.runtime.timeoutSeconds ?? defaultTimeoutSeconds(decision.mode),
|
|
25
36
|
};
|
|
26
37
|
}
|
|
27
38
|
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,OAAmB;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAChD,MAAM,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,OAAmB;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAChD,MAAM,eAAe,GAAiB;QACpC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB;KAClF,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEnF,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,UAAU;QACV,MAAM;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM;QACjE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAC7C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ;QACzE,IAAI;QACJ,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QACxF,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC;KAChH,CAAC;AACJ,CAAC"}
|
package/dist/status.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { BridgeConfig } from "./types.js";
|
|
2
|
+
/** Quick liveness probe for a tool's `--version` — a short fixed cap, distinct from the configurable per-run timeout. */
|
|
3
|
+
export declare const versionProbeTimeoutMs = 5000;
|
|
2
4
|
export interface StatusResult {
|
|
3
5
|
command: string;
|
|
4
6
|
available: boolean;
|
package/dist/status.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
/** Quick liveness probe for a tool's `--version` — a short fixed cap, distinct from the configurable per-run timeout. */
|
|
3
|
+
export const versionProbeTimeoutMs = 5000;
|
|
2
4
|
export function checkHermesStatus(config) {
|
|
3
|
-
const result = spawnSync(config.runtime.command, ["--version"], { encoding: "utf8" });
|
|
5
|
+
const result = spawnSync(config.runtime.command, ["--version"], { encoding: "utf8", timeout: versionProbeTimeoutMs });
|
|
4
6
|
if (result.error)
|
|
5
7
|
return { command: config.runtime.command, available: false, error: result.error.message };
|
|
6
8
|
if (result.status !== 0)
|
package/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,yHAAyH;AACzH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAS1C,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACtH,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5G,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9I,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7F,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,6 +4,10 @@ export type RuntimeAdapter = "hermes-cli";
|
|
|
4
4
|
export interface RuntimeConfig {
|
|
5
5
|
adapter: RuntimeAdapter;
|
|
6
6
|
command: string;
|
|
7
|
+
/** Aggregate budget across all --context files (bytes). Default leaves headroom under ARG_MAX; the adapter does the precise envelope-size check. */
|
|
8
|
+
maxContextBytes: number;
|
|
9
|
+
/** Overall child-process timeout (seconds). When unset, per-mode defaults apply (see run.ts). */
|
|
10
|
+
timeoutSeconds?: number | undefined;
|
|
7
11
|
}
|
|
8
12
|
export interface PresetConfig {
|
|
9
13
|
description?: string | undefined;
|
|
@@ -11,13 +15,13 @@ export interface PresetConfig {
|
|
|
11
15
|
toolsets: string[];
|
|
12
16
|
provider?: string | undefined;
|
|
13
17
|
model?: string | undefined;
|
|
14
|
-
profile?: string | undefined;
|
|
15
18
|
maxTurns?: number | undefined;
|
|
16
19
|
source?: string | undefined;
|
|
20
|
+
/** Per-preset override of the risk categories that force request-approval. Falls back to the global policy when unset. */
|
|
21
|
+
requireApprovalFor?: RiskCategory[] | undefined;
|
|
17
22
|
}
|
|
18
23
|
export interface DefaultsConfig {
|
|
19
24
|
mode: BridgeMode;
|
|
20
|
-
profile?: string | undefined;
|
|
21
25
|
source: string;
|
|
22
26
|
maxTurns: number;
|
|
23
27
|
preset: string;
|
|
@@ -41,11 +45,11 @@ export interface RunOptions {
|
|
|
41
45
|
yolo: boolean;
|
|
42
46
|
dryRun: boolean;
|
|
43
47
|
json: boolean;
|
|
44
|
-
profile?: string | undefined;
|
|
45
48
|
provider?: string | undefined;
|
|
46
49
|
model?: string | undefined;
|
|
47
50
|
maxTurns?: number | undefined;
|
|
48
51
|
source?: string | undefined;
|
|
52
|
+
timeoutSeconds?: number | undefined;
|
|
49
53
|
}
|
|
50
54
|
export interface ContextDocument {
|
|
51
55
|
path: string;
|
|
@@ -58,13 +62,14 @@ export interface EffectiveRun {
|
|
|
58
62
|
preset: PresetConfig;
|
|
59
63
|
prompt: string;
|
|
60
64
|
source: string;
|
|
61
|
-
profile?: string | undefined;
|
|
62
65
|
provider?: string | undefined;
|
|
63
66
|
model?: string | undefined;
|
|
64
67
|
maxTurns: number;
|
|
65
68
|
yolo: boolean;
|
|
66
69
|
detectedRisks: RiskCategory[];
|
|
67
70
|
contextDocuments: ContextDocument[];
|
|
71
|
+
/** Resolved overall timeout for this run (seconds). Covers the whole session — chat -Q emits only the final response, so there is no per-turn timeout. */
|
|
72
|
+
timeoutSeconds: number;
|
|
68
73
|
}
|
|
69
74
|
export interface AdapterResult {
|
|
70
75
|
ok: boolean;
|
|
@@ -72,6 +77,9 @@ export interface AdapterResult {
|
|
|
72
77
|
stdout: string;
|
|
73
78
|
stderr: string;
|
|
74
79
|
command: string[];
|
|
80
|
+
/** The full constructed envelope. For large payloads this is what was written to the temp file, not the short `-q` pointer in `command`. */
|
|
75
81
|
prompt: string;
|
|
76
82
|
dryRun: boolean;
|
|
83
|
+
/** True when the child was killed because it exceeded the timeout. */
|
|
84
|
+
timedOut?: boolean;
|
|
77
85
|
}
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -23,8 +23,8 @@ Hermes skills, tools, browser automation, MCPs, cron jobs, messaging, APIs
|
|
|
23
23
|
- `src/config.ts`: YAML config loading and normalization.
|
|
24
24
|
- `src/policy.ts`: risk detection and mode switching.
|
|
25
25
|
- `src/prompt.ts`: prompt envelope sent to Hermes.
|
|
26
|
-
- `src/context.ts`: context file loading with
|
|
27
|
-
- `src/adapters/hermes-cli.ts`: Hermes CLI adapter.
|
|
26
|
+
- `src/context.ts`: context file loading with a per-file cap and an aggregate budget.
|
|
27
|
+
- `src/adapters/hermes-cli.ts`: Hermes CLI adapter (argv or temp-file prompt delivery, child-process timeout).
|
|
28
28
|
- `src/mcp-server.ts`: minimal MCP server.
|
|
29
29
|
- `src/status.ts`: runtime availability check.
|
|
30
30
|
- `src/version.ts`: single source of truth for the package version.
|
|
@@ -75,11 +75,11 @@ The bridge does not decide how Hermes completes the task. It only labels the req
|
|
|
75
75
|
|
|
76
76
|
## Policy
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
The security barrier is the **host agent's approval prompt**, not the bridge. The bridge assumes a supervised caller (Claude Code / Codex) that asks the human to approve each command or tool call before it runs — a deterministic, language-agnostic gate. The bridge must never bypass it (it never injects `--yolo` or a oneshot flag).
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
The bridge's own guard is a secondary, deterministic net: in `mode=execute` it changes the effective mode to `request-approval` unless the preset/policy is explicitly trusted (empty `require_approval_for`) or YOLO is enabled. This is independent of the prompt's language or wording.
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
Keyword risk detection (`detectRisks`) is **informational only**: recognized categories are listed in the prompt envelope to help the human and Hermes decide, but they never drive the mode. Keyword matching is English-biased and easily evaded, so it is not treated as a security control.
|
|
83
83
|
|
|
84
84
|
## YOLO
|
|
85
85
|
|
|
@@ -91,6 +91,17 @@ hermes-action run --yolo --mode execute "..."
|
|
|
91
91
|
|
|
92
92
|
It bypasses the bridge policy only. Hermes Agent still enforces its own rules and any tool/provider/platform approval flow.
|
|
93
93
|
|
|
94
|
+
## Prompt delivery and runtime limits
|
|
95
|
+
|
|
96
|
+
The adapter builds one prompt envelope (policy header + request + `<context>` blocks) and delivers it to `hermes chat -Q`:
|
|
97
|
+
|
|
98
|
+
- **Small envelopes** ride the command line as `-q <text>` — the original, lowest-overhead path.
|
|
99
|
+
- **Large envelopes** (above ~896 KiB, kept below the OS `ARG_MAX`) are written to a `0600` file in a per-run `mkdtemp` directory; Hermes is given a short pointer query and a `file` toolset so it reads the file itself. This avoids `E2BIG`. The temp directory is removed on every exit path. The path is opt-in: the default context budget keeps envelopes below the threshold, so it engages only when `runtime.max_context_bytes` is raised.
|
|
100
|
+
|
|
101
|
+
`src/context.ts` enforces a fixed 250 KiB per-file cap and a configurable aggregate budget so oversized handoffs fail with a clear message before reaching `spawn`.
|
|
102
|
+
|
|
103
|
+
Every child process is bounded by a timeout (per-mode defaults, overridable via `--timeout` or `runtime.timeout_seconds`): on expiry it is sent `SIGTERM`, then `SIGKILL` after a grace period. The status/doctor `--version` probes use a short synchronous timeout for the same reason.
|
|
104
|
+
|
|
94
105
|
## MCP design
|
|
95
106
|
|
|
96
107
|
The MCP server exposes a small delegation surface instead of mirroring every Hermes tool.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hermes-action-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Configurable bridge for external agents to delegate actions to Hermes Agent via CLI or MCP.",
|
|
5
5
|
"mcpName": "io.github.TheBlueHouse75/hermes-action-bridge",
|
|
6
6
|
"repository": {
|