Skip to content

feat(messages): config-level default for responseUsage (persistent /usage footer)#89762

Merged
obviyus merged 2 commits into
openclaw:mainfrom
Marvinthebored:persistent-response-usage
Jun 24, 2026
Merged

feat(messages): config-level default for responseUsage (persistent /usage footer)#89762
obviyus merged 2 commits into
openclaw:mainfrom
Marvinthebored:persistent-response-usage

Conversation

@Marvinthebored

@Marvinthebored Marvinthebored commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

The persistent /usage footer had no config-level default: users had to re-enable it per session, and the effective value was resolved ad-hoc per surface (reply rendering, ACP, TUI, no-arg toggle), so those surfaces could disagree. This adds a messages.responseUsage default with a single channel-aware resolver and a consistent projection everywhere.

Summary

Adds a config-level default for the persistent /usage footer (messages.responseUsage) with precedence session → channel → config default → off, and makes the effective value consistent across every surface.

Three distinct, documented session states:

  • explicit on (tokens / full) — wins over any default,
  • explicit off — a stored value that persists (a config default cannot re-enable it),
  • unset — inherits the configured default.

Maintainer-ready classification

  • Fix classification: feature + consistency refactor; no provider/wire/schema-routing change. New optional config key messages.responseUsage (string or per-channel map) and an optional effectiveResponseUsage projection on gateway session rows.
  • Root cause / why: without a config default, /usage had to be re-enabled per session; and the effective value was resolved ad-hoc per surface, so reply rendering, the toggle, ACP, and TUI could disagree.
  • Architecture / source-of-truth check: one shared resolver resolveEffectiveResponseUsage (channel-aware) feeds every surface, centralized in buildGatewaySessionRow; events/snapshots/UI consume the row-built value rather than re-resolving. unset (absent) is kept distinct from explicit "off" end-to-end.
  • Patch quality: config-doc baseline regenerated; "on" documented as a legacy alias; back-compatible (the new fields are optional).

Addresses the requested rank-up moves

  1. Unify effective responseUsage across reply rendering, ACP/TUI presentation, and no-argument toggles — done via the single resolveEffectiveResponseUsage resolver; the ACP "Usage detail" control now shows inherit for unset (distinct from off); the TUI no-arg toggle cycles from the channel-aware effective value, carried on session rows + sessions.changed events + snapshots + the UI row so it never goes stale.
  2. Resolve reset vs clear-to-inherit semantics in code, docs, and tests/usage reset (aliases inherit/clear/default) clears the override to inherit the default; only explicit off persists; a full session reset preserves the preference. Documented in docs/concepts/usage-tracking.md (+ token-use / slash-commands / tui docs and help strings).
  3. Real behavior proof for configured default / explicit off / clear-to-inherit — covered by tests below across resolver, ACP patch mapping, TUI reset/toggle, and a real sessions.changed mutation event, plus the live /usage capture under Real behavior proof below.
  4. Apply the configured default to queued follow-up delivery too — follow-up replies now use the same effective resolver and footer helper as immediate replies; explicit off still suppresses, and full mode renders through the usage template without exposing raw session keys.

Tests and validation

  • node scripts/run-tsgo.mjs -p tsconfig.core.json — 0 errors.
  • node scripts/generate-config-doc-baseline.ts --check — OK (baseline regenerated).
  • vitest run across the touched suites (resolver, ACP config-change, TUI command-handlers/session-actions, gateway session-utils, server.sessions.list-changed, embedded-backend, …) — green. Key assertions: config default applies when unset; explicit off persists and is not overridden by the default; clear/reset returns to inherit; per-channel messages.responseUsage map respected; sessions.changed carries the resolved effectiveResponseUsage (distinct from raw undefined).
  • node scripts/run-vitest.mjs src/auto-reply/reply/followup-runner.test.ts src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts src/auto-reply/reply/commands-session-usage.test.ts src/auto-reply/thinking.test.ts src/gateway/sessions-patch.test.ts src/gateway/session-utils.test.ts src/acp/translator.session-config.test.ts src/tui/tui-command-handlers.test.ts src/auto-reply/reply/reply-usage-state.test.ts — green, including follow-up responseUsage default/full/off coverage.

