@falai/agent 0.9.0 → 0.9.2

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 (145) hide show
  1. package/README.md +42 -34
  2. package/dist/cjs/src/core/Agent.d.ts +19 -5
  3. package/dist/cjs/src/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/src/core/Agent.js +79 -35
  5. package/dist/cjs/src/core/Agent.js.map +1 -1
  6. package/dist/cjs/src/core/ResponseModal.d.ts +9 -3
  7. package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -1
  8. package/dist/cjs/src/core/ResponseModal.js +121 -55
  9. package/dist/cjs/src/core/ResponseModal.js.map +1 -1
  10. package/dist/cjs/src/core/ResponsePipeline.d.ts +8 -4
  11. package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -1
  12. package/dist/cjs/src/core/ResponsePipeline.js +47 -19
  13. package/dist/cjs/src/core/ResponsePipeline.js.map +1 -1
  14. package/dist/cjs/src/core/Route.d.ts +12 -5
  15. package/dist/cjs/src/core/Route.d.ts.map +1 -1
  16. package/dist/cjs/src/core/Route.js +26 -5
  17. package/dist/cjs/src/core/Route.js.map +1 -1
  18. package/dist/cjs/src/core/RoutingEngine.d.ts +5 -0
  19. package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -1
  20. package/dist/cjs/src/core/RoutingEngine.js +37 -25
  21. package/dist/cjs/src/core/RoutingEngine.js.map +1 -1
  22. package/dist/cjs/src/core/SessionManager.d.ts +9 -1
  23. package/dist/cjs/src/core/SessionManager.d.ts.map +1 -1
  24. package/dist/cjs/src/core/SessionManager.js +27 -5
  25. package/dist/cjs/src/core/SessionManager.js.map +1 -1
  26. package/dist/cjs/src/core/Step.d.ts +60 -7
  27. package/dist/cjs/src/core/Step.d.ts.map +1 -1
  28. package/dist/cjs/src/core/Step.js +151 -4
  29. package/dist/cjs/src/core/Step.js.map +1 -1
  30. package/dist/cjs/src/core/ToolManager.d.ts +234 -0
  31. package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
  32. package/dist/cjs/src/core/ToolManager.js +1117 -0
  33. package/dist/cjs/src/core/ToolManager.js.map +1 -0
  34. package/dist/cjs/src/index.d.ts +2 -3
  35. package/dist/cjs/src/index.d.ts.map +1 -1
  36. package/dist/cjs/src/index.js +5 -3
  37. package/dist/cjs/src/index.js.map +1 -1
  38. package/dist/cjs/src/types/agent.d.ts +1 -1
  39. package/dist/cjs/src/types/agent.d.ts.map +1 -1
  40. package/dist/cjs/src/types/index.d.ts +3 -2
  41. package/dist/cjs/src/types/index.d.ts.map +1 -1
  42. package/dist/cjs/src/types/index.js +3 -1
  43. package/dist/cjs/src/types/index.js.map +1 -1
  44. package/dist/cjs/src/types/route.d.ts +6 -4
  45. package/dist/cjs/src/types/route.d.ts.map +1 -1
  46. package/dist/cjs/src/types/tool.d.ts +84 -14
  47. package/dist/cjs/src/types/tool.d.ts.map +1 -1
  48. package/dist/cjs/src/types/tool.js +13 -0
  49. package/dist/cjs/src/types/tool.js.map +1 -1
  50. package/dist/src/core/Agent.d.ts +19 -5
  51. package/dist/src/core/Agent.d.ts.map +1 -1
  52. package/dist/src/core/Agent.js +79 -35
  53. package/dist/src/core/Agent.js.map +1 -1
  54. package/dist/src/core/ResponseModal.d.ts +9 -3
  55. package/dist/src/core/ResponseModal.d.ts.map +1 -1
  56. package/dist/src/core/ResponseModal.js +121 -55
  57. package/dist/src/core/ResponseModal.js.map +1 -1
  58. package/dist/src/core/ResponsePipeline.d.ts +8 -4
  59. package/dist/src/core/ResponsePipeline.d.ts.map +1 -1
  60. package/dist/src/core/ResponsePipeline.js +47 -19
  61. package/dist/src/core/ResponsePipeline.js.map +1 -1
  62. package/dist/src/core/Route.d.ts +12 -5
  63. package/dist/src/core/Route.d.ts.map +1 -1
  64. package/dist/src/core/Route.js +26 -5
  65. package/dist/src/core/Route.js.map +1 -1
  66. package/dist/src/core/RoutingEngine.d.ts +5 -0
  67. package/dist/src/core/RoutingEngine.d.ts.map +1 -1
  68. package/dist/src/core/RoutingEngine.js +37 -25
  69. package/dist/src/core/RoutingEngine.js.map +1 -1
  70. package/dist/src/core/SessionManager.d.ts +9 -1
  71. package/dist/src/core/SessionManager.d.ts.map +1 -1
  72. package/dist/src/core/SessionManager.js +27 -5
  73. package/dist/src/core/SessionManager.js.map +1 -1
  74. package/dist/src/core/Step.d.ts +60 -7
  75. package/dist/src/core/Step.d.ts.map +1 -1
  76. package/dist/src/core/Step.js +151 -4
  77. package/dist/src/core/Step.js.map +1 -1
  78. package/dist/src/core/ToolManager.d.ts +234 -0
  79. package/dist/src/core/ToolManager.d.ts.map +1 -0
  80. package/dist/src/core/ToolManager.js +1111 -0
  81. package/dist/src/core/ToolManager.js.map +1 -0
  82. package/dist/src/index.d.ts +2 -3
  83. package/dist/src/index.d.ts.map +1 -1
  84. package/dist/src/index.js +1 -1
  85. package/dist/src/index.js.map +1 -1
  86. package/dist/src/types/agent.d.ts +1 -1
  87. package/dist/src/types/agent.d.ts.map +1 -1
  88. package/dist/src/types/index.d.ts +3 -2
  89. package/dist/src/types/index.d.ts.map +1 -1
  90. package/dist/src/types/index.js +1 -0
  91. package/dist/src/types/index.js.map +1 -1
  92. package/dist/src/types/route.d.ts +6 -4
  93. package/dist/src/types/route.d.ts.map +1 -1
  94. package/dist/src/types/tool.d.ts +84 -14
  95. package/dist/src/types/tool.d.ts.map +1 -1
  96. package/dist/src/types/tool.js +12 -1
  97. package/dist/src/types/tool.js.map +1 -1
  98. package/docs/CONTRIBUTING.md +40 -0
  99. package/docs/README.md +12 -5
  100. package/docs/api/README.md +75 -45
  101. package/docs/api/overview.md +74 -32
  102. package/docs/core/agent/session-management.md +152 -5
  103. package/docs/core/ai-integration/response-processing.md +115 -4
  104. package/docs/core/conversation-flows/routes.md +130 -0
  105. package/docs/core/error-handling.md +638 -0
  106. package/docs/core/tools/tool-definition.md +684 -60
  107. package/docs/core/tools/tool-scoping.md +244 -53
  108. package/docs/guides/error-handling-patterns.md +578 -0
  109. package/docs/guides/getting-started/README.md +139 -28
  110. package/examples/advanced-patterns/knowledge-based-agent.ts +6 -6
  111. package/examples/advanced-patterns/persistent-onboarding.ts +30 -43
  112. package/examples/ai-providers/anthropic-integration.ts +9 -5
  113. package/examples/ai-providers/openai-integration.ts +11 -7
  114. package/examples/core-concepts/basic-agent.ts +106 -67
  115. package/examples/core-concepts/schema-driven-extraction.ts +10 -7
  116. package/examples/core-concepts/session-management.ts +71 -18
  117. package/examples/integrations/healthcare-integration.ts +15 -29
  118. package/examples/integrations/server-session-management.ts +3 -3
  119. package/examples/persistence/memory-sessions.ts +3 -3
  120. package/examples/tools/basic-tools.ts +293 -89
  121. package/examples/tools/data-enrichment-tools.ts +185 -75
  122. package/package.json +1 -1
  123. package/src/core/Agent.ts +98 -44
  124. package/src/core/ResponseModal.ts +148 -72
  125. package/src/core/ResponsePipeline.ts +82 -56
  126. package/src/core/Route.ts +39 -12
  127. package/src/core/RoutingEngine.ts +46 -42
  128. package/src/core/SessionManager.ts +39 -7
  129. package/src/core/Step.ts +198 -20
  130. package/src/core/ToolManager.ts +1394 -0
  131. package/src/index.ts +8 -3
  132. package/src/types/agent.ts +1 -1
  133. package/src/types/index.ts +13 -2
  134. package/src/types/route.ts +6 -4
  135. package/src/types/tool.ts +116 -25
  136. package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
  137. package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
  138. package/dist/cjs/src/core/ToolExecutor.js +0 -84
  139. package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
  140. package/dist/src/core/ToolExecutor.d.ts +0 -45
  141. package/dist/src/core/ToolExecutor.d.ts.map +0 -1
  142. package/dist/src/core/ToolExecutor.js +0 -80
  143. package/dist/src/core/ToolExecutor.js.map +0 -1
  144. package/docs/core/tools/tool-execution.md +0 -815
  145. package/src/core/ToolExecutor.ts +0 -126
