Skip to content

feat(cli-output): emit thinking_delta events; handle redacted single-block shape#85381

Closed
adele-with-a-b wants to merge 1 commit into
openclaw:mainfrom
adele-with-a-b:feature/cli-output-thinking-delta
Closed

feat(cli-output): emit thinking_delta events; handle redacted single-block shape#85381
adele-with-a-b wants to merge 1 commit into
openclaw:mainfrom
adele-with-a-b:feature/cli-output-thinking-delta

Conversation

@adele-with-a-b

@adele-with-a-b adele-with-a-b commented May 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Mirrors the onAssistantDelta surface for thinking events on the claude-cli stream-json parser in src/agents/cli-output.ts. Adds an onThinkingDelta callback to createCliJsonlStreamingParser and a public CliThinkingDelta type that two downstream PRs depend on:

Stacked on #80046; merge after that lands. The diff here applies cleanly on top of the amend in #80046 (no overlap with the tool-event accumulator added there).

Two emission shapes are handled:

  1. Streaming-delta path (extended-thinking on cli-interactive backend). content_block_start with block.type === "thinking" initialises a per-index accumulator. Each content_block_delta with delta.type === "thinking_delta" and a string delta.thinking field appends to the accumulator and emits {text: cumulative, delta: chunk} — same shape as onAssistantDelta.

  2. Single-block path (redacted thinking on adaptive models). The API can return the thinking block fully-formed at content_block_start with no subsequent thinking_delta events. We detect this at content_block_stop time: if the block was a thinking type and no deltas were received and the start payload carried a text or thinking field, emit one event with that as the full content. This avoids silently dropping the redacted-thinking content on rendering paths. Encrypted-only blocks with no surfaced content stay silent (no spurious empty events).

Addresses anagnorisis2peripeteia review 4345523435.

Real behavior proof (required for external PRs)

