Skip to content

chore(security): clear 16/17 dependency CVEs (security-fast green)#29

Merged
william-antoline-boon merged 1 commit into
fix/transient-edge-block-auto-retryfrom
chore/security-audit-dep-bumps
Jun 29, 2026
Merged

chore(security): clear 16/17 dependency CVEs (security-fast green)#29
william-antoline-boon merged 1 commit into
fix/transient-edge-block-auto-retryfrom
chore/security-audit-dep-bumps

Conversation

@monac24

@monac24 monac24 commented Jun 26, 2026

Copy link
Copy Markdown

Summary

Stacked on top of #28 (base = fix/transient-edge-block-auto-retry). Clears the security-fast CI failure that blocks #28pnpm-audit-prod went from 17 → 1 high/critical advisories, including the lone CRITICAL.

Merge order: this PR → fix/... branch → then #28boon.

Cleared (16, incl. CRITICAL)

Transitive bumps via pnpm-workspace.yaml overrides — conservative, in-range, no major bumps:

pkg pkg
@grpc/grpc-js 1.14.4 hono 4.12.18→4.12.27
linkify-it 5.0.1 form-data 2.5.4→2.5.6
undici 7.28.0 protobufjs 7.5.6→7.6.4
vite 8.0.16 ws 8.21.0
@vitest/browser 4.1.9

baileys 7.0.0-rc11rc13 (CRITICAL GHSA-qvv5-jq5g-4cgg):

  • Bumped in extensions/whatsapp + the release-age exclude list.
  • Dropped patches/[email protected] — rc13 ships all three fixes natively (sequential-await encrypted-stream finish + the typeof agent?.dispatch dispatcher guard).
  • Taught scripts/postinstall-bundled-plugins.mjs to recognize rc13's native dispatcher guard (hoisted const dispatcher = … ? agent : undefined) so the runtime hotfix no-ops instead of failing with unexpected_content.

Deferred (1 remaining HIGH)

