Commit Graph

1357 Commits

Author SHA1 Message Date
Peter Steinberger
f05d785bd9 fix: restore Anthropic token accounting 2026-01-06 18:52:01 +00:00
Peter Steinberger
1a993ddf5c style: format whatsapp inbound allowlist 2026-01-06 18:33:37 +00:00
Peter Steinberger
882bcaf414 feat: multi-agent routing + multi-account providers 2026-01-06 18:33:37 +00:00
Peter Steinberger
6160656789 fix(onboard): clarify DM policy keys 2026-01-06 18:09:21 +01:00
Peter Steinberger
89d15c6995 fix(onboard): configure DM policies 2026-01-06 18:09:21 +01:00
Onur
3e167dcaf8 feat(agent): add skipBootstrap config to skip bootstrap file creation (#292) 2026-01-06 11:02:51 -06:00
Peter Steinberger
099651dab5 fix(onboard): explain DM pairing defaults 2026-01-06 17:58:06 +01:00
Muhammed Mukhthar CM
ed4d6d051b fix(build): import tool-display.json instead of fs.readFileSync (#312) 2026-01-06 10:55:02 -06:00
Peter Steinberger
2574b99370 fix(security): lock down inbound DMs by default 2026-01-06 17:51:56 +01:00
Peter Steinberger
df2c790831 Merge pull request #283 from Oncomatic/jarvis/telegram-media-error-notify
fix(telegram): notify user when media exceeds size limit
2026-01-06 15:18:52 +00:00
Peter Steinberger
eedd1e62c4 chore: changelog for #293 2026-01-06 15:32:06 +01:00
Palash Oswal
7e45d2579f fix(cli): don't force localhost gateway url in remote mode
Fixes remote gateway setup (remote mode) by not overriding url; adds regression tests. Thanks @oswalpalash.
2026-01-06 14:30:45 +00:00
Simon Kelly
41467f1fd4 fix(slack): use named import for @slack/bolt App class (#299)
* fix(slack): use named import for @slack/bolt App class

The default import `import bolt from '@slack/bolt'` followed by
`const { App } = bolt` doesn't work correctly in Bun due to ESM/CJS
interop issues. The default export comes through as a function rather
than the module object.

Switching to a named import `import { App } from '@slack/bolt'`
resolves the issue and allows the Slack provider to start successfully.

* fix(slack): align Bolt mock with named App export

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-06 14:22:14 +00:00
Manuel Hettich
92c83f3b96 fix(telegram): notify user when media exceeds size limit
When a file exceeds mediaMaxMb, send a friendly error message
instead of silently dropping the upload.

---
🤖 Authored by Jarvis (AI assistant)
2026-01-06 08:45:07 +00:00
Peter Steinberger
f291a88171 feat: sandbox session tool visibility 2026-01-06 08:40:30 +00:00
Peter Steinberger
ea97da1da9 fix(configure): don’t write auth.order by default 2026-01-06 09:25:36 +01:00
Peter Steinberger
de313957b6 test(auth): stop prioritizing lastGood 2026-01-06 09:25:33 +01:00
Peter Steinberger
f3920c39ec test(gateway): deflake cron finished event wait 2026-01-06 09:25:31 +01:00
Muhammed Mukhthar CM
4ee1be4cf5 fix(auth): prioritize round-robin over lastGood for multi-account rotation (#281)
* fix(auth): prioritize round-robin over lastGood for multi-account rotation

When multiple OAuth accounts are configured, the round-robin rotation was
not working because lastGood was always prioritized, defeating the sort by
lastUsed.

Changes:
- Remove lastGood prioritization in resolveAuthProfileOrder
- Always apply orderProfilesByMode (sorts by lastUsed, oldest first)
- Only respect configuredOrder when explicitly set in config
- preferredProfile still takes priority for explicit user choice

Tested with 2 Google Antigravity accounts - verified alternating usage.

Follow-up to PR #269.

* style: fix formatting
2026-01-06 08:16:35 +00:00
Peter Steinberger
437b6bd6ab fix: add OpenAI Codex OAuth to configure 2026-01-06 09:13:51 +01:00
Muhammed Mukhthar CM
5660be8406 fix(cron-tool): use generic object schema for job/patch to fix Claude via Antigravity (#280) 2026-01-06 02:13:09 -06:00
Peter Steinberger
67b2f07bfb build(control-ui): prefer bun for UI build 2026-01-06 09:08:25 +01:00
Peter Steinberger
57fda6df5d feat: add sessions_spawn sub-agent tool 2026-01-06 08:41:45 +01:00
Peter Steinberger
eedbfa56df feat(tui): add /elev alias 2026-01-06 08:41:04 +01:00
Ayaan Zaidi
757c19e6e7 refactor: replace tsx with bun for TypeScript execution (#278) 2026-01-06 07:14:08 +00:00
Peter Steinberger
b1558f28e2 feat: unify group policy allowlists 2026-01-06 06:40:42 +00:00
Peter Steinberger
f4fce0e74f style: normalize type definitions 2026-01-06 07:21:10 +01:00
Peter Steinberger
60ae0b99ca fix: improve auth profile failover 2026-01-06 07:18:06 +01:00
Peter Steinberger
df97b7d9be Merge pull request #269 from mukhtharcm/feat/multi-account-roundrobin
feat: Multi-account OAuth with round-robin rotation
2026-01-06 06:13:19 +00:00
Peter Steinberger
6d10e8b369 fix: require slash for control commands 2026-01-06 07:05:17 +01:00
Peter Steinberger
73829144c4 fix: doctor memory hint 2026-01-06 06:01:24 +00:00
Shadow
2f57696bd7 fix: allow optional reply body 2026-01-05 23:47:33 -06:00
Shadow
aae366d41b chore: fixed CI 2026-01-05 23:36:48 -06:00
Peter Steinberger
11a373685b feat(providers): normalize location parsing 2026-01-06 06:31:09 +01:00
Nacho Iacovino
6297fa9d9a feat(telegram): parse location and venue messages
- Add TelegramLocation, TelegramVenue, and TelegramMessageWithLocation types
- Add formatLocationMessage() to convert location/venue shares to text
- Add extractLocationData() for structured location access in ctxPayload
- Handle both raw location pins and venue shares (places with names)
- Include location in reply-to context for quoted messages

Location messages now appear as:
- [Location: lat, lon ±accuracy] for raw pins
- [Venue: Name - Address (lat, lon)] for places

ctxPayload includes LocationLat, LocationLon, LocationAccuracy,
VenueName, and VenueAddress fields for programmatic access.
2026-01-06 06:31:09 +01:00
Muhammed Mukhthar CM
7eacc0b1a2 feat: treat timeout as rate limit for profile rotation
Antigravity rate limits cause requests to hang indefinitely rather than
returning 429 errors. This change detects timeouts and treats them as
potential rate limits:

- Added timedOut flag to track timeout-triggered aborts
- Timeout now triggers profile cooldown + rotation
- Logs: "Profile X timed out (possible rate limit). Trying next account..."

This ensures automatic failover when Antigravity hangs due to rate limiting.
2026-01-06 05:20:01 +00:00
Muhammed Mukhthar CM
7505300916 feat: add round-robin rotation and cooldown for auth profiles
Adds usage tracking to auth profiles for automatic rotation:

- ProfileUsageStats type with lastUsed, cooldownUntil, errorCount
- markAuthProfileUsed(): tracks successful usage, resets errors
- markAuthProfileCooldown(): applies exponential backoff (1/5/25/60min)
- isProfileInCooldown(): checks if profile should be skipped
- orderProfilesByMode(): now sorts by lastUsed (oldest first)

On auth/rate-limit failures, profiles are marked for cooldown before
rotation. On success, usage is recorded for round-robin ordering.

This enables automatic load distribution across multiple accounts
(e.g., Antigravity 5-hour rate limit windows).
2026-01-06 05:17:59 +00:00
Muhammed Mukhthar CM
edf1b26d42 feat: use email-based profile IDs for OAuth providers
Changes writeOAuthCredentials and applyAuthProfileConfig calls to use
the email from OAuth response as part of the profile ID instead of
hardcoded ":default".

This enables multiple accounts per provider - each login creates a
separate profile (e.g., google-antigravity:user@gmail.com) instead
of overwriting the same :default profile.

Affected files:
- src/commands/onboard-auth.ts (generic writeOAuthCredentials)
- src/commands/configure.ts (Antigravity flow)
- src/wizard/onboarding.ts (Antigravity flow)
2026-01-06 05:17:59 +00:00
Shadow
2bc75f8c50 Auto-reply: fix typing stop race (#270) 2026-01-05 22:57:04 -06:00
Peter Steinberger
68a01a105d fix: clean up poll merge 2026-01-06 04:51:05 +00:00
Peter Steinberger
3a1b077c3f feat: unify poll support
Co-authored-by: DBH <5251425+dbhurley@users.noreply.github.com>
2026-01-06 04:51:05 +00:00
Asleep
8240ed1a04 Format messages so they work with Gemini API (#266)
* fix: Gemini stops working after one message in a session

* fix: small issue in test file

* test: cover google role-merge behavior

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-06 04:45:40 +00:00
DBH
03e8e191ca feat: Add WhatsApp poll support (#248)
Implements issue #123 - WhatsApp Poll Support

## Gateway Protocol
- Add `poll` RPC method with params: to, question, options (2-12), selectableCount

## ActiveWebListener
- Add `sendPoll(to, poll)` method to interface
- Implementation uses Baileys poll message type

## CLI Command
- `clawdbot poll --to <jid> -q <question> -o <opt1> -o <opt2> [-s count]`
- Supports --dry-run, --json, --verbose flags
- Validates 2-12 options

## Changes
- src/gateway/protocol/schema.ts: Add PollParamsSchema
- src/gateway/protocol/index.ts: Export validator and types
- src/web/active-listener.ts: Add sendPoll to interface
- src/web/inbound.ts: Implement sendPoll using Baileys
- src/web/outbound.ts: Add sendPollWhatsApp function
- src/gateway/server-methods/send.ts: Add poll handler
- src/commands/poll.ts: New CLI command
- src/cli/program.ts: Register poll command

Closes #123
2026-01-06 04:44:15 +00:00
Peter Steinberger
d4abcb9f53 chore: fix lint warnings 2026-01-06 05:41:24 +01:00
Peter Steinberger
981eead7ea fix: improve compaction queueing and oauth flows 2026-01-06 05:41:24 +01:00
Marcus Neves
13752bb361 feat(whatsapp,telegram): add groupPolicy config option (#216)
Co-authored-by: Marcus Neves <conhecendo.contato@gmail.com>
Co-authored-by: Shadow <hi@shadowing.dev>
2026-01-05 22:41:19 -06:00
Peter Steinberger
caea773342 test: cover slack thread reply routing 2026-01-06 05:11:06 +01:00
Steve Caldwell
9a95cca79d fix(slack): preserve thread context in auto-replies
When replying to a message in a Slack thread, the response now stays
in the thread instead of going to the channel root.

Only threads replies when the incoming message was already in a thread
(has thread_ts). Top-level messages get top-level replies.

Fixes #250
2026-01-06 05:09:04 +01:00
Ayaan Zaidi
562335ff51 feat(telegram): support media groups (multi-image messages) (#220) 2026-01-05 22:04:33 -06:00
VACInc
d563a5981f fix(discord): Use channel ID for DMs instead of user ID (#261)
Co-authored-by: VAC <vac@vacs-mac-mini.localdomain>
2026-01-05 22:02:33 -06:00