@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 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.9, control protocol 10. Durable delivery records distinguish queued
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.9 && ahub setup
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`.
@@ -1,6 +1,6 @@
1
1
  # Operations guide
2
2
 
3
- This guide describes ahub 0.7.9 and control protocol 10. Live verification
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.9 ahub upgrade --to 0.7.9 --dry-run
230
- bunx --package @staix/agent-hub@0.7.9 ahub upgrade --to 0.7.9 --yes
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.9, review the current project or all registered
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.9 --dry-run
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.9 --yes
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>
@@ -17,7 +17,7 @@ ahub setup # installs the Claude Code channel plu
17
17
  Or use the matching GitHub release:
18
18
 
19
19
  ```bash
20
- bun add -g github:STAIxBWLB/agent-hub#v0.7.9
20
+ bun add -g github:STAIxBWLB/agent-hub#v0.7.10
21
21
  ahub setup
22
22
  ```
23
23
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@staix/agent-hub",
3
- "version": "0.7.9",
3
+ "version": "0.7.10",
4
4
  "description": "Native multi-agent hub: Claude Code, Codex, Kimi Code, Pi and local inference as peers in one project",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-hub",
3
- "version": "0.7.9",
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.9",
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
- const sbplEscape = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/"/g, '\\"');
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 #"${re.replace(/"/g, '\\"')}")`);
42
+ ].map((re) => `(regex ${sbplString(re)})`);
36
43
  }
@@ -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 = (s: string) => `"${s.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
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,