Skip to content

Comments

sync fork w/upstream#1

Merged
dgarson merged 39 commits intodgarson:mainfrom
openclaw:main
Jan 27, 2026
Merged

sync fork w/upstream#1
dgarson merged 39 commits intodgarson:mainfrom
openclaw:main

Conversation

@dgarson
Copy link
Owner

@dgarson dgarson commented Jan 27, 2026

No description provided.

vignesh07 and others added 30 commits January 26, 2026 10:05
feat(config): tools.alsoAllow additive allowlist
* docs(install): add migration guide for moving to a new machine

* chore(changelog): mention migration guide docs

---------

Co-authored-by: Pocket Clawd <[email protected]>
* feat(telegram): add silent message option (disable_notification)

Add support for sending Telegram messages silently without notification
sound via the `silent` parameter on the message tool.

Changes:
- Add `silent` boolean to message tool schema
- Extract and pass `silent` through telegram plugin
- Add `disable_notification: true` to Telegram API calls
- Add `--silent` flag to CLI `message send` command
- Add unit test for silent flag

Closes #2249

AI-assisted (Claude) - fully tested with unit tests + manual Telegram testing

* feat(telegram): add silent send option (#2382) (thanks @Suksham-sharma)

---------

Co-authored-by: Pocket Clawd <[email protected]>
… previews

When users send iMessages containing URLs, BlueBubbles sends separate
webhook events for the text message and the URL balloon/link preview.
This caused Clawdbot to receive them as separate queued messages.

This fix adds inbound debouncing (following the pattern from WhatsApp/MS Teams):

- Uses the existing createInboundDebouncer utility from plugin-sdk
- Adds debounceMs config option to BlueBubblesAccountConfig (default: 500ms)
- Routes inbound messages through debouncer before processing
- Combines messages from same sender/chat within the debounce window
- Handles URLBalloonProvider messages by coalescing with preceding text
- Skips debouncing for messages with attachments or control commands

Config example:
  channels.bluebubbles.debounceMs: 500  # milliseconds (0 to disable)

Fixes inbound URL message splitting issue.
…e error logging

This commit removes the URL balloon message handling logic from the monitor, simplifying the message processing flow. Additionally, it enhances error logging by including the account ID in the error messages for better traceability.
- Add isHeartbeat to AgentRunContext to track heartbeat runs
- Pass isHeartbeat flag through agent runner execution
- Suppress webchat broadcast (deltas + final) for heartbeat runs when showOk is false
- Webchat uses channels.defaults.heartbeat settings (no per-channel config)
- Default behavior: hide HEARTBEAT_OK from webchat (matches other channels)

This allows users to control whether heartbeat responses appear in
the webchat UI via channels.defaults.heartbeat.showOk (defaults to false).
The async setTimeout callback re-threw errors without a .catch() handler,
causing unhandled promise rejections that crashed the gateway. The error
is already logged by the heartbeat runner and a retry is scheduled, so
the re-throw served no purpose.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
robbyczgw-cla and others added 9 commits January 26, 2026 17:22
Replace raw error messages with generic 'Internal Server Error' to prevent
leaking internal error details to unauthenticated HTTP clients.

Fixes #2383
Add evictOldHistoryKeys() function that removes oldest keys when the
history map exceeds MAX_HISTORY_KEYS (1000). Called automatically in
appendHistoryEntry() to bound memory growth.

The map previously grew unbounded as users interacted with more groups
over time. Growth is O(unique groups) not O(messages), but still causes
slow memory accumulation on long-running instances.

Fixes #2384
…2403)

* fix(security): properly test Windows ACL audit for config includes

The test expected fs.config_include.perms_writable on Windows but
chmod 0o644 has no effect on Windows ACLs. Use icacls to grant
Everyone write access, which properly triggers the security check.

Also stubs execIcacls to return proper ACL output so the audit
can parse permissions without running actual icacls on the system.

Adds cleanup via try/finally to remove temp directory containing
world-writable test file.

Fixes checks-windows CI failure.

* test: isolate heartbeat runner tests from user workspace

* docs: update changelog for #2403

---------

Co-authored-by: Tyler Yust <[email protected]>
- Add bot.catch() to prevent unhandled rejections from middleware
- Add isRecoverableNetworkError() to retry on transient failures
- Add maxRetryTime and exponential backoff to grammY runner
- Global unhandled rejection handler now logs recoverable errors
  instead of crashing (fetch failures, timeouts, connection resets)

Fixes crash loop when Telegram API is temporarily unreachable.
@dgarson dgarson merged commit 9f1cc1a into dgarson:main Jan 27, 2026
6 of 23 checks passed
dgarson added a commit that referenced this pull request Feb 2, 2026
feat: massive UI overhaul; add Overseer/Continuation support
dgarson added a commit that referenced this pull request Feb 4, 2026
dgarson added a commit that referenced this pull request Feb 7, 2026
…#208)

* feat: added work-queue workflow workers and a worker manager, integrate w/cron

* fix: address 12 logic flaws in workflow engine, adapter, phases, and cron types

- engine: capture phase before clobbering in catch handler (#1)
- engine: remove dead `state.plan ?? plan` fallback (#2)
- engine: mark workflow failed when all execution nodes fail (#6)
- adapter: fix retry count off-by-one (attemptNumber vs retryCount) (#3)
- adapter: clean up abort listener in sleep on timeout (#10)
- discover: fix batch/entries index mismatch when spawns fail (#4)
- execute: add cycle detection to topological sort (#5)
- review: add autoApproved flag to distinguish fallback approvals (#7)
- plan: add comment clarifying sessionKey reuse across repair attempts (#8)
- decompose: remove unused model/maxPhases/maxTasksPerPhase/maxSubtasksPerTask opts (#9)
- types: add autoApproved to ReviewIteration (#7)
- cron/state: use discriminated union for CronEvent (CronJobEvent | CronHealthEvent) (#12)
- tests: add WorkflowWorkerAdapter test suite (8 tests) (#11)

https://claude.ai/code/session_01L8kquwpmUh5zmU9S4MHgPu

---------

Co-authored-by: Claude <[email protected]>
dgarson added a commit that referenced this pull request Feb 7, 2026
…cron types (openclaw#217)

- engine: capture phase before clobbering in catch handler (#1)
- engine: remove dead `state.plan ?? plan` fallback (#2)
- engine: mark workflow failed when all execution nodes fail (#6)
- adapter: fix retry count off-by-one (attemptNumber vs retryCount) (#3)
- adapter: clean up abort listener in sleep on timeout (#10)
- discover: fix batch/entries index mismatch when spawns fail (#4)
- execute: add cycle detection to topological sort (#5)
- review: add autoApproved flag to distinguish fallback approvals (#7)
- plan: add comment clarifying sessionKey reuse across repair attempts (#8)
- decompose: remove unused model/maxPhases/maxTasksPerPhase/maxSubtasksPerTask opts (#9)
- types: add autoApproved to ReviewIteration (#7)
- cron/state: use discriminated union for CronEvent (CronJobEvent | CronHealthEvent) (#12)
- tests: add WorkflowWorkerAdapter test suite (8 tests) (#11)

https://claude.ai/code/session_01L8kquwpmUh5zmU9S4MHgPu

Co-authored-by: Claude <[email protected]>
dgarson added a commit that referenced this pull request Feb 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.