73 Commits
Author SHA1 Message Date
fc30a6c67d fix(oc-path): reject oversized multibyte JSONC input (#104140)
* fix(oc-path): enforce JSONC byte limit for multibyte input

* fix(oc-path): surface JSONC size diagnostics in CLI

* fix(oc-path): classify oversized JSONC as parse error

* test(oc-path): cover JSONC byte cap boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 17:47:15 -07:00
07d97f6e8d fix(plugins): hide bundle commands when frontmatter uses on (#105013)
* fix(plugins): honor on frontmatter for bundle commands

* fix(plugins): honor bundle command invocation policy

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* test(plugins): tighten bundle command policy coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 00:18:16 +01:00
0f192e79d4 fix(parallel): reject invalid search counts (#105108)
* fix(parallel): reject invalid search counts

* fix(parallel): share strict count validation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 00:11:45 +01:00
1d999b817f fix(anthropic): reject invalid Claude session cursors (#104967)
* fix(anthropic): reject invalid Claude session cursors

* fix(anthropic): validate Claude session cursors exactly

* fix(anthropic): route cursor test through catalog provider

* fix(anthropic): validate Claude session cursors exactly

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* fix(anthropic): keep cursor limit private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 20:19:29 +01:00
e4a48157d1 fix(test): keep bounded child output UTF-8 safe (#109168)
* fix(test): keep bounded child output UTF-8 safe

* test: preserve incomplete child output tails

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:53:11 -07:00
f3e8164e7c fix(ci): keep boundary output tails UTF-8 safe (#109167)
* fix(ci): keep boundary output tails UTF-8 safe

* fix(ci): preserve split UTF-8 output tails

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 17:12:50 -07:00
ac3635b50c fix(qa-lab): keep child output UTF-8 safe when capped (#108156)
* fix(qa-lab): keep child output UTF-8 safe when capped

* fix(qa-lab): preserve uncapped malformed output

Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com>

* refactor(qa-lab): keep utf8 repair plugin-local

Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:35:42 -07:00
552fd224cf fix(opencode): reject output stream failures in session catalog (#108218)
* fix(opencode): reject output stream failures in session catalog

* test(opencode): format stream failure regression

* test(opencode): prove output pipe failure cleanup

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* test(opencode): satisfy pipe proof lint

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 04:57:28 -07:00
71bea81669 fix(cli-runner): keep output tails utf8 safe (#108355)
* fix(cli-runner): keep output tails utf8 safe

* fix(cli-runner): satisfy output tail byte narrowing

* test(cli-runner): format utf8 tail regression

* refactor(cli-runner): reuse UTF-8 tail helper

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 04:20:38 -07:00
b1e814f57a fix(docs): report malformed search JSON with CLI context (#108364)
* fix(docs): report malformed search JSON with CLI context

* test(docs): tighten malformed response assertion

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:51:52 -07:00
49410a2399 fix(proxy-capture): preserve small bodies with non-decimal content length (#108292)
* fix(proxy-capture): preserve small bodies with non-decimal content length

* fix(proxy-capture): align declared length guard

* fix(proxy-capture): preserve huge content lengths

* style(proxy-capture): format length guard

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 22:36:39 -07:00
4a1eedba54 fix(usage): count instant sessions in hourly metrics (#108160)
* fix(usage): count instant sessions in hourly metrics

* chore: rerun usage metrics CI

* refactor(usage): simplify positive-duration slicing

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 16:57:46 -07:00
4975cf75b4 fix(cron): reject oversized trigger script files before read (#108130)
* fix(cron): reject oversized trigger script files before read

* refactor(cron): stream bounded trigger scripts

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 03:12:21 -07:00
7440a1ae83 fix(file-transfer): reject oversized dir.fetch preflights (#106293)
* fix(file-transfer): reject oversized dir fetch preflights

* test(file-transfer): cover real oversized dir preflight

* test(file-transfer): wrap oversized preflight fixture

* test(file-transfer): cover preflight du fallback

* ci: restore max-lines baseline entry

* fix(file-transfer): make dir preflight size check authoritative

* ci: drop stale max-lines baseline restore

* test(file-transfer): gate tar-backed preflight cases

* fix(file-transfer): preserve preflight bounds and errors

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-14 22:14:08 -07:00
c94da0df6f fix(logs): preserve log tails across short reads (#105066)
* fix(logs): preserve log tails across short reads

* test(logging): track log-tail temp files

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 14:47:53 -07:00
04e523a73b fix(logbook): reject invalid 12-hour analysis clocks (#107191)
* fix(logbook): reject invalid meridiem clocks

* test(logbook): cover invalid meridiem card output

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 09:43:10 -07:00
qingminlongandGitHub 0e15a5d994 fix(pdf): reject unsafe page numbers before analysis (#105315)
* fix(pdf): reject unsafe page numbers before analysis

* test(pdf): bound unsafe page range regression
2026-07-12 19:38:55 -07:00
bf642ef287 fix(signal): surface daemon errors split across output chunks (#104152)
* fix(signal): preserve daemon log lines across chunks

* test(signal): cover split utf-8 daemon output

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 13:02:40 -07:00
2db82eb243 fix(sessions): derive list channels from agent keys (#104274)
* fix(sessions): derive list channels from agent keys

* refactor(sessions): reuse canonical channel parser

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 12:24:06 -07:00
qingminlongandGitHub 4ecc67678d fix(cli): reject malformed attach ttl values (#105103)
* fix(cli): reject malformed attach ttl values

* fix(cli): clarify attach ttl grammar
2026-07-12 17:44:44 +03:00
c59e24647c fix(agents): reject invalid goal token budgets (#104534)
* fix(agents): reject invalid goal token budgets

* test(agents): update goal assertion for session accessor

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 17:05:04 -07:00
qingminlongandGitHub 47751c117c fix(discord): bound ffmpeg stderr by bytes (#104230) 2026-07-11 12:23:32 -07:00
9000c9bfe3 fix(file-transfer): audit dir fetch archive size (#104536)
* fix(file-transfer): audit dir fetch archive size

* test(file-transfer): guard dir fetch audit archive test on Windows

* test(file-transfer): format dir fetch audit guard

* fix(file-transfer): verify directory archive audit metadata

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:50:51 -07:00
fdf5812817 fix(file-transfer): reject oversized inline file writes before node dispatch (#104556)
* fix(file-transfer): cap inline file write payloads

* fix(file-transfer): validate inline base64 before decoding

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:16:22 -07:00
qingminlongandGitHub f348b291bc fix(workboard): scope default positions by board (#104410) 2026-07-11 10:16:18 -07:00
183139f3ed fix(nodes): reject malformed media payloads when base64 is invalid (#104414)
* fix(nodes): reject malformed media base64 payloads

* fix(nodes): keep media base64 size preflight

* refactor(nodes): reuse shared base64 boundary

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* docs(changelog): note node media validation

* chore: leave changelog to release automation

* test(nodes): cover empty invalid media payloads

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:11:09 -07:00
834c146958 fix(browser): reject hex click coordinates in act route (#104440)
* fix(browser): reject hex click coordinates in act route

* refactor(browser): use route parser for click coordinates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 09:56:09 -07:00
a66d2959e9 fix(onboard): wait for gateway warnings before installing service (#104173)
* fix(onboard): wait for gateway warnings before installing service

* fix(onboard): show gateway warnings after plan errors

* refactor(onboard): drain install warnings from queue

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 05:49:34 -07:00
02560243f3 fix(agents): truncate multibyte middleware details at byte limit (#104156)
* fix(agents): bound multibyte middleware details by bytes

* refactor(agents): bound middleware detail byte sizing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 05:39:50 -07:00
3ed8143495 fix(gateway): cap history when numeric limit is huge (#104263)
* fix(gateway): cap oversized history limits

* refactor(gateway): simplify oversized history limits

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 05:24:54 -07:00
08da0d3861 fix(code-mode): report UTF-8 API file byte counts (#104244)
* fix(code-mode): report UTF-8 API file byte counts

* fix(code-mode): report UTF-8 API file byte counts

* chore(changelog): keep release notes release-owned

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 05:10:46 -07:00
qingminlongandGitHub b322a8e311 fix(gateway): stop watch result after invalid body (#104293) 2026-07-11 03:57:07 -07:00
qingminlongandGitHub cd7a21787f fix(computer): reject malformed numeric input before node actions (#103642) 2026-07-10 20:50:26 -07:00
eccd4f02f8 fix(skill-workshop): reject invalid proposal list limits (#103496)
* fix(skill-workshop): reject invalid proposal list limits

* refactor(skill-workshop): validate list params before storage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 18:26:12 -07:00
qingminlongandGitHub 5c77724ff8 fix(canvas): validate A2UI JSONL centrally (#103713) 2026-07-11 01:48:37 +01:00
6e0d590bd8 fix(agent-core): avoid a crash when empty output has a negative line limit (#103425)
* fix(agent-core): avoid empty truncation crash

* refactor(agent-core): simplify empty truncation handling

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-11 01:41:00 +01:00
4f1f7c6fb0 fix(nodes): resolve Unicode browser node names when configured by display name (#103548)
* fix-nodes-unicode-browser-node-names

* fix(nodes): preserve compact browser node selectors

* fix(nodes): normalize unicode node names canonically

* fix(nodes): scope compact browser selectors

* fix(nodes): preserve meaningful unicode marks

* chore: leave changelog updates to release automation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 23:32:28 +01:00
3a64889d83 fix(agent-core): report correct JSONL entry line after blank rows (#103645)
* fix(agent-core): report jsonl entry physical line numbers

* fix(agent-core): preserve physical JSONL line numbers

* test(agent-core): keep JSONL cleanup lint-safe

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 18:12:56 +01:00
1d3d743b24 fix(grep): stop searches when canceled during tool startup (#103709)
* fix(grep): stop before ripgrep when aborted during setup

* fix(grep): check cancellation before ripgrep spawn

* fix(grep): make cancellation own process lifecycle

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

* test(grep): use bound lifecycle assertions

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 18:01:59 +01:00
bf02b611eb fix(sessions): reject malformed history offsets (#103594)
* fix(sessions): reject malformed history offsets

* test(sessions): prove invalid offsets stop before reads

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 18:00:31 +01:00
cbfa7d4aa7 fix(audit): audit filters select wrong intervals when dates are invalid (#103433)
* fix(audit): reject invalid ISO timestamps in filters

* test(audit): cover strict date filter semantics

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 17:14:26 +01:00
2fd0f88f62 fix: ignore invalid Retry-After HTTP dates (#102987)
* fix: ignore invalid Retry-After HTTP dates

* fix(ai): centralize strict Retry-After dates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-10 04:02:44 +01:00
3f68e1b5e3 fix(media): accept matching repeated content lengths (#102939)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 02:03:30 +01:00
e251bc4c2f fix(agent-core): keep file info basename on Windows paths (#102813)
* fix(agent-core): keep file info basename on Windows paths

* fix(agent-core): use platform path basenames

* chore: sync PR branch before changelog

* docs(changelog): credit Windows file metadata fix

* fix(agent-core): use platform path basenames

* test(agent-core): isolate Windows shell discovery

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 23:33:28 +01:00
9a60629693 fix(web_fetch): preserve content length when output is truncated (#102978)
* fix(web_fetch): preserve content length when output is truncated

* fix(web_fetch): preserve provider raw length

* test(web-fetch): cover wrapper-overhead source length

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 23:02:50 +01:00
56096eb859 fix(browser): report malformed relay CDP frames (#102070)
* fix(browser): report malformed relay CDP frames

* refactor(browser): streamline relay frame validation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 12:00:38 +01:00
2f8f8ae1ae fix(read): reject non-positive offsets (#102481)
* fix(read): reject non-positive offsets

* fix(read): validate offsets before filesystem access

Co-authored-by: qingminlong <qing.minlong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 11:59:29 +01:00
6cd94f6049 fix(web): mark partial response reads when streams fail (#102550)
* fix(web): mark partial response reads when streams fail

* fix(web): report partial stream bytes accurately

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 11:58:56 +01:00
qingminlongandGitHub c86fe21cad fix(browser): keep UTF-8 stderr tails valid (#102543) 2026-07-09 10:51:52 +01:00
5a3422ea8d fix(schema): resolve large local refs in schema arrays (#102195)
* fix(schema): resolve large local refs in schema arrays

* fix(schema): type large local ref fixture

* style(schema): format large local ref regression

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:51:30 +01:00
a5f5282816 fix(scripts): report startup help stream errors when pipes fail (#102436)
* fix(scripts): fail startup help rendering on stream errors

* fix(scripts): preserve startup render failure provenance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:43:40 +01:00
qingminlongandGitHub b40e5b974f fix(cli): clarify nodes invoke params errors (#101838) 2026-07-09 08:33:47 +01:00
c3d567db95 fix(memory): snippets split emoji when truncated (#102478)
* fix(memory): snippets split emoji when truncated

* refactor(memory): reuse shared UTF-16 truncation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 08:27:42 +01:00
b20b02a476 fix(tool-payload): enforce UTF-8 byte limits for serialized payloads (#102450)
* fix(tool-payload): reject oversized XML payload bytes

* fix(tools): enforce serialized payload byte limits

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 07:47:23 +01:00
d6f097b3de fix(agents): normalize surrogate cache fingerprints (#101009)
* fix(agents): normalize surrogate cache fingerprints

* fix(agents): reuse provider surrogate sanitizer

* chore(agents): keep transport imports grouped

* fix(agents): avoid runtime import for surrogate sanitizer

* fix(agents): scope surrogate cache normalization

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:06:56 +01:00
ae4a1e236f fix(pdf): reject fractional page selections (#99399)
* fix(pdf): reject fractional page selections

* chore: refresh pdf fractional page checks

* chore: refresh failed checkout checks

* test(pdf): prove fractional pages fail at tool boundary

* test(pdf): cover mixed fractional page ranges

* fix(pdf): validate page selections before loading

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 06:46:32 +01:00
6a62a04f59 fix(android): synchronize realtime tool completions (#100049)
* fix(android): synchronize realtime tool completions

* refactor(android): unify realtime tool completion state

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:49:21 +01:00
qingminlongandGitHub 9b78ec8d6f fix: keep subagent truncation within max length (#100013) 2026-07-04 18:48:23 -07:00
3adfaf0394 fix: detect localized Windows netstat listeners (#100012)
* fix: parse localized Windows netstat listeners

* fix: share Windows netstat PID fallback

* test: relax native command QA timeout

* test: wait for native stop cleanup before recovery

* fix(windows): harden localized netstat parsing

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-04 16:35:29 -07:00
qingminlongandGitHub b30278895c fix: roll rounded durations into seconds (#100006)
Summary:
- The branch updates the shared duration helpers to branch on rounded millisecond values and adds 999.6ms expectations for compact, human, and precise duration output.
- PR surface: Source +3, Tests +2. Total +5 across 2 files.
- Reproducibility: yes. Current main source branches on raw `ms < 1000` before rounding in all three helpers, and the linked issue plus prior review include direct module proof that 999.6ms returned `1000ms`.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 9e06973112.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9e06973112
Review: https://github.com/openclaw/openclaw/pull/100006#issuecomment-4882739452

Co-authored-by: qingminlong <qing.minlong@xydigit.com>
Approved-by: takhoffman
2026-07-04 20:34:57 +00:00
bd2740fedc fix(slack): preserve time colons in interactive labels (#99877)
* fix(slack): preserve time colons in button labels

* fix(slack): preserve clock labels in interactive replies

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 03:14:13 -07:00
f5c700bc4b fix(ui): keep landscape composer compact (#98683)
* fix(ui): keep landscape composer compact

* test(ui): cover landscape composer adjunct scroll

* fix(ui): keep active slash option visible

* fix(ui): constrain slash menu keyboard scroll

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 05:00:43 -07:00
qingminlongandGitHub 3e2d373d43 fix(cli): reject unsafe sessions tail counts (#99398)
* fix(cli): reject unsafe sessions tail counts

* fix(cli): reuse strict tail count parser
2026-07-03 03:53:35 -07:00
qingminlongandGitHub c170e91529 fix(terminal): preserve sibling home-prefix paths (#98876)
* fix(terminal): preserve sibling home-prefix paths

* fix(terminal): avoid embedded home path rewrites

* fix(terminal): preserve punctuated sibling paths

* fix(terminal): tighten home path boundaries
2026-07-02 01:11:51 -07:00
qingminlongandGitHub a741956448 fix(mattermost): paginate peer directory members (#98877) 2026-07-02 00:40:24 -07:00
qingminlongandGitHub 40e02a418c fix(wizard): reject loose gateway port input (#98689)
* fix(wizard): reject loose gateway port input

* fix(wizard): reuse shared gateway port parser
2026-07-01 18:06:21 -07:00
qingminlongandGitHub aa91c9d4a9 fix(memory-wiki): preserve notes after transient page reads (#98360) 2026-07-01 02:55:05 -07:00
qingminlongandGitHub 0d275c8c9d fix(android): clarify gateway auth recovery states (#98094)
* fix(android): clarify gateway auth recovery states

* fix(android): preserve retryable pairing recovery copy

* fix(android): prefer auth recovery detail before stale address

* fix(android): show auth recovery while approval loads
2026-06-30 17:53:51 -07:00
qingminlongandGitHub e2dd5a0309 fix(sessions): avoid cross-cwd recent resumes (#97785) 2026-06-30 17:46:40 -07:00
qingminlongandGitHub 1a1587963a fix: preserve cron sessions with stale transcript metadata (#97495)
* fix: repair stale session cleanup transcript metadata

* fix: report repaired session cleanup metadata
2026-06-28 12:29:37 -07:00
qingminlongandGitHub 9f66f61d05 docs: add scripts directory index (#97250) 2026-06-28 12:19:30 -07:00
qingminlongandGitHub 5e1f4c1073 fix(memory): stop light dreaming from restaging stale summaries (#97446)
* fix(memory): stop restaging stale light dreams

* fix(memory): preserve cross-day light freshness
2026-06-28 11:58:24 -07:00
a10add7531 fix(models): mark local Ollama rows available (#97491)
* fix(models): mark local Ollama rows available

* fix(models): mark local Ollama rows available

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-06-28 10:53:15 -07:00