Commit Graph

1838 Commits

Author SHA1 Message Date
Peter Steinberger
5f0866451a docs: add recommended models faq 2026-01-24 14:28:38 +00:00
Peter Steinberger
2f894c9bf9 docs: add installer verbose troubleshooting 2026-01-24 14:25:29 +00:00
Peter Steinberger
c133f25286 docs: add migration scheduling and concurrency faqs 2026-01-24 14:21:26 +00:00
Peter Steinberger
53c60017f6 fix: normalize heartbeat targets 2026-01-24 13:53:00 +00:00
Peter Steinberger
587c53b3eb docs: link macos node to cli node 2026-01-24 13:17:28 +00:00
Nicolas Zullo
2861c123da feat(templates): add emoji reactions guidance to AGENTS.md (#1591)
## What
Add emoji reactions guidance to the default AGENTS.md template.

## Why  
Reactions are a natural, human-like way to acknowledge messages without cluttering chat. This should be default behavior.

## Testing
- Tested locally on Discord DM 
- Tested locally on Discord guild channel 

## AI-Assisted
This change was drafted with help from my Clawdbot instance (Clawd 🦞). 
We tested the behavior together before submitting.
2026-01-24 13:12:16 +00:00
Peter Steinberger
0c43f657dc docs: add vps install faq 2026-01-24 13:11:31 +00:00
Peter Steinberger
2f0bd37c76 docs: add beta vs dev install faq 2026-01-24 13:11:31 +00:00
Peter Steinberger
036a5f80e2 docs: add latest version faq 2026-01-24 13:11:31 +00:00
Peter Steinberger
f2b04e7ff4 docs: clarify mac mini + imessage ssh 2026-01-24 13:11:31 +00:00
Peter Steinberger
3cfb10d179 docs: add mac mini faq 2026-01-24 13:11:31 +00:00
Peter Steinberger
7d30ffd2d4 fix: harden outbound mirroring normalization 2026-01-24 12:57:58 +00:00
Peter Steinberger
3ce03936bd build: refresh control-ui dist + release docs 2026-01-24 12:51:32 +00:00
Peter Steinberger
129b405337 docs: clarify node host sizing 2026-01-24 12:50:22 +00:00
Peter Steinberger
4988dcd6eb docs: add node vs ssh faq 2026-01-24 12:48:29 +00:00
Peter Steinberger
6ae794bb1c fix: align bluebubbles outbound group sessions 2026-01-24 12:23:26 +00:00
Peter Steinberger
dd6fba317e chore: tune fly deployment defaults 2026-01-24 11:58:25 +00:00
Peter Steinberger
dd5375883a fix: normalize session keys and outbound mirroring 2026-01-24 11:57:11 +00:00
Peter Steinberger
26147b37f4 fix: resolve session ids in session tools 2026-01-24 11:09:11 +00:00
Peter Steinberger
b3182cdc94 docs: fix redirects and help links 2026-01-24 10:21:05 +00:00
Peter Steinberger
e606ca1841 fix: avoid Discord /tts conflict 2026-01-24 09:58:06 +00:00
Peter Steinberger
227f7cf761 docs: consolidate faq under help 2026-01-24 09:49:38 +00:00
Peter Steinberger
e92b05f2cb feat: default TTS model overrides on (#1559) (thanks @Glucksberg)
Co-authored-by: Glucksberg <80581902+Glucksberg@users.noreply.github.com>
2026-01-24 09:42:32 +00:00
Peter Steinberger
aae71ab3af docs: restore faq and fix redirect 2026-01-24 09:39:24 +00:00
Peter Steinberger
ad7cfceff0 docs(fly): update guide with deployment lessons
- Increase recommended memory to 2GB (512MB/1GB OOM)
- Add OOM symptoms (SIGABRT, v8 allocation errors)
- Fix lock file path (/data/gateway.*.lock)
- Add complete config example with failover, auth, bindings
- Document Discord token from env var vs config
- Add machine update commands for command/memory changes
- Add config writing tips (echo+tee, sftp caveats)

Learned from FLAWD deployment debugging.
2026-01-24 09:36:54 +00:00
Peter Steinberger
a3f5fefaeb docs: move cross-context faq to troubleshooting 2026-01-24 09:36:44 +00:00
Peter Steinberger
3cfa7b4511 docs: expand heartbeat visibility config examples 2026-01-24 09:31:04 +00:00
Peter Steinberger
1b37c54f9f fix: document tools invoke + honor main session key (#1575) (thanks @vignesh07) 2026-01-24 09:29:32 +00:00
Peter Steinberger
d6eeb609ad docs: add cross-context messaging faq 2026-01-24 09:28:59 +00:00
Peter Steinberger
440b8e1905 docs: add oauth refresh troubleshooting 2026-01-24 09:21:15 +00:00
Peter Steinberger
6669be2afa fix: document heartbeat visibility controls (#1452) (thanks @dlauer) 2026-01-24 09:07:03 +00:00
Peter Steinberger
668cd829b5 fix: gate openai reasoning downgrade on model switches (#1562) (thanks @roshanasingh4) 2026-01-24 08:16:42 +00:00
Peter Steinberger
310d06ca27 fix: harden gateway lock validation (#1572) (thanks @steipete) 2026-01-24 08:15:07 +00:00
Peter Steinberger
b4b767e7ae docs(fly): comprehensive deployment guide with real-world learnings
Based on actual Flawd deployment experience:
- Proper fly.toml configuration with all required settings
- Step-by-step guide following exe.dev doc format
- Troubleshooting section with common issues and fixes
- Config file creation via SSH
- Cost estimates
2026-01-24 08:15:07 +00:00
Peter Steinberger
9313ac2d64 docs(fly): add configuration guidance for bind mode, memory, and troubleshooting 2026-01-24 08:15:07 +00:00
Peter Steinberger
15ae7d2672 feat: add Fly.io deployment support
- Add fly.toml configuration for Fly.io deployment
- Add docs/platforms/fly.md with deployment guide
- Uses London (lhr) region by default
- Includes persistent volume for data storage
2026-01-24 08:15:07 +00:00
Peter Steinberger
70a4b1046b feat: move TTS into core (#1559) (thanks @Glucksberg) 2026-01-24 08:00:44 +00:00
Peter Steinberger
6ee24fe6cc fix: guard tool allowlists with warnings 2026-01-24 07:38:42 +00:00
Glucksberg
dc9c9d63fa fix: address code review findings for plugin command API
Blockers fixed:
- Fix documentation: requireAuth defaults to true (not false)
- Add command name validation (must start with letter, alphanumeric only)
- Add reserved commands list to prevent shadowing built-in commands
- Emit diagnostic errors for invalid/duplicate command registration

Other improvements:
- Return user-friendly message for unauthorized commands (instead of silence)
- Sanitize error messages to avoid leaking internal details
- Document acceptsArgs behavior when arguments are provided
- Add notes about reserved commands and validation rules to docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:28:22 +00:00
Glucksberg
5f95fc6ac8 feat: add plugin command API for LLM-free auto-reply commands
This adds a new `api.registerCommand()` method to the plugin API, allowing
plugins to register slash commands that execute without invoking the AI agent.

Features:
- Plugin commands are processed before built-in commands and the agent
- Commands can optionally require authorization
- Commands can accept arguments
- Async handlers are supported

Use case: plugins can implement toggle commands (like /tts_on, /tts_off)
that respond immediately without consuming LLM API calls.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:28:22 +00:00
Peter Steinberger
ad0777754d perf: stabilize system prompt time 2026-01-24 06:24:04 +00:00
Peter Steinberger
6a4d478791 fix: ignore identity template placeholders 2026-01-24 05:35:50 +00:00
Peter Steinberger
67b9b0ef1f fix: honor tools.exec ask/security in approvals 2026-01-24 04:53:44 +00:00
Peter Steinberger
e74768b428 feat: add node browser proxy routing 2026-01-24 04:21:47 +00:00
JustYannicc
31ddfbb47d feat(heartbeat): skip API calls when HEARTBEAT.md is effectively empty (#1535)
* feat: skip heartbeat API calls when HEARTBEAT.md is effectively empty

- Added isHeartbeatContentEffectivelyEmpty() to detect files with only headers/comments
- Modified runHeartbeatOnce() to check HEARTBEAT.md content before polling the LLM
- Returns early with 'empty-heartbeat-file' reason when no actionable tasks exist
- Preserves existing behavior when file is missing (lets LLM decide)
- Added comprehensive test coverage for empty file detection
- Saves API calls/costs when heartbeat file has no meaningful content

* chore: update HEARTBEAT.md template to be effectively empty by default

Changed instruction text to comment format so new workspaces benefit from
heartbeat optimization immediately. Users still get clear guidance on usage.

* fix: only treat markdown headers (# followed by space) as comments, not #TODO etc

* refactor: simplify regex per code review suggestion

* docs: clarify heartbeat empty file behavior (#1535) (thanks @JustYannicc)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-24 04:19:01 +00:00
Peter Steinberger
5909f66b7a feat: add system cli 2026-01-24 04:03:07 +00:00
Peter Steinberger
25eb5ac794 docs: add channels list usage troubleshooting 2026-01-24 03:44:44 +00:00
Peter Steinberger
7bb7a63330 fix: update docker gateway command 2026-01-24 03:24:28 +00:00
Peter Steinberger
b9cbce9f4b fix: publish llm-task docs and harden tool 2026-01-24 01:44:51 +00:00
Peter Steinberger
2cecf28971 fix: honor wildcard tool allowlists 2026-01-24 01:30:44 +00:00
Peter Steinberger
77bb342301 fix: refine bedrock discovery defaults (#1543) (thanks @fal3) 2026-01-24 01:18:33 +00:00
Alex Fallah
212b602921 feat: add dynamic Bedrock model discovery
Add automatic discovery of AWS Bedrock models using ListFoundationModels API.
When AWS credentials are detected, models that support streaming and text output
are automatically discovered and made available.

- Add @aws-sdk/client-bedrock dependency
- Add discoverBedrockModels() with caching (default 1 hour)
- Add resolveImplicitBedrockProvider() for auto-registration
- Add BedrockDiscoveryConfig for optional filtering by provider/region
- Filter to active, streaming, text-output models only
- Update docs/bedrock.md with auto-discovery documentation
2026-01-24 01:15:06 +00:00
Peter Steinberger
8636ef2ad6 docs: extend cron vs heartbeat guide 2026-01-24 00:42:56 +00:00
justyannicc
53dc2c35f8 docs: add cron vs heartbeat decision guide
- New docs/automation/cron-vs-heartbeat.md with complete guidance
- Cross-links from heartbeat.md and cron-jobs.md
- Updated AGENTS.md template with practical guidance
- Added navigation entry in docs.json
2026-01-24 00:42:56 +00:00
AJ (@techfren)
9ee98c5377 docs: remove misplaced Google Docs Editor from showcase (#1547)
- Was incorrectly placed in Voice & Phone section
- Not a Clawdbot project (Claude Code skill)
- No valid link available
2026-01-24 00:42:48 +00:00
Peter Steinberger
367f48ce51 feat: add tlon channel plugin 2026-01-24 00:25:39 +00:00
Peter Steinberger
5cb73668a9 docs: add Comcast SSL troubleshooting note 2026-01-24 00:01:20 +00:00
Peter Steinberger
36c770e78f docs: remove channel unify checklist 2026-01-23 23:37:04 +00:00
Peter Steinberger
38b757687a docs: add channel unification checklist 2026-01-23 23:32:14 +00:00
Peter Steinberger
750dc7191c chore: bump version to 2026.1.23 2026-01-23 22:14:56 +00:00
Peter Steinberger
571257b972 fix: handle gateway slash command replies in TUI 2026-01-23 19:48:22 +00:00
Peter Steinberger
08d11149a0 feat: add models status auth probes 2026-01-23 19:28:55 +00:00
Peter Steinberger
1c71124ada fix: expand linux service PATH handling 2026-01-23 19:16:41 +00:00
Peter Steinberger
9f5cee9493 fix(exec-approvals): stabilize allowlist ids (#1521) 2026-01-23 19:00:45 +00:00
Peter Steinberger
6b88bb7ac6 fix: add per-channel markdown table conversion (#1495) (thanks @odysseus0) 2026-01-23 18:39:25 +00:00
Peter Steinberger
9e1ce76cfb fix: restart gateway after update by default 2026-01-23 11:50:19 +00:00
Peter Steinberger
c9c6284127 docs: prefer fast install smoke for release 2026-01-23 09:18:15 +00:00
Peter Steinberger
be3cb5776c fix: keep core tools when allowlist is plugin-only 2026-01-23 09:02:17 +00:00
Peter Steinberger
aad7fe5d4f docs: note SPARKLE_PRIVATE_KEY_FILE in profile 2026-01-23 08:25:20 +00:00
Peter Steinberger
de455683af Revert "fix: improve GitHub Copilot integration"
This reverts commit b69e70668d.
2026-01-23 07:14:00 +00:00
Peter Steinberger
eeda206294 docs: update media auto-detect 2026-01-23 05:47:16 +00:00
Peter Steinberger
0892eefa2b docs: expand slack replyToModeByChatType examples 2026-01-23 05:38:28 +00:00
Peter Steinberger
a1878d0d3c feat: add slack replyToModeByChatType overrides 2026-01-23 05:38:28 +00:00
Stefan Galescu
aa3972d93d feat(slack): add dm-specific replyToMode configuration (#1442)
Adds support for separate replyToMode settings for DMs vs channels:

- Add channels.slack.dm.replyToMode for DM-specific threading
- Keep channels.slack.replyToMode as default for channels
- Add resolveSlackReplyToMode helper to centralize logic
- Pass chatType through threading resolution chain

Usage:
```json5
{
  channels: {
    slack: {
      replyToMode: "off",     // channels
      dm: {
        replyToMode: "all"    // DMs always thread
      }
    }
  }
}
```

When dm.replyToMode is set, DMs use that mode; channels use the
top-level replyToMode. Backward compatible when not configured.
2026-01-23 05:13:23 +00:00
Peter Steinberger
4b7726fed7 fix: harden BlueBubbles voice memos (#1477) (thanks @Nicell) 2026-01-23 04:38:08 +00:00
Peter Steinberger
8890f8511c fix: repair docs redirects 2026-01-23 03:13:12 +00:00
Peter Steinberger
487cd76a97 feat: extend lobster tool run args 2026-01-23 03:09:59 +00:00
Peter Steinberger
ffd4488518 docs: fix lobster links 2026-01-23 02:51:33 +00:00
Peter Steinberger
b69e70668d fix: improve GitHub Copilot integration 2026-01-23 02:51:33 +00:00
Peter Steinberger
744a4e4fb2 docs: simplify OpenProse install 2026-01-23 01:37:54 +00:00
Peter Steinberger
d02e0e7a0f docs: expand mattermost intro 2026-01-23 01:35:50 +00:00
Peter Steinberger
a30a1b73c4 docs: add mattermost redirect 2026-01-23 01:35:15 +00:00
Peter Steinberger
ea95941c40 docs: add transcript hygiene reference 2026-01-23 01:34:21 +00:00
Peter Steinberger
fa69a633f6 docs: link Lobster and OpenProse 2026-01-23 01:29:17 +00:00
Peter Steinberger
3b9dfac62f fix: harden Mattermost plugin gating (#1428) (thanks @damoahdominic) 2026-01-23 01:23:23 +00:00
Peter Steinberger
2b7b69c8e6 docs: remove OpenProse telemetry mentions 2026-01-23 01:20:30 +00:00
Peter Steinberger
32537c6b2d docs: expand OpenProse guide 2026-01-23 01:08:55 +00:00
Peter Steinberger
2576cb47c1 fix: improve tool summaries 2026-01-23 01:00:24 +00:00
Peter Steinberger
deb6581c08 feat: add OpenProse plugin skills 2026-01-23 00:49:40 +00:00
Peter Steinberger
b5c7918620 Merge pull request #1428 from bestparents/feat/mattermost-channel
feat: add Mattermost channel support
2026-01-23 00:24:47 +00:00
Peter Steinberger
2e76f35026 fix: allow chained exec allowlists
Co-authored-by: Lucas Czekaj <1464539+czekaj@users.noreply.github.com>
2026-01-23 00:11:58 +00:00
Peter Steinberger
eaf9cfed3c fix: tui local shell consent UX (#1463)
- add local shell runner + denial notice + tests
- docs: describe ! local shell usage
- lint: drop unused Slack upload contentType
- cleanup: remove stray Swabble pins

Thanks @vignesh07.
Co-authored-by: Vignesh Natarajan <vigneshnatarajan92@gmail.com>
2026-01-22 23:38:44 +00:00
Peter Steinberger
6e246c978d docs: clarify node service commands 2026-01-22 23:22:56 +00:00
Peter Steinberger
dae8eea0b7 docs: fix remaining node ws references 2026-01-22 23:22:56 +00:00
Dominic Damoah
d3a0acd8b1 Merge branch 'main' into feat/mattermost-channel 2026-01-22 18:17:40 -05:00
Peter Steinberger
c52c2faed6 docs: align node transport with gateway ws 2026-01-22 23:10:09 +00:00
Peter Steinberger
fb42de9070 feat: add manual onboarding flow alias 2026-01-22 23:09:28 +00:00
Peter Steinberger
270e014d3e feat(macos): add attach-only launchd override 2026-01-22 23:08:56 +00:00
Peter Steinberger
0698b0db8f docs: refresh nodes + pairing docs 2026-01-22 22:02:06 +00:00
Peter Steinberger
1eacf6a4a3 docs: clarify bootstrap memory absence 2026-01-22 10:48:07 +00:00
Peter Steinberger
0b219312e5 docs: explain unpinning model auth profiles 2026-01-22 09:38:47 +00:00
Peter Steinberger
ae14204f41 fix: sanitize antigravity thinking signatures 2026-01-22 08:17:49 +00:00
Dominic Damoah
8af1af5802 Merge branch 'main' into feat/mattermost-channel 2026-01-22 03:11:53 -05:00
Peter Steinberger
2adc1533c1 style: format agent workspace and prompts 2026-01-22 08:05:55 +00:00
Dominic Damoah
f873523e1b Merge branch 'main' into feat/mattermost-channel 2026-01-22 02:49:17 -05:00
Peter Steinberger
3dc5a0e2f0 docs: note node-gyp workaround for sharp 2026-01-22 07:09:20 +00:00
Peter Steinberger
c5e29f395f feat: extend Control UI assistant identity 2026-01-22 07:08:13 +00:00
Vignesh
bfeea66f7a Merge pull request #1427 from vignesh07/docs/lobster-org-url 2026-01-21 23:07:39 -08:00
Peter Steinberger
d8706307c9 feat: add update wizard and guard elevated defaults 2026-01-22 07:06:19 +00:00
Peter Steinberger
4b26ba61a7 fix: align rolling logs to local time 2026-01-22 07:02:52 +00:00
Vignesh Natarajan
fe7768a88b docs: update lobster repo url 2026-01-21 22:55:49 -08:00
Peter Steinberger
2d2a040795 Merge remote-tracking branch 'origin/main' into feature/agent-avatar-support 2026-01-22 06:03:56 +00:00
Peter Steinberger
c260b5d585 feat: add elevated ask/full modes 2026-01-22 05:41:11 +00:00
Peter Steinberger
5bc4841918 feat: add agent identity avatars (#1329) (thanks @dlauer) 2026-01-22 05:37:15 +00:00
Peter Steinberger
c5025bd120 feat: surface repo root in runtime prompt 2026-01-22 05:20:42 +00:00
Peter Steinberger
3c6b9c11bd docs: add control ui dev gatewayUrl note 2026-01-22 05:05:30 +00:00
Peter Steinberger
55a8db8e4d docs: fix npm prefix guidance 2026-01-22 04:31:25 +00:00
Peter Steinberger
100b690e20 docs: add /model allowlist troubleshooting note 2026-01-22 04:28:57 +00:00
Peter Steinberger
b8122ba647 feat: preflight update runner before rebase 2026-01-22 04:19:33 +00:00
Peter Steinberger
f9d746eadd docs: clarify prompt injection guidance 2026-01-22 04:19:33 +00:00
Peter Steinberger
54d667f194 fix: localize system event timestamps 2026-01-22 04:15:39 +00:00
Peter Steinberger
69aad2d1b2 fix: default envelope timestamps to local 2026-01-22 04:10:06 +00:00
Peter Steinberger
82cec75f25 fix: align exec approvals default agent 2026-01-22 04:05:54 +00:00
Peter Steinberger
2c28fca67d feat: add agent avatar support (#1329) (thanks @dlauer) 2026-01-22 04:00:07 +00:00
Peter Steinberger
c2b25dac8e fix: msteams attachments + plugin prompt hints
Co-authored-by: Christof <10854026+Evizero@users.noreply.github.com>
2026-01-22 03:37:29 +00:00
Peter Steinberger
1333c0b37d docs: expand lobster guides 2026-01-22 03:25:13 +00:00
Peter Steinberger
c39e71013d Merge pull request #1152 from vignesh07/feat/lobster-plugin
feat: Add optional lobster plugin tool (typed workflows, approvals/resume)
2026-01-22 02:34:05 +00:00
Peter Steinberger
ca67b686ac feat(signal): add typing + read receipts 2026-01-22 02:04:59 +00:00
Peter Steinberger
567415d38f chore: bump version to 2026.1.21 2026-01-22 01:59:16 +00:00
Zach Knickerbocker
66810207e2 feat: configurable heartbeat session 2026-01-22 01:36:28 +00:00
Peter Steinberger
e16601b92c fix: unify exec approval ids 2026-01-22 00:59:29 +00:00
Peter Steinberger
8dbf803b1b fix: remove setup-token run option in onboarding 2026-01-22 00:42:04 +00:00
Peter Steinberger
e49887e1d0 fix: warn on unset gateway.mode 2026-01-22 00:21:08 +00:00
Peter Steinberger
e9245837ea fix: enforce secure control ui auth 2026-01-21 23:58:42 +00:00
Dominic Damoah
1d34352691 feat: add Mattermost channel support
Add Mattermost as a supported messaging channel with bot API and WebSocket integration. Includes channel state tracking (tint, summary, details), multi-account support, and delivery target routing. Update documentation and tests to include Mattermost alongside existing channels.
2026-01-21 18:40:56 -05:00
Peter Steinberger
fed5586a2a docs: clarify mac packaging guidance 2026-01-21 23:27:40 +00:00
Peter Steinberger
3161a0ea0a feat: tighten exec allowlist gating 2026-01-21 21:45:50 +00:00
Peter Steinberger
97311de136 docs: add showcase video 2026-01-21 20:53:55 +00:00
Peter Steinberger
7efa487150 fix: add explicit tailnet gateway bind 2026-01-21 20:36:09 +00:00
Peter Steinberger
582b4a9a34 docs: simplify heartbeat active hours example 2026-01-21 20:33:23 +00:00
Peter Steinberger
b0b96fe731 feat: add heartbeat active hours 2026-01-21 20:30:37 +00:00
Peter Steinberger
3cbd187a13 feat: make nodes run exec-style 2026-01-21 20:25:12 +00:00
Peter Steinberger
112ba5de4b feat: add auth-aware cache defaults 2026-01-21 20:23:39 +00:00
Peter Steinberger
d89894365d fix: restore 1h cache ttl option 2026-01-21 20:00:32 +00:00
Peter Steinberger
496eea9412 docs: clarify cache-ttl pruning window 2026-01-21 20:00:32 +00:00
Peter Steinberger
b47d8624ff feat: add cache-ttl pruning mode 2026-01-21 19:46:24 +00:00
Echo
ba1f1f1e5d feat(sessions): add channelIdleMinutes config for per-channel session idle durations (#1353)
* feat(sessions): add channelIdleMinutes config for per-channel session idle durations

Add new `channelIdleMinutes` config option to allow different session idle
timeouts per channel. For example, Discord sessions can now be configured
to last 7 days (10080 minutes) while other channels use shorter defaults.

Config example:
  sessions:
    channelIdleMinutes:
      discord: 10080  # 7 days

The channel-specific idle is passed as idleMinutesOverride to the existing
resolveSessionResetPolicy, integrating cleanly with the new reset policy
architecture.

* fix

* feat: add per-channel session reset overrides (#1353) (thanks @cash-echo-bot)

---------

Co-authored-by: Cash Williams <cashwilliams@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-21 19:10:31 +00:00
Peter Steinberger
b22e8c8154 docs(discord): mention wildcard channel defaults 2026-01-21 18:21:24 +00:00
Peter Steinberger
6350065f68 docs: align gateway service naming 2026-01-21 17:45:26 +00:00
Peter Steinberger
2fe0342fd3 fix: normalize abort signals for fetch 2026-01-21 17:29:46 +00:00