cckb 0.1.6 → 0.1.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/bin/cckb.js CHANGED
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  discover,
4
4
  install
5
- } from "../chunk-CGTH2E5W.js";
6
- import "../chunk-FEXOQA6H.js";
7
- import "../chunk-D753AA36.js";
8
- import "../chunk-V6LRQYKA.js";
5
+ } from "../chunk-JTHQRYKF.js";
6
+ import "../chunk-AJ2AVV5V.js";
7
+ import "../chunk-NEHPNFRM.js";
8
+ import "../chunk-I4GLPRZ2.js";
9
9
 
10
10
  // src/bin/cckb.ts
11
11
  var args = process.argv.slice(2);
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  IndexManager
3
- } from "./chunk-D753AA36.js";
3
+ } from "./chunk-NEHPNFRM.js";
4
4
  import {
5
5
  appendToFile,
6
6
  ensureDir,
7
7
  fileExists,
8
8
  readTextFile,
9
9
  writeTextFile
10
- } from "./chunk-V6LRQYKA.js";
10
+ } from "./chunk-I4GLPRZ2.js";
11
11
 
12
12
  // src/core/entity-detector.ts
13
13
  var EntityDetector = class {
@@ -355,4 +355,4 @@ export {
355
355
  spawnClaudeAgent,
356
356
  isClaudeAvailable
357
357
  };
358
- //# sourceMappingURL=chunk-FEXOQA6H.js.map
358
+ //# sourceMappingURL=chunk-AJ2AVV5V.js.map
@@ -13,7 +13,7 @@ import {
13
13
  readTextFile,
14
14
  writeJSON,
15
15
  writeTextFile
16
- } from "./chunk-V6LRQYKA.js";
16
+ } from "./chunk-I4GLPRZ2.js";
17
17
 
18
18
  // src/core/conversation-manager.ts
19
19
  import * as path from "path";
@@ -236,4 +236,4 @@ ${entry.content}
236
236
  export {
237
237
  ConversationManager
238
238
  };
239
- //# sourceMappingURL=chunk-2USUMNE7.js.map
239
+ //# sourceMappingURL=chunk-EXDIJANL.js.map
@@ -88,8 +88,8 @@ var DEFAULT_CONFIG = {
88
88
  },