External-contributor real-environment proof, captured 2026-05-22 on macOS 15.x / Node 22 / claude-cli 2.1.148 against a live Anthropic Bedrock-routed Claude Opus 4.6 stream.

  • Behavior or issue addressed: createCliJsonlStreamingParser did not surface thinking_delta events emitted by claude-cli --output-format stream-json --include-partial-messages against extended-thinking-enabled models. Downstream consumers (Telegram interleave preview, cli-interactive backend) had no API to subscribe to thinking output, so live thinking content was silently dropped on rendering paths even when the model emitted it record-by-record.

  • Real environment tested: Live claude-cli invocation against claude-opus-4-6 (production-shape model: same model the OpenClaw gateway uses on M5 today). Captured the raw stream-json output and drove it through the patched createCliJsonlStreamingParser source on this branch (no mocks, no stub harness — direct import of src/agents/cli-output.ts).

  • Exact steps or command run after this patch:

    1. git checkout feature/cli-output-thinking-delta
    2. Capture a real claude-cli stream:
      echo "Show a brief vivid mental image of a sunrise. Then immediately stop." \
        | claude -p \
            --output-format stream-json \
            --include-partial-messages \
            --model opus \
            --verbose \
            > opus-stream.jsonl
      
    3. Drive the captured stream through the patched parser via tsx:
      node --import tsx drive-parser.mts < opus-stream.jsonl
      
      where drive-parser.mts instantiates createCliJsonlStreamingParser from src/agents/cli-output.ts with onThinkingDelta + onAssistantDelta counters and replays the stream record-by-record.
    4. pnpm test src/agents/cli-output.test.ts — 28 tests pass.
  • Evidence after fix:

    Live opus-4-6 stream produced:

    $ grep -oE '"type":"[^"]*"' opus-stream.jsonl | sort | uniq -c | sort -rn | head
         49 "type":"stream_event"
         42 "type":"content_block_delta"
         27 "type":"text_delta"
         14 "type":"thinking_delta"
          4 "type":"system"
          3 "type":"message"
          2 "type":"thinking"
          2 "type":"text"
          2 "type":"content_block_stop"
          2 "type":"content_block_start"
    

    One representative thinking_delta record (signature redacted, content preserved verbatim from the raw capture for shape proof):

    {"type":"stream_event","event":{"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}},...}
    {"type":"stream_event","event":{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"[redacted-thinking-chunk]"}},...}
    ...
    {"type":"stream_event","event":{"type":"content_block_stop","index":0},...}
    

    Patched parser end-to-end against that opus stream:

    $ node --import tsx drive-parser.mts < opus-stream.jsonl
    
    --- opus stream → patched parser results ---
    onThinkingDelta callbacks: 13
    onAssistantDelta callbacks: 27
    

    Unit-test surface still green:

    Test Files  1 passed (1)
         Tests  28 passed (28)
    

    Three new tests covering both emission shapes:

    • emits onThinkingDelta for streaming thinking_delta chunks with accumulating text (streaming-delta path)
    • emits a single onThinkingDelta when a thinking block arrives fully-formed at content_block_start with no subsequent deltas (single-block redacted path)
    • does not emit onThinkingDelta when a thinking block has no seed content and receives no deltas (silent-on-empty)
  • Observed result after fix: the patched createCliJsonlStreamingParser emits onThinkingDelta callbacks for every content_block_delta of type thinking_delta in a real opus stream-json output, with cumulative text + per-chunk delta — matching the existing onAssistantDelta shape. The 25 pre-existing tests on this file continue to pass unchanged (no regression to assistant-delta or tool-event surfaces).

  • What was not tested: the single-block redacted-thinking path was not exercised against a live model in this proof — opus-4-6 in --include-partial-messages mode emits the full streaming-delta sequence rather than the fully-formed-at-start single-block shape. The single-block path is exercised by the unit test (it constructs the API-documented redacted shape and asserts a single callback). Live coverage of that path will land via the downstream cli-interactive backend PR (feat(anthropic): claude-cli-interactive backend — stream reasoning via local TLS proxy #81851) which targets the redacted-thinking surface explicitly.

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: XL triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 24, 2026, 7:45 AM ET / 11:45 UTC.

Summary
Adds a CliThinkingDelta type and optional onThinkingDelta callback to the Claude CLI JSONL parser, with tests for streaming thinking_delta chunks and single-block thinking seed emission.

PR surface: Source +125, Tests +145. Total +270 across 2 files.

Reproducibility: not applicable. as a bug reproduction. Source inspection confirms current main lacks onThinkingDelta, and the PR body supplies partial live terminal proof for the streaming path.

Review metrics: 1 noteworthy metric.

  • New parser event surface: 1 callback/type added. The PR introduces a new internal reasoning-text event surface, so maintainers need to review privacy gating and dependency shape before merge.

Stored data model
Persistent data-model change detected: serialized state: src/agents/cli-output.test.ts. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦐 gold shrimp
Patch quality: 🦪 silver shellfish
Result: blocked until stronger real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Rebase onto current main's commentary parser work.
  • [P1] Handle the documented redacted_thinking shape or remove the redacted single-block claim.
  • [P1] Add maintainer-approved reasoning visibility guidance for any production consumer.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The PR body gives live terminal proof for streaming thinking_delta, but the claimed redacted single-block path is unit-only and mismatches the official redacted block shape. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] The branch is draft and merge-conflicting against current main's Claude CLI commentary parser work, so the real merge result still needs a rebase and fresh review.
  • [P1] The new raw thinking callback could expose sensitive model reasoning if downstream consumers route it like assistant text without explicit reasoning visibility gates.
  • [P1] The claimed redacted single-block behavior is not live-proven and does not match the official redacted_thinking/data dependency shape inspected here.

Maintainer options:

  1. Refresh Behind Reasoning Gates (recommended)
    Rebase onto current main, integrate with the commentary parser, handle or drop the redacted single-block claim, and keep downstream exposure behind explicit reasoning gates before merge.
  2. Keep As Parser Prototype
    Maintainers can keep this draft open as parser groundwork while the broader reasoning API and security policy in [Feature]: Expose claude-cli thinking blocks as reasoning on /v1/responses (and /v1/chat/completions)` #68374 is settled.
  3. Pause Under Canonical Reasoning Work
    If maintainers want the reasoning surface to land only through the canonical API/security thread, pause or close this branch after preserving its streaming proof there.

Next step before merge

  • [P1] The next action is maintainer/product/security review plus author rebase and proof refresh, not a safe autonomous repair lane.

Security
Needs attention: The diff adds a raw thinking callback, so downstream use must be explicitly gated by reasoning visibility and privacy policy before merge.

Review findings

  • [P2] Handle the documented redacted thinking block shape — src/agents/cli-output.ts:675
Review details

Best possible solution:

Refresh the branch onto current main, either handle the documented redacted block shape or narrow the claim to streaming thinking_delta, and merge only behind maintainer-approved reasoning visibility gates.

Do we have a high-confidence way to reproduce the issue?

Not applicable as a bug reproduction. Source inspection confirms current main lacks onThinkingDelta, and the PR body supplies partial live terminal proof for the streaming path.

Is this the best way to solve the issue?

No as a merge-ready solution. The parser boundary is plausible, but the branch is stale and dirty, the redacted-shape claim is wrong against the inspected dependency contract, and the reasoning exposure gate needs maintainer direction.

Full review comments:

  • [P2] Handle the documented redacted thinking block shape — src/agents/cli-output.ts:675
    The single-block path only starts tracking when content_block.type === "thinking", but the Anthropic SDK models redacted blocks as type: "redacted_thinking" with data. That means the claimed redacted single-block case is skipped unless claude-cli rewrites the shape first; either handle that shape explicitly or narrow this PR to the live-proven streaming path.
    Confidence: 0.84

Overall correctness: patch is incorrect
Overall confidence: 0.82

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 1069c60e1e25.

Label changes

Label justifications:

  • P2: This is a normal-priority agent parser capability improvement with limited surface, but it needs rebase, proof, and security/product review before merge.
  • merge-risk: 🚨 security-boundary: Merging a raw thinking callback without confirmed downstream gates could expose sensitive reasoning text beyond intended visibility boundaries.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦐 gold shrimp and patch quality is 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body gives live terminal proof for streaming thinking_delta, but the claimed redacted single-block path is unit-only and mismatches the official redacted block shape. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +125, Tests +145. Total +270 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 125 0 +125
Tests 1 145 0 +145
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 270 0 +270

Security concerns:

  • [medium] Gate raw thinking consumers — src/agents/cli-output.ts:731
    onThinkingDelta can expose Claude thinking text to callers; production consumers should not route it to channels, HTTP clients, or logs as ordinary assistant text without existing reasoning visibility controls or a maintainer-approved opt-in policy.
    Confidence: 0.84

What I checked:

  • Repository policy read: Read full root AGENTS.md and scoped src/agents/AGENTS.md; the review applied the agent-parser, dependency-contract, security, and current-main comparison requirements. (AGENTS.md:1, 1069c60e1e25)
  • Current main lacks thinking callback: Current main's Claude CLI streaming parser only emits text_delta as assistant deltas; thinking_delta returns null and there is no onThinkingDelta option. (src/agents/cli-output.ts:453, 1069c60e1e25)
  • Current main has adjacent commentary parser work: Current main already added onCommentaryText and pending Claude text classification in the same parser surface, so this stale branch needs a rebase/integration pass rather than review against its old base. (src/agents/cli-output.ts:743, 1069c60e1e25)
  • PR head adds raw thinking callback: The PR head adds PendingThinkingBlock, starts tracking only content_block.type === "thinking", and exposes a new onThinkingDelta callback. (src/agents/cli-output.ts:671, 83741c73db52)
  • PR redacted test uses thinking block shape: The PR's single-block redacted test constructs a type: "thinking" block with thinking, not the documented redacted_thinking block with data. (src/agents/cli-output.test.ts:976, 83741c73db52)
  • Official dependency contract: Anthropic's official TypeScript SDK models streamed block starts as ThinkingBlock | RedactedThinkingBlock; RedactedThinkingBlock has type: 'redacted_thinking' and data, while streamed text deltas use ThinkingDelta with type: 'thinking_delta' and thinking. (anthropic-sdk-typescript/src/resources/messages/messages.ts:1427)

Likely related people:

  • adele-with-a-b: Authored this PR and the merged adjacent Claude CLI tool-use parser bridge in fix(agents/cli): bridge CLI tool_use lifecycle events to channel preview #80046. (role: recent parser contributor; confidence: high; commits: 83741c73db52, 9de6abd8d775; files: src/agents/cli-output.ts, src/agents/cli-output.test.ts)
  • anagnorisis2peripeteia: Authored the merged Claude CLI commentary producer work in feat(cli): emit commentary progress events from Claude CLI parser #89834, which now owns adjacent current-main parser behavior this PR must rebase around. (role: recent adjacent contributor; confidence: high; commits: 7a602c7385ba, 3724f02316a9; files: src/agents/cli-output.ts, src/agents/cli-output.test.ts, src/agents/cli-runner/execute.ts)
  • Peter Steinberger: Git history shows the original Claude CLI JSONL streaming parser path was introduced in commit 4e09968 and later API-error handling touched the same parser. (role: introduced behavior; confidence: medium; commits: 4e099689c075, 4d3c72a521cd; files: src/agents/cli-output.ts, src/agents/cli-output.test.ts)
  • obviyus: Contributed follow-up fixes in the merged commentary parser stack, including suppressing Claude commentary answer partials and typed live commentary flags around the same runtime seam. (role: recent adjacent contributor; confidence: medium; commits: c6b44fbd790b, 23a873ffc67a; files: src/agents/cli-output.ts, src/agents/cli-runner/claude-live-session.ts, src/auto-reply/reply/followup-runner.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Frosted Proofling

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: stacks clean commits.
Image traits: location proof lagoon; accessory CI status badge; palette moonlit blue and soft silver; mood mischievous; pose holding its accessory up for inspection; shell matte ceramic shell; lighting subtle sparkle highlights; background subtle branch markers.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Frosted Proofling in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@adele-with-a-b adele-with-a-b changed the title feat(cli-output): emit thinking_delta events; handle redacted single-block shape [AI] feat(cli-output): emit thinking_delta events; handle redacted single-block shape May 22, 2026
@adele-with-a-b

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

PR body's Real behavior proof section now contains live opus-4-6 stream-json capture + end-to-end driver showing the patched parser emits 13 onThinkingDelta + 27 onAssistantDelta callbacks against the real stream. Replaces the previous unit-test-only proof.

@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 22, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 22, 2026
@BingqingLyu

This comment was marked as spam.

…block shape

Addresses anagnorisis2peripeteia review 4345523435.

Mirrors the onAssistantDelta surface for thinking events:
- Streaming path: accumulate per-index, emit {text,delta} per chunk
- Single-block path: emit one full event when content_block_stop
  fires for a thinking block that received no deltas (redacted
  thinking on adaptive models returns the block fully-formed)

Downstream consumers openclaw#82285 (Telegram interleave) and openclaw#81851
(cli-interactive backend) consume this surface directly. Without
the single-block detection, redacted thinking would silently
drop on those rendering paths.
@adele-with-a-b
adele-with-a-b force-pushed the feature/cli-output-thinking-delta branch from 9f6d40e to 83741c7 Compare June 2, 2026 04:15
@adele-with-a-b

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Rebased onto current upstream/main (1e7a0d89). The PR is now scoped to a single commit (83741c73) — the previous two commits (ee29656a and d53614568d) were absorbed upstream when #80046 merged 2026-05-29 (squash commit 9de6abd8, fix(agents): bridge CLI tool progress events). Both input_json_delta accumulation and server_tool_use/mcp_tool_use recognition shipped in that squash, so this PR no longer needs to add them.

Remaining content: thinking_delta event surfacing + redacted-single-block-shape handling. That's the unique merit of #85381 and it's NOT in upstream.

What the rebase touched:

  • Conflict in src/agents/cli-output.test.ts — import block. Both CliThinkingDelta (this PR's addition) and CliToolUseStartDelta (upstream's addition via the squash) needed to coexist. Resolved by taking both.
  • One pre-existing oxlint warning surfaced post-rebase (no-useless-return at cli-output.ts:722 and an unused-import for CliToolResultDelta); fixed in the amended commit.

Validation (post-rebase):

  • node scripts/run-vitest.mjs run src/agents/cli-output.test.ts — 29/29 passing
  • pnpm exec oxfmt --check — clean
  • node scripts/run-oxlint.mjs src/agents/cli-output.ts src/agents/cli-output.test.ts — 0 warnings 0 errors
  • pnpm tsgo:core — clean
  • pnpm build — clean (61s)

@clawsweeper

clawsweeper Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 19, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jul 14, 2026
@clawsweeper

clawsweeper Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: feat(cli-output): emit thinking_delta events; handle redacted single-block shape This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@openclaw-barnacle

Copy link
Copy Markdown

Closing due to inactivity.
If you believe this PR should be revived, post in #clawtributors on Discord to talk to a maintainer.
That channel is the escape hatch for high-quality PRs that get auto-closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: M stale Marked as stale due to inactivity status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants