@djangocfg/ext-knowbase 1.0.4 → 1.0.7
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/dist/config.cjs +3 -2
- package/dist/config.js +3 -2
- package/dist/hooks.cjs +143 -140
- package/dist/hooks.js +142 -140
- package/dist/index.cjs +6 -2
- package/dist/index.js +6 -2
- package/package.json +9 -8
- package/src/api/generated/ext_knowbase/CLAUDE.md +64 -0
- package/src/api/generated/ext_knowbase/_utils/fetchers/ext_knowbase__knowbase.ts +1 -0
- package/src/api/generated/ext_knowbase/_utils/fetchers/index.ts +1 -0
- package/src/api/generated/ext_knowbase/_utils/hooks/ext_knowbase__knowbase.ts +1 -0
- package/src/api/generated/ext_knowbase/_utils/hooks/index.ts +1 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/index.ts +1 -0
- package/src/api/generated/ext_knowbase/api-instance.ts +1 -0
- package/src/api/generated/ext_knowbase/enums.ts +1 -0
- package/src/api/generated/ext_knowbase/errors.ts +1 -0
- package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/index.ts +1 -0
- package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/models.ts +1 -0
- package/src/api/generated/ext_knowbase/http.ts +1 -0
- package/src/api/generated/ext_knowbase/index.ts +1 -0
- package/src/api/generated/ext_knowbase/logger.ts +1 -0
- package/src/api/generated/ext_knowbase/retry.ts +1 -0
- package/src/api/generated/ext_knowbase/storage.ts +1 -0
- package/src/api/generated/ext_knowbase/validation-events.ts +1 -0
- package/src/api/index.ts +7 -1
- package/src/components/Chat/ChatUIContext.tsx +2 -1
- package/src/components/Chat/ChatWidget.tsx +9 -11
- package/src/components/Chat/components/MessageInput.tsx +5 -2
- package/src/components/Chat/components/MessageList.tsx +15 -8
- package/src/components/Chat/components/SessionList.tsx +8 -12
- package/src/components/Chat/hooks/useInfiniteSessions.ts +2 -1
- package/src/components/Chat/index.tsx +2 -0
- package/src/components/Chat/types.ts +3 -1
- package/src/config.ts +1 -0
- package/src/contexts/knowbase/ChatContext.tsx +6 -9
- package/src/contexts/knowbase/DocumentsContext.tsx +11 -17
- package/src/contexts/knowbase/KnowbaseProvider.tsx +1 -0
- package/src/contexts/knowbase/SessionsContext.tsx +6 -9
package/dist/hooks.js
CHANGED
|
@@ -2,18 +2,18 @@ import { createConsola, consola } from 'consola';
|
|
|
2
2
|
import pRetry, { AbortError } from 'p-retry';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { createExtensionAPI } from '@djangocfg/ext-base/api';
|
|
5
|
-
import { createExtensionConfig } from '@djangocfg/ext-base';
|
|
6
5
|
import useSWR, { useSWRConfig } from 'swr';
|
|
6
|
+
import { createExtensionConfig } from '@djangocfg/ext-base';
|
|
7
7
|
import '@djangocfg/ext-base/hooks';
|
|
8
8
|
import { createContext, useContext, useState, useCallback, useRef, useEffect } from 'react';
|
|
9
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
|
-
import {
|
|
10
|
+
import { Bot, ExternalLink, User, Loader2, Send, MessageSquare, Clock, Archive, Trash2, List, Plus, X, Minimize2, Maximize2 } from 'lucide-react';
|
|
11
11
|
import { usePathname } from 'next/navigation';
|
|
12
|
+
import { createPortal } from 'react-dom';
|
|
12
13
|
import { ScrollArea, Avatar, Card, CardContent, Badge, AvatarImage, AvatarFallback, Textarea, Button, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, useIsMobile, useLocalStorage, CardHeader } from '@djangocfg/ui-nextjs';
|
|
13
|
-
import
|
|
14
|
+
import moment from 'moment';
|
|
14
15
|
import { useAuth } from '@djangocfg/api/auth';
|
|
15
16
|
import useSWRInfinite from 'swr/infinite';
|
|
16
|
-
import { ExtKnowbaseFetchers, apiKnowbase as apiKnowbase$1 } from '@djangocfg/api';
|
|
17
17
|
|
|
18
18
|
var __defProp = Object.defineProperty;
|
|
19
19
|
var __export = (target, all) => {
|
|
@@ -4315,132 +4315,6 @@ var API = class {
|
|
|
4315
4315
|
return "./schema.json";
|
|
4316
4316
|
}
|
|
4317
4317
|
};
|
|
4318
|
-
var apiKnowbase = createExtensionAPI(API);
|
|
4319
|
-
|
|
4320
|
-
// package.json
|
|
4321
|
-
var package_default = {
|
|
4322
|
-
name: "@djangocfg/ext-knowbase",
|
|
4323
|
-
version: "1.0.4",
|
|
4324
|
-
description: "Knowledge base and chat extension for DjangoCFG",
|
|
4325
|
-
keywords: [
|
|
4326
|
-
"django",
|
|
4327
|
-
"djangocfg",
|
|
4328
|
-
"extension",
|
|
4329
|
-
"knowledge-base",
|
|
4330
|
-
"chat",
|
|
4331
|
-
"documentation",
|
|
4332
|
-
"help",
|
|
4333
|
-
"typescript",
|
|
4334
|
-
"react"
|
|
4335
|
-
],
|
|
4336
|
-
author: {
|
|
4337
|
-
name: "DjangoCFG",
|
|
4338
|
-
url: "https://djangocfg.com"
|
|
4339
|
-
},
|
|
4340
|
-
homepage: "https://hub.djangocfg.com/extensions/djangocfg-ext-knowbase",
|
|
4341
|
-
repository: {
|
|
4342
|
-
type: "git",
|
|
4343
|
-
url: "https://github.com/markolofsen/django-cfg.git",
|
|
4344
|
-
directory: "extensions/knowbase"
|
|
4345
|
-
},
|
|
4346
|
-
bugs: {
|
|
4347
|
-
url: "https://github.com/markolofsen/django-cfg/issues"
|
|
4348
|
-
},
|
|
4349
|
-
license: "MIT",
|
|
4350
|
-
type: "module",
|
|
4351
|
-
main: "./dist/index.cjs",
|
|
4352
|
-
module: "./dist/index.js",
|
|
4353
|
-
types: "./dist/index.d.ts",
|
|
4354
|
-
exports: {
|
|
4355
|
-
".": {
|
|
4356
|
-
types: "./dist/index.d.ts",
|
|
4357
|
-
import: "./dist/index.js",
|
|
4358
|
-
require: "./dist/index.cjs"
|
|
4359
|
-
},
|
|
4360
|
-
"./hooks": {
|
|
4361
|
-
types: "./dist/hooks.d.ts",
|
|
4362
|
-
import: "./dist/hooks.js",
|
|
4363
|
-
require: "./dist/hooks.cjs"
|
|
4364
|
-
},
|
|
4365
|
-
"./config": {
|
|
4366
|
-
types: "./dist/config.d.ts",
|
|
4367
|
-
import: "./dist/config.js",
|
|
4368
|
-
require: "./dist/config.cjs"
|
|
4369
|
-
}
|
|
4370
|
-
},
|
|
4371
|
-
files: [
|
|
4372
|
-
"dist",
|
|
4373
|
-
"src",
|
|
4374
|
-
"preview.png"
|
|
4375
|
-
],
|
|
4376
|
-
scripts: {
|
|
4377
|
-
build: "tsup",
|
|
4378
|
-
dev: "tsup --watch",
|
|
4379
|
-
check: "tsc --noEmit"
|
|
4380
|
-
},
|
|
4381
|
-
peerDependencies: {
|
|
4382
|
-
"@djangocfg/api": "workspace:*",
|
|
4383
|
-
"@djangocfg/ext-base": "workspace:*",
|
|
4384
|
-
"@djangocfg/ui-nextjs": "workspace:*",
|
|
4385
|
-
consola: "^3.4.2",
|
|
4386
|
-
"lucide-react": "^0.545.0",
|
|
4387
|
-
next: "^15.5.7",
|
|
4388
|
-
"p-retry": "^7.0.0",
|
|
4389
|
-
react: "^18 || ^19",
|
|
4390
|
-
"react-dom": "^18 || ^19",
|
|
4391
|
-
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
4392
|
-
swr: "^2.3.7",
|
|
4393
|
-
zod: "^4.1.13"
|
|
4394
|
-
},
|
|
4395
|
-
devDependencies: {
|
|
4396
|
-
"@djangocfg/api": "workspace:*",
|
|
4397
|
-
"@djangocfg/ext-base": "workspace:*",
|
|
4398
|
-
"@djangocfg/typescript-config": "workspace:*",
|
|
4399
|
-
"@types/node": "^24.7.2",
|
|
4400
|
-
"@types/react": "^19.0.0",
|
|
4401
|
-
consola: "^3.4.2",
|
|
4402
|
-
"p-retry": "^7.0.0",
|
|
4403
|
-
swr: "^2.3.7",
|
|
4404
|
-
tsup: "^8.5.0",
|
|
4405
|
-
typescript: "^5.9.3"
|
|
4406
|
-
}
|
|
4407
|
-
};
|
|
4408
|
-
|
|
4409
|
-
// src/config.ts
|
|
4410
|
-
var extensionConfig = createExtensionConfig(package_default, {
|
|
4411
|
-
name: "knowbase",
|
|
4412
|
-
displayName: "Knowledge Base",
|
|
4413
|
-
category: "content",
|
|
4414
|
-
features: [
|
|
4415
|
-
"Article management",
|
|
4416
|
-
"Category organization",
|
|
4417
|
-
"Full-text search",
|
|
4418
|
-
"Markdown support",
|
|
4419
|
-
"Chat interface",
|
|
4420
|
-
"Version control"
|
|
4421
|
-
],
|
|
4422
|
-
minVersion: "2.0.0",
|
|
4423
|
-
examples: [
|
|
4424
|
-
{
|
|
4425
|
-
title: "Knowledge Base Search",
|
|
4426
|
-
description: "Add searchable documentation",
|
|
4427
|
-
code: `import { KnowledgeBase, useArticles } from '@djangocfg/ext-knowbase';
|
|
4428
|
-
|
|
4429
|
-
export default function DocsPage() {
|
|
4430
|
-
const { articles, search } = useArticles();
|
|
4431
|
-
|
|
4432
|
-
return (
|
|
4433
|
-
<KnowledgeBase
|
|
4434
|
-
articles={articles}
|
|
4435
|
-
onSearch={(query) => search(query)}
|
|
4436
|
-
showChat={true}
|
|
4437
|
-
/>
|
|
4438
|
-
);
|
|
4439
|
-
}`,
|
|
4440
|
-
language: "tsx"
|
|
4441
|
-
}
|
|
4442
|
-
]
|
|
4443
|
-
});
|
|
4444
4318
|
function useKnowbaseAdminChatList(params, client) {
|
|
4445
4319
|
return useSWR(
|
|
4446
4320
|
params ? ["cfg-knowbase-admin-chat", params] : "cfg-knowbase-admin-chat",
|
|
@@ -4855,6 +4729,135 @@ function useKnowbaseSystemItemsContentRetrieve(id, client) {
|
|
|
4855
4729
|
() => getKnowbaseSystemItemsContentRetrieve(id, client)
|
|
4856
4730
|
);
|
|
4857
4731
|
}
|
|
4732
|
+
|
|
4733
|
+
// src/api/index.ts
|
|
4734
|
+
var apiKnowbase = createExtensionAPI(API);
|
|
4735
|
+
|
|
4736
|
+
// package.json
|
|
4737
|
+
var package_default = {
|
|
4738
|
+
name: "@djangocfg/ext-knowbase",
|
|
4739
|
+
version: "1.0.6",
|
|
4740
|
+
description: "Knowledge base and chat extension for DjangoCFG",
|
|
4741
|
+
keywords: [
|
|
4742
|
+
"django",
|
|
4743
|
+
"djangocfg",
|
|
4744
|
+
"extension",
|
|
4745
|
+
"knowledge-base",
|
|
4746
|
+
"chat",
|
|
4747
|
+
"documentation",
|
|
4748
|
+
"help",
|
|
4749
|
+
"typescript",
|
|
4750
|
+
"react"
|
|
4751
|
+
],
|
|
4752
|
+
author: {
|
|
4753
|
+
name: "DjangoCFG",
|
|
4754
|
+
url: "https://djangocfg.com"
|
|
4755
|
+
},
|
|
4756
|
+
homepage: "https://hub.djangocfg.com/extensions/djangocfg-ext-knowbase",
|
|
4757
|
+
repository: {
|
|
4758
|
+
type: "git",
|
|
4759
|
+
url: "https://github.com/markolofsen/django-cfg.git",
|
|
4760
|
+
directory: "extensions/knowbase"
|
|
4761
|
+
},
|
|
4762
|
+
bugs: {
|
|
4763
|
+
url: "https://github.com/markolofsen/django-cfg/issues"
|
|
4764
|
+
},
|
|
4765
|
+
license: "MIT",
|
|
4766
|
+
type: "module",
|
|
4767
|
+
main: "./dist/index.cjs",
|
|
4768
|
+
module: "./dist/index.js",
|
|
4769
|
+
types: "./dist/index.d.ts",
|
|
4770
|
+
exports: {
|
|
4771
|
+
".": {
|
|
4772
|
+
types: "./dist/index.d.ts",
|
|
4773
|
+
import: "./dist/index.js",
|
|
4774
|
+
require: "./dist/index.cjs"
|
|
4775
|
+
},
|
|
4776
|
+
"./hooks": {
|
|
4777
|
+
types: "./dist/hooks.d.ts",
|
|
4778
|
+
import: "./dist/hooks.js",
|
|
4779
|
+
require: "./dist/hooks.cjs"
|
|
4780
|
+
},
|
|
4781
|
+
"./config": {
|
|
4782
|
+
types: "./dist/config.d.ts",
|
|
4783
|
+
import: "./dist/config.js",
|
|
4784
|
+
require: "./dist/config.cjs"
|
|
4785
|
+
}
|
|
4786
|
+
},
|
|
4787
|
+
files: [
|
|
4788
|
+
"dist",
|
|
4789
|
+
"src",
|
|
4790
|
+
"preview.png"
|
|
4791
|
+
],
|
|
4792
|
+
scripts: {
|
|
4793
|
+
build: "tsup",
|
|
4794
|
+
dev: "tsup --watch",
|
|
4795
|
+
check: "tsc --noEmit"
|
|
4796
|
+
},
|
|
4797
|
+
peerDependencies: {
|
|
4798
|
+
"@djangocfg/api": "workspace:*",
|
|
4799
|
+
"@djangocfg/ext-base": "workspace:*",
|
|
4800
|
+
"@djangocfg/ui-nextjs": "workspace:*",
|
|
4801
|
+
consola: "^3.4.2",
|
|
4802
|
+
"lucide-react": "^0.545.0",
|
|
4803
|
+
next: "^15.5.7",
|
|
4804
|
+
"p-retry": "^7.0.0",
|
|
4805
|
+
react: "^18 || ^19",
|
|
4806
|
+
"react-dom": "^18 || ^19",
|
|
4807
|
+
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
4808
|
+
swr: "^2.3.7",
|
|
4809
|
+
zod: "^4.1.13",
|
|
4810
|
+
moment: "^2.30.1"
|
|
4811
|
+
},
|
|
4812
|
+
devDependencies: {
|
|
4813
|
+
"@djangocfg/api": "workspace:*",
|
|
4814
|
+
"@djangocfg/ext-base": "workspace:*",
|
|
4815
|
+
"@djangocfg/typescript-config": "workspace:*",
|
|
4816
|
+
"@types/node": "^24.7.2",
|
|
4817
|
+
"@types/react": "^19.0.0",
|
|
4818
|
+
consola: "^3.4.2",
|
|
4819
|
+
"p-retry": "^7.0.0",
|
|
4820
|
+
swr: "^2.3.7",
|
|
4821
|
+
tsup: "^8.5.0",
|
|
4822
|
+
typescript: "^5.9.3"
|
|
4823
|
+
}
|
|
4824
|
+
};
|
|
4825
|
+
|
|
4826
|
+
// src/config.ts
|
|
4827
|
+
var extensionConfig = createExtensionConfig(package_default, {
|
|
4828
|
+
name: "knowbase",
|
|
4829
|
+
displayName: "Knowledge Base",
|
|
4830
|
+
category: "content",
|
|
4831
|
+
features: [
|
|
4832
|
+
"Article management",
|
|
4833
|
+
"Category organization",
|
|
4834
|
+
"Full-text search",
|
|
4835
|
+
"Markdown support",
|
|
4836
|
+
"Chat interface",
|
|
4837
|
+
"Version control"
|
|
4838
|
+
],
|
|
4839
|
+
minVersion: "2.0.0",
|
|
4840
|
+
examples: [
|
|
4841
|
+
{
|
|
4842
|
+
title: "Knowledge Base Search",
|
|
4843
|
+
description: "Add searchable documentation",
|
|
4844
|
+
code: `import { KnowledgeBase, useArticles } from '@djangocfg/ext-knowbase';
|
|
4845
|
+
|
|
4846
|
+
export default function DocsPage() {
|
|
4847
|
+
const { articles, search } = useArticles();
|
|
4848
|
+
|
|
4849
|
+
return (
|
|
4850
|
+
<KnowledgeBase
|
|
4851
|
+
articles={articles}
|
|
4852
|
+
onSearch={(query) => search(query)}
|
|
4853
|
+
showChat={true}
|
|
4854
|
+
/>
|
|
4855
|
+
);
|
|
4856
|
+
}`,
|
|
4857
|
+
language: "tsx"
|
|
4858
|
+
}
|
|
4859
|
+
]
|
|
4860
|
+
});
|
|
4858
4861
|
var KnowbaseChatContext = createContext(void 0);
|
|
4859
4862
|
function KnowbaseChatProvider({ children }) {
|
|
4860
4863
|
const {
|
|
@@ -5179,14 +5182,14 @@ function useChatUI() {
|
|
|
5179
5182
|
}
|
|
5180
5183
|
return context;
|
|
5181
5184
|
}
|
|
5182
|
-
|
|
5183
|
-
// src/components/Chat/types.ts
|
|
5184
|
-
var Enums = enums_exports;
|
|
5185
5185
|
var isDevelopment = process.env.NODE_ENV === "development";
|
|
5186
5186
|
var logger = createConsola({
|
|
5187
5187
|
level: isDevelopment ? 4 : 1
|
|
5188
5188
|
}).withTag("ext-knowbase");
|
|
5189
5189
|
var chatLogger = logger;
|
|
5190
|
+
|
|
5191
|
+
// src/components/Chat/types.ts
|
|
5192
|
+
var Enums = enums_exports;
|
|
5190
5193
|
var MessageList = ({
|
|
5191
5194
|
messages,
|
|
5192
5195
|
isLoading = false,
|
|
@@ -5206,9 +5209,9 @@ var MessageList = ({
|
|
|
5206
5209
|
}
|
|
5207
5210
|
}, [messages, isLoading, autoScroll]);
|
|
5208
5211
|
const formatTimestamp = (timestamp) => {
|
|
5209
|
-
|
|
5210
|
-
return date.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" });
|
|
5212
|
+
return moment.utc(timestamp).local().format("hh:mm A");
|
|
5211
5213
|
};
|
|
5214
|
+
const userInitial = user?.display_username?.charAt(0)?.toUpperCase() || user?.email?.charAt(0)?.toUpperCase() || null;
|
|
5212
5215
|
return /* @__PURE__ */ jsx(ScrollArea, { className: `h-full bg-muted/50 ${className}`, viewportRef: scrollRef, children: /* @__PURE__ */ jsxs("div", { className: "space-y-4 p-4", children: [
|
|
5213
5216
|
messages.length === 0 && !isLoading ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center h-full text-center py-12", children: [
|
|
5214
5217
|
/* @__PURE__ */ jsx(Bot, { className: "h-12 w-12 text-muted-foreground mb-4" }),
|
|
@@ -5255,7 +5258,7 @@ var MessageList = ({
|
|
|
5255
5258
|
),
|
|
5256
5259
|
isUser && /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8 shrink-0", children: [
|
|
5257
5260
|
user?.avatar && /* @__PURE__ */ jsx(AvatarImage, { src: user.avatar, alt: user.display_username || user.email || "User" }),
|
|
5258
|
-
/* @__PURE__ */ jsx(AvatarFallback, { className: "bg-primary/10 text-primary font-semibold", children:
|
|
5261
|
+
/* @__PURE__ */ jsx(AvatarFallback, { className: "bg-primary/10 text-primary font-semibold", children: userInitial || /* @__PURE__ */ jsx(User, { className: "h-5 w-5" }) })
|
|
5259
5262
|
] })
|
|
5260
5263
|
]
|
|
5261
5264
|
},
|
|
@@ -5364,9 +5367,9 @@ function useInfiniteSessions() {
|
|
|
5364
5367
|
return ["cfg-knowbase-admin-sessions-infinite", pageIndex + 1, PAGE_SIZE];
|
|
5365
5368
|
};
|
|
5366
5369
|
const fetcher = async ([, page, pageSize]) => {
|
|
5367
|
-
return
|
|
5370
|
+
return fetchers_exports.getKnowbaseAdminSessionsList(
|
|
5368
5371
|
{ page, page_size: pageSize },
|
|
5369
|
-
apiKnowbase
|
|
5372
|
+
apiKnowbase
|
|
5370
5373
|
);
|
|
5371
5374
|
};
|
|
5372
5375
|
const {
|
|
@@ -5436,8 +5439,7 @@ var SessionList = ({
|
|
|
5436
5439
|
return () => scrollContainer.removeEventListener("scroll", handleScroll);
|
|
5437
5440
|
}, [handleScroll]);
|
|
5438
5441
|
const formatDate = (dateString) => {
|
|
5439
|
-
|
|
5440
|
-
return date.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
5442
|
+
return moment.utc(dateString).local().format("MMM D");
|
|
5441
5443
|
};
|
|
5442
5444
|
return /* @__PURE__ */ jsx(Sheet, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(SheetContent, { side: "left", className: `w-[400px] sm:w-[540px] ${className}`, children: [
|
|
5443
5445
|
/* @__PURE__ */ jsxs(SheetHeader, { children: [
|
package/dist/index.cjs
CHANGED
|
@@ -4,6 +4,7 @@ var consola = require('consola');
|
|
|
4
4
|
var pRetry = require('p-retry');
|
|
5
5
|
var zod = require('zod');
|
|
6
6
|
var api = require('@djangocfg/ext-base/api');
|
|
7
|
+
require('swr');
|
|
7
8
|
var extBase = require('@djangocfg/ext-base');
|
|
8
9
|
|
|
9
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -4310,12 +4311,14 @@ var API = class {
|
|
|
4310
4311
|
return "./schema.json";
|
|
4311
4312
|
}
|
|
4312
4313
|
};
|
|
4314
|
+
|
|
4315
|
+
// src/api/index.ts
|
|
4313
4316
|
var apiKnowbase = api.createExtensionAPI(API);
|
|
4314
4317
|
|
|
4315
4318
|
// package.json
|
|
4316
4319
|
var package_default = {
|
|
4317
4320
|
name: "@djangocfg/ext-knowbase",
|
|
4318
|
-
version: "1.0.
|
|
4321
|
+
version: "1.0.6",
|
|
4319
4322
|
description: "Knowledge base and chat extension for DjangoCFG",
|
|
4320
4323
|
keywords: [
|
|
4321
4324
|
"django",
|
|
@@ -4385,7 +4388,8 @@ var package_default = {
|
|
|
4385
4388
|
"react-dom": "^18 || ^19",
|
|
4386
4389
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
4387
4390
|
swr: "^2.3.7",
|
|
4388
|
-
zod: "^4.1.13"
|
|
4391
|
+
zod: "^4.1.13",
|
|
4392
|
+
moment: "^2.30.1"
|
|
4389
4393
|
},
|
|
4390
4394
|
devDependencies: {
|
|
4391
4395
|
"@djangocfg/api": "workspace:*",
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { createConsola, consola } from 'consola';
|
|
|
2
2
|
import pRetry, { AbortError } from 'p-retry';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { createExtensionAPI } from '@djangocfg/ext-base/api';
|
|
5
|
+
import 'swr';
|
|
5
6
|
import { createExtensionConfig } from '@djangocfg/ext-base';
|
|
6
7
|
|
|
7
8
|
var __defProp = Object.defineProperty;
|
|
@@ -4304,12 +4305,14 @@ var API = class {
|
|
|
4304
4305
|
return "./schema.json";
|
|
4305
4306
|
}
|
|
4306
4307
|
};
|
|
4308
|
+
|
|
4309
|
+
// src/api/index.ts
|
|
4307
4310
|
var apiKnowbase = createExtensionAPI(API);
|
|
4308
4311
|
|
|
4309
4312
|
// package.json
|
|
4310
4313
|
var package_default = {
|
|
4311
4314
|
name: "@djangocfg/ext-knowbase",
|
|
4312
|
-
version: "1.0.
|
|
4315
|
+
version: "1.0.6",
|
|
4313
4316
|
description: "Knowledge base and chat extension for DjangoCFG",
|
|
4314
4317
|
keywords: [
|
|
4315
4318
|
"django",
|
|
@@ -4379,7 +4382,8 @@ var package_default = {
|
|
|
4379
4382
|
"react-dom": "^18 || ^19",
|
|
4380
4383
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
4381
4384
|
swr: "^2.3.7",
|
|
4382
|
-
zod: "^4.1.13"
|
|
4385
|
+
zod: "^4.1.13",
|
|
4386
|
+
moment: "^2.30.1"
|
|
4383
4387
|
},
|
|
4384
4388
|
devDependencies: {
|
|
4385
4389
|
"@djangocfg/api": "workspace:*",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@djangocfg/ext-knowbase",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Knowledge base and chat extension for DjangoCFG",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"django",
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
"check": "tsc --noEmit"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
-
"@djangocfg/api": "^2.1.
|
|
63
|
-
"@djangocfg/ext-base": "^1.0.
|
|
64
|
-
"@djangocfg/ui-nextjs": "^2.1.
|
|
62
|
+
"@djangocfg/api": "^2.1.43",
|
|
63
|
+
"@djangocfg/ext-base": "^1.0.7",
|
|
64
|
+
"@djangocfg/ui-nextjs": "^2.1.43",
|
|
65
65
|
"consola": "^3.4.2",
|
|
66
66
|
"lucide-react": "^0.545.0",
|
|
67
67
|
"next": "^15.5.7",
|
|
@@ -70,12 +70,13 @@
|
|
|
70
70
|
"react-dom": "^18 || ^19",
|
|
71
71
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
72
72
|
"swr": "^2.3.7",
|
|
73
|
-
"zod": "^4.1.13"
|
|
73
|
+
"zod": "^4.1.13",
|
|
74
|
+
"moment": "^2.30.1"
|
|
74
75
|
},
|
|
75
76
|
"devDependencies": {
|
|
76
|
-
"@djangocfg/api": "^2.1.
|
|
77
|
-
"@djangocfg/ext-base": "^1.0.
|
|
78
|
-
"@djangocfg/typescript-config": "^2.1.
|
|
77
|
+
"@djangocfg/api": "^2.1.43",
|
|
78
|
+
"@djangocfg/ext-base": "^1.0.7",
|
|
79
|
+
"@djangocfg/typescript-config": "^2.1.43",
|
|
79
80
|
"@types/node": "^24.7.2",
|
|
80
81
|
"@types/react": "^19.0.0",
|
|
81
82
|
"consola": "^3.4.2",
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Django CFG API - Typescript Client
|
|
2
|
+
|
|
3
|
+
Auto-generated. **Do not edit manually.**
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
python manage.py generate_client --groups ext_knowbase --typescript
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Stats
|
|
10
|
+
|
|
11
|
+
| | |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Version | 3.0.3 |
|
|
14
|
+
| Operations | 57 |
|
|
15
|
+
| Schemas | 52 |
|
|
16
|
+
|
|
17
|
+
## Resources
|
|
18
|
+
|
|
19
|
+
- **knowbase** (57 ops)
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { APIClient } from './';
|
|
25
|
+
|
|
26
|
+
const client = new APIClient({ baseUrl, token });
|
|
27
|
+
|
|
28
|
+
await client.knowbase.list();
|
|
29
|
+
await client.knowbase.retrieve({ id: 1 });
|
|
30
|
+
await client.knowbase.create({ ... });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**SWR Hooks:**
|
|
34
|
+
```typescript
|
|
35
|
+
import { useKnowbaseList } from './hooks';
|
|
36
|
+
const { data, isLoading } = useKnowbaseList();
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## How It Works
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
DRF ViewSets → drf-spectacular → OpenAPI → IR Parser → Generator → This Client
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Configuration** (`api/config.py`):
|
|
46
|
+
```python
|
|
47
|
+
openapi_client = OpenAPIClientConfig(
|
|
48
|
+
enabled=True,
|
|
49
|
+
groups=[OpenAPIGroupConfig(name="ext_knowbase", apps=["..."])],
|
|
50
|
+
generate_zod_schemas=True, # → schemas.ts
|
|
51
|
+
generate_fetchers=True, # → fetchers.ts
|
|
52
|
+
generate_swr_hooks=True, # → hooks.ts
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Copy to Next.js** (if `nextjs_admin` configured):
|
|
57
|
+
```python
|
|
58
|
+
nextjs_admin = NextJsAdminConfig(
|
|
59
|
+
project_path="../frontend/apps/...",
|
|
60
|
+
api_output_path="app/_lib/api/generated",
|
|
61
|
+
)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
@see https://djangocfg.com/docs/features/api-generation
|
package/src/api/index.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { createExtensionAPI } from '@djangocfg/ext-base/api';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Knowbase Extension API
|
|
3
5
|
*
|
|
4
6
|
* Pre-configured API instance with shared authentication
|
|
5
7
|
*/
|
|
6
8
|
import { API } from './generated/ext_knowbase';
|
|
7
|
-
import { createExtensionAPI } from '@djangocfg/ext-base/api';
|
|
8
9
|
|
|
9
10
|
export const apiKnowbase = createExtensionAPI(API);
|
|
11
|
+
|
|
12
|
+
// Export types, fetchers, and hooks
|
|
13
|
+
export * as ExtKnowbaseTypes from './generated/ext_knowbase/_utils/schemas';
|
|
14
|
+
export * as ExtKnowbaseFetchers from './generated/ext_knowbase/_utils/fetchers';
|
|
15
|
+
export * as ExtKnowbaseHooks from './generated/ext_knowbase/_utils/hooks';
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
'use client';
|
|
7
7
|
|
|
8
|
-
import React, { createContext,
|
|
8
|
+
import React, { createContext, ReactNode, useCallback, useContext, useState } from 'react';
|
|
9
|
+
|
|
9
10
|
import type { ChatUIState } from './types';
|
|
10
11
|
|
|
11
12
|
// ─────────────────────────────────────────────────────────────────────────
|