@falai/agent 0.9.0-alpha-1 → 0.9.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.
- package/README.md +34 -22
- package/dist/cjs/src/core/Agent.d.ts +77 -59
- package/dist/cjs/src/core/Agent.d.ts.map +1 -1
- package/dist/cjs/src/core/Agent.js +284 -1060
- package/dist/cjs/src/core/Agent.js.map +1 -1
- package/dist/cjs/src/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/src/core/PersistenceManager.js +48 -25
- package/dist/cjs/src/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/src/core/PromptComposer.d.ts +1 -1
- package/dist/cjs/src/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/src/core/PromptComposer.js.map +1 -1
- package/dist/cjs/src/core/ResponseEngine.d.ts +13 -12
- package/dist/cjs/src/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/src/core/ResponseEngine.js +4 -4
- package/dist/cjs/src/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/src/core/ResponseModal.d.ts +205 -0
- package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/cjs/src/core/ResponseModal.js +1328 -0
- package/dist/cjs/src/core/ResponseModal.js.map +1 -0
- package/dist/cjs/src/core/ResponsePipeline.d.ts +66 -38
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/src/core/ResponsePipeline.js +72 -4
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/src/core/Route.d.ts +24 -5
- package/dist/cjs/src/core/Route.d.ts.map +1 -1
- package/dist/cjs/src/core/Route.js +45 -1
- package/dist/cjs/src/core/Route.js.map +1 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts +31 -6
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/src/core/RoutingEngine.js +113 -9
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/src/core/SessionManager.d.ts +14 -4
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/src/core/SessionManager.js +25 -5
- package/dist/cjs/src/core/SessionManager.js.map +1 -1
- package/dist/cjs/src/core/Step.d.ts +10 -10
- package/dist/cjs/src/core/Step.d.ts.map +1 -1
- package/dist/cjs/src/core/Step.js.map +1 -1
- package/dist/cjs/src/core/ToolExecutor.d.ts +4 -2
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +1 -1
- package/dist/cjs/src/core/ToolExecutor.js +13 -3
- package/dist/cjs/src/core/ToolExecutor.js.map +1 -1
- package/dist/cjs/src/index.d.ts +3 -1
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +7 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/types/agent.d.ts +42 -21
- package/dist/cjs/src/types/agent.d.ts.map +1 -1
- package/dist/cjs/src/types/agent.js.map +1 -1
- package/dist/cjs/src/types/ai.d.ts +1 -1
- package/dist/cjs/src/types/ai.d.ts.map +1 -1
- package/dist/cjs/src/types/index.d.ts +1 -1
- package/dist/cjs/src/types/index.d.ts.map +1 -1
- package/dist/cjs/src/types/index.js.map +1 -1
- package/dist/cjs/src/types/persistence.d.ts +0 -1
- package/dist/cjs/src/types/persistence.d.ts.map +1 -1
- package/dist/cjs/src/types/route.d.ts +22 -16
- package/dist/cjs/src/types/route.d.ts.map +1 -1
- package/dist/cjs/src/types/session.d.ts +6 -11
- package/dist/cjs/src/types/session.d.ts.map +1 -1
- package/dist/cjs/src/types/tool.d.ts +12 -6
- package/dist/cjs/src/types/tool.d.ts.map +1 -1
- package/dist/cjs/src/utils/clone.d.ts.map +1 -1
- package/dist/cjs/src/utils/clone.js +0 -4
- package/dist/cjs/src/utils/clone.js.map +1 -1
- package/dist/cjs/src/utils/history.d.ts +30 -1
- package/dist/cjs/src/utils/history.d.ts.map +1 -1
- package/dist/cjs/src/utils/history.js +169 -23
- package/dist/cjs/src/utils/history.js.map +1 -1
- package/dist/cjs/src/utils/index.d.ts +1 -1
- package/dist/cjs/src/utils/index.d.ts.map +1 -1
- package/dist/cjs/src/utils/index.js +5 -1
- package/dist/cjs/src/utils/index.js.map +1 -1
- package/dist/cjs/src/utils/session.d.ts +2 -2
- package/dist/cjs/src/utils/session.d.ts.map +1 -1
- package/dist/cjs/src/utils/session.js +6 -26
- package/dist/cjs/src/utils/session.js.map +1 -1
- package/dist/src/core/Agent.d.ts +77 -59
- package/dist/src/core/Agent.d.ts.map +1 -1
- package/dist/src/core/Agent.js +285 -1061
- package/dist/src/core/Agent.js.map +1 -1
- package/dist/src/core/PersistenceManager.d.ts.map +1 -1
- package/dist/src/core/PersistenceManager.js +48 -25
- package/dist/src/core/PersistenceManager.js.map +1 -1
- package/dist/src/core/PromptComposer.d.ts +1 -1
- package/dist/src/core/PromptComposer.d.ts.map +1 -1
- package/dist/src/core/PromptComposer.js.map +1 -1
- package/dist/src/core/ResponseEngine.d.ts +13 -12
- package/dist/src/core/ResponseEngine.d.ts.map +1 -1
- package/dist/src/core/ResponseEngine.js +4 -4
- package/dist/src/core/ResponseEngine.js.map +1 -1
- package/dist/src/core/ResponseModal.d.ts +205 -0
- package/dist/src/core/ResponseModal.d.ts.map +1 -0
- package/dist/src/core/ResponseModal.js +1323 -0
- package/dist/src/core/ResponseModal.js.map +1 -0
- package/dist/src/core/ResponsePipeline.d.ts +66 -38
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/src/core/ResponsePipeline.js +72 -4
- package/dist/src/core/ResponsePipeline.js.map +1 -1
- package/dist/src/core/Route.d.ts +24 -5
- package/dist/src/core/Route.d.ts.map +1 -1
- package/dist/src/core/Route.js +45 -1
- package/dist/src/core/Route.js.map +1 -1
- package/dist/src/core/RoutingEngine.d.ts +31 -6
- package/dist/src/core/RoutingEngine.d.ts.map +1 -1
- package/dist/src/core/RoutingEngine.js +113 -9
- package/dist/src/core/RoutingEngine.js.map +1 -1
- package/dist/src/core/SessionManager.d.ts +14 -4
- package/dist/src/core/SessionManager.d.ts.map +1 -1
- package/dist/src/core/SessionManager.js +25 -5
- package/dist/src/core/SessionManager.js.map +1 -1
- package/dist/src/core/Step.d.ts +10 -10
- package/dist/src/core/Step.d.ts.map +1 -1
- package/dist/src/core/Step.js.map +1 -1
- package/dist/src/core/ToolExecutor.d.ts +4 -2
- package/dist/src/core/ToolExecutor.d.ts.map +1 -1
- package/dist/src/core/ToolExecutor.js +13 -3
- package/dist/src/core/ToolExecutor.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/agent.d.ts +42 -21
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/ai.d.ts +1 -1
- package/dist/src/types/ai.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/persistence.d.ts +0 -1
- package/dist/src/types/persistence.d.ts.map +1 -1
- package/dist/src/types/route.d.ts +22 -16
- package/dist/src/types/route.d.ts.map +1 -1
- package/dist/src/types/session.d.ts +6 -11
- package/dist/src/types/session.d.ts.map +1 -1
- package/dist/src/types/tool.d.ts +12 -6
- package/dist/src/types/tool.d.ts.map +1 -1
- package/dist/src/utils/clone.d.ts.map +1 -1
- package/dist/src/utils/clone.js +0 -4
- package/dist/src/utils/clone.js.map +1 -1
- package/dist/src/utils/history.d.ts +30 -1
- package/dist/src/utils/history.d.ts.map +1 -1
- package/dist/src/utils/history.js +165 -23
- package/dist/src/utils/history.js.map +1 -1
- package/dist/src/utils/index.d.ts +1 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/session.d.ts +2 -2
- package/dist/src/utils/session.d.ts.map +1 -1
- package/dist/src/utils/session.js +6 -26
- package/dist/src/utils/session.js.map +1 -1
- package/docs/README.md +5 -4
- package/docs/api/README.md +195 -4
- package/docs/api/overview.md +232 -13
- package/docs/core/agent/README.md +162 -17
- package/docs/core/agent/context-management.md +39 -15
- package/docs/core/agent/session-management.md +49 -16
- package/docs/core/ai-integration/prompt-composition.md +38 -14
- package/docs/core/ai-integration/response-processing.md +28 -17
- package/docs/core/conversation-flows/data-collection.md +103 -25
- package/docs/core/conversation-flows/route-dsl.md +45 -22
- package/docs/core/conversation-flows/routes.md +74 -18
- package/docs/core/conversation-flows/step-transitions.md +3 -3
- package/docs/core/conversation-flows/steps.md +39 -15
- package/docs/core/routing/intelligent-routing.md +18 -9
- package/docs/core/tools/tool-definition.md +8 -8
- package/docs/core/tools/tool-execution.md +26 -26
- package/docs/core/tools/tool-scoping.md +5 -5
- package/docs/guides/getting-started/README.md +54 -32
- package/docs/guides/migration/README.md +72 -0
- package/docs/guides/migration/response-modal-refactor.md +518 -0
- package/examples/advanced-patterns/knowledge-based-agent.ts +37 -28
- package/examples/advanced-patterns/persistent-onboarding.ts +70 -41
- package/examples/advanced-patterns/route-lifecycle-hooks.ts +28 -2
- package/examples/advanced-patterns/streaming-responses.ts +197 -119
- package/examples/ai-providers/anthropic-integration.ts +40 -33
- package/examples/ai-providers/openai-integration.ts +25 -25
- package/examples/conversation-flows/completion-transitions.ts +36 -32
- package/examples/core-concepts/basic-agent.ts +76 -78
- package/examples/core-concepts/modern-streaming-api.ts +309 -0
- package/examples/core-concepts/schema-driven-extraction.ts +20 -16
- package/examples/core-concepts/session-management.ts +65 -53
- package/examples/integrations/database-integration.ts +49 -34
- package/examples/integrations/healthcare-integration.ts +96 -91
- package/examples/integrations/search-integration.ts +79 -82
- package/examples/integrations/server-session-management.ts +25 -17
- package/examples/persistence/database-persistence.ts +61 -45
- package/examples/persistence/memory-sessions.ts +52 -63
- package/examples/persistence/redis-persistence.ts +81 -95
- package/examples/tools/basic-tools.ts +73 -62
- package/examples/tools/data-enrichment-tools.ts +52 -44
- package/package.json +1 -1
- package/src/core/Agent.ts +396 -1499
- package/src/core/PersistenceManager.ts +51 -27
- package/src/core/PromptComposer.ts +1 -1
- package/src/core/ResponseEngine.ts +21 -19
- package/src/core/ResponseModal.ts +1722 -0
- package/src/core/ResponsePipeline.ts +175 -60
- package/src/core/Route.ts +58 -6
- package/src/core/RoutingEngine.ts +174 -27
- package/src/core/SessionManager.ts +32 -8
- package/src/core/Step.ts +20 -12
- package/src/core/ToolExecutor.ts +19 -5
- package/src/index.ts +11 -0
- package/src/types/agent.ts +47 -23
- package/src/types/ai.ts +1 -1
- package/src/types/index.ts +2 -0
- package/src/types/persistence.ts +0 -1
- package/src/types/route.ts +22 -16
- package/src/types/session.ts +6 -12
- package/src/types/tool.ts +15 -9
- package/src/utils/clone.ts +6 -8
- package/src/utils/history.ts +190 -27
- package/src/utils/index.ts +4 -0
- package/src/utils/session.ts +6 -31
|
@@ -53,7 +53,6 @@ export class PersistenceManager<TData = Record<string, unknown>> {
|
|
|
53
53
|
status: "active",
|
|
54
54
|
collectedData: {
|
|
55
55
|
data: options.initialData || {},
|
|
56
|
-
dataByRoute: {},
|
|
57
56
|
routeHistory: [],
|
|
58
57
|
metadata: {},
|
|
59
58
|
},
|
|
@@ -235,32 +234,57 @@ export class PersistenceManager<TData = Record<string, unknown>> {
|
|
|
235
234
|
sessionId: string,
|
|
236
235
|
sessionStep: SessionState<TData>
|
|
237
236
|
): Promise<SessionData<TData> | null> {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if (
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
237
|
+
// Validate input parameters
|
|
238
|
+
if (!sessionId || typeof sessionId !== 'string') {
|
|
239
|
+
throw new Error('Session ID must be a non-empty string');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (!sessionStep || typeof sessionStep !== 'object') {
|
|
243
|
+
throw new Error('Session step must be a valid object');
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Validate session data structure
|
|
247
|
+
if (sessionStep.data && typeof sessionStep.data !== 'object') {
|
|
248
|
+
throw new Error('Session data must be an object');
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
let persistenceData;
|
|
252
|
+
try {
|
|
253
|
+
persistenceData = sessionStepToData(sessionStep);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
256
|
+
throw new Error(`Failed to convert session step to persistence data: ${errorMessage}`);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
try {
|
|
260
|
+
// First try to find existing session
|
|
261
|
+
const existingSession = await this.sessionRepository.findById(sessionId);
|
|
262
|
+
|
|
263
|
+
if (existingSession) {
|
|
264
|
+
// Update existing session
|
|
265
|
+
return await this.sessionRepository.update(sessionId, {
|
|
266
|
+
currentRoute: persistenceData.currentRoute,
|
|
267
|
+
currentStep: persistenceData.currentStep,
|
|
268
|
+
collectedData: persistenceData.collectedData,
|
|
269
|
+
lastMessageAt: new Date(),
|
|
270
|
+
});
|
|
271
|
+
} else {
|
|
272
|
+
// Create new session if it doesn't exist
|
|
273
|
+
return await this.sessionRepository.create({
|
|
274
|
+
id: sessionId,
|
|
275
|
+
userId: persistenceData.collectedData.metadata?.userId
|
|
276
|
+
? JSON.stringify(persistenceData.collectedData.metadata?.userId)
|
|
277
|
+
: this.config.userId,
|
|
278
|
+
status: "active",
|
|
279
|
+
currentRoute: persistenceData.currentRoute,
|
|
280
|
+
currentStep: persistenceData.currentStep,
|
|
281
|
+
collectedData: persistenceData.collectedData,
|
|
282
|
+
messageCount: 0,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
287
|
+
throw new Error(`Failed to save session state to persistence: ${errorMessage}`);
|
|
264
288
|
}
|
|
265
289
|
}
|
|
266
290
|
|
|
@@ -13,7 +13,7 @@ export class PromptComposer<TContext = unknown, TData = unknown> {
|
|
|
13
13
|
|
|
14
14
|
// Specific, typed sections tailored to the framework
|
|
15
15
|
|
|
16
|
-
async addAgentMeta(agent: AgentOptions<TContext>): Promise<this> {
|
|
16
|
+
async addAgentMeta(agent: AgentOptions<TContext, TData>): Promise<this> {
|
|
17
17
|
const lines: string[] = [];
|
|
18
18
|
lines.push("## Agent");
|
|
19
19
|
lines.push(`**Name:** ${agent.name}`);
|
|
@@ -23,27 +23,30 @@ export interface BuildResponsePromptParams<
|
|
|
23
23
|
directives: string[] | undefined;
|
|
24
24
|
history: Event[];
|
|
25
25
|
lastMessage: string;
|
|
26
|
-
agentOptions?: AgentOptions<TContext>;
|
|
26
|
+
agentOptions?: AgentOptions<TContext, TData>;
|
|
27
27
|
// Combined properties from agent and route
|
|
28
|
-
combinedGuidelines?: Guideline<TContext>[];
|
|
29
|
-
combinedTerms?: Term<TContext>[];
|
|
28
|
+
combinedGuidelines?: Guideline<TContext, TData>[];
|
|
29
|
+
combinedTerms?: Term<TContext, TData>[];
|
|
30
30
|
context?: TContext;
|
|
31
31
|
session?: SessionState<TData>;
|
|
32
|
+
// NEW: Agent-level schema for data validation
|
|
33
|
+
agentSchema?: StructuredSchema;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
export interface BuildFallbackPromptParams<TContext = unknown> {
|
|
36
|
+
export interface BuildFallbackPromptParams<TContext = unknown, TData = unknown> {
|
|
35
37
|
history: Event[];
|
|
36
|
-
agentOptions: AgentOptions<TContext>;
|
|
37
|
-
terms: Term<TContext>[];
|
|
38
|
-
guidelines: Guideline<TContext>[];
|
|
38
|
+
agentOptions: AgentOptions<TContext, TData>;
|
|
39
|
+
terms: Term<TContext, TData>[];
|
|
40
|
+
guidelines: Guideline<TContext, TData>[];
|
|
39
41
|
context?: TContext;
|
|
40
|
-
session?: SessionState
|
|
42
|
+
session?: SessionState<TData>;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
export class ResponseEngine<TContext = unknown> {
|
|
44
|
-
responseSchemaForRoute
|
|
45
|
+
export class ResponseEngine<TContext = unknown, TData = unknown> {
|
|
46
|
+
responseSchemaForRoute(
|
|
45
47
|
route: Route<TContext, TData>,
|
|
46
|
-
currentStep?: Step<TContext, TData
|
|
48
|
+
currentStep?: Step<TContext, TData>,
|
|
49
|
+
agentSchema?: StructuredSchema
|
|
47
50
|
): StructuredSchema {
|
|
48
51
|
const base: StructuredSchema = {
|
|
49
52
|
type: "object",
|
|
@@ -59,12 +62,12 @@ export class ResponseEngine<TContext = unknown> {
|
|
|
59
62
|
base.properties!.data = route.responseOutputSchema;
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
// Add collect fields from current step
|
|
63
|
-
if (currentStep?.collect &&
|
|
65
|
+
// Add collect fields from current step using agent-level schema
|
|
66
|
+
if (currentStep?.collect && agentSchema?.properties) {
|
|
64
67
|
for (const field of currentStep.collect) {
|
|
65
|
-
const fieldSchema =
|
|
68
|
+
const fieldSchema = agentSchema.properties[field as string];
|
|
66
69
|
if (fieldSchema) {
|
|
67
|
-
base.properties![field] = fieldSchema;
|
|
70
|
+
base.properties![field as string] = fieldSchema;
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
}
|
|
@@ -73,7 +76,7 @@ export class ResponseEngine<TContext = unknown> {
|
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
async buildResponsePrompt(
|
|
76
|
-
params: BuildResponsePromptParams<TContext>
|
|
79
|
+
params: BuildResponsePromptParams<TContext, TData>
|
|
77
80
|
): Promise<string> {
|
|
78
81
|
const {
|
|
79
82
|
route,
|
|
@@ -107,8 +110,7 @@ export class ResponseEngine<TContext = unknown> {
|
|
|
107
110
|
await pc.addAgentMeta(effectiveAgentOptions);
|
|
108
111
|
}
|
|
109
112
|
await pc.addInstruction(
|
|
110
|
-
`Route: ${route.title}${
|
|
111
|
-
route.description ? ` — ${route.description}` : ""
|
|
113
|
+
`Route: ${route.title}${route.description ? ` — ${route.description}` : ""
|
|
112
114
|
}`
|
|
113
115
|
);
|
|
114
116
|
if (currentStep.prompt) {
|
|
@@ -148,7 +150,7 @@ export class ResponseEngine<TContext = unknown> {
|
|
|
148
150
|
}
|
|
149
151
|
|
|
150
152
|
async buildFallbackPrompt(
|
|
151
|
-
params: BuildFallbackPromptParams<TContext>
|
|
153
|
+
params: BuildFallbackPromptParams<TContext, TData>
|
|
152
154
|
): Promise<string> {
|
|
153
155
|
const { history, agentOptions, terms, guidelines, context, session } =
|
|
154
156
|
params;
|