@falai/agent 0.5.4 → 0.6.0

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.
Files changed (85) hide show
  1. package/README.md +9 -4
  2. package/dist/cjs/core/Agent.d.ts +0 -5
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +75 -157
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/core/ResponseEngine.js +2 -2
  7. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  8. package/dist/cjs/core/Route.d.ts +6 -1
  9. package/dist/cjs/core/Route.d.ts.map +1 -1
  10. package/dist/cjs/core/Route.js +19 -1
  11. package/dist/cjs/core/Route.js.map +1 -1
  12. package/dist/cjs/core/RoutingEngine.d.ts +68 -2
  13. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
  14. package/dist/cjs/core/RoutingEngine.js +416 -2
  15. package/dist/cjs/core/RoutingEngine.js.map +1 -1
  16. package/dist/cjs/core/State.d.ts +1 -2
  17. package/dist/cjs/core/State.d.ts.map +1 -1
  18. package/dist/cjs/core/State.js +5 -6
  19. package/dist/cjs/core/State.js.map +1 -1
  20. package/dist/cjs/core/Transition.d.ts +2 -2
  21. package/dist/cjs/core/Transition.d.ts.map +1 -1
  22. package/dist/cjs/core/Transition.js +3 -2
  23. package/dist/cjs/core/Transition.js.map +1 -1
  24. package/dist/cjs/types/route.d.ts +15 -4
  25. package/dist/cjs/types/route.d.ts.map +1 -1
  26. package/dist/cjs/utils/event.d.ts +6 -0
  27. package/dist/cjs/utils/event.d.ts.map +1 -0
  28. package/dist/cjs/utils/event.js +20 -0
  29. package/dist/cjs/utils/event.js.map +1 -0
  30. package/dist/core/Agent.d.ts +0 -5
  31. package/dist/core/Agent.d.ts.map +1 -1
  32. package/dist/core/Agent.js +74 -156
  33. package/dist/core/Agent.js.map +1 -1
  34. package/dist/core/ResponseEngine.js +2 -2
  35. package/dist/core/ResponseEngine.js.map +1 -1
  36. package/dist/core/Route.d.ts +6 -1
  37. package/dist/core/Route.d.ts.map +1 -1
  38. package/dist/core/Route.js +19 -1
  39. package/dist/core/Route.js.map +1 -1
  40. package/dist/core/RoutingEngine.d.ts +68 -2
  41. package/dist/core/RoutingEngine.d.ts.map +1 -1
  42. package/dist/core/RoutingEngine.js +416 -2
  43. package/dist/core/RoutingEngine.js.map +1 -1
  44. package/dist/core/State.d.ts +1 -2
  45. package/dist/core/State.d.ts.map +1 -1
  46. package/dist/core/State.js +5 -6
  47. package/dist/core/State.js.map +1 -1
  48. package/dist/core/Transition.d.ts +2 -2
  49. package/dist/core/Transition.d.ts.map +1 -1
  50. package/dist/core/Transition.js +3 -2
  51. package/dist/core/Transition.js.map +1 -1
  52. package/dist/types/route.d.ts +15 -4
  53. package/dist/types/route.d.ts.map +1 -1
  54. package/dist/utils/event.d.ts +6 -0
  55. package/dist/utils/event.d.ts.map +1 -0
  56. package/dist/utils/event.js +17 -0
  57. package/dist/utils/event.js.map +1 -0
  58. package/docs/ADAPTERS.md +1 -1
  59. package/docs/API_REFERENCE.md +15 -7
  60. package/docs/ARCHITECTURE.md +25 -5
  61. package/docs/CONSTRUCTOR_OPTIONS.md +2 -2
  62. package/docs/CONTEXT_MANAGEMENT.md +1 -1
  63. package/docs/GETTING_STARTED.md +1 -1
  64. package/docs/PERSISTENCE.md +3 -3
  65. package/examples/business-onboarding.ts +97 -70
  66. package/examples/company-qna-agent.ts +4 -4
  67. package/examples/custom-database-persistence.ts +2 -2
  68. package/examples/declarative-agent.ts +3 -3
  69. package/examples/extracted-data-modification.ts +1 -1
  70. package/examples/healthcare-agent.ts +9 -3
  71. package/examples/openai-agent.ts +1 -1
  72. package/examples/opensearch-persistence.ts +2 -2
  73. package/examples/persistent-onboarding.ts +18 -12
  74. package/examples/prisma-persistence.ts +3 -3
  75. package/examples/redis-persistence.ts +3 -3
  76. package/examples/travel-agent.ts +23 -4
  77. package/package.json +1 -1
  78. package/src/core/Agent.ts +78 -227
  79. package/src/core/ResponseEngine.ts +2 -2
  80. package/src/core/Route.ts +34 -3
  81. package/src/core/RoutingEngine.ts +663 -2
  82. package/src/core/State.ts +6 -13
  83. package/src/core/Transition.ts +6 -3
  84. package/src/types/route.ts +15 -5
  85. package/src/utils/event.ts +16 -0
