Commit Graph

3951 Commits

Author SHA1 Message Date
Peter Steinberger
2d4ec35e1c feat(doctor): add repair/force flows 2026-01-08 21:47:35 +01:00
Peter Steinberger
712a7dddf6 docs(cron): clarify jobId vs id 2026-01-08 21:43:22 +01:00
Peter Steinberger
10e46c6d5e docs(cron): rewrite cron jobs documentation 2026-01-08 21:39:03 +01:00
Peter Steinberger
0373574f0b refactor(telegram): centralize target parsing 2026-01-08 21:38:59 +01:00
Peter Steinberger
88039a69a2 style(cli): format daemon config warnings 2026-01-08 21:38:54 +01:00
Peter Steinberger
ea748f9440 fix(doctor): handle missing service readCommand 2026-01-08 21:38:51 +01:00
Peter Steinberger
23e34dd598 docs: clarify doctor + launchd service guidance 2026-01-08 21:34:28 +01:00
Peter Steinberger
01641b34ea feat(doctor): audit supervisor config + docs 2026-01-08 21:28:48 +01:00
Peter Steinberger
d0c4ce6749 docs(changelog): note PR #483 (thanks @AbhisekBasu1) 2026-01-08 20:26:18 +00:00
Peter Steinberger
58a9e35233 style(cron): format telegram target tests 2026-01-08 21:23:07 +01:00
Peter Steinberger
5fea53d89c fix(cron): parse telegram targets with prefixes (thanks @mitschabaude-bot) 2026-01-08 21:23:07 +01:00
Gregor's Bot
2afb75d508 fix(cron): support Telegram topic/thread ID in delivery target
When delivering cron job output to Telegram, the 'to' field now supports
specifying a topic (forum thread) ID in addition to the chat ID.

Supported formats:
- chatId (plain chat ID or @username)
- chatId:topicId (chat ID with numeric topic ID)
- chatId:topic:topicId (alternative format with explicit marker)

This enables cron jobs to deliver messages to specific forum topics
rather than always going to the main/general topic.

Adds parseTelegramTarget helper function with unit tests.

