@atom8n/chat 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +289 -0
  2. package/dist/App.vue.d.ts +2 -0
  3. package/dist/__stories__/App.stories.d.ts +18 -0
  4. package/dist/__tests__/Input.spec.d.ts +1 -0
  5. package/dist/__tests__/api/generic.spec.d.ts +1 -0
  6. package/dist/__tests__/api/message.spec.d.ts +1 -0
  7. package/dist/__tests__/index.spec.d.ts +1 -0
  8. package/dist/__tests__/plugins/chat.spec.d.ts +1 -0
  9. package/dist/__tests__/plugins/chat.test.d.ts +1 -0
  10. package/dist/__tests__/setup.d.ts +0 -0
  11. package/dist/__tests__/utils/create.d.ts +5 -0
  12. package/dist/__tests__/utils/fetch.d.ts +13 -0
  13. package/dist/__tests__/utils/index.d.ts +3 -0
  14. package/dist/__tests__/utils/selectors.d.ts +12 -0
  15. package/dist/__tests__/utils/streaming.spec.d.ts +1 -0
  16. package/dist/__tests__/utils/streamingHandlers.spec.d.ts +1 -0
  17. package/dist/api/generic.d.ts +7 -0
  18. package/dist/api/index.d.ts +2 -0
  19. package/dist/api/message.d.ts +11 -0
  20. package/dist/chat.bundle.es.js +30125 -0
  21. package/dist/chat.bundle.umd.js +42 -0
  22. package/dist/chat.es.js +28207 -0
  23. package/dist/chat.umd.js +34 -0
  24. package/dist/components/Button.vue.d.ts +17 -0
  25. package/dist/components/Chat.vue.d.ts +2 -0
  26. package/dist/components/ChatFile.vue.d.ts +12 -0
  27. package/dist/components/ChatWindow.vue.d.ts +2 -0
  28. package/dist/components/GetStarted.vue.d.ts +2 -0
  29. package/dist/components/GetStartedFooter.vue.d.ts +2 -0
  30. package/dist/components/Input.vue.d.ts +39 -0
  31. package/dist/components/Layout.vue.d.ts +23 -0
  32. package/dist/components/Message.vue.d.ts +39 -0
  33. package/dist/components/MessageTyping.vue.d.ts +76 -0
  34. package/dist/components/MessagesList.vue.d.ts +164 -0
  35. package/dist/components/PoweredBy.vue.d.ts +2 -0
  36. package/dist/components/index.d.ts +10 -0
  37. package/dist/composables/index.d.ts +3 -0
  38. package/dist/composables/useChat.d.ts +2 -0
  39. package/dist/composables/useI18n.d.ts +4 -0
  40. package/dist/composables/useOptions.d.ts +4 -0
  41. package/dist/constants/defaults.d.ts +3 -0
  42. package/dist/constants/index.d.ts +3 -0
  43. package/dist/constants/localStorage.d.ts +2 -0
  44. package/dist/constants/symbols.d.ts +4 -0
  45. package/dist/event-buses/chatEventBus.d.ts +1 -0
  46. package/dist/event-buses/index.d.ts +1 -0
  47. package/dist/favicon.ico +0 -0
  48. package/dist/index.d.ts +2 -0
  49. package/dist/plugins/chat.d.ts +3 -0
  50. package/dist/plugins/index.d.ts +1 -0
  51. package/dist/style.css +5 -0
  52. package/dist/types/chat.d.ts +13 -0
  53. package/dist/types/index.d.ts +5 -0
  54. package/dist/types/messages.d.ts +17 -0
  55. package/dist/types/options.d.ts +33 -0
  56. package/dist/types/streaming.d.ts +18 -0
  57. package/dist/types/webhook.d.ts +19 -0
  58. package/dist/utils/event-bus.d.ts +8 -0
  59. package/dist/utils/index.d.ts +3 -0
  60. package/dist/utils/mount.d.ts +1 -0
  61. package/dist/utils/streaming.d.ts +26 -0
  62. package/dist/utils/streamingHandlers.d.ts +6 -0
  63. package/dist/utils/utils.d.ts +1 -0
  64. package/package.json +68 -0
