From 78a91e9df115ae249b142437e5f17c72aae5e7a5 Mon Sep 17 00:00:00 2001 From: dmitrycnstrc Date: Wed, 9 Sep 2026 12:36:46 +0300 Subject: [PATCH 1/2] add follow_up_refinement event for asa --- spec/src/modules/agent.js | 22 ++++++++++++++++++++++ src/modules/agent.js | 1 + src/types/agent.d.ts | 24 ++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/spec/src/modules/agent.js b/spec/src/modules/agent.js index ce6eb0b2..725d45eb 100644 --- a/spec/src/modules/agent.js +++ b/spec/src/modules/agent.js @@ -361,6 +361,28 @@ describe(`ConstructorIO - Agent${bundledDescriptionSuffix}`, () => { followUpCallback({ data: JSON.stringify(eventData) }); + setImmediate(() => { + expect(mockStreamController.enqueue.calledWith({ type: eventType, data: eventData })).to.be.true; + done(); + }); + }); + it('should enqueue FOLLOW_UP_REFINEMENT event data into the stream', (done) => { + const eventType = Agent.EventTypes.FOLLOW_UP_REFINEMENT; + const eventData = { + intent_result_id: '5ef345d6-3a36-4c4b-9de4-763d04e294f2', + thread_id: 'e421aec7-8b2a-4398-847e-08badd0225bc', + question: 'Who are you shopping for?', + options: ["Women's styles", "Men's styles", 'Kids and baby'], + }; + + setupEventListeners(mockEventSource, mockStreamController, Agent.EventTypes); + + const refinementCallback = mockEventSource.addEventListener + .getCalls() + .find((call) => call.args[0] === eventType).args[1]; + + refinementCallback({ data: JSON.stringify(eventData) }); + setImmediate(() => { expect(mockStreamController.enqueue.calledWith({ type: eventType, data: eventData })).to.be.true; done(); diff --git a/src/modules/agent.js b/src/modules/agent.js index 6dbed5e3..f57f977f 100644 --- a/src/modules/agent.js +++ b/src/modules/agent.js @@ -172,6 +172,7 @@ class Agent { IMAGE_META: 'image_meta', // This event type is used for enhancing recommendations with media content such as images MESSAGE: 'message', // Represents a textual message from the agent FOLLOW_UP_QUESTIONS: 'follow_up_questions', // Represents follow-up question suggestions + FOLLOW_UP_REFINEMENT: 'follow_up_refinement', // Represents a narrowing question with selectable options END: 'end', // Represents the end of data stream }; diff --git a/src/types/agent.d.ts b/src/types/agent.d.ts index 88f80c90..f752d81a 100644 --- a/src/types/agent.d.ts +++ b/src/types/agent.d.ts @@ -20,9 +20,33 @@ export interface IAgentParameters { fmtOptions?: Pick; } +export interface AgentEventTypes { + START: 'start'; + GROUP: 'group'; + SEARCH_RESULT: 'search_result'; + ARTICLE_REFERENCE: 'article_reference'; + RECIPE_INFO: 'recipe_info'; + RECIPE_INSTRUCTIONS: 'recipe_instructions'; + SERVER_ERROR: 'server_error'; + IMAGE_META: 'image_meta'; + MESSAGE: 'message'; + FOLLOW_UP_QUESTIONS: 'follow_up_questions'; + FOLLOW_UP_REFINEMENT: 'follow_up_refinement'; + END: 'end'; +} + +export interface FollowUpRefinementEventData { + intent_result_id?: string; + thread_id?: string; + question: string; + options: string[]; +} + declare class Agent { constructor(options: ConstructorClientOptions); + static EventTypes: AgentEventTypes; + options: ConstructorClientOptions; getAgentResultsStream( From 0dd3852e78d39eaf2a8115cf7bfb247dd0516a90 Mon Sep 17 00:00:00 2001 From: "Dmitry G." <37666085+dmitrycnstrc@users.noreply.github.com> Date: Wed, 9 Sep 2026 12:51:20 +0300 Subject: [PATCH 2/2] fix review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- spec/src/modules/agent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/src/modules/agent.js b/spec/src/modules/agent.js index 725d45eb..52779a2c 100644 --- a/spec/src/modules/agent.js +++ b/spec/src/modules/agent.js @@ -372,7 +372,7 @@ describe(`ConstructorIO - Agent${bundledDescriptionSuffix}`, () => { intent_result_id: '5ef345d6-3a36-4c4b-9de4-763d04e294f2', thread_id: 'e421aec7-8b2a-4398-847e-08badd0225bc', question: 'Who are you shopping for?', - options: ["Women's styles", "Men's styles", 'Kids and baby'], + options: ['Women\'s styles', 'Men\'s styles', 'Kids and baby'], }; setupEventListeners(mockEventSource, mockStreamController, Agent.EventTypes);