Evidence

  • telegram-e2e-bot-to-bot mock SUT probe on PR checkout: driver message 38967, threaded SUT reply 38968, mock OpenAI requests 1, observed OPENCLAW_E2E_OK plus Usage: 11 in / 7 out.

Redacted live /usage capture on a build carrying these changes (Discord, opus-4-8): full footer by default, then /usage off removes it on the next reply. Scope note: this proves footer rendering and that explicit /usage off persists; the configured-default and clear-to-inherit paths are proven by the tests above.

After-fix evidence:

usage off

@Marvinthebored
Marvinthebored requested a review from a team as a code owner June 3, 2026 08:57
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: googlechat Channel integration: googlechat channel: imessage Channel integration: imessage channel: line Channel integration: line channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: msteams Channel integration: msteams channel: nextcloud-talk Channel integration: nextcloud-talk channel: nostr Channel integration: nostr channel: signal Channel integration: signal channel: slack Channel integration: slack channel: telegram Channel integration: telegram channel: tlon Channel integration: tlon channel: voice-call Channel integration: voice-call channel: whatsapp-web Channel integration: whatsapp-web channel: zalo Channel integration: zalo channel: zalouser Channel integration: zalouser extensions: copilot-proxy Extension: copilot-proxy extensions: diagnostics-otel Extension: diagnostics-otel extensions: llm-task Extension: llm-task extensions: lobster Extension: lobster extensions: memory-core Extension: memory-core extensions: memory-lancedb Extension: memory-lancedb extensions: open-prose Extension: open-prose cli CLI command changes channel: feishu Channel integration: feishu channel: twitch Channel integration: twitch channel: irc labels Jun 3, 2026
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Dependency graph guard cleared

This PR no longer has blocked dependency graph changes. A future dependency graph change requires a fresh /allow-dependencies-change comment after the guard blocks that new head SHA.

  • Current SHA: 47f83d38d79bf992b5d2539b402bf073a872a87a

@clawsweeper

clawsweeper Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 24, 2026, 8:58 AM ET / 12:58 UTC.

Summary
The PR adds a messages.responseUsage config default plus inherited/off/reset semantics, effective session projections, ACP/TUI/UI handling, docs, and tests for persistent /usage footers.

PR surface: Source +183, Tests +465, Docs +64, Generated 0. Total +712 across 37 files.

Reproducibility: yes. at source level for the remaining delivery gap: PR head wires runReplyAgent, while PR-head followup-runner.ts still lacks response-usage/default resolution and usage-line append handling. I did not run a live failing channel path in this read-only review.

Review metrics: 2 noteworthy metrics.

  • Config/default surfaces: 1 added. messages.responseUsage is a new user-facing default, so compatibility, docs, and upgrade behavior need maintainer attention before merge.
  • Session responseUsage control paths: 4 changed. Chat /usage, Gateway sessions.patch, ACP selection, and TUI command handling now distinguish explicit off from clear-to-inherit, changing persisted session semantics.

Stored data model
Persistent data-model change detected: serialized state: src/config/schema.help.ts, serialized state: src/gateway/session-event-payload.ts, serialized state: src/gateway/session-utils.test.ts, serialized state: src/gateway/session-utils.ts, serialized state: src/gateway/sessions-patch.test.ts, unknown-data-model-change: src/gateway/session-utils.test.ts. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
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:

  • [P1] Wire or explicitly narrow follow-up delivery behavior before merge.
  • [P1] Add redacted current-head proof for configured default, explicit off, and reset-to-inherit on a real transport.
  • Get maintainer confirmation that messages.responseUsage is the intended public config key.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The Discord screenshot proves configured-default plus explicit off only partially; Mantis video extraction failed and the available Telegram screenshot does not show reset-to-inherit or a footer-bearing reply on current head. 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.

Mantis proof suggestion
A native Telegram proof would directly show the configured default and reset/off behavior in the visible delivery path. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify messages.responseUsage seeds Telegram usage footers and /usage off plus /usage reset behave correctly on current head.

