@staix/agent-hub 0.7.9 → 0.7.10
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 +4 -0
- package/README.md +2 -2
- package/docs/operations.md +6 -6
- package/docs/quickstart.md +1 -1
- package/package.json +1 -1
- package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
- package/plugins/agent-hub/server.js +1 -1
- package/src/local/deny.ts +9 -2
- package/src/local/sandbox.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ Issue and pull request numbers in the entries for 0.7.7 and earlier refer to the
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.7.10
|
|
8
|
+
|
|
9
|
+
- A `local.deny` entry, or a project path, containing `"` no longer breaks the local worker's sandbox profile (its bash and git tools stopped with a parse error); the deny rules are written as plain SBPL strings, which can hold a quote (#23).
|
|
10
|
+
|
|
7
11
|
## 0.7.9
|
|
8
12
|
|
|
9
13
|
- A committed `.agenthub/config.json` can no longer choose what the hub runs, which files it sends as credentials, where task text goes, or how far the local worker's sandbox reaches: those machine-local fields (launch commands, checks, the legacy MLX binary and model directory, gateway URLs and key files, the memory endpoint, sandbox widening) apply only from a file git confirms nobody committed, such as the new `.agenthub/config.local.json`, and are otherwise ignored with a log line and a doctor row. A tracked file is recognised by identity, which also closes a way past the 0.7.8 completion-check gate: a committed file under a spelling macOS opens as `config.json` but git does not match (such as `ſ` for `s`) counted as uncommitted (#17).
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Native multi-agent hub for one developer's machine: Claude Code, Codex, Kimi Cod
|
|
|
4
4
|
hub-owned local-LLM worker collaborate as peers in independent project directories, with
|
|
5
5
|
task-aware model routing (Switchyard) in front of a self-hosted gateway (OmniRoute).
|
|
6
6
|
|
|
7
|
-
Status: 0.7.
|
|
7
|
+
Status: 0.7.10, control protocol 10. Durable delivery records distinguish queued
|
|
8
8
|
work from uncertain execution. The [smoke checklist](docs/smoke.md) records
|
|
9
9
|
verified paths and remaining prerequisites.
|
|
10
10
|
|
|
@@ -28,7 +28,7 @@ cd <your project> && ahub init && ahub up && ahub tail
|
|
|
28
28
|
Or install the same version from GitHub:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
bun add -g github:STAIxBWLB/agent-hub#v0.7.
|
|
31
|
+
bun add -g github:STAIxBWLB/agent-hub#v0.7.10 && ahub setup
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
The installed commands remain `ahub` and `agent-hub`.
|
package/docs/operations.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Operations guide
|
|
2
2
|
|
|
3
|
-
This guide describes ahub 0.7.
|
|
3
|
+
This guide describes ahub 0.7.10 and control protocol 10. Live verification
|
|
4
4
|
results and remaining prerequisites are recorded separately in [the smoke ledger](smoke.md).
|
|
5
5
|
|
|
6
6
|
## Install and start
|
|
@@ -226,8 +226,8 @@ source and carries every recovery fix released up to it. Protocol 8 and older
|
|
|
226
226
|
project directory, without replacing the global CLI first:
|
|
227
227
|
|
|
228
228
|
```bash
|
|
229
|
-
bunx --package @staix/agent-hub@0.7.
|
|
230
|
-
bunx --package @staix/agent-hub@0.7.
|
|
229
|
+
bunx --package @staix/agent-hub@0.7.10 ahub upgrade --to 0.7.10 --dry-run
|
|
230
|
+
bunx --package @staix/agent-hub@0.7.10 ahub upgrade --to 0.7.10 --yes
|
|
231
231
|
```
|
|
232
232
|
|
|
233
233
|
| Running now | Coordinator to use |
|
|
@@ -249,19 +249,19 @@ The coordinator verifies and retains the exact target package, preserves its
|
|
|
249
249
|
own source, and promotes the global CLI only after restored projects pass
|
|
250
250
|
readback.
|
|
251
251
|
|
|
252
|
-
Once the installed CLI is 0.7.
|
|
252
|
+
Once the installed CLI is 0.7.10, review the current project or all registered
|
|
253
253
|
projects first:
|
|
254
254
|
|
|
255
255
|
```bash
|
|
256
256
|
ahub restart --dry-run
|
|
257
|
-
ahub upgrade --to 0.7.
|
|
257
|
+
ahub upgrade --to 0.7.10 --dry-run
|
|
258
258
|
```
|
|
259
259
|
|
|
260
260
|
Apply only after reviewing the plan:
|
|
261
261
|
|
|
262
262
|
```bash
|
|
263
263
|
ahub restart --yes
|
|
264
|
-
ahub upgrade --to 0.7.
|
|
264
|
+
ahub upgrade --to 0.7.10 --yes
|
|
265
265
|
ahub recovery status <operation-id>
|
|
266
266
|
ahub recovery resume <operation-id>
|
|
267
267
|
ahub recovery abort <operation-id>
|
package/docs/quickstart.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-hub",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.10",
|
|
4
4
|
"description": "Channel between Claude Code and the agent-hub daemon: peer messages from Codex, Kimi and the local worker arrive as channel events; hub_send replies.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Young Joon Lee",
|
|
@@ -15727,7 +15727,7 @@ class ControlClient {
|
|
|
15727
15727
|
// package.json
|
|
15728
15728
|
var package_default = {
|
|
15729
15729
|
name: "@staix/agent-hub",
|
|
15730
|
-
version: "0.7.
|
|
15730
|
+
version: "0.7.10",
|
|
15731
15731
|
description: "Native multi-agent hub: Claude Code, Codex, Kimi Code, Pi and local inference as peers in one project",
|
|
15732
15732
|
license: "MIT",
|
|
15733
15733
|
type: "module",
|
package/src/local/deny.ts
CHANGED
|
@@ -17,7 +17,14 @@ export function isDenied(path: string, extra: string[] = []): boolean {
|
|
|
17
17
|
return DENY_SEGMENTS.some((s) => hasSegment(norm, s)) || DENY_NAMES.some((re) => new RegExp(re).test(basename(norm))) || extra.some((e) => e && norm.includes(e));
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
/** Regex metacharacters only; `sbplString` quotes the finished regex. */
|
|
21
|
+
const sbplEscape = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* An SBPL string literal. Only the plain `"..."` form can hold a quote: in the raw `#"..."` form a backslash escapes
|
|
25
|
+
* nothing, so a `"` in a path ended the literal and broke the whole profile (issue #23).
|
|
26
|
+
*/
|
|
27
|
+
export const sbplString = (s: string) => `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
21
28
|
|
|
22
29
|
/**
|
|
23
30
|
* Seatbelt regex filters equivalent to isDenied. Seatbelt sees absolute paths, so the `local.deny` substrings are
|
|
@@ -32,5 +39,5 @@ export function denyRegexes(root: string, extra: string[] = []): string[] {
|
|
|
32
39
|
...DENY_SEGMENTS.map((s) => `/${sbplEscape(s)}(/|$)`),
|
|
33
40
|
...names,
|
|
34
41
|
...extra.filter(Boolean).map((e) => `^${sbplEscape(root)}/.*${sbplEscape(e)}`),
|
|
35
|
-
].map((re) => `(regex
|
|
42
|
+
].map((re) => `(regex ${sbplString(re)})`);
|
|
36
43
|
}
|
package/src/local/sandbox.ts
CHANGED
|
@@ -2,14 +2,14 @@ import { spawn, spawnSync } from "node:child_process";
|
|
|
2
2
|
import { existsSync, realpathSync } from "node:fs";
|
|
3
3
|
import { homedir, tmpdir } from "node:os";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
|
-
import { denyRegexes } from "./deny.ts";
|
|
5
|
+
import { denyRegexes, sbplString } from "./deny.ts";
|
|
6
6
|
|
|
7
7
|
const SANDBOX_EXEC = "/usr/bin/sandbox-exec";
|
|
8
8
|
export const OUTPUT_CAP = 20_000;
|
|
9
9
|
|
|
10
10
|
export const sandboxAvailable = () => process.platform === "darwin" && existsSync(SANDBOX_EXEC);
|
|
11
11
|
|
|
12
|
-
const q =
|
|
12
|
+
const q = sbplString;
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Seatbelt profile for everything the local worker executes (bash, git). Path checks cannot scope a shell,
|