@harnessio/ai-chat-core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/core/PluginRegistry.d.ts +12 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1051 -0
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +7 -0
- package/dist/react/hooks/useAssistantRuntime.d.ts +2 -0
- package/dist/react/hooks/useComposer.d.ts +3 -0
- package/dist/react/hooks/useContentFocus.d.ts +17 -0
- package/dist/react/hooks/useContentRenderer.d.ts +16 -0
- package/dist/react/hooks/useCurrentThread.d.ts +2 -0
- package/dist/react/hooks/useMessages.d.ts +2 -0
- package/dist/react/hooks/useThreadList.d.ts +9 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/providers/AssistantRuntimeProvider.d.ts +8 -0
- package/dist/react/providers/index.d.ts +1 -0
- package/dist/runtime/AssistantRuntime/AssistantRuntime.d.ts +33 -0
- package/dist/runtime/ComposerRuntime/ComposerRuntime.d.ts +16 -0
- package/dist/runtime/ContentFocusRuntime/ContentFocusRuntime.d.ts +27 -0
- package/dist/runtime/ThreadListItemRuntime/ThreadListItemRuntime.d.ts +20 -0
- package/dist/runtime/ThreadListRuntime/ThreadListRuntime.d.ts +35 -0
- package/dist/runtime/ThreadRuntime/ThreadRuntime.d.ts +21 -0
- package/dist/runtime/ThreadRuntime/ThreadRuntimeCore.d.ts +32 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/types/adapters.d.ts +48 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/message.d.ts +56 -0
- package/dist/types/plugin.d.ts +55 -0
- package/dist/types/thread.d.ts +31 -0
- package/dist/utils/BaseSSEStreamAdapter.d.ts +25 -0
- package/dist/utils/Subscribable.d.ts +7 -0
- package/dist/utils/groupContentByParentId.d.ts +9 -0
- package/dist/utils/idGenerator.d.ts +3 -0
- package/dist/utils/index.d.ts +4 -0
- package/package.json +57 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { FocusContext } from '../runtime/ContentFocusRuntime/ContentFocusRuntime';
|
|
2
|
+
import { Message, MessageContent } from './message';
|
|
3
|
+
export interface MessageRendererProps<T extends MessageContent = MessageContent> {
|
|
4
|
+
content: T;
|
|
5
|
+
message: Message;
|
|
6
|
+
onClick?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface MessageRenderer<T extends MessageContent = any> {
|
|
9
|
+
type: string;
|
|
10
|
+
component: React.ComponentType<MessageRendererProps<T>>;
|
|
11
|
+
auxiliary?: {
|
|
12
|
+
detail?: React.ComponentType<AuxiliaryRendererProps>;
|
|
13
|
+
};
|
|
14
|
+
priority?: number;
|
|
15
|
+
capabilities?: {
|
|
16
|
+
supportsFocus?: boolean;
|
|
17
|
+
supportsPreview?: boolean;
|
|
18
|
+
supportsFullscreen?: boolean;
|
|
19
|
+
};
|
|
20
|
+
canHandle?: (message: Message, content: MessageContent) => boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface GroupRendererProps {
|
|
23
|
+
groupKey: string;
|
|
24
|
+
items: MessageContent[];
|
|
25
|
+
message: Message;
|
|
26
|
+
}
|
|
27
|
+
export interface GroupRenderer {
|
|
28
|
+
groupType: string;
|
|
29
|
+
component: React.ComponentType<GroupRendererProps>;
|
|
30
|
+
priority?: number;
|
|
31
|
+
canHandle?: (groupKey: string, items: MessageContent[]) => boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface AuxiliaryRendererProps extends MessageRendererProps {
|
|
34
|
+
context: FocusContext;
|
|
35
|
+
onClose?: () => void;
|
|
36
|
+
onNavigate?: (direction: 'next' | 'prev') => void;
|
|
37
|
+
onSwitchContext?: (context: FocusContext) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface ChatPluginConfig {
|
|
40
|
+
endpoint?: string;
|
|
41
|
+
context?: Record<string, unknown>;
|
|
42
|
+
streamingEnabled?: boolean;
|
|
43
|
+
feedbackEnabled?: boolean;
|
|
44
|
+
detailPanelEnabled?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface ChatPlugin {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
renderers: MessageRenderer[];
|
|
50
|
+
groupRenderers?: GroupRenderer[];
|
|
51
|
+
init?: (config: ChatPluginConfig) => void;
|
|
52
|
+
}
|
|
53
|
+
export interface PluginConfig {
|
|
54
|
+
plugins?: ChatPlugin[];
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type ThreadListItemStatus = {
|
|
2
|
+
type: 'regular';
|
|
3
|
+
} | {
|
|
4
|
+
type: 'deleted';
|
|
5
|
+
};
|
|
6
|
+
export interface RuntimeCapabilities {
|
|
7
|
+
cancel: boolean;
|
|
8
|
+
edit: boolean;
|
|
9
|
+
reload: boolean;
|
|
10
|
+
speech: boolean;
|
|
11
|
+
attachments: boolean;
|
|
12
|
+
feedback: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ThreadState {
|
|
15
|
+
threadId: string;
|
|
16
|
+
isDisabled: boolean;
|
|
17
|
+
isRunning: boolean;
|
|
18
|
+
capabilities: RuntimeCapabilities;
|
|
19
|
+
}
|
|
20
|
+
export interface ThreadListItemState {
|
|
21
|
+
id: string;
|
|
22
|
+
conversationId?: string;
|
|
23
|
+
externalId?: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
status: ThreadListItemStatus;
|
|
26
|
+
isMain: boolean;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
lastMessage?: string;
|
|
30
|
+
messageCount?: number;
|
|
31
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StreamAdapter, StreamChunk } from '../types/adapters';
|
|
2
|
+
import { Message } from '../types/message';
|
|
3
|
+
export interface SSEEvent {
|
|
4
|
+
event: string;
|
|
5
|
+
data: any;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class BaseSSEStreamAdapter<TAllowedEvents extends readonly string[] = readonly string[]> implements StreamAdapter {
|
|
8
|
+
protected abstract prepareRequest(params: {
|
|
9
|
+
messages: Message[];
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}): {
|
|
12
|
+
url: string;
|
|
13
|
+
options: RequestInit;
|
|
14
|
+
};
|
|
15
|
+
protected abstract convertEvent(event: SSEEvent & {
|
|
16
|
+
event: TAllowedEvents[number];
|
|
17
|
+
}): StreamChunk | null;
|
|
18
|
+
protected getAllowedEvents(): TAllowedEvents | null;
|
|
19
|
+
protected shouldProcessEvent(eventType: string): boolean;
|
|
20
|
+
stream(params: {
|
|
21
|
+
messages: Message[];
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}): AsyncGenerator<StreamChunk, void, unknown>;
|
|
24
|
+
private parseSSEStream;
|
|
25
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MessageContent } from '../types/message';
|
|
2
|
+
export interface ContentGroup {
|
|
3
|
+
groupKey: string | undefined;
|
|
4
|
+
indices: number[];
|
|
5
|
+
items: MessageContent[];
|
|
6
|
+
groupType: 'code' | 'tool-calls' | 'reasoning' | 'mixed' | 'single-type';
|
|
7
|
+
primaryType: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function groupContentByParentId(content: MessageContent[]): ContentGroup[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { BaseSubscribable } from './Subscribable';
|
|
2
|
+
export { generateMessageId, generateThreadId, generateId } from './idGenerator';
|
|
3
|
+
export { groupContentByParentId, type ContentGroup } from './groupContentByParentId';
|
|
4
|
+
export { BaseSSEStreamAdapter } from './BaseSSEStreamAdapter';
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@harnessio/ai-chat-core",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"private": false,
|
|
7
|
+
"type": "module",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"react": ">=17.0.0 <19.0.0",
|
|
19
|
+
"react-dom": ">=17.0.0 <19.0.0",
|
|
20
|
+
"react-router-dom": ">=5.0.0 <7.0.0"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"use-sync-external-store": "^1.2.1"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^16.18.84",
|
|
27
|
+
"@types/react": "^17.0.3",
|
|
28
|
+
"@types/react-dom": "^17.0.3",
|
|
29
|
+
"@types/use-sync-external-store": "^1.5.0",
|
|
30
|
+
"@vitejs/plugin-react-swc": "^3.7.2",
|
|
31
|
+
"dts-bundle-generator": "^6.4.0",
|
|
32
|
+
"eslint": "^8.57.1",
|
|
33
|
+
"flatted": "^3.3.2",
|
|
34
|
+
"jest": "^29.7.0",
|
|
35
|
+
"lint-staged": "^15.2.9",
|
|
36
|
+
"npm-run-all": "^4.1.5",
|
|
37
|
+
"ts-jest": "^29.1.2",
|
|
38
|
+
"vite": "^6.0.3",
|
|
39
|
+
"vite-plugin-dts": "^4.3.0",
|
|
40
|
+
"vite-plugin-svgr": "^4.3.0"
|
|
41
|
+
},
|
|
42
|
+
"license": "Apache-2.0",
|
|
43
|
+
"lint-staged": {
|
|
44
|
+
"*.{js,jsx,ts,tsx}": [
|
|
45
|
+
"eslint --fix",
|
|
46
|
+
"prettier --write"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"dev": "run-p build:watch",
|
|
51
|
+
"build": "vite build",
|
|
52
|
+
"build:ci": "vite build",
|
|
53
|
+
"build:watch": "vite build --watch",
|
|
54
|
+
"pretty": "prettier --check ./src",
|
|
55
|
+
"pre-commit": "lint-staged"
|
|
56
|
+
}
|
|
57
|
+
}
|