Peter Steinberger
2655bf4dac
fix(clawhub): bound archive download bodies ( #101176 )
...
* fix(clawhub): bound archive download bodies
Co-authored-by: NIO <nocodet@mail.com >
* docs(changelog): note ClawHub archive bounds
* chore(changelog): defer ClawHub release note
* fix(clawhub): avoid response-limit shadowing
---------
Co-authored-by: NIO <nocodet@mail.com >
2026-07-06 23:29:25 +01:00
cxbAsDev
a464620141
fix(extensions/huggingface): bound model discovery JSON response read to prevent OOM ( #101079 )
...
* fix(extensions/huggingface): bound model discovery JSON response read to prevent OOM
* test(huggingface): prove bounded discovery cleanup
* test(huggingface): avoid unbound reader assertions
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:26:27 +01:00
cxbAsDev
2b868cac57
fix(tlon): bound Memex upload JSON response read ( #101115 )
...
* fix(tlon): bound Memex upload JSON response read
* test(tlon): prove upload response cancellation
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:26:15 +01:00
Peter Steinberger
254b819d7d
fix: prevent context-engine wedges after session rotation ( #101192 )
...
* fix(sessions): create rotated transcript before callbacks
* chore: keep release note in PR body
* chore: keep release note in PR body
2026-07-06 23:25:58 +01:00
crh-code
d4b38a2160
fix(device-pair): remove INADDR_ANY and IPv6 unspecified from isLoopbackHost ( #98617 )
...
* fix(device-pair): remove INADDR_ANY and IPv6 unspecified from isLoopbackHost
0.0.0.0 (INADDR_ANY — bind to all interfaces) and :: (IPv6 unspecified)
are NOT loopback addresses. The canonical implementation in
src/gateway/net.ts explicitly excludes both. Classifying them as
loopback in isLoopbackHost causes incorrect behavior in mobile
pairing cleartext host validation.
Co-Authored-By: Claude <noreply@anthropic.com >
* test(device-pair): reject unspecified setup URLs
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:25:35 +01:00
ZOOWH
4204a94845
fix(edit): show candidate lines with similarity scores on oldText match failure ( #97038 )
...
* fix(edit): show candidate lines on oldText match failure
When edit tool cannot find oldText, include up to 3 near-match candidate
lines with similarity scores and line numbers. Caps input size (MAX_LINES
3000, MAX_LINE_LEN 200) to avoid unbounded CPU on large files. Reuses
existing levenshteinDistance helper.
Closes #97032
* fix(edit): use toSorted instead of sort for candidate ranking
Fixes lint violation: unicorn(no-array-sort)
* fix(edit): keep candidate truncation branch-compatible
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-06 15:21:56 -07:00
Jason (Json)
17d3c2eb0a
feat(ui): redesign chat composer controls ( #100461 )
...
* feat(ui): redesign chat composer controls
* fix(ui): preserve scoped chat model catalogs
* fix(ui): honor configured default agent in chat commands
* fix(ui): align composer translations and tests
* test(ui): expect cached chat commands
* fix(ui): inset composer attachment previews
* fix(ui): add attachment preview top padding
* fix(ui): preserve composer layout after main merge
* fix(ui): keep abort available during voice input
* fix(ui): merge duplicate model provider groups
* feat(ui): finalize chat composer redesign
* fix(ui): refine composer layout and scroll indicators
* fix(ui): align composer with chat column
* fix(ui): restore composer max width
* fix(ui): match composer Codex width
* fix(ui): stabilize chat composer controls
* docs: refresh generated map
* fix(ui): discard rejected model drafts
* fix(ui): clear chat composer CI gates
* test(ui): await rejected model rollback
* fix(ui): address chat composer review findings
* fix(ui): preserve default provider ordering
* fix(ui): stage model picker changes until save
* fix(ui): scope model picker drafts to chat context
* fix(ui): align composer drafts and message actions
* fix(ui): preserve reasoning rendering
* feat(ui): refine chat composer interactions
* fix(ui): repair chat composer CI checks
* fix(ui): repair chat composer integration checks
* fix(ui): translate chat composer labels
* fix(ui): restore mobile camera action
* test(ui): target visible attachment control
* test(ui): locate attachment disclosure directly
* fix(ui): preserve composer control ordering
* test(ui): track current composer controls
* fix(ui): honor terminal active-run state
* fix(ui): guard command metadata ownership
* fix(ui): stage agent model defaults
* fix(ui): preserve chat settings and scroll signals
* fix(ui): reconcile merged chat controls
* fix(ui): localize Talk composer options
* test(ui): infer chat control props
* fix(ui): refresh agent model metadata on session switch
* style(ui): format merged chat controls
* test(ui): avoid shadowed composer geometry names
2026-07-06 16:18:36 -06:00
Peter Steinberger
5a7c67682f
fix(browser): isolate CDP control host policy ( #101171 )
2026-07-06 23:14:48 +01:00
Peter Steinberger
2424fdf8e5
ci: keep native landing validation off queued Blacksmith capacity ( #101196 )
...
* ci: route native i18n release gates to hosted runners
* ci: keep Testbox PR validation on hosted runners
* fix(ci): gate Testbox lifecycle to real leases
2026-07-06 23:14:27 +01:00
lsr911
e924f30bf5
fix(browser): guard readFields JSON.parse against malformed CLI input ( #98861 )
...
* fix(browser): guard readFields JSON.parse against malformed user input
Wraps JSON.parse(payload) in readFields() with try/catch, throwing a
descriptive Error when CLI --fields or --fields-file input contains
malformed JSON instead of raw SyntaxError.
8/8 proof assertions pass using standalone script that imports and
calls the real exported readFields() with malformed field strings.
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: lsr911 <liao.shirong@xydigit.com >
* fix(browser): add vitest malformed JSON tests, remove standalone proof
ClawSweeper feedback: added 2 vitest tests (malformed JSON, empty fields)
to the existing shared.test.ts, removed standalone proof script.
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: lsr911 <liao.shirong@xydigit.com >
* fix(browser): cover malformed fields at CLI boundary
---------
Signed-off-by: lsr911 <liao.shirong@xydigit.com >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:14:00 +01:00
mushuiyu886
b75fe8102e
fix(acp): preserve runtime option clears ( #101044 )
...
* fix(acp): preserve runtime option clears
* refactor(acp): simplify runtime option clears
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:12:50 +01:00
cxbAsDev
0e0888a887
fix(agents): handle ripgrep stdout/stderr stream errors in grep tool ( #101014 )
...
* fix(agents): handle ripgrep stdout/stderr stream errors in grep tool
* fix(agents): terminate ripgrep child on stdout/stderr stream errors
* test(agents): make mock child reflect kill state in grep stream-error test
* refactor(agents): harden grep stream cleanup
* refactor(agents): centralize grep stream failure cleanup
* test(agents): model grep child kill state safely
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:12:23 +01:00
cxbAsDev
3f9ee4c5a1
fix(agents): handle stdin stream errors in docker sandbox execution ( #101032 )
...
* fix(agents): handle stdin stream errors in docker sandbox execution
* fix(agents): terminate Docker child on stdin stream error
* fix(agents): add real proof for docker stdin stream errors
* refactor(agents): fold Docker stdin failure coverage into existing tests
* test(agents): model Docker stdin as an event stream
* test(agents): narrow Docker stream mocks before emit
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 23:12:04 +01:00
Peter Steinberger
e29efa6852
fix(discord): terminate ffmpeg on stream errors ( #101124 )
...
* fix(discord): terminate ffmpeg on stream errors
* docs(changelog): note Discord ffmpeg cleanup
* fix(discord): force-stop ffmpeg after output failures
* chore: defer Discord release note to changelog batch
2026-07-06 23:11:45 +01:00
Peter Steinberger
b7d73e3b23
fix(infra): contain SSH config probe stream failures ( #101160 )
...
* fix(infra): harden ssh config probe cleanup
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
* fix(infra): satisfy ssh probe lint
* chore(changelog): defer ssh probe release note
---------
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
2026-07-06 23:11:21 +01:00
xingzhou
e80e8a2b67
fix(device-pair): mobile pairing rejects local IPv6 cleartext URLs ( #101008 )
...
* fix(device-pair): allow local IPv6 pairing URLs
* test(device-pair): cover IPv6 cleartext lower bound
2026-07-06 22:35:09 +01:00
Peter Steinberger
246b5bbcca
perf(test): run docs i18n partitions concurrently
2026-07-06 17:31:23 -04:00
Josh Lehman
c7295e417d
chore(scripts): add debt ratchet to the session-accessor boundary guard ( #101178 )
...
* chore(scripts): add debt ratchet baseline to session-accessor boundary gate
* fix(scripts): fail session-accessor debt gate until baseline ratchets down
2026-07-06 13:55:16 -07:00
Dallin Romney
6bffda4166
ci: temporarily disable QA smoke ( #101185 )
2026-07-06 13:38:33 -07:00
Dallin Romney
19491fe34c
Revert "fix(qa): keep smoke profile on one channel ( #101173 )" ( #101184 )
...
This reverts commit b773f7981a .
2026-07-06 13:29:07 -07:00
Dallin Romney
b773f7981a
fix(qa): keep smoke profile on one channel ( #101173 )
2026-07-06 13:26:58 -07:00
Peter Steinberger
b05001a68b
fix(android): prevent native channel notification duplicates ( #101170 )
2026-07-06 21:12:08 +01:00
Peter Steinberger
38746af071
feat(gateway): let write-scope operators manage chat session organization ( #100964 )
...
sessions.patch becomes a params-aware dynamic-scope method: operator.write
now authorizes patches that touch only user-level chat-organization fields
(label, category, pinned, archived, unread); every other field, mixed
patches, and unknown keys keep requiring operator.admin (fail closed).
This unblocks the session controls shipped in #100814 for the Android app,
whose bounded operator session intentionally never requests operator.admin.
Also: session list ordering gains a deterministic key tiebreaker for equal
pinnedAt/updatedAt (stable offset paging and prompt-cache friendliness), a
user-assigned label now beats stored channel-derived display names in the
row projection so renames survive refreshes, and subagent spawn pins its
gateway calls to admin via the params-aware least-privilege resolver
instead of the static admin-only method check (#59428 contract preserved).
Refs #100712
2026-07-06 21:08:26 +01:00
Dallin Romney
66b4dcf184
chore(docker): execute Compose and package artifact proofs ( #101045 )
...
* test(docker): prove Compose and package artifacts
* test(docker): use bounded container cleanup
* test(docker): bound package proof launch
* test(qa): keep Docker artifact proofs release-only
* test(docker): simplify artifact proof names
* test(docker): satisfy identity writer lint
2026-07-06 13:05:34 -07:00
Dallin Romney
2f7299eaa5
test(qa): add provider runtime evidence ( #101051 )
2026-07-06 13:01:32 -07:00
Peter Steinberger
80537c1ba4
feat(macos): load provider catalog during AI onboarding ( #101132 )
...
* feat(macos): load onboarding providers from gateway
* test(crestodian): widen setup config mock
* fix(crestodian): satisfy onboarding lint gate
* chore(macos): refresh onboarding localization inventory
* test(plugins): cover guided Copilot secret metadata
2026-07-06 20:57:56 +01:00
Peter Steinberger
3accc99b43
fix(agents): handle find subprocess stream failures ( #101158 )
...
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
2026-07-06 20:56:36 +01:00
ANIRUDDHA ADAK
1d375c31da
test(browser): replace broad win32 skip with dynamic directory symlink check ( #90365 )
...
* test(browser): replace broad win32 skip with dynamic directory symlink check
* fix(browser): refine directory symlink probe to ensure cleanup and remove random string usage
* test(browser): scope symlink capability checks to the case
---------
Co-authored-by: Aniruddha Adak <aniruddhaadak80@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 20:52:02 +01:00
mushuiyu886
8f7d0a36f9
fix(browser): bound client fetch success JSON reads ( #100889 )
...
* fix(browser): bound client fetch success JSON reads
* fix(browser): preserve supported response body sizes
* docs(changelog): note browser response bounds
* chore: keep release changelog owner-only
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 20:48:07 +01:00
Vincent Koc
076273a43b
refactor(ui): localize internal type exports ( #101135 )
2026-07-06 12:44:31 -07:00
xingzhou
565097fc10
fix(media-understanding): video auto-selection runs without a model ( #99791 )
...
* fix: require video media provider models
* fix video media test typing and skip coverage
* fix(media-understanding): preserve self-defaulting video providers
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-06 12:42:01 -07:00
Vincent Koc
e75223286d
fix(qa): require live channel driver for access-gate scenarios
2026-07-06 21:34:27 +02:00
Peter Steinberger
e9464313b7
feat(ui): polish sidebar rail and hide disabled Workboard nav ( #101123 )
2026-07-06 20:31:57 +01:00
pash-openai
806a116f9d
Let owner-operated Codex agents use connected account apps ( #100973 )
...
* Allow connected Codex account apps
* Preserve explicit plugin app policy
* Refresh Codex documentation map
* Unify connected apps with Codex plugin policy
* Format Codex configuration reference
2026-07-06 12:31:45 -07:00
Peter Steinberger
2638113c68
feat(android): add Listen action speaking assistant messages via gateway TTS ( #100772 )
...
* docs(android): document the chat Listen action
* feat(android): add Listen action for assistant messages
2026-07-06 20:30:54 +01:00
Peter Steinberger
36b733bf5c
feat(ios): pair multiple gateways and switch between them without re-pairing ( #100948 )
...
* feat(ios): multi-gateway registry, per-gateway credentials, and switching
* fix(ios): harden multi-gateway state isolation
2026-07-06 20:29:02 +01:00
Peter Steinberger
f80704e19d
docs(changelog): credit small bugfix batch ( #101128 )
2026-07-06 20:19:55 +01:00
weiqinl
e938461aa2
fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING ( #94736 )
...
* fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING
Makes the Discord message finalizer respect user-configured
doneHoldMs/errorHoldMs instead of always using hardcoded
DEFAULT_TIMING values. Brings Discord to parity with Telegram
and Slack which already use configured timing.
Fixes #78431
* test(discord): strengthen configured-timing regression with old-default assertion
Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before
advancing to the configured 2000ms hold, so the test fails against the
old hardcoded-default behavior. Add a matching errorHoldMs regression
test using failedCounts to drive the error terminal path.
Address ClawSweeper [P2] review finding on #94736 : the previous test
advanced straight to 2000ms and would pass without the runtime fix
because main already removes the done reaction at 1500ms.
* refactor(discord): unify status reaction timing proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 12:18:40 -07:00
Dallin Romney
e3671e0980
refactor(qa): canonicalize channel command scenarios ( #101080 )
...
* test(qa): migrate channel command scenarios
* test(qa): distinguish portable command headings
* test(qa): preserve canonical scenario ownership
2026-07-06 12:18:06 -07:00
Mark
db38127c22
[codex] Allow reply_payload_sending to add portable buttons ( #98922 )
...
* fix(telegram): retry plugin callback submit text
* fix(telegram): harden plugin callback submit text
* fix(telegram): preserve plugin callback submit semantics
* fix(telegram): release callback dedupe after submit failure
* fix(telegram): settle skipped plugin callback submissions
* style(telegram): format public API exports
* chore: leave changelog to release generation
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 20:17:41 +01:00
NianJiu
06efc2ae41
fix(browser): navigate works with CDP hostname allowlist ( #100986 )
...
* fix(browser): allow CDP host through hostname allowlist
* test(browser): prove CDP grants stay control-only
* docs(changelog): note remote browser CDP policy fix
* fix(browser): honor restrictive CDP host policy
* chore: keep release changelog owner-only
* fix(browser): align profile CDP creation policy
* fix(browser): keep remote CDP policy explicit
* test(browser): prove Playwright control allowlist isolation
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 20:11:52 +01:00
cxbAsDev
4d1ed548f4
fix(infra): wrap sha256File stream errors with context instead of leaking raw rejects ( #101085 )
...
* fix(infra): wrap sha256File stream errors with context instead of leaking raw rejects
* test(infra): prove sha256 stream error context
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-06 12:09:56 -07:00
Peter Steinberger
912af0a56f
fix(gateway): keep N-1 nodes manageable during upgrades ( #101109 )
...
* fix(gateway): allow N-1 node protocol maintenance
* docs: refresh generated map for node upgrade guide
2026-07-06 20:01:20 +01:00
Vincent Koc
2f89de8165
fix(codex): preserve yielded native subagent delivery
2026-07-06 11:58:00 -07:00
Vincent Koc
70add7d31e
fix(android): restore lint validation ( #101081 )
2026-07-06 11:57:28 -07:00
github-actions[bot]
01465340f6
chore(i18n): refresh native locales
2026-07-06 18:53:27 +00:00
Peter Steinberger
2723628dd9
perf(test): unit-test crabbox provider aliases
2026-07-06 14:52:53 -04:00
github-actions[bot]
a7c4a0471d
chore(ui): refresh control ui locales
2026-07-06 18:52:14 +00:00
Dallin Romney
627f6988a0
test(qa): migrate restart and policy scenarios to yaml ( #101063 )
2026-07-06 11:50:16 -07:00
Ben.Li
afcc93bfc7
fix(cli): keep UTF-8 log tails valid ( #101029 )
...
* fix(cli): keep UTF-8 log tails valid
* fix(cli): share UTF-8-safe byte tails
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 19:47:22 +01:00