89
89
  discover: {
90
90
  maxFiles: 100,
91
- maxChunkSize: 3e4,
92
- // ~7500 tokens, safer for Claude
91
+ maxChunkSize: 15e3,
92
+ // ~3750 tokens, creates ~10 smaller chunks
93
93
  excludePatterns: [
94
94
  "*.min.js",
95
95
  "*.bundle.js",
@@ -152,4 +152,4 @@ export {
152
152
  getVaultPath,
153
153
  getStatePath
154
154
  };
155
- //# sourceMappingURL=chunk-V6LRQYKA.js.map
155
+ //# sourceMappingURL=chunk-I4GLPRZ2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/file-utils.ts","../src/utils/config.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJSON<T>(filePath: string): Promise<T | null> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\nexport async function writeJSON(\n filePath: string,\n data: unknown,\n pretty = true\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n const content = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);\n await fs.writeFile(filePath, content);\n}\n\nexport async function appendToFile(\n filePath: string,\n content: string\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.appendFile(filePath, content);\n}\n\nexport async function readTextFile(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nexport async function writeTextFile(\n filePath: string,\n content: string\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content);\n}\n\nexport async function copyFile(src: string, dest: string): Promise<void> {\n await ensureDir(path.dirname(dest));\n await fs.copyFile(src, dest);\n}\n\nexport async function listDir(dirPath: string): Promise<string[]> {\n try {\n return await fs.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function getFileSize(filePath: string): Promise<number> {\n try {\n const stats = await fs.stat(filePath);\n return stats.size;\n } catch {\n return 0;\n }\n}\n\nexport function generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `${timestamp}-${random}`;\n}\n\nexport function getCurrentTimestamp(): string {\n return new Date().toISOString();\n}\n","import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface CCKBConfig {\n compaction: {\n trigger: \"session_end\" | \"size\" | \"messages\" | \"manual\";\n sizeThresholdKB: number;\n messageThreshold: number;\n cleanupAfterSummary: \"keep\" | \"archive\" | \"delete\";\n };\n capture: {\n tools: string[];\n maxContentLength: number;\n };\n vault: {\n autoIntegrate: boolean;\n maxDepth: number;\n };\n feedback: {\n enabled: boolean;\n contextDepth: number;\n };\n discover: {\n maxFiles: number;\n maxChunkSize: number;\n excludePatterns: string[];\n priorityPatterns: string[];\n supportedLanguages: string[];\n };\n}\n\nexport const DEFAULT_CONFIG: CCKBConfig = {\n compaction: {\n trigger: \"session_end\",\n sizeThresholdKB: 50,\n messageThreshold: 100,\n cleanupAfterSummary: \"keep\",\n },\n capture: {\n tools: [\"Write\", \"Edit\", \"MultiEdit\", \"Bash\", \"Task\"],\n maxContentLength: 500,\n },\n vault: {\n autoIntegrate: true,\n maxDepth: 5,\n },\n feedback: {\n enabled: true,\n contextDepth: 2,\n },\n discover: {\n maxFiles: 100,\n maxChunkSize: 15000, // ~3750 tokens, creates ~10 smaller chunks\n excludePatterns: [\n \"*.min.js\",\n \"*.bundle.js\",\n \"*.map\",\n \"coverage/**\",\n \".next/**\",\n \"build/**\",\n \"dist/**\",\n ],\n priorityPatterns: [\n \"**/index.{ts,js,tsx,jsx}\",\n \"**/main.{ts,js,py,go,rs}\",\n \"**/app.{ts,js,py}\",\n \"**/models/**\",\n \"**/entities/**\",\n \"**/services/**\",\n ],\n supportedLanguages: [\"typescript\", \"javascript\", \"python\", \"go\", \"rust\"],\n },\n};\n\nexport async function loadConfig(projectPath: string): Promise<CCKBConfig> {\n const configPath = path.join(\n projectPath,\n \"cc-knowledge-base\",\n \".cckb-config.json\"\n );\n\n try {\n const content = await fs.readFile(configPath, \"utf-8\");\n const userConfig = JSON.parse(content);\n return { ...DEFAULT_CONFIG, ...userConfig };\n } catch {\n return DEFAULT_CONFIG;\n }\n}\n\nexport async function saveConfig(\n projectPath: string,\n config: CCKBConfig\n): Promise<void> {\n const configPath = path.join(\n projectPath,\n \"cc-knowledge-base\",\n \".cckb-config.json\"\n );\n\n await fs.writeFile(configPath, JSON.stringify(config, null, 2));\n}\n\nexport function getKnowledgeBasePath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\");\n}\n\nexport function getConversationsPath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \"conversations\");\n}\n\nexport function getVaultPath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \"vault\");\n}\n\nexport function getStatePath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \".cckb-state\");\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEtB,eAAsB,UAAU,SAAgC;AAC9D,QAAS,SAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAC7C;AAEA,eAAsB,WAAW,UAAoC;AACnE,MAAI;AACF,UAAS,UAAO,QAAQ;AACxB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,SAAY,UAAqC;AACrE,MAAI;AACF,UAAM,UAAU,MAAS,YAAS,UAAU,OAAO;AACnD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,UACpB,UACA,MACA,SAAS,MACM;AACf,QAAM,UAAe,aAAQ,QAAQ,CAAC;AACtC,QAAM,UAAU,SAAS,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI;AAC5E,QAAS,aAAU,UAAU,OAAO;AACtC;AAEA,eAAsB,aACpB,UACA,SACe;AACf,QAAM,UAAe,aAAQ,QAAQ,CAAC;AACtC,QAAS,cAAW,UAAU,OAAO;AACvC;AAEA,eAAsB,aAAa,UAA0C;AAC3E,MAAI;AACF,WAAO,MAAS,YAAS,UAAU,OAAO;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,cACpB,UACA,SACe;AACf,QAAM,UAAe,aAAQ,QAAQ,CAAC;AACtC,QAAS,aAAU,UAAU,OAAO;AACtC;AAOA,eAAsB,QAAQ,SAAoC;AAChE,MAAI;AACF,WAAO,MAAS,WAAQ,OAAO;AAAA,EACjC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAsB,YAAY,UAAmC;AACnE,MAAI;AACF,UAAM,QAAQ,MAAS,QAAK,QAAQ;AACpC,WAAO,MAAM;AAAA,EACf,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAA4B;AAC1C,QAAM,YAAY,KAAK,IAAI,EAAE,SAAS,EAAE;AACxC,QAAM,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AACxD,SAAO,GAAG,SAAS,IAAI,MAAM;AAC/B;AAEO,SAAS,sBAA8B;AAC5C,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;;;ACzFA,YAAYA,SAAQ;AACpB,YAAYC,WAAU;AA8Bf,IAAM,iBAA6B;AAAA,EACxC,YAAY;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,SAAS;AAAA,IACP,OAAO,CAAC,SAAS,QAAQ,aAAa,QAAQ,MAAM;AAAA,IACpD,kBAAkB;AAAA,EACpB;AAAA,EACA,OAAO;AAAA,IACL,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,cAAc;AAAA;AAAA,IACd,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,oBAAoB,CAAC,cAAc,cAAc,UAAU,MAAM,MAAM;AAAA,EACzE;AACF;AAEA,eAAsB,WAAW,aAA0C;AACzE,QAAM,aAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AACF,UAAM,UAAU,MAAS,aAAS,YAAY,OAAO;AACrD,UAAM,aAAa,KAAK,MAAM,OAAO;AACrC,WAAO,EAAE,GAAG,gBAAgB,GAAG,WAAW;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAmBO,SAAS,qBAAqB,aAA6B;AAChE,SAAY,WAAK,aAAa,qBAAqB,eAAe;AACpE;AAEO,SAAS,aAAa,aAA6B;AACxD,SAAY,WAAK,aAAa,qBAAqB,OAAO;AAC5D;AAEO,SAAS,aAAa,aAA6B;AACxD,SAAY,WAAK,aAAa,qBAAqB,aAAa;AAClE;","names":["fs","path"]}
@@ -2,7 +2,7 @@ import {
2
2
  VaultIntegrator,
3
3
  isClaudeAvailable,
4
4
  spawnClaudeAgent
5
- } from "./chunk-FEXOQA6H.js";
5
+ } from "./chunk-AJ2AVV5V.js";
6
6
  import {
7
7
  DEFAULT_CONFIG,
8
8
  ensureDir,
@@ -12,7 +12,7 @@ import {
12
12
  readTextFile,
13
13
  writeJSON,
14
14
  writeTextFile
15
- } from "./chunk-V6LRQYKA.js";
15
+ } from "./chunk-I4GLPRZ2.js";
16
16
 
17
17
  // src/cli/install.ts
18
18
  import * as fs from "fs/promises";
@@ -969,4 +969,4 @@ export {
969
969
  AutoDiscover,
970
970
  discover
971
971
  };
972
- //# sourceMappingURL=chunk-CGTH2E5W.js.map
972
+ //# sourceMappingURL=chunk-JTHQRYKF.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  spawnClaudeAgent
3
- } from "./chunk-FEXOQA6H.js";
3
+ } from "./chunk-AJ2AVV5V.js";
4
4
  import {
5
5
  getConversationsPath,
6
6
  loadConfig,
7
7
  readTextFile,
8
8
  writeTextFile
9
- } from "./chunk-V6LRQYKA.js";
9
+ } from "./chunk-I4GLPRZ2.js";
10
10
 
