Add engagement-only conversation mode

This commit is contained in:
jjbrunton committed 2026-08-14 15:07:54 +01:00
1 parent b7fcc7db05
commit 7af7b211fa
24 files changed
+204 -23

No files matched your search

@@ -477,6 +477,8 @@ function ConversationComposer({ conversation, conversationId }: { conversation:
function automationStatusMessage(conversation: ConversationDetailResponse): string {
switch (conversation.automation.status) {
case 'engaged':
return 'Reply received. The engagement goal is complete and no automated response will be sent.';
case 'killed':
return conversation.automation.handoffReason
?? 'Automation ended this conversation as a seller or off-platform push.';
@@ -91,7 +91,8 @@ export function isWaitingOnThem(conversation: ActiveChat): boolean {
* True when the reply loop is no longer sending on its own, so every further
* message has to be written by an operator: either the subreddit's policy was
* manual from the start, or automation handed the conversation over (a manual
* reply was sent, an image arrived, a boundary or turn limit was hit).
* reply was sent, an image arrived, a boundary or turn limit was hit). Terminal
* engagement successes and killed conversations are completed, not manual.
*
* Conversations with no recorded automation state are not manual — they have
* simply never been through the reply loop.
@@ -100,6 +101,7 @@ export function isManualFlow(conversation: ActiveChat): boolean {
if (conversation.automationPolicyMode === 'manual') return true;
return conversation.automationStatus !== undefined
&& conversation.automationStatus !== 'active'
&& conversation.automationStatus !== 'engaged'
&& conversation.automationStatus !== 'killed';
}
@@ -48,6 +48,13 @@ export const conversationModes: ReadonlyArray<ConversationModeMeta> = [
description: 'The existing three-turn flow that works toward a media request.',
isAutonomous: false,
},
{
value: 'engagement',
label: 'Engagement only',
badge: 'Engagement',
description: 'Sends the opener, records the first incoming reply as success, then ends without an automated response.',
isAutonomous: false,
},
{
value: 'r4r',
label: 'Autonomous conversation',