Route IPC send_message by paired room role

This commit is contained in:
Eyejoker
2026-04-04 23:02:30 +09:00
parent 4a331c5036
commit 7f0fbd5811
9 changed files with 268 additions and 44 deletions

View File

@@ -669,6 +669,7 @@ async function runQuery(
EJCLAW_IS_MAIN: containerInput.isMain ? '1' : '0',
EJCLAW_AGENT_TYPE:
process.env.EJCLAW_AGENT_TYPE || 'claude-code',
EJCLAW_ROOM_ROLE: containerInput.roomRoleContext?.role || '',
...(process.env.EJCLAW_IPC_DIR && {
EJCLAW_IPC_DIR: process.env.EJCLAW_IPC_DIR,
}),

View File

@@ -30,6 +30,7 @@ import {
waitForVerificationResponse,
} from './verification.js';
import { resolveIpcDirectories } from './ipc-paths.js';
import { buildSendMessageIpcPayload } from './ipc-message.js';
const { ipcDir: IPC_DIR, hostIpcDir: HOST_IPC_DIR } =
resolveIpcDirectories(process.env);
@@ -76,14 +77,13 @@ server.tool(
sender: z.string().optional().describe('Your role/identity name (e.g. "Researcher"). When set, messages appear from a dedicated bot in Telegram.'),
},
async (args) => {
const data: Record<string, string | undefined> = {
type: 'message',
const data = buildSendMessageIpcPayload({
chatJid,
text: args.text,
sender: args.sender || undefined,
senderRole: process.env.EJCLAW_ROOM_ROLE || undefined,
groupFolder,
timestamp: new Date().toISOString(),
};
});
writeIpcFile(MESSAGES_DIR, data);

View File

@@ -0,0 +1,22 @@
export interface SendMessageIpcPayloadInput {
chatJid: string;
text: string;
sender?: string;
senderRole?: string;
groupFolder: string;
timestamp?: string;
}
export function buildSendMessageIpcPayload(
input: SendMessageIpcPayloadInput,
): Record<string, string | undefined> {
return {
type: 'message',
chatJid: input.chatJid,
text: input.text,
sender: input.sender || undefined,
senderRole: input.senderRole || undefined,
groupFolder: input.groupFolder,
timestamp: input.timestamp || new Date().toISOString(),
};
}

View File

@@ -0,0 +1,38 @@
import { describe, expect, it } from 'vitest';
import { buildSendMessageIpcPayload } from '../src/ipc-message.js';
describe('agent runner IPC message payload', () => {
it('includes senderRole when provided', () => {
expect(
buildSendMessageIpcPayload({
chatJid: 'dc:123',
text: 'hello',
sender: 'Reviewer',
senderRole: 'reviewer',
groupFolder: 'discord-review',
timestamp: '2026-04-04T13:45:00.000Z',
}),
).toEqual({
type: 'message',
chatJid: 'dc:123',
text: 'hello',
sender: 'Reviewer',
senderRole: 'reviewer',
groupFolder: 'discord-review',
timestamp: '2026-04-04T13:45:00.000Z',
});
});
it('omits empty senderRole values', () => {
expect(
buildSendMessageIpcPayload({
chatJid: 'dc:123',
text: 'hello',
senderRole: '',
groupFolder: 'discord-review',
timestamp: '2026-04-04T13:45:00.000Z',
}).senderRole,
).toBeUndefined();
});
});