- Add ReplyUsage type and onUsageAvailable callback to GetReplyOptions
- Call onUsageAvailable in agent-runner.ts when usage is computed
- Capture usage in dispatch-from-config.ts via callback ref
- Pass usage data to message_sent hook for presence updates
This completes the usage threading so Discord presence can show
accurate per-message token counts.
1. Move sessionTokens Map inside createPresenceManager to avoid
cross-account collisions (now scoped per-account)
2. Add NOTE explaining that usage stats aren't available in the
message_sent hook currently - this would require threading usage
data through the entire reply pipeline (follow-up work)
- Extended PluginHookMessageSentEvent to include usage stats (tokens, model, provider, duration)
- Extended PluginHookMessageContext to include sessionKey and agentId
- Wired up runMessageSent hook call in dispatch-from-config.ts after final replies
- Added discord-status example plugin demonstrating how to use the hook
The message_sent hook now fires after each reply is delivered, enabling plugins to:
- Track token usage across sessions
- Update external status indicators (e.g., Discord bot presence)
- Log message delivery for analytics/monitoring
Note: Full Discord presence support requires exposing setPresence via PluginRuntime.
The example plugin currently logs the status it would set.
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.
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.
* 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 <pocket@Pockets-Mac-mini.local>
MEMORY.md is now loaded into context at session start, ensuring the
agent has access to curated long-term memory without requiring
embedding-based semantic search.
Previously, MEMORY.md was only accessible via the memory_search tool,
which requires an embedding provider (OpenAI/Gemini API key or local
model). When no embedding provider was configured, the agent would
claim memories were empty even though MEMORY.md existed and contained
data.
This change:
- Adds DEFAULT_MEMORY_FILENAME constant
- Includes MEMORY.md in WorkspaceBootstrapFileName type
- Loads MEMORY.md in loadWorkspaceBootstrapFiles()
- Does NOT add MEMORY.md to subagent allowlist (keeps user data private)
- Does NOT auto-create MEMORY.md template (user creates as needed)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Add Oracle Cloud (OCI) platform guide
- Add comprehensive guide for Oracle Cloud Always Free tier (ARM)
- Cover VCN security, Tailscale Serve setup, and why traditional hardening is unnecessary
- Update vps.md to list Oracle as top provider option
- Update digitalocean.md to link to official Oracle guide instead of community gist
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Keep community gist link, remove unzip
* Fix step order: lock down VCN after Tailscale is running
* Move VCN lockdown to final step (after verifying everything works)
* docs: make Oracle/Tailscale guide safer + tone down DO copy
* docs: fix Oracle guide step numbering
* docs: tone down VPS hub Oracle blurb
* docs: add Oracle Cloud guide (#2333) (thanks @hirefrank)
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Pocket Clawd <pocket@Pockets-Mac-mini.local>