@@ -74,6 +74,8 @@ Routes are selected by the AI routing system based on user intent and conversati
74
74
 
75
75
  Routes complete when all their required fields are present in the agent's collected data, regardless of which route collected the data. This enables flexible cross-route completion scenarios.
76
76
 
77
+ ### Basic Route Completion
78
+
77
79
  ```typescript
78
80
  // Route completion evaluation
79
81
  const isComplete = bookingRoute.isComplete(agent.getCollectedData());
@@ -86,6 +88,134 @@ if (missingFields.length > 0) {
86
88
  }
87
89
  ```
88
90
 
91
+ ### Route Completion with Error Handling
92
+
93
+ Proper error handling ensures accurate route completion detection:
94
+
95
+ ```typescript
96
+ const checkRouteCompletion = async (route: Route, agent: Agent) => {
97
+ try {
98
+ const collectedData = agent.getCollectedData();
99
+
100
+ // Check data-based completion
101
+ if (route.isComplete(collectedData)) {
102
+ return { complete: true, reason: "all_required_data_collected" };
103
+ }
104
+
105
+ // Check step-based completion (for routes with skipIf conditions)
106
+ const allStepsProcessed = route.steps.every(step => {
107
+ if (step.skipIf && step.skipIf(collectedData)) {
108
+ return true; // Step is skipped, counts as processed
109
+ }
110
+ return step.isCompleted;
111
+ });
112
+
113
+ if (allStepsProcessed) {
114
+ return { complete: true, reason: "all_steps_processed" };
115
+ }
116
+
117
+ // Check for explicit route termination
118
+ if (route.hasExplicitEnd()) {
119
+ return { complete: true, reason: "explicit_end_route" };
120
+ }
121
+
122
+ return {
123
+ complete: false,
124
+ missingFields: route.getMissingRequiredFields(collectedData),
125
+ progress: route.getCompletionProgress(collectedData)
126
+ };
127
+ } catch (error) {
128
+ console.error("Route completion check failed:", error);
129
+ return {
130
+ complete: false,
131
+ error: error.message,
132
+ fallback: true
133
+ };
134
+ }
135
+ };
136
+
137
+ // Usage with error handling
138
+ const completionResult = await checkRouteCompletion(bookingRoute, agent);
139
+
140
+ if (completionResult.error) {
141
+ console.warn("Completion check failed, assuming incomplete:", completionResult.error);
142
+ } else if (completionResult.complete) {
143
+ console.log(`Route completed: ${completionResult.reason}`);
144
+ } else {
145
+ console.log(`Route ${Math.round(completionResult.progress * 100)}% complete`);
146
+ console.log(`Missing: ${completionResult.missingFields.join(', ')}`);
147
+ }
148
+ ```
149
+
150
+ ### Handling Routes with Conditional Steps
151
+
152
+ Routes with `skipIf` conditions require special completion logic:
153
+
154
+ ```typescript
155
+ const conditionalRoute = agent.createRoute({
156
+ title: "Conditional Booking",
157
+ requiredFields: ["destination", "dates", "passengers"]
158
+ });
159
+
160
+ const askDestination = conditionalRoute.initialStep.nextStep({
161
+ prompt: "Where would you like to go?",
162
+ collect: ["destination"],
163
+ skipIf: (data) => !!data.destination, // Skip if already collected
164
+ });
165
+
166
+ const askDates = askDestination.nextStep({
167
+ prompt: "When would you like to travel?",
168
+ collect: ["dates"],
169
+ skipIf: (data) => !!data.dates,
170
+ });
171
+
172
+ const confirmBooking = askDates.nextStep({
173
+ prompt: "Confirm your booking details",
174
+ requires: ["destination", "dates", "passengers"],
175
+ onComplete: () => ({ endRoute: true }) // Explicit route termination
176
+ });
177
+
178
+ // Completion detection handles skipped steps
179
+ const response = await agent.respond({
180
+ message: "I want to go to Paris on March 15th for 2 passengers",
181
+ sessionId: "user-123"
182
+ });
183
+
184
+ // All steps may be skipped due to complete data extraction
185
+ // Route should still be marked as complete
186
+ console.log("Route complete:", response.isRouteComplete); // Should be true
187
+ ```
188
+
189
+ ### Error Recovery in Route Completion
190
+
191
+ ```typescript
192
+ const safeRouteCompletion = async (route: Route, agent: Agent) => {
193
+ const maxRetries = 3;
194
+ let attempt = 0;
195
+
196
+ while (attempt < maxRetries) {
197
+ try {
198
+ return await checkRouteCompletion(route, agent);
199
+ } catch (error) {
200
+ attempt++;
201
+ console.warn(`Route completion check attempt ${attempt} failed:`, error.message);
202
+
203
+ if (attempt >= maxRetries) {
204
+ // Final fallback - assume incomplete
205
+ return {
206
+ complete: false,
207
+ error: `Completion check failed after ${maxRetries} attempts: ${error.message}`,
208
+ fallback: true
209
+ };
210
+ }
211
+
212
+ // Brief delay before retry
213
+ await new Promise(resolve => setTimeout(resolve, 100 * attempt));
214
+ }
215
+ }
216
+ };
217
+ ```
218
+
89
219
  ## Route Transitions
90
220
 
91
221
  Routes can automatically transition to other routes upon completion using the `onComplete` configuration. With agent-level data, the target route may already have some of its required data.