Risk before merge

  • [P1] The PR adds a new public messages.responseUsage config key while the canonical issue proposed an agents.defaults-style key, so maintainers need to accept the stable config contract before merge.
  • [P1] The PR changes persisted per-session responseUsage semantics by storing explicit off and using null or reset to inherit; existing sessions that previously cleared off cannot be distinguished if a non-off default is later configured.
  • [P1] The PR body and docs describe broad effective consistency, but follow-up delivery still does not apply the new resolver or append usage footers, so Telegram and other follow-up-channel replies can ignore the configured default.
  • [P1] The supplied proof is useful but partial: it shows Discord configured-default and explicit off behavior, not reset-to-inherit or a current-head Telegram/follow-up reply that visibly carries the footer.

Maintainer options:

  1. Finish Contract, Delivery, And Proof First (recommended)
    Confirm messages.responseUsage as the intended public key, wire the same effective resolver through follow-up delivery or narrow the scope, and add current-head real behavior proof before merge.
  2. Accept Immediate-Reply Scope Deliberately
    Maintainers can choose to merge only immediate-reply behavior, but the PR body and docs should stop claiming every surface honors the effective value.
  3. Pause For The Canonical Issue
    If the config key or delivery semantics remain unsettled, pause this PR and keep the canonical usage-default issue as the product decision point.

Next step before merge

  • [P1] Maintainer judgment is needed for the public config key, delivery scope, and proof adequacy before repair automation should take over.

Security
Cleared: The diff changes config/schema/docs/tests and session-state logic only; I found no dependency, lockfile, workflow, permission, secret, network, or package-execution change.

Review findings

  • [P2] Wire responseUsage defaults into follow-up delivery — src/auto-reply/reply/agent-runner.ts:2279-2283
Review details

Best possible solution:

Land only after maintainers accept the public config key, follow-up delivery either uses the same resolver or the scope is explicitly narrowed, and current-head real transport proof covers default, explicit off, and reset-to-inherit.

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

Yes, at source level for the remaining delivery gap: PR head wires runReplyAgent, while PR-head followup-runner.ts still lacks response-usage/default resolution and usage-line append handling. I did not run a live failing channel path in this read-only review.

Is this the best way to solve the issue?

No, not merge-ready yet. The shared resolver and explicit-off semantics are a good direction, but the best fix needs the public config contract, follow-up delivery scope, and current-head proof aligned.

Full review comments:

  • [P2] Wire responseUsage defaults into follow-up delivery — src/auto-reply/reply/agent-runner.ts:2279-2283
    This resolver only runs in runReplyAgent; PR-head followup-runner.ts still persists usage and sends final payloads without reading responseUsage, resolving messages.responseUsage, or appending a usage line. Telegram and other follow-up-channel replies can therefore ignore the documented configured default.
    Confidence: 0.88

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority user-facing configuration improvement with limited blast radius but real compatibility and session-state implications.
  • merge-risk: 🚨 compatibility: The PR adds a public config/default key and changes how inherited defaults interact with existing per-session responseUsage behavior.
  • merge-risk: 🚨 session-state: The PR changes persisted session override semantics and projects effective response-usage state through gateway, ACP, TUI, and UI rows.
  • merge-risk: 🚨 message-delivery: The documented default affects visible reply footers, but the follow-up delivery path still does not apply or append the effective usage mode.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The Discord screenshot proves configured-default plus explicit off only partially; Mantis video extraction failed and the available Telegram screenshot does not show reset-to-inherit or a footer-bearing reply on current head. 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.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The Discord screenshot proves configured-default plus explicit off only partially; Mantis video extraction failed and the available Telegram screenshot does not show reset-to-inherit or a footer-bearing reply on current head.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible usage footer behavior that can be shown in a short Telegram Desktop recording.
Evidence reviewed

PR surface:

Source +183, Tests +465, Docs +64, Generated 0. Total +712 across 37 files.

View PR surface stats
Area Files Added Removed Net
Source 23 217 34 +183
Tests 9 476 11 +465
Docs 4 66 2 +64
Config 0 0 0 0
Generated 1 2 2 0
Other 0 0 0 0
Total 37 761 49 +712

