@courseecho/ai-core-sdk 1.0.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.
@@ -0,0 +1,48 @@
1
+ /**
2
+ * AI Widget SDK - Core Communication Service
3
+ * Handle HTTP requests to backend API
4
+ */
5
+ import { AiQueryRequest, AiQueryResponse } from './models';
6
+ export declare class AiCommunicationService {
7
+ private apiEndpoint;
8
+ private apiKey?;
9
+ private jwtToken?;
10
+ constructor(apiEndpoint: string, apiKey?: string);
11
+ /**
12
+ * Set JWT token for authentication
13
+ */
14
+ setJwtToken(token: string): void;
15
+ /**
16
+ * Get current JWT token
17
+ */
18
+ getJwtToken(): string | undefined;
19
+ /**
20
+ * Check if JWT token is set
21
+ */
22
+ isAuthenticated(): boolean;
23
+ /**
24
+ * Send query to backend API
25
+ */
26
+ sendQuery(request: AiQueryRequest): Promise<AiQueryResponse>;
27
+ /**
28
+ * Check backend health
29
+ */
30
+ checkHealth(): Promise<boolean>;
31
+ /**
32
+ * Get API endpoint
33
+ */
34
+ getApiEndpoint(): string;
35
+ }
36
+ /**
37
+ * Custom API Error class
38
+ */
39
+ export declare class ApiError extends Error {
40
+ statusCode: number;
41
+ responseData?: any | undefined;
42
+ constructor(message: string, statusCode: number, responseData?: any | undefined);
43
+ isRateLimited(): boolean;
44
+ isUnauthorized(): boolean;
45
+ isBadRequest(): boolean;
46
+ isServerError(): boolean;
47
+ }
48
+ //# sourceMappingURL=communication-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communication-service.d.ts","sourceRoot":"","sources":["../src/communication-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EAIhB,MAAM,UAAU,CAAC;AAElB,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAQhD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAgDlE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,YAAY,CAAC,EAAE,GAAG;gBAFzB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,GAAG,YAAA;IAM3B,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAIzB,YAAY,IAAI,OAAO;IAIvB,aAAa,IAAI,OAAO;CAGzB"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * AI Widget SDK - Core Communication Service
3
+ * Handle HTTP requests to backend API
4
+ */
5
+ export class AiCommunicationService {
6
+ constructor(apiEndpoint, apiKey) {
7
+ if (!apiEndpoint) {
8
+ throw new Error('apiEndpoint is required');
9
+ }
10
+ this.apiEndpoint = apiEndpoint.replace(/\/$/, ''); // Remove trailing slash
11
+ this.apiKey = apiKey;
12
+ }
13
+ /**
14
+ * Set JWT token for authentication
15
+ */
16
+ setJwtToken(token) {
17
+ this.jwtToken = token;
18
+ }
19
+ /**
20
+ * Get current JWT token
21
+ */
22
+ getJwtToken() {
23
+ return this.jwtToken;
24
+ }
25
+ /**
26
+ * Check if JWT token is set
27
+ */
28
+ isAuthenticated() {
29
+ return !!this.jwtToken;
30
+ }
31
+ /**
32
+ * Send query to backend API
33
+ */
34
+ async sendQuery(request) {
35
+ if (!this.jwtToken && !this.apiKey) {
36
+ throw new Error('Authentication required: Set JWT token or API key. Call setJwtToken() first.');
37
+ }
38
+ const headers = {
39
+ 'Content-Type': 'application/json',
40
+ };
41
+ if (this.jwtToken) {
42
+ headers['Authorization'] = `Bearer ${this.jwtToken}`;
43
+ }
44
+ else if (this.apiKey) {
45
+ headers['X-API-Key'] = this.apiKey;
46
+ }
47
+ try {
48
+ const response = await fetch(`${this.apiEndpoint}/api/aiorchestrator/query`, {
49
+ method: 'POST',
50
+ headers,
51
+ body: JSON.stringify(request),
52
+ });
53
+ if (!response.ok) {
54
+ const errorData = await response.json();
55
+ throw new ApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData);
56
+ }
57
+ const data = (await response.json());
58
+ // Ensure timestamp is a Date object
59
+ data.timestamp = new Date(data.timestamp);
60
+ return data;
61
+ }
62
+ catch (error) {
63
+ if (error instanceof ApiError) {
64
+ throw error;
65
+ }
66
+ throw new ApiError(`Failed to send query: ${String(error)}`, 500);
67
+ }
68
+ }
69
+ /**
70
+ * Check backend health
71
+ */
72
+ async checkHealth() {
73
+ try {
74
+ const response = await fetch(`${this.apiEndpoint}/health`);
75
+ return response.ok;
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
81
+ /**
82
+ * Get API endpoint
83
+ */
84
+ getApiEndpoint() {
85
+ return this.apiEndpoint;
86
+ }
87
+ }
88
+ /**
89
+ * Custom API Error class
90
+ */
91
+ export class ApiError extends Error {
92
+ constructor(message, statusCode, responseData) {
93
+ super(message);
94
+ this.statusCode = statusCode;
95
+ this.responseData = responseData;
96
+ this.name = 'ApiError';
97
+ }
98
+ isRateLimited() {
99
+ return this.statusCode === 429;
100
+ }
101
+ isUnauthorized() {
102
+ return this.statusCode === 401;
103
+ }
104
+ isBadRequest() {
105
+ return this.statusCode === 400;
106
+ }
107
+ isServerError() {
108
+ return this.statusCode >= 500;
109
+ }
110
+ }
111
+ //# sourceMappingURL=communication-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communication-service.js","sourceRoot":"","sources":["../src/communication-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * AI Widget Core SDK - Public API
3
+ * Framework-agnostic core library
4
+ */
5
+ export * from './models';
6
+ export { AiCommunicationService, ApiError } from './communication-service';
7
+ export { ChatStateManager, ContextStateManager, ChartManager, } from './state-manager';
8
+ export { AiWidgetSDK } from './sdk';
9
+ export type { StateListener } from './state-manager';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,UAAU,CAAC;AAGzB,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * AI Widget Core SDK - Public API
3
+ * Framework-agnostic core library
4
+ */
5
+ // Models
6
+ export * from './models';
7
+ // Services
8
+ export { AiCommunicationService, ApiError } from './communication-service';
9
+ export { ChatStateManager, ContextStateManager, ChartManager, } from './state-manager';
10
+ // Main SDK
11
+ export { AiWidgetSDK } from './sdk';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,SAAS;AACT,cAAc,UAAU,CAAC;AAEzB,WAAW;AACX,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * AI Widget SDK - Shared Models
3
+ * Framework-agnostic type definitions used across all implementations
4
+ */
5
+ export interface AiMessage {
6
+ id: string;
7
+ role: 'user' | 'assistant';
8
+ content: string;
9
+ timestamp: Date;
10
+ metadata?: {
11
+ hasChart: boolean;
12
+ charts?: AiChart[];
13
+ suggestedFollowUps?: string[];
14
+ };
15
+ }
16
+ export interface AiChart {
17
+ type: 'bar' | 'line' | 'pie' | 'doughnut' | 'radar';
18
+ title: string;
19
+ labels: string[];
20
+ datasets: ChartDataset[];
21
+ options?: ChartOptions;
22
+ }
23
+ export interface ChartDataset {
24
+ label: string;
25
+ data: number[];
26
+ backgroundColor?: string | string[];
27
+ borderColor?: string | string[];
28
+ tension?: number;
29
+ fill?: boolean;
30
+ }
31
+ export interface ChartOptions {
32
+ responsive?: boolean;
33
+ maintainAspectRatio?: boolean;
34
+ plugins?: {
35
+ legend?: {
36
+ display?: boolean;
37
+ position?: 'top' | 'bottom' | 'left' | 'right';
38
+ };
39
+ tooltip?: {
40
+ enabled?: boolean;
41
+ };
42
+ };
43
+ scales?: Record<string, any>;
44
+ }
45
+ export interface AiContext {
46
+ pageType: string;
47
+ entityId?: string;
48
+ userId?: string;
49
+ customData?: Record<string, any>;
50
+ }
51
+ export interface AiContextConfig {
52
+ apiEndpoint: string;
53
+ context: AiContext;
54
+ apiKey?: string;
55
+ maxChatHistory?: number;
56
+ theme?: 'light' | 'dark';
57
+ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
58
+ enableCharts?: boolean;
59
+ enableExport?: boolean;
60
+ }
61
+ export interface AiQueryRequest {
62
+ userQuery: string;
63
+ pageType: string;
64
+ entityId?: string;
65
+ contextData?: Record<string, any>;
66
+ [key: string]: any;
67
+ }
68
+ export interface AiQueryResponse {
69
+ sessionId: string;
70
+ response: string;
71
+ toolsUsed: string[];
72
+ tokensUsed: number;
73
+ cost: number;
74
+ timestamp: Date;
75
+ }
76
+ export interface AiErrorResponse {
77
+ error: string;
78
+ message: string;
79
+ statusCode: number;
80
+ timestamp: Date;
81
+ }
82
+ export interface ChartExportOptions {
83
+ format: 'csv' | 'json';
84
+ filename?: string;
85
+ }
86
+ export interface ChatExportData {
87
+ sessionId: string;
88
+ messages: AiMessage[];
89
+ charts: AiChart[];
90
+ exportedAt: Date;
91
+ }
92
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/models.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * AI Widget SDK - Shared Models
3
+ * Framework-agnostic type definitions used across all implementations
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/sdk.d.ts ADDED
@@ -0,0 +1,101 @@
1
+ /**
2
+ * AI Widget SDK - Core SDK
3
+ * Main orchestrator that ties everything together
4
+ */
5
+ import { AiCommunicationService } from './communication-service';
6
+ import { ChatStateManager, ContextStateManager, ChartManager } from './state-manager';
7
+ import { AiContextConfig, AiMessage } from './models';
8
+ export declare class AiWidgetSDK {
9
+ private communicationService;
10
+ private chatStateManager;
11
+ private contextStateManager;
12
+ private chartManager;
13
+ private config;
14
+ constructor(config: AiContextConfig);
15
+ /**
16
+ * Validate configuration
17
+ */
18
+ private validateConfig;
19
+ /**
20
+ * Set JWT token for authentication
21
+ */
22
+ setJwtToken(token: string): void;
23
+ /**
24
+ * Send a query to the AI backend
25
+ */
26
+ sendQuery(userQuery: string): Promise<AiMessage>;
27
+ /**
28
+ * Update context
29
+ */
30
+ setContext(context: Partial<AiContextConfig['context']>): void;
31
+ /**
32
+ * Update single context property
33
+ */
34
+ updateContextProperty(key: string, value: any): void;
35
+ /**
36
+ * Get current context
37
+ */
38
+ getContext(): import("./models").AiContext;
39
+ /**
40
+ * Clear chat history
41
+ */
42
+ clearChatHistory(): void;
43
+ /**
44
+ * Get chat messages
45
+ */
46
+ getMessages(): AiMessage[];
47
+ /**
48
+ * Get current error
49
+ */
50
+ getError(): string | null;
51
+ /**
52
+ * Check if loading
53
+ */
54
+ isLoading(): boolean;
55
+ /**
56
+ * Export chat history
57
+ */
58
+ exportChats(format?: 'json' | 'csv'): string;
59
+ /**
60
+ * Export charts
61
+ */
62
+ exportCharts(format?: 'json' | 'csv'): string;
63
+ /**
64
+ * Check backend health
65
+ */
66
+ checkHealth(): Promise<boolean>;
67
+ /**
68
+ * Subscribe to message changes
69
+ */
70
+ onMessagesChange(listener: (messages: AiMessage[]) => void): () => void;
71
+ /**
72
+ * Subscribe to loading changes
73
+ */
74
+ onLoadingChange(listener: (isLoading: boolean) => void): () => void;
75
+ /**
76
+ * Subscribe to error changes
77
+ */
78
+ onErrorChange(listener: (error: string | null) => void): () => void;
79
+ /**
80
+ * Subscribe to context changes
81
+ */
82
+ onContextChange(listener: (context: any) => void): () => void;
83
+ /**
84
+ * Get internal services (for advanced use)
85
+ */
86
+ getServices(): {
87
+ communication: AiCommunicationService;
88
+ chatState: ChatStateManager;
89
+ contextState: ContextStateManager;
90
+ charts: ChartManager;
91
+ };
92
+ /**
93
+ * Private helper to generate unique IDs
94
+ */
95
+ private generateId;
96
+ /**
97
+ * Private helper to extract error message
98
+ */
99
+ private getErrorMessage;
100
+ }
101
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAY,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,SAAS,EAGV,MAAM,UAAU,CAAC;AAElB,qBAAa,WAAW;IACtB,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAcnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0DtD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;IAQ9D;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIpD;;OAEG;IACH,UAAU;IAIV;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,WAAW,IAAI,SAAS,EAAE;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,WAAW,CAAC,MAAM,GAAE,MAAM,GAAG,KAAc,GAAG,MAAM;IA2BpD;;OAEG;IACH,YAAY,CAAC,MAAM,GAAE,MAAM,GAAG,KAAc,GAAG,MAAM;IAQrD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAIvE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAInE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAInE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAI7D;;OAEG;IACH,WAAW;;;;;;IASX;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,eAAe;CAkBxB"}
package/dist/sdk.js ADDED
@@ -0,0 +1,242 @@
1
+ /**
2
+ * AI Widget SDK - Core SDK
3
+ * Main orchestrator that ties everything together
4
+ */
5
+ import { AiCommunicationService, ApiError } from './communication-service';
6
+ import { ChatStateManager, ContextStateManager, ChartManager, } from './state-manager';
7
+ export class AiWidgetSDK {
8
+ constructor(config) {
9
+ this.validateConfig(config);
10
+ this.config = config;
11
+ // Initialize services
12
+ this.communicationService = new AiCommunicationService(config.apiEndpoint, config.apiKey);
13
+ this.chatStateManager = new ChatStateManager(config.maxChatHistory ?? 100);
14
+ this.contextStateManager = new ContextStateManager(config.context);
15
+ this.chartManager = new ChartManager();
16
+ }
17
+ /**
18
+ * Validate configuration
19
+ */
20
+ validateConfig(config) {
21
+ if (!config.apiEndpoint) {
22
+ throw new Error('apiEndpoint is required in config');
23
+ }
24
+ if (!config.context) {
25
+ throw new Error('context is required in config');
26
+ }
27
+ }
28
+ /**
29
+ * Set JWT token for authentication
30
+ */
31
+ setJwtToken(token) {
32
+ this.communicationService.setJwtToken(token);
33
+ }
34
+ /**
35
+ * Send a query to the AI backend
36
+ */
37
+ async sendQuery(userQuery) {
38
+ try {
39
+ this.chatStateManager.setLoading(true);
40
+ this.chatStateManager.setError(null);
41
+ // Add user message to chat
42
+ const userMessage = {
43
+ id: this.generateId(),
44
+ role: 'user',
45
+ content: userQuery,
46
+ timestamp: new Date(),
47
+ };
48
+ this.chatStateManager.addMessage(userMessage);
49
+ // Prepare request
50
+ const request = {
51
+ userQuery,
52
+ pageType: this.contextStateManager.getContext().pageType,
53
+ entityId: this.contextStateManager.getContext().entityId,
54
+ contextData: this.contextStateManager.getContext().customData,
55
+ };
56
+ // Send to backend
57
+ const response = await this.communicationService.sendQuery(request);
58
+ // Add assistant message
59
+ const assistantMessage = {
60
+ id: response.sessionId,
61
+ role: 'assistant',
62
+ content: response.response,
63
+ timestamp: response.timestamp,
64
+ metadata: {
65
+ hasChart: false,
66
+ charts: [],
67
+ suggestedFollowUps: [],
68
+ },
69
+ };
70
+ // Cache charts if any
71
+ if (assistantMessage.metadata?.charts && assistantMessage.metadata.charts.length > 0) {
72
+ assistantMessage.metadata.hasChart = true;
73
+ assistantMessage.metadata.charts.forEach((chart, index) => {
74
+ this.chartManager.cacheChart(`${response.sessionId}_${index}`, chart);
75
+ });
76
+ }
77
+ this.chatStateManager.addMessage(assistantMessage);
78
+ return assistantMessage;
79
+ }
80
+ catch (error) {
81
+ const errorMessage = this.getErrorMessage(error);
82
+ this.chatStateManager.setError(errorMessage);
83
+ throw error;
84
+ }
85
+ finally {
86
+ this.chatStateManager.setLoading(false);
87
+ }
88
+ }
89
+ /**
90
+ * Update context
91
+ */
92
+ setContext(context) {
93
+ const currentContext = this.contextStateManager.getContext();
94
+ this.contextStateManager.setContext({
95
+ ...currentContext,
96
+ ...context,
97
+ });
98
+ }
99
+ /**
100
+ * Update single context property
101
+ */
102
+ updateContextProperty(key, value) {
103
+ this.contextStateManager.updateProperty(key, value);
104
+ }
105
+ /**
106
+ * Get current context
107
+ */
108
+ getContext() {
109
+ return this.contextStateManager.getContext();
110
+ }
111
+ /**
112
+ * Clear chat history
113
+ */
114
+ clearChatHistory() {
115
+ this.chatStateManager.clearMessages();
116
+ this.chartManager.clearCache();
117
+ }
118
+ /**
119
+ * Get chat messages
120
+ */
121
+ getMessages() {
122
+ return this.chatStateManager.getMessages();
123
+ }
124
+ /**
125
+ * Get current error
126
+ */
127
+ getError() {
128
+ return this.chatStateManager.getError();
129
+ }
130
+ /**
131
+ * Check if loading
132
+ */
133
+ isLoading() {
134
+ return this.chatStateManager.isLoadingState();
135
+ }
136
+ /**
137
+ * Export chat history
138
+ */
139
+ exportChats(format = 'json') {
140
+ const messages = this.getMessages();
141
+ if (format === 'json') {
142
+ return JSON.stringify({
143
+ context: this.getContext(),
144
+ messages,
145
+ exportedAt: new Date(),
146
+ }, null, 2);
147
+ }
148
+ else {
149
+ const headers = ['Timestamp', 'Role', 'Content'];
150
+ const rows = [headers.join(',')];
151
+ messages.forEach((msg) => {
152
+ const row = [
153
+ new Date(msg.timestamp).toISOString(),
154
+ msg.role,
155
+ `"${msg.content.replace(/"/g, '""')}"`, // Escape quotes
156
+ ];
157
+ rows.push(row.join(','));
158
+ });
159
+ return rows.join('\n');
160
+ }
161
+ }
162
+ /**
163
+ * Export charts
164
+ */
165
+ exportCharts(format = 'json') {
166
+ if (format === 'json') {
167
+ return this.chartManager.exportToJSON();
168
+ }
169
+ else {
170
+ return this.chartManager.exportToCSV();
171
+ }
172
+ }
173
+ /**
174
+ * Check backend health
175
+ */
176
+ async checkHealth() {
177
+ return this.communicationService.checkHealth();
178
+ }
179
+ /**
180
+ * Subscribe to message changes
181
+ */
182
+ onMessagesChange(listener) {
183
+ return this.chatStateManager.onMessagesChange(listener);
184
+ }
185
+ /**
186
+ * Subscribe to loading changes
187
+ */
188
+ onLoadingChange(listener) {
189
+ return this.chatStateManager.onLoadingChange(listener);
190
+ }
191
+ /**
192
+ * Subscribe to error changes
193
+ */
194
+ onErrorChange(listener) {
195
+ return this.chatStateManager.onErrorChange(listener);
196
+ }
197
+ /**
198
+ * Subscribe to context changes
199
+ */
200
+ onContextChange(listener) {
201
+ return this.contextStateManager.onContextChange(listener);
202
+ }
203
+ /**
204
+ * Get internal services (for advanced use)
205
+ */
206
+ getServices() {
207
+ return {
208
+ communication: this.communicationService,
209
+ chatState: this.chatStateManager,
210
+ contextState: this.contextStateManager,
211
+ charts: this.chartManager,
212
+ };
213
+ }
214
+ /**
215
+ * Private helper to generate unique IDs
216
+ */
217
+ generateId() {
218
+ return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
219
+ }
220
+ /**
221
+ * Private helper to extract error message
222
+ */
223
+ getErrorMessage(error) {
224
+ if (error instanceof ApiError) {
225
+ if (error.isRateLimited()) {
226
+ return 'Too many requests. Please wait before sending more queries.';
227
+ }
228
+ if (error.isUnauthorized()) {
229
+ return 'Authentication failed. Please check your token.';
230
+ }
231
+ if (error.isBadRequest()) {
232
+ return 'Invalid request. Please check your query.';
233
+ }
234
+ if (error.isServerError()) {
235
+ return 'Server error. Please try again later.';
236
+ }
237
+ return error.message;
238
+ }
239
+ return String(error);
240
+ }
241
+ }
242
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAQzB,MAAM,OAAO,WAAW;IAOtB,YAAY,MAAuB;QACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,sBAAsB;QACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,sBAAsB,CACpD,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,MAAM,CACd,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAuB;QAC5C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAErC,2BAA2B;YAC3B,MAAM,WAAW,GAAc;gBAC7B,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;gBACrB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAE9C,kBAAkB;YAClB,MAAM,OAAO,GAAmB;gBAC9B,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,QAAQ;gBACxD,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,QAAQ;gBACxD,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,UAAU;aAC9D,CAAC;YAEF,kBAAkB;YAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAEpE,wBAAwB;YACxB,MAAM,gBAAgB,GAAc;gBAClC,EAAE,EAAE,QAAQ,CAAC,SAAS;gBACtB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,EAAE;oBACV,kBAAkB,EAAE,EAAE;iBACvB;aACF,CAAC;YAEF,sBAAsB;YACtB,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC1C,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACxD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAEnD,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA4C;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;QAC7D,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YAClC,GAAG,cAAc;YACjB,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,GAAW,EAAE,KAAU;QAC3C,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAyB,MAAM;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,SAAS,CACnB;gBACE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,QAAQ;gBACR,UAAU,EAAE,IAAI,IAAI,EAAE;aACvB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,IAAI,GAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACvB,MAAM,GAAG,GAAG;oBACV,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;oBACrC,GAAG,CAAC,IAAI;oBACR,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB;iBACzD,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAyB,MAAM;QAC1C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAyC;QACxD,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAsC;QACpD,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAwC;QACpD,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgC;QAC9C,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,oBAAoB;YACxC,SAAS,EAAE,IAAI,CAAC,gBAAgB;YAChC,YAAY,EAAE,IAAI,CAAC,mBAAmB;YACtC,MAAM,EAAE,IAAI,CAAC,YAAY;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAc;QACpC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC1B,OAAO,6DAA6D,CAAC;YACvE,CAAC;YACD,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC3B,OAAO,iDAAiD,CAAC;YAC3D,CAAC;YACD,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;gBACzB,OAAO,2CAA2C,CAAC;YACrD,CAAC;YACD,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC1B,OAAO,uCAAuC,CAAC;YACjD,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * AI Widget SDK - Core Chat State Manager
3
+ * Manage chat messages, loading state, errors - framework-agnostic
4
+ */
5
+ import { AiMessage, AiChart, AiContext } from './models';
6
+ export type StateListener<T> = (state: T) => void;
7
+ /**
8
+ * Core Chat State - manages messages and loading states
9
+ */
10
+ export declare class ChatStateManager {
11
+ private messages;
12
+ private maxChatHistory;
13
+ private isLoading;
14
+ private error;
15
+ private messageListeners;
16
+ private loadingListeners;
17
+ private errorListeners;
18
+ constructor(maxChatHistory?: number);
19
+ /**
20
+ * Add a new message
21
+ */
22
+ addMessage(message: AiMessage): void;
23
+ /**
24
+ * Get all messages
25
+ */
26
+ getMessages(): AiMessage[];
27
+ /**
28
+ * Clear all messages
29
+ */
30
+ clearMessages(): void;
31
+ /**
32
+ * Set loading state
33
+ */
34
+ setLoading(isLoading: boolean): void;
35
+ /**
36
+ * Get loading state
37
+ */
38
+ isLoadingState(): boolean;
39
+ /**
40
+ * Set error
41
+ */
42
+ setError(error: string | null): void;
43
+ /**
44
+ * Get current error
45
+ */
46
+ getError(): string | null;
47
+ /**
48
+ * Get last message
49
+ */
50
+ getLastMessage(): AiMessage | undefined;
51
+ /**
52
+ * Get message count
53
+ */
54
+ getMessageCount(): number;
55
+ /**
56
+ * Subscribe to message changes
57
+ */
58
+ onMessagesChange(listener: StateListener<AiMessage[]>): () => void;
59
+ /**
60
+ * Subscribe to loading changes
61
+ */
62
+ onLoadingChange(listener: StateListener<boolean>): () => void;
63
+ /**
64
+ * Subscribe to error changes
65
+ */
66
+ onErrorChange(listener: StateListener<string | null>): () => void;
67
+ private notifyMessageListeners;
68
+ private notifyLoadingListeners;
69
+ private notifyErrorListeners;
70
+ }
71
+ /**
72
+ * Core Context State - manages page context
73
+ */
74
+ export declare class ContextStateManager {
75
+ private context;
76
+ private contextHistory;
77
+ private contextListeners;
78
+ constructor(initialContext: AiContext);
79
+ /**
80
+ * Update entire context
81
+ */
82
+ setContext(context: AiContext): void;
83
+ /**
84
+ * Update single context property
85
+ */
86
+ updateProperty(key: string, value: any): void;
87
+ /**
88
+ * Get current context
89
+ */
90
+ getContext(): AiContext;
91
+ /**
92
+ * Get context history
93
+ */
94
+ getHistory(): AiContext[];
95
+ /**
96
+ * Get single context property
97
+ */
98
+ getProperty(key: string): any;
99
+ /**
100
+ * Subscribe to context changes
101
+ */
102
+ onContextChange(listener: StateListener<AiContext>): () => void;
103
+ /**
104
+ * Serialize context
105
+ */
106
+ serialize(): string;
107
+ private notifyContextListeners;
108
+ }
109
+ /**
110
+ * Chart Manager - manage charts caching and export
111
+ */
112
+ export declare class ChartManager {
113
+ private charts;
114
+ /**
115
+ * Cache a chart
116
+ */
117
+ cacheChart(id: string, chart: AiChart): void;
118
+ /**
119
+ * Get cached chart
120
+ */
121
+ getChart(id: string): AiChart | undefined;
122
+ /**
123
+ * Get all cached charts
124
+ */
125
+ getAllCharts(): AiChart[];
126
+ /**
127
+ * Clear cache
128
+ */
129
+ clearCache(): void;
130
+ /**
131
+ * Export charts to CSV
132
+ */
133
+ exportToCSV(filename?: string): string;
134
+ /**
135
+ * Export charts to JSON
136
+ */
137
+ exportToJSON(): string;
138
+ }
139
+ //# sourceMappingURL=state-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../src/state-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,gBAAgB,CAAoC;IAC5D,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAAsC;gBAEhD,cAAc,GAAE,MAAY;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAWpC;;OAEG;IACH,WAAW,IAAI,SAAS,EAAE;IAI1B;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKpC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKpC;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS;IAIvC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,IAAI;IAOlE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI;IAO7D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI;IAOjE,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;CAG7B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,gBAAgB,CAAkC;gBAE9C,cAAc,EAAE,SAAS;IAKrC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAMpC;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAS7C;;OAEG;IACH,UAAU,IAAI,SAAS;IAIvB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAIzB;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAI7B;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI;IAS/D;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,sBAAsB;CAG/B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAmC;IAEjD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAKzC;;OAEG;IACH,YAAY,IAAI,OAAO,EAAE;IAIzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,WAAW,CAAC,QAAQ,GAAE,MAAqB,GAAG,MAAM;IAwBpD;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * AI Widget SDK - Core Chat State Manager
3
+ * Manage chat messages, loading state, errors - framework-agnostic
4
+ */
5
+ /**
6
+ * Core Chat State - manages messages and loading states
7
+ */
8
+ export class ChatStateManager {
9
+ constructor(maxChatHistory = 100) {
10
+ this.messages = [];
11
+ this.maxChatHistory = 100;
12
+ this.isLoading = false;
13
+ this.error = null;
14
+ this.messageListeners = [];
15
+ this.loadingListeners = [];
16
+ this.errorListeners = [];
17
+ this.maxChatHistory = maxChatHistory;
18
+ }
19
+ /**
20
+ * Add a new message
21
+ */
22
+ addMessage(message) {
23
+ this.messages.push(message);
24
+ // Trim old messages if exceeding max history
25
+ if (this.messages.length > this.maxChatHistory) {
26
+ this.messages = this.messages.slice(-this.maxChatHistory);
27
+ }
28
+ this.notifyMessageListeners();
29
+ }
30
+ /**
31
+ * Get all messages
32
+ */
33
+ getMessages() {
34
+ return [...this.messages];
35
+ }
36
+ /**
37
+ * Clear all messages
38
+ */
39
+ clearMessages() {
40
+ this.messages = [];
41
+ this.error = null;
42
+ this.notifyMessageListeners();
43
+ this.notifyErrorListeners();
44
+ }
45
+ /**
46
+ * Set loading state
47
+ */
48
+ setLoading(isLoading) {
49
+ this.isLoading = isLoading;
50
+ this.notifyLoadingListeners();
51
+ }
52
+ /**
53
+ * Get loading state
54
+ */
55
+ isLoadingState() {
56
+ return this.isLoading;
57
+ }
58
+ /**
59
+ * Set error
60
+ */
61
+ setError(error) {
62
+ this.error = error;
63
+ this.notifyErrorListeners();
64
+ }
65
+ /**
66
+ * Get current error
67
+ */
68
+ getError() {
69
+ return this.error;
70
+ }
71
+ /**
72
+ * Get last message
73
+ */
74
+ getLastMessage() {
75
+ return this.messages[this.messages.length - 1];
76
+ }
77
+ /**
78
+ * Get message count
79
+ */
80
+ getMessageCount() {
81
+ return this.messages.length;
82
+ }
83
+ /**
84
+ * Subscribe to message changes
85
+ */
86
+ onMessagesChange(listener) {
87
+ this.messageListeners.push(listener);
88
+ return () => {
89
+ this.messageListeners = this.messageListeners.filter((l) => l !== listener);
90
+ };
91
+ }
92
+ /**
93
+ * Subscribe to loading changes
94
+ */
95
+ onLoadingChange(listener) {
96
+ this.loadingListeners.push(listener);
97
+ return () => {
98
+ this.loadingListeners = this.loadingListeners.filter((l) => l !== listener);
99
+ };
100
+ }
101
+ /**
102
+ * Subscribe to error changes
103
+ */
104
+ onErrorChange(listener) {
105
+ this.errorListeners.push(listener);
106
+ return () => {
107
+ this.errorListeners = this.errorListeners.filter((l) => l !== listener);
108
+ };
109
+ }
110
+ notifyMessageListeners() {
111
+ this.messageListeners.forEach((listener) => listener(this.getMessages()));
112
+ }
113
+ notifyLoadingListeners() {
114
+ this.loadingListeners.forEach((listener) => listener(this.isLoading));
115
+ }
116
+ notifyErrorListeners() {
117
+ this.errorListeners.forEach((listener) => listener(this.error));
118
+ }
119
+ }
120
+ /**
121
+ * Core Context State - manages page context
122
+ */
123
+ export class ContextStateManager {
124
+ constructor(initialContext) {
125
+ this.contextHistory = [];
126
+ this.contextListeners = [];
127
+ this.context = { ...initialContext };
128
+ this.contextHistory.push({ ...initialContext });
129
+ }
130
+ /**
131
+ * Update entire context
132
+ */
133
+ setContext(context) {
134
+ this.context = { ...context };
135
+ this.contextHistory.push({ ...context });
136
+ this.notifyContextListeners();
137
+ }
138
+ /**
139
+ * Update single context property
140
+ */
141
+ updateProperty(key, value) {
142
+ this.context = {
143
+ ...this.context,
144
+ [key]: value,
145
+ };
146
+ this.contextHistory.push({ ...this.context });
147
+ this.notifyContextListeners();
148
+ }
149
+ /**
150
+ * Get current context
151
+ */
152
+ getContext() {
153
+ return { ...this.context };
154
+ }
155
+ /**
156
+ * Get context history
157
+ */
158
+ getHistory() {
159
+ return this.contextHistory.map((c) => ({ ...c }));
160
+ }
161
+ /**
162
+ * Get single context property
163
+ */
164
+ getProperty(key) {
165
+ return this.context[key];
166
+ }
167
+ /**
168
+ * Subscribe to context changes
169
+ */
170
+ onContextChange(listener) {
171
+ this.contextListeners.push(listener);
172
+ return () => {
173
+ this.contextListeners = this.contextListeners.filter((l) => l !== listener);
174
+ };
175
+ }
176
+ /**
177
+ * Serialize context
178
+ */
179
+ serialize() {
180
+ return JSON.stringify(this.context);
181
+ }
182
+ notifyContextListeners() {
183
+ this.contextListeners.forEach((listener) => listener(this.getContext()));
184
+ }
185
+ }
186
+ /**
187
+ * Chart Manager - manage charts caching and export
188
+ */
189
+ export class ChartManager {
190
+ constructor() {
191
+ this.charts = new Map();
192
+ }
193
+ /**
194
+ * Cache a chart
195
+ */
196
+ cacheChart(id, chart) {
197
+ this.charts.set(id, { ...chart });
198
+ }
199
+ /**
200
+ * Get cached chart
201
+ */
202
+ getChart(id) {
203
+ const chart = this.charts.get(id);
204
+ return chart ? { ...chart } : undefined;
205
+ }
206
+ /**
207
+ * Get all cached charts
208
+ */
209
+ getAllCharts() {
210
+ return Array.from(this.charts.values()).map((c) => ({ ...c }));
211
+ }
212
+ /**
213
+ * Clear cache
214
+ */
215
+ clearCache() {
216
+ this.charts.clear();
217
+ }
218
+ /**
219
+ * Export charts to CSV
220
+ */
221
+ exportToCSV(filename = 'charts.csv') {
222
+ const charts = this.getAllCharts();
223
+ if (charts.length === 0) {
224
+ return '';
225
+ }
226
+ const headers = ['Chart Title', 'Chart Type', 'Labels', 'Data'];
227
+ const rows = [headers.join(',')];
228
+ charts.forEach((chart) => {
229
+ chart.datasets.forEach((dataset) => {
230
+ const row = [
231
+ `"${chart.title}"`,
232
+ chart.type,
233
+ `"${chart.labels.join(';')}"`,
234
+ `"${dataset.data.join(';')}"`,
235
+ ];
236
+ rows.push(row.join(','));
237
+ });
238
+ });
239
+ return rows.join('\n');
240
+ }
241
+ /**
242
+ * Export charts to JSON
243
+ */
244
+ exportToJSON() {
245
+ return JSON.stringify(this.getAllCharts(), null, 2);
246
+ }
247
+ }
248
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../src/state-manager.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@courseecho/ai-core-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Framework-agnostic core AI chat SDK. Shared logic for all framework wrappers.",
5
+ "license": "MIT",
6
+ "author": "CourseEcho",
7
+ "main": "dist/index.cjs",
8
+ "module": "dist/index.mjs",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs",
14
+ "types": "./dist/index.d.ts"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "tsc --watch",
23
+ "test": "jest",
24
+ "lint": "eslint src/**/*.ts"
25
+ },
26
+ "dependencies": {
27
+ "rxjs": "^7.8.0"
28
+ },
29
+ "devDependencies": {
30
+ "typescript": "^5.3.0",
31
+ "@types/node": "^20.0.0",
32
+ "jest": "^29.0.0",
33
+ "@types/jest": "^29.0.0",
34
+ "ts-jest": "^29.0.0",
35
+ "eslint": "^8.0.0",
36
+ "@typescript-eslint/parser": "^6.0.0",
37
+ "@typescript-eslint/eslint-plugin": "^6.0.0"
38
+ }
39
+ }