@djangocfg/ext-knowbase 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.
Files changed (104) hide show
  1. package/README.md +177 -0
  2. package/dist/chunk-GNRC54ON.js +4308 -0
  3. package/dist/hooks.cjs +6003 -0
  4. package/dist/hooks.d.cts +610 -0
  5. package/dist/hooks.d.ts +610 -0
  6. package/dist/hooks.js +1486 -0
  7. package/dist/index.cjs +4450 -0
  8. package/dist/index.d.cts +4398 -0
  9. package/dist/index.d.ts +4398 -0
  10. package/dist/index.js +1 -0
  11. package/package.json +81 -0
  12. package/src/api/generated/ext_knowbase/_utils/fetchers/ext_knowbase__knowbase.ts +2983 -0
  13. package/src/api/generated/ext_knowbase/_utils/fetchers/index.ts +28 -0
  14. package/src/api/generated/ext_knowbase/_utils/hooks/ext_knowbase__knowbase.ts +999 -0
  15. package/src/api/generated/ext_knowbase/_utils/hooks/index.ts +28 -0
  16. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItem.schema.ts +33 -0
  17. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunk.schema.ts +29 -0
  18. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkDetail.schema.ts +30 -0
  19. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkRequest.schema.ts +22 -0
  20. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemDetail.schema.ts +35 -0
  21. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemRequest.schema.ts +22 -0
  22. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveProcessingResult.schema.ts +26 -0
  23. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchRequestRequest.schema.ts +25 -0
  24. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchResult.schema.ts +24 -0
  25. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveStatistics.schema.ts +28 -0
  26. package/src/api/generated/ext_knowbase/_utils/schemas/ChatHistory.schema.ts +22 -0
  27. package/src/api/generated/ext_knowbase/_utils/schemas/ChatMessage.schema.ts +27 -0
  28. package/src/api/generated/ext_knowbase/_utils/schemas/ChatQueryRequest.schema.ts +22 -0
  29. package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponse.schema.ts +26 -0
  30. package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponseRequest.schema.ts +26 -0
  31. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSession.schema.ts +29 -0
  32. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionCreateRequest.schema.ts +22 -0
  33. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionRequest.schema.ts +25 -0
  34. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSource.schema.ts +21 -0
  35. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSourceRequest.schema.ts +21 -0
  36. package/src/api/generated/ext_knowbase/_utils/schemas/ChunkRevectorizationRequestRequest.schema.ts +20 -0
  37. package/src/api/generated/ext_knowbase/_utils/schemas/Document.schema.ts +32 -0
  38. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchive.schema.ts +44 -0
  39. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveDetail.schema.ts +48 -0
  40. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveList.schema.ts +35 -0
  41. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveRequest.schema.ts +21 -0
  42. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategory.schema.ts +23 -0
  43. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategoryRequest.schema.ts +21 -0
  44. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCreateRequest.schema.ts +22 -0
  45. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentProcessingStatus.schema.ts +23 -0
  46. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentRequest.schema.ts +22 -0
  47. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentStats.schema.ts +25 -0
  48. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemChunkList.schema.ts +24 -0
  49. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemList.schema.ts +24 -0
  50. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveSearchResultList.schema.ts +24 -0
  51. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatResponseList.schema.ts +24 -0
  52. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatSessionList.schema.ts +24 -0
  53. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentArchiveListList.schema.ts +24 -0
  54. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentList.schema.ts +24 -0
  55. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicCategoryList.schema.ts +24 -0
  56. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicDocumentListList.schema.ts +24 -0
  57. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemChunkRequest.schema.ts +22 -0
  58. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemRequest.schema.ts +22 -0
  59. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatResponseRequest.schema.ts +26 -0
  60. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatSessionRequest.schema.ts +25 -0
  61. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentArchiveRequest.schema.ts +21 -0
  62. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentRequest.schema.ts +22 -0
  63. package/src/api/generated/ext_knowbase/_utils/schemas/PublicCategory.schema.ts +21 -0
  64. package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocument.schema.ts +25 -0
  65. package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocumentList.schema.ts +24 -0
  66. package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationResult.schema.ts +24 -0
  67. package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationStatistics.schema.ts +26 -0
  68. package/src/api/generated/ext_knowbase/_utils/schemas/index.ts +70 -0
  69. package/src/api/generated/ext_knowbase/api-instance.ts +131 -0
  70. package/src/api/generated/ext_knowbase/client.ts +301 -0
  71. package/src/api/generated/ext_knowbase/enums.ts +241 -0
  72. package/src/api/generated/ext_knowbase/errors.ts +116 -0
  73. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/client.ts +666 -0
  74. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/index.ts +2 -0
  75. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/models.ts +1120 -0
  76. package/src/api/generated/ext_knowbase/http.ts +103 -0
  77. package/src/api/generated/ext_knowbase/index.ts +273 -0
  78. package/src/api/generated/ext_knowbase/logger.ts +259 -0
  79. package/src/api/generated/ext_knowbase/retry.ts +175 -0
  80. package/src/api/generated/ext_knowbase/schema.json +5865 -0
  81. package/src/api/generated/ext_knowbase/storage.ts +161 -0
  82. package/src/api/generated/ext_knowbase/validation-events.ts +133 -0
  83. package/src/api/index.ts +9 -0
  84. package/src/components/Chat/ChatUIContext.tsx +110 -0
  85. package/src/components/Chat/ChatWidget.tsx +476 -0
  86. package/src/components/Chat/README.md +122 -0
  87. package/src/components/Chat/components/MessageInput.tsx +124 -0
  88. package/src/components/Chat/components/MessageList.tsx +169 -0
  89. package/src/components/Chat/components/SessionList.tsx +192 -0
  90. package/src/components/Chat/components/index.ts +9 -0
  91. package/src/components/Chat/hooks/index.ts +6 -0
  92. package/src/components/Chat/hooks/useInfiniteSessions.ts +81 -0
  93. package/src/components/Chat/index.tsx +45 -0
  94. package/src/components/Chat/types.ts +81 -0
  95. package/src/config.ts +20 -0
  96. package/src/contexts/knowbase/ChatContext.tsx +173 -0
  97. package/src/contexts/knowbase/DocumentsContext.tsx +306 -0
  98. package/src/contexts/knowbase/KnowbaseProvider.tsx +47 -0
  99. package/src/contexts/knowbase/SessionsContext.tsx +175 -0
  100. package/src/contexts/knowbase/index.ts +63 -0
  101. package/src/contexts/knowbase/types.ts +69 -0
  102. package/src/hooks/index.ts +28 -0
  103. package/src/index.ts +22 -0
  104. package/src/utils/logger.ts +10 -0
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Chat Types
3
+ * Type definitions for RAG-powered chat widget
4
+ */
5
+
6
+ // Import types from local generated API
7
+ import { ExtKnowbaseKnowbaseTypes, Enums as GeneratedEnums } from '../../api/generated/ext_knowbase';
8
+
9
+ // ============================================================================
10
+ // Extract types from generated API
11
+ export const Enums = GeneratedEnums;
12
+ export type ChatMessage = ExtKnowbaseKnowbaseTypes.ChatMessage;
13
+ export type ChatSource = ExtKnowbaseKnowbaseTypes.ChatSource;
14
+
15
+ // ─────────────────────────────────────────────────────────────────────────
16
+ // Extended Message Type (for UI with sources)
17
+ // ─────────────────────────────────────────────────────────────────────────
18
+
19
+ export interface ChatMessageWithSources extends ChatMessage {
20
+ sources?: ChatSource[];
21
+ }
22
+
23
+ // ─────────────────────────────────────────────────────────────────────────
24
+ // Widget Props
25
+ // ─────────────────────────────────────────────────────────────────────────
26
+
27
+ export interface ChatWidgetProps {
28
+ /** Whether to auto-open on mount */
29
+ autoOpen?: boolean;
30
+ /** Render even when closed (for animations) */
31
+ persistent?: boolean;
32
+ /** Additional CSS classes */
33
+ className?: string;
34
+ /** Callback when toggle state changes */
35
+ onToggle?: (isOpen: boolean) => void;
36
+ /** Callback when message is sent */
37
+ onMessage?: (message: ChatMessageWithSources) => void;
38
+ }
39
+
40
+ // ─────────────────────────────────────────────────────────────────────────
41
+ // UI State
42
+ // ─────────────────────────────────────────────────────────────────────────
43
+
44
+ export interface ChatUIState {
45
+ isOpen: boolean;
46
+ isExpanded: boolean;
47
+ isMinimized: boolean;
48
+ showSources: boolean;
49
+ showTimestamps: boolean;
50
+ }
51
+
52
+ // ─────────────────────────────────────────────────────────────────────────
53
+ // Component Props
54
+ // ─────────────────────────────────────────────────────────────────────────
55
+
56
+ export interface MessageListProps {
57
+ messages: ChatMessageWithSources[];
58
+ isLoading?: boolean;
59
+ showSources?: boolean;
60
+ showTimestamps?: boolean;
61
+ autoScroll?: boolean;
62
+ className?: string;
63
+ }
64
+
65
+ export interface MessageInputProps {
66
+ onSend: (message: string) => Promise<void>;
67
+ isLoading?: boolean;
68
+ disabled?: boolean;
69
+ placeholder?: string;
70
+ className?: string;
71
+ }
72
+
73
+ export interface SessionListProps {
74
+ isOpen: boolean;
75
+ onClose: () => void;
76
+ onSelectSession: (sessionId: string) => void;
77
+ className?: string;
78
+ }
79
+
80
+
81
+
package/src/config.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Knowledge Base extension configuration
3
+ */
4
+
5
+ import type { ExtensionMetadata } from '@djangocfg/ext-base';
6
+
7
+ export const extensionConfig: ExtensionMetadata = {
8
+ name: 'knowbase',
9
+ version: '1.0.0',
10
+ author: 'DjangoCFG',
11
+ displayName: 'Knowledge Base',
12
+ description: 'Knowledge base and documentation management system',
13
+ icon: '📚',
14
+ license: 'MIT',
15
+ githubUrl: 'https://github.com/markolofsen/django-cfg',
16
+ homepage: 'https://djangocfg.com',
17
+ keywords: ['knowledge-base', 'documentation', 'articles', 'help', 'faq'],
18
+ dependencies: [],
19
+ minVersion: '2.0.0',
20
+ } as const;
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Knowbase Chat Context
3
+ * Context for RAG-powered chat functionality
4
+ */
5
+
6
+ 'use client';
7
+
8
+ import React, { createContext, useContext, type ReactNode } from 'react';
9
+
10
+ import { apiKnowbase } from '../../api';
11
+ import {
12
+ useKnowbaseAdminChatList,
13
+ useKnowbaseAdminChatRetrieve,
14
+ useCreateKnowbaseAdminChatCreate,
15
+ useUpdateKnowbaseAdminChatUpdate,
16
+ usePartialUpdateKnowbaseAdminChatPartialUpdate,
17
+ useDeleteKnowbaseAdminChatDestroy,
18
+ useKnowbaseAdminChatHistoryRetrieve,
19
+ useCreateKnowbaseAdminChatQueryCreate,
20
+ } from '../../api/generated/ext_knowbase/_utils/hooks';
21
+ import type {
22
+ PaginatedChatResponseList,
23
+ ChatResponse,
24
+ ChatResponseRequest,
25
+ PatchedChatResponseRequest,
26
+ ChatHistory,
27
+ ChatQueryRequest,
28
+ } from './types';
29
+
30
+ // ─────────────────────────────────────────────────────────────────────────
31
+ // Context Type
32
+ // ─────────────────────────────────────────────────────────────────────────
33
+
34
+ export interface KnowbaseChatContextValue {
35
+ // Chat list
36
+ chats: PaginatedChatResponseList | undefined;
37
+ isLoadingChats: boolean;
38
+ chatsError: Error | undefined;
39
+ refreshChats: () => Promise<void>;
40
+
41
+ // Chat operations
42
+ getChat: (id: string) => Promise<ChatResponse | undefined>;
43
+ getChatHistory: (id: string) => Promise<ChatHistory | undefined>;
44
+ createChat: (data: ChatResponseRequest) => Promise<ChatResponse>;
45
+ updateChat: (id: string, data: ChatResponseRequest) => Promise<ChatResponse>;
46
+ partialUpdateChat: (id: string, data: PatchedChatResponseRequest) => Promise<ChatResponse>;
47
+ deleteChat: (id: string) => Promise<void>;
48
+
49
+ // RAG Query
50
+ sendQuery: (data: ChatQueryRequest) => Promise<ChatResponse>;
51
+ }
52
+
53
+ // ─────────────────────────────────────────────────────────────────────────
54
+ // Context
55
+ // ─────────────────────────────────────────────────────────────────────────
56
+
57
+ const KnowbaseChatContext = createContext<KnowbaseChatContextValue | undefined>(undefined);
58
+
59
+ // ─────────────────────────────────────────────────────────────────────────
60
+ // Provider
61
+ // ─────────────────────────────────────────────────────────────────────────
62
+
63
+ export function KnowbaseChatProvider({ children }: { children: ReactNode }) {
64
+ // List chats
65
+ const {
66
+ data: chats,
67
+ error: chatsError,
68
+ isLoading: isLoadingChats,
69
+ mutate: mutateChats,
70
+ } = useKnowbaseAdminChatList({}, apiKnowbase);
71
+
72
+ const refreshChats = async () => {
73
+ await mutateChats();
74
+ };
75
+
76
+ // Mutations
77
+ const createChatMutation = useCreateKnowbaseAdminChatCreate();
78
+ const updateChatMutation = useUpdateKnowbaseAdminChatUpdate();
79
+ const partialUpdateChatMutation = usePartialUpdateKnowbaseAdminChatPartialUpdate();
80
+ const deleteChatMutation = useDeleteKnowbaseAdminChatDestroy();
81
+ const sendQueryMutation = useCreateKnowbaseAdminChatQueryCreate();
82
+
83
+ // Get single chat
84
+ const getChat = async (id: string): Promise<ChatResponse | undefined> => {
85
+ const { data } = useKnowbaseAdminChatRetrieve(id, apiKnowbase);
86
+ return data;
87
+ };
88
+
89
+ // Get chat history
90
+ const getChatHistory = async (id: string): Promise<ChatHistory | undefined> => {
91
+ const { data } = useKnowbaseAdminChatHistoryRetrieve(id, apiKnowbase);
92
+ return data;
93
+ };
94
+
95
+ // Create chat
96
+ const createChat = async (data: ChatResponseRequest): Promise<ChatResponse> => {
97
+ const result = await createChatMutation(data, apiKnowbase);
98
+ await refreshChats();
99
+ return result as ChatResponse;
100
+ };
101
+
102
+ // Update chat
103
+ const updateChat = async (id: string, data: ChatResponseRequest): Promise<ChatResponse> => {
104
+ const result = await updateChatMutation(id, data, apiKnowbase);
105
+ await refreshChats();
106
+ return result as ChatResponse;
107
+ };
108
+
109
+ // Partial update chat
110
+ const partialUpdateChat = async (
111
+ id: string,
112
+ data: PatchedChatResponseRequest
113
+ ): Promise<ChatResponse> => {
114
+ const result = await partialUpdateChatMutation(id, data, apiKnowbase);
115
+ await refreshChats();
116
+ return result as ChatResponse;
117
+ };
118
+
119
+ // Delete chat
120
+ const deleteChat = async (id: string): Promise<void> => {
121
+ await deleteChatMutation(id, apiKnowbase);
122
+ await refreshChats();
123
+ };
124
+
125
+ // Send RAG query
126
+ const sendQuery = async (data: ChatQueryRequest): Promise<ChatResponse> => {
127
+ const result = await sendQueryMutation(data, apiKnowbase);
128
+ await refreshChats();
129
+ return result as ChatResponse;
130
+ };
131
+
132
+ const value: KnowbaseChatContextValue = {
133
+ chats,
134
+ isLoadingChats,
135
+ chatsError,
136
+ refreshChats,
137
+ getChat,
138
+ getChatHistory,
139
+ createChat,
140
+ updateChat,
141
+ partialUpdateChat,
142
+ deleteChat,
143
+ sendQuery,
144
+ };
145
+
146
+ return <KnowbaseChatContext.Provider value={value}>{children}</KnowbaseChatContext.Provider>;
147
+ }
148
+
149
+ // ─────────────────────────────────────────────────────────────────────────
150
+ // Hook
151
+ // ─────────────────────────────────────────────────────────────────────────
152
+
153
+ export function useKnowbaseChatContext(): KnowbaseChatContextValue {
154
+ const context = useContext(KnowbaseChatContext);
155
+ if (!context) {
156
+ throw new Error('useKnowbaseChatContext must be used within KnowbaseChatProvider');
157
+ }
158
+ return context;
159
+ }
160
+
161
+ // ─────────────────────────────────────────────────────────────────────────
162
+ // Re-export types for external use
163
+ // ─────────────────────────────────────────────────────────────────────────
164
+
165
+ export type {
166
+ PaginatedChatResponseList,
167
+ ChatResponse,
168
+ ChatResponseRequest,
169
+ PatchedChatResponseRequest,
170
+ ChatHistory,
171
+ ChatQueryRequest,
172
+ } from './types';
173
+
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Knowbase Documents Context
3
+ * Context for managing documents and archives
4
+ */
5
+
6
+ 'use client';
7
+
8
+ import React, { createContext, useContext, type ReactNode } from 'react';
9
+
10
+ import { apiKnowbase } from '../../api';
11
+ import {
12
+ useKnowbaseAdminDocumentsList,
13
+ useKnowbaseAdminDocumentsRetrieve,
14
+ useCreateKnowbaseAdminDocumentsCreate,
15
+ useUpdateKnowbaseAdminDocumentsUpdate,
16
+ usePartialUpdateKnowbaseAdminDocumentsPartialUpdate,
17
+ useDeleteKnowbaseAdminDocumentsDestroy,
18
+ useCreateKnowbaseAdminDocumentsReprocessCreate,
19
+ useKnowbaseAdminDocumentsStatusRetrieve,
20
+ useKnowbaseAdminDocumentsStatsRetrieve,
21
+ useKnowbaseSystemArchivesList,
22
+ useKnowbaseSystemArchivesRetrieve,
23
+ useCreateKnowbaseSystemArchivesCreate,
24
+ useUpdateKnowbaseSystemArchivesUpdate,
25
+ usePartialUpdateKnowbaseSystemArchivesPartialUpdate,
26
+ useDeleteKnowbaseSystemArchivesDestroy,
27
+ useKnowbaseSystemArchivesStatisticsRetrieve,
28
+ } from '../../api/generated/ext_knowbase/_utils/hooks';
29
+ import type {
30
+ PaginatedDocumentList,
31
+ Document,
32
+ DocumentCreateRequest,
33
+ DocumentRequest,
34
+ PatchedDocumentRequest,
35
+ DocumentProcessingStatus,
36
+ DocumentStats,
37
+ PaginatedDocumentArchiveListList,
38
+ DocumentArchive,
39
+ DocumentArchiveDetail,
40
+ PatchedDocumentArchiveRequest,
41
+ ArchiveProcessingResult,
42
+ ArchiveStatistics,
43
+ } from './types';
44
+
45
+ // ─────────────────────────────────────────────────────────────────────────
46
+ // Context Type
47
+ // ─────────────────────────────────────────────────────────────────────────
48
+
49
+ export interface KnowbaseDocumentsContextValue {
50
+ // Documents list
51
+ documents: PaginatedDocumentList | undefined;
52
+ isLoadingDocuments: boolean;
53
+ documentsError: Error | undefined;
54
+ refreshDocuments: () => Promise<void>;
55
+
56
+ // Document operations
57
+ getDocument: (id: string) => Promise<Document | undefined>;
58
+ getDocumentStatus: (id: string) => Promise<DocumentProcessingStatus | undefined>;
59
+ getDocumentStats: () => Promise<DocumentStats | undefined>;
60
+ createDocument: (data: DocumentCreateRequest) => Promise<Document>;
61
+ updateDocument: (id: string, data: DocumentRequest) => Promise<Document>;
62
+ partialUpdateDocument: (id: string, data: PatchedDocumentRequest) => Promise<Document>;
63
+ deleteDocument: (id: string) => Promise<void>;
64
+ reprocessDocument: (id: string, data: DocumentRequest) => Promise<Document>;
65
+
66
+ // Archives list
67
+ archives: PaginatedDocumentArchiveListList | undefined;
68
+ isLoadingArchives: boolean;
69
+ archivesError: Error | undefined;
70
+ refreshArchives: () => Promise<void>;
71
+
72
+ // Archive operations
73
+ getArchive: (id: string) => Promise<DocumentArchiveDetail | undefined>;
74
+ getArchiveStatistics: () => Promise<ArchiveStatistics | undefined>;
75
+ createArchive: (data: FormData) => Promise<ArchiveProcessingResult>;
76
+ updateArchive: (
77
+ id: string,
78
+ title: string,
79
+ archive_file: File | Blob,
80
+ description?: string,
81
+ is_public?: boolean
82
+ ) => Promise<DocumentArchive>;
83
+ partialUpdateArchive: (id: string, data: PatchedDocumentArchiveRequest) => Promise<DocumentArchive>;
84
+ deleteArchive: (id: string) => Promise<void>;
85
+ }
86
+
87
+ // ─────────────────────────────────────────────────────────────────────────
88
+ // Context
89
+ // ─────────────────────────────────────────────────────────────────────────
90
+
91
+ const KnowbaseDocumentsContext = createContext<KnowbaseDocumentsContextValue | undefined>(
92
+ undefined
93
+ );
94
+
95
+ // ─────────────────────────────────────────────────────────────────────────
96
+ // Provider
97
+ // ─────────────────────────────────────────────────────────────────────────
98
+
99
+ export function KnowbaseDocumentsProvider({ children }: { children: ReactNode }) {
100
+ // Documents list (first page only for count)
101
+ const {
102
+ data: documents,
103
+ error: documentsError,
104
+ isLoading: isLoadingDocuments,
105
+ mutate: mutateDocuments,
106
+ } = useKnowbaseAdminDocumentsList({ page: 1, page_size: 1 }, apiKnowbase);
107
+
108
+ const refreshDocuments = async () => {
109
+ await mutateDocuments();
110
+ };
111
+
112
+ // Archives list (first page only for count)
113
+ const {
114
+ data: archives,
115
+ error: archivesError,
116
+ isLoading: isLoadingArchives,
117
+ mutate: mutateArchives,
118
+ } = useKnowbaseSystemArchivesList({ page: 1, page_size: 1 }, apiKnowbase);
119
+
120
+ const refreshArchives = async () => {
121
+ await mutateArchives();
122
+ };
123
+
124
+ // Document mutations
125
+ const createDocumentMutation = useCreateKnowbaseAdminDocumentsCreate();
126
+ const updateDocumentMutation = useUpdateKnowbaseAdminDocumentsUpdate();
127
+ const partialUpdateDocumentMutation = usePartialUpdateKnowbaseAdminDocumentsPartialUpdate();
128
+ const deleteDocumentMutation = useDeleteKnowbaseAdminDocumentsDestroy();
129
+ const reprocessDocumentMutation = useCreateKnowbaseAdminDocumentsReprocessCreate();
130
+
131
+ // Archive mutations
132
+ const createArchiveMutation = useCreateKnowbaseSystemArchivesCreate();
133
+ const updateArchiveMutation = useUpdateKnowbaseSystemArchivesUpdate();
134
+ const partialUpdateArchiveMutation = usePartialUpdateKnowbaseSystemArchivesPartialUpdate();
135
+ const deleteArchiveMutation = useDeleteKnowbaseSystemArchivesDestroy();
136
+
137
+ // Get single document
138
+ const getDocument = async (id: string): Promise<Document | undefined> => {
139
+ const { data } = useKnowbaseAdminDocumentsRetrieve(id, apiKnowbase);
140
+ return data;
141
+ };
142
+
143
+ // Get document status
144
+ const getDocumentStatus = async (id: string): Promise<DocumentProcessingStatus | undefined> => {
145
+ const { data } = useKnowbaseAdminDocumentsStatusRetrieve(id, apiKnowbase);
146
+ return data;
147
+ };
148
+
149
+ // Get document stats
150
+ const getDocumentStats = async (): Promise<DocumentStats | undefined> => {
151
+ const { data } = useKnowbaseAdminDocumentsStatsRetrieve(apiKnowbase);
152
+ return data;
153
+ };
154
+
155
+ // Create document
156
+ const createDocument = async (data: DocumentCreateRequest): Promise<Document> => {
157
+ const result = await createDocumentMutation(data, apiKnowbase);
158
+ await refreshDocuments();
159
+ return result as Document;
160
+ };
161
+
162
+ // Update document
163
+ const updateDocument = async (id: string, data: DocumentRequest): Promise<Document> => {
164
+ const result = await updateDocumentMutation(id, data, apiKnowbase);
165
+ await refreshDocuments();
166
+ return result as Document;
167
+ };
168
+
169
+ // Partial update document
170
+ const partialUpdateDocument = async (
171
+ id: string,
172
+ data: PatchedDocumentRequest
173
+ ): Promise<Document> => {
174
+ const result = await partialUpdateDocumentMutation(id, data, apiKnowbase);
175
+ await refreshDocuments();
176
+ return result as Document;
177
+ };
178
+
179
+ // Delete document
180
+ const deleteDocument = async (id: string): Promise<void> => {
181
+ await deleteDocumentMutation(id, apiKnowbase);
182
+ await refreshDocuments();
183
+ };
184
+
185
+ // Reprocess document
186
+ const reprocessDocument = async (id: string, data: DocumentRequest): Promise<Document> => {
187
+ const result = await reprocessDocumentMutation(id, data, apiKnowbase);
188
+ await refreshDocuments();
189
+ return result as Document;
190
+ };
191
+
192
+ // Get single archive
193
+ const getArchive = async (id: string): Promise<DocumentArchiveDetail | undefined> => {
194
+ const { data } = useKnowbaseSystemArchivesRetrieve(id, apiKnowbase);
195
+ return data as DocumentArchiveDetail | undefined;
196
+ };
197
+
198
+ // Get archive statistics
199
+ const getArchiveStatistics = async (): Promise<ArchiveStatistics | undefined> => {
200
+ const { data } = useKnowbaseSystemArchivesStatisticsRetrieve(apiKnowbase);
201
+ return data;
202
+ };
203
+
204
+ // Create archive
205
+ const createArchive = async (data: FormData): Promise<ArchiveProcessingResult> => {
206
+ const result = await createArchiveMutation(data, apiKnowbase);
207
+ await refreshArchives();
208
+ return result as unknown as ArchiveProcessingResult;
209
+ };
210
+
211
+ // Update archive
212
+ const updateArchive = async (
213
+ id: string,
214
+ title: string,
215
+ archive_file: File | Blob,
216
+ description?: string,
217
+ is_public?: boolean
218
+ ): Promise<DocumentArchive> => {
219
+ // Note: The hook expects DocumentArchiveRequest, but the client method has different signature
220
+ // This is a type mismatch in the generated code
221
+ const data = { title, archive_file, description, is_public } as any;
222
+ const result = await updateArchiveMutation(id, data, apiKnowbase);
223
+ await refreshArchives();
224
+ return result as unknown as DocumentArchive;
225
+ };
226
+
227
+ // Partial update archive
228
+ const partialUpdateArchive = async (
229
+ id: string,
230
+ data: PatchedDocumentArchiveRequest
231
+ ): Promise<DocumentArchive> => {
232
+ const result = await partialUpdateArchiveMutation(id, data, apiKnowbase);
233
+ await refreshArchives();
234
+ return result as unknown as DocumentArchive;
235
+ };
236
+
237
+ // Delete archive
238
+ const deleteArchive = async (id: string): Promise<void> => {
239
+ await deleteArchiveMutation(id, apiKnowbase);
240
+ await refreshArchives();
241
+ };
242
+
243
+ const value: KnowbaseDocumentsContextValue = {
244
+ documents,
245
+ isLoadingDocuments,
246
+ documentsError,
247
+ refreshDocuments,
248
+ getDocument,
249
+ getDocumentStatus,
250
+ getDocumentStats,
251
+ createDocument,
252
+ updateDocument,
253
+ partialUpdateDocument,
254
+ deleteDocument,
255
+ reprocessDocument,
256
+ archives: archives as PaginatedDocumentArchiveListList | undefined,
257
+ isLoadingArchives,
258
+ archivesError,
259
+ refreshArchives,
260
+ getArchive,
261
+ getArchiveStatistics,
262
+ createArchive,
263
+ updateArchive,
264
+ partialUpdateArchive,
265
+ deleteArchive,
266
+ };
267
+
268
+ return (
269
+ <KnowbaseDocumentsContext.Provider value={value}>
270
+ {children}
271
+ </KnowbaseDocumentsContext.Provider>
272
+ );
273
+ }
274
+
275
+ // ─────────────────────────────────────────────────────────────────────────
276
+ // Hook
277
+ // ─────────────────────────────────────────────────────────────────────────
278
+
279
+ export function useKnowbaseDocumentsContext(): KnowbaseDocumentsContextValue {
280
+ const context = useContext(KnowbaseDocumentsContext);
281
+ if (!context) {
282
+ throw new Error('useKnowbaseDocumentsContext must be used within KnowbaseDocumentsProvider');
283
+ }
284
+ return context;
285
+ }
286
+
287
+ // ─────────────────────────────────────────────────────────────────────────
288
+ // Re-export types for external use
289
+ // ─────────────────────────────────────────────────────────────────────────
290
+
291
+ export type {
292
+ PaginatedDocumentList,
293
+ Document,
294
+ DocumentCreateRequest,
295
+ DocumentRequest,
296
+ PatchedDocumentRequest,
297
+ DocumentProcessingStatus,
298
+ DocumentStats,
299
+ PaginatedDocumentArchiveListList,
300
+ DocumentArchive,
301
+ DocumentArchiveDetail,
302
+ PatchedDocumentArchiveRequest,
303
+ ArchiveProcessingResult,
304
+ ArchiveStatistics,
305
+ } from './types';
306
+
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Main Knowbase Provider
3
+ *
4
+ * Wraps all knowbase contexts with ExtensionProvider for proper registration
5
+ */
6
+
7
+ 'use client';
8
+
9
+ import type { ReactNode } from 'react';
10
+ import { ExtensionProvider } from '@djangocfg/ext-base/hooks';
11
+ import { extensionConfig } from '../../config';
12
+ import { KnowbaseChatProvider } from './ChatContext';
13
+ import { KnowbaseDocumentsProvider } from './DocumentsContext';
14
+ import { KnowbaseSessionsProvider } from './SessionsContext';
15
+
16
+ interface KnowbaseProviderProps {
17
+ children: ReactNode;
18
+ }
19
+
20
+ /**
21
+ * Main provider for Knowledge Base extension
22
+ *
23
+ * Provides all knowbase contexts:
24
+ * - Chat context (RAG-powered chat)
25
+ * - Documents context (document management)
26
+ * - Sessions context (chat sessions)
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <KnowbaseProvider>
31
+ * <YourApp />
32
+ * </KnowbaseProvider>
33
+ * ```
34
+ */
35
+ export function KnowbaseProvider({ children }: KnowbaseProviderProps) {
36
+ return (
37
+ <ExtensionProvider metadata={extensionConfig}>
38
+ <KnowbaseDocumentsProvider>
39
+ <KnowbaseSessionsProvider>
40
+ <KnowbaseChatProvider>
41
+ {children}
42
+ </KnowbaseChatProvider>
43
+ </KnowbaseSessionsProvider>
44
+ </KnowbaseDocumentsProvider>
45
+ </ExtensionProvider>
46
+ );
47
+ }