Commit Graph

81255 Commits

Author SHA1 Message Date
Peter Steinberger 855599d7e9 fix(ui): keep sidebar icon endcap intact in single-line session rows (#126567)
With message preview off, rows collapse to one line and the second-row icon
logic (spinner, unread dot, badges, facepile, trail) rides beside the title.
Two defects broke that:

- Long titles crushed the icon endcap: the single-line title used flex-basis
  auto, so overflow shrink was distributed onto the endcap (24px -> ~7px),
  clipping the status icons. Basis 0 now mirrors the two-line subtitle
  contract: text absorbs all shrink before icons do.
- Native catalog session rows always rendered the two-line skeleton with an
  empty details line (46px vs 30px) and never collapsed, in both preview
  modes. Catalog rows never carry preview text, so they are now always
  single-line.

Regression coverage: long-title endcap geometry in
chat-flow.sidebar-presentation.e2e.test.ts (fails pre-fix), and
codex-sessions.e2e.test.ts density assertions updated to the new
all-single-line contract.
2026-08-20 07:37:21 -07:00
Ayaan Zaidi 8458777e6a feat(qa): trigger Mantis proof from pull requests (#126658)
Add trusted ClawSweeper-label and maintainer-comment dispatch for Mantis Telegram proof. Short-circuit non-visible PRs before desktop setup while preserving exact-head, fork, credential, and comment-ownership boundaries.
2026-08-20 20:05:51 +05:30
Peter Steinberger 923e972564 fix(apple): gate gateway RPC polling on the hello method catalog (#126559)
* fix(apple): gate gateway RPC polling on the hello method catalog

Released 2026.7.x gateways authorize before method dispatch and reject
unknown methods with INVALID_REQUEST / "missing scope: operator.admin",
which never names the method, so the shared Swift kit's error-text
matchers could not detect an unsupported gateway: queued sends wedged in
a delay-free sessions.branches.list reconcile loop, question.list burned
its retry budget per health event, and progressCard.get fired a rejected
fetch per event.

Port the Android fix pattern (#126540): generalize the progressCard-only
transport seam into tri-state gatewayAdvertisesMethod(_:), make hello
catalog parsing distinguish absent (nil) from empty, route branch
listing through a catalog-checking dispatch point with a typed
BranchListingUnadvertisedError, tighten error-text matching to the
modern "unknown method:" shape, and skip question.list/progressCard.get
when unadvertised. Regression tests encode the exact 2026.7.1-2 wire
shape and fail pre-fix (A/B verified).

* fix(apple): keep explicit unsupported branch-listing replies releasing sends

ClawSweeper P1: the tightened matcher dropped the shipped acceptance of
explicit unsupported/unimplemented GatewayResponseError replies that
name sessions.branches.list, which would wedge queued sends on a
pre-catalog gateway emitting that shape. Collapse the matcher onto the
bridged localizedDescription (errorDescription always prefixes the
method name), preserving both legacy qualifier shapes while still
rejecting bare missing-scope denials and the old false-positive-prone
INVALID_REQUEST arm; add the releasing-send regression test.
2026-08-20 07:31:04 -07:00
ClawSweeper 267ffc4754 feat(ui): manage automation condition triggers (#126534)
* feat(ui): manage cron condition triggers

* test(models): isolate ambient CLI availability

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-20 07:20:01 -07:00
Peter Steinberger fdac5c56c5 fix(memory): keep owner-only tool omission quiet (#126679) 2026-08-20 07:17:05 -07:00
Peter Steinberger 465043ca85 fix(acp): prevent lost prompts and preserve conversation bindings (#126657)
* fix(acp): enforce prompt and binding ownership

* test(acp): align execution-start boundary

* perf(startup): avoid broad ACP core import

* fix(acp): order prompt replacement admission
2026-08-20 07:03:11 -07:00
Peter Steinberger fae9bd6baf fix(ui): refresh mixed-role node status (#126677) 2026-08-20 06:49:58 -07:00
Vito Cappello 1b9d3ac57d fix(claude-cli): apply thinking and keep live sessions warm (#125528)
* fix(models): preserve CLI runtime thinking capabilities

* fix(models): preserve configured thinking overrides

* fix: keep Claude live CLI process warm across captured turns

MCP delivery capture no longer kills the warm Claude process after every
turn. Capture-key admission is fenced by grant activate/deactivate so
prompt-cache continuity can survive across messages.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude-cli): apply thinking levels

* fix(claude-cli): materialize thinking capabilities

* test(claude-cli): cover warm thinking budget reuse

* test(models): restore prepared catalog contracts

* fix(agents): restore catalog test boundaries

* fix(agents): break prepared catalog import cycle

* refactor(gateway): extract model-choice runtime resolution into public-projection module

Keeps models-list-result.ts under the max-lines cap after the origin/main
merge by moving resolveModelChoiceAgentRuntime next to the projection
helpers it feeds.

Claude-Session: https://claude.ai/code/session_01QXUQuDVataA5o16kxNnmoX

* test(claude-cli): cover thinking cache reuse

* test(claude-cli): cover captured live reuse

* fix(claude-cli): rotate MCP grants across live turns

* fix(anthropic): respect mandatory adaptive thinking

* fix(claude-cli): restore warm MCP bearer

* fix(anthropic): keep Mythos adaptive thinking

* test(claude-cli): prove live MCP cache reuse

* test(claude-cli): align live cache coverage

* fix(claude-cli): reuse live sessions across MCP grant rotation

* test(claude-cli): satisfy cache lane static gates

* fix(claude-cli): preserve runtime thinking policy

* fix(thinking): honor concrete runtime policy

* fix(gateway): honor mandatory thinking in model list

* refactor(auto-reply): extract prepared catalog merge

* docs(cli-backend): document thinking execution input

* refactor(auto-reply): extract catalog lookup helper

* style(auto-reply): format catalog helper import

* fix(claude-cli): stabilize live context budget

* fix(auto-reply): type prepared context metadata

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-08-20 06:44:49 -07:00
Peter Steinberger 4b32275970 fix(macos): keep elevation computer control active (#126674) 2026-08-20 06:39:06 -07:00
Peter Steinberger e71fc9420c fix(memory): reject overdue embedding results (#126667) 2026-08-20 06:34:11 -07:00
Vyctor H. Brzezowski 5e6b29d23a fix(ui): keep peer identity stable when actions appear (#126287)
* fix(ui): keep peer identity stable when actions appear

* fix(ui): keep mobile peer actions trailing
2026-08-20 10:30:14 -03:00
Peter Steinberger 0d43ade926 perf(test): cache parsed release workflows (#126673) 2026-08-20 06:28:31 -07:00
Peter Steinberger e1051ceea3 fix(release): dispatch validation by full SHA (#126669) 2026-08-20 06:01:09 -07:00
Peter Steinberger 584e750c16 fix(tui): route usage cost correctly (#126668) 2026-08-20 05:55:11 -07:00
Peter Steinberger f887844eb0 chore(macos): pin Peekaboo 4.2.2 source (#126340) 2026-08-20 05:50:05 -07:00
Peter Steinberger cbe070071a perf(test): trigger restart probe timeout deterministically (#126664) 2026-08-20 05:42:43 -07:00
Peter Steinberger bb96493ebe fix(logging): make clawlog JSON parseable (#126651) 2026-08-20 05:02:28 -07:00
Peter Steinberger d5abaf4ab3 perf(test): advance Buzz reconnect backoff (#126649) 2026-08-20 04:53:17 -07:00
Vincent Koc c28c279afa fix(release): keep frozen validation independent of main (#126622)
* fix(release): freeze validation tooling identity

* fix(release): enforce frozen validation contract

* fix(release): validate candidate identity in parent

* fix(ci): close release isolation gate findings
release-publish/c28c279afa37-1787225611
2026-08-20 04:32:38 -07:00
Peter Steinberger a59abcf4a8 fix(gateway): preserve restart health errors (#126645) 2026-08-20 04:29:02 -07:00
Peter Steinberger c8f88a8b38 fix(ui): recover newer builds after stale probes (#126628)
* fix(ui): recover newer builds after stale probes

* fix(ui): elect newest stale-build recovery target
2026-08-20 04:21:57 -07:00
Ayaan Zaidi b7b7eec5ee feat(qa): run Mantis Telegram proof on local desktop (#126220)
Move Mantis Telegram Desktop proof from the remote AWS/Crabbox lane to a recorder-driven local Docker desktop. Keep proof scenarios agent-authored, cache trusted build outputs, and publish exact visible Telegram evidence without writing the QA bot token to artifacts.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 11:12:51 +00:00
Peter Steinberger 755dad74d1 fix(gateway): recover cloud workers without blocking paired-node startup (#126641)
* fix(gateway): recover provisioning workers during startup

Resume exact provider operations and leases under closure-bound placement and
session authority. Bound startup admission to the exact cloud setup worker and
preserve enrollment leases across non-destructive shutdown cancellation.

* fix(gateway): preserve paired node startup recovery
2026-08-20 04:02:59 -07:00
Peter Steinberger c2c29dda5c perf(test): settle partial reply drains deterministically (#126639) 2026-08-20 03:55:19 -07:00
Vincent Koc a61b0c6be4 fix(agents): replace mismatched runtime generations (#126626) 2026-08-20 03:54:57 -07:00
Pavan Kumar Gondhi dff0f41e4a fix(imessage): reject ambiguous outbound recipients (#126564)
* fix(imessage): reject ambiguous outbound targets

* fix(imessage): preserve tel URI identities

* fix(imessage): explain target qualification

* test(imessage): keep target proof plugin-local

* docs(imessage): explain qualified contact targets
2026-08-20 16:16:18 +05:30
Peter Steinberger a4eba6c606 fix(channels): retire buses before shutdown (#126637) 2026-08-20 03:38:39 -07:00
Marvinthebored bbee5467bc fix(agents): run code-mode exec when a model sends a blank code alias (#126599)
Treat blank code and command aliases as absent while preserving mismatch rejection when both aliases contain different instructions. Keep trusted hook and policy rewrites normalized at the Code Mode owner boundary.

Co-authored-by: Marvinthebored <marvin.assistant@lindsey.jp>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 15:57:46 +05:30
Ayaan Zaidi 08d926d3a5 fix(telegram): recognize current-source message targets (#126625)
Recognize raw, provider-qualified, and topic-qualified Telegram targets as the same current source when their semantic identities match. Prevent successful final message-tool sends from continuing into duplicate replies.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 15:56:49 +05:30
Peter Steinberger f20c6dacc3 fix(gateway): own plugin reload generations (#126627) 2026-08-20 03:18:39 -07:00
xingzhou a9ddc2fb1d fix(agents): keep shell compound commands readable (#122581)
* fix(agents): keep shell compound commands readable

* test(agents): cover compound command summaries

* fix(agents): preserve quoted shell stage summaries

* fix(agents): preserve compound shell command displays

* fix(agents): recognize remaining compound shell forms

* fix(agents): recognize coprocess command bodies

* fix(agents): support shell-word function names

* fix(agents): satisfy shell display static checks

* fix(agents): recognize modern Bash time prefixes

* fix(agents): recognize modern Bash function bodies

* fix(agents): recognize adjacent subshell function bodies

* test(agents): keep shell display coverage within limit

* fix(agents): split stages after arithmetic commands

* test(agents): keep arithmetic coverage within lint limit

* chore(agents): format shell display parser

* fix(agents): detect compound shell substitutions

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 15:47:07 +05:30
Peter Steinberger 05c31c296c fix(release): remove stale plugin scan findings (#126632) 2026-08-20 03:12:32 -07:00
Peter Steinberger 594d6d6e4d perf(test): route TUI PTY tests exclusively (#126624)
* perf(test): route TUI PTY tests exclusively

* test: isolate TUI PTY config ownership assertion
2026-08-20 03:10:24 -07:00
felirami 9752283060 fix: spawned child prompt omits staged attachment file paths (#123676)
* fix: list staged attachment file paths in the child spawn prompt

sessions_spawn already writes named files, but the child system prompt
only named the staging directory. File-consuming tools then failed with
"Local media path is not a file".

Closes #123583

* fix: bound and sanitize staged attachment paths in the child prompt

Reject prompt-separator names with the shared prompt-control owner, and
fail batches whose rendered path list exceeds a 4096-char hard cap.
Keep listing exact staged file paths so file tools do not receive a directory.

* fix: reject all Cc/Cf attachment names via shared prompt sanitizer

Reuse sanitizeForPromptLiteral so U+202E and remaining C1 controls fail
before raw path rendering. Keep the 4096-char path-list cap.

* fix: scope prompt-safe names to native spawn and wrap paths as untrusted data

ACP only forwards {mediaType,data} and must still accept format-character filenames. Native staging keeps the Cc/Cf check and 4096 path-list cap, and renders staged paths through wrapUntrustedPromptDataBlock.

* fix: cap rendered attachment prompt size and reject non-lossless native names

Measure the wrapped untrusted path block, not raw paths, and reject oversize lists instead of truncating. Native names containing <, >, or & are rejected so the prompted path matches the staged file. ACP still accepts those names because it never renders them.

* fix: keep ampersand names, hide Cc/Cf in errors, separate mount hint

Native spawn still rejects angle-bracket names that wrapUntrustedPromptDataBlock rewrites. Ampersand names stay staged and prompted as-is. Invalid-name tool errors no longer echo raw Cc/Cf. The optional mountPath hint starts on the line after the untrusted path block.

* fix(agents): tighten spawned attachment path prompt

---------

Co-authored-by: felirami <6752178+felirami@users.noreply.github.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 15:24:31 +05:30
Peter Steinberger 6d70d051a4 fix(gateway): preserve agent owner for live events (#126608)
* fix(gateway): preserve agent owner for live events

* fix(gateway): retain canonical live session owner
2026-08-20 02:50:38 -07:00
Vincent Koc 54dad919ae fix(ci): wait for outbox readiness in macOS test (#126617) 2026-08-20 02:43:21 -07:00
Peter Steinberger 6932897bf9 docs(plugins): show root CLI commands (#126621) 2026-08-20 02:42:05 -07:00
Jacqueline Henriksen b668a21f07 fix(models): classify catalog timeouts by identity (#124288)
Prevent provider-authored timeout-like errors from being silently downgraded as discovery deadlines. Keep prepared catalog reuse covered across Gateway/Telegram picker callbacks.

Co-authored-by: Jacqueline Henriksen <jjjhenriksen@gmail.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 15:08:45 +05:30
Peter Steinberger 2ebe24e9b2 fix(ui): keep sidebar chat rows separated during resize (#126610) 2026-08-20 02:18:34 -07:00
Vincent Koc 2c435f734f test(gateway): isolate restart sentinel media mocks (#126606) 2026-08-20 02:12:29 -07:00
Peter Steinberger 015913306f fix(nodes): preserve node inventory failures (#126609) 2026-08-20 02:06:09 -07:00
Peter Steinberger c55d9b6d20 fix(agents): preserve terminal tool completion (#126603) 2026-08-20 02:01:36 -07:00
Peter Steinberger 58f4c9a0a8 fix(gateway): stop permanent protocol retry loops (#126600) 2026-08-20 02:00:21 -07:00
Peter Steinberger 71cff695c1 fix(gateway): prevent enrolled node recovery from blocking startup (#126601)
* fix(gateway): admit recovering nodes during startup

* test: retry state directory cleanup
2026-08-20 01:52:56 -07:00
施清荃 a2fe7c395d fix(browser): resolve chrome-extension bundled dir from built package layout (#126279)
The browser doctor computed BROWSER_PLUGIN_ROOT by walking one directory
up from the source file. In a source checkout the file lives in
extensions/browser/src/ and chrome-extension assets are at
extensions/browser/chrome-extension, so this worked. In a built package the
compiled artifact lives at the package root (dist/extensions/browser/) and
assets are at dist/extensions/browser/chrome-extension, so the old heuristic
looked for dist/extensions/chrome-extension and failed with ENOENT.

Resolve the package root by searching for package.json, which exists in both
layouts, and fall back to the previous heuristic only when it is absent.

Fixes the doctor report: 'Chrome extension bootstrap status could not be
inspected: ENOENT ... realpath /dist/extensions/chrome-extension'.
2026-08-20 01:50:26 -07:00
Vincent Koc 3b6fc03e02 fix(plugins): keep default slots implicit (#126442)
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-20 01:49:00 -07:00
sunlit-deng a509f07b65 fix(diffs): guard malformed tool arguments (#123087) 2026-08-20 01:47:13 -07:00
SunnyShu 69d30286eb fix(embedded-runner): flush partial streaming output before run budget abort (#116253)
Preserve visible streamed assistant text when the hard run budget expires.
Drain queued stream events before terminal-owned salvage while keeping cancellations and provider failures non-salvaging.

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-20 14:16:07 +05:30
Yuval Dinodia c1aa335c4b fix(agents): stop apply_patch end-of-file hunks from destroying earlier hunk lines (#124379)
An update chunk marked "*** End of File" searched only from the last
possible offset, discarding the cursor left by the previous chunk. The
end-of-file chunk could therefore match behind that cursor, inside a
region an earlier chunk had already claimed, and the two overlapping
replacements deleted the same lines twice while apply_patch still
reported success.

seekSequence now clamps the end-of-file search to the caller cursor, so
an overlapping chunk fails to match and the tool reports the failure
instead of silently rewriting the file.

Punchcard-Session: frost-orchard-willow-p3
2026-08-20 01:45:26 -07:00
Koduri Mahesh Bhushan Chowdary bb134fef12 fix(cli): clarify cron channel plugin ids (#124655)
Keep cron delivery help and automation docs explicit that --channel selects a channel plugin, not a per-conversation channel identifier.

Fixes #124646

Punchcard-Session: clear-timber-orchard-n1
2026-08-20 01:45:01 -07:00