cargo-hauler 0.9.5 → 0.9.7
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 +19 -0
- package/README.md +15 -5
- package/dist/.claude-plugin/marketplace.json +1 -1
- package/dist/.claude-plugin/plugin.json +1 -1
- package/dist/.codex-plugin/plugin.json +1 -1
- package/dist/.cursor-plugin/plugin.json +1 -1
- package/dist/INSTALL.md +1 -1
- package/dist/README.md +15 -5
- package/dist/agent-bundle.compile-evidence.json +1 -1
- package/dist/agent-bundle.manifest.json +1 -1
- package/dist/agent-bundle.package-compile-evidence.json +1 -1
- package/dist/bin/cargo-hauler-flight.mjs +205 -103
- package/dist/bin/cargo-hauler-install.js +533 -4
- package/dist/bin/cargo-hauler.mjs +248 -126
- package/dist/bin/hauler.js +344 -111
- package/dist/hooks/event-route-session-start.claude.mjs +2 -2
- package/dist/hooks/event-route-session-start.codex.mjs +2 -2
- package/dist/hooks/event-route-session-start.cursor.mjs +2 -2
- package/dist/hooks/event-route-stop.claude.mjs +2 -2
- package/dist/hooks/event-route-stop.codex.mjs +2 -2
- package/dist/hooks/event-route-stop.cursor.mjs +2 -2
- package/dist/hooks/event-route-tool-after.claude.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-after.claude.mjs +6 -6
- package/dist/hooks/event-route-tool-after.codex.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-after.codex.mjs +6 -6
- package/dist/hooks/event-route-tool-after.cursor.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-after.cursor.mjs +6 -6
- package/dist/hooks/event-route-tool-before.claude.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-before.claude.mjs +1 -1
- package/dist/hooks/event-route-tool-before.codex.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-before.codex.mjs +1 -1
- package/dist/hooks/event-route-tool-before.cursor.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-before.cursor.mjs +1 -1
- package/dist/hooks/hooks-flight.mjs +15 -15
- package/dist/install.mjs +1 -1
- package/dist/mcp/mcp-hauler-2b8242f9-flight.mjs +209 -107
- package/dist/mcp/mcp-hauler-2b8242f9.mjs +208 -106
- package/dist/mcp-apps/dashboard.html +2 -2
- package/dist/package.json +1 -1
- package/dist/plugin.json +1 -1
- package/dist/scripts/hauler.mjs +344 -111
- package/dist/skills/hauler-dashboard/SKILL.md +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f0873d1: Status and the dashboard no longer count a batch rider's solo estimate as compute avoided. A batch rider's packages compile inside the leader's combined run, so it now credits no avoided compute. Its latency saved now counts its solo run from after the leader's compile estimate, because it was queued behind the leader until the leader handed the lane on. A batch that beats both runs back to back no longer shows as "finished later than alone". Rows written before this release keep their old credit.
|
|
8
|
+
- b3b6f4f: A live daemon whose socket this client cannot open (`EACCES`, `EMFILE`, `EPERM`) no longer reads as stopped. `hauler result` and `hauler await` fail with `render-failed` instead of calling a running ticket `orphaned` and `stranded by a stopped daemon`. `hauler status`, `hauler log`, and `hauler last` report the daemon `unresponsive` with the errno, and `hauler daemon status` names it. Only a missing socket or a refused connection falls back to the stopped-daemon ledger read.
|
|
9
|
+
- 0691e77: `hauler result`, `hauler await`, `hauler kill`, and `hauler request` against a live daemon whose socket cannot be opened now name the errno and point at `hauler daemon status`. They no longer say the daemon starts on demand or to run `hauler daemon start`.
|
|
10
|
+
|
|
11
|
+
## 0.9.6
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 84d9487: `hauler daemon stop` and `hauler daemon restart` no longer hang on a cargo or test binary that ignores SIGTERM. Shutdown now escalates to SIGKILL after `CARGO_HAULER_KILL_GRACE_MS`, as an explicit `hauler kill` already did, and the `cargo metadata` lookup behind dependency-aware estimates follows the same rule.
|
|
16
|
+
- 31d165f: `hauler kill` on a ticket waiting in its lane's batch window now settles it killed right away. The kill used to wait out the whole window (`CARGO_HAULER_BATCH_WINDOW_MS`) before the ticket settled.
|
|
17
|
+
- 7a29425: `hauler kill` now says what happened to the ticket. A queued ticket reads `killed before it started; no cargo process ran`, a rider reads `killed; detached from cc-N`, and only a running leader still reads `the daemon stops its cargo process and frees the lane`.
|
|
18
|
+
- 192a27d: `hauler request` now attributes its ticket to the calling agent. It reads `CARGO_HAULER_HOST` and `CARGO_HAULER_SESSION` like `hauler exec`, then the session id the agent host exports to its shell (`CLAUDE_CODE_SESSION_ID`, `CODEX_THREAD_ID`, `CURSOR_CONVERSATION_ID`). Background requests and PATH-shim runs from an agent shell no longer land in the ledger with a null session.
|
|
19
|
+
- 1fe16a4: `cargo-hauler-install install <host>` now rewrites a PATH `cargo` shim that runs another cargo-hauler version, or a `node` or `hauler.js` that is gone, and keeps its Cargo path. A Node or cargo-hauler upgrade no longer leaves scripted cargo on an old client that falls back to passthrough. `cargo-hauler-install doctor` adds that finding to its report as an error, in text and `--json`, and exits `1`. A newly written shim also runs the real Cargo when its embedded `node` is gone, instead of failing every `cargo` with exit 127.
|
|
20
|
+
- 7adf6e3: `hauler result` and `hauler await` answer from the ledger when the daemon is stopped instead of exiting with `render-failed`. A ticket the stopped daemon left in flight reads as `orphaned` with the reason `stranded by a stopped daemon`, the same projection `hauler status` and `hauler last` show. A ticket missing from the ledger says so and names the stopped daemon. Both results now carry `daemon` (`running` or `stopped`), and an orphaned ticket gets next-step guidance on every detail surface.
|
|
21
|
+
|
|
3
22
|
## 0.9.5
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -507,8 +507,12 @@ realpath (a version-manager shim such as `mise/shims/hauler`, which resolves to
|
|
|
507
507
|
a native binary, does not count); an npm `dist/bin/hauler.js` entry embeds
|
|
508
508
|
itself only when that walk finds nothing. It refuses to run from a plugin-local
|
|
509
509
|
`scripts/hauler.mjs`.
|
|
510
|
-
|
|
511
|
-
|
|
510
|
+
The shim is stale when its embedded `hauler.js` belongs to another
|
|
511
|
+
cargo-hauler version, or when its embedded `node` or `hauler.js` is gone.
|
|
512
|
+
`cargo-hauler-install install <host>` rewrites a stale shim, through a symlink
|
|
513
|
+
if `cargo` is one, and keeps its Cargo path. `cargo-hauler-install doctor`
|
|
514
|
+
reports a stale shim as an error in its report. The same version under another
|
|
515
|
+
working `node` is current, so a per-directory Node pin does not flip it.
|
|
512
516
|
|
|
513
517
|
### Caller environment
|
|
514
518
|
|
|
@@ -693,7 +697,7 @@ Per-host notes and hook timeouts are in [docs/install.md](docs/install.md).
|
|
|
693
697
|
| `CARGO_HAULER_LEDGER_MAX_ROWS` | `50000` | Total ledger rows beyond which the oldest finished rows are deleted when the daemon starts; `0` disables the row cap. Pruned rows take their `tickets/<ticket>.log` files with them. |
|
|
694
698
|
| `CARGO_HAULER_TICKET_LOG_MAX_BYTES` | `67108864` (64 MiB) | Bytes of a leader run's combined output written to `<state dir>/tickets/<ticket>.log` before the log stops with one truncation line; `0` writes no ticket logs (`hauler result` then has only the tail). |
|
|
695
699
|
| `CARGO_HAULER_LOG_LEVEL` | `Info` | Daemon log level. |
|
|
696
|
-
| `CARGO_HAULER_HOST`, `CARGO_HAULER_SESSION` | Unset | Default `--host` and `--session` attribution for `hauler exec
|
|
700
|
+
| `CARGO_HAULER_HOST`, `CARGO_HAULER_SESSION` | Unset | Default `--host` and `--session` attribution for `hauler exec` and `hauler request`. Without them, the session id the agent host exports to its shell (`CLAUDE_CODE_SESSION_ID`, `CODEX_THREAD_ID`, `CURSOR_CONVERSATION_ID`) attributes the request to `claude`, `codex`, or `cursor`. The PATH shim also borrows `CARGO_HAULER_HOST`'s shell cap when auto-background is allowed. |
|
|
697
701
|
| `CARGO_HAULER_SHIM_BACKGROUND` | Unset | `1` / `true` / `on` / `yes` lets a non-TTY PATH shim auto-background over the host cap (exit 75). Without it, a shim that is not a TTY waits for cargo's exit. |
|
|
698
702
|
|
|
699
703
|
A numeric value that does not parse or falls outside its range is reported
|
|
@@ -758,8 +762,9 @@ there; state files keep the permissions the filesystem gives them.
|
|
|
758
762
|
retries for up to 60 seconds, then runs Cargo directly without a start
|
|
759
763
|
attempt or a second retry cycle.
|
|
760
764
|
- The plugin's own documents never fail open: `hauler_result` and
|
|
761
|
-
`hauler_await`
|
|
762
|
-
|
|
765
|
+
`hauler_await` read a stopped daemon's tickets from the ledger, and fail
|
|
766
|
+
loudly with the errno when a live daemon's socket cannot be opened instead
|
|
767
|
+
of reporting a ticket as not found; `hauler_status`, `hauler_log`, and
|
|
763
768
|
`hauler_last` read the ledger with the daemon marked `stopped` or
|
|
764
769
|
`unresponsive`. Reads never request daemon shutdown. They use an older
|
|
765
770
|
or newer daemon when its wire-protocol identity is compatible; a truly
|
|
@@ -942,6 +947,11 @@ and `hauler status --session <conversation>` (the `hauler_status` tool takes
|
|
|
942
947
|
the same filter as its `session` field). Results carry
|
|
943
948
|
`attribution: { host, session, lineage }`.
|
|
944
949
|
|
|
950
|
+
The CLI `hauler request` reads its caller's shell instead: explicit flags
|
|
951
|
+
win, then `CARGO_HAULER_HOST`/`CARGO_HAULER_SESSION`, then the session id the
|
|
952
|
+
agent host exports to its shell tool. The MCP tool never reads its own process environment, which
|
|
953
|
+
belongs to the server and not the calling conversation.
|
|
954
|
+
|
|
945
955
|
#### Routes
|
|
946
956
|
|
|
947
957
|
| Route | Surface | Document |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","name":"cargo-hauler-marketplace","owner":{"name":"cargo-hauler"},"plugins":[{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","source":"./","version":"0.9.
|
|
1
|
+
{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","name":"cargo-hauler-marketplace","owner":{"name":"cargo-hauler"},"plugins":[{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","source":"./","version":"0.9.7"}]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"author":{"name":"cargo-hauler"},"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","name":"cargo-hauler","version":"0.9.
|
|
1
|
+
{"author":{"name":"cargo-hauler"},"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","name":"cargo-hauler","version":"0.9.7"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"author":{"name":"cargo-hauler"},"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","hooks":"./.codex-plugin/hooks.json","interface":{"capabilities":["mcp","hooks","skills"],"category":"Productivity","defaultPrompt":["Help me use cargo-hauler."],"developerName":"cargo-hauler","displayName":"cargo-hauler","longDescription":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","shortDescription":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks."},"keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","mcpServers":"./.codex-plugin/mcp.json","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","skills":"./skills/","version":"0.9.
|
|
1
|
+
{"author":{"name":"cargo-hauler"},"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","hooks":"./.codex-plugin/hooks.json","interface":{"capabilities":["mcp","hooks","skills"],"category":"Productivity","defaultPrompt":["Help me use cargo-hauler."],"developerName":"cargo-hauler","displayName":"cargo-hauler","longDescription":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","shortDescription":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks."},"keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","mcpServers":"./.codex-plugin/mcp.json","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","skills":"./skills/","version":"0.9.7"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","displayName":"cargo-hauler","hooks":"./.cursor-plugin/hooks.json","keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","mcpServers":"./.cursor-plugin/mcp.json","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","skills":"./skills/","version":"0.9.
|
|
1
|
+
{"description":"Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.","displayName":"cargo-hauler","hooks":"./.cursor-plugin/hooks.json","keywords":["cargo","rust","agent","mcp","claude-code","codex","cursor","build-orchestration"],"license":"MIT","mcpServers":"./.cursor-plugin/mcp.json","name":"cargo-hauler","repository":"https://github.com/ScriptedAlchemy/cargo-hauler","skills":"./skills/","version":"0.9.7"}
|
package/dist/INSTALL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Coalesce, schedule, and stream cargo so concurrent agent sessions share compiles instead of fighting locks.
|
|
4
4
|
|
|
5
|
-
Version: `0.9.
|
|
5
|
+
Version: `0.9.7`
|
|
6
6
|
|
|
7
7
|
Run these commands from this bundle directory. The bundle is self-contained: every command below is
|
|
8
8
|
a host command or the bundled installer, and nothing requires the `agent-bundle` CLI. Where that CLI is
|
package/dist/README.md
CHANGED
|
@@ -507,8 +507,12 @@ realpath (a version-manager shim such as `mise/shims/hauler`, which resolves to
|
|
|
507
507
|
a native binary, does not count); an npm `dist/bin/hauler.js` entry embeds
|
|
508
508
|
itself only when that walk finds nothing. It refuses to run from a plugin-local
|
|
509
509
|
`scripts/hauler.mjs`.
|
|
510
|
-
|
|
511
|
-
|
|
510
|
+
The shim is stale when its embedded `hauler.js` belongs to another
|
|
511
|
+
cargo-hauler version, or when its embedded `node` or `hauler.js` is gone.
|
|
512
|
+
`cargo-hauler-install install <host>` rewrites a stale shim, through a symlink
|
|
513
|
+
if `cargo` is one, and keeps its Cargo path. `cargo-hauler-install doctor`
|
|
514
|
+
reports a stale shim as an error in its report. The same version under another
|
|
515
|
+
working `node` is current, so a per-directory Node pin does not flip it.
|
|
512
516
|
|
|
513
517
|
### Caller environment
|
|
514
518
|
|
|
@@ -693,7 +697,7 @@ Per-host notes and hook timeouts are in [docs/install.md](docs/install.md).
|
|
|
693
697
|
| `CARGO_HAULER_LEDGER_MAX_ROWS` | `50000` | Total ledger rows beyond which the oldest finished rows are deleted when the daemon starts; `0` disables the row cap. Pruned rows take their `tickets/<ticket>.log` files with them. |
|
|
694
698
|
| `CARGO_HAULER_TICKET_LOG_MAX_BYTES` | `67108864` (64 MiB) | Bytes of a leader run's combined output written to `<state dir>/tickets/<ticket>.log` before the log stops with one truncation line; `0` writes no ticket logs (`hauler result` then has only the tail). |
|
|
695
699
|
| `CARGO_HAULER_LOG_LEVEL` | `Info` | Daemon log level. |
|
|
696
|
-
| `CARGO_HAULER_HOST`, `CARGO_HAULER_SESSION` | Unset | Default `--host` and `--session` attribution for `hauler exec
|
|
700
|
+
| `CARGO_HAULER_HOST`, `CARGO_HAULER_SESSION` | Unset | Default `--host` and `--session` attribution for `hauler exec` and `hauler request`. Without them, the session id the agent host exports to its shell (`CLAUDE_CODE_SESSION_ID`, `CODEX_THREAD_ID`, `CURSOR_CONVERSATION_ID`) attributes the request to `claude`, `codex`, or `cursor`. The PATH shim also borrows `CARGO_HAULER_HOST`'s shell cap when auto-background is allowed. |
|
|
697
701
|
| `CARGO_HAULER_SHIM_BACKGROUND` | Unset | `1` / `true` / `on` / `yes` lets a non-TTY PATH shim auto-background over the host cap (exit 75). Without it, a shim that is not a TTY waits for cargo's exit. |
|
|
698
702
|
|
|
699
703
|
A numeric value that does not parse or falls outside its range is reported
|
|
@@ -758,8 +762,9 @@ there; state files keep the permissions the filesystem gives them.
|
|
|
758
762
|
retries for up to 60 seconds, then runs Cargo directly without a start
|
|
759
763
|
attempt or a second retry cycle.
|
|
760
764
|
- The plugin's own documents never fail open: `hauler_result` and
|
|
761
|
-
`hauler_await`
|
|
762
|
-
|
|
765
|
+
`hauler_await` read a stopped daemon's tickets from the ledger, and fail
|
|
766
|
+
loudly with the errno when a live daemon's socket cannot be opened instead
|
|
767
|
+
of reporting a ticket as not found; `hauler_status`, `hauler_log`, and
|
|
763
768
|
`hauler_last` read the ledger with the daemon marked `stopped` or
|
|
764
769
|
`unresponsive`. Reads never request daemon shutdown. They use an older
|
|
765
770
|
or newer daemon when its wire-protocol identity is compatible; a truly
|
|
@@ -942,6 +947,11 @@ and `hauler status --session <conversation>` (the `hauler_status` tool takes
|
|
|
942
947
|
the same filter as its `session` field). Results carry
|
|
943
948
|
`attribution: { host, session, lineage }`.
|
|
944
949
|
|
|
950
|
+
The CLI `hauler request` reads its caller's shell instead: explicit flags
|
|
951
|
+
win, then `CARGO_HAULER_HOST`/`CARGO_HAULER_SESSION`, then the session id the
|
|
952
|
+
agent host exports to its shell tool. The MCP tool never reads its own process environment, which
|
|
953
|
+
belongs to the server and not the calling conversation.
|
|
954
|
+
|
|
945
955
|
#### Routes
|
|
946
956
|
|
|
947
957
|
| Route | Surface | Document |
|