Skip to content

plugin-message-api — 平台消息数据契约

包名: @aalis/plugin-message-api
源码: packages/plugin-message-api/src/index.ts
实现: 由各 adapter 直接 emit;本包不提供 service

概述

定义 IncomingMessage / OutgoingMessage / StreamChunkMessage —— Aalis 平台 adapter 层(OneBot / WebUI / CLI)与内核之间的消息边界。与 core 的 OpenAI 风格 Message(协议层)严格区分:前者是平台语义,后者是 LLM 协议。

IncomingMessage 关键字段

ts
interface IncomingMessage {
  content: string;
  sessionId: string;
  platform: string;
  userId?: string;
  nickname?: string;
  images?: string[];                   // base64 或 URL
  files?: Array<{ name; data; mimeType? }>;
  attachmentOrder?: Array<'image' | 'file'>;
  sessionType?: 'group' | 'private' | 'channel';
  source?: string;                     // 并发隔离用:同 session 不同源互不打断
  groupName?: string;
  groupId?: string;
  replyTo?: { messageId; content?; userId?; nickname? };
  noticeType?: string;                 // 非消息事件,如 poke / group_upload
  triggerType?: 'direct' | 'immediate' | 'interval' | 'idle';
  // 内部字段(preprocessor 写入)
  _imageDescriptions?: string[];
  _imageRecognitionInfo?: { imageCount; successCount; descriptions; transformedContent };
  _fileDescriptions?: string[];
}

triggerType 语义

含义
direct私聊或单一用户直连,userId 是主发言者
immediate群聊被 @/名字主动触发
interval群聊因频率/活跃度被动触发,userId 仅是"最后一条"
idle空闲自动触发,无 userId

OutgoingMessage

ts
interface OutgoingMessage {
  content: string;
  sessionId: string;
  platform?: string;
  reasoningContent?: string;
  segments?: ContentSegment[];        // 与协议层 Message.segments 一致
  source?: 'agent' | 'system' | 'command';
}

source='agent' 表示由 AI 生成,可被分条延迟发送以模拟自然节奏;其它来源默认整条立即发送。

事件(AalisEvents)

ts
'inbound:message':           [message: IncomingMessage]
'inbound:message:archived':  [message: IncomingMessage]   // 已写入 memory
'outbound:message':          [message: OutgoingMessage]
'outbound:stream':           [chunk: StreamChunkMessage]

工具函数(runtime exports)

ts
getSenderLabel(nickname?: string, userId?: string): string | undefined;
prefixSender(content: string, nickname?: string, userId?: string): string;
getMessageName(userId?: string): string | undefined;

用于在 LLM messages 里把发言者前缀化(群聊场景必要)。

实现者

  • 本包只定义类型与事件名,由所有 plugin-adapter-* 直接 emit;没有专门的实现包。

相关