cargo-hauler 0.6.12 → 0.6.13
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 +6 -0
- package/README.md +24 -32
- package/artifact/.claude-plugin/marketplace.json +1 -1
- package/artifact/.claude-plugin/plugin.json +1 -1
- package/artifact/.codex-plugin/plugin.json +1 -1
- package/artifact/.cursor-plugin/plugin.json +1 -1
- package/artifact/INSTALL.md +1 -1
- package/artifact/agent-bundle.compile-evidence.json +1 -1
- package/artifact/agent-bundle.manifest.json +1 -1
- package/artifact/bin/cargo-hauler-flight.mjs +827 -280
- package/artifact/bin/cargo-hauler.mjs +645 -232
- package/artifact/hooks/event-route-session-start.claude.mjs +2 -2
- package/artifact/hooks/event-route-session-start.codex.mjs +2 -2
- package/artifact/hooks/event-route-session-start.cursor.mjs +2 -2
- package/artifact/hooks/event-route-stop.claude.mjs +2 -2
- package/artifact/hooks/event-route-stop.codex.mjs +2 -2
- package/artifact/hooks/event-route-stop.cursor.mjs +2 -2
- package/artifact/hooks/event-route-tool-after.claude.execute.mjs +2 -2
- package/artifact/hooks/event-route-tool-after.claude.mjs +3 -3
- package/artifact/hooks/event-route-tool-after.codex.execute.mjs +2 -2
- package/artifact/hooks/event-route-tool-after.codex.mjs +3 -3
- package/artifact/hooks/event-route-tool-after.cursor.execute.mjs +2 -2
- package/artifact/hooks/event-route-tool-after.cursor.mjs +3 -3
- package/artifact/hooks/event-route-tool-before.claude.execute.mjs +2 -2
- package/artifact/hooks/event-route-tool-before.codex.execute.mjs +2 -2
- package/artifact/hooks/event-route-tool-before.cursor.execute.mjs +2 -2
- package/artifact/hooks/hooks-flight.mjs +16 -21
- package/artifact/install.mjs +1 -1
- package/artifact/mcp/mcp-hauler-2b8242f9-flight.mjs +797 -84
- package/artifact/mcp/mcp-hauler-2b8242f9.mjs +35 -29
- package/artifact/mcp-apps/dashboard.html +1 -1
- package/artifact/plugin.json +1 -1
- package/artifact/scripts/hauler.mjs +9 -9
- package/artifact/skills/hauler-dashboard/SKILL.md +1 -1
- 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 +24 -32
- 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 +827 -280
- package/dist/bin/cargo-hauler.mjs +645 -232
- package/dist/bin/hauler.js +9 -9
- 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 +3 -3
- package/dist/hooks/event-route-tool-after.codex.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-after.codex.mjs +3 -3
- package/dist/hooks/event-route-tool-after.cursor.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-after.cursor.mjs +3 -3
- package/dist/hooks/event-route-tool-before.claude.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-before.codex.execute.mjs +2 -2
- package/dist/hooks/event-route-tool-before.cursor.execute.mjs +2 -2
- package/dist/hooks/hooks-flight.mjs +16 -21
- package/dist/install.mjs +1 -1
- package/dist/mcp/mcp-hauler-2b8242f9-flight.mjs +797 -84
- package/dist/mcp/mcp-hauler-2b8242f9.mjs +35 -29
- package/dist/mcp-apps/dashboard.html +1 -1
- package/dist/package.json +1 -1
- package/dist/plugin.json +1 -1
- package/dist/scripts/hauler.mjs +9 -9
- package/dist/skills/hauler-dashboard/SKILL.md +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -84,17 +84,20 @@ The CLI is `hauler` on PATH from `npm i -g cargo-hauler`. Never run
|
|
|
84
84
|
| `hauler await <ticket> [--max-wait-ms N]` | Long-poll until the ticket finishes or the wait expires (default 30 s, ceiling 2 h per call — the daemon's await ceiling; call again to keep waiting). A host with its own per-call deadline still bounds one call: Codex stops a tool call at `tool_timeout_sec` (60 s unless raised). |
|
|
85
85
|
| `hauler result <ticket> [--full]` | A stored ticket in full: the settled 16 KiB output tail, or the whole live in-memory tail while it runs (not the status preview). The document names the full on-disk output log (`Full output: <path> (size)`) and `--json` carries it as `request.outputPath`; `--full` prints that whole log instead of the tail (the last ~768 KiB when it does not fit, with the path for the rest). |
|
|
86
86
|
| `hauler kill <ticket>` | Stop a ticket: drop it from the queue or SIGTERM (then SIGKILL) its cargo process group, freeing the lane. Riders return to their lane or fail with it. |
|
|
87
|
-
| `hauler request [--session ID] [--host HOST] [--cwd DIR] [--after TICKET …] -- <cargo …>` | Submit a background request and return its ticket, with where it landed in its lane (`queued behind cc-3281 (~13m)`, `waiting for cc-3281`, or `attached to cc-3281`). `--after` works as for `exec`. |
|
|
87
|
+
| `hauler request [--session ID] [--host HOST] [--cwd DIR] [--after TICKET …] -- <cargo …>` | Submit a background request and return its ticket, with where it landed in its lane (`queued behind cc-3281 (~13m)`, `waiting for cc-3281`, or `attached to cc-3281`). `--cwd` overrides the current CLI workspace; `--after` works as for `exec`. |
|
|
88
88
|
| `hauler daemon <run\|start\|stop\|status\|restart>` | Manage the daemon lifecycle. `restart` is the manual replacement: it sends the graceful stop, waits up to 5 s for the old pid to exit, then starts a daemon from this install and prints both (`restarted: pid 741314 (0.6.0) → pid 742001 (0.6.1)`); a daemon that has not exited by then is reported, not killed, and nothing is started (exit `1`). Tickets in flight are not handed over: the old daemon settles them itself as it shuts down — `killed`, error `daemon shutdown` — and callers resubmit (only rows a daemon that died without shutting down never marked are stamped `orphaned by daemon restart` by the next daemon's first ledger pass). After upgrading the package, every client entry — reads (`status`, `daemon status`, `log`, `last`, `await`, `result`, the dashboard and MCP tools), writes, and hooks — checks the daemon version before requesting a versioned payload and replaces a daemon from the previous install automatically. When the old daemon has not exited within the grace, the command fails with `` cargo-hauler daemon pid N (X.Y.Z) is still running 5s after the shutdown request; not restarted — retry once it has exited, or stop it with `hauler daemon stop` `` instead of parsing its payload or starting a second daemon. |
|
|
89
89
|
| `hauler install-shim [--dir DIR] [--real-cargo PATH] [--force]` | Install the optional PATH shim. |
|
|
90
|
-
| `hauler
|
|
90
|
+
| `hauler web [--port N] [--no-open]` | Open the dashboard from the checkout, npm package, or installed plugin. Agent Bundle's generated web command serves the built App against the plugin's own `hauler` server, opens it populated by `hauler_status`, and stays in the foreground until Ctrl-C. In an MCP host, call `hauler_status` instead. |
|
|
91
91
|
|
|
92
92
|
The `hauler` MCP server projects the same operations as `hauler_status`,
|
|
93
93
|
`hauler_log`, `hauler_last`, `hauler_await`, `hauler_result`, `hauler_kill`,
|
|
94
94
|
and `hauler_request`, with the same filters as the CLI. `hauler_status` and
|
|
95
95
|
`hauler_log` rows are the same bounded summaries (`outputPreview`, never a
|
|
96
96
|
tail); `hauler_result`, `hauler_await`, and `hauler_last` carry the whole
|
|
97
|
-
tail.
|
|
97
|
+
tail. `hauler_request.cwd` is an optional override: Agent Bundle's authoritative
|
|
98
|
+
workspace supplies it when available, and callers must provide it when the host
|
|
99
|
+
supplied none. The MCP server process directory is not treated as the caller's
|
|
100
|
+
workspace.
|
|
98
101
|
|
|
99
102
|
## Dashboard
|
|
100
103
|
|
|
@@ -701,7 +704,7 @@ argv parser, or string-concatenated Markdown; the `src/` tree is the app.
|
|
|
701
704
|
```text
|
|
702
705
|
src/
|
|
703
706
|
layout.tsx the hauler shell around every rendered route
|
|
704
|
-
providers/hauler-daemon.ts request-scoped daemon
|
|
707
|
+
providers/hauler-daemon.ts request-scoped daemon configuration
|
|
705
708
|
components/ typed components over pure view-models
|
|
706
709
|
mcp/hauler/tools/*.tsx hauler_status, _log, _last, _await, _result, _request, _kill
|
|
707
710
|
mcp/hauler/tools/*.cli.ts each tool's `hauler <command>` projection (flags, positionals)
|
|
@@ -719,12 +722,6 @@ src/
|
|
|
719
722
|
Every rendered route — MCP tool, CLI command, rendered script — composes
|
|
720
723
|
through one layout, the way a page framework's `layout.tsx` wraps every page:
|
|
721
724
|
|
|
722
|
-
- **Header:** `<DaemonBadge>` prints what the request-start probe proved and
|
|
723
|
-
which state directory it is: `cargo-hauler · daemon running (pid 4021) ·
|
|
724
|
-
2/5 permits +1 riding, 1 queued · 2 lanes busy · up since 3h ago · state dir
|
|
725
|
-
/fast/cache/cargo-hauler`, or `daemon stopped · no socket; it starts on
|
|
726
|
-
demand…`, or `daemon unresponsive · did not accept a connection within
|
|
727
|
-
750ms (machine saturated)…`.
|
|
728
725
|
- **Body:** the route's own document, unchanged. The route keeps its
|
|
729
726
|
`<Agent.Result value>`; the runtime merges it into the shell so
|
|
730
727
|
`structuredContent` and `--json` are exactly what the route declared.
|
|
@@ -733,7 +730,9 @@ through one layout, the way a page framework's `layout.tsx` wraps every page:
|
|
|
733
730
|
read synchronously with `useAgent()`, and stays silent when the host cannot
|
|
734
731
|
place the request rather than guessing.
|
|
735
732
|
- **`_meta.hauler`** on every MCP result: `route`, `surface`, `server`,
|
|
736
|
-
`version`,
|
|
733
|
+
`version`, and `lineage: { conversation, root, depth } | null`. Daemon state
|
|
734
|
+
comes from each operation's result, so the shell does not pay or report a
|
|
735
|
+
separate request-start health probe.
|
|
737
736
|
|
|
738
737
|
Event routes are host protocol responses and are never wrapped.
|
|
739
738
|
|
|
@@ -748,7 +747,7 @@ Flight worker, or Effect — and runs before the rendered route
|
|
|
748
747
|
(`src/hooks/tokens.ts`; `session-ping.ts` for the one bounded completion ping
|
|
749
748
|
after a tool ran): `continue` for the shell calls that name neither cargo nor
|
|
750
749
|
hauler, `execute` for the rest. Both routes declare `providers: []`, so
|
|
751
|
-
neither
|
|
750
|
+
neither mounts the daemon-config provider; the rendered route calls
|
|
752
751
|
`before-shell.ts` (the rewrite, the `cargo clean` guard) or `after-shell.ts`
|
|
753
752
|
(telemetry, finished-ticket context) and returns `allow`, `continue` +
|
|
754
753
|
`updatedInput`, `deny` with a reason, or `additionalContext` through the
|
|
@@ -756,21 +755,11 @@ framework's host projection.
|
|
|
756
755
|
|
|
757
756
|
#### The daemon provider (`src/providers/hauler-daemon.ts`)
|
|
758
757
|
|
|
759
|
-
One request-context provider mounts `providers.haulerDaemon` for
|
|
760
|
-
|
|
761
|
-
and
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
| --- | --- |
|
|
765
|
-
| `running` | `pid`, `startedAtMs`, `latencyMs`, `running` (permit holders), `riding` (attached), `queued`, `busyLanes`, `maxConcurrent`, and `version` (the daemon's release version) |
|
|
766
|
-
| `stopped` | `socket-missing` (starts on demand) or `connection-refused` (stale socket) |
|
|
767
|
-
| `unresponsive` | `accept-timeout` (never accepted), `answer-timeout` (accepted, no `status-result`), or `connection-closed` within the probe budget (750 ms for the accept and for the answer); ledger reads still work |
|
|
768
|
-
| `unreachable` | `open-failed` with the errno (`EACCES`, `EMFILE`, …): the socket is present but could not be opened, which is not evidence the daemon is down |
|
|
769
|
-
| `unprobed` | `event-surface`: hooks run on every shell command and skip the probe by design |
|
|
770
|
-
|
|
771
|
-
The provider fails closed on nothing it can observe and fabricates nothing.
|
|
772
|
-
Routes read it through `requestDaemon(context)` / `requestDaemonConfig(context)`;
|
|
773
|
-
tests inject a fixture through the harness `context.providers` seam.
|
|
758
|
+
One request-context provider mounts `providers.haulerDaemon` for rendered tools,
|
|
759
|
+
commands, and scripts. It resolves only cheap `config` data (state directory,
|
|
760
|
+
socket, and ledger paths); active health and status I/O belongs to the operation
|
|
761
|
+
that needs it. Routes read the config through `requestDaemonConfig(context)`,
|
|
762
|
+
and tests inject a fixture through the harness `context.providers` seam.
|
|
774
763
|
|
|
775
764
|
#### Components (`src/components/`)
|
|
776
765
|
|
|
@@ -790,7 +779,7 @@ assertion share one derivation.
|
|
|
790
779
|
| `<BuildDiagnostics>` | an index of cargo `error[E…]`/`warning:` blocks (level / code / message / location) followed by every captured block verbatim |
|
|
791
780
|
| `<DashboardLink>` | where the MCP App lives and how to open it elsewhere |
|
|
792
781
|
| `<TicketGuidance>` | what to do next, one component per ticket status |
|
|
793
|
-
| `<
|
|
782
|
+
| `<LineageFooter>` | the shell footer |
|
|
794
783
|
| `<EmptyState>`, `<UnavailableState>`, `<ErrorState>` | the three non-happy shapes every document may take |
|
|
795
784
|
|
|
796
785
|
`documents.tsx` composes them into one document per hauler result
|
|
@@ -815,10 +804,13 @@ valueless `Agent.Result` container around one `Suspense` boundary:
|
|
|
815
804
|
|
|
816
805
|
#### Attribution and lineage
|
|
817
806
|
|
|
818
|
-
`hauler_request`
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
807
|
+
`hauler_request` resolves `cwd` from an explicit input first, then from Agent
|
|
808
|
+
Bundle's authoritative workspace; a caller must provide it when neither exists.
|
|
809
|
+
The MCP server's derived process directory is not a caller workspace.
|
|
810
|
+
It attributes tickets from the same request context: an explicit
|
|
811
|
+
`host`/`session` wins; otherwise the negotiated host and native session are used;
|
|
812
|
+
and when the transport publishes no session id (bare stdio MCP), the conversation
|
|
813
|
+
from `request.lineage` becomes the session of record. That is
|
|
822
814
|
what makes parallel agents' builds attributable in the ledger, the dashboard,
|
|
823
815
|
and `hauler status --session <conversation>` (the `hauler_status` tool takes
|
|
824
816
|
the same filter as its `session` field). Results carry
|
|
@@ -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.","name":"cargo-hauler","source":"./","version":"0.6.
|
|
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.","name":"cargo-hauler","source":"./","version":"0.6.13"}]}
|
|
@@ -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.6.
|
|
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.6.13"}
|
|
@@ -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."},"mcpServers":"./.codex-plugin/mcp.json","name":"cargo-hauler","skills":"./skills/","version":"0.6.
|
|
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."},"mcpServers":"./.codex-plugin/mcp.json","name":"cargo-hauler","skills":"./skills/","version":"0.6.13"}
|
|
@@ -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","mcpServers":"./.cursor-plugin/mcp.json","name":"cargo-hauler","skills":"./skills/","version":"0.6.
|
|
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","mcpServers":"./.cursor-plugin/mcp.json","name":"cargo-hauler","skills":"./skills/","version":"0.6.13"}
|
package/artifact/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.6.
|
|
5
|
+
Version: `0.6.13`
|
|
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
|