Commit Graph

4525 Commits

Author SHA1 Message Date
Peter Steinberger a94e1c8d8b refactor(reply): simplify task-owned typing refresh (#116770)
* refactor(reply): simplify task-owned typing refresh

* chore(format): restore autonomous sweep skill formatting

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 03:48:21 -07:00
civil f943a94a33 fix(agents): preserve thinking for runtime-selected Ollama models (#116584)
* fix(agents): hydrate catalog for thinking validation

* test(agents): type runtime catalog fixture

* test: align runtime catalog mocks with thinking hydration

* fix(cron): preserve explicit-off catalog path

* test(cron): type Ollama thinking defaults

* docs(changelog): note Ollama fallback thinking fix

* fix(cron): recompute fallback thinking

* chore(changelog): remove release-owned entry

* fix(cron): keep thinking catalog helper private

* test(cron): align executor fixtures with thinking catalog

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 17:53:05 +08:00
Peter Steinberger 1f578f0e65 fix(telegram): validate native queue arguments before fallback (#116726)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 02:45:15 -07:00
Peter Steinberger f03dc9785e fix(telegram): keep typing alive during active steered tasks (#116721) 2026-07-31 02:14:19 -07:00
Pavan Kumar Gondhi 9018b02f14 fix: keep owner-only tools out of non-owner skill commands [AI] (#116532)
* fix: enforce owner tools in skill dispatch

* fix: type skill dispatch policy layers
2026-07-31 13:41:20 +05:30
Yuval Dinodia 589a914328 fix(session): preserve reset message payloads (#116195)
* fix(session): preserve reset message payloads

Use the raw command body when it directly matches a reset trigger so code, logs, bracketed text, and line breaks reach the new session intact. Keep structural normalization only for prefixed messages that require it to match.

* fix(session): anchor reset payloads to original input

* fix(session): anchor reset parsing to inbound projections

* fix(session): keep reset result type internal

* test(qa): prove reset payload preservation

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 15:34:23 +08:00
Ayaan Zaidi c2c4f0b6b7 fix(telegram): keep queued tool progress in one message (#116685)
* fix(telegram): keep queued tool progress in one message

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-31 15:40:21 +09:00
Papilionidae 9bef0455ba fix(agents): preserve locked session model routes
Preserve owner-locked provider/model routes across command and auto-reply selection. Unlocked sessions continue through normal visibility, repair, and normalization policy.
2026-07-31 09:05:31 +09:00
Sarah Fortune 138be7fd86 fix(auto-reply): keep explicit NO_REPLY silent (#116548)
* fix(auto-reply): keep NO_REPLY silent

* test(auto-reply): cover NO_REPLY across directed turns

* fix(auto-reply): carry deliberate silence into dispatch

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-07-30 17:04:09 -06:00
Jason (Json) dc34274397 fix(outbound): recognize current-source message-tool sends (#116560)
* fix(discord): recognize adopted thread sends

* fix(discord): require successful adopted thread delivery

* fix(outbound): mark automatic current-source sends

* test(gateway): cover automatic source projection
2026-07-30 16:29:55 -06:00
Vincent Koc e92e02ad7d fix(agents): index retained subagent descendant reads (#116449) 2026-07-31 02:36:20 +08:00
keshavbotagent 4dc90937a0 fix(session): isolate memory flush lifecycle from parent recovery (#116198)
* fix(session): isolate memory flush lifecycle

* fix(session): fence newly introduced recovery cycles

* test(qa): prove memory flush preserves parent lifecycle

* test(session): align recovery fixtures with internal state
2026-07-30 11:31:23 -07:00
Omar Shahine 6f9da38401 feat(agents): rename model- and user-facing scheduler strings to automations (#114852)
* fix(agents): teach canonical automations tool in fallback guidance and reuse the identity source

Review follow-ups: the structured-list fallback still taught models the cron
tool; the cron-scope test echoed its own stub; MCP serve allowlist and voice
confirmation hardcoded the name instead of the canonical constant.

* fix(mcp): place automations identity import outside the header comment

* feat(agents): rename model- and user-facing scheduler strings to automations

Rewrites every string the model or user sees that names the feature:
tool label and terminal presentation, display-summary preset, subagents
catalog description, heartbeat guidance, subagent prompt, session labels
(Cron: -> Automation:), default job name, unattended-run preamble, delivery
awareness text, task-ledger progress summary, failure alerts, auto-disable
notification, model preflight diagnostics, validation errors, and the
shipped workspace AGENTS.md template. Adds a system-prompt backstop rule on
the automations tool line: the feature is called automations, never cron.

Cron stays only where it names the schedule syntax ({kind:"cron"}, cron
expressions), config keys (cron.triggers.enabled), RPC method names, and
session-key namespaces. Test fixtures with legacy labels are kept as
stored-data coverage. Part of RFC openclaw/rfcs#50 Phase 1 (PR B).

* docs(templates): keep workspace template on the live docs anchor until the docs PR renames it

* fix(cron): rename remaining failure-notification producers and stale test expectations

Codex review follow-ups: the per-run failure notification (server-cron-
notifications) and the doctor legacy-notify advisory still said Cron job;
failure-alert and incomplete-turn suites still asserted the old wording.

* chore(plugin-sdk): re-emit plugin-state test runtime dts

CI's extension-boundary runner holds stale tsgo incremental state whose
cached plugin-state-test-runtime.d.ts predates the keyed-store re-exports;
the freshness stamp validates it and reruns reuse the same sticky disk.
Touching the module forces incremental emit to regenerate the declaration.
Fresh builds of this head (local exact CI command and a forced Testbox
rebuild) both emit the exports correctly.

* fix(agents): rename residual model- and operator-facing cron prose

Found in combined dev-gateway E2E: fallback tool line still told models the
scheduler tool is cron; heartbeat scratch description, cron model preflight
rejection, doctor and Claw prose still said cron jobs.

* fix(agents): finish model-facing scheduler strings flagged in review

Loop work-order prompts, subagents tool description, cron-tool write errors,
and the headless exec denial label now say automations; loop builders covered
by prompt assertions; snapshots regenerated.

* chore(agents): refresh generated baselines and live docs anchor after rebase onto main

* fix(agents): rename new main-side cron tool error expectations to automations

* fix(gateway): rename main-side cron notification test expectations to automations

* chore(agents): apply review moves - automations commands in workspace template, drop unrelated sdk comment

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-30 08:54:55 -07:00
Ayaan Zaidi 2ca340fa0a feat(agents): report CLI command outcomes in channel progress
The CLI candidate bridged tool events itself: it forwarded starts without a toolCallId and returned early on the result phase, so a Claude CLI turn produced progress lines with no identity and no terminal outcome. A failed command rendered exactly like one that succeeded.

The bridge now forwards the call id and projects results through the same buildCommandOutputFromToolResultEvent the embedded path uses. Two gaps had to close for that projection to see a CLI result: it only read structured records, where CLI backends report raw text plus is_error, and it needed a title or the terminal line would describe the output instead of the command, so the runner carries the started args onto its result event. A bare result with no content stays excluded, since runners that report an outcome send a separate command_output event.

Modeled on the sibling t3code Claude adapter, which correlates each tool_result back to its in-flight tool by tool_use_id and emits a failed/completed status. Proven live on the real Claude CLI backend: two calls, two lines updating in place, the failing one marked failed.
2026-07-30 21:31:37 +09:00
Peter Steinberger 7fa95e2656 feat(ui): add composable skill references (#116330)
* feat(ui): add composable skill references

* fix(ui): align skill reference CI contracts

* fix(ui): scope skill references to WebChat
2026-07-30 04:07:02 -07:00
Ayaan Zaidi c4b82609b7 fix(agents): compare shell tool names case-insensitively and stop re-parsing tool labels
Progress-draft lines recovered their detail by string-slicing the label formatToolAggregate had just rendered, and three sites decided "is this a shell tool?" against lowercase spellings only. The Claude CLI sends "Bash", so those checks missed, the slice returned nothing, and every CLI tool call rendered a line with no detail: Telegram printed the icon twice and the tool-summary payload could no longer merge, leaving a second id-less line per call.

formatToolAggregateParts now returns the label with the detail it composed, so a line cannot disagree with its own text, and one predicate owns the shell question across all four sites. Proven live on the Claude CLI backend: two lines with a doubled icon became one.
2026-07-30 19:52:08 +09:00
Huang Wanjia ef5be76394 feat(reply): annotate recent history images (#100866)
* feat(reply): annotate recent history images

* fix(reply): describe bounded history image positions

---------

Co-authored-by: martin <huangtongxuedev@outlook.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 16:24:09 +08:00
Eden 9c6e06b557 fix(auto-reply): deliver ingress-retried messages after their queued run is dropped (#115891)
* fix(auto-reply): deliver ingress-retried messages after their queued run is dropped

* fix(auto-reply): key queued dedupe release by adoption lifecycle

Overflow-summary compaction clones a queued run onto a new object, so a
release keyed by the run object missed runs completed via their clone and
the ingress retry stayed suppressed on the summarize drop policy. The
adoption lifecycle reference survives cloning and already keys admission
state, so it is the identity the release must use.

* fix(auto-reply): guard queued dedupe ownership

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 11:19:01 +08:00
Vincent Koc 1f56e2da21 fix(messages): validate configured envelope timezone (#116103)
* fix(messages): validate configured envelope timezone

* fix(messages): preserve UTC envelope rendering

* fix(messages): preserve local fallback mode
2026-07-30 07:18:13 +08:00
Vincent Koc 8530edb057 fix(plugins): deliver subagent completion to current requester (#116091)
* fix(plugins): deliver subagent completion to requester

Co-authored-by: ambitioncn <36698505+ambitioncn@users.noreply.github.com>

* test(qa): register current-requester plugin fixture

* fix(plugins): scope requester authority per hook

---------

Co-authored-by: ambitioncn <36698505+ambitioncn@users.noreply.github.com>
2026-07-30 07:06:17 +08:00
Vincent Koc 54e273e695 fix(agents): keep date reasoning current in long-running sessions (#116090)
* fix(agents): ground date reasoning below cache boundary

Co-authored-by: Deepak Jain <406777+deepujain@users.noreply.github.com>

* docs: refresh temporal context map

* chore: leave release notes to release curation

* test(agents): keep compaction date mock complete

---------

Co-authored-by: Deepak Jain <406777+deepujain@users.noreply.github.com>
2026-07-29 22:12:47 +00:00
Frank Yang 511ecd9dba fix(plugins): expose inbound message id before dispatch (#112359)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:26:28 +08:00
salvormallow 73b5e7aab4 fix(hooks): save memory on automatic session rollover (#61675)
* fix(hooks): persist memory on session rollover

Co-authored-by: salvormallow <15044561+salvormallow@users.noreply.github.com>

* fix(hooks): persist memory on automatic session reset

* fix(hooks): keep auto-reset reason internal

* fix(hooks): retain auto-reset memory admission

* fix(hooks): make session rollover return explicit

* test(hooks): track session memory temp dirs

* fix(hooks): satisfy session memory return contract

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:13:26 +08:00
Kevin Lin ec32f181a1 fix: Slack replies recover after gateway startup replay (#115991)
* fix: diagnose prepared model owner config drift

* fix(gateway): bind replies to published model owner

* fix(gateway): bind durable replay to published owner

* test: preserve requested workspace in reply mock
2026-07-29 12:25:45 -07:00
Peter Steinberger 5bfc65d7f4 refactor: remove 3,543 lines of redundant runtime and tests (#115961)
* refactor: remove 3,543 lines of redundant runtime and tests

* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Peter Steinberger 4c4aa2ed12 feat(gateway): manage audio and video attachments end to end (#115842)
* feat(gateway): manage audio and video attachments

* feat(gateway): preserve generated media metadata

* fix(gateway): align seeded managed media

* fix(gateway): scope pending media trust by URL

* fix(gateway): split managed media by trust

* fix(gateway): require terminal media trust unanimity

* fix(gateway): align managed media metadata types

* fix(gateway): refresh managed media contracts

* chore(ci): model managed media test seams

* test(sessions): expect canonical media kinds
2026-07-29 07:27:36 -04:00
ACD_RD4駱俊馳 e7f0fdfd9b fix: CJK replies are silently dropped instead of recovered when the model skips message(action=send) (#115556)
* fix(auto-reply): count CJK sentence terminators in stranded private-final detection

* fix(auto-reply): compare private-final substance thresholds with the CJK-aware estimator

* fix(auto-reply): detect CJK sentence boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:23:33 -04:00
Peter Steinberger 20668eed03 fix(memory): quarantine writes from tainted agent turns (#115818)
* feat(memory): taint writes after network tools

* fix(memory): keep provenance mutations recoverable

* fix(memory): roll back failed provenance writes

* fix(memory): serialize provenance mutations

* docs(memory): explain flush provenance boundary

* refactor(memory): share provenance mutation wrapper

* docs(memory): clarify flush provenance fallback

* fix(memory): canonicalize provenance paths
2026-07-29 06:02:06 -04:00
Peter Steinberger a37a5a6575 feat(agents): add per-session tool overrides (#115785)
* feat(agents): per-session tool overrides (mcp/skills/web-search)

* test(agents): use tracked MCP temp dirs
2026-07-29 05:13:56 -04:00
Peter Steinberger c402688894 feat(media): probe duration and dimensions for playback metadata (#115728)
* feat(media): probe playback metadata

* fix(media): satisfy CI gates

* fix(media): satisfy lint rules
2026-07-29 04:52:17 -04:00
Peter Lee 10c20738f6 fix(hooks): resolve inbound claim conversation once (#115491)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 16:38:51 +08:00
Peter Steinberger c5d0b7dd39 refactor: retire legacy provider and secret paths (#115655)
* refactor: retire legacy provider and secret paths

* fix: remove stale cache retention import

* test: remove retired secret marker fallback
2026-07-29 04:36:20 -04:00
Edward Abrams 6c000dc696 fix(discord): keep tool rows under verbose progress (#111947)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 04:26:28 -04:00
Peter Steinberger eee5e029e3 feat(agents): persist last-used session model as the agent default (#115717)
* feat(agents): persist last-used session model as the agent default

* fix(agents): gate sticky model persistence on admin authority and make it best-effort

* fix(agents): keep sticky model helper internal

* fix(agents): satisfy sticky model lint rules

* style(agents): format sticky model gateway test
2026-07-29 04:16:51 -04:00
Peter Steinberger 684ec3bcfc fix(reply): honor configured default agents during auto-reply (#115724) 2026-07-29 04:04:44 -04:00
Peter Steinberger c29d889b9c fix: prevent sustained inbound messages from starving delivery (#115682)
Fixes #104106

Reported-by: @masatohoshino (#104106)
2026-07-29 03:44:35 -04:00
Peter Steinberger 6ec84bc3bd fix(models): expose custom max and ultra reasoning tiers (#115690)
* fix(models): honor custom advanced reasoning levels

* fix(ci): restore code mode matrix boundaries
2026-07-29 03:33:30 -04:00
Vincent Koc dd3d1d1a8b fix(ui): hide pre-thread changes from session diffs (#115708)
* fix(ui): scope session diffs to thread changes

* docs: refresh generated map
2026-07-29 15:17:47 +08:00
Peter Steinberger ddd0b48673 refactor: remove 3,527 lines of runtime and test duplication (#115626)
* refactor: remove obsolete runtime and test duplication

* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Peter Steinberger 8fd49c84aa feat: make self-learning automatic by default (#115576)
* feat: make self-learning automatic by default

* fix: preserve capture authorization boundaries

* test: split autonomous capture coverage
2026-07-29 02:04:57 -04:00
Peter Steinberger a3a969be5d fix(cli): avoid duplicate commentary delivery (#115596) 2026-07-29 01:40:55 -04:00
Peter Steinberger a24c1ceb3a fix(channels): release inbound debounce at admission (#115603)
Track full dispatch completion separately for error handling and shutdown drain while allowing same-session follow-ups to steer active runs. Fixes #113180.

Co-authored-by: Taksh <takshkothari09@gmail.com>
2026-07-29 01:38:15 -04:00
Peter Steinberger 4e651a43f4 fix(compaction): apply host transcript byte guard to codex sessions (#115192) (#115514)
Co-authored-by: pcpilot-dev <pcpilot-dev@users.noreply.github.com>
2026-07-29 00:23:44 -04:00
Peter Steinberger 430c293ee0 refactor: remove duplicate provider and runtime code (#115529)
* refactor: remove duplicated runtime and provider code

* refactor: exclude unrelated browser test cleanup

* refactor: preserve canonical subagent cleanup ordering
2026-07-29 00:04:52 -04:00
Peter Steinberger 68b1ad8bc0 fix(heartbeat): filter acknowledged reasoning turns (#95796) (#115522) 2026-07-29 00:00:43 -04:00
Peter Steinberger c45daf7ea8 fix(cli): recover channel turns from expired sessions (#115513)
* fix(cli): clear stale channel session bindings

* fix(cli): scope media cleanup to admitted turn
2026-07-28 23:38:20 -04:00
Peter Steinberger c092ec437c refactor: remove duplicate runtime and plugin paths (#115483) 2026-07-28 22:06:04 -04:00
Peter Steinberger b436055611 fix(cli): preserve mid-turn text in durable replies (#115455)
* fix(cli): deliver commentary as durable replies

* test(cli): cover durable commentary subprocess
2026-07-28 21:02:34 -04:00
Vito Cappello fb8e1aa59d fix(auto-reply): prevent false no-reply fallbacks from routed and accepted turns (#115016)
* fix(auto-reply): observe routed reset hook replies
* fix(auto-reply): track settled route delivery
* fix(auto-reply): preserve reasoning route suppression
* fix(auto-reply): suppress fallback for accepted busy turns
* fix(auto-reply): preserve editable partial delivery ids
* test(auto-reply): align route delivery mock
* fix(auto-reply): preserve routed delivery semantics
* docs(auto-reply): clarify lost adoption ownership
* test(auto-reply): split routed delivery evidence cases
* fix(auto-reply): preserve ambiguous route sends
* fix(auto-reply): omit non-delivery sentinel ids

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-29 09:50:31 +09:00
Jason (Json) de5e09ac27 fix(gateway): bind source replies to run sessions (#115434) 2026-07-28 17:27:05 -06:00