@earendil-works/pi-coding-agent (GHSA-jfgx-wxx8-mp94 — predictable temp extension-install paths → LPE on shared Linux hosts). The fix requires pi-* 0.75.1 → 0.78.1+, which is a breaking pi-ai API change (streamSimple/completeSimple/getApiProvider/complete removed — ~20 typecheck errors across src/agents/**). That's a standalone migration (cf. #12), not a security bump, and was deliberately not bundled here to keep this PR low-risk.

Risk acceptance for the deferral: the advisory is a local-privilege-escalation on shared Linux hosts. Boon trial boxes are single-tenant (one customer per EC2 instance), so there is no co-tenant to escalate against — low real-world risk in our deployment. Tracked for a follow-up pi-* migration.

→ After this merges, security-fast on #28 will show 1 advisory (down from 17). If you need it fully zero, the options are the pi-* migration or a documented allowlist entry in pnpm-audit-prod.mjs's AUDIT_ADVISORY_VERSION_OVERRIDES.

Verification

  • node scripts/pre-commit/pnpm-audit-prod.mjs --audit-level=high: 17 → 1
  • tsgo:core: clean (pi-* reverted to 0.75.1, no API breakage)
  • scripts/postinstall-bundled-plugins.mjs: runs clean (hotfix no-ops on rc13), oxlint clean

🤖 Generated with Claude Code


Summary by cubic

Cuts production dependency advisories from 17 to 1 by upgrading baileys and adding conservative pnpm overrides; unblocks the security-fast CI on the stacked branch.

Written for commit 37057b8. Summary will update on new commits.

Review in cubic

pnpm-audit-prod (CI "security-fast") flagged 17 high/critical advisories in
production deps. This clears 16, including the lone CRITICAL.

Transitive bumps via pnpm-workspace overrides (conservative, in-range, no major):
  @grpc/grpc-js 1.14.4 · linkify-it 5.0.1 · undici 7.28.0 · vite 8.0.16 ·
  ws 8.21.0 · @vitest/browser 4.1.9 · hono 4.12.18→4.12.27 ·
  form-data 2.5.4→2.5.6 · protobufjs 7.5.6→7.6.4

baileys 7.0.0-rc11 → rc13 (CRITICAL GHSA-qvv5-jq5g-4cgg):
  - bumped in extensions/whatsapp + release-age exclude
  - DROPPED patches/[email protected] — rc13 ships all three fixes
    natively (sequential-await encrypted-stream finish + dispatcher guard)
  - taught scripts/postinstall-bundled-plugins.mjs to recognize rc13's native
    dispatcher guard (hoisted `const dispatcher = … ? agent : undefined`) so
    the runtime hotfix no-ops instead of failing with "unexpected_content"

Deferred (1 remaining HIGH): @earendil-works/pi-coding-agent
(GHSA-jfgx-wxx8-mp94, LPE on shared Linux). Fix needs pi-* 0.75→0.78+, a
BREAKING pi-ai API change (streamSimple/completeSimple/getApiProvider/complete
removed) — a separate migration, not a security bump. Trial hosts are
single-tenant, so the shared-host LPE is low-risk in our deployment.

Verify: pnpm-audit-prod 17→1 · tsgo:core clean · postinstall hotfix no-ops ·
oxlint clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@github-actions

Copy link
Copy Markdown

Dependency Changes Detected

This PR changes dependency-related files. Maintainers should confirm these changes are intentional.

Changed files:

  • extensions/whatsapp/package.json
  • patches/[email protected]
  • pnpm-lock.yaml
  • pnpm-workspace.yaml

Maintainer follow-up:

  • Review whether the dependency changes are intentional.
  • Inspect resolved package deltas when lockfile or workspace dependency policy changes are present.
  • Run pnpm deps:changes:report -- --base-ref origin/main --markdown /tmp/dependency-changes.md --json /tmp/dependency-changes.json locally for detailed release-style evidence.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 5 files

Re-trigger cubic

@monac24 monac24 changed the title chore(security): clear 16/17 dependency CVEs (security-fast green-ish) chore(security): clear 16/17 dependency CVEs (security-fast green) Jun 29, 2026
@william-antoline-boon
william-antoline-boon merged commit 1e12efd into fix/transient-edge-block-auto-retry Jun 29, 2026
132 of 135 checks passed
@william-antoline-boon
william-antoline-boon deleted the chore/security-audit-dep-bumps branch June 29, 2026 02:45
william-antoline-boon pushed a commit that referenced this pull request Jun 29, 2026
…busy message (#28)

* fix(auto-reply): auto-retry transient edge-block exhaustion + honest busy message

When the model fallback chain exhausts on a pure-transient condition (every
hop rate_limit/overloaded) with no cooldown expiry or usage-limit detail, the
cause is almost always an upstream gateway/edge block — e.g. a Cloudflare/Render
HTML 429 that 429s every hop because they share one upstream host. Model-level
fallback can't help, and the old terminal message ("All models are temporarily
rate-limited") was both inaccurate (the models were never rate-limited) and
premature (a brief edge blip became a failed conversation).

- Retry the full primary→fallback chain up to 3x with exponential backoff
  (2s/4s/8s) on an *unexplained* pure-transient exhaustion before surfacing
  anything to the user. Extends the existing single transient-HTTP retry.
- Gate excludes a known cooldown expiry and Codex/usage-limit messages so their
  actionable detail still surfaces immediately rather than being retried away.
- Replace the terminal copy with honest, non-revealing wording that signals the
  automatic retry: "The AI service is briefly busy — retrying automatically…".
  Deliberately names no provider/edge/cause.

Classification is unchanged (HTML-429 still classifies as rate_limit, per
upstream openclaw#67517) — this only changes retry behavior and user-facing copy.

Tests: message copy (both paths), backoff helper, retry-then-recover,
exhaust-then-friendly-message (asserts no cause leakage), and no-retry-when-
cooldown-known. Full file 107/107; format/lint/tsgo core+test all green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* fix(auto-reply): longer jittered backoff for transient edge-block retries

The initial 2s/4s/8s schedule was wrong for an edge rate-limiter / WAF
(Cloudflare in front of the gateway), the dominant trigger for pure-transient
chain exhaustion:
  - Retrying ~2s later almost always lands inside the same rate-limit window,
    and each retry re-feeds the very counter that is blocking us — fast retries
    can *prolong* the block rather than ride it out.
  - A fleet-wide fixed schedule synchronizes retries against one shared gateway
    host (thundering herd), which itself keeps the limiter tripped.

Redesign:
  - MAX_TRANSIENT_BUSY_RETRIES 3 → 5.
  - Base 5s, double per attempt, cap 60s/step.
  - Equal jitter (AWS "equal jitter": half fixed + half random). The fixed half
    guarantees a retry never fires too soon (no early re-trip); the random half
    de-synchronizes concurrent sessions sharing the edge.
  - rng is injectable for deterministic tests.
Recovery window grows from ~14s to ~67–135s — long enough to outlast a short
WAF/edge block instead of failing fast.

Tests: backoff bounds (un-jittered cap, min-jitter floor, [half,full] envelope),
retry count = 5. Full file 109/109; format/lint/tsgo core+test green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* chore(security): clear 16/17 high+ dependency advisories (security-fast) (#29)

pnpm-audit-prod (CI "security-fast") flagged 17 high/critical advisories in
production deps. This clears 16, including the lone CRITICAL.

Transitive bumps via pnpm-workspace overrides (conservative, in-range, no major):
  @grpc/grpc-js 1.14.4 · linkify-it 5.0.1 · undici 7.28.0 · vite 8.0.16 ·
  ws 8.21.0 · @vitest/browser 4.1.9 · hono 4.12.18→4.12.27 ·
  form-data 2.5.4→2.5.6 · protobufjs 7.5.6→7.6.4

baileys 7.0.0-rc11 → rc13 (CRITICAL GHSA-qvv5-jq5g-4cgg):
  - bumped in extensions/whatsapp + release-age exclude
  - DROPPED patches/[email protected] — rc13 ships all three fixes
    natively (sequential-await encrypted-stream finish + dispatcher guard)
  - taught scripts/postinstall-bundled-plugins.mjs to recognize rc13's native
    dispatcher guard (hoisted `const dispatcher = … ? agent : undefined`) so
    the runtime hotfix no-ops instead of failing with "unexpected_content"

Deferred (1 remaining HIGH): @earendil-works/pi-coding-agent
(GHSA-jfgx-wxx8-mp94, LPE on shared Linux). Fix needs pi-* 0.75→0.78+, a
BREAKING pi-ai API change (streamSimple/completeSimple/getApiProvider/complete
removed) — a separate migration, not a security bump. Trial hosts are
single-tenant, so the shared-host LPE is low-risk in our deployment.

Verify: pnpm-audit-prod 17→1 · tsgo:core clean · postinstall hotfix no-ops ·
oxlint clean.

Co-authored-by: Claude Opus 4.8 <[email protected]>

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants