perf: consolidate runtime lifecycle and queue hardening - #2
Conversation
* fix(windows): require structured agent argv * refactor(acp): own built-in command migration
Bumps the actions group with 1 update in the / directory: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v7.0.0...v7.0.1) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 7. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@v4...v7) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…claw#442) * fix(flows): swallow heartbeat write rejections from setInterval void heartbeat() inside setInterval can reject when store.writeLive fails, producing unhandledRejection noise and process flags. Catch rejections as best-effort live-state updates, matching other best-effort .catch() sites in the runtime. Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca> * test(flows): prove heartbeat timer swallows writeLive rejections Add a focused regression that forces best-effort heartbeat writes to reject and asserts zero unhandledRejection events, matching the setInterval .catch() boundary in FlowRunner.runWithHeartbeat. Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca> * test(flows): exercise FlowRunner heartbeat writeLive rejection path Replace the duplicated timer harness with a real FlowRunner shell node that forces interval writeLive failures and asserts zero unhandledRejection. Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca> * retrigger proof check Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca> * fix(flows): harden heartbeat rejection coverage (openclaw#442) Co-authored-by: Sebastien Tardif <sebtardif@ncf.ca> --------- Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca> Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(session): avoid atomic write temp collisions * test(session): make temp-path regression deterministic (openclaw#447) Co-authored-by: Henk ter Harmsel <henk@chaink.it> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* feat(cli): add filesystem capability opt-out * docs(cli): complete no-fs coverage (openclaw#469) Co-authored-by: 甄新 <heyang.heyang@alibaba-inc.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* feat: add Pool ACP agent Register Poolside as a built-in agent via `pool acp`. * fix: add structured Pool agent launch --------- Co-authored-by: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
* fix(cli): preserve positive timer durations * fix(cli): share timer conversion with config (openclaw#459) Co-authored-by: mehmetali <36207866+realmehmetali@users.noreply.github.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
… reconnect" (openclaw#444) * fix(cli): distinguish starting and reconnect states (openclaw#444) Co-authored-by: Thomas Güttler <info@thomas-guettler.de> * fix(cli): preserve reconnect status for live leases (openclaw#444) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com> Co-authored-by: Thomas Güttler <info@thomas-guettler.de>
* feat: add ZeroClaw ACP agent (openclaw#440) Co-authored-by: jordanthejet <morepencils@gmail.com> * fix(agents): register ZeroClaw structured argv (openclaw#440) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
Source-Commit: d49652824abb75f7550ea24d74014353fcdd5d8e
…ity caching Source-Commit: d2f70209e56d8a7f84ac46f91a7a59ebd6fd4a9e
Source-Commit: d25c86a23be4756121c5cfab4358145e70fa821c
Source-Commit: d4459336b4fc8884fab220b5a945ab16c5da271e
Source-Commit: 7fbcd54a929f2884a4a0e42be8639db315079e08 Source-Scope: performance
Source-Commit: e2804e2b5412be2705afb18e9bb4958e023f2d1b
Source-Commit: 0abb6fedf5ff5169f0bfc50896480600aea3ec76 Source-Scope: performance
Performance comparison against OpenClaw
|
| Scenario | n | OpenClaw main median / p95 | PR median / p95 | Paired delta (95% CI) |
|---|---|---|---|---|
--version |
100 | 106.074 / 114.150 ms | 54.028 / 58.243 ms | -49.380% (-49.819%, -48.923%) |
--help |
80 | 106.307 / 112.818 ms | 61.245 / 65.022 ms | -42.311% (-42.841%, -41.765%) |
sessions list --local |
50 | 111.416 / 118.245 ms | 112.408 / 123.186 ms | +1.545% (+0.613%, +2.560%) |
cold mock ACP sessions list |
25 | 220.480 / 231.956 ms | 364.398 / 371.743 ms | +64.428% (+62.231%, +66.624%) |
cold mock ACP exec |
25 | 224.837 / 232.767 ms | 367.742 / 376.810 ms | +65.007% (+63.337%, +66.833%) |
Static eager graph size improved from 4 chunks / 537,437 raw bytes / 116,993 gzip bytes to 5 chunks / 274,580 raw bytes / 62,305 gzip bytes: 48.9% fewer raw bytes and 46.7% fewer gzip bytes. The external eager dependency set dropped from the ACP SDK, Commander, and Zod to Commander only.
The branch's internal spans provide a lead on the cold ACP regression: deferred session-module loading averages about 44 ms and close averages about 84 ms. These spans overlap and must not be summed. The robust process-tree shutdown snapshot is a likely contributor to close cost, but this run does not prove it is the sole cause.
Conclusion: lightweight startup is materially faster, while cold ACP-backed operations are materially slower. This PR should not be described as a blanket performance improvement until the ACP lifecycle regression is addressed or explicitly accepted.
Summary
Why
The previous worktrees contained overlapping lifecycle, queue, persistence, and performance implementations. This branch reconciles those alternatives into one runtime-owned history with the newer failure shields and focused regression coverage.
The branch contains the full OpenClaw PR #478 head (
5d3063b) and adds nine consolidation commits. It reports ACPX version 0.13.0.Validation
pnpm run checkpnpm run lint:eager-graph(five eager chunks; only Commander remains external)pnpm run perf:reportagainst captured runtime metricsrelease/consolidated-sbom, including the complete check and SEA packaged-binary testsOwnership boundary
This PR owns runtime performance, process lifecycle, queue ownership, and persistence behavior. Release and supply-chain work is intentionally isolated in companion PR #3.