@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.
Files changed (36) hide show
  1. package/LICENSE +201 -0
  2. package/dist/core/PluginRegistry.d.ts +12 -0
  3. package/dist/core/index.d.ts +1 -0
  4. package/dist/index.d.ts +5 -0
  5. package/dist/index.js +1051 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/react/hooks/index.d.ts +7 -0
  8. package/dist/react/hooks/useAssistantRuntime.d.ts +2 -0
  9. package/dist/react/hooks/useComposer.d.ts +3 -0
  10. package/dist/react/hooks/useContentFocus.d.ts +17 -0
  11. package/dist/react/hooks/useContentRenderer.d.ts +16 -0
  12. package/dist/react/hooks/useCurrentThread.d.ts +2 -0
  13. package/dist/react/hooks/useMessages.d.ts +2 -0
  14. package/dist/react/hooks/useThreadList.d.ts +9 -0
  15. package/dist/react/index.d.ts +2 -0
  16. package/dist/react/providers/AssistantRuntimeProvider.d.ts +8 -0
  17. package/dist/react/providers/index.d.ts +1 -0
  18. package/dist/runtime/AssistantRuntime/AssistantRuntime.d.ts +33 -0
  19. package/dist/runtime/ComposerRuntime/ComposerRuntime.d.ts +16 -0
  20. package/dist/runtime/ContentFocusRuntime/ContentFocusRuntime.d.ts +27 -0
  21. package/dist/runtime/ThreadListItemRuntime/ThreadListItemRuntime.d.ts +20 -0
  22. package/dist/runtime/ThreadListRuntime/ThreadListRuntime.d.ts +35 -0
  23. package/dist/runtime/ThreadRuntime/ThreadRuntime.d.ts +21 -0
  24. package/dist/runtime/ThreadRuntime/ThreadRuntimeCore.d.ts +32 -0
  25. package/dist/runtime/index.d.ts +10 -0
  26. package/dist/types/adapters.d.ts +48 -0
  27. package/dist/types/index.d.ts +5 -0
  28. package/dist/types/message.d.ts +56 -0
  29. package/dist/types/plugin.d.ts +55 -0
  30. package/dist/types/thread.d.ts +31 -0
  31. package/dist/utils/BaseSSEStreamAdapter.d.ts +25 -0
  32. package/dist/utils/Subscribable.d.ts +7 -0
  33. package/dist/utils/groupContentByParentId.d.ts +9 -0
  34. package/dist/utils/idGenerator.d.ts +3 -0
  35. package/dist/utils/index.d.ts +4 -0
  36. 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,7 @@
1
+ export type Unsubscribe = () => void;
2
+ export declare abstract class BaseSubscribable {
3
+ private _subscriptions;
4
+ subscribe(callback: () => void): Unsubscribe;
5
+ protected notifySubscribers(): void;
6
+ protected getSubscriberCount(): number;
7
+ }
@@ -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,3 @@
1
+ export declare function generateMessageId(): string;
2
+ export declare function generateThreadId(): string;
3
+ export declare function generateId(prefix?: string): string;
@@ -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
+ }