@indexnetwork/protocol 3.3.0-rc.253.1 → 3.4.0-rc.254.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@
5
5
  * Events are sent as Server-Sent Events (SSE) with JSON payloads.
6
6
  */
7
7
  import type { Question, QuestionStrategy } from "../shared/schemas/question.schema.js";
8
- export type ChatStreamEventType = "status" | "routing" | "thinking" | "subgraph_start" | "subgraph_result" | "token" | "done" | "error" | "tool_start" | "tool_end" | "agent_thinking" | "tool_activity" | "iteration_start" | "llm_start" | "llm_end" | "response_complete" | "response_reset" | "debug_meta" | "graph_start" | "graph_end" | "phase_start" | "phase_end" | "agent_start" | "agent_end" | "hallucination_detected" | "negotiation_session_start" | "negotiation_session_end" | "negotiation_turn" | "negotiation_outcome" | "chat_summarizer_start" | "chat_summarizer_end" | "question_generator_start" | "question_generator_end" | "decision_questions";
8
+ export type ChatStreamEventType = "status" | "routing" | "thinking" | "subgraph_start" | "subgraph_result" | "token" | "done" | "error" | "tool_start" | "tool_end" | "agent_thinking" | "tool_activity" | "iteration_start" | "llm_start" | "llm_end" | "response_complete" | "response_reset" | "debug_meta" | "graph_start" | "graph_end" | "phase_start" | "phase_end" | "agent_start" | "agent_end" | "hallucination_detected" | "negotiation_session_start" | "negotiation_session_end" | "negotiation_turn" | "negotiation_outcome" | "chat_summarizer_start" | "chat_summarizer_end" | "question_generator_start" | "question_generator_end" | "decision_questions" | "steer_or_queue";
9
9
  /**
10
10
  * Base interface for all chat stream events.
11
11
  */
@@ -473,10 +473,22 @@ export interface DecisionQuestionsEvent extends ChatStreamEventBase {
473
473
  type: "decision_questions";
474
474
  questions: Question[];
475
475
  }
476
+ /**
477
+ * Steer-or-queue event — injected into the active SSE stream by the /chat/interrupt
478
+ * endpoint after the classifier runs. The frontend holds the mid-stream message as
479
+ * "pending" until this event arrives, then acts on the decision.
480
+ */
481
+ export interface SteerOrQueueEvent extends ChatStreamEventBase {
482
+ type: "steer_or_queue";
483
+ /** Classifier decision: interrupt and restart, or buffer until current run completes. */
484
+ decision: "steer" | "queue";
485
+ /** Echoed from the interrupt request so the frontend can update the correct pending message. */
486
+ messageId: string;
487
+ }
476
488
  /**
477
489
  * Union type of all chat stream events.
478
490
  */
479
- export type ChatStreamEvent = StatusEvent | RoutingEvent | ThinkingEvent | SubgraphStartEvent | SubgraphResultEvent | TokenEvent | DoneEvent | ErrorEvent | ToolStartEvent | ToolEndEvent | AgentThinkingEvent | ToolActivityEvent | IterationStartEvent | LlmStartEvent | LlmEndEvent | ResponseCompleteEvent | ResponseResetEvent | HallucinationDetectedEvent | DebugMetaEvent | GraphStartEvent | GraphEndEvent | PhaseStartEvent | PhaseEndEvent | AgentStartEvent | AgentEndEvent | NegotiationSessionStartEvent | NegotiationSessionEndEvent | NegotiationTurnEvent | NegotiationOutcomeEvent | ChatSummarizerStartEvent | ChatSummarizerEndEvent | QuestionGeneratorStartEvent | QuestionGeneratorEndEvent | DecisionQuestionsEvent;
491
+ export type ChatStreamEvent = StatusEvent | RoutingEvent | ThinkingEvent | SubgraphStartEvent | SubgraphResultEvent | TokenEvent | DoneEvent | ErrorEvent | ToolStartEvent | ToolEndEvent | AgentThinkingEvent | ToolActivityEvent | IterationStartEvent | LlmStartEvent | LlmEndEvent | ResponseCompleteEvent | ResponseResetEvent | HallucinationDetectedEvent | DebugMetaEvent | GraphStartEvent | GraphEndEvent | PhaseStartEvent | PhaseEndEvent | AgentStartEvent | AgentEndEvent | NegotiationSessionStartEvent | NegotiationSessionEndEvent | NegotiationTurnEvent | NegotiationOutcomeEvent | ChatSummarizerStartEvent | ChatSummarizerEndEvent | QuestionGeneratorStartEvent | QuestionGeneratorEndEvent | DecisionQuestionsEvent | SteerOrQueueEvent;
480
492
  /**
481
493
  * Formats a chat stream event as an SSE message. If JSON.stringify throws (e.g. circular ref,
482
494
  * non-serializable value), returns a minimal error event so the stream stays valid.
@@ -623,4 +635,8 @@ export declare function createQuestionGeneratorEndEvent(sessionId: string, paylo
623
635
  export declare function createDecisionQuestionsEvent(sessionId: string, payload: {
624
636
  questions: Question[];
625
637
  }): DecisionQuestionsEvent;
638
+ /**
639
+ * Creates a steer-or-queue event injected into the active stream by the interrupt endpoint.
640
+ */
641
+ export declare function createSteerOrQueueEvent(sessionId: string, decision: "steer" | "queue", messageId: string): SteerOrQueueEvent;
626
642
  //# sourceMappingURL=chat-streaming.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-streaming.types.d.ts","sourceRoot":"/","sources":["chat/chat-streaming.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-streaming.types.d.ts","sourceRoot":"/","sources":["chat/chat-streaming.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGvF,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,SAAS,GACT,UAAU,GACV,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,GACP,MAAM,GACN,OAAO,GAEP,YAAY,GACZ,UAAU,GACV,gBAAgB,GAEhB,eAAe,GAEf,iBAAiB,GACjB,WAAW,GACX,SAAS,GAET,mBAAmB,GACnB,gBAAgB,GAEhB,YAAY,GACZ,aAAa,GACb,WAAW,GACX,aAAa,GACb,WAAW,GACX,aAAa,GACb,WAAW,GACX,wBAAwB,GAExB,2BAA2B,GAC3B,yBAAyB,GACzB,kBAAkB,GAClB,qBAAqB,GAErB,uBAAuB,GACvB,qBAAqB,GACrB,0BAA0B,GAC1B,wBAAwB,GACxB,oBAAoB,GAEpB,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,IAAI,EAAE,SAAS,CAAC;IAChB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,UAAU,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,IAAI,EAAE,gBAAgB,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,iBAAiB,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,mBAAmB;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,mBAAmB;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC5C,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,mBAAmB;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,IAAI,EAAE,YAAY,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,IAAI,EAAE,UAAU,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,IAAI,EAAE,gBAAgB,CAAC;IACvB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACtD,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,IAAI,EAAE,eAAe,CAAC;IACtB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,IAAI,EAAE,gBAAgB,CAAC;IACvB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,6EAA6E;IAC7E,cAAc,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,yEAAyE;IACzE,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,GAAG,EAAE,YAAY,CAAC;IAClB,wBAAwB,CAAC,EAAE,iCAAiC,CAAC;IAC7D,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;CAClD;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2FAA2F;AAC3F,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,IAAI,EAAE,2BAA2B,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,IAAI,EAAE,yBAAyB,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,IAAI,EAAE,kBAAkB,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EACH,UAAU,GACV,kBAAkB,GAClB,mBAAmB,GACnB,WAAW,GACX,UAAU,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE;QACP,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC;QACtC,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;QACxB,SAAS,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1D,CAAC;CACH;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,gBAAgB,EAAE,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,IAAI,EAAE,gBAAgB,CAAC;IACvB,yFAAyF;IACzF,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,UAAU,GACV,SAAS,GACT,UAAU,GAEV,cAAc,GACd,YAAY,GACZ,kBAAkB,GAElB,iBAAiB,GAEjB,mBAAmB,GACnB,aAAa,GACb,WAAW,GAEX,qBAAqB,GACrB,kBAAkB,GAClB,0BAA0B,GAE1B,cAAc,GAEd,eAAe,GACf,aAAa,GACb,eAAe,GACf,aAAa,GACb,eAAe,GACf,aAAa,GACb,4BAA4B,GAC5B,0BAA0B,GAC1B,oBAAoB,GACpB,uBAAuB,GACvB,wBAAwB,GACxB,sBAAsB,GACtB,2BAA2B,GAC3B,yBAAyB,GACzB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAgB7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,GAChD,CAAC,CAOH;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,EACnD,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GACd,KAAK,IAAI,CAAC,CAEZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,CAKd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAIpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,mBAAmB,CAKrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,UAAU,CAEZ;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC5C,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,SAAS,CAKX;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,UAAU,CAEZ;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAKf;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,cAAc,CAKhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAMd;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,GAClB,kBAAkB,CAKpB;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAIrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,aAAa,CAIf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,WAAW,CAMb;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GAAG,KAAK,EACtB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,aAAa,EAAE,GACtB,iBAAiB,CASnB;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,qBAAqB,CAEvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAEpB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,0BAA0B,CAE5B;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,GAAG,EAAE,YAAY,EACjB,wBAAwB,CAAC,EAAE,iCAAiC,EAC5D,kBAAkB,CAAC,EAAE,2BAA2B,GAC/C,cAAc,CAShB;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAE3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAE3G;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAE3F;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAE3G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAE3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,aAAa,CAEf;AAED,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,GAC9E,4BAA4B,CAM9B;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,GAC5E,0BAA0B,CAM5B;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,GACtE,oBAAoB,CAEtB;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,GACzE,uBAAuB,CAMzB;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,GAC3C,wBAAwB,CAE1B;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GACzC,sBAAsB,CAExB;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,GAC9C,2BAA2B,CAE7B;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,yBAAyB,CAE3B;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,GACjC,sBAAsB,CAExB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAAG,OAAO,EAC3B,SAAS,EAAE,MAAM,GAChB,iBAAiB,CAKnB"}