What I checked:

  • Repository policy applied: Root AGENTS.md treats config/default additions and persisted session preferences as compatibility-sensitive, which applies to the new messages.responseUsage key and changed responseUsage persistence semantics. (AGENTS.md:31, ae9474b5fdc0)
  • Scoped review guidance applied: Scoped docs, gateway, TUI, UI, and Telegram maintainer notes were read; Telegram-visible behavior needs real Telegram proof when reply behavior is affected. (.agents/maintainer-notes/telegram.md:1, ae9474b5fdc0)
  • PR adds public config/default surface: PR head adds messages.responseUsage as either a mode or a per-channel map, creating a new user-facing config/default contract. (src/config/zod-schema.session.ts:164, dbb7f3a27e1f)
  • Immediate reply path is wired: PR head resolves the effective usage mode from session override, cfg.messages.responseUsage, and reply channel before appending usage output in runReplyAgent. (src/auto-reply/reply/agent-runner.ts:2279, dbb7f3a27e1f)
  • Follow-up delivery remains unwired: PR head's follow-up runner persists usage and then resolves/sends final payloads without reading responseUsage, resolving messages.responseUsage, or appending a usage line. (src/auto-reply/reply/followup-runner.ts:1387, dbb7f3a27e1f)
  • Follow-up tests do not cover responseUsage footers: Focused searches found no responseUsage or usage-footer assertion in followup-runner.test.ts on current main or PR head. (src/auto-reply/reply/followup-runner.test.ts, dbb7f3a27e1f)

