Commit Graph

3309 Commits

Author SHA1 Message Date
Lukáš Loukota
8c0a7b7a59 fix: install Bun in Dockerfile (#284)
Install Bun in Dockerfile so `pnpm build` can run Bun scripts inside Docker.

Thanks @loukotal.
2026-01-06 14:05:19 +00:00
Peter Steinberger
f6fda75f02 chore(protocol): regenerate GatewayModels.swift 2026-01-06 09:55:58 +01:00
Peter Steinberger
4ed5daf5fe docs: point docs links to GitHub while docs down 2026-01-06 09:45:03 +01:00
Peter Steinberger
f291a88171 feat: sandbox session tool visibility 2026-01-06 08:40:30 +00:00
Peter Steinberger
67c855b701 docs(changelog): note auth rotation + configure order 2026-01-06 09:25:42 +01: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
Peter Steinberger
ce228e50a8 docs(changelog): note bun UI build 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
2560bd9d76 fix(control-ui): pad chat composer in focus mode 2026-01-06 08:59:05 +01:00
Peter Steinberger
b083e7049b docs: update docs domain + link labels 2026-01-06 08:57:58 +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
Peter Steinberger
bb998b2e5a feat(control-ui): add chat focus mode 2026-01-06 08:16:21 +01:00
Peter Steinberger
86a7ffe438 docs: add changelog entry for bun migration (#278) 2026-01-06 08:15:20 +01:00
Peter Steinberger
139ab736b9 docs: prefer bun-first TypeScript execution 2026-01-06 08:15:03 +01:00
Ayaan Zaidi
757c19e6e7 refactor: replace tsx with bun for TypeScript execution (#278) 2026-01-06 07:14:08 +00:00
Peter Steinberger
bd26f4e023 chore: update terminal css 2026-01-06 07:58:09 +01:00
Peter Steinberger
45f2e195bf Merge pull request #274 from kiranjd/fix/chat-scroll-to-bottom
fix(ui): scroll chat to bottom on initial load
2026-01-06 06:49:29 +00:00
Peter Steinberger
207220af7b fix(ui): scroll chat to bottom on initial load 2026-01-06 07:49:12 +01: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
Kiran Jd
479342bea0 Merge branch 'main' into fix/chat-scroll-to-bottom 2026-01-06 11:27:57 +05:30
Shadow
4e42430279 docs: add issue templates 2026-01-05 23:55:51 -06:00
kiranjd
bf7cae0bca fix(ui): scroll chat to bottom on initial load
The chat view was starting at the top showing oldest messages instead of
scrolling to the bottom to show the latest messages (like WhatsApp).

Root causes:
1. scheduleChatScroll() was called without force flag in refreshActiveTab()
2. The scroll was targeting .chat-thread element which has overflow:visible
   and doesn't actually scroll - the window scrolls instead

Fixes:
- Pass force flag (!chatHasAutoScrolled) when loading chat tab
- Wait for Lit updateComplete before scrolling to ensure DOM is ready
- Scroll the window instead of the .chat-thread container
- Use behavior: 'instant' for immediate scroll without animation
2026-01-06 11:23:27 +05:30
Shadow
2f57696bd7 fix: allow optional reply body 2026-01-05 23:47:33 -06:00
Shadow
36674427a8 docs: add recent contributors 2026-01-05 23:44:48 -06:00
Shadow
d6d816b90a docs: add PR 272 changelog entry 2026-01-05 23:37:37 -06:00
Shadow
aae366d41b chore: fixed CI 2026-01-05 23:36:48 -06:00
Ayaan Zaidi
233c318b39 fix: targetDir symlink handling in postinstall script (#272) 2026-01-05 23:36:11 -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
Peter Steinberger
6d09280bdc templates: Add memory maintenance during heartbeats
New section explaining how to periodically review daily memory files
and update MEMORY.md with distilled learnings. Like a human reviewing
their journal and updating their mental model.
2026-01-06 05:21:09 +00: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
Iamadig
d9bae71f39 nano-banana: emit MEDIA token for generated images (#271) 2026-01-05 23:19:50 -06:00
Peter Steinberger
6b8866ffd7 templates: Add MEMORY.md long-term memory concept
- Updated session start to include MEMORY.md loading for main sessions
- Added 🧠 MEMORY.md section explaining:
  - Only load in main sessions (direct with human), not shared contexts
  - Security boundary: personal context shouldn't leak to strangers
  - Can freely read/edit/update in main sessions
  - Write significant events, thoughts, decisions, opinions
  - Curated memory vs raw daily logs

This gives new agents proper long-term memory that's secure and personal.
2026-01-06 05:19:24 +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
Sreekaran Srinath
1d5e80986f fix(ui): add anyOf/oneOf support in config form (#268)
* fix(ui): add anyOf/oneOf support in config form

- Handle literal unions as dropdowns with type preservation
- Handle primitive unions (string|number, boolean|string) as text inputs
- Unwrap single-variant optional types
- Fix enum handler to preserve types via index-based values
- Update normalizeUnion to support primitive unions in schema analysis
- Exclude allOf from union normalization (stays unsupported)

Fields like Thinking Default, Allow From, Memory now render properly
instead of showing 'unsupported schema node' errors.

* UI: fix enum placeholder collision

* Docs: update changelog for PR #268

---------

Co-authored-by: Shadow <hi@shadowing.dev>
2026-01-05 22:50:07 -06:00