@@ -293,4 +293,13 @@ export function createQuestionGeneratorEndEvent(sessionId, payload) {
293
293
  export function createDecisionQuestionsEvent(sessionId, payload) {
294
294
  return createStreamEvent("decision_questions", sessionId, payload);
295
295
  }
296
+ /**
297
+ * Creates a steer-or-queue event injected into the active stream by the interrupt endpoint.
298
+ */
299
+ export function createSteerOrQueueEvent(sessionId, decision, messageId) {
300
+ return createStreamEvent("steer_or_queue", sessionId, {
301
+ decision,
302
+ messageId,
303
+ });
304
+ }
296
305
  //# sourceMappingURL=chat-streaming.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-streaming.types.js","sourceRoot":"/","sources":["chat/chat-streaming.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAulBH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,IAAI,CAAC;QACH,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9C,CAAC;IAAC,OAAO,cAAc,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAe;YAC3B,IAAI,EAAE,OAAO;YACb,SAAS,EACP,OAAQ,KAA6B,CAAC,SAAS,KAAK,QAAQ;gBAC1D,CAAC,CAAE,KAA6B,CAAC,SAAS;gBAC1C,CAAC,CAAC,SAAS;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,qDAAqD;YAC9D,IAAI,EAAE,qBAAqB;SAC5B,CAAC;QACF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAe,EACf,SAAiB,EACjB,IAAiD;IAEjD,OAAO;QACL,GAAG,IAAI;QACP,IAAI;QACJ,SAAS;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC/B,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAsB,EACtB,IAAe;IAEf,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,OAAe;IAEf,OAAO,iBAAiB,CAAc,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,MAAc,EACd,SAAkB;IAElB,OAAO,iBAAiB,CAAe,SAAS,EAAE,SAAS,EAAE;QAC3D,MAAM;QACN,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,QAAgB;IAEhB,OAAO,iBAAiB,CAAqB,gBAAgB,EAAE,SAAS,EAAE;QACxE,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,QAAgB,EAChB,IAA6B;IAE7B,OAAO,iBAAiB,CAAsB,iBAAiB,EAAE,SAAS,EAAE;QAC1E,QAAQ;QACR,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,OAAe;IAEf,OAAO,iBAAiB,CAAa,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC;AAeD;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,QAAgB,EAChB,OAAgC;IAEhC,OAAO,iBAAiB,CAAY,MAAM,EAAE,SAAS,EAAE;QACrD,GAAG,OAAO;QACV,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,OAAe,EACf,IAAa;IAEb,OAAO,iBAAiB,CAAa,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,OAAe,EACf,IAAa;IAEb,OAAO,iBAAiB,CAAgB,UAAU,EAAE,SAAS,EAAE;QAC7D,OAAO;QACP,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,QAAgB,EAChB,QAAiC;IAEjC,OAAO,iBAAiB,CAAiB,YAAY,EAAE,SAAS,EAAE;QAChE,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAgB,EAChB,OAAgB,EAChB,aAAsB;IAEtB,OAAO,iBAAiB,CAAe,UAAU,EAAE,SAAS,EAAE;QAC5D,QAAQ;QACR,OAAO;QACP,aAAa;KACd,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,SAAiB,EACjB,SAAmB;IAEnB,OAAO,iBAAiB,CAAqB,gBAAgB,EAAE,SAAS,EAAE;QACxE,SAAS;QACT,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,SAAiB;IAEjB,OAAO,iBAAiB,CAAsB,iBAAiB,EAAE,SAAS,EAAE;QAC1E,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,SAAiB;IAEjB,OAAO,iBAAiB,CAAgB,WAAW,EAAE,SAAS,EAAE;QAC9D,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,SAAiB,EACjB,YAAqB,EACrB,SAAoB;IAEpB,OAAO,iBAAiB,CAAc,SAAS,EAAE,SAAS,EAAE;QAC1D,SAAS;QACT,YAAY;QACZ,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,QAAgB,EAChB,WAAmB,EACnB,KAAsB,EACtB,OAAiB,EACjB,OAAgB,EAChB,KAAuB;IAEvB,OAAO,iBAAiB,CAAoB,eAAe,EAAE,SAAS,EAAE;QACtE,QAAQ;QACR,WAAW;QACX,KAAK;QACL,OAAO;QACP,OAAO;QACP,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,4CAA4C;AAC5C,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,QAAgB;IAEhB,OAAO,iBAAiB,CAAwB,mBAAmB,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,MAAc;IAEd,OAAO,iBAAiB,CAAqB,gBAAgB,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,SAAiB,EACjB,SAAiB,EACjB,IAAY;IAEZ,OAAO,iBAAiB,CAA6B,wBAAwB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjH,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,KAAa,EACb,UAAkB,EAClB,KAA0B,EAC1B,GAAiB,EACjB,wBAA4D,EAC5D,kBAAgD;IAEhD,OAAO,iBAAiB,CAAiB,YAAY,EAAE,SAAS,EAAE;QAChE,KAAK;QACL,UAAU;QACV,KAAK;QACL,GAAG;QACH,GAAG,CAAC,wBAAwB,KAAK,SAAS,IAAI,EAAE,wBAAwB,EAAE,CAAC;QAC3E,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,EAAE,kBAAkB,EAAE,CAAC;KAChE,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;IACxE,OAAO,iBAAiB,CAAkB,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAAkB;IAC1F,OAAO,iBAAiB,CAAgB,WAAW,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;IACxE,OAAO,iBAAiB,CAAkB,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAAkB;IAC1F,OAAO,iBAAiB,CAAgB,WAAW,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;IACxE,OAAO,iBAAiB,CAAkB,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,OAAe;IAEf,OAAO,iBAAiB,CAAgB,WAAW,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,SAAiB,EACjB,OAA+E;IAE/E,OAAO,iBAAiB,CACtB,2BAA2B,EAC3B,SAAS,EACT,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAAiB,EACjB,OAA6E;IAE7E,OAAO,iBAAiB,CACtB,yBAAyB,EACzB,SAAS,EACT,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,OAAuE;IAEvE,OAAO,iBAAiB,CAAuB,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,SAAiB,EACjB,OAA0E;IAE1E,OAAO,iBAAiB,CACtB,qBAAqB,EACrB,SAAS,EACT,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,SAAiB,EACjB,OAA4C;IAE5C,OAAO,iBAAiB,CAA2B,uBAAuB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAiB,EACjB,OAA0C;IAE1C,OAAO,iBAAiB,CAAyB,qBAAqB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,SAAiB,EACjB,OAA+C;IAE/C,OAAO,iBAAiB,CAA8B,0BAA0B,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,SAAiB,EACjB,OAA6C;IAE7C,OAAO,iBAAiB,CAA4B,wBAAwB,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAiB,EACjB,OAAkC;IAElC,OAAO,iBAAiB,CAAyB,oBAAoB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["/**\n * SSE Event types for Chat Graph streaming.\n *\n * These types define the structure of events sent during streaming chat responses.\n * Events are sent as Server-Sent Events (SSE) with JSON payloads.\n */\n\nimport type { Question, QuestionStrategy } from \"../shared/schemas/question.schema.js\";\n\n// Event type discriminator\nexport type ChatStreamEventType =\n | \"status\"\n | \"routing\"\n | \"thinking\"\n | \"subgraph_start\"\n | \"subgraph_result\"\n | \"token\"\n | \"done\"\n | \"error\"\n // Agent Loop Architecture events\n | \"tool_start\"\n | \"tool_end\"\n | \"agent_thinking\"\n // Streaming narration events\n | \"tool_activity\"\n // Agent loop trace events\n | \"iteration_start\"\n | \"llm_start\"\n | \"llm_end\"\n // Internal response tracking events\n | \"response_complete\"\n | \"response_reset\"\n // Debug meta (per-turn graph/tool usage for copy debug)\n | \"debug_meta\"\n | \"graph_start\"\n | \"graph_end\"\n | \"phase_start\"\n | \"phase_end\"\n | \"agent_start\"\n | \"agent_end\"\n | \"hallucination_detected\"\n // Orchestrator-inline negotiation trace events\n | \"negotiation_session_start\"\n | \"negotiation_session_end\"\n | \"negotiation_turn\"\n | \"negotiation_outcome\"\n // Discovery decision-question events\n | \"chat_summarizer_start\"\n | \"chat_summarizer_end\"\n | \"question_generator_start\"\n | \"question_generator_end\"\n | \"decision_questions\";\n\n/**\n * Base interface for all chat stream events.\n */\nexport interface ChatStreamEventBase {\n /** Event type discriminator */\n type: ChatStreamEventType;\n /** Session ID for the chat session */\n sessionId: string;\n /** ISO 8601 timestamp */\n timestamp: string;\n}\n\n/**\n * Status event - sent to indicate processing state changes.\n */\nexport interface StatusEvent extends ChatStreamEventBase {\n type: \"status\";\n /** Human-readable status message */\n message: string;\n}\n\n/**\n * Routing event - sent when the router determines which subgraph to use.\n */\nexport interface RoutingEvent extends ChatStreamEventBase {\n type: \"routing\";\n /** Target subgraph name */\n target: string;\n /** Optional reasoning for the routing decision */\n reasoning?: string;\n}\n\n/**\n * Thinking event - sent to stream the model's reasoning and decision-making process.\n */\nexport interface ThinkingEvent extends ChatStreamEventBase {\n type: \"thinking\";\n /** The thinking/reasoning content */\n content: string;\n /** Optional step identifier (e.g., 'router', 'inference', 'verification') */\n step?: string;\n}\n\n/**\n * Subgraph start event - sent when a subgraph begins processing.\n */\nexport interface SubgraphStartEvent extends ChatStreamEventBase {\n type: \"subgraph_start\";\n /** Name of the subgraph being executed */\n subgraph: string;\n}\n\n/**\n * Subgraph result event - sent when a subgraph completes with results.\n */\nexport interface SubgraphResultEvent extends ChatStreamEventBase {\n type: \"subgraph_result\";\n /** Name of the subgraph that completed */\n subgraph: string;\n /** Result data from the subgraph */\n data: Record<string, unknown>;\n}\n\n/**\n * Token event - sent for each token during streaming response.\n */\nexport interface TokenEvent extends ChatStreamEventBase {\n type: \"token\";\n /** Token content (partial text) */\n content: string;\n}\n\n/**\n * Chat suggestion for follow-up actions.\n * Matches frontend Suggestion type (label, type, followupText/prefill).\n */\nexport interface ChatSuggestion {\n label: string;\n type: \"direct\" | \"prompt\";\n /** For 'direct' type: text to auto-submit as next message */\n followupText?: string;\n /** For 'prompt' type: text to prefill the input */\n prefill?: string;\n}\n\n/**\n * Rich opportunity card data for chat messages.\n * Matches the home page card format for consistent rendering.\n */\nexport interface OpportunityCardPayload {\n opportunityId: string;\n userId: string;\n name?: string;\n avatar?: string | null;\n /** Main body text (personalizedSummary from presenter). */\n mainText: string;\n /** Call-to-action line (suggestedAction from presenter). */\n cta?: string;\n /** Short headline hook. */\n headline?: string;\n /** Label for primary action button (e.g. \"Start Chat\"). */\n primaryActionLabel?: string;\n /** Label for secondary action button (e.g. \"Skip\"). */\n secondaryActionLabel?: string;\n /** Subtitle under the other party name (e.g. \"1 mutual intent\"). */\n mutualIntentsLabel?: string;\n /** Narrator chip for human-introduced opportunities. */\n narratorChip?: {\n name: string;\n text: string;\n avatar?: string | null;\n userId?: string;\n };\n /** Viewer's role in this opportunity. */\n viewerRole?: string;\n /** Match confidence score (0-1). */\n score?: number;\n /** Opportunity status. */\n status?: string;\n /** Second party in introducer arrow layout (name -> name). Present when viewerRole is 'introducer'. */\n secondParty?: {\n name: string;\n avatar?: string | null;\n userId?: string;\n };\n}\n\n/**\n * Done event - sent when the response is complete.\n */\nexport interface DoneEvent extends ChatStreamEventBase {\n type: \"done\";\n /** Complete response text */\n response: string;\n /** Server-generated assistant message ID (for trace event persistence) */\n messageId?: string;\n /** Optional routing decision metadata */\n routingDecision?: Record<string, unknown>;\n /** Optional subgraph results metadata */\n subgraphResults?: Record<string, unknown>;\n /** Optional session title (auto-generated or existing) */\n title?: string;\n /** Optional context-aware follow-up suggestions */\n suggestions?: ChatSuggestion[];\n /** Optional rich opportunity cards returned by tools */\n opportunityCards?: OpportunityCardPayload[];\n /** Decision questions to render (orchestrator flow only). */\n decisionQuestions?: Question[];\n}\n\n/**\n * Error event - sent when an error occurs.\n */\nexport interface ErrorEvent extends ChatStreamEventBase {\n type: \"error\";\n /** Human-readable error message */\n message: string;\n /** Optional error code for programmatic handling */\n code?: string;\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP ARCHITECTURE EVENTS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Tool start event - sent when a tool begins executing.\n */\nexport interface ToolStartEvent extends ChatStreamEventBase {\n type: \"tool_start\";\n /** Name of the tool being executed */\n toolName: string;\n /** Arguments passed to the tool */\n toolArgs: Record<string, unknown>;\n}\n\n/**\n * Tool end event - sent when a tool finishes executing.\n */\nexport interface ToolEndEvent extends ChatStreamEventBase {\n type: \"tool_end\";\n /** Name of the tool that completed */\n toolName: string;\n /** Whether the tool execution succeeded */\n success: boolean;\n /** Brief summary of the result */\n resultSummary?: string;\n}\n\n/**\n * Agent thinking event - sent between agent iterations.\n */\nexport interface AgentThinkingEvent extends ChatStreamEventBase {\n type: \"agent_thinking\";\n /** Current iteration number */\n iteration: number;\n /** Tools used in this iteration */\n toolsUsed: string[];\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP TRACE EVENTS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Iteration start event - emitted when a new agent loop iteration begins.\n */\nexport interface IterationStartEvent extends ChatStreamEventBase {\n type: \"iteration_start\";\n iteration: number;\n}\n\n/**\n * LLM start event - emitted when the LLM begins generating a response.\n */\nexport interface LlmStartEvent extends ChatStreamEventBase {\n type: \"llm_start\";\n iteration: number;\n}\n\n/**\n * LLM end event - emitted when the LLM finishes generating (may include tool calls).\n */\nexport interface LlmEndEvent extends ChatStreamEventBase {\n type: \"llm_end\";\n iteration: number;\n hasToolCalls: boolean;\n toolNames?: string[];\n}\n\n/**\n * Tool activity event - inline narration of tool execution.\n * Sent as the agent streams its response, replacing the old ThinkingDropdown.\n */\nexport interface ToolActivityEvent extends ChatStreamEventBase {\n type: \"tool_activity\";\n /** Internal tool name */\n toolName: string;\n /** User-friendly description (e.g. \"Looking up your profile...\") */\n description: string;\n /** Whether the tool is starting or has finished */\n phase: \"start\" | \"end\";\n /** Whether the tool succeeded (present when phase === 'end') */\n success?: boolean;\n /** Brief result summary (present when phase === 'end') */\n summary?: string;\n /** Internal steps executed by this tool (present when phase === 'end') */\n steps?: DebugMetaStep[];\n}\n\n/**\n * Internal event carrying the agent's authoritative final response text.\n * Emitted by the streamer after the graph completes. Not forwarded to the frontend SSE stream.\n */\nexport interface ResponseCompleteEvent extends ChatStreamEventBase {\n type: \"response_complete\";\n /** The agent's final response text (from the last iteration only) */\n response: string;\n}\n\n/**\n * Response reset event — tells the frontend to discard all previously streamed tokens.\n * Emitted when the agent detects hallucinated code blocks and forces a correction iteration.\n */\nexport interface ResponseResetEvent extends ChatStreamEventBase {\n type: \"response_reset\";\n /** Human-readable reason for the reset */\n reason: string;\n}\n\n/**\n * Hallucination detected event — tells the frontend that the agent caught a\n * hallucinated code block and is auto-invoking the correct tool.\n */\nexport interface HallucinationDetectedEvent extends ChatStreamEventBase {\n type: \"hallucination_detected\";\n /** The type of block that was hallucinated (e.g. \"intent_proposal\", \"opportunity\") */\n blockType: string;\n /** The tool being auto-invoked to recover */\n tool: string;\n}\n\n/**\n * One internal step reported by a tool for debug visibility (e.g. subgraph, subtask).\n */\nexport interface DebugMetaStep {\n step: string;\n detail?: string;\n /** Structured data for rich display (e.g., Felicity scores, classification, candidate info). */\n data?: Record<string, unknown>;\n}\n\n/**\n * One agent invocation recorded inside a graph run.\n */\nexport interface DebugMetaAgent {\n /** Name of the agent (e.g. \"opportunity.evaluator\"). */\n name: string;\n /** Wall-clock milliseconds for this agent invocation. */\n durationMs: number;\n}\n\n/**\n * One graph invocation recorded by a tool that calls a LangGraph graph.\n */\nexport interface DebugMetaGraph {\n /** Name of the graph (e.g. \"opportunity\"). */\n name: string;\n /** Wall-clock milliseconds for the full graph run. */\n durationMs: number;\n /** Agent invocations recorded inside this graph run. */\n agents: DebugMetaAgent[];\n}\n\n/**\n * One tool call entry in debug meta (sanitized args, result summary, optional steps).\n */\nexport interface DebugMetaToolCall {\n name: string;\n args: Record<string, unknown>;\n resultSummary: string;\n success: boolean;\n /** Wall-clock milliseconds for the full tool execution. */\n durationMs: number;\n /** Internal steps (subgraphs, subtasks) when the tool reports debugSteps in its result. */\n steps?: DebugMetaStep[];\n /** LangGraph graphs invoked by this tool, with their agent timings. */\n graphs?: DebugMetaGraph[];\n}\n\n/**\n * LLM call statistics accumulated during a single agent turn.\n */\nexport interface DebugMetaLlm {\n /** Total number of LLM calls made in this turn. */\n calls: number;\n /** Cumulative wall-clock time spent waiting for the LLM across all calls. */\n totalDurationMs: number;\n /** Entries recorded each time a response_reset event was emitted. */\n resets: Array<{ reason: string; at: number }>;\n /** Entries recorded each time a hallucination_detected event was emitted. */\n hallucinations: Array<{ blockType: string; tool: string; at: number }>;\n}\n\n/**\n * Negotiation sessions initiated by the orchestrator during this turn.\n */\nexport interface DebugMetaOrchestratorNegotiations {\n /** Opportunity IDs for which a negotiation_session_start was emitted. */\n opportunityIds: string[];\n}\n\n/**\n * Decision-question generation debug data (orchestrator path only).\n */\nexport interface DebugMetaDiscoveryQuestions {\n inputMode: \"transcripts\" | \"insights\";\n finalCount: number;\n strategies: QuestionStrategy[];\n durationMs: number;\n}\n\n/**\n * Debug meta event - per-turn graph and tool usage for copy debug.\n */\nexport interface DebugMetaEvent extends ChatStreamEventBase {\n type: \"debug_meta\";\n graph: string;\n iterations: number;\n tools: DebugMetaToolCall[];\n llm: DebugMetaLlm;\n orchestratorNegotiations?: DebugMetaOrchestratorNegotiations;\n /** Decision-question generation debug data (orchestrator path only). */\n discoveryQuestions?: DebugMetaDiscoveryQuestions;\n}\n\n/** Graph start event — emitted when a LangGraph sub-graph begins inside a tool. */\nexport interface GraphStartEvent extends ChatStreamEventBase {\n type: \"graph_start\";\n graphName: string;\n}\n\n/** Graph end event — emitted when a LangGraph sub-graph completes. */\nexport interface GraphEndEvent extends ChatStreamEventBase {\n type: \"graph_end\";\n graphName: string;\n durationMs: number;\n}\n\n/**\n * Phase start event — emitted when a logical groupings of inline work begins\n * inside a tool. Phases share container semantics with graphs (they can host\n * agents) but render differently in the trace UI so users can tell them\n * apart from LangGraph state machines.\n */\nexport interface PhaseStartEvent extends ChatStreamEventBase {\n type: \"phase_start\";\n phaseName: string;\n}\n\n/** Phase end event — emitted when a logical phase completes. */\nexport interface PhaseEndEvent extends ChatStreamEventBase {\n type: \"phase_end\";\n phaseName: string;\n durationMs: number;\n}\n\n/** Agent start event — emitted when an LLM agent begins inside a graph node. */\nexport interface AgentStartEvent extends ChatStreamEventBase {\n type: \"agent_start\";\n agentName: string;\n}\n\n/** Agent end event — emitted when an LLM agent completes. */\nexport interface AgentEndEvent extends ChatStreamEventBase {\n type: \"agent_end\";\n agentName: string;\n durationMs: number;\n /** Structured outcome summary, e.g. \"5 of 12 passed\" or \"3 intents extracted\". */\n summary: string;\n}\n\n/** Orchestrator per-candidate negotiation wrapper — emitted from `negotiateCandidates`. */\nexport interface NegotiationSessionStartEvent extends ChatStreamEventBase {\n type: \"negotiation_session_start\";\n opportunityId: string;\n negotiationConversationId: string;\n sourceUserId: string;\n candidateUserId: string;\n candidateName?: string;\n trigger: \"orchestrator\" | \"ambient\";\n startedAt: number;\n}\n\nexport interface NegotiationSessionEndEvent extends ChatStreamEventBase {\n type: \"negotiation_session_end\";\n opportunityId: string;\n negotiationConversationId: string;\n durationMs: number;\n}\n\n/** One turn inside a bilateral negotiation. Emitted by the negotiation graph's turn node. */\nexport interface NegotiationTurnEvent extends ChatStreamEventBase {\n type: \"negotiation_turn\";\n opportunityId: string;\n negotiationConversationId: string;\n turnIndex: number;\n actor: \"source\" | \"candidate\";\n action: \"propose\" | \"accept\" | \"reject\" | \"counter\" | \"question\";\n reasoning?: string;\n message?: string;\n suggestedRoles?: { ownUser?: string; otherUser?: string };\n durationMs: number;\n}\n\nexport interface NegotiationOutcomeEvent extends ChatStreamEventBase {\n type: \"negotiation_outcome\";\n opportunityId: string;\n outcome:\n | \"accepted\"\n | \"rejected_stalled\"\n | \"waiting_for_agent\"\n | \"timed_out\"\n | \"turn_cap\";\n turnCount: number;\n reasoning?: string;\n agreedRoles?: { ownUser?: string; otherUser?: string };\n}\n\nexport interface ChatSummarizerStartEvent extends ChatStreamEventBase {\n type: \"chat_summarizer_start\";\n payload: { sessionId: string };\n}\n\nexport interface ChatSummarizerEndEvent extends ChatStreamEventBase {\n type: \"chat_summarizer_end\";\n payload: {\n durationMs: number;\n };\n}\n\nexport interface QuestionGeneratorStartEvent extends ChatStreamEventBase {\n type: \"question_generator_start\";\n payload: {\n inputMode: \"transcripts\" | \"insights\";\n negotiationCount: number;\n hasChatContext: boolean;\n truncated?: { originalCount: number; keptCount: number };\n };\n}\n\nexport interface QuestionGeneratorEndEvent extends ChatStreamEventBase {\n type: \"question_generator_end\";\n payload: {\n finalCount: number;\n strategies: QuestionStrategy[];\n durationMs: number;\n inputMode: \"transcripts\" | \"insights\";\n };\n}\n\nexport interface DecisionQuestionsEvent extends ChatStreamEventBase {\n type: \"decision_questions\";\n questions: Question[];\n}\n\n/**\n * Union type of all chat stream events.\n */\nexport type ChatStreamEvent =\n | StatusEvent\n | RoutingEvent\n | ThinkingEvent\n | SubgraphStartEvent\n | SubgraphResultEvent\n | TokenEvent\n | DoneEvent\n | ErrorEvent\n // Agent Loop Architecture events\n | ToolStartEvent\n | ToolEndEvent\n | AgentThinkingEvent\n // Streaming narration events\n | ToolActivityEvent\n // Agent loop trace events\n | IterationStartEvent\n | LlmStartEvent\n | LlmEndEvent\n // Internal response tracking events\n | ResponseCompleteEvent\n | ResponseResetEvent\n | HallucinationDetectedEvent\n // Debug meta\n | DebugMetaEvent\n // Trace hierarchy events\n | GraphStartEvent\n | GraphEndEvent\n | PhaseStartEvent\n | PhaseEndEvent\n | AgentStartEvent\n | AgentEndEvent\n | NegotiationSessionStartEvent\n | NegotiationSessionEndEvent\n | NegotiationTurnEvent\n | NegotiationOutcomeEvent\n | ChatSummarizerStartEvent\n | ChatSummarizerEndEvent\n | QuestionGeneratorStartEvent\n | QuestionGeneratorEndEvent\n | DecisionQuestionsEvent;\n\n/**\n * Formats a chat stream event as an SSE message. If JSON.stringify throws (e.g. circular ref,\n * non-serializable value), returns a minimal error event so the stream stays valid.\n *\n * @param event - The event to format\n * @returns SSE-formatted string with \"data: \" prefix and double newline\n */\nexport function formatSSEEvent(event: ChatStreamEvent): string {\n try {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n } catch (serializeError) {\n const fallback: ErrorEvent = {\n type: \"error\",\n sessionId:\n typeof (event as ChatStreamEventBase).sessionId === \"string\"\n ? (event as ChatStreamEventBase).sessionId\n : \"unknown\",\n timestamp: new Date().toISOString(),\n message: \"Response could not be serialized. Please try again.\",\n code: \"SERIALIZATION_ERROR\",\n };\n return `data: ${JSON.stringify(fallback)}\\n\\n`;\n }\n}\n\n/**\n * Creates a chat stream event with common fields populated.\n *\n * @param type - Event type\n * @param sessionId - Session ID\n * @param data - Event-specific data (excluding type, sessionId, timestamp)\n * @returns Complete event object\n *\n * @example\n * ```ts\n * const statusEvent = createStreamEvent<StatusEvent>('status', 'session-123', {\n * message: 'Processing your request...'\n * });\n * ```\n */\nexport function createStreamEvent<T extends ChatStreamEvent>(\n type: T[\"type\"],\n sessionId: string,\n data: Omit<T, \"type\" | \"sessionId\" | \"timestamp\">,\n): T {\n return {\n ...data,\n type,\n sessionId,\n timestamp: new Date().toISOString(),\n } as T;\n}\n\n/**\n * Type guard to check if an event is a specific type.\n */\nexport function isEventType<T extends ChatStreamEvent>(\n event: ChatStreamEvent,\n type: T[\"type\"],\n): event is T {\n return event.type === type;\n}\n\n/**\n * Creates a formatted status event.\n */\nexport function createStatusEvent(\n sessionId: string,\n message: string,\n): StatusEvent {\n return createStreamEvent<StatusEvent>(\"status\", sessionId, { message });\n}\n\n/**\n * Creates a formatted routing event.\n */\nexport function createRoutingEvent(\n sessionId: string,\n target: string,\n reasoning?: string,\n): RoutingEvent {\n return createStreamEvent<RoutingEvent>(\"routing\", sessionId, {\n target,\n reasoning,\n });\n}\n\n/**\n * Creates a formatted subgraph start event.\n */\nexport function createSubgraphStartEvent(\n sessionId: string,\n subgraph: string,\n): SubgraphStartEvent {\n return createStreamEvent<SubgraphStartEvent>(\"subgraph_start\", sessionId, {\n subgraph,\n });\n}\n\n/**\n * Creates a formatted subgraph result event.\n */\nexport function createSubgraphResultEvent(\n sessionId: string,\n subgraph: string,\n data: Record<string, unknown>,\n): SubgraphResultEvent {\n return createStreamEvent<SubgraphResultEvent>(\"subgraph_result\", sessionId, {\n subgraph,\n data,\n });\n}\n\n/**\n * Creates a formatted token event.\n */\nexport function createTokenEvent(\n sessionId: string,\n content: string,\n): TokenEvent {\n return createStreamEvent<TokenEvent>(\"token\", sessionId, { content });\n}\n\n/**\n * Options for the done event (optional metadata).\n */\nexport interface CreateDoneEventOptions {\n messageId?: string;\n routingDecision?: Record<string, unknown>;\n subgraphResults?: Record<string, unknown>;\n title?: string;\n suggestions?: ChatSuggestion[];\n opportunityCards?: OpportunityCardPayload[];\n decisionQuestions?: Question[];\n}\n\n/**\n * Creates a formatted done event.\n */\nexport function createDoneEvent(\n sessionId: string,\n response: string,\n options?: CreateDoneEventOptions,\n): DoneEvent {\n return createStreamEvent<DoneEvent>(\"done\", sessionId, {\n ...options,\n response,\n });\n}\n\n/**\n * Creates a formatted error event.\n */\nexport function createErrorEvent(\n sessionId: string,\n message: string,\n code?: string,\n): ErrorEvent {\n return createStreamEvent<ErrorEvent>(\"error\", sessionId, { message, code });\n}\n\n/**\n * Creates a formatted thinking event.\n */\nexport function createThinkingEvent(\n sessionId: string,\n content: string,\n step?: string,\n): ThinkingEvent {\n return createStreamEvent<ThinkingEvent>(\"thinking\", sessionId, {\n content,\n step,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted tool start event.\n */\nexport function createToolStartEvent(\n sessionId: string,\n toolName: string,\n toolArgs: Record<string, unknown>,\n): ToolStartEvent {\n return createStreamEvent<ToolStartEvent>(\"tool_start\", sessionId, {\n toolName,\n toolArgs,\n });\n}\n\n/**\n * Creates a formatted tool end event.\n */\nexport function createToolEndEvent(\n sessionId: string,\n toolName: string,\n success: boolean,\n resultSummary?: string,\n): ToolEndEvent {\n return createStreamEvent<ToolEndEvent>(\"tool_end\", sessionId, {\n toolName,\n success,\n resultSummary,\n });\n}\n\n/**\n * Creates a formatted agent thinking event.\n */\nexport function createAgentThinkingEvent(\n sessionId: string,\n iteration: number,\n toolsUsed: string[],\n): AgentThinkingEvent {\n return createStreamEvent<AgentThinkingEvent>(\"agent_thinking\", sessionId, {\n iteration,\n toolsUsed,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP TRACE EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted iteration start event.\n */\nexport function createIterationStartEvent(\n sessionId: string,\n iteration: number,\n): IterationStartEvent {\n return createStreamEvent<IterationStartEvent>(\"iteration_start\", sessionId, {\n iteration,\n });\n}\n\n/**\n * Creates a formatted LLM start event.\n */\nexport function createLlmStartEvent(\n sessionId: string,\n iteration: number,\n): LlmStartEvent {\n return createStreamEvent<LlmStartEvent>(\"llm_start\", sessionId, {\n iteration,\n });\n}\n\n/**\n * Creates a formatted LLM end event.\n */\nexport function createLlmEndEvent(\n sessionId: string,\n iteration: number,\n hasToolCalls: boolean,\n toolNames?: string[],\n): LlmEndEvent {\n return createStreamEvent<LlmEndEvent>(\"llm_end\", sessionId, {\n iteration,\n hasToolCalls,\n toolNames,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// STREAMING NARRATION EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted tool activity event (inline narration).\n */\nexport function createToolActivityEvent(\n sessionId: string,\n toolName: string,\n description: string,\n phase: \"start\" | \"end\",\n success?: boolean,\n summary?: string,\n steps?: DebugMetaStep[],\n): ToolActivityEvent {\n return createStreamEvent<ToolActivityEvent>(\"tool_activity\", sessionId, {\n toolName,\n description,\n phase,\n success,\n summary,\n steps,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// INTERNAL RESPONSE TRACKING EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted response complete event.\n */\nexport function createResponseCompleteEvent(\n sessionId: string,\n response: string,\n): ResponseCompleteEvent {\n return createStreamEvent<ResponseCompleteEvent>(\"response_complete\", sessionId, { response });\n}\n\n/**\n * Creates a formatted response reset event.\n * Tells the frontend to discard all previously streamed tokens.\n */\nexport function createResponseResetEvent(\n sessionId: string,\n reason: string,\n): ResponseResetEvent {\n return createStreamEvent<ResponseResetEvent>(\"response_reset\", sessionId, { reason });\n}\n\n/**\n * Creates a hallucination detected event for the trace panel.\n */\nexport function createHallucinationDetectedEvent(\n sessionId: string,\n blockType: string,\n tool: string,\n): HallucinationDetectedEvent {\n return createStreamEvent<HallucinationDetectedEvent>(\"hallucination_detected\", sessionId, { blockType, tool });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// DEBUG META EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted debug meta event (per-turn graph and tool usage).\n */\nexport function createDebugMetaEvent(\n sessionId: string,\n graph: string,\n iterations: number,\n tools: DebugMetaToolCall[],\n llm: DebugMetaLlm,\n orchestratorNegotiations?: DebugMetaOrchestratorNegotiations,\n discoveryQuestions?: DebugMetaDiscoveryQuestions,\n): DebugMetaEvent {\n return createStreamEvent<DebugMetaEvent>(\"debug_meta\", sessionId, {\n graph,\n iterations,\n tools,\n llm,\n ...(orchestratorNegotiations !== undefined && { orchestratorNegotiations }),\n ...(discoveryQuestions !== undefined && { discoveryQuestions }),\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// TRACE HIERARCHY EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a graph start event emitted when a LangGraph sub-graph begins inside a tool.\n */\nexport function createGraphStartEvent(sessionId: string, graphName: string): GraphStartEvent {\n return createStreamEvent<GraphStartEvent>(\"graph_start\", sessionId, { graphName });\n}\n\n/**\n * Creates a graph end event emitted when a LangGraph sub-graph completes.\n */\nexport function createGraphEndEvent(sessionId: string, graphName: string, durationMs: number): GraphEndEvent {\n return createStreamEvent<GraphEndEvent>(\"graph_end\", sessionId, { graphName, durationMs });\n}\n\nexport function createPhaseStartEvent(sessionId: string, phaseName: string): PhaseStartEvent {\n return createStreamEvent<PhaseStartEvent>(\"phase_start\", sessionId, { phaseName });\n}\n\nexport function createPhaseEndEvent(sessionId: string, phaseName: string, durationMs: number): PhaseEndEvent {\n return createStreamEvent<PhaseEndEvent>(\"phase_end\", sessionId, { phaseName, durationMs });\n}\n\n/**\n * Creates an agent start event emitted when an LLM agent begins inside a graph node.\n */\nexport function createAgentStartEvent(sessionId: string, agentName: string): AgentStartEvent {\n return createStreamEvent<AgentStartEvent>(\"agent_start\", sessionId, { agentName });\n}\n\n/**\n * Creates an agent end event emitted when an LLM agent completes.\n */\nexport function createAgentEndEvent(\n sessionId: string,\n agentName: string,\n durationMs: number,\n summary: string,\n): AgentEndEvent {\n return createStreamEvent<AgentEndEvent>(\"agent_end\", sessionId, { agentName, durationMs, summary });\n}\n\nexport function createNegotiationSessionStartEvent(\n sessionId: string,\n payload: Omit<NegotiationSessionStartEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationSessionStartEvent {\n return createStreamEvent<NegotiationSessionStartEvent>(\n \"negotiation_session_start\",\n sessionId,\n payload,\n );\n}\n\nexport function createNegotiationSessionEndEvent(\n sessionId: string,\n payload: Omit<NegotiationSessionEndEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationSessionEndEvent {\n return createStreamEvent<NegotiationSessionEndEvent>(\n \"negotiation_session_end\",\n sessionId,\n payload,\n );\n}\n\nexport function createNegotiationTurnEvent(\n sessionId: string,\n payload: Omit<NegotiationTurnEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationTurnEvent {\n return createStreamEvent<NegotiationTurnEvent>(\"negotiation_turn\", sessionId, payload);\n}\n\nexport function createNegotiationOutcomeEvent(\n sessionId: string,\n payload: Omit<NegotiationOutcomeEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationOutcomeEvent {\n return createStreamEvent<NegotiationOutcomeEvent>(\n \"negotiation_outcome\",\n sessionId,\n payload,\n );\n}\n\nexport function createChatSummarizerStartEvent(\n sessionId: string,\n payload: ChatSummarizerStartEvent[\"payload\"],\n): ChatSummarizerStartEvent {\n return createStreamEvent<ChatSummarizerStartEvent>(\"chat_summarizer_start\", sessionId, { payload });\n}\n\nexport function createChatSummarizerEndEvent(\n sessionId: string,\n payload: ChatSummarizerEndEvent[\"payload\"],\n): ChatSummarizerEndEvent {\n return createStreamEvent<ChatSummarizerEndEvent>(\"chat_summarizer_end\", sessionId, { payload });\n}\n\nexport function createQuestionGeneratorStartEvent(\n sessionId: string,\n payload: QuestionGeneratorStartEvent[\"payload\"],\n): QuestionGeneratorStartEvent {\n return createStreamEvent<QuestionGeneratorStartEvent>(\"question_generator_start\", sessionId, { payload });\n}\n\nexport function createQuestionGeneratorEndEvent(\n sessionId: string,\n payload: QuestionGeneratorEndEvent[\"payload\"],\n): QuestionGeneratorEndEvent {\n return createStreamEvent<QuestionGeneratorEndEvent>(\"question_generator_end\", sessionId, { payload });\n}\n\nexport function createDecisionQuestionsEvent(\n sessionId: string,\n payload: { questions: Question[] },\n): DecisionQuestionsEvent {\n return createStreamEvent<DecisionQuestionsEvent>(\"decision_questions\", sessionId, payload);\n}\n"]}
1
+ {"version":3,"file":"chat-streaming.types.js","sourceRoot":"/","sources":["chat/chat-streaming.types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SSE Event types for Chat Graph streaming.\n *\n * These types define the structure of events sent during streaming chat responses.\n * Events are sent as Server-Sent Events (SSE) with JSON payloads.\n */\n\nimport type { Question, QuestionStrategy } from \"../shared/schemas/question.schema.js\";\n\n// Event type discriminator\nexport type ChatStreamEventType =\n | \"status\"\n | \"routing\"\n | \"thinking\"\n | \"subgraph_start\"\n | \"subgraph_result\"\n | \"token\"\n | \"done\"\n | \"error\"\n // Agent Loop Architecture events\n | \"tool_start\"\n | \"tool_end\"\n | \"agent_thinking\"\n // Streaming narration events\n | \"tool_activity\"\n // Agent loop trace events\n | \"iteration_start\"\n | \"llm_start\"\n | \"llm_end\"\n // Internal response tracking events\n | \"response_complete\"\n | \"response_reset\"\n // Debug meta (per-turn graph/tool usage for copy debug)\n | \"debug_meta\"\n | \"graph_start\"\n | \"graph_end\"\n | \"phase_start\"\n | \"phase_end\"\n | \"agent_start\"\n | \"agent_end\"\n | \"hallucination_detected\"\n // Orchestrator-inline negotiation trace events\n | \"negotiation_session_start\"\n | \"negotiation_session_end\"\n | \"negotiation_turn\"\n | \"negotiation_outcome\"\n // Discovery decision-question events\n | \"chat_summarizer_start\"\n | \"chat_summarizer_end\"\n | \"question_generator_start\"\n | \"question_generator_end\"\n | \"decision_questions\"\n // Steer-or-queue interrupt event\n | \"steer_or_queue\";\n\n/**\n * Base interface for all chat stream events.\n */\nexport interface ChatStreamEventBase {\n /** Event type discriminator */\n type: ChatStreamEventType;\n /** Session ID for the chat session */\n sessionId: string;\n /** ISO 8601 timestamp */\n timestamp: string;\n}\n\n/**\n * Status event - sent to indicate processing state changes.\n */\nexport interface StatusEvent extends ChatStreamEventBase {\n type: \"status\";\n /** Human-readable status message */\n message: string;\n}\n\n/**\n * Routing event - sent when the router determines which subgraph to use.\n */\nexport interface RoutingEvent extends ChatStreamEventBase {\n type: \"routing\";\n /** Target subgraph name */\n target: string;\n /** Optional reasoning for the routing decision */\n reasoning?: string;\n}\n\n/**\n * Thinking event - sent to stream the model's reasoning and decision-making process.\n */\nexport interface ThinkingEvent extends ChatStreamEventBase {\n type: \"thinking\";\n /** The thinking/reasoning content */\n content: string;\n /** Optional step identifier (e.g., 'router', 'inference', 'verification') */\n step?: string;\n}\n\n/**\n * Subgraph start event - sent when a subgraph begins processing.\n */\nexport interface SubgraphStartEvent extends ChatStreamEventBase {\n type: \"subgraph_start\";\n /** Name of the subgraph being executed */\n subgraph: string;\n}\n\n/**\n * Subgraph result event - sent when a subgraph completes with results.\n */\nexport interface SubgraphResultEvent extends ChatStreamEventBase {\n type: \"subgraph_result\";\n /** Name of the subgraph that completed */\n subgraph: string;\n /** Result data from the subgraph */\n data: Record<string, unknown>;\n}\n\n/**\n * Token event - sent for each token during streaming response.\n */\nexport interface TokenEvent extends ChatStreamEventBase {\n type: \"token\";\n /** Token content (partial text) */\n content: string;\n}\n\n/**\n * Chat suggestion for follow-up actions.\n * Matches frontend Suggestion type (label, type, followupText/prefill).\n */\nexport interface ChatSuggestion {\n label: string;\n type: \"direct\" | \"prompt\";\n /** For 'direct' type: text to auto-submit as next message */\n followupText?: string;\n /** For 'prompt' type: text to prefill the input */\n prefill?: string;\n}\n\n/**\n * Rich opportunity card data for chat messages.\n * Matches the home page card format for consistent rendering.\n */\nexport interface OpportunityCardPayload {\n opportunityId: string;\n userId: string;\n name?: string;\n avatar?: string | null;\n /** Main body text (personalizedSummary from presenter). */\n mainText: string;\n /** Call-to-action line (suggestedAction from presenter). */\n cta?: string;\n /** Short headline hook. */\n headline?: string;\n /** Label for primary action button (e.g. \"Start Chat\"). */\n primaryActionLabel?: string;\n /** Label for secondary action button (e.g. \"Skip\"). */\n secondaryActionLabel?: string;\n /** Subtitle under the other party name (e.g. \"1 mutual intent\"). */\n mutualIntentsLabel?: string;\n /** Narrator chip for human-introduced opportunities. */\n narratorChip?: {\n name: string;\n text: string;\n avatar?: string | null;\n userId?: string;\n };\n /** Viewer's role in this opportunity. */\n viewerRole?: string;\n /** Match confidence score (0-1). */\n score?: number;\n /** Opportunity status. */\n status?: string;\n /** Second party in introducer arrow layout (name -> name). Present when viewerRole is 'introducer'. */\n secondParty?: {\n name: string;\n avatar?: string | null;\n userId?: string;\n };\n}\n\n/**\n * Done event - sent when the response is complete.\n */\nexport interface DoneEvent extends ChatStreamEventBase {\n type: \"done\";\n /** Complete response text */\n response: string;\n /** Server-generated assistant message ID (for trace event persistence) */\n messageId?: string;\n /** Optional routing decision metadata */\n routingDecision?: Record<string, unknown>;\n /** Optional subgraph results metadata */\n subgraphResults?: Record<string, unknown>;\n /** Optional session title (auto-generated or existing) */\n title?: string;\n /** Optional context-aware follow-up suggestions */\n suggestions?: ChatSuggestion[];\n /** Optional rich opportunity cards returned by tools */\n opportunityCards?: OpportunityCardPayload[];\n /** Decision questions to render (orchestrator flow only). */\n decisionQuestions?: Question[];\n}\n\n/**\n * Error event - sent when an error occurs.\n */\nexport interface ErrorEvent extends ChatStreamEventBase {\n type: \"error\";\n /** Human-readable error message */\n message: string;\n /** Optional error code for programmatic handling */\n code?: string;\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP ARCHITECTURE EVENTS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Tool start event - sent when a tool begins executing.\n */\nexport interface ToolStartEvent extends ChatStreamEventBase {\n type: \"tool_start\";\n /** Name of the tool being executed */\n toolName: string;\n /** Arguments passed to the tool */\n toolArgs: Record<string, unknown>;\n}\n\n/**\n * Tool end event - sent when a tool finishes executing.\n */\nexport interface ToolEndEvent extends ChatStreamEventBase {\n type: \"tool_end\";\n /** Name of the tool that completed */\n toolName: string;\n /** Whether the tool execution succeeded */\n success: boolean;\n /** Brief summary of the result */\n resultSummary?: string;\n}\n\n/**\n * Agent thinking event - sent between agent iterations.\n */\nexport interface AgentThinkingEvent extends ChatStreamEventBase {\n type: \"agent_thinking\";\n /** Current iteration number */\n iteration: number;\n /** Tools used in this iteration */\n toolsUsed: string[];\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP TRACE EVENTS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Iteration start event - emitted when a new agent loop iteration begins.\n */\nexport interface IterationStartEvent extends ChatStreamEventBase {\n type: \"iteration_start\";\n iteration: number;\n}\n\n/**\n * LLM start event - emitted when the LLM begins generating a response.\n */\nexport interface LlmStartEvent extends ChatStreamEventBase {\n type: \"llm_start\";\n iteration: number;\n}\n\n/**\n * LLM end event - emitted when the LLM finishes generating (may include tool calls).\n */\nexport interface LlmEndEvent extends ChatStreamEventBase {\n type: \"llm_end\";\n iteration: number;\n hasToolCalls: boolean;\n toolNames?: string[];\n}\n\n/**\n * Tool activity event - inline narration of tool execution.\n * Sent as the agent streams its response, replacing the old ThinkingDropdown.\n */\nexport interface ToolActivityEvent extends ChatStreamEventBase {\n type: \"tool_activity\";\n /** Internal tool name */\n toolName: string;\n /** User-friendly description (e.g. \"Looking up your profile...\") */\n description: string;\n /** Whether the tool is starting or has finished */\n phase: \"start\" | \"end\";\n /** Whether the tool succeeded (present when phase === 'end') */\n success?: boolean;\n /** Brief result summary (present when phase === 'end') */\n summary?: string;\n /** Internal steps executed by this tool (present when phase === 'end') */\n steps?: DebugMetaStep[];\n}\n\n/**\n * Internal event carrying the agent's authoritative final response text.\n * Emitted by the streamer after the graph completes. Not forwarded to the frontend SSE stream.\n */\nexport interface ResponseCompleteEvent extends ChatStreamEventBase {\n type: \"response_complete\";\n /** The agent's final response text (from the last iteration only) */\n response: string;\n}\n\n/**\n * Response reset event — tells the frontend to discard all previously streamed tokens.\n * Emitted when the agent detects hallucinated code blocks and forces a correction iteration.\n */\nexport interface ResponseResetEvent extends ChatStreamEventBase {\n type: \"response_reset\";\n /** Human-readable reason for the reset */\n reason: string;\n}\n\n/**\n * Hallucination detected event — tells the frontend that the agent caught a\n * hallucinated code block and is auto-invoking the correct tool.\n */\nexport interface HallucinationDetectedEvent extends ChatStreamEventBase {\n type: \"hallucination_detected\";\n /** The type of block that was hallucinated (e.g. \"intent_proposal\", \"opportunity\") */\n blockType: string;\n /** The tool being auto-invoked to recover */\n tool: string;\n}\n\n/**\n * One internal step reported by a tool for debug visibility (e.g. subgraph, subtask).\n */\nexport interface DebugMetaStep {\n step: string;\n detail?: string;\n /** Structured data for rich display (e.g., Felicity scores, classification, candidate info). */\n data?: Record<string, unknown>;\n}\n\n/**\n * One agent invocation recorded inside a graph run.\n */\nexport interface DebugMetaAgent {\n /** Name of the agent (e.g. \"opportunity.evaluator\"). */\n name: string;\n /** Wall-clock milliseconds for this agent invocation. */\n durationMs: number;\n}\n\n/**\n * One graph invocation recorded by a tool that calls a LangGraph graph.\n */\nexport interface DebugMetaGraph {\n /** Name of the graph (e.g. \"opportunity\"). */\n name: string;\n /** Wall-clock milliseconds for the full graph run. */\n durationMs: number;\n /** Agent invocations recorded inside this graph run. */\n agents: DebugMetaAgent[];\n}\n\n/**\n * One tool call entry in debug meta (sanitized args, result summary, optional steps).\n */\nexport interface DebugMetaToolCall {\n name: string;\n args: Record<string, unknown>;\n resultSummary: string;\n success: boolean;\n /** Wall-clock milliseconds for the full tool execution. */\n durationMs: number;\n /** Internal steps (subgraphs, subtasks) when the tool reports debugSteps in its result. */\n steps?: DebugMetaStep[];\n /** LangGraph graphs invoked by this tool, with their agent timings. */\n graphs?: DebugMetaGraph[];\n}\n\n/**\n * LLM call statistics accumulated during a single agent turn.\n */\nexport interface DebugMetaLlm {\n /** Total number of LLM calls made in this turn. */\n calls: number;\n /** Cumulative wall-clock time spent waiting for the LLM across all calls. */\n totalDurationMs: number;\n /** Entries recorded each time a response_reset event was emitted. */\n resets: Array<{ reason: string; at: number }>;\n /** Entries recorded each time a hallucination_detected event was emitted. */\n hallucinations: Array<{ blockType: string; tool: string; at: number }>;\n}\n\n/**\n * Negotiation sessions initiated by the orchestrator during this turn.\n */\nexport interface DebugMetaOrchestratorNegotiations {\n /** Opportunity IDs for which a negotiation_session_start was emitted. */\n opportunityIds: string[];\n}\n\n/**\n * Decision-question generation debug data (orchestrator path only).\n */\nexport interface DebugMetaDiscoveryQuestions {\n inputMode: \"transcripts\" | \"insights\";\n finalCount: number;\n strategies: QuestionStrategy[];\n durationMs: number;\n}\n\n/**\n * Debug meta event - per-turn graph and tool usage for copy debug.\n */\nexport interface DebugMetaEvent extends ChatStreamEventBase {\n type: \"debug_meta\";\n graph: string;\n iterations: number;\n tools: DebugMetaToolCall[];\n llm: DebugMetaLlm;\n orchestratorNegotiations?: DebugMetaOrchestratorNegotiations;\n /** Decision-question generation debug data (orchestrator path only). */\n discoveryQuestions?: DebugMetaDiscoveryQuestions;\n}\n\n/** Graph start event — emitted when a LangGraph sub-graph begins inside a tool. */\nexport interface GraphStartEvent extends ChatStreamEventBase {\n type: \"graph_start\";\n graphName: string;\n}\n\n/** Graph end event — emitted when a LangGraph sub-graph completes. */\nexport interface GraphEndEvent extends ChatStreamEventBase {\n type: \"graph_end\";\n graphName: string;\n durationMs: number;\n}\n\n/**\n * Phase start event — emitted when a logical groupings of inline work begins\n * inside a tool. Phases share container semantics with graphs (they can host\n * agents) but render differently in the trace UI so users can tell them\n * apart from LangGraph state machines.\n */\nexport interface PhaseStartEvent extends ChatStreamEventBase {\n type: \"phase_start\";\n phaseName: string;\n}\n\n/** Phase end event — emitted when a logical phase completes. */\nexport interface PhaseEndEvent extends ChatStreamEventBase {\n type: \"phase_end\";\n phaseName: string;\n durationMs: number;\n}\n\n/** Agent start event — emitted when an LLM agent begins inside a graph node. */\nexport interface AgentStartEvent extends ChatStreamEventBase {\n type: \"agent_start\";\n agentName: string;\n}\n\n/** Agent end event — emitted when an LLM agent completes. */\nexport interface AgentEndEvent extends ChatStreamEventBase {\n type: \"agent_end\";\n agentName: string;\n durationMs: number;\n /** Structured outcome summary, e.g. \"5 of 12 passed\" or \"3 intents extracted\". */\n summary: string;\n}\n\n/** Orchestrator per-candidate negotiation wrapper — emitted from `negotiateCandidates`. */\nexport interface NegotiationSessionStartEvent extends ChatStreamEventBase {\n type: \"negotiation_session_start\";\n opportunityId: string;\n negotiationConversationId: string;\n sourceUserId: string;\n candidateUserId: string;\n candidateName?: string;\n trigger: \"orchestrator\" | \"ambient\";\n startedAt: number;\n}\n\nexport interface NegotiationSessionEndEvent extends ChatStreamEventBase {\n type: \"negotiation_session_end\";\n opportunityId: string;\n negotiationConversationId: string;\n durationMs: number;\n}\n\n/** One turn inside a bilateral negotiation. Emitted by the negotiation graph's turn node. */\nexport interface NegotiationTurnEvent extends ChatStreamEventBase {\n type: \"negotiation_turn\";\n opportunityId: string;\n negotiationConversationId: string;\n turnIndex: number;\n actor: \"source\" | \"candidate\";\n action: \"propose\" | \"accept\" | \"reject\" | \"counter\" | \"question\";\n reasoning?: string;\n message?: string;\n suggestedRoles?: { ownUser?: string; otherUser?: string };\n durationMs: number;\n}\n\nexport interface NegotiationOutcomeEvent extends ChatStreamEventBase {\n type: \"negotiation_outcome\";\n opportunityId: string;\n outcome:\n | \"accepted\"\n | \"rejected_stalled\"\n | \"waiting_for_agent\"\n | \"timed_out\"\n | \"turn_cap\";\n turnCount: number;\n reasoning?: string;\n agreedRoles?: { ownUser?: string; otherUser?: string };\n}\n\nexport interface ChatSummarizerStartEvent extends ChatStreamEventBase {\n type: \"chat_summarizer_start\";\n payload: { sessionId: string };\n}\n\nexport interface ChatSummarizerEndEvent extends ChatStreamEventBase {\n type: \"chat_summarizer_end\";\n payload: {\n durationMs: number;\n };\n}\n\nexport interface QuestionGeneratorStartEvent extends ChatStreamEventBase {\n type: \"question_generator_start\";\n payload: {\n inputMode: \"transcripts\" | \"insights\";\n negotiationCount: number;\n hasChatContext: boolean;\n truncated?: { originalCount: number; keptCount: number };\n };\n}\n\nexport interface QuestionGeneratorEndEvent extends ChatStreamEventBase {\n type: \"question_generator_end\";\n payload: {\n finalCount: number;\n strategies: QuestionStrategy[];\n durationMs: number;\n inputMode: \"transcripts\" | \"insights\";\n };\n}\n\nexport interface DecisionQuestionsEvent extends ChatStreamEventBase {\n type: \"decision_questions\";\n questions: Question[];\n}\n\n/**\n * Steer-or-queue event — injected into the active SSE stream by the /chat/interrupt\n * endpoint after the classifier runs. The frontend holds the mid-stream message as\n * \"pending\" until this event arrives, then acts on the decision.\n */\nexport interface SteerOrQueueEvent extends ChatStreamEventBase {\n type: \"steer_or_queue\";\n /** Classifier decision: interrupt and restart, or buffer until current run completes. */\n decision: \"steer\" | \"queue\";\n /** Echoed from the interrupt request so the frontend can update the correct pending message. */\n messageId: string;\n}\n\n/**\n * Union type of all chat stream events.\n */\nexport type ChatStreamEvent =\n | StatusEvent\n | RoutingEvent\n | ThinkingEvent\n | SubgraphStartEvent\n | SubgraphResultEvent\n | TokenEvent\n | DoneEvent\n | ErrorEvent\n // Agent Loop Architecture events\n | ToolStartEvent\n | ToolEndEvent\n | AgentThinkingEvent\n // Streaming narration events\n | ToolActivityEvent\n // Agent loop trace events\n | IterationStartEvent\n | LlmStartEvent\n | LlmEndEvent\n // Internal response tracking events\n | ResponseCompleteEvent\n | ResponseResetEvent\n | HallucinationDetectedEvent\n // Debug meta\n | DebugMetaEvent\n // Trace hierarchy events\n | GraphStartEvent\n | GraphEndEvent\n | PhaseStartEvent\n | PhaseEndEvent\n | AgentStartEvent\n | AgentEndEvent\n | NegotiationSessionStartEvent\n | NegotiationSessionEndEvent\n | NegotiationTurnEvent\n | NegotiationOutcomeEvent\n | ChatSummarizerStartEvent\n | ChatSummarizerEndEvent\n | QuestionGeneratorStartEvent\n | QuestionGeneratorEndEvent\n | DecisionQuestionsEvent\n | SteerOrQueueEvent;\n\n/**\n * Formats a chat stream event as an SSE message. If JSON.stringify throws (e.g. circular ref,\n * non-serializable value), returns a minimal error event so the stream stays valid.\n *\n * @param event - The event to format\n * @returns SSE-formatted string with \"data: \" prefix and double newline\n */\nexport function formatSSEEvent(event: ChatStreamEvent): string {\n try {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n } catch (serializeError) {\n const fallback: ErrorEvent = {\n type: \"error\",\n sessionId:\n typeof (event as ChatStreamEventBase).sessionId === \"string\"\n ? (event as ChatStreamEventBase).sessionId\n : \"unknown\",\n timestamp: new Date().toISOString(),\n message: \"Response could not be serialized. Please try again.\",\n code: \"SERIALIZATION_ERROR\",\n };\n return `data: ${JSON.stringify(fallback)}\\n\\n`;\n }\n}\n\n/**\n * Creates a chat stream event with common fields populated.\n *\n * @param type - Event type\n * @param sessionId - Session ID\n * @param data - Event-specific data (excluding type, sessionId, timestamp)\n * @returns Complete event object\n *\n * @example\n * ```ts\n * const statusEvent = createStreamEvent<StatusEvent>('status', 'session-123', {\n * message: 'Processing your request...'\n * });\n * ```\n */\nexport function createStreamEvent<T extends ChatStreamEvent>(\n type: T[\"type\"],\n sessionId: string,\n data: Omit<T, \"type\" | \"sessionId\" | \"timestamp\">,\n): T {\n return {\n ...data,\n type,\n sessionId,\n timestamp: new Date().toISOString(),\n } as T;\n}\n\n/**\n * Type guard to check if an event is a specific type.\n */\nexport function isEventType<T extends ChatStreamEvent>(\n event: ChatStreamEvent,\n type: T[\"type\"],\n): event is T {\n return event.type === type;\n}\n\n/**\n * Creates a formatted status event.\n */\nexport function createStatusEvent(\n sessionId: string,\n message: string,\n): StatusEvent {\n return createStreamEvent<StatusEvent>(\"status\", sessionId, { message });\n}\n\n/**\n * Creates a formatted routing event.\n */\nexport function createRoutingEvent(\n sessionId: string,\n target: string,\n reasoning?: string,\n): RoutingEvent {\n return createStreamEvent<RoutingEvent>(\"routing\", sessionId, {\n target,\n reasoning,\n });\n}\n\n/**\n * Creates a formatted subgraph start event.\n */\nexport function createSubgraphStartEvent(\n sessionId: string,\n subgraph: string,\n): SubgraphStartEvent {\n return createStreamEvent<SubgraphStartEvent>(\"subgraph_start\", sessionId, {\n subgraph,\n });\n}\n\n/**\n * Creates a formatted subgraph result event.\n */\nexport function createSubgraphResultEvent(\n sessionId: string,\n subgraph: string,\n data: Record<string, unknown>,\n): SubgraphResultEvent {\n return createStreamEvent<SubgraphResultEvent>(\"subgraph_result\", sessionId, {\n subgraph,\n data,\n });\n}\n\n/**\n * Creates a formatted token event.\n */\nexport function createTokenEvent(\n sessionId: string,\n content: string,\n): TokenEvent {\n return createStreamEvent<TokenEvent>(\"token\", sessionId, { content });\n}\n\n/**\n * Options for the done event (optional metadata).\n */\nexport interface CreateDoneEventOptions {\n messageId?: string;\n routingDecision?: Record<string, unknown>;\n subgraphResults?: Record<string, unknown>;\n title?: string;\n suggestions?: ChatSuggestion[];\n opportunityCards?: OpportunityCardPayload[];\n decisionQuestions?: Question[];\n}\n\n/**\n * Creates a formatted done event.\n */\nexport function createDoneEvent(\n sessionId: string,\n response: string,\n options?: CreateDoneEventOptions,\n): DoneEvent {\n return createStreamEvent<DoneEvent>(\"done\", sessionId, {\n ...options,\n response,\n });\n}\n\n/**\n * Creates a formatted error event.\n */\nexport function createErrorEvent(\n sessionId: string,\n message: string,\n code?: string,\n): ErrorEvent {\n return createStreamEvent<ErrorEvent>(\"error\", sessionId, { message, code });\n}\n\n/**\n * Creates a formatted thinking event.\n */\nexport function createThinkingEvent(\n sessionId: string,\n content: string,\n step?: string,\n): ThinkingEvent {\n return createStreamEvent<ThinkingEvent>(\"thinking\", sessionId, {\n content,\n step,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted tool start event.\n */\nexport function createToolStartEvent(\n sessionId: string,\n toolName: string,\n toolArgs: Record<string, unknown>,\n): ToolStartEvent {\n return createStreamEvent<ToolStartEvent>(\"tool_start\", sessionId, {\n toolName,\n toolArgs,\n });\n}\n\n/**\n * Creates a formatted tool end event.\n */\nexport function createToolEndEvent(\n sessionId: string,\n toolName: string,\n success: boolean,\n resultSummary?: string,\n): ToolEndEvent {\n return createStreamEvent<ToolEndEvent>(\"tool_end\", sessionId, {\n toolName,\n success,\n resultSummary,\n });\n}\n\n/**\n * Creates a formatted agent thinking event.\n */\nexport function createAgentThinkingEvent(\n sessionId: string,\n iteration: number,\n toolsUsed: string[],\n): AgentThinkingEvent {\n return createStreamEvent<AgentThinkingEvent>(\"agent_thinking\", sessionId, {\n iteration,\n toolsUsed,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// AGENT LOOP TRACE EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted iteration start event.\n */\nexport function createIterationStartEvent(\n sessionId: string,\n iteration: number,\n): IterationStartEvent {\n return createStreamEvent<IterationStartEvent>(\"iteration_start\", sessionId, {\n iteration,\n });\n}\n\n/**\n * Creates a formatted LLM start event.\n */\nexport function createLlmStartEvent(\n sessionId: string,\n iteration: number,\n): LlmStartEvent {\n return createStreamEvent<LlmStartEvent>(\"llm_start\", sessionId, {\n iteration,\n });\n}\n\n/**\n * Creates a formatted LLM end event.\n */\nexport function createLlmEndEvent(\n sessionId: string,\n iteration: number,\n hasToolCalls: boolean,\n toolNames?: string[],\n): LlmEndEvent {\n return createStreamEvent<LlmEndEvent>(\"llm_end\", sessionId, {\n iteration,\n hasToolCalls,\n toolNames,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// STREAMING NARRATION EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted tool activity event (inline narration).\n */\nexport function createToolActivityEvent(\n sessionId: string,\n toolName: string,\n description: string,\n phase: \"start\" | \"end\",\n success?: boolean,\n summary?: string,\n steps?: DebugMetaStep[],\n): ToolActivityEvent {\n return createStreamEvent<ToolActivityEvent>(\"tool_activity\", sessionId, {\n toolName,\n description,\n phase,\n success,\n summary,\n steps,\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// INTERNAL RESPONSE TRACKING EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted response complete event.\n */\nexport function createResponseCompleteEvent(\n sessionId: string,\n response: string,\n): ResponseCompleteEvent {\n return createStreamEvent<ResponseCompleteEvent>(\"response_complete\", sessionId, { response });\n}\n\n/**\n * Creates a formatted response reset event.\n * Tells the frontend to discard all previously streamed tokens.\n */\nexport function createResponseResetEvent(\n sessionId: string,\n reason: string,\n): ResponseResetEvent {\n return createStreamEvent<ResponseResetEvent>(\"response_reset\", sessionId, { reason });\n}\n\n/**\n * Creates a hallucination detected event for the trace panel.\n */\nexport function createHallucinationDetectedEvent(\n sessionId: string,\n blockType: string,\n tool: string,\n): HallucinationDetectedEvent {\n return createStreamEvent<HallucinationDetectedEvent>(\"hallucination_detected\", sessionId, { blockType, tool });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// DEBUG META EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a formatted debug meta event (per-turn graph and tool usage).\n */\nexport function createDebugMetaEvent(\n sessionId: string,\n graph: string,\n iterations: number,\n tools: DebugMetaToolCall[],\n llm: DebugMetaLlm,\n orchestratorNegotiations?: DebugMetaOrchestratorNegotiations,\n discoveryQuestions?: DebugMetaDiscoveryQuestions,\n): DebugMetaEvent {\n return createStreamEvent<DebugMetaEvent>(\"debug_meta\", sessionId, {\n graph,\n iterations,\n tools,\n llm,\n ...(orchestratorNegotiations !== undefined && { orchestratorNegotiations }),\n ...(discoveryQuestions !== undefined && { discoveryQuestions }),\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// TRACE HIERARCHY EVENT CREATORS\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Creates a graph start event emitted when a LangGraph sub-graph begins inside a tool.\n */\nexport function createGraphStartEvent(sessionId: string, graphName: string): GraphStartEvent {\n return createStreamEvent<GraphStartEvent>(\"graph_start\", sessionId, { graphName });\n}\n\n/**\n * Creates a graph end event emitted when a LangGraph sub-graph completes.\n */\nexport function createGraphEndEvent(sessionId: string, graphName: string, durationMs: number): GraphEndEvent {\n return createStreamEvent<GraphEndEvent>(\"graph_end\", sessionId, { graphName, durationMs });\n}\n\nexport function createPhaseStartEvent(sessionId: string, phaseName: string): PhaseStartEvent {\n return createStreamEvent<PhaseStartEvent>(\"phase_start\", sessionId, { phaseName });\n}\n\nexport function createPhaseEndEvent(sessionId: string, phaseName: string, durationMs: number): PhaseEndEvent {\n return createStreamEvent<PhaseEndEvent>(\"phase_end\", sessionId, { phaseName, durationMs });\n}\n\n/**\n * Creates an agent start event emitted when an LLM agent begins inside a graph node.\n */\nexport function createAgentStartEvent(sessionId: string, agentName: string): AgentStartEvent {\n return createStreamEvent<AgentStartEvent>(\"agent_start\", sessionId, { agentName });\n}\n\n/**\n * Creates an agent end event emitted when an LLM agent completes.\n */\nexport function createAgentEndEvent(\n sessionId: string,\n agentName: string,\n durationMs: number,\n summary: string,\n): AgentEndEvent {\n return createStreamEvent<AgentEndEvent>(\"agent_end\", sessionId, { agentName, durationMs, summary });\n}\n\nexport function createNegotiationSessionStartEvent(\n sessionId: string,\n payload: Omit<NegotiationSessionStartEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationSessionStartEvent {\n return createStreamEvent<NegotiationSessionStartEvent>(\n \"negotiation_session_start\",\n sessionId,\n payload,\n );\n}\n\nexport function createNegotiationSessionEndEvent(\n sessionId: string,\n payload: Omit<NegotiationSessionEndEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationSessionEndEvent {\n return createStreamEvent<NegotiationSessionEndEvent>(\n \"negotiation_session_end\",\n sessionId,\n payload,\n );\n}\n\nexport function createNegotiationTurnEvent(\n sessionId: string,\n payload: Omit<NegotiationTurnEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationTurnEvent {\n return createStreamEvent<NegotiationTurnEvent>(\"negotiation_turn\", sessionId, payload);\n}\n\nexport function createNegotiationOutcomeEvent(\n sessionId: string,\n payload: Omit<NegotiationOutcomeEvent, \"type\" | \"sessionId\" | \"timestamp\">,\n): NegotiationOutcomeEvent {\n return createStreamEvent<NegotiationOutcomeEvent>(\n \"negotiation_outcome\",\n sessionId,\n payload,\n );\n}\n\nexport function createChatSummarizerStartEvent(\n sessionId: string,\n payload: ChatSummarizerStartEvent[\"payload\"],\n): ChatSummarizerStartEvent {\n return createStreamEvent<ChatSummarizerStartEvent>(\"chat_summarizer_start\", sessionId, { payload });\n}\n\nexport function createChatSummarizerEndEvent(\n sessionId: string,\n payload: ChatSummarizerEndEvent[\"payload\"],\n): ChatSummarizerEndEvent {\n return createStreamEvent<ChatSummarizerEndEvent>(\"chat_summarizer_end\", sessionId, { payload });\n}\n\nexport function createQuestionGeneratorStartEvent(\n sessionId: string,\n payload: QuestionGeneratorStartEvent[\"payload\"],\n): QuestionGeneratorStartEvent {\n return createStreamEvent<QuestionGeneratorStartEvent>(\"question_generator_start\", sessionId, { payload });\n}\n\nexport function createQuestionGeneratorEndEvent(\n sessionId: string,\n payload: QuestionGeneratorEndEvent[\"payload\"],\n): QuestionGeneratorEndEvent {\n return createStreamEvent<QuestionGeneratorEndEvent>(\"question_generator_end\", sessionId, { payload });\n}\n\nexport function createDecisionQuestionsEvent(\n sessionId: string,\n payload: { questions: Question[] },\n): DecisionQuestionsEvent {\n return createStreamEvent<DecisionQuestionsEvent>(\"decision_questions\", sessionId, payload);\n}\n\n/**\n * Creates a steer-or-queue event injected into the active stream by the interrupt endpoint.\n */\nexport function createSteerOrQueueEvent(\n sessionId: string,\n decision: \"steer\" | \"queue\",\n messageId: string,\n): SteerOrQueueEvent {\n return createStreamEvent<SteerOrQueueEvent>(\"steer_or_queue\", sessionId, {\n decision,\n messageId,\n });\n}\n"]}
@@ -336,6 +336,8 @@ export declare class ChatGraphFactory {
336
336
  role: "assistant" | "user";
337
337
  content: string;
338
338
  }>;
339
+ /** Per-run identifier used to form a composite LangGraph thread_id (sessionId:runId). */
340
+ runId?: string;
339
341
  }, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal): AsyncGenerator<import("./chat-streaming.types.js").ChatStreamEvent, void, any>;
