Commit Graph

3950 Commits

Author SHA1 Message Date
Peter Steinberger
69a579aca9 docs(cron): clarify jobId vs id 2026-01-08 21:43:22 +01:00
Peter Steinberger
bdedcb870a docs(cron): rewrite cron jobs documentation 2026-01-08 21:39:03 +01:00
Peter Steinberger
964568105e refactor(telegram): centralize target parsing 2026-01-08 21:38:59 +01:00
Peter Steinberger
991635af9c style(cli): format daemon config warnings 2026-01-08 21:38:54 +01:00
Peter Steinberger
8e2d6d14a1 fix(doctor): handle missing service readCommand 2026-01-08 21:38:51 +01:00
Peter Steinberger
dc848aef25 docs: clarify doctor + launchd service guidance 2026-01-08 21:34:28 +01:00
Peter Steinberger
b8b0994a44 feat(doctor): audit supervisor config + docs 2026-01-08 21:28:48 +01:00
Peter Steinberger
4f5256da7c docs(changelog): note PR #483 (thanks @AbhisekBasu1) 2026-01-08 20:26:18 +00:00
Peter Steinberger
ebbb61249b style(cron): format telegram target tests 2026-01-08 21:23:07 +01:00
Peter Steinberger
86f4f76a83 fix(cron): parse telegram targets with prefixes (thanks @mitschabaude-bot) 2026-01-08 21:23:07 +01:00
Gregor's Bot
adbbb84932 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 24a6595e81)
2026-01-08 21:23:07 +01:00
Peter Steinberger
edba086703 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
c9ca2f4bf9 docs: note systemd unit alignment (#479) - thanks @azade-c 2026-01-08 21:16:19 +01:00
Azade
ee875dc148 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
afcb6536ee refactor: normalize skills UI status keys 2026-01-08 20:13:24 +00:00
Peter Steinberger
06a05f28e4 docs(changelog): follow-up #516 (thanks @YuriNachos) 2026-01-08 21:08:34 +01:00
Peter Steinberger
35f7e3455d refactor(outbound): centralize telegram account defaults 2026-01-08 21:05:01 +01:00
Peter Steinberger
c0905d883c 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
ae23f96d5d docs: add changelog for skill install feedback (PR #445, thanks @pkrmf) 2026-01-08 20:04:13 +00:00
Peter Steinberger
f55f822703 style: format gateway-cli log lines 2026-01-08 20:04:10 +00:00
Marc Terns
8f7ba3d349 UI: improve skill install feedback 2026-01-08 20:01:38 +00:00
Peter Steinberger
16d8017528 fix: restore hidden gateway-daemon alias 2026-01-08 19:54:23 +00:00
Peter Steinberger
840e712153 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
3d0e1cf925 Merge branch 'main' into fix/heartbeat-telegram-account-id 2026-01-08 20:48:29 +01:00
Peter Steinberger
6ddfb1d0e1 fix(heartbeat): telegram accountId + cron jobId compat (#516, thanks @YuriNachos) 2026-01-08 20:47:22 +01:00
Yurii Chukhlib
2f817543eb 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
db93ec0465 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
0e0bd9cd16 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
c2e9be631d 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
44e6f7fdfa fix: avoid splitting outbound chunks inside parentheses (#499) — thanks @philipp-spiess 2026-01-08 20:39:28 +01:00
Philipp Spiess
9a39cca3a6 Chunking: avoid splits inside parentheses 2026-01-08 20:38:00 +01:00
Peter Steinberger
a393130f78 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
024a1c6797 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
87210a00c6 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
d4e62f5d80 fix: land macos resource bundle guard (#473) — thanks @gupsammy 2026-01-08 19:24:20 +00:00
gupsammy
135fe4a148 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
7c45f269af test: cover status model provider prefix 2026-01-08 20:23:38 +01:00
Peter Steinberger
fceeeb312e refactor: split discord gateway helpers 2026-01-08 20:23:06 +01:00
Peter Steinberger
69d490d136 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
6c101e43bd docs: add changelog for #506 2026-01-08 20:13:45 +01:00
Keith the Silly Goose
e7dad1a01a 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
e8ef7374fd Merge branch 'main' into fix/telegram-fetch-type-errors 2026-01-08 20:09:00 +01:00
Peter Steinberger
29eafc61bd fix: update changelog + prompt test 2026-01-08 20:08:27 +01:00
Josh Palmer
18c572f763 🤖 codex: handle discord gateway error events (#504) 2026-01-08 20:06:02 +01:00
Yurii Chukhlib
26d00d8fe5 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
898136e472 🤖 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
b5adb79438 fix: rename ClaudeBot to Clawdbot in system prompt (#502) 2026-01-08 11:24:00 -06:00
Philipp Spiess
ed93faba37 Chunking: avoid splits inside parentheses 2026-01-08 16:52:50 +01:00
Peter Steinberger
7b47c873f0 fix: format onboarding hint 2026-01-08 12:25:39 +01:00
Azade
bf061b3c0b 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 11:24:47 +00:00