* 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.
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import { MarkdownConfigSchema, ToolPolicySchema } from "clawdbot/plugin-sdk";
|
|
import { z } from "zod";
|
|
|
|
const allowFromEntry = z.union([z.string(), z.number()]);
|
|
|
|
const bluebubblesActionSchema = z
|
|
.object({
|
|
reactions: z.boolean().default(true),
|
|
edit: z.boolean().default(true),
|
|
unsend: z.boolean().default(true),
|
|
reply: z.boolean().default(true),
|
|
sendWithEffect: z.boolean().default(true),
|
|
renameGroup: z.boolean().default(true),
|
|
setGroupIcon: z.boolean().default(true),
|
|
addParticipant: z.boolean().default(true),
|
|
removeParticipant: z.boolean().default(true),
|
|
leaveGroup: z.boolean().default(true),
|
|
sendAttachment: z.boolean().default(true),
|
|
})
|
|
.optional();
|
|
|
|
const bluebubblesGroupConfigSchema = z.object({
|
|
requireMention: z.boolean().optional(),
|
|
tools: ToolPolicySchema,
|
|
});
|
|
|
|
const bluebubblesAccountSchema = z.object({
|
|
name: z.string().optional(),
|
|
enabled: z.boolean().optional(),
|
|
markdown: MarkdownConfigSchema,
|
|
serverUrl: z.string().optional(),
|
|
password: z.string().optional(),
|
|
webhookPath: z.string().optional(),
|
|
dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
|
|
allowFrom: z.array(allowFromEntry).optional(),
|
|
groupAllowFrom: z.array(allowFromEntry).optional(),
|
|
groupPolicy: z.enum(["open", "disabled", "allowlist"]).optional(),
|
|
historyLimit: z.number().int().min(0).optional(),
|
|
dmHistoryLimit: z.number().int().min(0).optional(),
|
|
textChunkLimit: z.number().int().positive().optional(),
|
|
chunkMode: z.enum(["length", "newline"]).optional(),
|
|
mediaMaxMb: z.number().int().positive().optional(),
|
|
sendReadReceipts: z.boolean().optional(),
|
|
blockStreaming: z.boolean().optional(),
|
|
groups: z.object({}).catchall(bluebubblesGroupConfigSchema).optional(),
|
|
});
|
|
|
|
export const BlueBubblesConfigSchema = bluebubblesAccountSchema.extend({
|
|
accounts: z.object({}).catchall(bluebubblesAccountSchema).optional(),
|
|
actions: bluebubblesActionSchema,
|
|
});
|