@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.
- package/dist/communication-service.d.ts +48 -0
- package/dist/communication-service.d.ts.map +1 -0
- package/dist/communication-service.js +111 -0
- package/dist/communication-service.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +92 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +6 -0
- package/dist/models.js.map +1 -0
- package/dist/sdk.d.ts +101 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +242 -0
- package/dist/sdk.js.map +1 -0
- package/dist/state-manager.d.ts +139 -0
- package/dist/state-manager.d.ts.map +1 -0
- package/dist/state-manager.js +248 -0
- package/dist/state-manager.js.map +1 -0
- package/package.json +39 -0
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/models.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
package/dist/sdk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
}
|