@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.
Files changed (38) hide show
  1. package/dist/config.cjs +3 -2
  2. package/dist/config.js +3 -2
  3. package/dist/hooks.cjs +143 -140
  4. package/dist/hooks.js +142 -140
  5. package/dist/index.cjs +6 -2
  6. package/dist/index.js +6 -2
  7. package/package.json +9 -8
  8. package/src/api/generated/ext_knowbase/CLAUDE.md +64 -0
  9. package/src/api/generated/ext_knowbase/_utils/fetchers/ext_knowbase__knowbase.ts +1 -0
  10. package/src/api/generated/ext_knowbase/_utils/fetchers/index.ts +1 -0
  11. package/src/api/generated/ext_knowbase/_utils/hooks/ext_knowbase__knowbase.ts +1 -0
  12. package/src/api/generated/ext_knowbase/_utils/hooks/index.ts +1 -0
  13. package/src/api/generated/ext_knowbase/_utils/schemas/index.ts +1 -0
  14. package/src/api/generated/ext_knowbase/api-instance.ts +1 -0
  15. package/src/api/generated/ext_knowbase/enums.ts +1 -0
  16. package/src/api/generated/ext_knowbase/errors.ts +1 -0
  17. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/index.ts +1 -0
  18. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/models.ts +1 -0
  19. package/src/api/generated/ext_knowbase/http.ts +1 -0
  20. package/src/api/generated/ext_knowbase/index.ts +1 -0
  21. package/src/api/generated/ext_knowbase/logger.ts +1 -0
  22. package/src/api/generated/ext_knowbase/retry.ts +1 -0
  23. package/src/api/generated/ext_knowbase/storage.ts +1 -0
  24. package/src/api/generated/ext_knowbase/validation-events.ts +1 -0
  25. package/src/api/index.ts +7 -1
  26. package/src/components/Chat/ChatUIContext.tsx +2 -1
  27. package/src/components/Chat/ChatWidget.tsx +9 -11
  28. package/src/components/Chat/components/MessageInput.tsx +5 -2
  29. package/src/components/Chat/components/MessageList.tsx +15 -8
  30. package/src/components/Chat/components/SessionList.tsx +8 -12
  31. package/src/components/Chat/hooks/useInfiniteSessions.ts +2 -1
  32. package/src/components/Chat/index.tsx +2 -0
  33. package/src/components/Chat/types.ts +3 -1
  34. package/src/config.ts +1 -0
  35. package/src/contexts/knowbase/ChatContext.tsx +6 -9
  36. package/src/contexts/knowbase/DocumentsContext.tsx +11 -17
  37. package/src/contexts/knowbase/KnowbaseProvider.tsx +1 -0
  38. 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 { createPortal } from 'react-dom';
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 { Bot, ExternalLink, User, Loader2, Send, MessageSquare, Clock, Archive, Trash2, List, Plus, X, Minimize2, Maximize2 } from 'lucide-react';
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
- const date = new Date(timestamp);
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: user?.display_username?.charAt(0)?.toUpperCase() || user?.email?.charAt(0)?.toUpperCase() || /* @__PURE__ */ jsx(User, { className: "h-5 w-5" }) })
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 ExtKnowbaseFetchers.getKnowbaseAdminSessionsList(
5370
+ return fetchers_exports.getKnowbaseAdminSessionsList(
5368
5371
  { page, page_size: pageSize },
5369
- apiKnowbase$1
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
- const date = new Date(dateString);
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.4",
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.4",
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.4",
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.16",
63
- "@djangocfg/ext-base": "^1.0.4",
64
- "@djangocfg/ui-nextjs": "^2.1.16",
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.16",
77
- "@djangocfg/ext-base": "^1.0.4",
78
- "@djangocfg/typescript-config": "^2.1.16",
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
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Typed fetchers for Knowbase
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Typed Fetchers - Universal API functions
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  'use client';
2
3
 
3
4
  /**
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  'use client';
2
3
 
3
4
  /**
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Zod Schemas - Runtime validation and type inference
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Global API Instance - Singleton configuration
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Content classification
3
4
  * * `document` - Document
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * API Error Classes
3
4
  *
@@ -1,2 +1,3 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  export * from "./client";
2
3
  export * as Models from "./models";
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  import * as Enums from "../enums";
2
3
 
3
4
  /**
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * HTTP Client Adapter Pattern
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Django CFG API - API Client with JWT Management
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * API Logger with Consola
3
4
  * Beautiful console logging for API requests and responses
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Retry Configuration and Utilities
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Storage adapters for cross-platform token storage.
3
4
  *
@@ -1,3 +1,4 @@
1
+ // Auto-generated by DjangoCFG - see CLAUDE.md
1
2
  /**
2
3
  * Zod Validation Events - Browser CustomEvent integration
3
4
  *
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, useContext, useState, useCallback, type ReactNode } from 'react';
8
+ import React, { createContext, ReactNode, useCallback, useContext, useState } from 'react';
9
+
9
10
  import type { ChatUIState } from './types';
10
11
 
11
12
  // ─────────────────────────────────────────────────────────────────────────