@doderasoftware/restify-ai 0.1.0-beta.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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +514 -0
  3. package/dist/components/AiAvatar.vue.d.ts +27 -0
  4. package/dist/components/AiAvatar.vue.d.ts.map +1 -0
  5. package/dist/components/AiChatDrawer.vue.d.ts +148 -0
  6. package/dist/components/AiChatDrawer.vue.d.ts.map +1 -0
  7. package/dist/components/AiEmptyState.vue.d.ts +36 -0
  8. package/dist/components/AiEmptyState.vue.d.ts.map +1 -0
  9. package/dist/components/ChatInput.vue.d.ts +110 -0
  10. package/dist/components/ChatInput.vue.d.ts.map +1 -0
  11. package/dist/components/ChatMessage.vue.d.ts +44 -0
  12. package/dist/components/ChatMessage.vue.d.ts.map +1 -0
  13. package/dist/components/ChatMessageActions.vue.d.ts +33 -0
  14. package/dist/components/ChatMessageActions.vue.d.ts.map +1 -0
  15. package/dist/components/MentionList.vue.d.ts +58 -0
  16. package/dist/components/MentionList.vue.d.ts.map +1 -0
  17. package/dist/components/UserAvatar.vue.d.ts +27 -0
  18. package/dist/components/UserAvatar.vue.d.ts.map +1 -0
  19. package/dist/components/drawer/ConfirmDialog.vue.d.ts +47 -0
  20. package/dist/components/drawer/ConfirmDialog.vue.d.ts.map +1 -0
  21. package/dist/components/drawer/DrawerHeader.vue.d.ts +46 -0
  22. package/dist/components/drawer/DrawerHeader.vue.d.ts.map +1 -0
  23. package/dist/components/drawer/DrawerMessageList.vue.d.ts +44 -0
  24. package/dist/components/drawer/DrawerMessageList.vue.d.ts.map +1 -0
  25. package/dist/components/drawer/SetupGuide.vue.d.ts +19 -0
  26. package/dist/components/drawer/SetupGuide.vue.d.ts.map +1 -0
  27. package/dist/components/index.d.ts +9 -0
  28. package/dist/components/index.d.ts.map +1 -0
  29. package/dist/components/input/AttachmentsPreview.vue.d.ts +30 -0
  30. package/dist/components/input/AttachmentsPreview.vue.d.ts.map +1 -0
  31. package/dist/components/input/InputActions.vue.d.ts +28 -0
  32. package/dist/components/input/InputActions.vue.d.ts.map +1 -0
  33. package/dist/components/input/SuggestionsDropdown.vue.d.ts +32 -0
  34. package/dist/components/input/SuggestionsDropdown.vue.d.ts.map +1 -0
  35. package/dist/composables/index.d.ts +12 -0
  36. package/dist/composables/index.d.ts.map +1 -0
  37. package/dist/composables/useAiContext.d.ts +18 -0
  38. package/dist/composables/useAiContext.d.ts.map +1 -0
  39. package/dist/composables/useAiSuggestions.d.ts +11 -0
  40. package/dist/composables/useAiSuggestions.d.ts.map +1 -0
  41. package/dist/composables/useChatErrorHandling.d.ts +14 -0
  42. package/dist/composables/useChatErrorHandling.d.ts.map +1 -0
  43. package/dist/composables/useChatInput.d.ts +108 -0
  44. package/dist/composables/useChatInput.d.ts.map +1 -0
  45. package/dist/composables/useChatMarkdown.d.ts +10 -0
  46. package/dist/composables/useChatMarkdown.d.ts.map +1 -0
  47. package/dist/composables/useChatScroll.d.ts +10 -0
  48. package/dist/composables/useChatScroll.d.ts.map +1 -0
  49. package/dist/composables/useHistoryLimit.d.ts +37 -0
  50. package/dist/composables/useHistoryLimit.d.ts.map +1 -0
  51. package/dist/composables/useKeyboardShortcut.d.ts +14 -0
  52. package/dist/composables/useKeyboardShortcut.d.ts.map +1 -0
  53. package/dist/composables/useLoadingText.d.ts +12 -0
  54. package/dist/composables/useLoadingText.d.ts.map +1 -0
  55. package/dist/composables/useMentionParsing.d.ts +67 -0
  56. package/dist/composables/useMentionParsing.d.ts.map +1 -0
  57. package/dist/composables/usePageAiContext.d.ts +24 -0
  58. package/dist/composables/usePageAiContext.d.ts.map +1 -0
  59. package/dist/composables/useSuggestions.d.ts +2 -0
  60. package/dist/composables/useSuggestions.d.ts.map +1 -0
  61. package/dist/config.d.ts +13 -0
  62. package/dist/config.d.ts.map +1 -0
  63. package/dist/index.d.ts +57 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/restify-ai.js +5425 -0
  66. package/dist/restify-ai.umd.cjs +76 -0
  67. package/dist/store.d.ts +247 -0
  68. package/dist/store.d.ts.map +1 -0
  69. package/dist/style.css +1 -0
  70. package/dist/suggestions/index.d.ts +24 -0
  71. package/dist/suggestions/index.d.ts.map +1 -0
  72. package/dist/types/index.d.ts +601 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/package.json +119 -0
  75. package/tailwind.config.cjs +54 -0
