feat: add message source context enhancement

This commit is contained in:
xmanrui 2026-08-29 10:46:06 +08:00
parent 5928b33057
commit 0cb79f74e9
69 changed files with 6217 additions and 597 deletions

View file

@ -98,6 +98,8 @@ export async function createProductionController(ctx, config = {}, internals = {
workspaces,
method: 'removeBot',
botIdFromRemoved: (removed) => removed.id,
saveMethod: 'saveBot',
botIdFromSave: (bot) => bot?.id,
})
: configStore;
// State is lazy per bot. A corrupt legacy file can therefore fail only the
@ -167,6 +169,7 @@ export async function createProductionController(ctx, config = {}, internals = {
ownerOpenIds: botConfig.ownerOpenIds ?? [botConfig.ownerOpenId],
harness: workspaceScope.harness,
state: workspaceScope.state,
contextEnhancement: { botId: id, getSettings: () => workspaces.contextEnhancementFor(id) },
replyTimeoutMs: config.replyTimeoutMs ?? 600_000,
...(wsAgent ? { wsAgent } : {}),
logger: {

View file

@ -8,6 +8,8 @@ import { publicMessageFailure } from '../../../../src/channels/shared/message-fa
import { resolveRpcAuthority } from '../../rpc-authority.mjs';
import { publicWorkspaceError, validWorkspacePayload } from '../shared/workspace-rpc.mjs';
import { validAgentPresetPayload } from '../shared/agent-preset-rpc.mjs';
import { validContextEnhancementPayload } from '../shared/context-enhancement-rpc.mjs';
import { normalizeContextEnhancementConfig } from '../../../../src/channels/shared/context-enhancement.mjs';
import {
isFeishuGroupResponseMode,
normalizeFeishuGroupResponseMode,
@ -276,6 +278,7 @@ function publicBotEntry(entry) {
connected,
configured: source.configured === true,
agentPreset: normalizeAgentPresetId(source.agentPreset),
contextEnhancement: normalizeContextEnhancementConfig(source.contextEnhancement),
groupResponseMode: normalizeFeishuGroupResponseMode(source.groupResponseMode),
groupMessagePermissionGranted: source.groupMessagePermissionGranted === true,
bot: publicBot(source.bot),
@ -415,6 +418,10 @@ function validPayload(endpoint, payload) {
return validAgentPresetPayload(payload)
? null : '请选择 Agent Preset。';
}
if (endpoint === FEISHU_ENDPOINTS.setContextEnhancement) {
return validContextEnhancementPayload(payload)
? null : '请提交有效的上下文增强设置。';
}
if (endpoint === FEISHU_ENDPOINTS.setGroupResponseMode) {
return hasOnlyKeys(payload, new Set(['botId', 'groupResponseMode']))
&& safeOpaqueId(payload.botId)
@ -666,6 +673,12 @@ export function createFeishuRpcHandler(controller, { encodeQr = qrCodeDataUrl }
await controller.updateWorkspace(payload.botId, payload.workspace),
{ encodeQr: cachedEncodeQr },
);
} else if (endpoint === FEISHU_ENDPOINTS.setContextEnhancement) {
if (typeof controller.updateContextEnhancement !== 'function') throw new Error('Context enhancement update is unavailable');
value = await controller.updateContextEnhancement(
payload.botId, payload.config,
(status) => toPublicFeishuStatus(status, { encodeQr: cachedEncodeQr }),
);
} else if (endpoint === FEISHU_ENDPOINTS.setAgentPreset) {
if (typeof controller.updateAgentPreset !== 'function') throw new Error('Agent preset update is unavailable');
value = await toPublicFeishuStatus(