@falai/agent 0.7.0 → 0.8.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.
- package/README.md +23 -30
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.js +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.js +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.js +1 -1
- package/dist/adapters/RedisAdapter.d.ts +1 -1
- package/dist/adapters/RedisAdapter.js +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/adapters/SQLiteAdapter.js +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +1 -1
- package/dist/cjs/core/Agent.d.ts +8 -8
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +10 -10
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +10 -10
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +9 -9
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/RoutingEngine.d.ts +5 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/core/RoutingEngine.js +5 -5
- package/dist/cjs/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/types/agent.d.ts +3 -3
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +9 -9
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/session.js +2 -2
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/core/Agent.d.ts +8 -8
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +10 -10
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +10 -10
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +9 -9
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/RoutingEngine.d.ts +5 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -1
- package/dist/core/RoutingEngine.js +5 -5
- package/dist/core/RoutingEngine.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/types/agent.d.ts +3 -3
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/session.d.ts +9 -9
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +2 -2
- package/dist/types/session.js.map +1 -1
- package/docs/ADAPTERS.md +1 -1
- package/docs/AGENT.md +9 -9
- package/docs/API_REFERENCE.md +15 -15
- package/docs/CONTEXT_MANAGEMENT.md +6 -6
- package/docs/CONTRIBUTING.md +3 -3
- package/docs/DOMAINS.md +2 -2
- package/docs/EXAMPLES.md +1 -1
- package/docs/GETTING_STARTED.md +3 -3
- package/docs/PERSISTENCE.md +11 -11
- package/docs/PROVIDERS.md +4 -4
- package/examples/business-onboarding.ts +1 -1
- package/examples/company-qna-agent.ts +1 -1
- package/examples/custom-database-persistence.ts +8 -8
- package/examples/declarative-agent.ts +1 -1
- package/examples/domain-scoping.ts +2 -2
- package/examples/extracted-data-modification.ts +1 -1
- package/examples/healthcare-agent.ts +1 -1
- package/examples/openai-agent.ts +1 -1
- package/examples/opensearch-persistence.ts +4 -4
- package/examples/persistent-onboarding.ts +2 -2
- package/examples/prisma-persistence.ts +4 -4
- package/examples/redis-persistence.ts +5 -5
- package/examples/route-transitions.ts +4 -4
- package/examples/rules-prohibitions.ts +3 -3
- package/examples/streaming-agent.ts +5 -5
- package/examples/travel-agent.ts +1 -1
- package/package.json +1 -1
- package/src/adapters/MemoryAdapter.ts +1 -1
- package/src/adapters/MongoAdapter.ts +1 -1
- package/src/adapters/PostgreSQLAdapter.ts +1 -1
- package/src/adapters/PrismaAdapter.ts +1 -1
- package/src/adapters/RedisAdapter.ts +1 -1
- package/src/adapters/SQLiteAdapter.ts +1 -1
- package/src/core/Agent.ts +23 -23
- package/src/core/PersistenceManager.ts +13 -13
- package/src/core/RoutingEngine.ts +15 -13
- package/src/index.ts +1 -1
- package/src/types/agent.ts +3 -3
- package/src/types/session.ts +15 -15
package/src/core/Agent.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { AgentOptions, Term, Guideline, Capability } from "../types/agent";
|
|
|
6
6
|
import type { Event, StepRef } from "../types/index";
|
|
7
7
|
import type { RouteOptions } from "../types/route";
|
|
8
8
|
|
|
9
|
-
import type {
|
|
9
|
+
import type { SessionState } from "../types/session";
|
|
10
10
|
import type { AgentStructuredResponse } from "../types/ai";
|
|
11
11
|
import {
|
|
12
12
|
createSession,
|
|
@@ -42,7 +42,7 @@ export class Agent<TContext = unknown> {
|
|
|
42
42
|
private persistenceManager: PersistenceManager | undefined;
|
|
43
43
|
private routingEngine: RoutingEngine<TContext>;
|
|
44
44
|
private responseEngine: ResponseEngine<TContext>;
|
|
45
|
-
private currentSession?:
|
|
45
|
+
private currentSession?: SessionState;
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* Dynamic domain property - populated via addDomain
|
|
@@ -236,9 +236,9 @@ export class Agent<TContext = unknown> {
|
|
|
236
236
|
* @internal
|
|
237
237
|
*/
|
|
238
238
|
private async updateData<TData = unknown>(
|
|
239
|
-
session:
|
|
239
|
+
session: SessionState<TData>,
|
|
240
240
|
collectedUpdate: Partial<TData>
|
|
241
|
-
): Promise<
|
|
241
|
+
): Promise<SessionState<TData>> {
|
|
242
242
|
const previousCollected = { ...session.data };
|
|
243
243
|
|
|
244
244
|
// Merge new collected data
|
|
@@ -279,14 +279,14 @@ export class Agent<TContext = unknown> {
|
|
|
279
279
|
async *respondStream(params: {
|
|
280
280
|
history: Event[];
|
|
281
281
|
step?: StepRef;
|
|
282
|
-
session?:
|
|
282
|
+
session?: SessionState;
|
|
283
283
|
contextOverride?: Partial<TContext>;
|
|
284
284
|
signal?: AbortSignal;
|
|
285
285
|
}): AsyncGenerator<{
|
|
286
286
|
delta: string;
|
|
287
287
|
accumulated: string;
|
|
288
288
|
done: boolean;
|
|
289
|
-
session?:
|
|
289
|
+
session?: SessionState;
|
|
290
290
|
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
291
291
|
isRouteComplete?: boolean;
|
|
292
292
|
}> {
|
|
@@ -412,7 +412,7 @@ export class Agent<TContext = unknown> {
|
|
|
412
412
|
description: this.options.description,
|
|
413
413
|
personality: this.options.personality,
|
|
414
414
|
},
|
|
415
|
-
|
|
415
|
+
provider: this.options.provider,
|
|
416
416
|
context: effectiveContext,
|
|
417
417
|
signal,
|
|
418
418
|
});
|
|
@@ -491,7 +491,7 @@ export class Agent<TContext = unknown> {
|
|
|
491
491
|
);
|
|
492
492
|
|
|
493
493
|
// Generate message stream using AI provider
|
|
494
|
-
const stream = this.options.
|
|
494
|
+
const stream = this.options.provider.generateMessageStream({
|
|
495
495
|
prompt: responsePrompt,
|
|
496
496
|
history,
|
|
497
497
|
context: effectiveContext,
|
|
@@ -548,7 +548,7 @@ export class Agent<TContext = unknown> {
|
|
|
548
548
|
session.id &&
|
|
549
549
|
this.options.persistence?.autoSave !== false
|
|
550
550
|
) {
|
|
551
|
-
await this.persistenceManager.
|
|
551
|
+
await this.persistenceManager.saveSessionState(session.id, session);
|
|
552
552
|
logger.debug(
|
|
553
553
|
`[Agent] Auto-saved session step to persistence: ${session.id}`
|
|
554
554
|
);
|
|
@@ -612,7 +612,7 @@ export class Agent<TContext = unknown> {
|
|
|
612
612
|
);
|
|
613
613
|
|
|
614
614
|
// Stream completion message using AI provider
|
|
615
|
-
const stream = this.options.
|
|
615
|
+
const stream = this.options.provider.generateMessageStream({
|
|
616
616
|
prompt: completionPrompt,
|
|
617
617
|
history,
|
|
618
618
|
context: effectiveContext,
|
|
@@ -698,7 +698,7 @@ export class Agent<TContext = unknown> {
|
|
|
698
698
|
.addCapabilities(this.capabilities)
|
|
699
699
|
.build();
|
|
700
700
|
|
|
701
|
-
const stream = this.options.
|
|
701
|
+
const stream = this.options.provider.generateMessageStream({
|
|
702
702
|
prompt: fallbackPrompt,
|
|
703
703
|
history,
|
|
704
704
|
context: effectiveContext,
|
|
@@ -740,12 +740,12 @@ export class Agent<TContext = unknown> {
|
|
|
740
740
|
async respond(params: {
|
|
741
741
|
history: Event[];
|
|
742
742
|
step?: StepRef;
|
|
743
|
-
session?:
|
|
743
|
+
session?: SessionState;
|
|
744
744
|
contextOverride?: Partial<TContext>;
|
|
745
745
|
signal?: AbortSignal;
|
|
746
746
|
}): Promise<{
|
|
747
747
|
message: string;
|
|
748
|
-
session?:
|
|
748
|
+
session?: SessionState;
|
|
749
749
|
toolCalls?: Array<{ toolName: string; arguments: Record<string, unknown> }>;
|
|
750
750
|
isRouteComplete?: boolean;
|
|
751
751
|
}> {
|
|
@@ -872,7 +872,7 @@ export class Agent<TContext = unknown> {
|
|
|
872
872
|
description: this.options.description,
|
|
873
873
|
personality: this.options.personality,
|
|
874
874
|
},
|
|
875
|
-
|
|
875
|
+
provider: this.options.provider,
|
|
876
876
|
context: effectiveContext,
|
|
877
877
|
signal,
|
|
878
878
|
});
|
|
@@ -956,7 +956,7 @@ export class Agent<TContext = unknown> {
|
|
|
956
956
|
);
|
|
957
957
|
|
|
958
958
|
// Generate message using AI provider
|
|
959
|
-
const result = await this.options.
|
|
959
|
+
const result = await this.options.provider.generateMessage({
|
|
960
960
|
prompt: responsePrompt,
|
|
961
961
|
history,
|
|
962
962
|
context: effectiveContext,
|
|
@@ -1044,7 +1044,7 @@ export class Agent<TContext = unknown> {
|
|
|
1044
1044
|
);
|
|
1045
1045
|
|
|
1046
1046
|
// Generate completion message using AI provider
|
|
1047
|
-
const completionResult = await this.options.
|
|
1047
|
+
const completionResult = await this.options.provider.generateMessage({
|
|
1048
1048
|
prompt: completionPrompt,
|
|
1049
1049
|
history,
|
|
1050
1050
|
context: effectiveContext,
|
|
@@ -1115,7 +1115,7 @@ export class Agent<TContext = unknown> {
|
|
|
1115
1115
|
.addCapabilities(this.capabilities)
|
|
1116
1116
|
.build();
|
|
1117
1117
|
|
|
1118
|
-
const result = await this.options.
|
|
1118
|
+
const result = await this.options.provider.generateMessage({
|
|
1119
1119
|
prompt: fallbackPrompt,
|
|
1120
1120
|
history,
|
|
1121
1121
|
context: effectiveContext,
|
|
@@ -1142,7 +1142,7 @@ export class Agent<TContext = unknown> {
|
|
|
1142
1142
|
session.id &&
|
|
1143
1143
|
this.options.persistence?.autoSave !== false
|
|
1144
1144
|
) {
|
|
1145
|
-
await this.persistenceManager.
|
|
1145
|
+
await this.persistenceManager.saveSessionState(session.id, session);
|
|
1146
1146
|
logger.debug(
|
|
1147
1147
|
`[Agent] Auto-saved session step to persistence: ${session.id}`
|
|
1148
1148
|
);
|
|
@@ -1250,14 +1250,14 @@ export class Agent<TContext = unknown> {
|
|
|
1250
1250
|
* Set the current session for convenience methods
|
|
1251
1251
|
* @param session - Session step to use for subsequent calls
|
|
1252
1252
|
*/
|
|
1253
|
-
setCurrentSession(session:
|
|
1253
|
+
setCurrentSession(session: SessionState): void {
|
|
1254
1254
|
this.currentSession = session;
|
|
1255
1255
|
}
|
|
1256
1256
|
|
|
1257
1257
|
/**
|
|
1258
1258
|
* Get the current session (if set)
|
|
1259
1259
|
*/
|
|
1260
|
-
getCurrentSession():
|
|
1260
|
+
getCurrentSession(): SessionState | undefined {
|
|
1261
1261
|
return this.currentSession;
|
|
1262
1262
|
}
|
|
1263
1263
|
|
|
@@ -1305,9 +1305,9 @@ export class Agent<TContext = unknown> {
|
|
|
1305
1305
|
*/
|
|
1306
1306
|
nextStepRoute(
|
|
1307
1307
|
routeIdOrTitle: string,
|
|
1308
|
-
session?:
|
|
1308
|
+
session?: SessionState,
|
|
1309
1309
|
condition?: string
|
|
1310
|
-
):
|
|
1310
|
+
): SessionState {
|
|
1311
1311
|
const targetSession = session || this.currentSession;
|
|
1312
1312
|
|
|
1313
1313
|
if (!targetSession) {
|
|
@@ -1329,7 +1329,7 @@ export class Agent<TContext = unknown> {
|
|
|
1329
1329
|
);
|
|
1330
1330
|
}
|
|
1331
1331
|
|
|
1332
|
-
const updatedSession:
|
|
1332
|
+
const updatedSession: SessionState = {
|
|
1333
1333
|
...targetSession,
|
|
1334
1334
|
pendingTransition: {
|
|
1335
1335
|
targetRouteId: targetRoute.id,
|
|
@@ -14,7 +14,7 @@ import type {
|
|
|
14
14
|
MessageRepository,
|
|
15
15
|
} from "../types/persistence";
|
|
16
16
|
import type { Event } from "../types/history";
|
|
17
|
-
import type {
|
|
17
|
+
import type { SessionState } from "../types/session";
|
|
18
18
|
import {
|
|
19
19
|
createSession,
|
|
20
20
|
sessionStepToData,
|
|
@@ -223,12 +223,12 @@ export class PersistenceManager {
|
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
/**
|
|
226
|
-
* Save
|
|
227
|
-
* Converts
|
|
226
|
+
* Save SessionState to database
|
|
227
|
+
* Converts SessionState to SessionData and persists it
|
|
228
228
|
*/
|
|
229
|
-
async
|
|
229
|
+
async saveSessionState<TData = Record<string, unknown>>(
|
|
230
230
|
sessionId: string,
|
|
231
|
-
sessionStep:
|
|
231
|
+
sessionStep: SessionState<TData>
|
|
232
232
|
): Promise<SessionData | null> {
|
|
233
233
|
const persistenceData = sessionStepToData(sessionStep);
|
|
234
234
|
|
|
@@ -241,12 +241,12 @@ export class PersistenceManager {
|
|
|
241
241
|
}
|
|
242
242
|
|
|
243
243
|
/**
|
|
244
|
-
* Load
|
|
245
|
-
* Converts SessionData to
|
|
244
|
+
* Load SessionState from database
|
|
245
|
+
* Converts SessionData to SessionState
|
|
246
246
|
*/
|
|
247
|
-
async
|
|
247
|
+
async loadSessionState<TData = Record<string, unknown>>(
|
|
248
248
|
sessionId: string
|
|
249
|
-
): Promise<
|
|
249
|
+
): Promise<SessionState<TData> | null> {
|
|
250
250
|
const sessionData = await this.sessionRepository.findById(sessionId);
|
|
251
251
|
|
|
252
252
|
if (!sessionData) {
|
|
@@ -272,18 +272,18 @@ export class PersistenceManager {
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
/**
|
|
275
|
-
* Create session with
|
|
276
|
-
* Returns both SessionData and initialized
|
|
275
|
+
* Create session with SessionState support
|
|
276
|
+
* Returns both SessionData and initialized SessionState
|
|
277
277
|
*/
|
|
278
278
|
async createSessionWithStep<TData = Record<string, unknown>>(
|
|
279
279
|
options: CreateSessionOptions
|
|
280
280
|
): Promise<{
|
|
281
281
|
sessionData: SessionData;
|
|
282
|
-
sessionStep:
|
|
282
|
+
sessionStep: SessionState<TData>;
|
|
283
283
|
}> {
|
|
284
284
|
const sessionData = await this.createSession(options);
|
|
285
285
|
|
|
286
|
-
// Create
|
|
286
|
+
// Create SessionState with database session ID
|
|
287
287
|
const sessionStep = createSession<TData>(sessionData.id, {
|
|
288
288
|
createdAt: sessionData.createdAt,
|
|
289
289
|
lastUpdatedAt: sessionData.updatedAt,
|
|
@@ -3,7 +3,7 @@ import type { Route } from "./Route";
|
|
|
3
3
|
import type { Step } from "./Step";
|
|
4
4
|
import type { StructuredSchema } from "../types/schema";
|
|
5
5
|
import type { RoutingDecision } from "../types/routing";
|
|
6
|
-
import type {
|
|
6
|
+
import type { SessionState } from "../types/session";
|
|
7
7
|
import type { AiProvider } from "../types/ai";
|
|
8
8
|
import { enterRoute, mergeCollected } from "../types/session";
|
|
9
9
|
import { PromptComposer } from "./PromptComposer";
|
|
@@ -42,7 +42,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
42
42
|
*/
|
|
43
43
|
private async decideSingleRouteStep(params: {
|
|
44
44
|
route: Route<TContext, unknown>;
|
|
45
|
-
session:
|
|
45
|
+
session: SessionState;
|
|
46
46
|
history: Event[];
|
|
47
47
|
agentMeta?: {
|
|
48
48
|
name?: string;
|
|
@@ -50,17 +50,18 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
50
50
|
description?: string;
|
|
51
51
|
personality?: string;
|
|
52
52
|
};
|
|
53
|
-
|
|
53
|
+
provider: AiProvider;
|
|
54
54
|
context: TContext;
|
|
55
55
|
signal?: AbortSignal;
|
|
56
56
|
}): Promise<{
|
|
57
57
|
selectedRoute?: Route<TContext>;
|
|
58
58
|
selectedStep?: Step<TContext>;
|
|
59
59
|
responseDirectives?: string[];
|
|
60
|
-
session:
|
|
60
|
+
session: SessionState;
|
|
61
61
|
isRouteComplete?: boolean;
|
|
62
62
|
}> {
|
|
63
|
-
const { route, session, history, agentMeta,
|
|
63
|
+
const { route, session, history, agentMeta, provider, context, signal } =
|
|
64
|
+
params;
|
|
64
65
|
|
|
65
66
|
let updatedSession = session;
|
|
66
67
|
const selectedRoute = route;
|
|
@@ -138,7 +139,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
138
139
|
candidates.map((c) => c.step.id)
|
|
139
140
|
);
|
|
140
141
|
|
|
141
|
-
const stepResult = await
|
|
142
|
+
const stepResult = await provider.generateMessage<
|
|
142
143
|
TContext,
|
|
143
144
|
{
|
|
144
145
|
reasoning: string;
|
|
@@ -403,7 +404,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
403
404
|
*/
|
|
404
405
|
async decideRouteAndStep(params: {
|
|
405
406
|
routes: Route<TContext, unknown>[];
|
|
406
|
-
session:
|
|
407
|
+
session: SessionState;
|
|
407
408
|
history: Event[];
|
|
408
409
|
agentMeta?: {
|
|
409
410
|
name?: string;
|
|
@@ -411,17 +412,18 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
411
412
|
description?: string;
|
|
412
413
|
personality?: string;
|
|
413
414
|
};
|
|
414
|
-
|
|
415
|
+
provider: AiProvider;
|
|
415
416
|
context: TContext;
|
|
416
417
|
signal?: AbortSignal;
|
|
417
418
|
}): Promise<{
|
|
418
419
|
selectedRoute?: Route<TContext>;
|
|
419
420
|
selectedStep?: Step<TContext>;
|
|
420
421
|
responseDirectives?: string[];
|
|
421
|
-
session:
|
|
422
|
+
session: SessionState;
|
|
422
423
|
isRouteComplete?: boolean;
|
|
423
424
|
}> {
|
|
424
|
-
const { routes, session, history, agentMeta,
|
|
425
|
+
const { routes, session, history, agentMeta, provider, context, signal } =
|
|
426
|
+
params;
|
|
425
427
|
|
|
426
428
|
if (routes.length === 0) {
|
|
427
429
|
return { session };
|
|
@@ -434,7 +436,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
434
436
|
session,
|
|
435
437
|
history,
|
|
436
438
|
agentMeta,
|
|
437
|
-
|
|
439
|
+
provider,
|
|
438
440
|
context,
|
|
439
441
|
signal,
|
|
440
442
|
});
|
|
@@ -504,7 +506,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
504
506
|
activeRouteSteps
|
|
505
507
|
);
|
|
506
508
|
|
|
507
|
-
const routingResult = await
|
|
509
|
+
const routingResult = await provider.generateMessage<
|
|
508
510
|
TContext,
|
|
509
511
|
RoutingDecisionOutput
|
|
510
512
|
>({
|
|
@@ -819,7 +821,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
819
821
|
description?: string;
|
|
820
822
|
personality?: string;
|
|
821
823
|
},
|
|
822
|
-
session?:
|
|
824
|
+
session?: SessionState,
|
|
823
825
|
activeRouteSteps?: Array<{
|
|
824
826
|
stepId: string;
|
|
825
827
|
description: string;
|
package/src/index.ts
CHANGED
|
@@ -99,7 +99,7 @@ export type {
|
|
|
99
99
|
RouteCompletionHandler,
|
|
100
100
|
} from "./types/route";
|
|
101
101
|
|
|
102
|
-
export type {
|
|
102
|
+
export type { SessionState, PendingTransition } from "./types/session";
|
|
103
103
|
export {
|
|
104
104
|
createSession,
|
|
105
105
|
enterRoute,
|
package/src/types/agent.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { AiProvider } from "./ai";
|
|
|
6
6
|
import type { ToolRef } from "./tool";
|
|
7
7
|
import type { RouteOptions } from "./route";
|
|
8
8
|
import type { PersistenceConfig } from "./persistence";
|
|
9
|
-
import type {
|
|
9
|
+
import type { SessionState } from "./session";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Composition mode determines how the agent processes and structures responses
|
|
@@ -80,13 +80,13 @@ export interface AgentOptions<TContext = unknown> {
|
|
|
80
80
|
/** Default context data available to the agent */
|
|
81
81
|
context?: TContext;
|
|
82
82
|
/** Optional current session for convenience methods */
|
|
83
|
-
session?:
|
|
83
|
+
session?: SessionState;
|
|
84
84
|
/** Context provider function for always-fresh context (alternative to static context) */
|
|
85
85
|
contextProvider?: ContextProvider<TContext>;
|
|
86
86
|
/** Lifecycle hooks for context management */
|
|
87
87
|
hooks?: ContextLifecycleHooks<TContext>;
|
|
88
88
|
/** AI provider strategy for generating responses */
|
|
89
|
-
|
|
89
|
+
provider: AiProvider;
|
|
90
90
|
/** Composition mode for response generation */
|
|
91
91
|
compositionMode?: CompositionMode;
|
|
92
92
|
/** Initial terms for domain glossary */
|
package/src/types/session.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface PendingTransition {
|
|
|
18
18
|
* Session step tracks the current position in the conversation flow
|
|
19
19
|
* and data collected during the route progression
|
|
20
20
|
*/
|
|
21
|
-
export interface
|
|
21
|
+
export interface SessionState<TData = Record<string, unknown>> {
|
|
22
22
|
/** Unique session identifier (useful for persistence) */
|
|
23
23
|
id?: string;
|
|
24
24
|
|
|
@@ -78,8 +78,8 @@ export interface SessionStep<TData = Record<string, unknown>> {
|
|
|
78
78
|
*/
|
|
79
79
|
export function createSession<TData = Record<string, unknown>>(
|
|
80
80
|
sessionId?: string,
|
|
81
|
-
metadata?:
|
|
82
|
-
):
|
|
81
|
+
metadata?: SessionState<TData>["metadata"]
|
|
82
|
+
): SessionState<TData> {
|
|
83
83
|
return {
|
|
84
84
|
id: sessionId,
|
|
85
85
|
data: {},
|
|
@@ -98,10 +98,10 @@ export function createSession<TData = Record<string, unknown>>(
|
|
|
98
98
|
* Preserves collected data per route in dataByRoute map
|
|
99
99
|
*/
|
|
100
100
|
export function enterRoute<TData = Record<string, unknown>>(
|
|
101
|
-
session:
|
|
101
|
+
session: SessionState<TData>,
|
|
102
102
|
routeId: string,
|
|
103
103
|
routeTitle: string
|
|
104
|
-
):
|
|
104
|
+
): SessionState<TData> {
|
|
105
105
|
// Save current route's collected data before switching
|
|
106
106
|
const dataByRoute = { ...session.dataByRoute };
|
|
107
107
|
if (
|
|
@@ -157,10 +157,10 @@ export function enterRoute<TData = Record<string, unknown>>(
|
|
|
157
157
|
* Helper to update session with new step
|
|
158
158
|
*/
|
|
159
159
|
export function enterStep<TData = Record<string, unknown>>(
|
|
160
|
-
session:
|
|
160
|
+
session: SessionState<TData>,
|
|
161
161
|
stepId: string,
|
|
162
162
|
stepDescription?: string
|
|
163
|
-
):
|
|
163
|
+
): SessionState<TData> {
|
|
164
164
|
return {
|
|
165
165
|
...session,
|
|
166
166
|
currentStep: {
|
|
@@ -180,9 +180,9 @@ export function enterStep<TData = Record<string, unknown>>(
|
|
|
180
180
|
* Updates both the data field and the dataByRoute map
|
|
181
181
|
*/
|
|
182
182
|
export function mergeCollected<TData = Record<string, unknown>>(
|
|
183
|
-
session:
|
|
183
|
+
session: SessionState<TData>,
|
|
184
184
|
data: Partial<unknown>
|
|
185
|
-
):
|
|
185
|
+
): SessionState<TData> {
|
|
186
186
|
const newCollected = {
|
|
187
187
|
...session.data,
|
|
188
188
|
...data,
|
|
@@ -206,11 +206,11 @@ export function mergeCollected<TData = Record<string, unknown>>(
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
/**
|
|
209
|
-
* Helper to convert
|
|
209
|
+
* Helper to convert SessionState to persistence-friendly format
|
|
210
210
|
* Used when saving to database
|
|
211
211
|
*/
|
|
212
212
|
export function sessionStepToData<TData = Record<string, unknown>>(
|
|
213
|
-
session:
|
|
213
|
+
session: SessionState<TData>
|
|
214
214
|
): {
|
|
215
215
|
currentRoute?: string;
|
|
216
216
|
currentStep?: string;
|
|
@@ -231,7 +231,7 @@ export function sessionStepToData<TData = Record<string, unknown>>(
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
/**
|
|
234
|
-
* Helper to convert database SessionData back to
|
|
234
|
+
* Helper to convert database SessionData back to SessionState
|
|
235
235
|
* Used when loading from database
|
|
236
236
|
* @param sessionId - The database session ID
|
|
237
237
|
* @param data - The database session data
|
|
@@ -243,7 +243,7 @@ export function sessionDataToStep<TData = Record<string, unknown>>(
|
|
|
243
243
|
currentStep?: string;
|
|
244
244
|
collectedData?: Record<string, unknown>;
|
|
245
245
|
}
|
|
246
|
-
):
|
|
246
|
+
): SessionState<TData> {
|
|
247
247
|
const collectedData = data.collectedData || {};
|
|
248
248
|
|
|
249
249
|
return {
|
|
@@ -268,7 +268,7 @@ export function sessionDataToStep<TData = Record<string, unknown>>(
|
|
|
268
268
|
dataByRoute:
|
|
269
269
|
(collectedData.dataByRoute as Record<string, Partial<unknown>>) || {}, // Restore per-route data
|
|
270
270
|
routeHistory:
|
|
271
|
-
(collectedData.routeHistory as
|
|
272
|
-
metadata: (collectedData.metadata as
|
|
271
|
+
(collectedData.routeHistory as SessionState<TData>["routeHistory"]) || [],
|
|
272
|
+
metadata: (collectedData.metadata as SessionState<TData>["metadata"]) || {},
|
|
273
273
|
};
|
|
274
274
|
}
|