340
342
  /**
341
343
  * Streams chat events from the graph execution.
@@ -1 +1 @@
1
- {"version":3,"file":"chat.graph.d.ts","sourceRoot":"/","sources":["chat/chat.graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,mBAAmB,EAAgC,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAGrE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA2BpE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAPtB,OAAO,CAAC,gBAAgB,CAAe;gBAG7B,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,iBAAiB,EAC9B,YAAY,EAAE,YAAY;IAQpC;;;OAGG;IACI,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIlB;;;;OAIG;IACI,oBAAoB,CAAC,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ9D;;;;;;;OAOG;IACU,kBAAkB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC;IA4CzB;;;OAGG;IACW,2BAA2B,CACvC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1E,EACD,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW;IAKtB;;;OAGG;IACW,gBAAgB,CAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,EAClD,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW;IAKtB;;;OAGG;IACH,OAAO,CAAC,UAAU;CA4InB"}
1
+ {"version":3,"file":"chat.graph.d.ts","sourceRoot":"/","sources":["chat/chat.graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,mBAAmB,EAAgC,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAGrE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA2BpE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAPtB,OAAO,CAAC,gBAAgB,CAAe;gBAG7B,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,iBAAiB,EAC9B,YAAY,EAAE,YAAY;IAQpC;;;OAGG;IACI,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIlB;;;;OAIG;IACI,oBAAoB,CAAC,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ9D;;;;;;;OAOG;IACU,kBAAkB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC;IA4CzB;;;OAGG;IACW,2BAA2B,CACvC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzE,yFAAyF;QACzF,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW;IAKtB;;;OAGG;IACW,gBAAgB,CAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,EAClD,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW;IAKtB;;;OAGG;IACH,OAAO,CAAC,UAAU;CA4InB"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat.graph.js","sourceRoot":"/","sources":["chat/chat.graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { StateGraph, START, END, BaseCheckpointSaver, type LangGraphRunnableConfig } from \"@langchain/langgraph\";\nimport { BaseMessage, HumanMessage } from \"@langchain/core/messages\";\nimport { ChatGraphState } from \"./chat.state.js\";\nimport { ChatAgent } from \"./chat.agent.js\";\nimport type { ChatGraphCompositeDatabase } from \"../shared/interfaces/database.interface.js\";\nimport type { Embedder } from \"../shared/interfaces/embedder.interface.js\";\nimport type { Scraper } from \"../shared/interfaces/scraper.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport type { ChatSessionReader } from \"../shared/interfaces/chat-session.interface.js\";\nimport type { ProtocolDeps } from \"../shared/agent/tool.helpers.js\";\nimport { truncateToTokenLimit, MAX_CONTEXT_TOKENS } from \"./chat.utils.js\";\nimport { ChatStreamer } from \"./chat.streamer.js\";\nimport { timed } from \"../shared/observability/performance.js\";\n\nconst logger = protocolLogger(\"ChatGraphFactory\");\n\nfunction isRetriableError(err: unknown): boolean {\n const status =\n (err as { status?: number }).status ?? (err as { statusCode?: number }).statusCode;\n if (typeof status === \"number\" && status >= 500 && status <= 599) return true;\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n return (\n lower.includes(\"internal server error\") ||\n /\\b500\\b|status[: ]*500/i.test(msg) ||\n lower.includes(\"econnreset\") ||\n lower.includes(\"etimedout\")\n );\n}\n\nconst RETRY_DELAY_MS = 800;\n\n// ══════════════════════════════════════════════════════════════════════════════\n// CHAT GRAPH FACTORY (Agent Loop Architecture)\n// ══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Factory class to build and compile the Chat Graph.\n * \n * Architecture: ReAct-Style Agent Loop\n * \n * The graph contains a single node that runs an agent loop:\n * 1. Agent receives messages (conversation + tool results)\n * 2. Agent decides: call tools OR respond to user\n * 3. If tools called → execute → add results → loop back\n * 4. If response → exit loop → stream to user\n * \n * This replaces the previous 17-node conditional routing architecture\n * with a flexible, LLM-driven approach that can handle multi-step\n * reasoning and self-correction.\n */\nexport class ChatGraphFactory {\n private streamingService: ChatStreamer;\n\n constructor(\n private database: ChatGraphCompositeDatabase,\n private embedder: Embedder,\n private scraper: Scraper,\n private chatSession: ChatSessionReader,\n private protocolDeps: ProtocolDeps,\n ) {\n this.streamingService = new ChatStreamer(\n (sessionId, maxMessages) => this.loadSessionContext(sessionId, maxMessages),\n (checkpointer) => this.createStreamingGraph(checkpointer)\n );\n }\n\n /**\n * Creates and compiles the Chat Graph without persistence.\n * @returns Compiled StateGraph ready for invocation\n */\n public createGraph() {\n return this.buildGraph().compile();\n }\n\n /**\n * Creates a streaming-enabled graph with optional checkpointer for persistence.\n * @param checkpointer - Optional checkpointer (e.g., MemorySaver or PostgresSaver)\n * @returns Compiled StateGraph ready for streaming\n */\n public createStreamingGraph(checkpointer?: BaseCheckpointSaver) {\n const graph = this.buildGraph();\n if (checkpointer) {\n return graph.compile({ checkpointer });\n }\n return graph.compile();\n }\n\n /**\n * Load previous messages from a session and convert to LangChain messages.\n * Handles token truncation to fit within context window limits.\n *\n * @param sessionId - The session ID to load context from\n * @param maxMessages - Maximum number of messages to load (default: 20)\n * @returns Array of LangChain BaseMessage objects\n */\n public async loadSessionContext(\n sessionId: string,\n maxMessages: number = 20\n ): Promise<BaseMessage[]> {\n logger.verbose(\"Loading session context\", {\n sessionId,\n maxMessages,\n });\n\n try {\n const messages = await this.chatSession.getSessionMessages(sessionId, maxMessages);\n\n if (messages.length === 0) {\n logger.verbose(\"No previous messages found\", { sessionId });\n return [];\n }\n\n // Convert database messages to LangChain format\n const langchainMessages = messages.map((msg) => {\n if (msg.role === \"user\") {\n return new HumanMessage(msg.content);\n } else if (msg.role === \"assistant\") {\n return new HumanMessage(msg.content); // Using HumanMessage to avoid circular dependency\n } else {\n return new HumanMessage(msg.content);\n }\n });\n\n // Truncate to fit within token limits\n const truncatedMessages = truncateToTokenLimit(langchainMessages, MAX_CONTEXT_TOKENS);\n\n logger.verbose(\"Context loaded\", {\n sessionId,\n originalCount: messages.length,\n truncatedCount: truncatedMessages.length,\n });\n return truncatedMessages;\n } catch (error) {\n logger.error(\"Failed to load context\", {\n sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Return empty array on error - don't fail the entire request\n return [];\n }\n }\n\n /**\n * Streams chat events with full session context.\n * Delegates to ChatGraphStreamingService.\n */\n public async *streamChatEventsWithContext(\n input: {\n userId: string;\n message: string;\n sessionId: string;\n maxContextMessages?: number;\n networkId?: string;\n prefillMessages?: Array<{ role: \"assistant\" | \"user\"; content: string }>;\n },\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ) {\n yield* this.streamingService.streamChatEventsWithContext(input, checkpointer, signal);\n }\n\n /**\n * Streams chat events from the graph execution.\n * Delegates to ChatGraphStreamingService.\n */\n public async *streamChatEvents(\n input: { userId: string; messages: BaseMessage[] },\n sessionId: string,\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ) {\n yield* this.streamingService.streamChatEvents(input, sessionId, checkpointer, signal);\n }\n\n /**\n * Internal method to build the graph structure.\n * @returns Uncompiled StateGraph\n */\n private buildGraph() {\n const database = this.database;\n const embedder = this.embedder;\n const scraper = this.scraper;\n const protocolDeps = this.protocolDeps;\n\n // ─────────────────────────────────────────────────────────────────────────\n // AGENT LOOP NODE\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * The main agent loop node.\n * Runs a ReAct-style agent that calls tools until it decides to respond.\n *\n * Uses `agent.streamRun()` + `config.writer` so that text tokens and\n * tool-activity events are pushed into the graph's custom stream in\n * real-time rather than batched at the end.\n */\n const agentLoopNode = async (\n state: typeof ChatGraphState.State,\n config: LangGraphRunnableConfig\n ) => {\n return timed(\"ChatGraph.agentLoop\", async () => {\n logger.verbose(\"Agent loop starting\", {\n userId: state.userId,\n messageCount: state.messages.length,\n currentIteration: state.iterationCount\n });\n\n const runLoop = async () => {\n const networkId = state.networkId;\n const agent = await ChatAgent.create({\n ...protocolDeps,\n userId: state.userId,\n database,\n embedder,\n scraper,\n networkId,\n sessionId: state.sessionId,\n } as import(\"../shared/agent/tool.helpers.js\").ToolContext);\n // Direct streaming writer - emit events immediately instead of buffering\n const directWriter = (data: unknown) => {\n try {\n config.writer?.(data);\n } catch {\n /* swallow if writer is gone */\n }\n };\n // Get signal from configurable (passed by streamer via graph.stream() config)\n const signal = config.configurable?.signal as AbortSignal | undefined;\n const result = await agent.streamRun(state.messages, directWriter, signal);\n return result;\n };\n\n try {\n const result = await runLoop();\n logger.debug(\"Agent streamRun result\", {\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n messageCount: result.messages.length,\n });\n logger.verbose(\"Agent loop complete\", {\n userId: state.userId,\n iterations: result.iterationCount,\n responseLength: result.responseText.length\n });\n return {\n messages: result.messages,\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n shouldContinue: false,\n debugMeta: result.debugMeta,\n };\n } catch (error) {\n if (isRetriableError(error)) {\n const signal = config.configurable?.signal as AbortSignal | undefined;\n if (signal?.aborted) {\n return {\n error: \"Request aborted\",\n responseText: \"\",\n shouldContinue: false,\n };\n }\n logger.warn(\"Agent loop failed with retriable error, retrying once\", {\n userId: state.userId,\n error: error instanceof Error ? error.message : String(error)\n });\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\n try {\n const result = await runLoop();\n logger.verbose(\"Agent loop complete after retry\", {\n userId: state.userId,\n iterations: result.iterationCount,\n });\n return {\n messages: result.messages,\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n shouldContinue: false,\n debugMeta: result.debugMeta,\n };\n } catch (retryError) {\n logger.error(\"Agent loop failed on retry\", {\n userId: state.userId,\n error: retryError instanceof Error ? retryError.message : String(retryError)\n });\n return {\n error: retryError instanceof Error ? retryError.message : \"Agent loop failed\",\n responseText: \"I apologize, but I encountered an issue processing your request. Please try again.\",\n shouldContinue: false\n };\n }\n }\n\n logger.error(\"Agent loop failed\", {\n userId: state.userId,\n error: error instanceof Error ? error.message : String(error)\n });\n\n return {\n error: error instanceof Error ? error.message : \"Agent loop failed\",\n responseText: \"I apologize, but I encountered an issue processing your request. Please try again.\",\n shouldContinue: false\n };\n }\n });\n };\n\n // ─────────────────────────────────────────────────────────────────────────\n // GRAPH ASSEMBLY\n // ─────────────────────────────────────────────────────────────────────────\n\n const workflow = new StateGraph(ChatGraphState)\n .addNode(\"agent_loop\", agentLoopNode)\n .addEdge(START, \"agent_loop\")\n .addEdge(\"agent_loop\", END);\n\n logger.verbose(\"Graph built successfully (agent loop architecture)\");\n return workflow;\n }\n}\n"]}
1
+ {"version":3,"file":"chat.graph.js","sourceRoot":"/","sources":["chat/chat.graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { StateGraph, START, END, BaseCheckpointSaver, type LangGraphRunnableConfig } from \"@langchain/langgraph\";\nimport { BaseMessage, HumanMessage } from \"@langchain/core/messages\";\nimport { ChatGraphState } from \"./chat.state.js\";\nimport { ChatAgent } from \"./chat.agent.js\";\nimport type { ChatGraphCompositeDatabase } from \"../shared/interfaces/database.interface.js\";\nimport type { Embedder } from \"../shared/interfaces/embedder.interface.js\";\nimport type { Scraper } from \"../shared/interfaces/scraper.interface.js\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport type { ChatSessionReader } from \"../shared/interfaces/chat-session.interface.js\";\nimport type { ProtocolDeps } from \"../shared/agent/tool.helpers.js\";\nimport { truncateToTokenLimit, MAX_CONTEXT_TOKENS } from \"./chat.utils.js\";\nimport { ChatStreamer } from \"./chat.streamer.js\";\nimport { timed } from \"../shared/observability/performance.js\";\n\nconst logger = protocolLogger(\"ChatGraphFactory\");\n\nfunction isRetriableError(err: unknown): boolean {\n const status =\n (err as { status?: number }).status ?? (err as { statusCode?: number }).statusCode;\n if (typeof status === \"number\" && status >= 500 && status <= 599) return true;\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n return (\n lower.includes(\"internal server error\") ||\n /\\b500\\b|status[: ]*500/i.test(msg) ||\n lower.includes(\"econnreset\") ||\n lower.includes(\"etimedout\")\n );\n}\n\nconst RETRY_DELAY_MS = 800;\n\n// ══════════════════════════════════════════════════════════════════════════════\n// CHAT GRAPH FACTORY (Agent Loop Architecture)\n// ══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Factory class to build and compile the Chat Graph.\n * \n * Architecture: ReAct-Style Agent Loop\n * \n * The graph contains a single node that runs an agent loop:\n * 1. Agent receives messages (conversation + tool results)\n * 2. Agent decides: call tools OR respond to user\n * 3. If tools called → execute → add results → loop back\n * 4. If response → exit loop → stream to user\n * \n * This replaces the previous 17-node conditional routing architecture\n * with a flexible, LLM-driven approach that can handle multi-step\n * reasoning and self-correction.\n */\nexport class ChatGraphFactory {\n private streamingService: ChatStreamer;\n\n constructor(\n private database: ChatGraphCompositeDatabase,\n private embedder: Embedder,\n private scraper: Scraper,\n private chatSession: ChatSessionReader,\n private protocolDeps: ProtocolDeps,\n ) {\n this.streamingService = new ChatStreamer(\n (sessionId, maxMessages) => this.loadSessionContext(sessionId, maxMessages),\n (checkpointer) => this.createStreamingGraph(checkpointer)\n );\n }\n\n /**\n * Creates and compiles the Chat Graph without persistence.\n * @returns Compiled StateGraph ready for invocation\n */\n public createGraph() {\n return this.buildGraph().compile();\n }\n\n /**\n * Creates a streaming-enabled graph with optional checkpointer for persistence.\n * @param checkpointer - Optional checkpointer (e.g., MemorySaver or PostgresSaver)\n * @returns Compiled StateGraph ready for streaming\n */\n public createStreamingGraph(checkpointer?: BaseCheckpointSaver) {\n const graph = this.buildGraph();\n if (checkpointer) {\n return graph.compile({ checkpointer });\n }\n return graph.compile();\n }\n\n /**\n * Load previous messages from a session and convert to LangChain messages.\n * Handles token truncation to fit within context window limits.\n *\n * @param sessionId - The session ID to load context from\n * @param maxMessages - Maximum number of messages to load (default: 20)\n * @returns Array of LangChain BaseMessage objects\n */\n public async loadSessionContext(\n sessionId: string,\n maxMessages: number = 20\n ): Promise<BaseMessage[]> {\n logger.verbose(\"Loading session context\", {\n sessionId,\n maxMessages,\n });\n\n try {\n const messages = await this.chatSession.getSessionMessages(sessionId, maxMessages);\n\n if (messages.length === 0) {\n logger.verbose(\"No previous messages found\", { sessionId });\n return [];\n }\n\n // Convert database messages to LangChain format\n const langchainMessages = messages.map((msg) => {\n if (msg.role === \"user\") {\n return new HumanMessage(msg.content);\n } else if (msg.role === \"assistant\") {\n return new HumanMessage(msg.content); // Using HumanMessage to avoid circular dependency\n } else {\n return new HumanMessage(msg.content);\n }\n });\n\n // Truncate to fit within token limits\n const truncatedMessages = truncateToTokenLimit(langchainMessages, MAX_CONTEXT_TOKENS);\n\n logger.verbose(\"Context loaded\", {\n sessionId,\n originalCount: messages.length,\n truncatedCount: truncatedMessages.length,\n });\n return truncatedMessages;\n } catch (error) {\n logger.error(\"Failed to load context\", {\n sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Return empty array on error - don't fail the entire request\n return [];\n }\n }\n\n /**\n * Streams chat events with full session context.\n * Delegates to ChatGraphStreamingService.\n */\n public async *streamChatEventsWithContext(\n input: {\n userId: string;\n message: string;\n sessionId: string;\n maxContextMessages?: number;\n networkId?: string;\n prefillMessages?: Array<{ role: \"assistant\" | \"user\"; content: string }>;\n /** Per-run identifier used to form a composite LangGraph thread_id (sessionId:runId). */\n runId?: string;\n },\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ) {\n yield* this.streamingService.streamChatEventsWithContext(input, checkpointer, signal);\n }\n\n /**\n * Streams chat events from the graph execution.\n * Delegates to ChatGraphStreamingService.\n */\n public async *streamChatEvents(\n input: { userId: string; messages: BaseMessage[] },\n sessionId: string,\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ) {\n yield* this.streamingService.streamChatEvents(input, sessionId, checkpointer, signal);\n }\n\n /**\n * Internal method to build the graph structure.\n * @returns Uncompiled StateGraph\n */\n private buildGraph() {\n const database = this.database;\n const embedder = this.embedder;\n const scraper = this.scraper;\n const protocolDeps = this.protocolDeps;\n\n // ─────────────────────────────────────────────────────────────────────────\n // AGENT LOOP NODE\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * The main agent loop node.\n * Runs a ReAct-style agent that calls tools until it decides to respond.\n *\n * Uses `agent.streamRun()` + `config.writer` so that text tokens and\n * tool-activity events are pushed into the graph's custom stream in\n * real-time rather than batched at the end.\n */\n const agentLoopNode = async (\n state: typeof ChatGraphState.State,\n config: LangGraphRunnableConfig\n ) => {\n return timed(\"ChatGraph.agentLoop\", async () => {\n logger.verbose(\"Agent loop starting\", {\n userId: state.userId,\n messageCount: state.messages.length,\n currentIteration: state.iterationCount\n });\n\n const runLoop = async () => {\n const networkId = state.networkId;\n const agent = await ChatAgent.create({\n ...protocolDeps,\n userId: state.userId,\n database,\n embedder,\n scraper,\n networkId,\n sessionId: state.sessionId,\n } as import(\"../shared/agent/tool.helpers.js\").ToolContext);\n // Direct streaming writer - emit events immediately instead of buffering\n const directWriter = (data: unknown) => {\n try {\n config.writer?.(data);\n } catch {\n /* swallow if writer is gone */\n }\n };\n // Get signal from configurable (passed by streamer via graph.stream() config)\n const signal = config.configurable?.signal as AbortSignal | undefined;\n const result = await agent.streamRun(state.messages, directWriter, signal);\n return result;\n };\n\n try {\n const result = await runLoop();\n logger.debug(\"Agent streamRun result\", {\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n messageCount: result.messages.length,\n });\n logger.verbose(\"Agent loop complete\", {\n userId: state.userId,\n iterations: result.iterationCount,\n responseLength: result.responseText.length\n });\n return {\n messages: result.messages,\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n shouldContinue: false,\n debugMeta: result.debugMeta,\n };\n } catch (error) {\n if (isRetriableError(error)) {\n const signal = config.configurable?.signal as AbortSignal | undefined;\n if (signal?.aborted) {\n return {\n error: \"Request aborted\",\n responseText: \"\",\n shouldContinue: false,\n };\n }\n logger.warn(\"Agent loop failed with retriable error, retrying once\", {\n userId: state.userId,\n error: error instanceof Error ? error.message : String(error)\n });\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\n try {\n const result = await runLoop();\n logger.verbose(\"Agent loop complete after retry\", {\n userId: state.userId,\n iterations: result.iterationCount,\n });\n return {\n messages: result.messages,\n responseText: result.responseText,\n iterationCount: result.iterationCount,\n shouldContinue: false,\n debugMeta: result.debugMeta,\n };\n } catch (retryError) {\n logger.error(\"Agent loop failed on retry\", {\n userId: state.userId,\n error: retryError instanceof Error ? retryError.message : String(retryError)\n });\n return {\n error: retryError instanceof Error ? retryError.message : \"Agent loop failed\",\n responseText: \"I apologize, but I encountered an issue processing your request. Please try again.\",\n shouldContinue: false\n };\n }\n }\n\n logger.error(\"Agent loop failed\", {\n userId: state.userId,\n error: error instanceof Error ? error.message : String(error)\n });\n\n return {\n error: error instanceof Error ? error.message : \"Agent loop failed\",\n responseText: \"I apologize, but I encountered an issue processing your request. Please try again.\",\n shouldContinue: false\n };\n }\n });\n };\n\n // ─────────────────────────────────────────────────────────────────────────\n // GRAPH ASSEMBLY\n // ─────────────────────────────────────────────────────────────────────────\n\n const workflow = new StateGraph(ChatGraphState)\n .addNode(\"agent_loop\", agentLoopNode)\n .addEdge(START, \"agent_loop\")\n .addEdge(\"agent_loop\", END);\n\n logger.verbose(\"Graph built successfully (agent loop architecture)\");\n return workflow;\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ export interface ClassifyInterruptInput {
2
+ /** The new user message sent while the agent is running. */
3
+ message: string;
4
+ /**
5
+ * Current agent activity summary derived from the last few SSE trace event names
6
+ * (e.g. "tool_start: discover_opportunities, graph_start: opportunity").
7
+ */
8
+ agentState: string;
9
+ }
10
+ /**
11
+ * Binary classifier that decides whether a mid-stream user message should steer
12
+ * (interrupt the current run) or queue (buffer until the run completes).
13
+ * Uses a low-temperature, minimal-token model for sub-1 s latency.
14
+ */
15
+ export declare class ChatInterruptClassifier {
16
+ private model;
17
+ constructor();
18
+ /**
19
+ * Classify a mid-stream interrupt as steer or queue.
20
+ *
21
+ * @param input - The new message and current agent state context
22
+ * @returns "steer" to interrupt the current run; "queue" to buffer
23
+ */
24
+ classify(input: ClassifyInterruptInput): Promise<"steer" | "queue">;
25
+ }
26
+ //# sourceMappingURL=chat.interrupt.classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.interrupt.classifier.d.ts","sourceRoot":"/","sources":["chat/chat.interrupt.classifier.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,KAAK,CAAa;;IAM1B;;;;;OAKG;IAEG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;CA0B1E"}
@@ -0,0 +1,67 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { HumanMessage, SystemMessage } from "@langchain/core/messages";
11
+ import { log } from "../shared/observability/log.js";
12
+ import { Timed } from "../shared/observability/performance.js";
13
+ import { createModel } from "../shared/agent/model.config.js";
14
+ import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
15
+ const logger = log.lib.from("ChatInterruptClassifier");
16
+ const SYSTEM_PROMPT = `You decide whether a new user message sent during an active AI process should STEER or QUEUE.
17
+
18
+ Rules:
19
+ - Reply with ONLY one word: steer or queue (lowercase).
20
+ - STEER: the message redirects, corrects, stops, contradicts, or changes what the AI is doing. Keywords: "wait", "stop", "actually", "ignore that", "instead", "no", "cancel".
21
+ - QUEUE: the message adds context, asks a follow-up, or complements what the AI is doing. Keywords: "also", "and", "when done", "additionally", "plus".
22
+ - When ambiguous, default to steer.`;
23
+ /**
24
+ * Binary classifier that decides whether a mid-stream user message should steer
25
+ * (interrupt the current run) or queue (buffer until the run completes).
26
+ * Uses a low-temperature, minimal-token model for sub-1 s latency.
27
+ */
28
+ export class ChatInterruptClassifier {
29
+ constructor() {
30
+ this.model = createModel("interruptClassifier");
31
+ }
32
+ /**
33
+ * Classify a mid-stream interrupt as steer or queue.
34
+ *
35
+ * @param input - The new message and current agent state context
36
+ * @returns "steer" to interrupt the current run; "queue" to buffer
37
+ */
38
+ async classify(input) {
39
+ const { message, agentState } = input;
40
+ try {
41
+ const response = await invokeWithAbortSignal(this.model, [
42
+ new SystemMessage(SYSTEM_PROMPT),
43
+ new HumanMessage(`Current agent activity: ${agentState || "idle"}\n\nNew user message: "${message.slice(0, 500)}"\n\nDecision:`),
44
+ ]);
45
+ const text = typeof response.content === "string"
46
+ ? response.content.trim().toLowerCase()
47
+ : String(response.content ?? "").trim().toLowerCase();
48
+ if (text.startsWith("queue"))
49
+ return "queue";
50
+ // Default to steer on any ambiguity or unexpected output
51
+ return "steer";
52
+ }
53
+ catch (error) {
54
+ logger.warn("[ChatInterruptClassifier.classify] Classification failed, defaulting to steer", {
55
+ error: error instanceof Error ? error.message : String(error),
56
+ });
57
+ return "steer";
58
+ }
59
+ }
60
+ }
61
+ __decorate([
62
+ Timed(),
63
+ __metadata("design:type", Function),
64
+ __metadata("design:paramtypes", [Object]),
65
+ __metadata("design:returntype", Promise)
66
+ ], ChatInterruptClassifier.prototype, "classify", null);
67
+ //# sourceMappingURL=chat.interrupt.classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.interrupt.classifier.js","sourceRoot":"/","sources":["chat/chat.interrupt.classifier.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAEvD,MAAM,aAAa,GAAG;;;;;;oCAMc,CAAC;AAYrC;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAGlC;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IAEG,AAAN,KAAK,CAAC,QAAQ,CAAC,KAA6B;QAC1C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;gBACvD,IAAI,aAAa,CAAC,aAAa,CAAC;gBAChC,IAAI,YAAY,CACd,2BAA2B,UAAU,IAAI,MAAM,0BAA0B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAC/G;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,GACR,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;gBAClC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;gBACvC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE1D,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC;YAC7C,yDAAyD;YACzD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,+EAA+E,EAAE;gBAC3F,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;CACF;AA1BO;IADL,KAAK,EAAE;;;;uDA0BP","sourcesContent":["import type { ChatOpenAI } from \"@langchain/openai\";\nimport { HumanMessage, SystemMessage } from \"@langchain/core/messages\";\n\nimport { log } from \"../shared/observability/log.js\";\nimport { Timed } from \"../shared/observability/performance.js\";\nimport { createModel } from \"../shared/agent/model.config.js\";\nimport { invokeWithAbortSignal } from \"../shared/agent/model-signal.js\";\n\nconst logger = log.lib.from(\"ChatInterruptClassifier\");\n\nconst SYSTEM_PROMPT = `You decide whether a new user message sent during an active AI process should STEER or QUEUE.\n\nRules:\n- Reply with ONLY one word: steer or queue (lowercase).\n- STEER: the message redirects, corrects, stops, contradicts, or changes what the AI is doing. Keywords: \"wait\", \"stop\", \"actually\", \"ignore that\", \"instead\", \"no\", \"cancel\".\n- QUEUE: the message adds context, asks a follow-up, or complements what the AI is doing. Keywords: \"also\", \"and\", \"when done\", \"additionally\", \"plus\".\n- When ambiguous, default to steer.`;\n\nexport interface ClassifyInterruptInput {\n /** The new user message sent while the agent is running. */\n message: string;\n /**\n * Current agent activity summary derived from the last few SSE trace event names\n * (e.g. \"tool_start: discover_opportunities, graph_start: opportunity\").\n */\n agentState: string;\n}\n\n/**\n * Binary classifier that decides whether a mid-stream user message should steer\n * (interrupt the current run) or queue (buffer until the run completes).\n * Uses a low-temperature, minimal-token model for sub-1 s latency.\n */\nexport class ChatInterruptClassifier {\n private model: ChatOpenAI;\n\n constructor() {\n this.model = createModel(\"interruptClassifier\");\n }\n\n /**\n * Classify a mid-stream interrupt as steer or queue.\n *\n * @param input - The new message and current agent state context\n * @returns \"steer\" to interrupt the current run; \"queue\" to buffer\n */\n @Timed()\n async classify(input: ClassifyInterruptInput): Promise<\"steer\" | \"queue\"> {\n const { message, agentState } = input;\n\n try {\n const response = await invokeWithAbortSignal(this.model, [\n new SystemMessage(SYSTEM_PROMPT),\n new HumanMessage(\n `Current agent activity: ${agentState || \"idle\"}\\n\\nNew user message: \"${message.slice(0, 500)}\"\\n\\nDecision:`,\n ),\n ]);\n\n const text =\n typeof response.content === \"string\"\n ? response.content.trim().toLowerCase()\n : String(response.content ?? \"\").trim().toLowerCase();\n\n if (text.startsWith(\"queue\")) return \"queue\";\n // Default to steer on any ambiguity or unexpected output\n return \"steer\";\n } catch (error) {\n logger.warn(\"[ChatInterruptClassifier.classify] Classification failed, defaulting to steer\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return \"steer\";\n }\n }\n}\n"]}
@@ -32,6 +32,10 @@ export declare class ChatStreamer {
32
32
  role: "assistant" | "user";
33
33
  content: string;
34
34
  }>;
35
+ /** Per-run identifier used to form a composite LangGraph thread_id (sessionId:runId).
36
+ * When provided, prevents stale checkpoint state from a prior run being resumed.
37
+ * Defaults to sessionId alone when absent (backward compatible). */
38
+ runId?: string;
35
39
  }, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
36
40
  /**
37
41
  * Streams chat events from the graph execution.
@@ -50,6 +54,6 @@ export declare class ChatStreamer {
50
54
  userId: string;
51
55
  messages: BaseMessage[];
52
56
  networkId?: string;
53
- }, sessionId: string, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal): AsyncGenerator<ChatStreamEvent>;
57
+ }, sessionId: string, checkpointer?: BaseCheckpointSaver, signal?: AbortSignal, threadId?: string): AsyncGenerator<ChatStreamEvent>;
54
58
  }
55
59
  //# sourceMappingURL=chat.streamer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.streamer.d.ts","sourceRoot":"/","sources":["chat/chat.streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,2BAA2B,CAAC;AAiCnC;;;;;;;GAOG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;gBAJpB,kBAAkB,EAAE,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,WAAW,EAAE,CAAC,EACnB,oBAAoB,EAAE,CAC5B,YAAY,CAAC,EAAE,mBAAmB,KAC/B,GAAG;IAGV;;;;;;;;OAQG;IACW,2BAA2B,CACvC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1E,EACD,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,CAAC;IA4DlC;;;;;;;;;;;;OAYG;IACW,gBAAgB,CAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACtE,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,CAAC;CAqMnC"}
1
+ {"version":3,"file":"chat.streamer.d.ts","sourceRoot":"/","sources":["chat/chat.streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,2BAA2B,CAAC;AAiCnC;;;;;;;GAOG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;gBAJpB,kBAAkB,EAAE,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,WAAW,EAAE,CAAC,EACnB,oBAAoB,EAAE,CAC5B,YAAY,CAAC,EAAE,mBAAmB,KAC/B,GAAG;IAGV;;;;;;;;OAQG;IACW,2BAA2B,CACvC,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzE;;4EAEoE;QACpE,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,CAAC;IAiElC;;;;;;;;;;;;OAYG;IACW,gBAAgB,CAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EACtE,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAAC,eAAe,CAAC;CAqMnC"}
@@ -28,7 +28,7 @@ export class ChatStreamer {
28
28
  * @yields ChatStreamEvent objects
29
29
  */
30
30
  async *streamChatEventsWithContext(input, checkpointer, signal) {
31
- const { userId, message, sessionId, maxContextMessages = 20, networkId, prefillMessages, } = input;
31
+ const { userId, message, sessionId, maxContextMessages = 20, networkId, prefillMessages, runId, } = input;
32
32
  logger.verbose("Starting context-aware streaming", {
33
33
  userId,
34
34
  sessionId,
@@ -49,8 +49,10 @@ export class ChatStreamer {
49
49
  previousCount: previousMessages.length,
50
50
  totalCount: allMessages.length,
51
51
  });
52
+ // Form composite thread_id when a runId is provided
53
+ const threadId = runId ? `${sessionId}:${runId}` : sessionId;
52
54
  // Stream with context using the optional checkpointer
53
- yield* this.streamChatEvents({ userId, messages: allMessages, networkId }, sessionId, checkpointer, signal);
55
+ yield* this.streamChatEvents({ userId, messages: allMessages, networkId }, sessionId, checkpointer, signal, threadId);
54
56
  }
55
57
  catch (error) {
56
58
  logger.error("Stream error", {
@@ -74,7 +76,7 @@ export class ChatStreamer {
74
76
  * @param checkpointer - Optional checkpointer for persistence
75
77
  * @yields ChatStreamEvent objects
76
78
  */
77
- async *streamChatEvents(input, sessionId, checkpointer, signal) {
79
+ async *streamChatEvents(input, sessionId, checkpointer, signal, threadId) {
78
80
  const graph = this.createStreamingGraph(checkpointer);
79
81
  try {
80
82
  const initialState = {
@@ -88,7 +90,7 @@ export class ChatStreamer {
88
90
  // Custom events come from config.writer() inside agentLoopNode.
89
91
  const eventStream = await graph.stream(initialState, {
90
92
  streamMode: ["custom", "updates"],
91
- configurable: { thread_id: sessionId, signal },
93
+ configurable: { thread_id: threadId ?? sessionId, signal },
92
94
  signal,
93
95
  });
94
96
  // Emit initial status
@@ -1 +1 @@
1
- {"version":3,"file":"chat.streamer.js","sourceRoot":"/","sources":["chat/chat.streamer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AIMessage, BaseMessage, HumanMessage } from \"@langchain/core/messages\";\nimport { BaseCheckpointSaver } from \"@langchain/langgraph\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport type {\n ChatStreamEvent,\n DebugMetaDiscoveryQuestions,\n DebugMetaToolCall,\n DebugMetaLlm,\n DebugMetaOrchestratorNegotiations,\n} from \"./chat-streaming.types.js\";\nimport {\n createAgentEndEvent,\n createAgentStartEvent,\n createDebugMetaEvent,\n createDecisionQuestionsEvent,\n createErrorEvent,\n createGraphEndEvent,\n createPhaseStartEvent,\n createPhaseEndEvent,\n createGraphStartEvent,\n createIterationStartEvent,\n createLlmStartEvent,\n createLlmEndEvent,\n createResponseCompleteEvent,\n createResponseResetEvent,\n createHallucinationDetectedEvent,\n createStatusEvent,\n createTokenEvent,\n createToolActivityEvent,\n createChatSummarizerStartEvent,\n createChatSummarizerEndEvent,\n createQuestionGeneratorStartEvent,\n createQuestionGeneratorEndEvent,\n} from \"./chat-streaming.types.js\";\nimport type { AgentStreamEvent } from \"./chat.agent.js\";\n\nconst logger = protocolLogger(\"ChatStreamer\");\n\n// ══════════════════════════════════════════════════════════════════════════════\n// CHAT STREAMER (Streaming Narration Architecture)\n// ══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Top-level streaming service for Chat Graph events.\n *\n * Uses `graph.stream()` with `streamMode: [\"custom\", \"updates\"]` so that\n * the agent's `config.writer()` calls arrive as `\"custom\"` chunks (text\n * tokens and tool-activity events) and the final state update arrives as\n * an `\"updates\"` chunk.\n */\nexport class ChatStreamer {\n constructor(\n private loadSessionContext: (\n sessionId: string,\n maxMessages: number,\n ) => Promise<BaseMessage[]>,\n private createStreamingGraph: (\n checkpointer?: BaseCheckpointSaver,\n ) => any,\n ) {}\n\n /**\n * Streams chat events with full session context.\n * Loads previous conversation history and optionally uses a checkpointer\n * for state persistence.\n *\n * @param input - Configuration for context-aware streaming\n * @param checkpointer - Optional checkpointer for state persistence\n * @yields ChatStreamEvent objects\n */\n public async *streamChatEventsWithContext(\n input: {\n userId: string;\n message: string;\n sessionId: string;\n maxContextMessages?: number;\n networkId?: string;\n prefillMessages?: Array<{ role: \"assistant\" | \"user\"; content: string }>;\n },\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ): AsyncGenerator<ChatStreamEvent> {\n const {\n userId,\n message,\n sessionId,\n maxContextMessages = 20,\n networkId,\n prefillMessages,\n } = input;\n logger.verbose(\"Starting context-aware streaming\", {\n userId,\n sessionId,\n maxContextMessages,\n hasCheckpointer: !!checkpointer,\n hasIndexId: !!networkId,\n networkId: networkId ?? undefined,\n });\n\n try {\n // Load previous conversation context\n const previousMessages = await this.loadSessionContext(\n sessionId,\n maxContextMessages,\n );\n\n // Inject prefill messages (e.g. hardcoded onboarding greeting) only for fresh sessions\n const prefill: BaseMessage[] = previousMessages.length === 0\n ? (prefillMessages ?? []).map((pm) =>\n pm.role === \"assistant\" ? new AIMessage(pm.content) : new HumanMessage(pm.content),\n )\n : [];\n\n const allMessages = [...previousMessages, ...prefill, new HumanMessage(message)];\n\n logger.verbose(\"Context prepared\", {\n previousCount: previousMessages.length,\n totalCount: allMessages.length,\n });\n\n // Stream with context using the optional checkpointer\n yield* this.streamChatEvents(\n { userId, messages: allMessages, networkId },\n sessionId,\n checkpointer,\n signal,\n );\n } catch (error) {\n logger.error(\"Stream error\", {\n error: error instanceof Error ? error.message : String(error),\n });\n yield createErrorEvent(\n sessionId,\n error instanceof Error\n ? error.message\n : \"Unknown error during context-aware streaming\",\n \"CONTEXT_STREAM_ERROR\",\n );\n }\n }\n\n /**\n * Streams chat events from the graph execution.\n *\n * Uses `graph.stream()` with `streamMode: [\"custom\", \"updates\"]`:\n * - `\"custom\"` chunks carry {@link AgentStreamEvent} objects emitted by\n * `ChatAgent.streamRun()` via `config.writer()`\n * - `\"updates\"` chunks carry the final state update from `agentLoopNode`\n *\n * @param input - The input state for the graph (userId and messages)\n * @param sessionId - The session ID for event attribution\n * @param checkpointer - Optional checkpointer for persistence\n * @yields ChatStreamEvent objects\n */\n public async *streamChatEvents(\n input: { userId: string; messages: BaseMessage[]; networkId?: string },\n sessionId: string,\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ): AsyncGenerator<ChatStreamEvent> {\n const graph = this.createStreamingGraph(checkpointer);\n\n try {\n const initialState: {\n userId: string;\n messages: BaseMessage[];\n networkId?: string;\n sessionId?: string;\n } = {\n userId: input.userId,\n messages: input.messages,\n };\n if (input.networkId) initialState.networkId = input.networkId;\n initialState.sessionId = sessionId;\n\n // Use graph.stream() with custom + updates modes.\n // Custom events come from config.writer() inside agentLoopNode.\n const eventStream = await graph.stream(initialState, {\n streamMode: [\"custom\", \"updates\"] as const,\n configurable: { thread_id: sessionId, signal },\n signal,\n });\n\n // Emit initial status\n yield createStatusEvent(sessionId, \"Processing your message...\");\n\n for await (const tuple of eventStream) {\n if (signal?.aborted) break;\n // graph.stream with multiple modes yields [mode, chunk] tuples\n const [mode, chunk] = tuple as [string, unknown];\n\n // ─────────────────────────────────────────────────────────────────\n // CUSTOM: writer events from ChatAgent.streamRun()\n // ─────────────────────────────────────────────────────────────────\n if (mode === \"custom\") {\n const event = chunk as AgentStreamEvent;\n\n if (event.type === \"iteration_start\") {\n yield createIterationStartEvent(sessionId, event.iteration);\n }\n\n if (event.type === \"llm_start\") {\n yield createLlmStartEvent(sessionId, event.iteration);\n }\n\n if (event.type === \"text_chunk\" && event.content) {\n yield createTokenEvent(sessionId, event.content);\n }\n\n if (event.type === \"response_reset\") {\n yield createResponseResetEvent(sessionId, event.reason);\n }\n\n if (event.type === \"hallucination_detected\") {\n yield createHallucinationDetectedEvent(sessionId, event.blockType, event.tool);\n }\n\n if (event.type === \"llm_end\") {\n yield createLlmEndEvent(\n sessionId,\n event.iteration,\n event.hasToolCalls,\n event.toolNames,\n );\n }\n\n if (event.type === \"tool_activity\") {\n logger.debug(\"Tool activity\", { name: event.name, phase: event.phase });\n if (event.phase === \"start\") {\n yield createToolActivityEvent(\n sessionId,\n event.name,\n event.name,\n \"start\",\n );\n } else {\n yield createToolActivityEvent(\n sessionId,\n event.name,\n event.name,\n \"end\",\n event.success,\n event.summary,\n event.steps,\n );\n }\n }\n\n if (event.type === \"graph_start\") {\n yield createGraphStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"graph_end\") {\n yield createGraphEndEvent(sessionId, event.name, event.durationMs);\n }\n\n if (event.type === \"phase_start\") {\n yield createPhaseStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"phase_end\") {\n yield createPhaseEndEvent(sessionId, event.name, event.durationMs);\n }\n\n if (event.type === \"agent_start\") {\n yield createAgentStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"agent_end\") {\n yield createAgentEndEvent(sessionId, event.name, event.durationMs, event.summary);\n }\n\n if (event.type === \"decision_questions\") {\n yield createDecisionQuestionsEvent(sessionId, { questions: event.questions });\n }\n\n if (event.type === \"chat_summarizer_start\") {\n yield createChatSummarizerStartEvent(sessionId, event.payload);\n }\n\n if (event.type === \"chat_summarizer_end\") {\n yield createChatSummarizerEndEvent(sessionId, event.payload);\n }\n\n if (event.type === \"question_generator_start\") {\n yield createQuestionGeneratorStartEvent(sessionId, event.payload);\n }\n\n if (event.type === \"question_generator_end\") {\n yield createQuestionGeneratorEndEvent(sessionId, event.payload);\n }\n }\n\n // ─────────────────────────────────────────────────────────────────\n // UPDATES: final state from agentLoopNode\n // ─────────────────────────────────────────────────────────────────\n if (mode === \"updates\") {\n // The updates chunk is { agent_loop: { responseText, error, ... } }\n const updates = chunk as Record<string, Record<string, unknown>>;\n const agentOutput = updates?.agent_loop;\n\n if (agentOutput?.error) {\n logger.warn(\"Agent loop returned error via updates\", {\n error: agentOutput.error,\n });\n yield createErrorEvent(\n sessionId,\n String(agentOutput.error),\n \"AGENT_ERROR\",\n );\n }\n\n // Yield the agent's authoritative response text so the\n // controller can persist it without relying on token accumulation.\n const responseText = typeof agentOutput?.responseText === \"string\"\n ? (agentOutput.responseText as string)\n : \"\";\n yield createResponseCompleteEvent(sessionId, responseText);\n\n const debugMeta = agentOutput?.debugMeta as\n | { graph: string; iterations: number; tools?: DebugMetaToolCall[]; llm?: DebugMetaLlm; orchestratorNegotiations?: DebugMetaOrchestratorNegotiations; discoveryQuestions?: DebugMetaDiscoveryQuestions }\n | undefined;\n if (\n debugMeta?.graph != null &&\n typeof debugMeta.iterations === \"number\"\n ) {\n const llmFallback: DebugMetaLlm = { calls: 0, totalDurationMs: 0, resets: [], hallucinations: [] };\n yield createDebugMetaEvent(\n sessionId,\n debugMeta.graph,\n debugMeta.iterations,\n Array.isArray(debugMeta.tools) ? debugMeta.tools : [],\n debugMeta.llm ?? llmFallback,\n debugMeta.orchestratorNegotiations,\n debugMeta.discoveryQuestions,\n );\n }\n\n logger.verbose(\"Agent loop complete (updates)\", {\n responseLength: responseText.length,\n });\n }\n }\n } catch (error) {\n logger.error(\"Stream error\", {\n error: error instanceof Error ? error.message : String(error),\n });\n yield createErrorEvent(\n sessionId,\n error instanceof Error\n ? error.message\n : \"Unknown error during streaming\",\n \"STREAM_ERROR\",\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"chat.streamer.js","sourceRoot":"/","sources":["chat/chat.streamer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AIMessage, BaseMessage, HumanMessage } from \"@langchain/core/messages\";\nimport { BaseCheckpointSaver } from \"@langchain/langgraph\";\nimport { protocolLogger } from \"../shared/observability/protocol.logger.js\";\nimport type {\n ChatStreamEvent,\n DebugMetaDiscoveryQuestions,\n DebugMetaToolCall,\n DebugMetaLlm,\n DebugMetaOrchestratorNegotiations,\n} from \"./chat-streaming.types.js\";\nimport {\n createAgentEndEvent,\n createAgentStartEvent,\n createDebugMetaEvent,\n createDecisionQuestionsEvent,\n createErrorEvent,\n createGraphEndEvent,\n createPhaseStartEvent,\n createPhaseEndEvent,\n createGraphStartEvent,\n createIterationStartEvent,\n createLlmStartEvent,\n createLlmEndEvent,\n createResponseCompleteEvent,\n createResponseResetEvent,\n createHallucinationDetectedEvent,\n createStatusEvent,\n createTokenEvent,\n createToolActivityEvent,\n createChatSummarizerStartEvent,\n createChatSummarizerEndEvent,\n createQuestionGeneratorStartEvent,\n createQuestionGeneratorEndEvent,\n} from \"./chat-streaming.types.js\";\nimport type { AgentStreamEvent } from \"./chat.agent.js\";\n\nconst logger = protocolLogger(\"ChatStreamer\");\n\n// ══════════════════════════════════════════════════════════════════════════════\n// CHAT STREAMER (Streaming Narration Architecture)\n// ══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Top-level streaming service for Chat Graph events.\n *\n * Uses `graph.stream()` with `streamMode: [\"custom\", \"updates\"]` so that\n * the agent's `config.writer()` calls arrive as `\"custom\"` chunks (text\n * tokens and tool-activity events) and the final state update arrives as\n * an `\"updates\"` chunk.\n */\nexport class ChatStreamer {\n constructor(\n private loadSessionContext: (\n sessionId: string,\n maxMessages: number,\n ) => Promise<BaseMessage[]>,\n private createStreamingGraph: (\n checkpointer?: BaseCheckpointSaver,\n ) => any,\n ) {}\n\n /**\n * Streams chat events with full session context.\n * Loads previous conversation history and optionally uses a checkpointer\n * for state persistence.\n *\n * @param input - Configuration for context-aware streaming\n * @param checkpointer - Optional checkpointer for state persistence\n * @yields ChatStreamEvent objects\n */\n public async *streamChatEventsWithContext(\n input: {\n userId: string;\n message: string;\n sessionId: string;\n maxContextMessages?: number;\n networkId?: string;\n prefillMessages?: Array<{ role: \"assistant\" | \"user\"; content: string }>;\n /** Per-run identifier used to form a composite LangGraph thread_id (sessionId:runId).\n * When provided, prevents stale checkpoint state from a prior run being resumed.\n * Defaults to sessionId alone when absent (backward compatible). */\n runId?: string;\n },\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n ): AsyncGenerator<ChatStreamEvent> {\n const {\n userId,\n message,\n sessionId,\n maxContextMessages = 20,\n networkId,\n prefillMessages,\n runId,\n } = input;\n logger.verbose(\"Starting context-aware streaming\", {\n userId,\n sessionId,\n maxContextMessages,\n hasCheckpointer: !!checkpointer,\n hasIndexId: !!networkId,\n networkId: networkId ?? undefined,\n });\n\n try {\n // Load previous conversation context\n const previousMessages = await this.loadSessionContext(\n sessionId,\n maxContextMessages,\n );\n\n // Inject prefill messages (e.g. hardcoded onboarding greeting) only for fresh sessions\n const prefill: BaseMessage[] = previousMessages.length === 0\n ? (prefillMessages ?? []).map((pm) =>\n pm.role === \"assistant\" ? new AIMessage(pm.content) : new HumanMessage(pm.content),\n )\n : [];\n\n const allMessages = [...previousMessages, ...prefill, new HumanMessage(message)];\n\n logger.verbose(\"Context prepared\", {\n previousCount: previousMessages.length,\n totalCount: allMessages.length,\n });\n\n // Form composite thread_id when a runId is provided\n const threadId = runId ? `${sessionId}:${runId}` : sessionId;\n\n // Stream with context using the optional checkpointer\n yield* this.streamChatEvents(\n { userId, messages: allMessages, networkId },\n sessionId,\n checkpointer,\n signal,\n threadId,\n );\n } catch (error) {\n logger.error(\"Stream error\", {\n error: error instanceof Error ? error.message : String(error),\n });\n yield createErrorEvent(\n sessionId,\n error instanceof Error\n ? error.message\n : \"Unknown error during context-aware streaming\",\n \"CONTEXT_STREAM_ERROR\",\n );\n }\n }\n\n /**\n * Streams chat events from the graph execution.\n *\n * Uses `graph.stream()` with `streamMode: [\"custom\", \"updates\"]`:\n * - `\"custom\"` chunks carry {@link AgentStreamEvent} objects emitted by\n * `ChatAgent.streamRun()` via `config.writer()`\n * - `\"updates\"` chunks carry the final state update from `agentLoopNode`\n *\n * @param input - The input state for the graph (userId and messages)\n * @param sessionId - The session ID for event attribution\n * @param checkpointer - Optional checkpointer for persistence\n * @yields ChatStreamEvent objects\n */\n public async *streamChatEvents(\n input: { userId: string; messages: BaseMessage[]; networkId?: string },\n sessionId: string,\n checkpointer?: BaseCheckpointSaver,\n signal?: AbortSignal,\n threadId?: string,\n ): AsyncGenerator<ChatStreamEvent> {\n const graph = this.createStreamingGraph(checkpointer);\n\n try {\n const initialState: {\n userId: string;\n messages: BaseMessage[];\n networkId?: string;\n sessionId?: string;\n } = {\n userId: input.userId,\n messages: input.messages,\n };\n if (input.networkId) initialState.networkId = input.networkId;\n initialState.sessionId = sessionId;\n\n // Use graph.stream() with custom + updates modes.\n // Custom events come from config.writer() inside agentLoopNode.\n const eventStream = await graph.stream(initialState, {\n streamMode: [\"custom\", \"updates\"] as const,\n configurable: { thread_id: threadId ?? sessionId, signal },\n signal,\n });\n\n // Emit initial status\n yield createStatusEvent(sessionId, \"Processing your message...\");\n\n for await (const tuple of eventStream) {\n if (signal?.aborted) break;\n // graph.stream with multiple modes yields [mode, chunk] tuples\n const [mode, chunk] = tuple as [string, unknown];\n\n // ─────────────────────────────────────────────────────────────────\n // CUSTOM: writer events from ChatAgent.streamRun()\n // ─────────────────────────────────────────────────────────────────\n if (mode === \"custom\") {\n const event = chunk as AgentStreamEvent;\n\n if (event.type === \"iteration_start\") {\n yield createIterationStartEvent(sessionId, event.iteration);\n }\n\n if (event.type === \"llm_start\") {\n yield createLlmStartEvent(sessionId, event.iteration);\n }\n\n if (event.type === \"text_chunk\" && event.content) {\n yield createTokenEvent(sessionId, event.content);\n }\n\n if (event.type === \"response_reset\") {\n yield createResponseResetEvent(sessionId, event.reason);\n }\n\n if (event.type === \"hallucination_detected\") {\n yield createHallucinationDetectedEvent(sessionId, event.blockType, event.tool);\n }\n\n if (event.type === \"llm_end\") {\n yield createLlmEndEvent(\n sessionId,\n event.iteration,\n event.hasToolCalls,\n event.toolNames,\n );\n }\n\n if (event.type === \"tool_activity\") {\n logger.debug(\"Tool activity\", { name: event.name, phase: event.phase });\n if (event.phase === \"start\") {\n yield createToolActivityEvent(\n sessionId,\n event.name,\n event.name,\n \"start\",\n );\n } else {\n yield createToolActivityEvent(\n sessionId,\n event.name,\n event.name,\n \"end\",\n event.success,\n event.summary,\n event.steps,\n );\n }\n }\n\n if (event.type === \"graph_start\") {\n yield createGraphStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"graph_end\") {\n yield createGraphEndEvent(sessionId, event.name, event.durationMs);\n }\n\n if (event.type === \"phase_start\") {\n yield createPhaseStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"phase_end\") {\n yield createPhaseEndEvent(sessionId, event.name, event.durationMs);\n }\n\n if (event.type === \"agent_start\") {\n yield createAgentStartEvent(sessionId, event.name);\n }\n\n if (event.type === \"agent_end\") {\n yield createAgentEndEvent(sessionId, event.name, event.durationMs, event.summary);\n }\n\n if (event.type === \"decision_questions\") {\n yield createDecisionQuestionsEvent(sessionId, { questions: event.questions });\n }\n\n if (event.type === \"chat_summarizer_start\") {\n yield createChatSummarizerStartEvent(sessionId, event.payload);\n }\n\n if (event.type === \"chat_summarizer_end\") {\n yield createChatSummarizerEndEvent(sessionId, event.payload);\n }\n\n if (event.type === \"question_generator_start\") {\n yield createQuestionGeneratorStartEvent(sessionId, event.payload);\n }\n\n if (event.type === \"question_generator_end\") {\n yield createQuestionGeneratorEndEvent(sessionId, event.payload);\n }\n }\n\n // ─────────────────────────────────────────────────────────────────\n // UPDATES: final state from agentLoopNode\n // ─────────────────────────────────────────────────────────────────\n if (mode === \"updates\") {\n // The updates chunk is { agent_loop: { responseText, error, ... } }\n const updates = chunk as Record<string, Record<string, unknown>>;\n const agentOutput = updates?.agent_loop;\n\n if (agentOutput?.error) {\n logger.warn(\"Agent loop returned error via updates\", {\n error: agentOutput.error,\n });\n yield createErrorEvent(\n sessionId,\n String(agentOutput.error),\n \"AGENT_ERROR\",\n );\n }\n\n // Yield the agent's authoritative response text so the\n // controller can persist it without relying on token accumulation.\n const responseText = typeof agentOutput?.responseText === \"string\"\n ? (agentOutput.responseText as string)\n : \"\";\n yield createResponseCompleteEvent(sessionId, responseText);\n\n const debugMeta = agentOutput?.debugMeta as\n | { graph: string; iterations: number; tools?: DebugMetaToolCall[]; llm?: DebugMetaLlm; orchestratorNegotiations?: DebugMetaOrchestratorNegotiations; discoveryQuestions?: DebugMetaDiscoveryQuestions }\n | undefined;\n if (\n debugMeta?.graph != null &&\n typeof debugMeta.iterations === \"number\"\n ) {\n const llmFallback: DebugMetaLlm = { calls: 0, totalDurationMs: 0, resets: [], hallucinations: [] };\n yield createDebugMetaEvent(\n sessionId,\n debugMeta.graph,\n debugMeta.iterations,\n Array.isArray(debugMeta.tools) ? debugMeta.tools : [],\n debugMeta.llm ?? llmFallback,\n debugMeta.orchestratorNegotiations,\n debugMeta.discoveryQuestions,\n );\n }\n\n logger.verbose(\"Agent loop complete (updates)\", {\n responseLength: responseText.length,\n });\n }\n }\n } catch (error) {\n logger.error(\"Stream error\", {\n error: error instanceof Error ? error.message : String(error),\n });\n yield createErrorEvent(\n sessionId,\n error instanceof Error\n ? error.message\n : \"Unknown error during streaming\",\n \"STREAM_ERROR\",\n );\n }\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -62,6 +62,8 @@ export { PremiseGraphFactory } from "./premise/premise.graph.js";
62
62
  export { UserContextGenerator } from "./context/context.generator.js";
63
63
  export type { UserContextInput, IncrementalContextInput, UserContextResult } from "./context/context.generator.js";
64
64
  export { ChatTitleGenerator } from "./chat/chat.title.generator.js";
65
+ export { ChatInterruptClassifier } from "./chat/chat.interrupt.classifier.js";
66
+ export type { ClassifyInterruptInput } from "./chat/chat.interrupt.classifier.js";
65
67
  export { ChatSummarizer } from "./chat/chat.summarizer.js";
66
68
  export type { ChatSummarizerInput, ChatSummarizerMessage } from "./chat/chat.summarizer.js";
67
69
  export { HydeGenerator } from "./shared/hyde/hyde.generator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ export { PremiseGraphFactory } from "./premise/premise.graph.js";
30
30
  // ─── Agents ───────────────────────────────────────────────────────────────────
31
31
  export { UserContextGenerator } from "./context/context.generator.js";
32
32
  export { ChatTitleGenerator } from "./chat/chat.title.generator.js";
33
+ export { ChatInterruptClassifier } from "./chat/chat.interrupt.classifier.js";
33
34
  export { ChatSummarizer } from "./chat/chat.summarizer.js";
34
35
  export { HydeGenerator } from "./shared/hyde/hyde.generator.js";
35
36
  export { SuggestionGenerator } from "./chat/chat.suggester.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// ─── Public API (recommended for external consumers) ──────────────────────────\n\nexport { createChatTools } from \"./shared/agent/tool.factory.js\";\nexport { getModelName } from \"./shared/agent/model.config.js\";\nexport type { ChatTools } from \"./shared/agent/tool.factory.js\";\nexport type { ModelConfig, ModelSettings } from \"./shared/agent/model.config.js\";\nexport type {\n ToolContext,\n ResolvedToolContext,\n ToolDeps,\n ProtocolDeps,\n RawToolDefinition,\n CompiledGraph,\n} from \"./shared/agent/tool.helpers.js\";\nexport { ChatContextAccessError, resolveChatContext } from \"./shared/agent/tool.helpers.js\";\nexport { requestContext } from \"./shared/observability/request-context.js\";\nexport { setTimingWrapper } from \"./shared/observability/performance.js\";\nexport {\n ToolRuntimeError,\n getToolTimeoutPolicy,\n invokeToolRuntime,\n toolRuntimeErrorToResult,\n} from \"./shared/agent/tool.runtime.js\";\nexport type { ToolRuntimeErrorCode, ToolTimeoutClass, ToolTimeoutPolicy } from \"./shared/agent/tool.runtime.js\";\n\n// ─── Interfaces (implement these to wire up your infrastructure) ───────────────\n\nexport type * from \"./shared/interfaces/auth.interface.js\";\nexport type * from \"./shared/interfaces/cache.interface.js\";\nexport type * from \"./shared/interfaces/chat-session.interface.js\";\nexport type { ChatSummaryReader } from \"./shared/interfaces/chat-summary.interface.js\";\nexport type { ChatMessageWriter } from \"./shared/interfaces/chat-message-writer.interface.js\";\nexport type { QuestionGeneratorReader } from \"./shared/interfaces/question-generator.interface.js\";\nexport type {\n QuestionerDatabase,\n PersistableQuestion,\n PersistedQuestion,\n QuestionFilters,\n} from \"./shared/interfaces/questioner.interface.js\";\nexport type { NegotiationSummaryReader } from \"./shared/interfaces/negotiation-summary.interface.js\";\nexport type { DiscoveryNegotiationDigest } from \"./shared/schemas/negotiation-digest.schema.js\";\nexport { NegotiationSummarizer, buildFallbackDigest } from \"./negotiation/negotiation.summarizer.js\";\nexport type * from \"./shared/interfaces/contact.interface.js\";\nexport type * from \"./shared/interfaces/database.interface.js\";\nexport type * from \"./shared/interfaces/embedder.interface.js\";\nexport type * from \"./shared/interfaces/enrichment.interface.js\";\nexport type * from \"./shared/interfaces/integration.interface.js\";\nexport type * from \"./shared/interfaces/queue.interface.js\";\nexport type * from \"./shared/interfaces/scraper.interface.js\";\nexport type * from \"./shared/interfaces/storage.interface.js\";\nexport type * from \"./shared/interfaces/delivery-ledger.interface.js\";\nexport type * from \"./shared/interfaces/connect-link.interface.js\";\nexport type * from \"./shared/interfaces/discovery-run.interface.js\";\nexport type * from \"./shared/interfaces/profile-run.interface.js\";\nexport type * from \"./shared/interfaces/negotiation-events.interface.js\";\nexport type { AgentDispatcher, AgentDispatchResult, NegotiationTurnPayload } from \"./shared/interfaces/agent-dispatcher.interface.js\";\nexport type {\n AgentRecord,\n AgentTransportRecord,\n AgentPermissionRecord,\n AgentWithRelations,\n CreateAgentInput,\n CreateTransportInput,\n GrantPermissionInput,\n AgentDatabase,\n} from './shared/interfaces/agent.interface.js';\nexport { SYSTEM_AGENT_IDS } from './shared/interfaces/agent.interface.js';\n\n// ─── Shared schemas ───────────────────────────────────────────────────────────\n\nexport {\n ChatContextDigestSchema,\n type ChatContextDigest,\n} from \"./shared/schemas/chat-context.schema.js\";\nexport {\n QuestionOptionSchema,\n QuestionSchema,\n QuestionStrategySchema,\n QuestionWithStrategySchema,\n QuestionGeneratorResponseSchema,\n QuestionModeSchema,\n QuestionDetectionSchema,\n QuestionActorSchema,\n QuestionAnswerSchema,\n type Question,\n type QuestionOption,\n type QuestionStrategy,\n type QuestionWithStrategy,\n type QuestionGeneratorResponse,\n type QuestionGenerationResult,\n type QuestionMode,\n type QuestionDetection,\n type QuestionActor,\n type QuestionAnswer,\n} from \"./shared/schemas/question.schema.js\";\nexport type { PendingQuestionSummary } from \"./shared/schemas/pending-question.schema.js\";\nexport type { McpAuthInput } from \"./shared/schemas/mcp-auth.schema.js\";\nexport {\n ProfileIdentitySchema,\n ProfileNarrativeSchema,\n ProfileAttributesSchema,\n ProfileDocumentSchema,\n type ProfileDocument,\n} from \"./shared/schemas/profile.schema.js\";\nexport type {\n DiscoverySourceProfile,\n DiscoverySummary,\n DiscoveryNegotiation,\n DiscoveryTurn,\n DiscoveryOutcome,\n DiscoveryQuestionInput,\n NegotiationRole,\n} from \"./shared/schemas/discovery-question.schema.js\";\nexport {\n NetworkAssignmentResourceTypeSchema,\n NetworkAssignmentModeSchema,\n NetworkAssignmentScopeSchema,\n NetworkAssignmentPromptPresenceSchema,\n NetworkAssignmentPolicySchema,\n NetworkAssignmentRawScoresSchema,\n NetworkAssignmentMetadataSchema,\n OpportunityEvidenceKindSchema,\n OpportunityEvidenceSchema,\n} from \"./shared/schemas/network-assignment.schema.js\";\nexport type {\n NetworkAssignmentResourceType,\n NetworkAssignmentMode,\n NetworkAssignmentScope,\n NetworkAssignmentPromptPresence,\n NetworkAssignmentPolicy,\n NetworkAssignmentRawScores,\n NetworkAssignmentMetadata,\n OpportunityEvidenceKind,\n OpportunityEvidence,\n} from \"./shared/schemas/network-assignment.schema.js\";\nexport {\n DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD,\n classifyPromptPresence,\n resolveAssignmentNetworkScope,\n buildNetworkAssignmentDecision,\n combineAssignmentScores,\n} from \"./shared/assignment/network-assignment.policy.js\";\nexport type {\n PromptPresenceInput,\n ResolveAssignmentNetworkScopeArgs,\n BuildNetworkAssignmentDecisionArgs,\n NetworkAssignmentDecision,\n} from \"./shared/assignment/network-assignment.policy.js\";\nexport {\n buildCandidateEvidence,\n withCandidateEvidence,\n mergeOpportunityEvidence,\n withMatchedStrategies,\n renderOpportunityEvidenceForPrompt,\n} from \"./opportunity/opportunity.evidence.js\";\nexport type { EvidenceCandidateInput } from \"./opportunity/opportunity.evidence.js\";\n\n// ─── Graph factories ──────────────────────────────────────────────────────────\n\nexport { ChatGraphFactory } from \"./chat/chat.graph.js\";\nexport { HomeGraphFactory } from \"./opportunity/feed/feed.graph.js\";\nexport { HydeGraphFactory } from \"./shared/hyde/hyde.graph.js\";\nexport { NetworkGraphFactory } from \"./network/network.graph.js\";\nexport { NetworkMembershipGraphFactory } from \"./network/membership/membership.graph.js\";\nexport { IntentGraphFactory } from \"./intent/intent.graph.js\";\nexport { IntentNetworkGraphFactory } from \"./network/indexer/indexer.graph.js\";\nexport { MaintenanceGraphFactory } from \"./maintenance/maintenance.graph.js\";\nexport type {\n MaintenanceGraphDatabase,\n MaintenanceGraphCache,\n MaintenanceGraphQueue,\n} from \"./maintenance/maintenance.graph.js\";\nexport { NegotiationGraphFactory, createDefaultNegotiationGraph, negotiateCandidates } from \"./negotiation/negotiation.graph.js\";\nexport { OpportunityGraphFactory } from \"./opportunity/opportunity.graph.js\";\nexport { ProfileGraphFactory } from \"./profile/profile.graph.js\";\nexport { PremiseGraphFactory } from \"./premise/premise.graph.js\";\n\n// ─── Agents ───────────────────────────────────────────────────────────────────\n\nexport { UserContextGenerator } from \"./context/context.generator.js\";\nexport type { UserContextInput, IncrementalContextInput, UserContextResult } from \"./context/context.generator.js\";\nexport { ChatTitleGenerator } from \"./chat/chat.title.generator.js\";\nexport { ChatSummarizer } from \"./chat/chat.summarizer.js\";\nexport type { ChatSummarizerInput, ChatSummarizerMessage } from \"./chat/chat.summarizer.js\";\nexport { HydeGenerator } from \"./shared/hyde/hyde.generator.js\";\nexport { SuggestionGenerator } from \"./chat/chat.suggester.js\";\nexport type { SuggestionGeneratorInput } from \"./chat/chat.suggester.js\";\nexport { generateInviteMessage } from \"./contact/contact.inviter.js\";\nexport type { InviteInput, InviteOutput } from \"./contact/contact.inviter.js\";\nexport { IntentIndexer } from \"./intent/intent.indexer.js\";\nexport type { IntentIndexerOutput } from \"./intent/intent.indexer.js\";\nexport { PremiseAnalyzer } from \"./premise/premise.analyzer.js\";\nexport type { PremiseAnalyzerOutput } from \"./premise/premise.analyzer.js\";\nexport { PremiseDecomposer } from \"./premise/premise.decomposer.js\";\nexport type { PremiseDecomposerOutput, DecomposedPremise } from \"./premise/premise.decomposer.js\";\nexport { PremiseIndexer } from \"./premise/premise.indexer.js\";\nexport type { PremiseIndexerOutput } from \"./premise/premise.indexer.js\";\nexport { LensInferrer } from \"./shared/hyde/lens.inferrer.js\";\nexport { NegotiationInsightsGenerator } from \"./negotiation/insight.generator.js\";\nexport type { NegotiationDigest } from \"./negotiation/insight.generator.js\";\nexport { IndexNegotiator } from \"./negotiation/negotiation.agent.js\";\nexport type { NegotiationAgentInput } from \"./negotiation/negotiation.agent.js\";\nexport { QuestionerAgent } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerAgentConfig } from \"./questioner/questioner.agent.js\";\nexport type {\n QuestionerInput,\n QuestionerContext,\n QuestionerEnqueuePayload,\n QuestionerEnqueueFn,\n DiscoveryContext,\n IntentContext,\n ProfileContext,\n NegotiationContext,\n} from \"./questioner/questioner.types.js\";\nexport { getPreset } from \"./questioner/questioner.presets.js\";\nexport type { QuestionerPreset } from \"./questioner/questioner.presets.js\";\nexport { OpportunityEvaluator } from \"./opportunity/opportunity.evaluator.js\";\nexport type {\n EvaluatorInput,\n OpportunityEvaluatorOptionsConstructor,\n} from \"./opportunity/opportunity.evaluator.js\";\nexport { OpportunityPresenter, gatherPresenterContext } from \"./opportunity/opportunity.presenter.js\";\nexport { createOpportunityTools } from \"./opportunity/opportunity.tools.js\";\nexport { createProfileTools } from \"./profile/profile.tools.js\";\nexport type { PresenterDatabase } from \"./opportunity/opportunity.presenter.js\";\nexport { QuestionGenerator } from \"./opportunity/question.generator.js\";\n\n// ─── Support utilities ────────────────────────────────────────────────────────\n\nexport { renderNetworkContext } from './shared/network/metadata.renderer.js';\nexport {\n canUserSeeOpportunity,\n isActionableForViewer,\n validateOpportunityActors,\n classifyOpportunity,\n selectByComposition,\n FEED_SOFT_TARGETS,\n} from \"./opportunity/opportunity.utils.js\";\nexport { getPrimaryActionLabel } from \"./opportunity/opportunity.labels.js\";\nexport { computeFeedHealth } from \"./opportunity/feed/feed.health.js\";\nexport type { FeedHealthInput, FeedHealthResult } from \"./opportunity/feed/feed.health.js\";\nexport {\n selectContactsForDiscovery,\n shouldRunIntroducerDiscovery,\n runIntroducerDiscovery,\n MAX_CONTACTS_PER_CYCLE,\n MAX_CANDIDATES_PER_CONTACT,\n INTRODUCER_DISCOVERY_SOURCE,\n} from \"./opportunity/opportunity.introducer.js\";\nexport type {\n IntroducerDiscoveryDatabase,\n IntroducerDiscoveryQueue,\n ContactWithIntents,\n} from \"./opportunity/opportunity.introducer.js\";\nexport { persistOpportunities } from \"./opportunity/opportunity.persist.js\";\nexport { presentOpportunity } from \"./opportunity/opportunity.presentation.js\";\nexport type { UserInfo } from \"./opportunity/opportunity.presentation.js\";\nexport { stripUuids, stripIntroducerMentions } from \"./opportunity/opportunity.presentation.js\";\nexport {\n getOrCreateDeliveryCardBatch,\n DELIVERY_CARD_CACHE_TTL,\n type CachedDeliveryCard,\n type OpportunityWithContext,\n} from \"./opportunity/delivery-card.cache.js\";\n\n// ─── Tools ────────────────────────────────────────────────────────────────────\n\nexport { createToolRegistry } from \"./shared/agent/tool.registry.js\";\nexport { createAgentTools } from './agent/agent.tools.js';\nexport { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';\nexport { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';\n\n// ─── MCP ──────────────────────────────────────────────────────────────────────\n\nexport { createMcpServer, computeAgentIndexScope, buildMcpOnboardingMessage, ONBOARDING_ALLOWED } from \"./mcp/mcp.server.js\";\nexport type { ScopedDepsFactory } from \"./mcp/mcp.server.js\";\nexport { buildElicitationCreate, flattenChoice } from \"./mcp/elicitation.builder.js\";\nexport { dispatchElicitations } from \"./mcp/elicitation.dispatcher.js\";\nexport type { ElicitResultLike, ElicitInputFn, DispatchElicitationsParams } from \"./mcp/elicitation.dispatcher.js\";\n\n// ─── States (for advanced graph consumers) ────────────────────────────────────\n\nexport type {\n UserNegotiationContext,\n NegotiationTurn,\n NegotiationOutcome,\n SeedAssessment,\n} from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationGraphLike } from \"./negotiation/negotiation.state.js\";\n\n// ─── Streamers ────────────────────────────────────────────────────────────────\n\nexport { ChatStreamer } from \"./chat/chat.streamer.js\";\nexport { ResponseStreamer } from \"./shared/agent/response.streamer.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// ─── Public API (recommended for external consumers) ──────────────────────────\n\nexport { createChatTools } from \"./shared/agent/tool.factory.js\";\nexport { getModelName } from \"./shared/agent/model.config.js\";\nexport type { ChatTools } from \"./shared/agent/tool.factory.js\";\nexport type { ModelConfig, ModelSettings } from \"./shared/agent/model.config.js\";\nexport type {\n ToolContext,\n ResolvedToolContext,\n ToolDeps,\n ProtocolDeps,\n RawToolDefinition,\n CompiledGraph,\n} from \"./shared/agent/tool.helpers.js\";\nexport { ChatContextAccessError, resolveChatContext } from \"./shared/agent/tool.helpers.js\";\nexport { requestContext } from \"./shared/observability/request-context.js\";\nexport { setTimingWrapper } from \"./shared/observability/performance.js\";\nexport {\n ToolRuntimeError,\n getToolTimeoutPolicy,\n invokeToolRuntime,\n toolRuntimeErrorToResult,\n} from \"./shared/agent/tool.runtime.js\";\nexport type { ToolRuntimeErrorCode, ToolTimeoutClass, ToolTimeoutPolicy } from \"./shared/agent/tool.runtime.js\";\n\n// ─── Interfaces (implement these to wire up your infrastructure) ───────────────\n\nexport type * from \"./shared/interfaces/auth.interface.js\";\nexport type * from \"./shared/interfaces/cache.interface.js\";\nexport type * from \"./shared/interfaces/chat-session.interface.js\";\nexport type { ChatSummaryReader } from \"./shared/interfaces/chat-summary.interface.js\";\nexport type { ChatMessageWriter } from \"./shared/interfaces/chat-message-writer.interface.js\";\nexport type { QuestionGeneratorReader } from \"./shared/interfaces/question-generator.interface.js\";\nexport type {\n QuestionerDatabase,\n PersistableQuestion,\n PersistedQuestion,\n QuestionFilters,\n} from \"./shared/interfaces/questioner.interface.js\";\nexport type { NegotiationSummaryReader } from \"./shared/interfaces/negotiation-summary.interface.js\";\nexport type { DiscoveryNegotiationDigest } from \"./shared/schemas/negotiation-digest.schema.js\";\nexport { NegotiationSummarizer, buildFallbackDigest } from \"./negotiation/negotiation.summarizer.js\";\nexport type * from \"./shared/interfaces/contact.interface.js\";\nexport type * from \"./shared/interfaces/database.interface.js\";\nexport type * from \"./shared/interfaces/embedder.interface.js\";\nexport type * from \"./shared/interfaces/enrichment.interface.js\";\nexport type * from \"./shared/interfaces/integration.interface.js\";\nexport type * from \"./shared/interfaces/queue.interface.js\";\nexport type * from \"./shared/interfaces/scraper.interface.js\";\nexport type * from \"./shared/interfaces/storage.interface.js\";\nexport type * from \"./shared/interfaces/delivery-ledger.interface.js\";\nexport type * from \"./shared/interfaces/connect-link.interface.js\";\nexport type * from \"./shared/interfaces/discovery-run.interface.js\";\nexport type * from \"./shared/interfaces/profile-run.interface.js\";\nexport type * from \"./shared/interfaces/negotiation-events.interface.js\";\nexport type { AgentDispatcher, AgentDispatchResult, NegotiationTurnPayload } from \"./shared/interfaces/agent-dispatcher.interface.js\";\nexport type {\n AgentRecord,\n AgentTransportRecord,\n AgentPermissionRecord,\n AgentWithRelations,\n CreateAgentInput,\n CreateTransportInput,\n GrantPermissionInput,\n AgentDatabase,\n} from './shared/interfaces/agent.interface.js';\nexport { SYSTEM_AGENT_IDS } from './shared/interfaces/agent.interface.js';\n\n// ─── Shared schemas ───────────────────────────────────────────────────────────\n\nexport {\n ChatContextDigestSchema,\n type ChatContextDigest,\n} from \"./shared/schemas/chat-context.schema.js\";\nexport {\n QuestionOptionSchema,\n QuestionSchema,\n QuestionStrategySchema,\n QuestionWithStrategySchema,\n QuestionGeneratorResponseSchema,\n QuestionModeSchema,\n QuestionDetectionSchema,\n QuestionActorSchema,\n QuestionAnswerSchema,\n type Question,\n type QuestionOption,\n type QuestionStrategy,\n type QuestionWithStrategy,\n type QuestionGeneratorResponse,\n type QuestionGenerationResult,\n type QuestionMode,\n type QuestionDetection,\n type QuestionActor,\n type QuestionAnswer,\n} from \"./shared/schemas/question.schema.js\";\nexport type { PendingQuestionSummary } from \"./shared/schemas/pending-question.schema.js\";\nexport type { McpAuthInput } from \"./shared/schemas/mcp-auth.schema.js\";\nexport {\n ProfileIdentitySchema,\n ProfileNarrativeSchema,\n ProfileAttributesSchema,\n ProfileDocumentSchema,\n type ProfileDocument,\n} from \"./shared/schemas/profile.schema.js\";\nexport type {\n DiscoverySourceProfile,\n DiscoverySummary,\n DiscoveryNegotiation,\n DiscoveryTurn,\n DiscoveryOutcome,\n DiscoveryQuestionInput,\n NegotiationRole,\n} from \"./shared/schemas/discovery-question.schema.js\";\nexport {\n NetworkAssignmentResourceTypeSchema,\n NetworkAssignmentModeSchema,\n NetworkAssignmentScopeSchema,\n NetworkAssignmentPromptPresenceSchema,\n NetworkAssignmentPolicySchema,\n NetworkAssignmentRawScoresSchema,\n NetworkAssignmentMetadataSchema,\n OpportunityEvidenceKindSchema,\n OpportunityEvidenceSchema,\n} from \"./shared/schemas/network-assignment.schema.js\";\nexport type {\n NetworkAssignmentResourceType,\n NetworkAssignmentMode,\n NetworkAssignmentScope,\n NetworkAssignmentPromptPresence,\n NetworkAssignmentPolicy,\n NetworkAssignmentRawScores,\n NetworkAssignmentMetadata,\n OpportunityEvidenceKind,\n OpportunityEvidence,\n} from \"./shared/schemas/network-assignment.schema.js\";\nexport {\n DEFAULT_NETWORK_ASSIGNMENT_THRESHOLD,\n classifyPromptPresence,\n resolveAssignmentNetworkScope,\n buildNetworkAssignmentDecision,\n combineAssignmentScores,\n} from \"./shared/assignment/network-assignment.policy.js\";\nexport type {\n PromptPresenceInput,\n ResolveAssignmentNetworkScopeArgs,\n BuildNetworkAssignmentDecisionArgs,\n NetworkAssignmentDecision,\n} from \"./shared/assignment/network-assignment.policy.js\";\nexport {\n buildCandidateEvidence,\n withCandidateEvidence,\n mergeOpportunityEvidence,\n withMatchedStrategies,\n renderOpportunityEvidenceForPrompt,\n} from \"./opportunity/opportunity.evidence.js\";\nexport type { EvidenceCandidateInput } from \"./opportunity/opportunity.evidence.js\";\n\n// ─── Graph factories ──────────────────────────────────────────────────────────\n\nexport { ChatGraphFactory } from \"./chat/chat.graph.js\";\nexport { HomeGraphFactory } from \"./opportunity/feed/feed.graph.js\";\nexport { HydeGraphFactory } from \"./shared/hyde/hyde.graph.js\";\nexport { NetworkGraphFactory } from \"./network/network.graph.js\";\nexport { NetworkMembershipGraphFactory } from \"./network/membership/membership.graph.js\";\nexport { IntentGraphFactory } from \"./intent/intent.graph.js\";\nexport { IntentNetworkGraphFactory } from \"./network/indexer/indexer.graph.js\";\nexport { MaintenanceGraphFactory } from \"./maintenance/maintenance.graph.js\";\nexport type {\n MaintenanceGraphDatabase,\n MaintenanceGraphCache,\n MaintenanceGraphQueue,\n} from \"./maintenance/maintenance.graph.js\";\nexport { NegotiationGraphFactory, createDefaultNegotiationGraph, negotiateCandidates } from \"./negotiation/negotiation.graph.js\";\nexport { OpportunityGraphFactory } from \"./opportunity/opportunity.graph.js\";\nexport { ProfileGraphFactory } from \"./profile/profile.graph.js\";\nexport { PremiseGraphFactory } from \"./premise/premise.graph.js\";\n\n// ─── Agents ───────────────────────────────────────────────────────────────────\n\nexport { UserContextGenerator } from \"./context/context.generator.js\";\nexport type { UserContextInput, IncrementalContextInput, UserContextResult } from \"./context/context.generator.js\";\nexport { ChatTitleGenerator } from \"./chat/chat.title.generator.js\";\nexport { ChatInterruptClassifier } from \"./chat/chat.interrupt.classifier.js\";\nexport type { ClassifyInterruptInput } from \"./chat/chat.interrupt.classifier.js\";\nexport { ChatSummarizer } from \"./chat/chat.summarizer.js\";\nexport type { ChatSummarizerInput, ChatSummarizerMessage } from \"./chat/chat.summarizer.js\";\nexport { HydeGenerator } from \"./shared/hyde/hyde.generator.js\";\nexport { SuggestionGenerator } from \"./chat/chat.suggester.js\";\nexport type { SuggestionGeneratorInput } from \"./chat/chat.suggester.js\";\nexport { generateInviteMessage } from \"./contact/contact.inviter.js\";\nexport type { InviteInput, InviteOutput } from \"./contact/contact.inviter.js\";\nexport { IntentIndexer } from \"./intent/intent.indexer.js\";\nexport type { IntentIndexerOutput } from \"./intent/intent.indexer.js\";\nexport { PremiseAnalyzer } from \"./premise/premise.analyzer.js\";\nexport type { PremiseAnalyzerOutput } from \"./premise/premise.analyzer.js\";\nexport { PremiseDecomposer } from \"./premise/premise.decomposer.js\";\nexport type { PremiseDecomposerOutput, DecomposedPremise } from \"./premise/premise.decomposer.js\";\nexport { PremiseIndexer } from \"./premise/premise.indexer.js\";\nexport type { PremiseIndexerOutput } from \"./premise/premise.indexer.js\";\nexport { LensInferrer } from \"./shared/hyde/lens.inferrer.js\";\nexport { NegotiationInsightsGenerator } from \"./negotiation/insight.generator.js\";\nexport type { NegotiationDigest } from \"./negotiation/insight.generator.js\";\nexport { IndexNegotiator } from \"./negotiation/negotiation.agent.js\";\nexport type { NegotiationAgentInput } from \"./negotiation/negotiation.agent.js\";\nexport { QuestionerAgent } from \"./questioner/questioner.agent.js\";\nexport type { QuestionerAgentConfig } from \"./questioner/questioner.agent.js\";\nexport type {\n QuestionerInput,\n QuestionerContext,\n QuestionerEnqueuePayload,\n QuestionerEnqueueFn,\n DiscoveryContext,\n IntentContext,\n ProfileContext,\n NegotiationContext,\n} from \"./questioner/questioner.types.js\";\nexport { getPreset } from \"./questioner/questioner.presets.js\";\nexport type { QuestionerPreset } from \"./questioner/questioner.presets.js\";\nexport { OpportunityEvaluator } from \"./opportunity/opportunity.evaluator.js\";\nexport type {\n EvaluatorInput,\n OpportunityEvaluatorOptionsConstructor,\n} from \"./opportunity/opportunity.evaluator.js\";\nexport { OpportunityPresenter, gatherPresenterContext } from \"./opportunity/opportunity.presenter.js\";\nexport { createOpportunityTools } from \"./opportunity/opportunity.tools.js\";\nexport { createProfileTools } from \"./profile/profile.tools.js\";\nexport type { PresenterDatabase } from \"./opportunity/opportunity.presenter.js\";\nexport { QuestionGenerator } from \"./opportunity/question.generator.js\";\n\n// ─── Support utilities ────────────────────────────────────────────────────────\n\nexport { renderNetworkContext } from './shared/network/metadata.renderer.js';\nexport {\n canUserSeeOpportunity,\n isActionableForViewer,\n validateOpportunityActors,\n classifyOpportunity,\n selectByComposition,\n FEED_SOFT_TARGETS,\n} from \"./opportunity/opportunity.utils.js\";\nexport { getPrimaryActionLabel } from \"./opportunity/opportunity.labels.js\";\nexport { computeFeedHealth } from \"./opportunity/feed/feed.health.js\";\nexport type { FeedHealthInput, FeedHealthResult } from \"./opportunity/feed/feed.health.js\";\nexport {\n selectContactsForDiscovery,\n shouldRunIntroducerDiscovery,\n runIntroducerDiscovery,\n MAX_CONTACTS_PER_CYCLE,\n MAX_CANDIDATES_PER_CONTACT,\n INTRODUCER_DISCOVERY_SOURCE,\n} from \"./opportunity/opportunity.introducer.js\";\nexport type {\n IntroducerDiscoveryDatabase,\n IntroducerDiscoveryQueue,\n ContactWithIntents,\n} from \"./opportunity/opportunity.introducer.js\";\nexport { persistOpportunities } from \"./opportunity/opportunity.persist.js\";\nexport { presentOpportunity } from \"./opportunity/opportunity.presentation.js\";\nexport type { UserInfo } from \"./opportunity/opportunity.presentation.js\";\nexport { stripUuids, stripIntroducerMentions } from \"./opportunity/opportunity.presentation.js\";\nexport {\n getOrCreateDeliveryCardBatch,\n DELIVERY_CARD_CACHE_TTL,\n type CachedDeliveryCard,\n type OpportunityWithContext,\n} from \"./opportunity/delivery-card.cache.js\";\n\n// ─── Tools ────────────────────────────────────────────────────────────────────\n\nexport { createToolRegistry } from \"./shared/agent/tool.registry.js\";\nexport { createAgentTools } from './agent/agent.tools.js';\nexport { AMBIENT_PARK_WINDOW_MS } from './negotiation/negotiation.tools.js';\nexport { normalizeTelegramHandle } from './shared/utils/telegram-handle.js';\n\n// ─── MCP ──────────────────────────────────────────────────────────────────────\n\nexport { createMcpServer, computeAgentIndexScope, buildMcpOnboardingMessage, ONBOARDING_ALLOWED } from \"./mcp/mcp.server.js\";\nexport type { ScopedDepsFactory } from \"./mcp/mcp.server.js\";\nexport { buildElicitationCreate, flattenChoice } from \"./mcp/elicitation.builder.js\";\nexport { dispatchElicitations } from \"./mcp/elicitation.dispatcher.js\";\nexport type { ElicitResultLike, ElicitInputFn, DispatchElicitationsParams } from \"./mcp/elicitation.dispatcher.js\";\n\n// ─── States (for advanced graph consumers) ────────────────────────────────────\n\nexport type {\n UserNegotiationContext,\n NegotiationTurn,\n NegotiationOutcome,\n SeedAssessment,\n} from \"./shared/schemas/negotiation-state.schema.js\";\nexport type { NegotiationGraphLike } from \"./negotiation/negotiation.state.js\";\n\n// ─── Streamers ────────────────────────────────────────────────────────────────\n\nexport { ChatStreamer } from \"./chat/chat.streamer.js\";\nexport { ResponseStreamer } from \"./shared/agent/response.streamer.js\";\n"]}
@@ -123,6 +123,11 @@ declare function getModelConfig(config?: ModelConfig): {
123
123
  readonly temperature: 0.2;
124
124
  readonly maxTokens: 512;
125
125
  };
126
+ readonly interruptClassifier: {
127
+ readonly model: "google/gemini-2.5-flash";
128
+ readonly temperature: 0;
129
+ readonly maxTokens: 16;
130
+ };
126
131
  readonly chat: {
127
132
  readonly model: string;
128
133
  readonly maxTokens: 8192;
@@ -1 +1 @@
1
- {"version":3,"file":"model.config.d.ts","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvE;AAED,iBAAS,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA+BmD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;EAK/I;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAEzG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,CA+B5G"}
1
+ {"version":3,"file":"model.config.d.ts","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7F;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACvE;AAED,iBAAS,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAgCmD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;EAK/I;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAEzG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,CA+B5G"}
@@ -26,6 +26,7 @@ function getModelConfig(config) {
26
26
  premiseIndexer: { model: "google/gemini-2.5-flash" },
27
27
  userContextGenerator: { model: "google/gemini-2.5-flash", temperature: 0.3, maxTokens: 512 },
28
28
  networkRecommender: { model: "google/gemini-2.5-flash", temperature: 0.2, maxTokens: 512 },
29
+ interruptClassifier: { model: "google/gemini-2.5-flash", temperature: 0.0, maxTokens: 16 },
29
30
  chat: {
30
31
  model: config?.chatModel ?? process.env.CHAT_MODEL ?? "google/gemini-3-pro-preview",
31
32
  maxTokens: 8192,
@@ -1 +1 @@
1
- {"version":3,"file":"model.config.js","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatOpenAI } from \"@langchain/openai\";\n\n/** Settings that can be configured per agent. */\nexport interface ModelSettings {\n model: string;\n temperature?: number;\n maxTokens?: number;\n reasoning?: { effort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; exclude?: boolean };\n}\n\n/**\n * Runtime configuration for the protocol package.\n * When passed via `ToolContext.modelConfig`, all fields (`apiKey`, `baseURL`, `chatModel`,\n * `chatReasoningEffort`) are honored by `ChatAgent` when the chat graph runs.\n * Other protocol agents don't read from `ToolContext` but may accept an explicit `ModelConfig`\n * as a direct parameter to `createModel()`.\n * All fields fall back to environment variables if not provided.\n */\nexport interface ModelConfig {\n /** OpenRouter API key. Falls back to OPENROUTER_API_KEY env var. */\n apiKey?: string;\n /** OpenRouter base URL. Falls back to OPENROUTER_BASE_URL env var. */\n baseURL?: string;\n /** Override the chat agent model. Falls back to CHAT_MODEL env var. */\n chatModel?: string;\n /** Override the chat reasoning effort. Falls back to CHAT_REASONING_EFFORT env var. */\n chatReasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n}\n\nfunction getModelConfig(config?: ModelConfig) {\n return {\n intentInferrer: { model: \"google/gemini-2.5-flash\" },\n intentIndexer: { model: \"google/gemini-2.5-flash\" },\n intentVerifier: { model: \"google/gemini-2.5-flash\" },\n intentReconciler: { model: \"google/gemini-2.5-flash\" },\n intentClarifier: { model: \"google/gemini-2.5-flash\" },\n profileGenerator: { model: \"google/gemini-2.5-flash\" },\n hydeGenerator: { model: \"google/gemini-2.5-flash\" },\n lensInferrer: { model: \"google/gemini-2.5-flash\" },\n opportunityEvaluator: { model: \"google/gemini-2.5-flash\" },\n opportunityPresenter: { model: \"google/gemini-2.5-flash\" },\n negotiator: { model: \"google/gemini-2.5-flash\" },\n homeCategorizer: { model: \"google/gemini-2.5-flash\" },\n suggestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatTitleGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 32 },\n negotiationInsights: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatContextSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n discoveryQuestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n questioner: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n negotiationSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 256 },\n inviteGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n premiseAnalyzer: { model: \"google/gemini-2.5-flash\" },\n premiseDecomposer: { model: \"google/gemini-2.5-flash\" },\n premiseIndexer: { model: \"google/gemini-2.5-flash\" },\n userContextGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n networkRecommender: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n chat: {\n model: config?.chatModel ?? process.env.CHAT_MODEL ?? \"google/gemini-3-pro-preview\",\n maxTokens: 8192,\n reasoning: {\n effort: (config?.chatReasoningEffort ?? process.env.CHAT_REASONING_EFFORT ?? \"low\") as NonNullable<ModelSettings[\"reasoning\"]>[\"effort\"],\n exclude: true,\n },\n },\n } as const;\n}\n\n/**\n * Returns the model name string for the given agent key.\n * @param agent - Key from MODEL_CONFIG identifying which agent's settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function getModelName(agent: keyof ReturnType<typeof getModelConfig>, config?: ModelConfig): string {\n return getModelConfig(config)[agent].model;\n}\n\n/**\n * Creates a ChatOpenAI instance configured for OpenRouter.\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function createModel(agent: keyof ReturnType<typeof getModelConfig>, config?: ModelConfig): ChatOpenAI {\n const apiKey = config?.apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!apiKey?.trim()) {\n throw new Error(`createModel(${agent}): OPENROUTER_API_KEY is required. Pass via the config argument, ToolContext.modelConfig.apiKey, or set the OPENROUTER_API_KEY environment variable.`);\n }\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n // Hard upper bound on a single LLM call. Without this, langchain's HTTP\n // client waits until the upstream cuts the socket (~3 minutes via\n // OpenRouter), blocking the entire chat response. 60 s is generous enough\n // for slow providers but bounds the worst case.\n const timeoutEnv = Number.parseInt(process.env.OPENROUTER_REQUEST_TIMEOUT_MS ?? \"\", 10);\n const timeout = Number.isFinite(timeoutEnv) && timeoutEnv > 0 ? timeoutEnv : 60_000;\n // ChatOpenAI defaults to maxRetries=2. That means a single hung upstream\n // provider gets retried up to 2 more times, each waiting `timeout` before\n // failing — so worst-case latency becomes timeout * 3. Cap retries at 1\n // so the worst case stays bounded at ~2 * timeout. Configurable via\n // OPENROUTER_MAX_RETRIES.\n const retriesEnv = Number.parseInt(process.env.OPENROUTER_MAX_RETRIES ?? \"\", 10);\n const maxRetries = Number.isFinite(retriesEnv) && retriesEnv >= 0 ? retriesEnv : 1;\n return new ChatOpenAI({\n model: cfg.model,\n configuration: {\n baseURL: config?.baseURL ?? process.env.OPENROUTER_BASE_URL ?? \"https://openrouter.ai/api/v1\",\n apiKey,\n },\n temperature: cfg.temperature,\n maxTokens: cfg.maxTokens,\n timeout,\n maxRetries,\n ...(cfg.reasoning && { modelKwargs: { reasoning: cfg.reasoning } }),\n });\n}\n"]}
1
+ {"version":3,"file":"model.config.js","sourceRoot":"/","sources":["shared/agent/model.config.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatOpenAI } from \"@langchain/openai\";\n\n/** Settings that can be configured per agent. */\nexport interface ModelSettings {\n model: string;\n temperature?: number;\n maxTokens?: number;\n reasoning?: { effort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'; exclude?: boolean };\n}\n\n/**\n * Runtime configuration for the protocol package.\n * When passed via `ToolContext.modelConfig`, all fields (`apiKey`, `baseURL`, `chatModel`,\n * `chatReasoningEffort`) are honored by `ChatAgent` when the chat graph runs.\n * Other protocol agents don't read from `ToolContext` but may accept an explicit `ModelConfig`\n * as a direct parameter to `createModel()`.\n * All fields fall back to environment variables if not provided.\n */\nexport interface ModelConfig {\n /** OpenRouter API key. Falls back to OPENROUTER_API_KEY env var. */\n apiKey?: string;\n /** OpenRouter base URL. Falls back to OPENROUTER_BASE_URL env var. */\n baseURL?: string;\n /** Override the chat agent model. Falls back to CHAT_MODEL env var. */\n chatModel?: string;\n /** Override the chat reasoning effort. Falls back to CHAT_REASONING_EFFORT env var. */\n chatReasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';\n}\n\nfunction getModelConfig(config?: ModelConfig) {\n return {\n intentInferrer: { model: \"google/gemini-2.5-flash\" },\n intentIndexer: { model: \"google/gemini-2.5-flash\" },\n intentVerifier: { model: \"google/gemini-2.5-flash\" },\n intentReconciler: { model: \"google/gemini-2.5-flash\" },\n intentClarifier: { model: \"google/gemini-2.5-flash\" },\n profileGenerator: { model: \"google/gemini-2.5-flash\" },\n hydeGenerator: { model: \"google/gemini-2.5-flash\" },\n lensInferrer: { model: \"google/gemini-2.5-flash\" },\n opportunityEvaluator: { model: \"google/gemini-2.5-flash\" },\n opportunityPresenter: { model: \"google/gemini-2.5-flash\" },\n negotiator: { model: \"google/gemini-2.5-flash\" },\n homeCategorizer: { model: \"google/gemini-2.5-flash\" },\n suggestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatTitleGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 32 },\n negotiationInsights: { model: \"google/gemini-2.5-flash\", temperature: 0.4, maxTokens: 512 },\n chatContextSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n discoveryQuestionGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n questioner: { model: \"google/gemini-2.5-flash\", temperature: 0.5, maxTokens: 1024 },\n negotiationSummarizer: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 256 },\n inviteGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n premiseAnalyzer: { model: \"google/gemini-2.5-flash\" },\n premiseDecomposer: { model: \"google/gemini-2.5-flash\" },\n premiseIndexer: { model: \"google/gemini-2.5-flash\" },\n userContextGenerator: { model: \"google/gemini-2.5-flash\", temperature: 0.3, maxTokens: 512 },\n networkRecommender: { model: \"google/gemini-2.5-flash\", temperature: 0.2, maxTokens: 512 },\n interruptClassifier: { model: \"google/gemini-2.5-flash\", temperature: 0.0, maxTokens: 16 },\n chat: {\n model: config?.chatModel ?? process.env.CHAT_MODEL ?? \"google/gemini-3-pro-preview\",\n maxTokens: 8192,\n reasoning: {\n effort: (config?.chatReasoningEffort ?? process.env.CHAT_REASONING_EFFORT ?? \"low\") as NonNullable<ModelSettings[\"reasoning\"]>[\"effort\"],\n exclude: true,\n },\n },\n } as const;\n}\n\n/**\n * Returns the model name string for the given agent key.\n * @param agent - Key from MODEL_CONFIG identifying which agent's settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function getModelName(agent: keyof ReturnType<typeof getModelConfig>, config?: ModelConfig): string {\n return getModelConfig(config)[agent].model;\n}\n\n/**\n * Creates a ChatOpenAI instance configured for OpenRouter.\n * @param agent - Key identifying which agent's model settings to use.\n * @param config - Optional runtime config overrides.\n */\nexport function createModel(agent: keyof ReturnType<typeof getModelConfig>, config?: ModelConfig): ChatOpenAI {\n const apiKey = config?.apiKey ?? process.env.OPENROUTER_API_KEY;\n if (!apiKey?.trim()) {\n throw new Error(`createModel(${agent}): OPENROUTER_API_KEY is required. Pass via the config argument, ToolContext.modelConfig.apiKey, or set the OPENROUTER_API_KEY environment variable.`);\n }\n const cfg = getModelConfig(config)[agent] as ModelSettings;\n // Hard upper bound on a single LLM call. Without this, langchain's HTTP\n // client waits until the upstream cuts the socket (~3 minutes via\n // OpenRouter), blocking the entire chat response. 60 s is generous enough\n // for slow providers but bounds the worst case.\n const timeoutEnv = Number.parseInt(process.env.OPENROUTER_REQUEST_TIMEOUT_MS ?? \"\", 10);\n const timeout = Number.isFinite(timeoutEnv) && timeoutEnv > 0 ? timeoutEnv : 60_000;\n // ChatOpenAI defaults to maxRetries=2. That means a single hung upstream\n // provider gets retried up to 2 more times, each waiting `timeout` before\n // failing — so worst-case latency becomes timeout * 3. Cap retries at 1\n // so the worst case stays bounded at ~2 * timeout. Configurable via\n // OPENROUTER_MAX_RETRIES.\n const retriesEnv = Number.parseInt(process.env.OPENROUTER_MAX_RETRIES ?? \"\", 10);\n const maxRetries = Number.isFinite(retriesEnv) && retriesEnv >= 0 ? retriesEnv : 1;\n return new ChatOpenAI({\n model: cfg.model,\n configuration: {\n baseURL: config?.baseURL ?? process.env.OPENROUTER_BASE_URL ?? \"https://openrouter.ai/api/v1\",\n apiKey,\n },\n temperature: cfg.temperature,\n maxTokens: cfg.maxTokens,\n timeout,\n maxRetries,\n ...(cfg.reasoning && { modelKwargs: { reasoning: cfg.reasoning } }),\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indexnetwork/protocol",
3
- "version": "3.3.0-rc.253.1",
3
+ "version": "3.4.0-rc.254.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",