11
11
  // src/core/compaction-engine.ts
12
12
  import * as path from "path";
@@ -273,4 +273,4 @@ ${content}`);
273
273
  export {
274
274
  CompactionEngine
275
275
  };
276
- //# sourceMappingURL=chunk-C7H3GIXY.js.map
276
+ //# sourceMappingURL=chunk-KZ2I74VT.js.map
@@ -4,7 +4,7 @@ import {
4
4
  listDir,
5
5
  readTextFile,
6
6
  writeTextFile
7
- } from "./chunk-V6LRQYKA.js";
7
+ } from "./chunk-I4GLPRZ2.js";
8
8
 
9
9
  // src/core/index-manager.ts
10
10
  import * as path from "path";
@@ -146,4 +146,4 @@ _Last updated: ${(/* @__PURE__ */ new Date()).toISOString()}_
146
146
  export {
147
147
  IndexManager
148
148
  };
149
- //# sourceMappingURL=chunk-D753AA36.js.map
149
+ //# sourceMappingURL=chunk-NEHPNFRM.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  IndexManager
3
- } from "../chunk-D753AA36.js";
3
+ } from "../chunk-NEHPNFRM.js";
4
4
  import {
5
5
  fileExists,
6
6
  getStatePath,
@@ -8,7 +8,7 @@ import {
8
8
  loadConfig,
9
9
  readJSON,
10
10
  writeJSON
11
- } from "../chunk-V6LRQYKA.js";
11
+ } from "../chunk-I4GLPRZ2.js";
12
12
 
13
13
  // src/hooks/notification.ts
14
14
  import * as path from "path";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ConversationManager
3
- } from "../chunk-2USUMNE7.js";
3
+ } from "../chunk-EXDIJANL.js";
4
4
  import {
5
5
  loadConfig
6
- } from "../chunk-V6LRQYKA.js";
6
+ } from "../chunk-I4GLPRZ2.js";
7
7
 
8
8
  // src/hooks/post-tool-use.ts
9
9
  async function handlePostToolUse() {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ConversationManager
3
- } from "../chunk-2USUMNE7.js";
3
+ } from "../chunk-EXDIJANL.js";
4
4
  import {
5
5
  IndexManager
6
- } from "../chunk-D753AA36.js";
6
+ } from "../chunk-NEHPNFRM.js";
7
7
  import {
8
8
  getVaultPath
9
- } from "../chunk-V6LRQYKA.js";
9
+ } from "../chunk-I4GLPRZ2.js";
10
10
 
11
11
  // src/hooks/session-start.ts
12
12
  async function handleSessionStart() {
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  CompactionEngine
3
- } from "../chunk-C7H3GIXY.js";
3
+ } from "../chunk-KZ2I74VT.js";
4
4
  import {
5
5
  VaultIntegrator
6
- } from "../chunk-FEXOQA6H.js";
6
+ } from "../chunk-AJ2AVV5V.js";
7
7
  import {
8
8
  ConversationManager
9
- } from "../chunk-2USUMNE7.js";
10
- import "../chunk-D753AA36.js";
9
+ } from "../chunk-EXDIJANL.js";
10
+ import "../chunk-NEHPNFRM.js";
11
11
  import {
12
12
  getVaultPath,
13
13
  loadConfig
14
- } from "../chunk-V6LRQYKA.js";
14
+ } from "../chunk-I4GLPRZ2.js";
15
15
 
16
16
  // src/hooks/stop.ts
17
17
  async function handleStop() {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ConversationManager
3
- } from "../chunk-2USUMNE7.js";
4
- import "../chunk-V6LRQYKA.js";
3
+ } from "../chunk-EXDIJANL.js";
4
+ import "../chunk-I4GLPRZ2.js";
5
5
 
6
6
  // src/hooks/user-prompt.ts
7
7
  async function handleUserPrompt() {
package/dist/index.js CHANGED
@@ -4,21 +4,21 @@ import {
4
4
  FileCollector,
5
5
  discover,
6
6
  install
7
- } from "./chunk-CGTH2E5W.js";
7
+ } from "./chunk-JTHQRYKF.js";
8
8
  import {
9
9
  CompactionEngine
10
- } from "./chunk-C7H3GIXY.js";
10
+ } from "./chunk-KZ2I74VT.js";
11
11
  import {
12
12
  EntityDetector,
13
13
  VaultIntegrator
14
- } from "./chunk-FEXOQA6H.js";
14
+ } from "./chunk-AJ2AVV5V.js";
15
15
  import {
16
16
  ConversationManager
17
- } from "./chunk-2USUMNE7.js";
17
+ } from "./chunk-EXDIJANL.js";
18
18
  import {
19
19
  IndexManager
20
- } from "./chunk-D753AA36.js";
21
- import "./chunk-V6LRQYKA.js";
20
+ } from "./chunk-NEHPNFRM.js";
21
+ import "./chunk-I4GLPRZ2.js";
22
22
  export {
23
23
  AutoDiscover,
24
24
  ChunkManager,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cckb",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Claude Code Knowledge Base - Automatic project knowledge capture for Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/file-utils.ts","../src/utils/config.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJSON<T>(filePath: string): Promise<T | null> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\nexport async function writeJSON(\n filePath: string,\n data: unknown,\n pretty = true\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n const content = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);\n await fs.writeFile(filePath, content);\n}\n\nexport async function appendToFile(\n filePath: string,\n content: string\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.appendFile(filePath, content);\n}\n\nexport async function readTextFile(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nexport async function writeTextFile(\n filePath: string,\n content: string\n): Promise<void> {\n await ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content);\n}\n\nexport async function copyFile(src: string, dest: string): Promise<void> {\n await ensureDir(path.dirname(dest));\n await fs.copyFile(src, dest);\n}\n\nexport async function listDir(dirPath: string): Promise<string[]> {\n try {\n return await fs.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function getFileSize(filePath: string): Promise<number> {\n try {\n const stats = await fs.stat(filePath);\n return stats.size;\n } catch {\n return 0;\n }\n}\n\nexport function generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `${timestamp}-${random}`;\n}\n\nexport function getCurrentTimestamp(): string {\n return new Date().toISOString();\n}\n","import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface CCKBConfig {\n compaction: {\n trigger: \"session_end\" | \"size\" | \"messages\" | \"manual\";\n sizeThresholdKB: number;\n messageThreshold: number;\n cleanupAfterSummary: \"keep\" | \"archive\" | \"delete\";\n };\n capture: {\n tools: string[];\n maxContentLength: number;\n };\n vault: {\n autoIntegrate: boolean;\n maxDepth: number;\n };\n feedback: {\n enabled: boolean;\n contextDepth: number;\n };\n discover: {\n maxFiles: number;\n maxChunkSize: number;\n excludePatterns: string[];\n priorityPatterns: string[];\n supportedLanguages: string[];\n };\n}\n\nexport const DEFAULT_CONFIG: CCKBConfig = {\n compaction: {\n trigger: \"session_end\",\n sizeThresholdKB: 50,\n messageThreshold: 100,\n cleanupAfterSummary: \"keep\",\n },\n capture: {\n tools: [\"Write\", \"Edit\", \"MultiEdit\", \"Bash\", \"Task\"],\n maxContentLength: 500,\n },\n vault: {\n autoIntegrate: true,\n maxDepth: 5,\n },\n feedback: {\n enabled: true,\n contextDepth: 2,\n },\n discover: {\n maxFiles: 100,\n maxChunkSize: 30000, // ~7500 tokens, safer for Claude\n excludePatterns: [\n \"*.min.js\",\n \"*.bundle.js\",\n \"*.map\",\n \"coverage/**\",\n \".next/**\",\n \"build/**\",\n \"dist/**\",\n ],\n priorityPatterns: [\n \"**/index.{ts,js,tsx,jsx}\",\n \"**/main.{ts,js,py,go,rs}\",\n \"**/app.{ts,js,py}\",\n \"**/models/**\",\n \"**/entities/**\",\n \"**/services/**\",\n ],\n supportedLanguages: [\"typescript\", \"javascript\", \"python\", \"go\", \"rust\"],\n },\n};\n\nexport async function loadConfig(projectPath: string): Promise<CCKBConfig> {\n const configPath = path.join(\n projectPath,\n \"cc-knowledge-base\",\n \".cckb-config.json\"\n );\n\n try {\n const content = await fs.readFile(configPath, \"utf-8\");\n const userConfig = JSON.parse(content);\n return { ...DEFAULT_CONFIG, ...userConfig };\n } catch {\n return DEFAULT_CONFIG;\n }\n}\n\nexport async function saveConfig(\n projectPath: string,\n config: CCKBConfig\n): Promise<void> {\n const configPath = path.join(\n projectPath,\n \"cc-knowledge-base\",\n \".cckb-config.json\"\n );\n\n await fs.writeFile(configPath, JSON.stringify(config, null, 2));\n}\n\nexport function getKnowledgeBasePath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\");\n}\n\nexport function getConversationsPath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \"conversations\");\n}\n\nexport function getVaultPath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \"vault\");\n}\n\nexport function getStatePath(projectPath: string): string {\n return path.join(projectPath, \"cc-knowledge-base\", \".cckb-state\");\n}\n"],"mappings":"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","names":["fs","path"]}