(cherry picked from commit 24a6595e81d6d1824b2657d714b212c587c3ee8e)
2026-01-08 21:23:07 +01:00
Peter Steinberger
f63496b389 Merge pull request #479 from azade-c/docs/systemd-service-comments
fix(daemon): align systemd unit with documentation
2026-01-08 20:16:32 +00:00
Peter Steinberger
9632ebed7b docs: note systemd unit alignment (#479) - thanks @azade-c 2026-01-08 21:16:19 +01:00
Azade
3a8d8bc6a4 fix(daemon): align systemd unit with documentation
Align generated systemd service file with docs:
https://docs.clawd.bot/gateway#supervision-systemd-user-unit

Adds:
- After=network-online.target
- Wants=network-online.target
- RestartSec=5
2026-01-08 21:16:19 +01:00
Peter Steinberger
0c74ef25d6 refactor: normalize skills UI status keys 2026-01-08 20:13:24 +00:00
Peter Steinberger
5a2242ee92 docs(changelog): follow-up #516 (thanks @YuriNachos) 2026-01-08 21:08:34 +01:00
Peter Steinberger
31fb5867e8 refactor(outbound): centralize telegram account defaults 2026-01-08 21:05:01 +01:00
Peter Steinberger
e90c00768f Merge pull request #445 from pkrmf/ui-skill-install-feedback
UI: improve skill install feedback
2026-01-08 20:04:32 +00:00
Peter Steinberger
dc4c174f4e docs: add changelog for skill install feedback (PR #445, thanks @pkrmf) 2026-01-08 20:04:13 +00:00
Peter Steinberger
7905a27416 style: format gateway-cli log lines 2026-01-08 20:04:10 +00:00
Marc Terns
965615a46c UI: improve skill install feedback 2026-01-08 20:01:38 +00:00
Peter Steinberger
04e0e10411 fix: restore hidden gateway-daemon alias 2026-01-08 19:54:23 +00:00
Peter Steinberger
28e3e51335 Merge pull request #516 from YuriNachos/fix/heartbeat-telegram-account-id
fix(heartbeat): pass accountId for Telegram delivery
2026-01-08 19:48:44 +00:00
Peter Steinberger
5372c1ab54 Merge branch 'main' into fix/heartbeat-telegram-account-id 2026-01-08 20:48:29 +01:00
Peter Steinberger
871c9e5286 fix(heartbeat): telegram accountId + cron jobId compat (#516, thanks @YuriNachos) 2026-01-08 20:47:22 +01:00
Yurii Chukhlib
9d42972b8a fix(heartbeat): pass accountId for Telegram delivery
Heartbeat Telegram delivery was failing when the bot token was
configured only via telegram.botToken in config (without TELEGRAM_BOT_TOKEN
environment variable).

Root cause: deliverOutboundPayloads was called without accountId parameter,
so sendMessageTelegram couldn't determine which account to use and couldn't
find the token from config.

Fix: Resolve default Telegram accountId when provider is "telegram" and pass
it to deliverOutboundPayloads. This follows the same pattern used elsewhere in
the codebase (e.g., cron uses resolveTelegramToken).

Changes:
- Added import for resolveDefaultTelegramAccountId
- Added accountId resolution for telegram provider
- Updated deliverOutboundPayloads call to include accountId

Fixes #318

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:47:22 +01:00
Yurii Chukhlib
4dac298ae2 fix(cron): use jobId parameter instead of id for AI tool schema
Fixes parameter mismatch between AI tool schema and internal validation.
The TypeBox schema now uses `jobId` for update/remove/run/runs actions,
matching what users expect based on the returned job objects.

Changes:
- Changed parameter from `id` to `jobId` in TypeBox schema for update/remove/run/runs
- Updated execute function to read `jobId` parameter
- Updated tests to use `jobId` in input parameters

The gateway protocol still uses `id` internally - the tool now maps
`jobId` from the AI to `id` for the gateway call.

Fixes #185

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:47:22 +01:00
Yurii Chukhlib
2f9306b98a fix(heartbeat): pass accountId for Telegram delivery
Heartbeat Telegram delivery was failing when the bot token was
configured only via telegram.botToken in config (without TELEGRAM_BOT_TOKEN
environment variable).

Root cause: deliverOutboundPayloads was called without accountId parameter,
so sendMessageTelegram couldn't determine which account to use and couldn't
find the token from config.

Fix: Resolve default Telegram accountId when provider is "telegram" and pass
it to deliverOutboundPayloads. This follows the same pattern used elsewhere in
the codebase (e.g., cron uses resolveTelegramToken).

Changes:
- Added import for resolveDefaultTelegramAccountId
- Added accountId resolution for telegram provider
- Updated deliverOutboundPayloads call to include accountId

Fixes #318

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:40:00 +01:00
Peter Steinberger
28a0864de8 Merge pull request #499 from philipp-spiess/fix/paren-chunking
Avoid splitting outbound chunks inside parentheses
2026-01-08 19:39:52 +00:00
Peter Steinberger
4a918ccf47 fix: avoid splitting outbound chunks inside parentheses (#499) — thanks @philipp-spiess 2026-01-08 20:39:28 +01:00
Philipp Spiess
4082b90aa4 Chunking: avoid splits inside parentheses 2026-01-08 20:38:00 +01:00
Peter Steinberger
491f928a2e Merge pull request #473 from gupsammy/fix/macos-app-crash-bundle-resources
fix(macos): prevent crash from missing ClawdbotKit resources and Swift 6.2 library
2026-01-08 19:28:12 +00:00
Yurii Chukhlib
265ef6d0c6 fix(cron): use jobId parameter instead of id for AI tool schema
Fixes parameter mismatch between AI tool schema and internal validation.
The TypeBox schema now uses `jobId` for update/remove/run/runs actions,
matching what users expect based on the returned job objects.

Changes:
- Changed parameter from `id` to `jobId` in TypeBox schema for update/remove/run/runs
- Updated execute function to read `jobId` parameter
- Updated tests to use `jobId` in input parameters

The gateway protocol still uses `id` internally - the tool now maps
`jobId` from the AI to `id` for the gateway call.

Fixes #185

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-08 20:28:03 +01:00
Peter Steinberger
9052160af3 Merge pull request #512 from YuriNachos/fix/telegram-fetch-type-errors
fix(telegram): resolve fetch type errors with grammY Bot constructor
2026-01-08 19:27:20 +00:00
Peter Steinberger
f1bc178141 fix: land macos resource bundle guard (#473) — thanks @gupsammy 2026-01-08 19:24:20 +00:00
gupsammy
29e9a574b0 fix(macos): prevent crash from missing ClawdbotKit resources and Swift library
The macOS app was crashing in two scenarios:

1. Bundle.module crash (fixes #213): When the first tool event arrived,
   ToolDisplayRegistry tried to load config via ClawdbotKitResources.bundle,
   which used Bundle.module directly. In packaged apps, Bundle.module
   couldn't find the resource bundle at the expected path, causing a
   fatal assertion failure after ~40-80 minutes of runtime.

2. dyld crash (fixes #417): Swift 6.2 requires libswiftCompatibilitySpan.dylib
   but SwiftPM doesn't bundle it automatically, causing immediate crash on
   launch with "Library not loaded" error.

Changes:
- ClawdbotKitResources.swift: Replace direct Bundle.module access with a
  safe locator that checks multiple paths and falls back gracefully
- package-mac-app.sh: Copy ClawdbotKit_ClawdbotKit.bundle to Resources
- package-mac-app.sh: Copy libswiftCompatibilitySpan.dylib from Xcode
  toolchain to Frameworks

Tested on macOS 26.2 with Swift 6.2 - app launches and runs without crashes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 19:24:20 +00:00
Peter Steinberger
ba19173b96 test: cover status model provider prefix 2026-01-08 20:23:38 +01:00
Peter Steinberger
393c414e90 refactor: split discord gateway helpers 2026-01-08 20:23:06 +01:00
Peter Steinberger
bf67b29a0e fix(telegram): resolve grammY fetch type mismatch (#512)
Co-authored-by: Yuri Chukhlib <yuri.v.chu@gmail.com>
2026-01-08 20:18:17 +01:00
Peter Steinberger
43e0462405 docs: add changelog for #506 2026-01-08 20:13:45 +01:00
Keith the Silly Goose
7866203c5c fix(status): include provider prefix in model display
The /status command was showing 'anthropic/claude-sonnet-4-5' even when
using 'google-antigravity/claude-sonnet-4-5' because buildStatusMessage
received only the model name without the provider prefix.

When resolveConfiguredModelRef parsed a model string without a slash,
it fell back to DEFAULT_PROVIDER ('anthropic'), causing the misleading
display.

Fix: Pass the full 'provider/model' string to buildStatusMessage so
the provider is correctly extracted and displayed.

🪿 Investigated and submitted by Keith the Silly Goose
2026-01-08 20:11:37 +01:00
Yuri Chukhlib
d1ccdeb5f5 Merge branch 'main' into fix/telegram-fetch-type-errors 2026-01-08 20:09:00 +01:00
Peter Steinberger
c54f2a122a fix: update changelog + prompt test 2026-01-08 20:08:27 +01:00
Josh Palmer
b7c900739e 🤖 codex: handle discord gateway error events (#504) 2026-01-08 20:06:02 +01:00
Yurii Chukhlib
d05de07fdd fix(telegram): resolve fetch type errors with grammY Bot constructor
Add proper type assertion for ApiClientOptions["fetch"] to resolve
TypeScript compilation errors when passing fetch implementation to
grammY's Bot constructor. This follows the same pattern already used
in bot.ts.

Fixes #465
2026-01-08 19:31:06 +01:00
Josh Palmer
cc94db458c 🤖 codex: fix block reply ordering (#503)
What: serialize block reply sends, make typing non-blocking, add timeout fallback + abort-aware routing, and add regression tests.
Why: prevent out-of-order streamed blocks while keeping final fallback on timeouts.
Tests: ./node_modules/.bin/vitest run src/auto-reply/reply.block-streaming.test.ts src/auto-reply/reply/route-reply.test.ts
Tests: corepack pnpm lint && corepack pnpm build (pass). corepack pnpm test (ran locally; failure observed during run).

Co-authored-by: Josh Palmer <joshp123@users.noreply.github.com>
2026-01-08 19:30:24 +01:00
Gregor's Bot
7450aed663 fix: rename ClaudeBot to Clawdbot in system prompt (#502) 2026-01-08 11:24:00 -06:00
Philipp Spiess
5fe39307cd Chunking: avoid splits inside parentheses 2026-01-08 16:52:50 +01:00
Peter Steinberger
c20a12aa7b fix: format onboarding hint 2026-01-08 12:25:39 +01:00