@@ -0,0 +1,247 @@
1
+ import { EventSourceMessage } from '@microsoft/fetch-event-source';
2
+ import { ChatAttachment, Mention, PageContext, AiStoreState, SetupState } from './types';
3
+
4
+ export declare const useRestifyAiStore: import('pinia').StoreDefinition<"restifyAiStore", AiStoreState, {
5
+ hasMessages: (state: {
6
+ chatHistoryLimit: number;
7
+ chatHistory: {
8
+ id: string;
9
+ role: import('./types').ChatRole | string;
10
+ message: string;
11
+ loading?: boolean | undefined;
12
+ streaming?: boolean | undefined;
13
+ timestamp?: number | undefined;
14
+ created_at?: (string | Date) | undefined;
15
+ attachments?: {
16
+ id: string;
17
+ name: string;
18
+ url?: string | undefined;
19
+ type?: string | undefined;
20
+ size?: number | undefined;
21
+ extractedText?: string | undefined;
22
+ uploading?: boolean | undefined;
23
+ progress?: number | undefined;
24
+ previewUrl?: string | undefined;
25
+ }[] | undefined;
26
+ mentions?: {
27
+ id: string;
28
+ name: string;
29
+ type: string;
30
+ metadata?: (Record<string, any> | null) | undefined;
31
+ }[] | undefined;
32
+ }[];
33
+ uploadedFiles: Record<string, ChatAttachment>;
34
+ loading: boolean;
35
+ showChat: boolean;
36
+ isFullscreen: boolean;
37
+ sending: boolean;
38
+ pageContext: {
39
+ pageType: string;
40
+ entityId?: string | undefined;
41
+ entityType?: string | undefined;
42
+ metadata?: Record<string, any> | undefined;
43
+ routePath?: string | undefined;
44
+ } | null;
45
+ quota: {
46
+ limit: number;
47
+ used: number;
48
+ remaining: number;
49
+ };
50
+ error: {
51
+ message: string | null;
52
+ failedQuestion: string | null;
53
+ failedAttachments?: {
54
+ id: string;
55
+ name: string;
56
+ url?: string | undefined;
57
+ type?: string | undefined;
58
+ size?: number | undefined;
59
+ extractedText?: string | undefined;
60
+ uploading?: boolean | undefined;
61
+ progress?: number | undefined;
62
+ previewUrl?: string | undefined;
63
+ }[] | null | undefined;
64
+ timestamp: number | null;
65
+ quotaExceeded?: boolean | undefined;
66
+ };
67
+ supportRequestMode: boolean;
68
+ setupState: {
69
+ isActive: boolean;
70
+ currentStep: import('./types').SetupStep;
71
+ testApiKey: string | null;
72
+ connectionStatus: "idle" | "testing" | "connected" | "failed";
73
+ backendConfigured: boolean;
74
+ lastError: string | null;
75
+ };
76
+ } & import('pinia').PiniaCustomStateProperties<AiStoreState>) => boolean;
77
+ isInSetupMode: (state: {
78
+ chatHistoryLimit: number;
79
+ chatHistory: {
80
+ id: string;
81
+ role: import('./types').ChatRole | string;
82
+ message: string;
83
+ loading?: boolean | undefined;
84
+ streaming?: boolean | undefined;
85
+ timestamp?: number | undefined;
86
+ created_at?: (string | Date) | undefined;
87
+ attachments?: {
88
+ id: string;
89
+ name: string;
90
+ url?: string | undefined;
91
+ type?: string | undefined;
92
+ size?: number | undefined;
93
+ extractedText?: string | undefined;
94
+ uploading?: boolean | undefined;
95
+ progress?: number | undefined;
96
+ previewUrl?: string | undefined;
97
+ }[] | undefined;
98
+ mentions?: {
99
+ id: string;
100
+ name: string;
101
+ type: string;
102
+ metadata?: (Record<string, any> | null) | undefined;
103
+ }[] | undefined;
104
+ }[];
105
+ uploadedFiles: Record<string, ChatAttachment>;
106
+ loading: boolean;
107
+ showChat: boolean;
108
+ isFullscreen: boolean;
109
+ sending: boolean;
110
+ pageContext: {
111
+ pageType: string;
112
+ entityId?: string | undefined;
113
+ entityType?: string | undefined;
114
+ metadata?: Record<string, any> | undefined;
115
+ routePath?: string | undefined;
116
+ } | null;
117
+ quota: {
118
+ limit: number;
119
+ used: number;
120
+ remaining: number;
121
+ };
122
+ error: {
123
+ message: string | null;
124
+ failedQuestion: string | null;
125
+ failedAttachments?: {
126
+ id: string;
127
+ name: string;
128
+ url?: string | undefined;
129
+ type?: string | undefined;
130
+ size?: number | undefined;
131
+ extractedText?: string | undefined;
132
+ uploading?: boolean | undefined;
133
+ progress?: number | undefined;
134
+ previewUrl?: string | undefined;
135
+ }[] | null | undefined;
136
+ timestamp: number | null;
137
+ quotaExceeded?: boolean | undefined;
138
+ };
139
+ supportRequestMode: boolean;
140
+ setupState: {
141
+ isActive: boolean;
142
+ currentStep: import('./types').SetupStep;
143
+ testApiKey: string | null;
144
+ connectionStatus: "idle" | "testing" | "connected" | "failed";
145
+ backendConfigured: boolean;
146
+ lastError: string | null;
147
+ };
148
+ } & import('pinia').PiniaCustomStateProperties<AiStoreState>) => boolean;
149
+ canChat: (state: {
150
+ chatHistoryLimit: number;
151
+ chatHistory: {
152
+ id: string;
153
+ role: import('./types').ChatRole | string;
154
+ message: string;
155
+ loading?: boolean | undefined;
156
+ streaming?: boolean | undefined;
157
+ timestamp?: number | undefined;
158
+ created_at?: (string | Date) | undefined;
159
+ attachments?: {
160
+ id: string;
161
+ name: string;
162
+ url?: string | undefined;
163
+ type?: string | undefined;
164
+ size?: number | undefined;
165
+ extractedText?: string | undefined;
166
+ uploading?: boolean | undefined;
167
+ progress?: number | undefined;
168
+ previewUrl?: string | undefined;
169
+ }[] | undefined;
170
+ mentions?: {
171
+ id: string;
172
+ name: string;
173
+ type: string;
174
+ metadata?: (Record<string, any> | null) | undefined;
175
+ }[] | undefined;
176
+ }[];
177
+ uploadedFiles: Record<string, ChatAttachment>;
178
+ loading: boolean;
179
+ showChat: boolean;
180
+ isFullscreen: boolean;
181
+ sending: boolean;
182
+ pageContext: {
183
+ pageType: string;
184
+ entityId?: string | undefined;
185
+ entityType?: string | undefined;
186
+ metadata?: Record<string, any> | undefined;
187
+ routePath?: string | undefined;
188
+ } | null;
189
+ quota: {
190
+ limit: number;
191
+ used: number;
192
+ remaining: number;
193
+ };
194
+ error: {
195
+ message: string | null;
196
+ failedQuestion: string | null;
197
+ failedAttachments?: {
198
+ id: string;
199
+ name: string;
200
+ url?: string | undefined;
201
+ type?: string | undefined;
202
+ size?: number | undefined;
203
+ extractedText?: string | undefined;
204
+ uploading?: boolean | undefined;
205
+ progress?: number | undefined;
206
+ previewUrl?: string | undefined;
207
+ }[] | null | undefined;
208
+ timestamp: number | null;
209
+ quotaExceeded?: boolean | undefined;
210
+ };
211
+ supportRequestMode: boolean;
212
+ setupState: {
213
+ isActive: boolean;
214
+ currentStep: import('./types').SetupStep;
215
+ testApiKey: string | null;
216
+ connectionStatus: "idle" | "testing" | "connected" | "failed";
217
+ backendConfigured: boolean;
218
+ lastError: string | null;
219
+ };
220
+ } & import('pinia').PiniaCustomStateProperties<AiStoreState>) => boolean;
221
+ }, {
222
+ scrollToBottom(): Promise<void>;
223
+ parseStreamContent(event: EventSourceMessage): string | null;
224
+ askQuestion(question: string, attachments?: ChatAttachment[], mentions?: Mention[], isSupportRequest?: boolean): Promise<boolean>;
225
+ cancelRequest(): void;
226
+ clearChatHistory(): void;
227
+ retry(): Promise<boolean>;
228
+ clearError(): void;
229
+ toggleSupportMode(): void;
230
+ fetchQuota(): Promise<void>;
231
+ uploadFile(file: File): Promise<ChatAttachment | null>;
232
+ setPageContext(context: PageContext | null): void;
233
+ toggleDrawer(): void;
234
+ openDrawer(): void;
235
+ closeDrawer(): void;
236
+ startSupportRequest(): void;
237
+ cancelSupportRequest(): void;
238
+ registerUploadedFile(attachment: ChatAttachment): void;
239
+ startSetupMode(): void;
240
+ setSetupStep(step: SetupState["currentStep"]): void;
241
+ setTestApiKey(key: string): void;
242
+ testConnection(): Promise<boolean>;
243
+ completeSetup(): void;
244
+ skipSetup(): void;
245
+ }>;
246
+ export type RestifyAiStore = ReturnType<typeof useRestifyAiStore>;
247
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,KAAK,EAEV,cAAc,EACd,OAAO,EAGP,WAAW,EACX,YAAY,EACZ,UAAU,EAGX,MAAM,SAAS,CAAA;AAuNhB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAiEF,OAAO,CAAC,IAAI,CAAC;8BAQX,kBAAkB,GAAG,MAAM,GAAG,IAAI;0BAYhD,MAAM,gBACH,cAAc,EAAE,aACnB,OAAO,EAAE,qBACD,OAAO,GACxB,OAAO,CAAC,OAAO,CAAC;qBAwRF,IAAI;wBAUD,IAAI;aAeT,OAAO,CAAC,OAAO,CAAC;kBAmBjB,IAAI;yBAYG,IAAI;kBAIL,OAAO,CAAC,IAAI,CAAC;qBA4CV,IAAI,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;4BAwFpC,WAAW,GAAG,IAAI,GAAG,IAAI;oBAIjC,IAAI;kBAMN,IAAI;mBAMH,IAAI;2BAMI,IAAI;4BAIH,IAAI;qCAMK,cAAc,GAAG,IAAI;sBAMpC,IAAI;uBAWH,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI;uBAIhC,MAAM,GAAG,IAAI;sBAIR,OAAO,CAAC,OAAO,CAAC;qBAkDvB,IAAI;iBAOR,IAAI;EAKnB,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @keyframes rai-fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-in{animation:rai-fade-in-up .3s ease-out}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:transparent}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:#9ca3af80;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:#9ca3afb3}.dark .scrollbar-thin::-webkit-scrollbar-thumb{background-color:#4b556380}.dark .scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:#4b5563b3}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.5) transparent}.dark .scrollbar-thin{scrollbar-color:rgba(75,85,99,.5) transparent}@media (prefers-reduced-motion: reduce){.animate-in{animation:none}}[data-v-df348786] .mention{display:inline-flex;align-items:center;border-radius:.375rem;background-color:#6366f133;padding:.125rem .5rem;font-weight:500;--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}[data-v-df348786] .bg-primary .mention{background-color:#fff3;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.rai-slide-left-enter-active[data-v-e286ec63],.rai-slide-left-leave-active[data-v-e286ec63]{transition:transform .28s cubic-bezier(.32,.72,0,1)}.rai-slide-left-enter-from[data-v-e286ec63],.rai-slide-left-leave-to[data-v-e286ec63]{transform:translate(100%)}.rai-slide-right-enter-active[data-v-e286ec63],.rai-slide-right-leave-active[data-v-e286ec63]{transition:transform .28s cubic-bezier(.32,.72,0,1)}.rai-slide-right-enter-from[data-v-e286ec63],.rai-slide-right-leave-to[data-v-e286ec63]{transform:translate(-100%)}.rai-fade-enter-active[data-v-e286ec63],.rai-fade-leave-active[data-v-e286ec63]{transition:opacity .2s ease-out}.rai-fade-enter-from[data-v-e286ec63],.rai-fade-leave-to[data-v-e286ec63]{opacity:0}
@@ -0,0 +1,24 @@
1
+ import { AISuggestion, PageContext, SuggestionProvider } from '../types';
2
+
3
+ /**
4
+ * Initialize providers from config
5
+ */
6
+ export declare function initializeProviders(): void;
7
+ /**
8
+ * Get AI suggestions for a specific path and context
9
+ */
10
+ export declare function getSuggestionsForPath(path: string, context: PageContext | null): AISuggestion[];
11
+ /**
12
+ * Register a provider at runtime
13
+ */
14
+ export declare function registerProvider(provider: SuggestionProvider): void;
15
+ /**
16
+ * Unregister a provider
17
+ */
18
+ export declare function unregisterProvider(id: string): void;
19
+ /**
20
+ * Get all providers
21
+ */
22
+ export declare function getAllProviders(): SuggestionProvider[];
23
+ export declare const registerSuggestionProvider: typeof registerProvider;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/suggestions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAqB7E;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAS1C;AA+BD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GAAG,IAAI,GAC1B,YAAY,EAAE,CAoBhB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAanE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMnD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,kBAAkB,EAAE,CAEtD;AAED,eAAO,MAAM,0BAA0B,yBAAmB,CAAA"}