Commit Graph

101 Commits

Author SHA1 Message Date
plum-dawg
ac79478a65 feat: Add Line plugin (#1630)
* feat: add LINE plugin (#1630) (thanks @plum-dawg)

* feat: complete LINE plugin (#1630) (thanks @plum-dawg)

* chore: drop line plugin node_modules (#1630) (thanks @plum-dawg)

* test: mock /context report in commands test (#1630) (thanks @plum-dawg)

* test: limit macOS CI workers to avoid OOM (#1630) (thanks @plum-dawg)

* test: reduce macOS CI vitest workers (#1630) (thanks @plum-dawg)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-25 12:22:36 +00:00
Peter Steinberger
f3cc74c021 refactor: align voice-call TTS with core config 2026-01-25 09:29:57 +00:00
Peter Steinberger
777caa4762 fix: newline chunking across channels 2026-01-25 04:11:36 +00:00
Peter Steinberger
08b7c9e84b fix: signal reactions 2026-01-25 03:24:44 +00:00
Tyler Yust
1f420c7f29 feat: add chunking mode option for BlueBubbles (#1645)
* feat: add chunking mode for outbound messages

- Introduced `chunkMode` option in various account configurations to allow splitting messages by "length" or "newline".
- Updated message processing to handle chunking based on the selected mode.
- Added tests for new chunking functionality, ensuring correct behavior for both modes.

* feat: enhance chunking mode documentation and configuration

- Added `chunkMode` option to the BlueBubbles account configuration, allowing users to choose between "length" and "newline" for message chunking.
- Updated documentation to clarify the behavior of the `chunkMode` setting.
- Adjusted account merging logic to incorporate the new `chunkMode` configuration.

* refactor: simplify chunk mode handling for BlueBubbles

- Removed `chunkMode` configuration from various account schemas and types, centralizing chunk mode logic to BlueBubbles only.
- Updated `processMessage` to default to "newline" for BlueBubbles chunking.
- Adjusted tests to reflect changes in chunk mode handling for BlueBubbles, ensuring proper functionality.

* fix: update default chunk mode to 'length' for BlueBubbles

- Changed the default value of `chunkMode` from 'newline' to 'length' in the BlueBubbles configuration and related processing functions.
- Updated documentation to reflect the new default behavior for chunking messages.
- Adjusted tests to ensure the correct default value is returned for BlueBubbles chunk mode.
2026-01-25 00:47:10 +00:00
Peter Steinberger
5fc41c5fc5 fix: enforce explicit mention gating across channels 2026-01-24 11:09:33 +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
2306a321a6 fix: cover slack open policy gating (#1563) (thanks @itsjaydesu) 2026-01-24 07:09:26 +00:00
Glucksberg
665593141a fix: address code review findings for plugin commands
- Add registry lock during command execution to prevent race conditions
- Add input sanitization for command arguments (defense in depth)
- Validate handler is a function during registration
- Remove redundant case-insensitive regex flag
- Add success logging for command execution
- Simplify handler return type (always returns result now)
- Remove dead code branch in commands-plugin.ts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:28:22 +00:00
Glucksberg
42d0c46cde fix: clear plugin commands on reload to prevent duplicates
Add clearPluginCommands() call in loadClawdbotPlugins() to ensure
previously registered commands are cleaned up before reloading plugins.
This prevents command conflicts during hot-reload scenarios.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:28:22 +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
André Abadesso
65fad57061 test: add tests for normalizePluginsConfig memory slot handling 2026-01-24 03:08:27 +00:00
André Abadesso
1ca353d1e3 fix: respect "none" value for plugins.slots.memory 2026-01-24 03:08:27 +00:00
Peter Steinberger
4a4d5f9fcd refactor: centralize inbound session updates 2026-01-23 23:33:32 +00:00
Peter Steinberger
60d75eabed refactor: centralize ack reaction removal 2026-01-23 23:32:14 +00:00
Peter Steinberger
45822ef05c refactor: centralize ack reaction gating 2026-01-23 22:24:31 +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
12700696f8 test: trim plugin + telegram test setup 2026-01-23 06:22:09 +00:00
Peter Steinberger
deb6581c08 feat: add OpenProse plugin skills 2026-01-23 00:49:40 +00:00
Peter Steinberger
df2d8f1da7 fix: quiet update banner and skip duplicate plugin CLI 2026-01-21 07:37:22 +00:00
Peter Steinberger
0940c066d1 fix: restore bundled plugin discovery 2026-01-21 03:40:05 +00:00
Peter Steinberger
5b31d6fe32 fix: skip bundled plugin discovery in tests 2026-01-21 03:29:03 +00:00
Peter Steinberger
5f3f0510fa feat: sync plugin updates with update channel 2026-01-20 16:00:42 +00:00
Peter Steinberger
0883136a38 refactor: centralize channel ui metadata 2026-01-20 13:11:49 +00:00
Peter Steinberger
96ea6f4c3c refactor: extend channel plugin boundary 2026-01-20 12:07:54 +00:00
Peter Steinberger
eb06c5bfb8 fix: merge plugin manifest types 2026-01-20 11:22:28 +00:00
Peter Steinberger
d87a3bcc2c refactor: plugin catalog + nextcloud policy 2026-01-20 11:22:27 +00:00
Shadow
0835bc0c81 fix: enforce plugin config schemas (#1272) (thanks @thewilloftheshadow)
Co-authored-by: thewilloftheshadow <thewilloftheshadow@users.noreply.github.com>
2026-01-20 11:03:17 +00:00
Peter Steinberger
5414251352 Merge pull request #1235 from dougvk/feat/tool-dispatch-skill-commands
Plugin API: tool-dispatched skill commands + tool_result_persist hook
2026-01-20 08:52:05 +00:00
Peter Steinberger
20e89f0be9 fix: prefer bundled plugin schema 2026-01-20 08:47:56 +00:00
Shadow
8e615162fb CLI: skip runner rebuilds when dist is fresh (#1231)
Co-authored-by: mukhtharcm <mukhtharcm@users.noreply.github.com>
2026-01-19 13:12:33 -06:00
Doug von Kohorn
dc38730f9a feat: add tool_result_persist hook 2026-01-19 13:11:31 +01:00
Peter Steinberger
fe7ad4cd9f fix: add plugin config schema helper 2026-01-19 03:39:36 +00:00
Peter Steinberger
b1c13b0eab fix: enforce strict config validation 2026-01-19 03:39:25 +00:00
Peter Steinberger
d26f5bb11d fix: stabilize ci checks 2026-01-19 00:34:26 +00:00
Peter Steinberger
51717be768 fix(plugins): prefer dist plugin-sdk in tests 2026-01-19 00:15:45 +00:00
Peter Steinberger
d520a07720 refactor(plugins): improve loader resolution 2026-01-19 00:15:44 +00:00
Peter Steinberger
b63055d8d2 refactor(logging): split config + subsystem imports 2026-01-19 00:15:44 +00:00
Peter Steinberger
7fef4b332d fix: log plugin load errors in gateway 2026-01-19 00:15:24 +00:00
Peter Steinberger
7d2bd5d96e style: format code 2026-01-18 19:36:46 +00:00
Peter Steinberger
5d6a744b43 fix: unblock bundled plugin load 2026-01-18 19:34:21 +00:00
Peter Steinberger
fe9f9e8e89 fix: satisfy oxlint spread rule 2026-01-18 18:50:52 +00:00
Peter Steinberger
5e25bb04d9 feat: make inbound envelopes configurable
Co-authored-by: Shiva Prasad <shiv19@users.noreply.github.com>
2026-01-18 18:50:37 +00:00
Peter Steinberger
91c6acd9fa fix: stabilize tests and logging 2026-01-18 18:43:31 +00:00
Peter Steinberger
e6c0133f0b Merge pull request #1181 from sebslight/plugins/exclusive-slots
Plugins: auto-select exclusive slots
2026-01-18 18:40:38 +00:00
Peter Steinberger
24cc5e0632 fix(build): resolve ts2367 comparisons 2026-01-18 16:35:52 +00:00
Peter Steinberger
e2bf2cdb9f feat(config): auto-enable configured plugins 2026-01-18 16:35:52 +00:00
Sebastian Slight
f11dc964e6 Plugins: auto-select exclusive slots 2026-01-18 11:26:50 -05:00
Peter Steinberger
d49da62338 refactor: route channel runtime via plugin api 2026-01-18 11:01:16 +00:00