@@ -1,11 +1,15 @@
1
1
  import type { Event } from "../types/history";
2
2
  import type { Route } from "./Route";
3
+ import type { State } from "./State";
3
4
  import type { StructuredSchema } from "../types/schema";
4
5
  import type { RoutingDecision } from "../types/routing";
5
6
  import type { SessionState } from "../types/session";
7
+ import type { AiProvider } from "../types/ai";
6
8
  export interface RoutingDecisionOutput {
7
9
  context: string;
8
10
  routes: Record<string, number>;
11
+ selectedStateId?: string;
12
+ stateReasoning?: string;
9
13
  responseDirectives?: string[];
10
14
  extractions?: Array<{
11
15
  name: string;
@@ -23,13 +27,75 @@ export interface RoutingEngineOptions {
23
27
  export declare class RoutingEngine<TContext = unknown> {
24
28
  private readonly options?;
25
29
  constructor(options?: RoutingEngineOptions | undefined);
26
- buildDynamicRoutingSchema(routes: Route<TContext>[], extrasSchema?: StructuredSchema): StructuredSchema;
30
+ /**
31
+ * Optimized decision for single-route scenarios
32
+ * Skips route scoring and only does state selection
33
+ * @private
34
+ */
35
+ private decideSingleRouteState;
36
+ /**
37
+ * Identify valid next candidate states based on current state and extracted data
38
+ * Returns state with isRouteComplete flag if route is complete (all states skipped + has END_ROUTE transition)
39
+ */
40
+ getCandidateStates<TExtracted = unknown>(route: Route<TContext, TExtracted>, currentState: State<TContext, TExtracted> | undefined, extracted: Partial<TExtracted>): Array<{
41
+ state: State<TContext, TExtracted>;
42
+ condition?: string;
43
+ requiredData?: string[];
44
+ gatherFields?: string[];
45
+ isRouteComplete?: boolean;
46
+ }>;
47
+ /**
48
+ * Full routing orchestration: builds prompt and schema, calls AI, selects route/state,
49
+ * and updates the session (including initialData merge when entering a new route).
50
+ *
51
+ * OPTIMIZATION: If there's only 1 route, skips route scoring and only does state selection.
52
+ */
53
+ decideRouteAndState(params: {
54
+ routes: Route<TContext, unknown>[];
55
+ session: SessionState;
56
+ history: Event[];
57
+ agentMeta?: {
58
+ name?: string;
59
+ goal?: string;
60
+ description?: string;
61
+ personality?: string;
62
+ };
63
+ ai: AiProvider;
64
+ context: TContext;
65
+ signal?: AbortSignal;
66
+ }): Promise<{
67
+ selectedRoute?: Route<TContext>;
68
+ selectedState?: State<TContext>;
69
+ responseDirectives?: string[];
70
+ session: SessionState;
71
+ isRouteComplete?: boolean;
72
+ }>;
73
+ /**
74
+ * Build prompt for state selection within a single route
75
+ * @private
76
+ */
77
+ private buildStateSelectionPrompt;
78
+ /**
79
+ * Build schema for state selection
80
+ * @private
81
+ */
82
+ private buildStateSelectionSchema;
83
+ buildDynamicRoutingSchema(routes: Route<TContext>[], extrasSchema?: StructuredSchema, activeRouteStates?: {
84
+ stateId: string;
85
+ description: string;
86
+ }[]): StructuredSchema;
27
87
  buildRoutingPrompt(history: Event[], routes: Route<TContext>[], lastMessage: string, agentMeta?: {
28
88
  name?: string;
29
89
  goal?: string;
30
90
  description?: string;
31
91
  personality?: string;
32
- }, session?: SessionState): string;
92
+ }, session?: SessionState, activeRouteStates?: Array<{
93
+ stateId: string;
94
+ description: string;
95
+ condition?: string;
96
+ requiredData?: string[];
97
+ gatherFields?: string[];
98
+ }>): string;
33
99
  decideRouteFromScores(output: RoutingDecision): {
34
100
  routeId: string;
35
101
  maxScore: number;
@@ -1 +1 @@
1
- {"version":3,"file":"RoutingEngine.d.ts","sourceRoot":"","sources":["../../../src/core/RoutingEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QAEb,KAAK,EAAE,GAAG,CAAC;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;KAChC,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAa,CAAC,QAAQ,GAAG,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,oBAAoB,YAAA;IAE3D,yBAAyB,CACvB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EACzB,YAAY,CAAC,EAAE,gBAAgB,GAC9B,gBAAgB;IAiDnB,kBAAkB,CAChB,OAAO,EAAE,KAAK,EAAE,EAChB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EACD,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM;IA0DT,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB;CAUF"}
1
+ {"version":3,"file":"RoutingEngine.d.ts","sourceRoot":"","sources":["../../../src/core/RoutingEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QAEb,KAAK,EAAE,GAAG,CAAC;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;KAChC,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAa,CAAC,QAAQ,GAAG,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,oBAAoB,YAAA;IAE3D;;;;OAIG;YACW,sBAAsB;IAuIpC;;;OAGG;IACH,kBAAkB,CAAC,UAAU,GAAG,OAAO,EACrC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,EAClC,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,SAAS,EACrD,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAC7B,KAAK,CAAC;QACP,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IAkGF;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE;QAChC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE;YACV,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,EAAE,EAAE,UAAU,CAAC;QACf,OAAO,EAAE,QAAQ,CAAC;QAClB,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC;QACV,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,YAAY,CAAC;QACtB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IAqKF;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAgHjC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA6BjC,yBAAyB,CACvB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EACzB,YAAY,CAAC,EAAE,gBAAgB,EAC/B,iBAAiB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,GAC7D,gBAAgB;IAuEnB,kBAAkB,CAChB,OAAO,EAAE,KAAK,EAAE,EAChB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EACD,OAAO,CAAC,EAAE,YAAY,EACtB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,GACD,MAAM;IA4FT,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB;CAUF"}
@@ -1,12 +1,377 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RoutingEngine = void 0;
4
+ const session_1 = require("../types/session");
4
5
  const PromptComposer_1 = require("./PromptComposer");
6
+ const event_1 = require("../utils/event");
5
7
  class RoutingEngine {
6
8
  constructor(options) {
7
9
  this.options = options;
8
10
  }
9
- buildDynamicRoutingSchema(routes, extrasSchema) {
11
+ /**
12
+ * Optimized decision for single-route scenarios
13
+ * Skips route scoring and only does state selection
14
+ * @private
15
+ */
16
+ async decideSingleRouteState(params) {
17
+ const { route, session, history, agentMeta, ai, context, signal } = params;
18
+ let updatedSession = session;
19
+ const selectedRoute = route;
20
+ // Enter route if not already in it
21
+ if (!session.currentRoute || session.currentRoute.id !== route.id) {
22
+ updatedSession = (0, session_1.enterRoute)(session, route.id, route.title);
23
+ if (route.initialData) {
24
+ updatedSession = (0, session_1.mergeExtracted)(updatedSession, route.initialData);
25
+ console.log(`[RoutingEngine] Single-route: Merged initial data:`, route.initialData);
26
+ }
27
+ console.log(`[RoutingEngine] Single-route: Entered route: ${route.title}`);
28
+ }
29
+ // Get candidate states
30
+ const currentState = updatedSession.currentState
31
+ ? route.getState(updatedSession.currentState.id)
32
+ : undefined;
33
+ const candidates = this.getCandidateStates(route, currentState, updatedSession.extracted);
34
+ if (candidates.length === 0) {
35
+ console.warn(`[RoutingEngine] Single-route: No valid states found`);
36
+ return { selectedRoute, session: updatedSession };
37
+ }
38
+ // If only one candidate, check if route is complete
39
+ if (candidates.length === 1) {
40
+ const isRouteComplete = candidates[0].isRouteComplete;
41
+ if (isRouteComplete) {
42
+ console.log(`[RoutingEngine] Single-route: Route complete - all data collected`);
43
+ }
44
+ else {
45
+ console.log(`[RoutingEngine] Single-route: Only one valid state: ${candidates[0].state.id}`);
46
+ }
47
+ return {
48
+ selectedRoute,
49
+ selectedState: candidates[0].state,
50
+ session: updatedSession,
51
+ isRouteComplete,
52
+ };
53
+ }
54
+ // Multiple candidates - use AI to select best state
55
+ const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
56
+ const statePrompt = this.buildStateSelectionPrompt(route, currentState, candidates, updatedSession.extracted, history, lastUserMessage, agentMeta);
57
+ const stateSchema = this.buildStateSelectionSchema(candidates.map((c) => c.state.id));
58
+ const stateResult = await ai.generateMessage({
59
+ prompt: statePrompt,
60
+ history,
61
+ context,
62
+ signal,
63
+ parameters: {
64
+ jsonSchema: stateSchema,
65
+ schemaName: "state_selection",
66
+ },
67
+ });
68
+ const selectedStateId = stateResult.structured?.selectedStateId;
69
+ const selectedState = candidates.find((c) => c.state.id === selectedStateId)?.state;
70
+ if (selectedState) {
71
+ console.log(`[RoutingEngine] Single-route: AI selected state: ${selectedState.id}`);
72
+ console.log(`[RoutingEngine] Single-route: Reasoning: ${stateResult.structured?.reasoning}`);
73
+ }
74
+ else {
75
+ console.warn(`[RoutingEngine] Single-route: Invalid state ID returned, using first candidate`);
76
+ }
77
+ return {
78
+ selectedRoute,
79
+ selectedState: selectedState || candidates[0].state,
80
+ responseDirectives: stateResult.structured?.responseDirectives,
81
+ session: updatedSession,
82
+ };
83
+ }
84
+ /**
85
+ * Identify valid next candidate states based on current state and extracted data
86
+ * Returns state with isRouteComplete flag if route is complete (all states skipped + has END_ROUTE transition)
87
+ */
88
+ getCandidateStates(route, currentState, extracted) {
89
+ const candidates = [];
90
+ if (!currentState) {
91
+ const initialState = route.initialState;
92
+ if (initialState.shouldSkip(extracted)) {
93
+ const transitions = initialState.getTransitions();
94
+ for (const transition of transitions) {
95
+ const target = transition.getTarget();
96
+ if (target && !target.shouldSkip(extracted)) {
97
+ candidates.push({
98
+ state: target,
99
+ condition: transition.condition,
100
+ requiredData: target.requiredData,
101
+ gatherFields: target.gatherFields,
102
+ });
103
+ }
104
+ }
105
+ }
106
+ else {
107
+ candidates.push({
108
+ state: initialState,
109
+ requiredData: initialState.requiredData,
110
+ gatherFields: initialState.gatherFields,
111
+ });
112
+ }
113
+ return candidates;
114
+ }
115
+ const transitions = currentState.getTransitions();
116
+ let hasEndRoute = false;
117
+ for (const transition of transitions) {
118
+ const target = transition.getTarget();
119
+ // Check for END_ROUTE transition (no target state)
120
+ if (!target &&
121
+ transition.spec.state &&
122
+ typeof transition.spec.state === "symbol") {
123
+ hasEndRoute = true;
124
+ continue;
125
+ }
126
+ if (!target)
127
+ continue;
128
+ if (target.shouldSkip(extracted)) {
129
+ console.log(`[RoutingEngine] Skipping state ${target.id} (skipIf condition met)`);
130
+ continue;
131
+ }
132
+ candidates.push({
133
+ state: target,
134
+ condition: transition.condition,
135
+ requiredData: target.requiredData,
136
+ gatherFields: target.gatherFields,
137
+ });
138
+ }
139
+ // If no valid candidates found
140
+ if (candidates.length === 0) {
141
+ // If current state has END_ROUTE transition, the route is complete
142
+ if (hasEndRoute) {
143
+ console.log(`[RoutingEngine] Route complete: all states processed, END_ROUTE reached`);
144
+ // Return current state with completion flag
145
+ return [
146
+ {
147
+ state: currentState,
148
+ condition: "Route complete - all data collected",
149
+ isRouteComplete: true,
150
+ },
151
+ ];
152
+ }
153
+ // Otherwise, stay in current state if it's still valid
154
+ if (!currentState.shouldSkip(extracted)) {
155
+ candidates.push({
156
+ state: currentState,
157
+ condition: "Continue in current state (no valid transitions)",
158
+ requiredData: currentState.requiredData,
159
+ gatherFields: currentState.gatherFields,
160
+ });
161
+ }
162
+ }
163
+ return candidates;
164
+ }
165
+ /**
166
+ * Full routing orchestration: builds prompt and schema, calls AI, selects route/state,
167
+ * and updates the session (including initialData merge when entering a new route).
168
+ *
169
+ * OPTIMIZATION: If there's only 1 route, skips route scoring and only does state selection.
170
+ */
171
+ async decideRouteAndState(params) {
172
+ const { routes, session, history, agentMeta, ai, context, signal } = params;
173
+ if (routes.length === 0) {
174
+ return { session };
175
+ }
176
+ // OPTIMIZATION: Single route - skip route scoring, only do state selection
177
+ if (routes.length === 1) {
178
+ return this.decideSingleRouteState({
179
+ route: routes[0],
180
+ session,
181
+ history,
182
+ agentMeta,
183
+ ai,
184
+ context,
185
+ signal,
186
+ });
187
+ }
188
+ const lastUserMessage = (0, event_1.getLastMessageFromHistory)(history);
189
+ let activeRouteStates;
190
+ let activeRoute;
191
+ let isRouteComplete = false;
192
+ if (session.currentRoute) {
193
+ activeRoute = routes.find((r) => r.id === session.currentRoute?.id);
194
+ if (activeRoute) {
195
+ const currentState = session.currentState
196
+ ? activeRoute.getState(session.currentState.id)
197
+ : undefined;
198
+ const candidates = this.getCandidateStates(activeRoute, currentState, session.extracted);
199
+ // Check if route is complete
200
+ if (candidates.length === 1 && candidates[0].isRouteComplete) {
201
+ isRouteComplete = true;
202
+ console.log(`[RoutingEngine] Route ${activeRoute.title} is complete - all data collected`);
203
+ // Don't include states in routing if route is complete
204
+ activeRouteStates = undefined;
205
+ }
206
+ else {
207
+ activeRouteStates = candidates.map((c) => ({
208
+ stateId: c.state.id,
209
+ description: c.state.description || "",
210
+ condition: c.condition,
211
+ requiredData: c.requiredData,
212
+ gatherFields: c.gatherFields,
213
+ }));
214
+ console.log(`[RoutingEngine] Found ${activeRouteStates.length} candidate states for active route`);
215
+ }
216
+ }
217
+ }
218
+ const routingSchema = this.buildDynamicRoutingSchema(routes, undefined, activeRouteStates);
219
+ const routingPrompt = this.buildRoutingPrompt(history, routes, lastUserMessage, agentMeta, session, activeRouteStates);
220
+ const routingResult = await ai.generateMessage({
221
+ prompt: routingPrompt,
222
+ history,
223
+ context,
224
+ signal,
225
+ parameters: {
226
+ jsonSchema: routingSchema,
227
+ schemaName: "routing_output",
228
+ },
229
+ });
230
+ let selectedRoute;
231
+ let selectedState;
232
+ let responseDirectives;
233
+ let updatedSession = session;
234
+ if (routingResult.structured?.routes) {
235
+ const decision = this.decideRouteFromScores({
236
+ context: routingResult.structured.context,
237
+ routes: routingResult.structured.routes,
238
+ responseDirectives: routingResult.structured.responseDirectives,
239
+ });
240
+ selectedRoute = routes.find((r) => r.id === decision.routeId);
241
+ responseDirectives = routingResult.structured.responseDirectives;
242
+ if (selectedRoute === activeRoute &&
243
+ routingResult.structured.selectedStateId &&
244
+ activeRoute) {
245
+ selectedState = activeRoute.getState(routingResult.structured.selectedStateId);
246
+ if (selectedState) {
247
+ console.log(`[RoutingEngine] AI selected state: ${selectedState.id} in active route`);
248
+ console.log(`[RoutingEngine] State reasoning: ${routingResult.structured.stateReasoning}`);
249
+ }
250
+ }
251
+ if (selectedRoute) {
252
+ console.log(`[RoutingEngine] Selected route: ${selectedRoute.title}`);
253
+ if (!session.currentRoute ||
254
+ session.currentRoute.id !== selectedRoute.id) {
255
+ updatedSession = (0, session_1.enterRoute)(session, selectedRoute.id, selectedRoute.title);
256
+ if (selectedRoute.initialData) {
257
+ updatedSession = (0, session_1.mergeExtracted)(updatedSession, selectedRoute.initialData);
258
+ console.log(`[RoutingEngine] Merged initial data:`, selectedRoute.initialData);
259
+ }
260
+ console.log(`[RoutingEngine] Entered route: ${selectedRoute.title}`);
261
+ }
262
+ }
263
+ }
264
+ return {
265
+ selectedRoute,
266
+ selectedState,
267
+ responseDirectives,
268
+ session: updatedSession,
269
+ isRouteComplete,
270
+ };
271
+ }
272
+ /**
273
+ * Build prompt for state selection within a single route
274
+ * @private
275
+ */
276
+ buildStateSelectionPrompt(route, currentState, candidates, extracted, history, lastMessage, agentMeta) {
277
+ const pc = new PromptComposer_1.PromptComposer();
278
+ // Add agent metadata
279
+ if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
280
+ pc.addAgentMeta({
281
+ name: agentMeta?.name || "Agent",
282
+ description: agentMeta?.description,
283
+ goal: agentMeta?.goal,
284
+ });
285
+ }
286
+ const personality = agentMeta?.personality || "Tone: brief, natural, 1-2 short sentences.";
287
+ pc.addPersonality(personality);
288
+ // Add route context
289
+ pc.addInstruction(`Active Route: ${route.title}\nDescription: ${route.description || "N/A"}`);
290
+ // Add current state context
291
+ if (currentState) {
292
+ pc.addInstruction(`Current State: ${currentState.id}\nDescription: ${currentState.description || "N/A"}`);
293
+ }
294
+ else {
295
+ pc.addInstruction("Current State: None (entering route)");
296
+ }
297
+ // Add extracted data context
298
+ if (Object.keys(extracted).length > 0) {
299
+ pc.addInstruction(`Extracted Data So Far:\n${JSON.stringify(extracted, null, 2)}`);
300
+ }
301
+ else {
302
+ pc.addInstruction("Extracted Data: None yet");
303
+ }
304
+ // Add conversation history
305
+ pc.addInteractionHistory(history);
306
+ pc.addLastMessage(lastMessage);
307
+ // Add candidate states
308
+ const stateDescriptions = candidates.map((candidate, idx) => {
309
+ const parts = [
310
+ `${idx + 1}. State ID: ${candidate.state.id}`,
311
+ ` Description: ${candidate.state.description || "N/A"}`,
312
+ ];
313
+ if (candidate.condition) {
314
+ parts.push(` Condition: ${candidate.condition}`);
315
+ }
316
+ if (candidate.requiredData && candidate.requiredData.length > 0) {
317
+ parts.push(` Required Data: ${candidate.requiredData.join(", ")}`);
318
+ }
319
+ if (candidate.gatherFields && candidate.gatherFields.length > 0) {
320
+ parts.push(` Gathers: ${candidate.gatherFields.join(", ")}`);
321
+ }
322
+ return parts.join("\n");
323
+ });
324
+ pc.addInstruction(`Available States to Transition To:\n${stateDescriptions.join("\n\n")}`);
325
+ // Add decision instructions
326
+ pc.addInstruction([
327
+ "Task: Decide which state to transition to based on:",
328
+ "1. The user's current message and intent",
329
+ "2. The conversation history and context",
330
+ "3. The extracted data we already have",
331
+ "4. The conditions and requirements of each state",
332
+ "5. The logical flow of the conversation",
333
+ "",
334
+ "Rules:",
335
+ "- If a state has a condition, evaluate whether it's met based on context",
336
+ "- If a state requires data we don't have, consider if we should gather it now",
337
+ "- Choose the state that makes the most sense for moving the conversation forward",
338
+ "- States with skipIf conditions that are met have already been filtered out",
339
+ "",
340
+ "Return ONLY JSON matching the provided schema.",
341
+ ].join("\n"));
342
+ return pc.build();
343
+ }
344
+ /**
345
+ * Build schema for state selection
346
+ * @private
347
+ */
348
+ buildStateSelectionSchema(validStateIds) {
349
+ return {
350
+ description: "State transition decision based on conversation context and extracted data",
351
+ type: "object",
352
+ properties: {
353
+ reasoning: {
354
+ type: "string",
355
+ nullable: false,
356
+ description: "Brief explanation of why this state was selected",
357
+ },
358
+ selectedStateId: {
359
+ type: "string",
360
+ nullable: false,
361
+ description: "The ID of the selected state to transition to",
362
+ enum: validStateIds,
363
+ },
364
+ responseDirectives: {
365
+ type: "array",
366
+ items: { type: "string" },
367
+ description: "Optional bullet points the response should address (concise)",
368
+ },
369
+ },
370
+ required: ["reasoning", "selectedStateId"],
371
+ additionalProperties: false,
372
+ };
373
+ }
374
+ buildDynamicRoutingSchema(routes, extrasSchema, activeRouteStates) {
10
375
  const routeIds = routes.map((r) => r.id);
11
376
  const routeProperties = {};
12
377
  for (const id of routeIds) {
@@ -43,13 +408,33 @@ class RoutingEngine {
43
408
  required: ["context", "routes"],
44
409
  additionalProperties: false,
45
410
  };
411
+ // Add state selection fields if there's an active route with states
412
+ if (activeRouteStates && activeRouteStates.length > 0) {
413
+ base.properties = base.properties || {};
414
+ base.properties.selectedStateId = {
415
+ type: "string",
416
+ nullable: false,
417
+ description: "The state ID to transition to within the active route (required if continuing in current route)",
418
+ enum: activeRouteStates.map((s) => s.stateId),
419
+ };
420
+ base.properties.stateReasoning = {
421
+ type: "string",
422
+ nullable: false,
423
+ description: "Brief explanation of why this state was selected",
424
+ };
425
+ base.required = [
426
+ ...(base.required || []),
427
+ "selectedStateId",
428
+ "stateReasoning",
429
+ ];
430
+ }
46
431
  if (extrasSchema) {
47
432
  base.properties = base.properties || {};
48
433
  base.properties.extractions = extrasSchema;
49
434
  }
50
435
  return base;
51
436
  }
52
- buildRoutingPrompt(history, routes, lastMessage, agentMeta, session) {
437
+ buildRoutingPrompt(history, routes, lastMessage, agentMeta, session, activeRouteStates) {
53
438
  const pc = new PromptComposer_1.PromptComposer();
54
439
  if (agentMeta?.name || agentMeta?.goal || agentMeta?.description) {
55
440
  pc.addAgentMeta({
@@ -78,6 +463,35 @@ class RoutingEngine {
78
463
  }
79
464
  sessionInfo.push("Note: User is mid-conversation. They may want to continue current route or switch to a new one based on their intent.");
80
465
  pc.addInstruction(sessionInfo.join("\n"));
466
+ // Add available states for the active route
467
+ if (activeRouteStates && activeRouteStates.length > 0) {
468
+ const stateInfo = [
469
+ "",
470
+ "Available states in active route (choose one to transition to):",
471
+ ];
472
+ activeRouteStates.forEach((state, idx) => {
473
+ stateInfo.push(`${idx + 1}. State: ${state.stateId}`);
474
+ if (state.description) {
475
+ stateInfo.push(` Description: ${state.description}`);
476
+ }
477
+ if (state.condition) {
478
+ stateInfo.push(` Condition: ${state.condition}`);
479
+ }
480
+ if (state.requiredData && state.requiredData.length > 0) {
481
+ stateInfo.push(` Required data: ${state.requiredData.join(", ")}`);
482
+ }
483
+ if (state.gatherFields && state.gatherFields.length > 0) {
484
+ stateInfo.push(` Will gather: ${state.gatherFields.join(", ")}`);
485
+ }
486
+ });
487
+ stateInfo.push("");
488
+ stateInfo.push("IMPORTANT: You MUST select a state to transition to. Evaluate which state makes the most sense based on:");
489
+ stateInfo.push("- The conversation flow and what's been collected");
490
+ stateInfo.push("- What data is still needed vs already present");
491
+ stateInfo.push("- The logical next step in the conversation");
492
+ stateInfo.push("- Whether conditions for states are met");
493
+ pc.addInstruction(stateInfo.join("\n"));
494
+ }
81
495
  }
82
496
  pc.addInteractionHistory(history);
83
497
  pc.addLastMessage(lastMessage);
@@ -1 +1 @@
1
- {"version":3,"file":"RoutingEngine.js","sourceRoot":"","sources":["../../../src/core/RoutingEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RoutingEngine.js","sourceRoot":"","sources":["../../../src/core/RoutingEngine.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,9 @@ export declare class State<TContext = unknown, TExtracted = unknown> {
21
21
  * Create a transition from this state to another
22
22
  *
23
23
  * @param spec - Transition specification (chatState, toolState, or direct state)
24
- * @param condition - Optional condition for this transition
25
24
  * @returns TransitionResult that supports chaining
26
25
  */
27
- transitionTo(spec: TransitionSpec<TContext, TExtracted>, condition?: string): TransitionResult<TContext, TExtracted>;
26
+ transitionTo(spec: TransitionSpec<TContext, TExtracted>): TransitionResult<TContext, TExtracted>;
28
27
  /**
29
28
  * Add a guideline specific to this state
30
29
  */
@@ -1 +1 @@
1
- {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../src/core/State.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;GAEG;AACH,qBAAa,KAAK,CAAC,QAAQ,GAAG,OAAO,EAAE,UAAU,GAAG,OAAO;aASvC,OAAO,EAAE,MAAM;aACf,WAAW,CAAC,EAAE,MAAM;IATtC,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,WAAW,CAA0C;IAC7D,OAAO,CAAC,UAAU,CAAmB;IACrC,SAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,SAAgB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC;IACrE,SAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;gBAGtB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,YAAA,EACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,EACpD,YAAY,CAAC,EAAE,MAAM,EAAE;IASzB;;;;;;OAMG;IACH,YAAY,CACV,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,EAC1C,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAmDzC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;IAIpD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO;IAKnD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO;IAOxD;;OAEG;IACH,MAAM,IAAI,QAAQ;IAOlB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAepC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAa1B"}
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../src/core/State.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;GAEG;AACH,qBAAa,KAAK,CAAC,QAAQ,GAAG,OAAO,EAAE,UAAU,GAAG,OAAO;aASvC,OAAO,EAAE,MAAM;aACf,WAAW,CAAC,EAAE,MAAM;IATtC,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,WAAW,CAA0C;IAC7D,OAAO,CAAC,UAAU,CAAmB;IACrC,SAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,SAAgB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC;IACrE,SAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;gBAGtB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,YAAA,EACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,EACpD,YAAY,CAAC,EAAE,MAAM,EAAE;IASzB;;;;;OAKG;IACH,YAAY,CACV,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,GACzC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAgDzC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;IAIpD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO;IAKnD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO;IAOxD;;OAEG;IACH,MAAM,IAAI,QAAQ;IAOlB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAapC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAa1B"}
@@ -26,29 +26,28 @@ class State {
26
26
  * Create a transition from this state to another
27
27
  *
28
28
  * @param spec - Transition specification (chatState, toolState, or direct state)
29
- * @param condition - Optional condition for this transition
30
29
  * @returns TransitionResult that supports chaining
31
30
  */
32
- transitionTo(spec, condition) {
31
+ transitionTo(spec) {
33
32
  // Handle END_ROUTE
34
33
  if (spec.state &&
35
34
  typeof spec.state === "symbol" &&
36
35
  spec.state === constants_1.END_ROUTE) {
37
- const endTransition = new Transition_1.Transition(this.getRef(), { state: constants_1.END_ROUTE }, condition);
36
+ const endTransition = new Transition_1.Transition(this.getRef(), { state: constants_1.END_ROUTE, condition: spec.condition });
38
37
  this.transitions.push(endTransition);
39
38
  // Return a terminal state reference
40
39
  return this.createTerminalRef();
41
40
  }
42
41
  // Handle direct state reference
43
42
  if (spec.state && typeof spec.state !== "symbol") {
44
- const transition = new Transition_1.Transition(this.getRef(), spec, condition);
43
+ const transition = new Transition_1.Transition(this.getRef(), spec);
45
44
  this.transitions.push(transition);
46
45
  return this.createStateRefWithTransition(spec.state);
47
46
  }
48
47
  // Create new target state for chatState or toolState
49
48
  const targetState = new State(this.routeId, spec.chatState, spec.id, // Use custom ID if provided
50
49
  spec.gather, spec.skipIf, spec.requiredData);
51
- const transition = new Transition_1.Transition(this.getRef(), spec, condition);
50
+ const transition = new Transition_1.Transition(this.getRef(), spec);
52
51
  transition.setTarget(targetState);
53
52
  this.transitions.push(transition);
54
53
  return this.createStateRefWithTransition(targetState.getRef(), targetState);
@@ -103,7 +102,7 @@ class State {
103
102
  const stateInstance = state || this;
104
103
  return {
105
104
  ...ref,
106
- transitionTo: (spec, condition) => stateInstance.transitionTo(spec, condition),
105
+ transitionTo: (spec) => stateInstance.transitionTo(spec),
107
106
  };
108
107
  }
109
108
  /**