fix: /compact masked by room role header in both runners
prependRoomRoleHeader was called BEFORE /compact detection, turning "/compact" into "[PAIRED ROOM: owner]\n/compact" which failed the exact match check. Now session commands are detected first.
This commit is contained in:
@@ -1037,14 +1037,15 @@ async function main(): Promise<void> {
|
|||||||
log(`Draining ${pending.length} pending IPC messages into initial prompt`);
|
log(`Draining ${pending.length} pending IPC messages into initial prompt`);
|
||||||
prompt += '\n' + pending.join('\n');
|
prompt += '\n' + pending.join('\n');
|
||||||
}
|
}
|
||||||
prompt = prependRoomRoleHeader(prompt, containerInput.roomRoleContext);
|
|
||||||
|
|
||||||
// --- Slash command handling ---
|
// --- Slash command handling ---
|
||||||
// Only known session slash commands are handled here. This prevents
|
// Check BEFORE prepending room role header so /compact isn't masked.
|
||||||
// accidental interception of user prompts that happen to start with '/'.
|
|
||||||
const KNOWN_SESSION_COMMANDS = new Set(['/compact']);
|
const KNOWN_SESSION_COMMANDS = new Set(['/compact']);
|
||||||
|
const isSessionSlashCommand = KNOWN_SESSION_COMMANDS.has(containerInput.prompt.trim());
|
||||||
|
|
||||||
|
if (!isSessionSlashCommand) {
|
||||||
|
prompt = prependRoomRoleHeader(prompt, containerInput.roomRoleContext);
|
||||||
|
}
|
||||||
const trimmedPrompt = prompt.trim();
|
const trimmedPrompt = prompt.trim();
|
||||||
const isSessionSlashCommand = KNOWN_SESSION_COMMANDS.has(trimmedPrompt);
|
|
||||||
|
|
||||||
if (isSessionSlashCommand) {
|
if (isSessionSlashCommand) {
|
||||||
log(`Handling session command: ${trimmedPrompt}`);
|
log(`Handling session command: ${trimmedPrompt}`);
|
||||||
|
|||||||
@@ -504,7 +504,8 @@ async function main(): Promise<void> {
|
|||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
|
|
||||||
let prompt = containerInput.prompt;
|
const rawPrompt = containerInput.prompt;
|
||||||
|
let prompt = rawPrompt;
|
||||||
if (containerInput.isScheduledTask) {
|
if (containerInput.isScheduledTask) {
|
||||||
prompt = `[SCHEDULED TASK]\n\n${prompt}`;
|
prompt = `[SCHEDULED TASK]\n\n${prompt}`;
|
||||||
}
|
}
|
||||||
@@ -512,7 +513,12 @@ async function main(): Promise<void> {
|
|||||||
if (pending.length > 0) {
|
if (pending.length > 0) {
|
||||||
prompt += '\n' + pending.join('\n');
|
prompt += '\n' + pending.join('\n');
|
||||||
}
|
}
|
||||||
prompt = prependRoomRoleHeader(prompt, containerInput.roomRoleContext);
|
// Prepend room role header AFTER checking for session commands,
|
||||||
|
// so /compact is not masked by the header prefix.
|
||||||
|
const isSessionCommand = rawPrompt.trim() === '/compact';
|
||||||
|
if (!isSessionCommand) {
|
||||||
|
prompt = prependRoomRoleHeader(prompt, containerInput.roomRoleContext);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
log('Runtime selected: app-server');
|
log('Runtime selected: app-server');
|
||||||
|
|||||||
Reference in New Issue
Block a user