@adcp/client 3.7.1 → 3.8.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 (103) hide show
  1. package/bin/adcp.js +42 -3
  2. package/dist/lib/adapters/content-standards-adapter.d.ts +106 -0
  3. package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -0
  4. package/dist/lib/adapters/content-standards-adapter.js +199 -0
  5. package/dist/lib/adapters/content-standards-adapter.js.map +1 -0
  6. package/dist/lib/adapters/index.d.ts +18 -0
  7. package/dist/lib/adapters/index.d.ts.map +1 -0
  8. package/dist/lib/adapters/index.js +41 -0
  9. package/dist/lib/adapters/index.js.map +1 -0
  10. package/dist/lib/adapters/property-list-adapter.d.ts +123 -0
  11. package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -0
  12. package/dist/lib/adapters/property-list-adapter.js +212 -0
  13. package/dist/lib/adapters/property-list-adapter.js.map +1 -0
  14. package/dist/lib/adapters/proposal-manager.d.ts +142 -0
  15. package/dist/lib/adapters/proposal-manager.d.ts.map +1 -0
  16. package/dist/lib/adapters/proposal-manager.js +184 -0
  17. package/dist/lib/adapters/proposal-manager.js.map +1 -0
  18. package/dist/lib/adapters/si-session-manager.d.ts +161 -0
  19. package/dist/lib/adapters/si-session-manager.d.ts.map +1 -0
  20. package/dist/lib/adapters/si-session-manager.js +320 -0
  21. package/dist/lib/adapters/si-session-manager.js.map +1 -0
  22. package/dist/lib/agents/index.generated.d.ts +109 -33
  23. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  24. package/dist/lib/agents/index.generated.js +162 -36
  25. package/dist/lib/agents/index.generated.js.map +1 -1
  26. package/dist/lib/core/ADCPMultiAgentClient.d.ts +5 -7
  27. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  28. package/dist/lib/core/ADCPMultiAgentClient.js +47 -35
  29. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  30. package/dist/lib/core/AgentClient.d.ts +13 -6
  31. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  32. package/dist/lib/core/AgentClient.js +23 -13
  33. package/dist/lib/core/AgentClient.js.map +1 -1
  34. package/dist/lib/core/AsyncHandler.d.ts +1 -2
  35. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  36. package/dist/lib/core/AsyncHandler.js +0 -3
  37. package/dist/lib/core/AsyncHandler.js.map +1 -1
  38. package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
  39. package/dist/lib/core/ResponseValidator.js +0 -1
  40. package/dist/lib/core/ResponseValidator.js.map +1 -1
  41. package/dist/lib/core/SingleAgentClient.d.ts +102 -10
  42. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  43. package/dist/lib/core/SingleAgentClient.js +244 -17
  44. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  45. package/dist/lib/discovery/property-crawler.d.ts +13 -2
  46. package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
  47. package/dist/lib/discovery/property-crawler.js +48 -13
  48. package/dist/lib/discovery/property-crawler.js.map +1 -1
  49. package/dist/lib/discovery/types.d.ts +7 -1
  50. package/dist/lib/discovery/types.d.ts.map +1 -1
  51. package/dist/lib/index.d.ts +13 -4
  52. package/dist/lib/index.d.ts.map +1 -1
  53. package/dist/lib/index.js +79 -5
  54. package/dist/lib/index.js.map +1 -1
  55. package/dist/lib/types/core.generated.d.ts +502 -238
  56. package/dist/lib/types/core.generated.d.ts.map +1 -1
  57. package/dist/lib/types/core.generated.js +2 -2
  58. package/dist/lib/types/core.generated.js.map +1 -1
  59. package/dist/lib/types/schemas.generated.d.ts +7237 -2284
  60. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  61. package/dist/lib/types/schemas.generated.js +1368 -461
  62. package/dist/lib/types/schemas.generated.js.map +1 -1
  63. package/dist/lib/types/tools.generated.d.ts +3128 -507
  64. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  65. package/dist/lib/types/tools.generated.js +1 -1
  66. package/dist/lib/types/tools.generated.js.map +1 -1
  67. package/dist/lib/utils/capabilities.d.ts +98 -0
  68. package/dist/lib/utils/capabilities.d.ts.map +1 -0
  69. package/dist/lib/utils/capabilities.js +155 -0
  70. package/dist/lib/utils/capabilities.js.map +1 -0
  71. package/dist/lib/utils/creative-adapter.d.ts +87 -0
  72. package/dist/lib/utils/creative-adapter.d.ts.map +1 -0
  73. package/dist/lib/utils/creative-adapter.js +125 -0
  74. package/dist/lib/utils/creative-adapter.js.map +1 -0
  75. package/dist/lib/utils/format-assets.d.ts +4 -16
  76. package/dist/lib/utils/format-assets.d.ts.map +1 -1
  77. package/dist/lib/utils/format-assets.js +16 -14
  78. package/dist/lib/utils/format-assets.js.map +1 -1
  79. package/dist/lib/utils/format-renders.d.ts +82 -0
  80. package/dist/lib/utils/format-renders.d.ts.map +1 -0
  81. package/dist/lib/utils/format-renders.js +137 -0
  82. package/dist/lib/utils/format-renders.js.map +1 -0
  83. package/dist/lib/utils/index.d.ts +2 -1
  84. package/dist/lib/utils/index.d.ts.map +1 -1
  85. package/dist/lib/utils/index.js +13 -3
  86. package/dist/lib/utils/index.js.map +1 -1
  87. package/dist/lib/utils/preview-normalizer.d.ts +109 -0
  88. package/dist/lib/utils/preview-normalizer.d.ts.map +1 -0
  89. package/dist/lib/utils/preview-normalizer.js +122 -0
  90. package/dist/lib/utils/preview-normalizer.js.map +1 -0
  91. package/dist/lib/utils/pricing-adapter.d.ts +121 -0
  92. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -0
  93. package/dist/lib/utils/pricing-adapter.js +213 -0
  94. package/dist/lib/utils/pricing-adapter.js.map +1 -0
  95. package/dist/lib/utils/response-unwrapper.d.ts +2 -2
  96. package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
  97. package/dist/lib/utils/response-unwrapper.js +2 -2
  98. package/dist/lib/utils/response-unwrapper.js.map +1 -1
  99. package/dist/lib/version.d.ts +15 -7
  100. package/dist/lib/version.d.ts.map +1 -1
  101. package/dist/lib/version.js +20 -11
  102. package/dist/lib/version.js.map +1 -1
  103. package/package.json +3 -3
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Sponsored Intelligence (SI) Session Manager
3
+ *
4
+ * Server-side adapter for managing SI conversational commerce sessions.
5
+ * Brands use this to handle session lifecycle and message routing to their
6
+ * conversational AI systems.
7
+ *
8
+ * This is a stub implementation that doesn't support sessions.
9
+ * Brands should extend or replace this with their conversation logic.
10
+ */
11
+ import type { SIGetOfferingRequest, SIGetOfferingResponse, SIInitiateSessionRequest, SIInitiateSessionResponse, SISendMessageRequest, SISendMessageResponse, SITerminateSessionRequest, SITerminateSessionResponse, SICapabilities } from '../types/tools.generated';
12
+ /**
13
+ * Internal session state
14
+ */
15
+ export interface SISession {
16
+ sessionId: string;
17
+ createdAt: string;
18
+ lastActiveAt: string;
19
+ identity: any;
20
+ mediaBuyId?: string;
21
+ offeringId?: string;
22
+ offeringToken?: string;
23
+ placement?: string;
24
+ negotiatedCapabilities?: SICapabilities;
25
+ status: 'active' | 'pending_handoff' | 'complete' | 'terminated';
26
+ messageCount: number;
27
+ conversationHistory: {
28
+ role: 'user' | 'brand';
29
+ content: string;
30
+ timestamp: string;
31
+ }[];
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Abstract interface for SI session managers.
36
+ * Brands implement this to provide their conversational AI logic.
37
+ */
38
+ export interface ISISessionManager {
39
+ /**
40
+ * Check if SI is supported by this server
41
+ */
42
+ isSupported(): boolean;
43
+ /**
44
+ * Get offering details for display to user
45
+ */
46
+ getOffering(request: SIGetOfferingRequest): Promise<SIGetOfferingResponse>;
47
+ /**
48
+ * Initiate a new SI session
49
+ */
50
+ initiateSession(request: SIInitiateSessionRequest): Promise<SIInitiateSessionResponse>;
51
+ /**
52
+ * Handle a message within a session
53
+ */
54
+ sendMessage(request: SISendMessageRequest): Promise<SISendMessageResponse>;
55
+ /**
56
+ * Terminate a session
57
+ */
58
+ terminateSession(request: SITerminateSessionRequest): Promise<SITerminateSessionResponse>;
59
+ /**
60
+ * Get session state (for internal use)
61
+ */
62
+ getSession(sessionId: string): Promise<SISession | null>;
63
+ /**
64
+ * Clean up stale sessions
65
+ */
66
+ cleanupStaleSessions(maxAgeMinutes: number): Promise<number>;
67
+ }
68
+ /**
69
+ * Error codes for SI operations
70
+ */
71
+ export declare const SIErrorCodes: {
72
+ readonly NOT_SUPPORTED: "si_not_supported";
73
+ readonly SESSION_NOT_FOUND: "session_not_found";
74
+ readonly SESSION_EXPIRED: "session_expired";
75
+ readonly SESSION_TERMINATED: "session_already_terminated";
76
+ readonly OFFERING_NOT_FOUND: "offering_not_found";
77
+ readonly OFFERING_UNAVAILABLE: "offering_unavailable";
78
+ readonly INVALID_MESSAGE: "invalid_message";
79
+ readonly CAPABILITY_NOT_SUPPORTED: "capability_not_supported";
80
+ };
81
+ /**
82
+ * Stub implementation of SISessionManager.
83
+ * Uses in-memory storage and returns not-supported errors.
84
+ *
85
+ * Brands should extend this class or provide their own implementation
86
+ * that integrates with their conversational AI systems.
87
+ */
88
+ export declare class SISessionManager implements ISISessionManager {
89
+ private sessions;
90
+ private offerings;
91
+ private nextSessionId;
92
+ /**
93
+ * Check if SI is supported.
94
+ * Override this to return true when implementing real logic.
95
+ */
96
+ isSupported(): boolean;
97
+ getOffering(request: SIGetOfferingRequest): Promise<SIGetOfferingResponse>;
98
+ initiateSession(request: SIInitiateSessionRequest): Promise<SIInitiateSessionResponse>;
99
+ sendMessage(request: SISendMessageRequest): Promise<SISendMessageResponse>;
100
+ terminateSession(request: SITerminateSessionRequest): Promise<SITerminateSessionResponse>;
101
+ /**
102
+ * Generate ACP handoff data for checkout.
103
+ * Override to implement actual checkout flow integration.
104
+ */
105
+ protected generateACPHandoff(session: SISession, terminationContext?: SITerminateSessionRequest['termination_context']): Promise<SITerminateSessionResponse['acp_handoff']>;
106
+ getSession(sessionId: string): Promise<SISession | null>;
107
+ cleanupStaleSessions(maxAgeMinutes: number): Promise<number>;
108
+ /**
109
+ * Generate a unique session ID.
110
+ */
111
+ protected generateSessionId(): string;
112
+ /**
113
+ * Negotiate capabilities between host and brand.
114
+ * Override to customize capability negotiation.
115
+ */
116
+ protected negotiateCapabilities(hostCapabilities?: SICapabilities): SICapabilities;
117
+ /**
118
+ * Generate initial response when session is created.
119
+ * Override to implement actual greeting/welcome logic.
120
+ */
121
+ protected generateInitialResponse(session: SISession, context: string): Promise<{
122
+ message?: string;
123
+ ui_elements?: any[];
124
+ }>;
125
+ /**
126
+ * Generate response to a user message.
127
+ * Override to implement actual conversational AI logic.
128
+ */
129
+ protected generateResponse(session: SISession, request: SISendMessageRequest): Promise<{
130
+ message?: string;
131
+ ui_elements?: any[];
132
+ }>;
133
+ /**
134
+ * Generate a summary of the conversation.
135
+ * Override to implement actual summarization logic.
136
+ */
137
+ protected generateConversationSummary(session: SISession): Promise<string>;
138
+ }
139
+ /**
140
+ * Example of an AI-powered SI session manager (stub).
141
+ * Shows how brands might extend the base class.
142
+ */
143
+ export declare class AISISessionManager extends SISessionManager {
144
+ private aiEndpoint?;
145
+ private brandConfig?;
146
+ constructor(config?: {
147
+ aiEndpoint?: string;
148
+ brandName?: string;
149
+ welcomeMessage?: string;
150
+ });
151
+ isSupported(): boolean;
152
+ protected generateInitialResponse(session: SISession, context: string): Promise<{
153
+ message?: string;
154
+ ui_elements?: any[];
155
+ }>;
156
+ }
157
+ /**
158
+ * Default singleton instance for servers that don't support SI
159
+ */
160
+ export declare const defaultSISessionManager: SISessionManager;
161
+ //# sourceMappingURL=si-session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"si-session-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/si-session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ /**
3
+ * Sponsored Intelligence (SI) Session Manager
4
+ *
5
+ * Server-side adapter for managing SI conversational commerce sessions.
6
+ * Brands use this to handle session lifecycle and message routing to their
7
+ * conversational AI systems.
8
+ *
9
+ * This is a stub implementation that doesn't support sessions.
10
+ * Brands should extend or replace this with their conversation logic.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.defaultSISessionManager = exports.AISISessionManager = exports.SISessionManager = exports.SIErrorCodes = void 0;
14
+ /**
15
+ * Error codes for SI operations
16
+ */
17
+ exports.SIErrorCodes = {
18
+ NOT_SUPPORTED: 'si_not_supported',
19
+ SESSION_NOT_FOUND: 'session_not_found',
20
+ SESSION_EXPIRED: 'session_expired',
21
+ SESSION_TERMINATED: 'session_already_terminated',
22
+ OFFERING_NOT_FOUND: 'offering_not_found',
23
+ OFFERING_UNAVAILABLE: 'offering_unavailable',
24
+ INVALID_MESSAGE: 'invalid_message',
25
+ CAPABILITY_NOT_SUPPORTED: 'capability_not_supported',
26
+ };
27
+ /**
28
+ * Stub implementation of SISessionManager.
29
+ * Uses in-memory storage and returns not-supported errors.
30
+ *
31
+ * Brands should extend this class or provide their own implementation
32
+ * that integrates with their conversational AI systems.
33
+ */
34
+ class SISessionManager {
35
+ sessions = new Map();
36
+ offerings = new Map(); // Offering cache
37
+ nextSessionId = 1;
38
+ /**
39
+ * Check if SI is supported.
40
+ * Override this to return true when implementing real logic.
41
+ */
42
+ isSupported() {
43
+ return false;
44
+ }
45
+ async getOffering(request) {
46
+ if (!this.isSupported()) {
47
+ return {
48
+ available: false,
49
+ unavailable_reason: 'SI not supported by this server',
50
+ errors: [
51
+ {
52
+ code: exports.SIErrorCodes.NOT_SUPPORTED,
53
+ message: 'Sponsored Intelligence is not supported by this server',
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ // Override in subclass to implement actual offering lookup
59
+ return {
60
+ available: false,
61
+ unavailable_reason: 'Offering not found',
62
+ errors: [
63
+ {
64
+ code: exports.SIErrorCodes.OFFERING_NOT_FOUND,
65
+ message: `Offering not found: ${request.offering_id}`,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ async initiateSession(request) {
71
+ if (!this.isSupported()) {
72
+ return {
73
+ session_id: '',
74
+ errors: [
75
+ {
76
+ code: exports.SIErrorCodes.NOT_SUPPORTED,
77
+ message: 'Sponsored Intelligence is not supported by this server',
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ // Create session
83
+ const sessionId = this.generateSessionId();
84
+ const now = new Date().toISOString();
85
+ const session = {
86
+ sessionId,
87
+ createdAt: now,
88
+ lastActiveAt: now,
89
+ identity: request.identity,
90
+ mediaBuyId: request.media_buy_id,
91
+ offeringId: request.offering_id,
92
+ offeringToken: request.offering_token,
93
+ placement: request.placement,
94
+ negotiatedCapabilities: this.negotiateCapabilities(request.supported_capabilities),
95
+ status: 'active',
96
+ messageCount: 0,
97
+ conversationHistory: [],
98
+ };
99
+ this.sessions.set(sessionId, session);
100
+ // Generate initial response
101
+ const initialResponse = await this.generateInitialResponse(session, request.context);
102
+ return {
103
+ session_id: sessionId,
104
+ response: initialResponse,
105
+ negotiated_capabilities: session.negotiatedCapabilities,
106
+ };
107
+ }
108
+ async sendMessage(request) {
109
+ if (!this.isSupported()) {
110
+ return {
111
+ session_id: request.session_id,
112
+ session_status: 'complete',
113
+ errors: [
114
+ {
115
+ code: exports.SIErrorCodes.NOT_SUPPORTED,
116
+ message: 'Sponsored Intelligence is not supported by this server',
117
+ },
118
+ ],
119
+ };
120
+ }
121
+ const session = await this.getSession(request.session_id);
122
+ if (!session) {
123
+ return {
124
+ session_id: request.session_id,
125
+ session_status: 'complete',
126
+ errors: [
127
+ {
128
+ code: exports.SIErrorCodes.SESSION_NOT_FOUND,
129
+ message: `Session not found: ${request.session_id}`,
130
+ },
131
+ ],
132
+ };
133
+ }
134
+ if (session.status === 'terminated' || session.status === 'complete') {
135
+ return {
136
+ session_id: request.session_id,
137
+ session_status: 'complete',
138
+ errors: [
139
+ {
140
+ code: exports.SIErrorCodes.SESSION_TERMINATED,
141
+ message: 'Session has already been terminated',
142
+ },
143
+ ],
144
+ };
145
+ }
146
+ // Record user message
147
+ if (request.message) {
148
+ session.conversationHistory.push({
149
+ role: 'user',
150
+ content: request.message,
151
+ timestamp: new Date().toISOString(),
152
+ });
153
+ }
154
+ session.messageCount++;
155
+ session.lastActiveAt = new Date().toISOString();
156
+ // Generate response
157
+ const response = await this.generateResponse(session, request);
158
+ // Record brand response
159
+ if (response.message) {
160
+ session.conversationHistory.push({
161
+ role: 'brand',
162
+ content: response.message,
163
+ timestamp: new Date().toISOString(),
164
+ });
165
+ }
166
+ this.sessions.set(session.sessionId, session);
167
+ return {
168
+ session_id: session.sessionId,
169
+ response,
170
+ session_status: session.status,
171
+ };
172
+ }
173
+ async terminateSession(request) {
174
+ if (!this.isSupported()) {
175
+ return {
176
+ session_id: request.session_id,
177
+ terminated: false,
178
+ errors: [
179
+ {
180
+ code: exports.SIErrorCodes.NOT_SUPPORTED,
181
+ message: 'Sponsored Intelligence is not supported by this server',
182
+ },
183
+ ],
184
+ };
185
+ }
186
+ const session = await this.getSession(request.session_id);
187
+ if (!session) {
188
+ return {
189
+ session_id: request.session_id,
190
+ terminated: false,
191
+ errors: [
192
+ {
193
+ code: exports.SIErrorCodes.SESSION_NOT_FOUND,
194
+ message: `Session not found: ${request.session_id}`,
195
+ },
196
+ ],
197
+ };
198
+ }
199
+ // Update session status
200
+ session.status = 'terminated';
201
+ this.sessions.set(session.sessionId, session);
202
+ // Generate ACP handoff data if this is a transaction handoff
203
+ let acpHandoff;
204
+ if (request.reason === 'handoff_transaction') {
205
+ acpHandoff = await this.generateACPHandoff(session, request.termination_context);
206
+ }
207
+ return {
208
+ session_id: session.sessionId,
209
+ terminated: true,
210
+ acp_handoff: acpHandoff,
211
+ };
212
+ }
213
+ /**
214
+ * Generate ACP handoff data for checkout.
215
+ * Override to implement actual checkout flow integration.
216
+ */
217
+ async generateACPHandoff(session, terminationContext) {
218
+ // Stub returns undefined (no checkout URL)
219
+ return undefined;
220
+ }
221
+ async getSession(sessionId) {
222
+ return this.sessions.get(sessionId) || null;
223
+ }
224
+ async cleanupStaleSessions(maxAgeMinutes) {
225
+ const cutoff = new Date();
226
+ cutoff.setMinutes(cutoff.getMinutes() - maxAgeMinutes);
227
+ let removed = 0;
228
+ for (const [id, session] of this.sessions) {
229
+ if (new Date(session.lastActiveAt) < cutoff) {
230
+ this.sessions.delete(id);
231
+ removed++;
232
+ }
233
+ }
234
+ return removed;
235
+ }
236
+ /**
237
+ * Generate a unique session ID.
238
+ */
239
+ generateSessionId() {
240
+ return `si_${this.nextSessionId++}_${Date.now()}`;
241
+ }
242
+ /**
243
+ * Negotiate capabilities between host and brand.
244
+ * Override to customize capability negotiation.
245
+ */
246
+ negotiateCapabilities(hostCapabilities) {
247
+ // Stub returns minimal capabilities
248
+ return {
249
+ modalities: {
250
+ conversational: true,
251
+ },
252
+ };
253
+ }
254
+ /**
255
+ * Generate initial response when session is created.
256
+ * Override to implement actual greeting/welcome logic.
257
+ */
258
+ async generateInitialResponse(session, context) {
259
+ // Stub returns a generic greeting
260
+ return {
261
+ message: 'Welcome! How can I help you today?',
262
+ };
263
+ }
264
+ /**
265
+ * Generate response to a user message.
266
+ * Override to implement actual conversational AI logic.
267
+ */
268
+ async generateResponse(session, request) {
269
+ // Stub returns a generic response
270
+ return {
271
+ message: "I'm sorry, but I'm not able to help with that right now. Is there anything else I can assist you with?",
272
+ };
273
+ }
274
+ /**
275
+ * Generate a summary of the conversation.
276
+ * Override to implement actual summarization logic.
277
+ */
278
+ async generateConversationSummary(session) {
279
+ return `Conversation with ${session.messageCount} messages.`;
280
+ }
281
+ }
282
+ exports.SISessionManager = SISessionManager;
283
+ /**
284
+ * Example of an AI-powered SI session manager (stub).
285
+ * Shows how brands might extend the base class.
286
+ */
287
+ class AISISessionManager extends SISessionManager {
288
+ aiEndpoint;
289
+ brandConfig;
290
+ constructor(config) {
291
+ super();
292
+ this.aiEndpoint = config?.aiEndpoint;
293
+ this.brandConfig = {
294
+ brandName: config?.brandName || 'Brand',
295
+ welcomeMessage: config?.welcomeMessage,
296
+ };
297
+ }
298
+ isSupported() {
299
+ return !!this.aiEndpoint;
300
+ }
301
+ async generateInitialResponse(session, context) {
302
+ if (!this.isSupported()) {
303
+ return super.generateInitialResponse(session, context);
304
+ }
305
+ // In a real implementation, this would:
306
+ // 1. Parse the context to understand user intent
307
+ // 2. Call AI service to generate personalized greeting
308
+ // 3. Optionally include product recommendations
309
+ return {
310
+ message: this.brandConfig?.welcomeMessage ||
311
+ `Welcome to ${this.brandConfig?.brandName}! I see you're interested in ${context}. How can I help?`,
312
+ };
313
+ }
314
+ }
315
+ exports.AISISessionManager = AISISessionManager;
316
+ /**
317
+ * Default singleton instance for servers that don't support SI
318
+ */
319
+ exports.defaultSISessionManager = new SISessionManager();
320
+ //# sourceMappingURL=si-session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"si-session-manager.js","sourceRoot":"","sources":["../../../src/lib/adapters/si-session-manager.ts"],"names":[],"mappings":"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"}