Likely related people:

  • steipete: Symbol history shows the original /usage footer modes and centralized responseUsage handling came from this area. (role: usage footer feature contributor; confidence: high; commits: 2dabce59ce0e, 54d7551b53ca; files: src/auto-reply/reply/commands-session.ts, src/auto-reply/reply/agent-runner.ts)
  • Takhoffman: History shows focused fixes around target-session usage state, which is directly relevant to override versus inherited-default semantics. (role: adjacent usage command contributor; confidence: medium; commits: 4360a59c6d3f, 831386bd6069; files: src/auto-reply/reply/commands-session.ts, src/auto-reply/reply/commands-session-usage.test.ts)
  • vincentkoc: Symbol history shows the shared response usage line helper was split out in this area. (role: usage helper contributor; confidence: medium; commits: 3392558b42ab; files: src/auto-reply/reply/agent-runner.ts, src/auto-reply/reply/agent-runner-usage-line.ts)
  • jalehman: Recent history shows session patch/projection seam work adjacent to sessions.patch and gateway session row projection. (role: session projection contributor; confidence: medium; commits: c85bd452846b, 127e174c9e4d; files: src/gateway/sessions-patch.ts, src/gateway/session-utils.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.

@openclaw-mantis

Copy link
Copy Markdown
Contributor

Mantis Telegram Desktop Proof

Summary: Mantis captured native Telegram Desktop before/after GIFs showing the response usage config update.

Main screenshot This PR screenshot
Baseline native Telegram Desktop screenshot Candidate native Telegram Desktop screenshot
Main This PR
Baseline native Telegram Desktop proof GIF Candidate native Telegram Desktop proof GIF

Motion-trimmed clips:

Raw QA files: https://artifacts.openclaw.ai/mantis/telegram-desktop/pr-89762/run-26887961561-1/index.json

@Peetiegonzalez

Copy link
Copy Markdown
Contributor

usage_bar copy.json

A sample layer translation file (user generated -- with agent assistance). Showcasing some capabilities of the atomic outputs such as temp-scale emojis, status emojis or meter bars.

@Marvinthebored

Copy link
Copy Markdown
Contributor Author

Review repair: explicit /usage off now persists (off vs inherit)

Thanks — the off-vs-inherit finding was correct. With a non-off messages.responseUsage default, an explicit /usage off cleared the session field, so the new fallback re-applied the default and re-enabled the footer the user had just turned off.

Fix (head 45c35a4): persist the explicit "off" instead of clearing it, across all three write paths — chat /usage (src/auto-reply/reply/commands-session.ts), gateway src/gateway/sessions-patch.ts, and the TUI handler (src/tui/tui-command-handlers.ts). This matches the sibling thinkingLevel / reasoningLevel / elevatedLevel fields, which already persist an explicit off (src/gateway/sessions-patch.test.ts). Clear-to-inherit stays a distinct action (session reset, or a null patch).

Docs P2 addressed: added messages.responseUsage to src/config/schema.help.ts and a "Default usage footer mode" section in docs/concepts/usage-tracking.md (mode, per-channel map, precedence, and that an explicit /usage choice — including off — wins).

Regression tests: persists responseUsage=off (does not clear) and clears responseUsage when patch sets null (sessions-patch.test.ts), plus persists an explicit /usage off so a configured default cannot re-enable it (commands-session-usage.test.ts). Local: tsgo clean, oxfmt/oxlint clean, affected Vitest shards green.

Intentionally out of scope (low value): migrating sessions that were already cleared to null before this change so they keep an explicit flag — it only affects sessions that live across the update.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 16, 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:

@Marvinthebored

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

The previous re-review run (27587112194) was cancelled before it could finish, so the verdict was never posted. The off-vs-inherit fix is on branch head 903355b ("persist explicit responseUsage off + document the default"), all checks are green, and the PR is mergeable. Requesting a fresh re-review.

@clawsweeper

clawsweeper Bot commented Jun 16, 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:

@Marvinthebored

Copy link
Copy Markdown
Contributor Author

Real behavior proof — live /usage capture

Captured on a build carrying this PR's changes (Discord, opus-4-8). The assistant reply renders the full usage footer by default (config messages.responseUsage.discord = "full"); after /usage off, the next reply has no footer — the explicit off is honored.

usage off

The shared resolver, the unset/off/inherit three-state distinction, the channel-aware default, and /usage reset are additionally covered by the unit/integration tests in this PR.

@Marvinthebored

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — body updated: added the Real behavior proof section heading with the embedded /usage off capture (was under a "Live behavior proof" heading the proof-gate didn't match). Scope is honest: screenshot proves footer render + /usage off persistence; configured-default / clear-to-inherit covered by the listed tests.

@clawsweeper

clawsweeper Bot commented Jun 24, 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.

Peetiegonzalez and others added 2 commits June 24, 2026 07:11
Adds `messages.responseUsage` (precedence session -> channel -> config default
-> off) so the persistent /usage footer can default-on, with three distinct
states: explicit on (tokens/full), explicit off (persisted), and unset (inherit
the configured default).

Unifies effective-value resolution behind a single channel-aware resolver
`resolveEffectiveResponseUsage` used by reply rendering, the no-arg /usage
toggle, the ACP control, and the gateway session-row builder; the row builder's
`effectiveResponseUsage` is carried through sessions.changed events, chat
snapshots, and the UI row so live consumers never go stale. `/usage reset`
(aliases inherit/clear/default) clears the override to inherit; only explicit
off persists; a full session reset preserves the preference. ACP "Usage detail"
gains an "inherit" option for unset sessions. Docs/help/completions updated; "on"
documented as a legacy alias; config-doc baseline regenerated.
@obviyus

obviyus commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Landed via rebase onto main.

  • Scoped tests: node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/auto-reply/reply/agent-runner-usage-line.ts src/auto-reply/reply/agent-runner.ts src/auto-reply/reply/followup-runner.ts src/auto-reply/reply/followup-runner.test.ts src/auto-reply/reply/reply-usage-state.ts; OPENCLAW_LOCAL_CHECK_MODE=throttled node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental false; node scripts/run-vitest.mjs src/auto-reply/reply/followup-runner.test.ts src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts src/auto-reply/reply/commands-session-usage.test.ts src/auto-reply/thinking.test.ts src/gateway/sessions-patch.test.ts src/gateway/session-utils.test.ts src/acp/translator.session-config.test.ts src/tui/tui-command-handlers.test.ts src/auto-reply/reply/reply-usage-state.test.ts
  • Live proof: Telegram bot-to-bot mock SUT probe on this PR checkout observed OPENCLAW_E2E_OK plus Usage: 11 in / 7 out, with one mock OpenAI request.
  • Review: autoreview clean after follow-up fixes.
  • Changelog: not updated; release generation owns CHANGELOG.md.
  • Land commit: 47f83d3
  • Merge commit: 3179692

Thanks @Marvinthebored!

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

Labels

app: web-ui App: web-ui docs Improvements or additions to documentation gateway Gateway runtime mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. 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: XL 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.

3 participants