feat: relay AG-side user messages to Discord via chat_snapshots

This commit is contained in:
2026-03-10 13:58:19 +09:00
parent 048ffd90a3
commit 17dd6654f1
3 changed files with 69 additions and 3 deletions

View File

@@ -1843,7 +1843,39 @@ function setupMonitor() {
const userInputIdx = bestSession.lastUserInputStepIndex ?? -1;
if (userInputIdx > lastUserInputStepIdx) {
lastUserInputStepIdx = userInputIdx;
logToFile(`[RESPONSE-CAPTURE] user input detected at step ${userInputIdx}`);
logToFile(`[USER-MSG] user input detected at step ${userInputIdx}, capturing...`);
// Fetch user message content and relay to Discord
try {
const umResp = await sdk.ls.rawRPC('GetCascadeTrajectorySteps', {
cascadeId: bestSessionId,
stepOffset: userInputIdx,
verbosity: 1,
});
if (umResp?.steps?.length > 0) {
const umStep = umResp.steps[0];
// User message text can be in various fields
const umText = umStep?.userMessage?.text
|| umStep?.userMessage?.rawText
|| umStep?.plannerResponse?.rawText
|| umStep?.metadata?.toolCall?.argumentsJson
|| '';
if (umText.length > 2) {
const truncated = umText.length > 800
? umText.substring(0, 800) + '\n\n_(이하 생략)_'
: umText;
writeChatSnapshot(`👤 **사용자 (AG 직접 입력)**\n\n${truncated}`);
logToFile(`[USER-MSG] relayed ${umText.length} chars from step ${userInputIdx}`);
} else {
// Fallback: just notify that user sent input
writeChatSnapshot(`👤 **사용자 (AG 직접 입력)** — _(내용 추출 불가)_`);
logToFile(`[USER-MSG] step ${userInputIdx} text empty, sent fallback`);
}
}
} catch (umErr: any) {
logToFile(`[USER-MSG] capture error: ${umErr.message?.substring(0, 100)}`);
// Still notify discord about user input even without content
writeChatSnapshot(`👤 **사용자 (AG 직접 입력)** — _(캡처 실패)_`);
}
}
if (wasRunning && !isRunning && currentCount > lastResponseCaptureStep) {