fix: capture dispatch-stage prompt

This commit is contained in:
2026-04-12 23:29:14 +00:00
parent 72ca823206
commit f2ec5d43de
3 changed files with 18 additions and 13 deletions

View File

@@ -46,26 +46,28 @@ export default definePluginEntry({
const logger = api.logger;
const pendingBySession = new Map();
api.on("before_agent_reply", async (event, ctx) => {
if (ctx?.trigger && ctx.trigger !== "user") return;
api.on("before_dispatch", async (event, ctx) => {
const config = api.getConfig?.() || {};
const minPromptLength = Number(config.minPromptLength || DEFAULT_MIN_PROMPT_LENGTH);
const prompt = trimText(event?.cleanedBody || "");
const prompt = trimText(event?.body || event?.content || "");
const key = ctx?.sessionKey || event?.sessionKey;
if (!key) return;
if (!shouldCapturePrompt(prompt, minPromptLength)) {
pendingBySession.delete(ctx.sessionId);
pendingBySession.delete(key);
return;
}
pendingBySession.set(ctx.sessionId, {
pendingBySession.set(key, {
prompt,
sessionId: ctx.sessionId,
sessionKey: ctx.sessionKey || "",
sessionId: key,
sessionKey: key,
project: ""
});
});
api.on("llm_output", async (event, ctx) => {
if (ctx?.trigger && ctx.trigger !== "user") return;
const pending = pendingBySession.get(ctx.sessionId);
const key = ctx.sessionKey || ctx.sessionId;
const pending = pendingBySession.get(key);
if (!pending) return;
const assistantTexts = Array.isArray(event?.assistantTexts) ? event.assistantTexts : [];
@@ -87,15 +89,17 @@ export default definePluginEntry({
};
await postInteraction(baseUrl, payload, logger);
pendingBySession.delete(ctx.sessionId);
pendingBySession.delete(key);
});
api.on("agent_end", async (event) => {
if (event?.sessionId) pendingBySession.delete(event.sessionId);
const key = event?.sessionKey || event?.sessionId;
if (key) pendingBySession.delete(key);
});
api.on("session_end", async (event) => {
if (event?.sessionId) pendingBySession.delete(event.sessionId);
const key = event?.sessionKey || event?.sessionId;
if (key) pendingBySession.delete(key);
});
}
});