cargo-hauler 0.9.4 → 0.9.6

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +12 -3
  3. package/dist/.claude-plugin/marketplace.json +1 -1
  4. package/dist/.claude-plugin/plugin.json +1 -1
  5. package/dist/.codex-plugin/plugin.json +1 -1
  6. package/dist/.cursor-plugin/plugin.json +1 -1
  7. package/dist/INSTALL.md +1 -1
  8. package/dist/README.md +12 -3
  9. package/dist/agent-bundle.compile-evidence.json +1 -1
  10. package/dist/agent-bundle.manifest.json +1 -1
  11. package/dist/agent-bundle.package-compile-evidence.json +1 -1
  12. package/dist/bin/cargo-hauler-flight.mjs +179 -74
  13. package/dist/bin/cargo-hauler-install.js +533 -4
  14. package/dist/bin/cargo-hauler.mjs +207 -86
  15. package/dist/bin/hauler.js +331 -96
  16. package/dist/hooks/event-route-session-start.claude.mjs +2 -2
  17. package/dist/hooks/event-route-session-start.codex.mjs +2 -2
  18. package/dist/hooks/event-route-session-start.cursor.mjs +2 -2
  19. package/dist/hooks/event-route-stop.claude.mjs +2 -2
  20. package/dist/hooks/event-route-stop.codex.mjs +2 -2
  21. package/dist/hooks/event-route-stop.cursor.mjs +2 -2
  22. package/dist/hooks/event-route-tool-after.claude.execute.mjs +2 -2
  23. package/dist/hooks/event-route-tool-after.claude.mjs +6 -6
  24. package/dist/hooks/event-route-tool-after.codex.execute.mjs +2 -2
  25. package/dist/hooks/event-route-tool-after.codex.mjs +6 -6
  26. package/dist/hooks/event-route-tool-after.cursor.execute.mjs +2 -2
  27. package/dist/hooks/event-route-tool-after.cursor.mjs +6 -6
  28. package/dist/hooks/event-route-tool-before.claude.execute.mjs +2 -2
  29. package/dist/hooks/event-route-tool-before.claude.mjs +1 -1
  30. package/dist/hooks/event-route-tool-before.codex.execute.mjs +2 -2
  31. package/dist/hooks/event-route-tool-before.codex.mjs +1 -1
  32. package/dist/hooks/event-route-tool-before.cursor.execute.mjs +2 -2
  33. package/dist/hooks/event-route-tool-before.cursor.mjs +1 -1
  34. package/dist/hooks/hooks-flight.mjs +42 -29
  35. package/dist/install.mjs +1 -1
  36. package/dist/mcp/mcp-hauler-2b8242f9-flight.mjs +183 -78
  37. package/dist/mcp/mcp-hauler-2b8242f9.mjs +182 -77
  38. package/dist/mcp-apps/dashboard.html +2 -2
  39. package/dist/package.json +1 -1
  40. package/dist/plugin.json +1 -1
  41. package/dist/scripts/hauler.mjs +331 -96
  42. package/dist/skills/hauler-dashboard/SKILL.md +1 -1
  43. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 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.
8
+ - 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.
9
+ - 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`.
10
+ - 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.
11
+ - 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.
12
+ - 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.
13
+
14
+ ## 0.9.5
15
+
16
+ ### Patch Changes
17
+
18
+ - c561965: Different agents running the same cargo command in the same workspace share one run again. Request identity no longer hashes the per-conversation ids that Cursor, Claude Code, and Codex export, such as `CURSOR_CONVERSATION_ID`, `CLAUDE_CODE_SESSION_ID`, and `CODEX_THREAD_ID`, and cargo still receives them.
19
+
3
20
  ## 0.9.4
4
21
 
5
22
  ### 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
- If a Node upgrade moves that global file, the shim runs Cargo directly until
511
- you re-run `hauler install-shim --force`.
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`; the PATH shim also borrows `CARGO_HAULER_HOST`'s shell cap when auto-background is allowed. |
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
@@ -942,6 +946,11 @@ and `hauler status --session <conversation>` (the `hauler_status` tool takes
942
946
  the same filter as its `session` field). Results carry
943
947
  `attribution: { host, session, lineage }`.
944
948
 
949
+ The CLI `hauler request` reads its caller's shell instead: explicit flags
950
+ win, then `CARGO_HAULER_HOST`/`CARGO_HAULER_SESSION`, then the session id the
951
+ agent host exports to its shell tool. The MCP tool never reads its own process environment, which
952
+ belongs to the server and not the calling conversation.
953
+
945
954
  #### Routes
946
955
 
947
956
  | 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.4"}]}
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.6"}]}
@@ -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.4"}
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.6"}
@@ -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.4"}
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.6"}
@@ -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.4"}
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.6"}
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.4`
5
+ Version: `0.9.6`
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
- If a Node upgrade moves that global file, the shim runs Cargo directly until
511
- you re-run `hauler install-shim --force`.
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`; the PATH shim also borrows `CARGO_HAULER_HOST`'s shell cap when auto-background is allowed. |
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
@@ -942,6 +946,11 @@ and `hauler status --session <conversation>` (the `hauler_status` tool takes
942
946
  the same filter as its `session` field). Results carry
943
947
  `attribution: { host, session, lineage }`.
944
948
 
949
+ The CLI `hauler request` reads its caller's shell instead: explicit flags
950
+ win, then `CARGO_HAULER_HOST`/`CARGO_HAULER_SESSION`, then the session id the
951
+ agent host exports to its shell tool. The MCP tool never reads its own process environment, which
952
+ belongs to the server and not the calling conversation.
953
+
945
954
  #### Routes
946
955
 
947
956
  | Route | Surface | Document |