@@ -0,0 +1,13 @@
1
+ import { Ref } from 'vue';
2
+ import { ChatMessage } from './messages';
3
+ import { SendMessageResponse } from './webhook';
4
+ export interface Chat {
5
+ initialMessages: Ref<ChatMessage[]>;
6
+ messages: Ref<ChatMessage[]>;
7
+ currentSessionId: Ref<string | null>;
8
+ waitingForResponse: Ref<boolean>;
9
+ loadPreviousSession?: () => Promise<string | undefined>;
10
+ startNewSession?: () => Promise<void>;
11
+ sendMessage: (text: string, files?: File[]) => Promise<SendMessageResponse | null>;
12
+ ws?: WebSocket | null;
13
+ }
@@ -0,0 +1,5 @@
1
+ export type * from './chat';
2
+ export type * from './messages';
3
+ export type * from './options';
4
+ export type * from './webhook';
5
+ export type * from './streaming';
@@ -0,0 +1,17 @@
1
+ export type ChatMessage<T = Record<string, unknown>> = ChatMessageComponent<T> | ChatMessageText;
2
+ export interface ChatMessageComponent<T = Record<string, unknown>> extends ChatMessageBase {
3
+ type: 'component';
4
+ key: string;
5
+ arguments: T;
6
+ }
7
+ export interface ChatMessageText extends ChatMessageBase {
8
+ type?: 'text';
9
+ text: string;
10
+ }
11
+ interface ChatMessageBase {
12
+ id: string;
13
+ transparent?: boolean;
14
+ sender: 'user' | 'bot';
15
+ files?: File[];
16
+ }
17
+ export {};
@@ -0,0 +1,33 @@
1
+ import { Component, Ref } from 'vue';
2
+ export interface ChatOptions {
3
+ webhookUrl: string;
4
+ webhookConfig?: {
5
+ method?: 'GET' | 'POST';
6
+ headers?: Record<string, string>;
7
+ };
8
+ target?: string | Element;
9
+ mode?: 'window' | 'fullscreen';
10
+ showWindowCloseButton?: boolean;
11
+ showWelcomeScreen?: boolean;
12
+ loadPreviousSession?: boolean;
13
+ chatInputKey?: string;
14
+ chatSessionKey?: string;
15
+ defaultLanguage?: 'en';
16
+ initialMessages?: string[];
17
+ metadata?: Record<string, unknown>;
18
+ i18n: Record<string, {
19
+ title: string;
20
+ subtitle: string;
21
+ footer: string;
22
+ getStarted: string;
23
+ inputPlaceholder: string;
24
+ closeButtonTooltip: string;
25
+ [message: string]: string;
26
+ }>;
27
+ theme?: {};
28
+ messageComponents?: Record<string, Component>;
29
+ disabled?: Ref<boolean>;
30
+ allowFileUploads?: Ref<boolean> | boolean;
31
+ allowedFilesMimeTypes?: Ref<string> | string;
32
+ enableStreaming?: boolean;
33
+ }
@@ -0,0 +1,18 @@
1
+ export type ChunkType = 'begin' | 'item' | 'end' | 'error';
2
+ export interface StructuredChunk {
3
+ type: ChunkType;
4
+ content?: string;
5
+ metadata: {
6
+ nodeId: string;
7
+ nodeName: string;
8
+ timestamp: number;
9
+ runIndex: number;
10
+ itemIndex: number;
11
+ };
12
+ }
13
+ export interface NodeStreamingState {
14
+ nodeId: string;
15
+ chunks: string[];
16
+ isActive: boolean;
17
+ startTime: number;
18
+ }
@@ -0,0 +1,19 @@
1
+ export interface LoadPreviousSessionResponseItem {
2
+ id: string[];
3
+ kwargs: {
4
+ content: string;
5
+ additional_kwargs: Record<string, unknown>;
6
+ };
7
+ lc: number;
8
+ type: string;
9
+ }
10
+ export interface LoadPreviousSessionResponse {
11
+ data: LoadPreviousSessionResponseItem[];
12
+ }
13
+ export interface SendMessageResponse {
14
+ output?: string;
15
+ text?: string;
16
+ message?: string;
17
+ executionId?: string;
18
+ executionStarted?: boolean;
19
+ }
@@ -0,0 +1,8 @@
1
+ export type CallbackFn = Function;
2
+ export type UnregisterFn = () => void;
3
+ export interface EventBus {
4
+ on: (eventName: string, fn: CallbackFn) => UnregisterFn;
5
+ off: (eventName: string, fn: CallbackFn) => void;
6
+ emit: <T = Event>(eventName: string, event?: T) => void;
7
+ }
8
+ export declare function createEventBus(): EventBus;
@@ -0,0 +1,3 @@
1
+ export * from './event-bus';
2
+ export * from './mount';
3
+ export * from './utils';
@@ -0,0 +1 @@
1
+ export declare function createDefaultMountingTarget(mountingTarget: string): void;
@@ -0,0 +1,26 @@
1
+ import { ChatMessage, ChatMessageText } from '../types';
2
+ export interface NodeRunData {
3
+ content: string;
4
+ isComplete: boolean;
5
+ message: ChatMessageText;
6
+ }
7
+ export declare class StreamingMessageManager {
8
+ private nodeRuns;
9
+ private runOrder;
10
+ private activeRuns;
11
+ constructor();
12
+ private getRunKey;
13
+ initializeRun(nodeId: string, runIndex?: number): ChatMessageText;
14
+ registerRunStart(nodeId: string, runIndex?: number): void;
15
+ addRunToActive(nodeId: string, runIndex?: number): ChatMessageText;
16
+ removeRunFromActive(nodeId: string, runIndex?: number): void;
17
+ addChunkToRun(nodeId: string, chunk: string, runIndex?: number): ChatMessageText | null;
18
+ getRunMessage(nodeId: string, runIndex?: number): ChatMessageText | null;
19
+ areAllRunsComplete(): boolean;
20
+ getRunCount(): number;
21
+ getActiveRunCount(): number;
22
+ getAllMessages(): ChatMessageText[];
23
+ reset(): void;
24
+ }
25
+ export declare function createBotMessage(id?: string): ChatMessageText;
26
+ export declare function updateMessageInArray(messages: ChatMessage[], messageId: string, updatedMessage: ChatMessageText): void;
@@ -0,0 +1,6 @@
1
+ import { Ref } from 'vue';
2
+ import { ChatMessage, ChatMessageText } from '../types';
3
+ import { StreamingMessageManager } from './streaming';
4
+ export declare function handleStreamingChunk(chunk: string, nodeId: string | undefined, streamingManager: StreamingMessageManager, receivedMessage: Ref<ChatMessageText | null>, messages: Ref<ChatMessage[]>, runIndex?: number): void;
5
+ export declare function handleNodeStart(nodeId: string, streamingManager: StreamingMessageManager, runIndex?: number): void;
6
+ export declare function handleNodeComplete(nodeId: string, streamingManager: StreamingMessageManager, runIndex?: number): void;
@@ -0,0 +1 @@
1
+ export declare function constructChatWebsocketUrl(url: string, executionId: string, sessionId: string, isPublic: boolean): string;
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@atom8n/chat",
3
+ "version": "1.2.0",
4
+ "scripts": {
5
+ "dev": "pnpm run storybook",
6
+ "build": "pnpm build:vite && pnpm build:bundle",
7
+ "build:vite": "cross-env vite build",
8
+ "build:bundle": "cross-env INCLUDE_VUE=true vite build",
9
+ "preview": "vite preview",
10
+ "test:dev": "vitest",
11
+ "test": "vitest run",
12
+ "typecheck": "vue-tsc --noEmit",
13
+ "lint": "eslint src --quiet",
14
+ "lint:fix": "eslint src --fix",
15
+ "lint:styles": "stylelint \"src/**/*.{scss,sass,vue}\" --cache",
16
+ "lint:styles:fix": "stylelint \"src/**/*.{scss,sass,vue}\" --fix --cache",
17
+ "format": "biome format --write src .storybook && prettier --write src/ --ignore-path ../../../../.prettierignore",
18
+ "format:check": "biome ci src .storybook && prettier --check src/ --ignore-path ../../../../.prettierignore",
19
+ "storybook": "storybook dev -p 6006 --no-open",
20
+ "build:storybook": "storybook build"
21
+ },
22
+ "types": "./dist/index.d.ts",
23
+ "main": "./dist/chat.umd.js",
24
+ "module": "./dist/chat.es.js",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/chat.es.js",
29
+ "require": "./dist/chat.umd.js"
30
+ },
31
+ "./style.css": {
32
+ "import": "./dist/style.css",
33
+ "require": "./dist/style.css"
34
+ },
35
+ "./*": {
36
+ "import": "./*",
37
+ "require": "./*"
38
+ }
39
+ },
40
+ "dependencies": {
41
+ "@atom8n/design-system": "2.2.0",
42
+ "@vueuse/core": "catalog:frontend",
43
+ "highlight.js": "catalog:frontend",
44
+ "markdown-it-link-attributes": "^4.0.1",
45
+ "uuid": "catalog:",
46
+ "vue": "catalog:frontend",
47
+ "vue-markdown-render": "catalog:frontend"
48
+ },
49
+ "devDependencies": {
50
+ "@iconify-json/mdi": "^1.1.54",
51
+ "@n8n/storybook": "*",
52
+ "@n8n/eslint-config": "*",
53
+ "@n8n/stylelint-config": "*",
54
+ "@atom8n/typescript-config": "1.3.0",
55
+ "@atom8n/vitest-config": "1.5.0",
56
+ "@vitejs/plugin-vue": "catalog:frontend",
57
+ "@vitest/coverage-v8": "catalog:",
58
+ "unplugin-icons": "^0.19.0",
59
+ "vite": "catalog:",
60
+ "vitest": "catalog:",
61
+ "vite-plugin-dts": "^4.5.3",
62
+ "vue-tsc": "catalog:frontend"
63
+ },
64
+ "files": [
65
+ "README.md",
66
+ "dist"
67
+ ]
68
+ }