codevault 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/chunking/file-grouper.d.ts +39 -0
  2. package/dist/chunking/file-grouper.d.ts.map +1 -0
  3. package/dist/chunking/file-grouper.js +164 -0
  4. package/dist/chunking/file-grouper.js.map +1 -0
  5. package/dist/chunking/semantic-chunker.d.ts +37 -0
  6. package/dist/chunking/semantic-chunker.d.ts.map +1 -0
  7. package/dist/chunking/semantic-chunker.js +157 -0
  8. package/dist/chunking/semantic-chunker.js.map +1 -0
  9. package/dist/chunking/token-counter.d.ts +28 -0
  10. package/dist/chunking/token-counter.d.ts.map +1 -0
  11. package/dist/chunking/token-counter.js +207 -0
  12. package/dist/chunking/token-counter.js.map +1 -0
  13. package/dist/cli/commands/ask-cmd.d.ts +3 -0
  14. package/dist/cli/commands/ask-cmd.d.ts.map +1 -0
  15. package/dist/cli/commands/ask-cmd.js +130 -0
  16. package/dist/cli/commands/ask-cmd.js.map +1 -0
  17. package/dist/cli/commands/chat-cmd.d.ts +3 -0
  18. package/dist/cli/commands/chat-cmd.d.ts.map +1 -0
  19. package/dist/cli/commands/chat-cmd.js +194 -0
  20. package/dist/cli/commands/chat-cmd.js.map +1 -0
  21. package/dist/cli/commands/config-cmd.d.ts +3 -0
  22. package/dist/cli/commands/config-cmd.d.ts.map +1 -0
  23. package/dist/cli/commands/config-cmd.js +245 -0
  24. package/dist/cli/commands/config-cmd.js.map +1 -0
  25. package/dist/cli/commands/context.d.ts +3 -0
  26. package/dist/cli/commands/context.d.ts.map +1 -0
  27. package/dist/cli/commands/context.js +98 -0
  28. package/dist/cli/commands/context.js.map +1 -0
  29. package/dist/cli/commands/interactive-config.d.ts +2 -0
  30. package/dist/cli/commands/interactive-config.d.ts.map +1 -0
  31. package/dist/cli/commands/interactive-config.js +274 -0
  32. package/dist/cli/commands/interactive-config.js.map +1 -0
  33. package/dist/cli.d.ts +3 -0
  34. package/dist/cli.d.ts.map +1 -0
  35. package/dist/cli.js +403 -0
  36. package/dist/cli.js.map +1 -0
  37. package/dist/codemap/io.d.ts +5 -0
  38. package/dist/codemap/io.d.ts.map +1 -0
  39. package/dist/codemap/io.js +30 -0
  40. package/dist/codemap/io.js.map +1 -0
  41. package/dist/config/apply-env.d.ts +15 -0
  42. package/dist/config/apply-env.d.ts.map +1 -0
  43. package/dist/config/apply-env.js +91 -0
  44. package/dist/config/apply-env.js.map +1 -0
  45. package/dist/config/constants.d.ts +326 -0
  46. package/dist/config/constants.d.ts.map +1 -0
  47. package/dist/config/constants.js +214 -0
  48. package/dist/config/constants.js.map +1 -0
  49. package/dist/config/loader.d.ts +57 -0
  50. package/dist/config/loader.d.ts.map +1 -0
  51. package/dist/config/loader.js +287 -0
  52. package/dist/config/loader.js.map +1 -0
  53. package/dist/config/types.d.ts +46 -0
  54. package/dist/config/types.d.ts.map +1 -0
  55. package/dist/config/types.js +2 -0
  56. package/dist/config/types.js.map +1 -0
  57. package/dist/context/packs.d.ts +33 -0
  58. package/dist/context/packs.d.ts.map +1 -0
  59. package/dist/context/packs.js +180 -0
  60. package/dist/context/packs.js.map +1 -0
  61. package/dist/core/batch-indexer.d.ts +56 -0
  62. package/dist/core/batch-indexer.d.ts.map +1 -0
  63. package/dist/core/batch-indexer.js +189 -0
  64. package/dist/core/batch-indexer.js.map +1 -0
  65. package/dist/core/indexer.d.ts +3 -0
  66. package/dist/core/indexer.d.ts.map +1 -0
  67. package/dist/core/indexer.js +600 -0
  68. package/dist/core/indexer.js.map +1 -0
  69. package/dist/core/metadata.d.ts +19 -0
  70. package/dist/core/metadata.d.ts.map +1 -0
  71. package/dist/core/metadata.js +161 -0
  72. package/dist/core/metadata.js.map +1 -0
  73. package/dist/core/search.d.ts +7 -0
  74. package/dist/core/search.d.ts.map +1 -0
  75. package/dist/core/search.js +545 -0
  76. package/dist/core/search.js.map +1 -0
  77. package/dist/core/symbol-extractor.d.ts +3 -0
  78. package/dist/core/symbol-extractor.d.ts.map +1 -0
  79. package/dist/core/symbol-extractor.js +78 -0
  80. package/dist/core/symbol-extractor.js.map +1 -0
  81. package/dist/core/types.d.ts +104 -0
  82. package/dist/core/types.d.ts.map +1 -0
  83. package/dist/core/types.js +2 -0
  84. package/dist/core/types.js.map +1 -0
  85. package/dist/database/db.d.ts +102 -0
  86. package/dist/database/db.d.ts.map +1 -0
  87. package/dist/database/db.js +366 -0
  88. package/dist/database/db.js.map +1 -0
  89. package/dist/indexer/merkle.d.ts +13 -0
  90. package/dist/indexer/merkle.d.ts.map +1 -0
  91. package/dist/indexer/merkle.js +86 -0
  92. package/dist/indexer/merkle.js.map +1 -0
  93. package/dist/indexer/update.d.ts +19 -0
  94. package/dist/indexer/update.d.ts.map +1 -0
  95. package/dist/indexer/update.js +40 -0
  96. package/dist/indexer/update.js.map +1 -0
  97. package/dist/indexer/watch.d.ts +21 -0
  98. package/dist/indexer/watch.d.ts.map +1 -0
  99. package/dist/indexer/watch.js +222 -0
  100. package/dist/indexer/watch.js.map +1 -0
  101. package/dist/languages/rules.d.ts +11 -0
  102. package/dist/languages/rules.d.ts.map +1 -0
  103. package/dist/languages/rules.js +371 -0
  104. package/dist/languages/rules.js.map +1 -0
  105. package/dist/languages/tree-sitter-loader.d.ts +27 -0
  106. package/dist/languages/tree-sitter-loader.d.ts.map +1 -0
  107. package/dist/languages/tree-sitter-loader.js +76 -0
  108. package/dist/languages/tree-sitter-loader.js.map +1 -0
  109. package/dist/mcp/schemas.d.ts +166 -0
  110. package/dist/mcp/schemas.d.ts.map +1 -0
  111. package/dist/mcp/schemas.js +159 -0
  112. package/dist/mcp/schemas.js.map +1 -0
  113. package/dist/mcp/tools/ask-codebase.d.ts +85 -0
  114. package/dist/mcp/tools/ask-codebase.d.ts.map +1 -0
  115. package/dist/mcp/tools/ask-codebase.js +125 -0
  116. package/dist/mcp/tools/ask-codebase.js.map +1 -0
  117. package/dist/mcp/tools/use-context-pack.d.ts +57 -0
  118. package/dist/mcp/tools/use-context-pack.d.ts.map +1 -0
  119. package/dist/mcp/tools/use-context-pack.js +91 -0
  120. package/dist/mcp/tools/use-context-pack.js.map +1 -0
  121. package/dist/mcp-server.d.ts +3 -0
  122. package/dist/mcp-server.d.ts.map +1 -0
  123. package/dist/mcp-server.js +511 -0
  124. package/dist/mcp-server.js.map +1 -0
  125. package/dist/providers/base.d.ts +39 -0
  126. package/dist/providers/base.d.ts.map +1 -0
  127. package/dist/providers/base.js +198 -0
  128. package/dist/providers/base.js.map +1 -0
  129. package/dist/providers/chat-llm.d.ts +30 -0
  130. package/dist/providers/chat-llm.d.ts.map +1 -0
  131. package/dist/providers/chat-llm.js +85 -0
  132. package/dist/providers/chat-llm.js.map +1 -0
  133. package/dist/providers/index.d.ts +5 -0
  134. package/dist/providers/index.d.ts.map +1 -0
  135. package/dist/providers/index.js +12 -0
  136. package/dist/providers/index.js.map +1 -0
  137. package/dist/providers/openai.d.ts +14 -0
  138. package/dist/providers/openai.d.ts.map +1 -0
  139. package/dist/providers/openai.js +122 -0
  140. package/dist/providers/openai.js.map +1 -0
  141. package/dist/providers/token-counter.d.ts +2 -0
  142. package/dist/providers/token-counter.d.ts.map +1 -0
  143. package/dist/providers/token-counter.js +18 -0
  144. package/dist/providers/token-counter.js.map +1 -0
  145. package/dist/ranking/api-reranker.d.ts +18 -0
  146. package/dist/ranking/api-reranker.d.ts.map +1 -0
  147. package/dist/ranking/api-reranker.js +134 -0
  148. package/dist/ranking/api-reranker.js.map +1 -0
  149. package/dist/ranking/symbol-boost.d.ts +15 -0
  150. package/dist/ranking/symbol-boost.d.ts.map +1 -0
  151. package/dist/ranking/symbol-boost.js +175 -0
  152. package/dist/ranking/symbol-boost.js.map +1 -0
  153. package/dist/search/bm25.d.ts +17 -0
  154. package/dist/search/bm25.d.ts.map +1 -0
  155. package/dist/search/bm25.js +56 -0
  156. package/dist/search/bm25.js.map +1 -0
  157. package/dist/search/hybrid.d.ts +21 -0
  158. package/dist/search/hybrid.d.ts.map +1 -0
  159. package/dist/search/hybrid.js +50 -0
  160. package/dist/search/hybrid.js.map +1 -0
  161. package/dist/search/scope.d.ts +5 -0
  162. package/dist/search/scope.d.ts.map +1 -0
  163. package/dist/search/scope.js +107 -0
  164. package/dist/search/scope.js.map +1 -0
  165. package/dist/storage/encrypted-chunks.d.ts +40 -0
  166. package/dist/storage/encrypted-chunks.d.ts.map +1 -0
  167. package/dist/storage/encrypted-chunks.js +238 -0
  168. package/dist/storage/encrypted-chunks.js.map +1 -0
  169. package/dist/symbols/extract.d.ts +15 -0
  170. package/dist/symbols/extract.d.ts.map +1 -0
  171. package/dist/symbols/extract.js +208 -0
  172. package/dist/symbols/extract.js.map +1 -0
  173. package/dist/symbols/graph.d.ts +3 -0
  174. package/dist/symbols/graph.d.ts.map +1 -0
  175. package/dist/symbols/graph.js +89 -0
  176. package/dist/symbols/graph.js.map +1 -0
  177. package/dist/synthesis/conversational-synthesizer.d.ts +61 -0
  178. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -0
  179. package/dist/synthesis/conversational-synthesizer.js +286 -0
  180. package/dist/synthesis/conversational-synthesizer.js.map +1 -0
  181. package/dist/synthesis/markdown-formatter.d.ts +13 -0
  182. package/dist/synthesis/markdown-formatter.d.ts.map +1 -0
  183. package/dist/synthesis/markdown-formatter.js +104 -0
  184. package/dist/synthesis/markdown-formatter.js.map +1 -0
  185. package/dist/synthesis/prompt-builder.d.ts +21 -0
  186. package/dist/synthesis/prompt-builder.d.ts.map +1 -0
  187. package/dist/synthesis/prompt-builder.js +129 -0
  188. package/dist/synthesis/prompt-builder.js.map +1 -0
  189. package/dist/synthesis/synthesizer.d.ts +30 -0
  190. package/dist/synthesis/synthesizer.d.ts.map +1 -0
  191. package/dist/synthesis/synthesizer.js +210 -0
  192. package/dist/synthesis/synthesizer.js.map +1 -0
  193. package/dist/types/ast.d.ts +3 -0
  194. package/dist/types/ast.d.ts.map +1 -0
  195. package/dist/types/ast.js +2 -0
  196. package/dist/types/ast.js.map +1 -0
  197. package/dist/types/codemap.d.ts +58 -0
  198. package/dist/types/codemap.d.ts.map +1 -0
  199. package/dist/types/codemap.js +224 -0
  200. package/dist/types/codemap.js.map +1 -0
  201. package/dist/types/context-pack.d.ts +47 -0
  202. package/dist/types/context-pack.d.ts.map +1 -0
  203. package/dist/types/context-pack.js +44 -0
  204. package/dist/types/context-pack.js.map +1 -0
  205. package/dist/types/search.d.ts +15 -0
  206. package/dist/types/search.d.ts.map +1 -0
  207. package/dist/types/search.js +11 -0
  208. package/dist/types/search.js.map +1 -0
  209. package/dist/utils/cli-ui.d.ts +44 -0
  210. package/dist/utils/cli-ui.d.ts.map +1 -0
  211. package/dist/utils/cli-ui.js +139 -0
  212. package/dist/utils/cli-ui.js.map +1 -0
  213. package/dist/utils/indexer-with-progress.d.ts +10 -0
  214. package/dist/utils/indexer-with-progress.d.ts.map +1 -0
  215. package/dist/utils/indexer-with-progress.js +43 -0
  216. package/dist/utils/indexer-with-progress.js.map +1 -0
  217. package/dist/utils/logger.d.ts +55 -0
  218. package/dist/utils/logger.d.ts.map +1 -0
  219. package/dist/utils/logger.js +121 -0
  220. package/dist/utils/logger.js.map +1 -0
  221. package/dist/utils/mutex.d.ts +63 -0
  222. package/dist/utils/mutex.d.ts.map +1 -0
  223. package/dist/utils/mutex.js +123 -0
  224. package/dist/utils/mutex.js.map +1 -0
  225. package/dist/utils/path-helpers.d.ts +27 -0
  226. package/dist/utils/path-helpers.d.ts.map +1 -0
  227. package/dist/utils/path-helpers.js +55 -0
  228. package/dist/utils/path-helpers.js.map +1 -0
  229. package/dist/utils/rate-limiter.d.ts +34 -0
  230. package/dist/utils/rate-limiter.d.ts.map +1 -0
  231. package/dist/utils/rate-limiter.js +178 -0
  232. package/dist/utils/rate-limiter.js.map +1 -0
  233. package/dist/utils/scan-patterns.d.ts +5 -0
  234. package/dist/utils/scan-patterns.d.ts.map +1 -0
  235. package/dist/utils/scan-patterns.js +29 -0
  236. package/dist/utils/scan-patterns.js.map +1 -0
  237. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../src/chunking/token-counter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAskCommand(program: Command): void;
3
+ //# sourceMappingURL=ask-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ask-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+IzD"}
@@ -0,0 +1,130 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { synthesizeAnswer, synthesizeAnswerStreaming } from '../../synthesis/synthesizer.js';
4
+ import { formatSynthesisResult, formatErrorMessage, formatNoResultsMessage, addCitationFooter } from '../../synthesis/markdown-formatter.js';
5
+ import { resolveScopeWithPack } from '../../context/packs.js';
6
+ export function registerAskCommand(program) {
7
+ program
8
+ .command('ask <question>')
9
+ .description('Ask a question and get LLM-synthesized answer with code citations')
10
+ .option('-p, --provider <provider>', 'embedding provider (auto|openai)', 'auto')
11
+ .option('-c, --chat-provider <provider>', 'chat LLM provider (auto|openai)', 'auto')
12
+ .option('--path <path>', 'project root directory', '.')
13
+ .option('--project <path>', 'alias for project path')
14
+ .option('--directory <path>', 'alias for project directory')
15
+ .option('-k, --max-chunks <num>', 'maximum code chunks to analyze', '10')
16
+ .option('--path_glob <pattern...>', 'file patterns to filter')
17
+ .option('--tags <tag...>', 'filter by tags')
18
+ .option('--lang <language...>', 'filter by language')
19
+ .option('--reranker <mode>', 'use API reranking (on|off)', 'on')
20
+ .option('--multi-query', 'break complex questions into sub-queries')
21
+ .option('--temperature <num>', 'LLM temperature (0-2)', '0.7')
22
+ .option('--stream', 'stream the response in real-time')
23
+ .option('--citations', 'add citation footer')
24
+ .option('--no-metadata', 'hide search metadata')
25
+ .action(async (question, options) => {
26
+ try {
27
+ // Suppress verbose logs
28
+ process.env.CODEVAULT_QUIET = 'true';
29
+ const resolvedPath = options.project || options.directory || options.path || '.';
30
+ const maxChunks = parseInt(options.maxChunks, 10);
31
+ const temperature = parseFloat(options.temperature);
32
+ const useReranking = options.reranker !== 'off';
33
+ const { scope: scopeFilters } = resolveScopeWithPack({
34
+ path_glob: options.path_glob,
35
+ tags: options.tags,
36
+ lang: options.lang
37
+ }, { basePath: resolvedPath });
38
+ // Streaming mode
39
+ if (options.stream) {
40
+ const spinner = ora({
41
+ text: chalk.cyan('🔍 Searching...'),
42
+ color: 'cyan'
43
+ }).start();
44
+ let firstChunk = true;
45
+ try {
46
+ for await (const chunk of synthesizeAnswerStreaming(question, {
47
+ provider: options.provider,
48
+ chatProvider: options.chatProvider,
49
+ workingPath: resolvedPath,
50
+ scope: scopeFilters,
51
+ maxChunks,
52
+ useReranking,
53
+ temperature
54
+ })) {
55
+ if (firstChunk) {
56
+ spinner.succeed(chalk.cyan('🔍 Searching... ✓'));
57
+ console.log(chalk.cyan('🤖 Generating answer...\n'));
58
+ console.log(chalk.gray('━'.repeat(80)));
59
+ console.log();
60
+ firstChunk = false;
61
+ }
62
+ process.stdout.write(chunk);
63
+ }
64
+ console.log('\n');
65
+ }
66
+ catch (error) {
67
+ spinner.fail(chalk.red('Error generating answer'));
68
+ console.error(chalk.red(`\n${error.message}\n`));
69
+ process.exit(1);
70
+ }
71
+ delete process.env.CODEVAULT_QUIET;
72
+ return;
73
+ }
74
+ // Non-streaming mode
75
+ const spinner = ora({
76
+ text: chalk.cyan('🔍 Searching...'),
77
+ color: 'cyan'
78
+ }).start();
79
+ const result = await synthesizeAnswer(question, {
80
+ provider: options.provider,
81
+ chatProvider: options.chatProvider,
82
+ workingPath: resolvedPath,
83
+ scope: scopeFilters,
84
+ maxChunks,
85
+ useReranking,
86
+ useMultiQuery: options.multiQuery,
87
+ temperature
88
+ });
89
+ spinner.succeed(chalk.cyan(`🔍 Searching... ✓ ${result.chunksAnalyzed || maxChunks} chunks found`));
90
+ const genSpinner = ora({
91
+ text: chalk.cyan('🤖 Generating answer...'),
92
+ color: 'cyan'
93
+ }).start();
94
+ genSpinner.succeed(chalk.cyan('🤖 Generating answer... ✓'));
95
+ if (!result.success) {
96
+ if (result.error === 'no_results') {
97
+ console.log(formatNoResultsMessage(result.query, result.queriesUsed));
98
+ }
99
+ else {
100
+ console.log(formatErrorMessage(result.error || 'Unknown error', result.query));
101
+ }
102
+ process.exit(1);
103
+ }
104
+ console.log();
105
+ console.log(chalk.gray('━'.repeat(80)));
106
+ console.log();
107
+ let output = formatSynthesisResult(result, {
108
+ includeMetadata: false, // Hide verbose metadata by default
109
+ includeStats: false
110
+ });
111
+ if (options.citations && result.answer) {
112
+ output = addCitationFooter(output);
113
+ }
114
+ console.log(output);
115
+ // Show concise footer
116
+ console.log();
117
+ console.log(chalk.gray('━'.repeat(80)));
118
+ const searchType = result.metadata?.searchType || 'hybrid';
119
+ const provider = result.chatProvider || 'auto';
120
+ console.log(chalk.gray(`ℹ️ ${result.chunksAnalyzed || maxChunks} code chunks analyzed • ${searchType} search • ${provider}`));
121
+ console.log();
122
+ delete process.env.CODEVAULT_QUIET;
123
+ }
124
+ catch (error) {
125
+ console.error(chalk.red('\n❌ Error:'), error.message);
126
+ process.exit(1);
127
+ }
128
+ });
129
+ }
130
+ //# sourceMappingURL=ask-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/ask-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerChatCommand(program: Command): void;
3
+ //# sourceMappingURL=chat-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/chat-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8I1D"}
@@ -0,0 +1,194 @@
1
+ import chalk from 'chalk';
2
+ import { stdin as input, stdout as output } from 'process';
3
+ import * as readline from 'readline/promises';
4
+ import { createConversationContext, addConversationTurn, clearConversationHistory, getConversationSummary, synthesizeConversationalAnswerStreaming } from '../../synthesis/conversational-synthesizer.js';
5
+ import { resolveScopeWithPack } from '../../context/packs.js';
6
+ export function registerChatCommand(program) {
7
+ program
8
+ .command('chat')
9
+ .description('Start interactive conversation about the codebase')
10
+ .option('-p, --provider <provider>', 'embedding provider (auto|openai)', 'auto')
11
+ .option('-c, --chat-provider <provider>', 'chat LLM provider (auto|openai)', 'auto')
12
+ .option('--path <path>', 'project root directory', '.')
13
+ .option('--project <path>', 'alias for project path')
14
+ .option('--directory <path>', 'alias for project directory')
15
+ .option('-k, --max-chunks <num>', 'maximum code chunks per query', '10')
16
+ .option('--path_glob <pattern...>', 'file patterns to filter')
17
+ .option('--tags <tag...>', 'filter by tags')
18
+ .option('--lang <language...>', 'filter by language')
19
+ .option('--reranker <mode>', 'use API reranking (on|off)', 'on')
20
+ .option('--temperature <num>', 'LLM temperature (0-2)', '0.7')
21
+ .option('--max-history <num>', 'maximum conversation turns to remember', '5')
22
+ .action(async (options) => {
23
+ try {
24
+ // Suppress verbose logs
25
+ process.env.CODEVAULT_QUIET = 'true';
26
+ const resolvedPath = options.project || options.directory || options.path || '.';
27
+ const maxChunks = parseInt(options.maxChunks, 10);
28
+ const temperature = parseFloat(options.temperature);
29
+ const maxHistory = parseInt(options.maxHistory, 10);
30
+ const useReranking = options.reranker !== 'off';
31
+ const { scope: scopeFilters } = resolveScopeWithPack({
32
+ path_glob: options.path_glob,
33
+ tags: options.tags,
34
+ lang: options.lang
35
+ }, { basePath: resolvedPath });
36
+ // Create conversation context
37
+ const conversationContext = createConversationContext();
38
+ // Display welcome message
39
+ console.log(chalk.cyan.bold('\n💬 CodeVault Interactive Chat'));
40
+ console.log(chalk.gray('━'.repeat(80)));
41
+ console.log(chalk.white('Ask questions about your codebase. Type ') + chalk.cyan('/help') + chalk.white(' for commands.\n'));
42
+ // Create readline interface
43
+ const rl = readline.createInterface({ input, output });
44
+ let isRunning = true;
45
+ while (isRunning) {
46
+ try {
47
+ // Show conversation summary if there's history
48
+ if (conversationContext.turns.length > 0) {
49
+ const summary = getConversationSummary(conversationContext);
50
+ console.log(chalk.gray(`[${summary}]`));
51
+ }
52
+ // Prompt for user input
53
+ const question = await rl.question(chalk.cyan('You: '));
54
+ const trimmedQuestion = question.trim();
55
+ if (!trimmedQuestion) {
56
+ continue;
57
+ }
58
+ // Handle commands
59
+ if (trimmedQuestion.startsWith('/')) {
60
+ const handled = await handleCommand(trimmedQuestion, conversationContext);
61
+ if (handled === 'exit') {
62
+ isRunning = false;
63
+ break;
64
+ }
65
+ continue;
66
+ }
67
+ // Show thinking indicator
68
+ console.log(chalk.gray('🤔 Thinking...\n'));
69
+ // Generate answer with streaming
70
+ let fullAnswer = '';
71
+ let firstChunk = true;
72
+ try {
73
+ let selectedChunks = [];
74
+ for await (const chunk of synthesizeConversationalAnswerStreaming(trimmedQuestion, conversationContext, {
75
+ provider: options.provider,
76
+ chatProvider: options.chatProvider,
77
+ workingPath: resolvedPath,
78
+ scope: scopeFilters,
79
+ maxChunks,
80
+ useReranking,
81
+ temperature,
82
+ maxHistoryTurns: maxHistory,
83
+ onChunksSelected: (chunks) => { selectedChunks = chunks; }
84
+ })) {
85
+ if (firstChunk) {
86
+ console.log(chalk.green('Assistant: '));
87
+ firstChunk = false;
88
+ }
89
+ process.stdout.write(chunk);
90
+ fullAnswer += chunk;
91
+ }
92
+ console.log('\n');
93
+ // Add to conversation history
94
+ const turn = {
95
+ question: trimmedQuestion,
96
+ answer: fullAnswer,
97
+ chunks: selectedChunks,
98
+ timestamp: new Date()
99
+ };
100
+ addConversationTurn(conversationContext, turn);
101
+ }
102
+ catch (error) {
103
+ console.error(chalk.red(`\n❌ Error: ${error.message}\n`));
104
+ }
105
+ }
106
+ catch (error) {
107
+ if (error.code === 'ERR_USE_AFTER_CLOSE') {
108
+ // User pressed Ctrl+C
109
+ isRunning = false;
110
+ break;
111
+ }
112
+ console.error(chalk.red(`\n❌ Error: ${error.message}\n`));
113
+ }
114
+ }
115
+ // Cleanup
116
+ rl.close();
117
+ console.log(chalk.cyan('\n👋 Goodbye!\n'));
118
+ delete process.env.CODEVAULT_QUIET;
119
+ }
120
+ catch (error) {
121
+ console.error(chalk.red('\n❌ Error:'), error.message);
122
+ process.exit(1);
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * Handle special commands in chat mode
128
+ */
129
+ async function handleCommand(command, context) {
130
+ const cmd = command.toLowerCase().trim();
131
+ switch (cmd) {
132
+ case '/exit':
133
+ case '/quit':
134
+ case '/q':
135
+ return 'exit';
136
+ case '/clear':
137
+ clearConversationHistory(context);
138
+ console.log(chalk.yellow('🗑️ Conversation history cleared\n'));
139
+ break;
140
+ case '/history':
141
+ if (context.turns.length === 0) {
142
+ console.log(chalk.gray('No conversation history yet.\n'));
143
+ }
144
+ else {
145
+ console.log(chalk.bold('\n📜 Conversation History:\n'));
146
+ context.turns.forEach((turn, index) => {
147
+ console.log(chalk.cyan(`${index + 1}. Q: `) + turn.question);
148
+ console.log(chalk.gray(` A: ${turn.answer.substring(0, 100)}...`));
149
+ console.log(chalk.gray(` Time: ${turn.timestamp.toLocaleString()}\n`));
150
+ });
151
+ }
152
+ break;
153
+ case '/stats':
154
+ const summary = getConversationSummary(context);
155
+ const uniqueFiles = new Set(Array.from(context.allChunks.values()).map(chunk => chunk.result.path));
156
+ console.log(chalk.bold('\n📊 Conversation Statistics:\n'));
157
+ console.log(chalk.gray(` Turns: ${context.turns.length}`));
158
+ console.log(chalk.gray(` Code chunks referenced: ${context.allChunks.size}`));
159
+ console.log(chalk.gray(` Files explored: ${uniqueFiles.size}`));
160
+ console.log(chalk.gray(` Languages: ${new Set(Array.from(context.allChunks.values()).map(c => c.result.lang)).size}\n`));
161
+ if (uniqueFiles.size > 0) {
162
+ console.log(chalk.bold(' Files in context:'));
163
+ Array.from(uniqueFiles).slice(0, 10).forEach(file => {
164
+ console.log(chalk.gray(` - ${file}`));
165
+ });
166
+ if (uniqueFiles.size > 10) {
167
+ console.log(chalk.gray(` ... and ${uniqueFiles.size - 10} more\n`));
168
+ }
169
+ else {
170
+ console.log('');
171
+ }
172
+ }
173
+ break;
174
+ case '/help':
175
+ case '/?':
176
+ console.log(chalk.bold('\n📖 Available Commands:\n'));
177
+ console.log(chalk.cyan(' /help') + chalk.gray(' - Show this help message'));
178
+ console.log(chalk.cyan(' /exit') + chalk.gray(' - Exit chat mode (or Ctrl+C)'));
179
+ console.log(chalk.cyan(' /quit') + chalk.gray(' - Same as /exit'));
180
+ console.log(chalk.cyan(' /clear') + chalk.gray(' - Clear conversation history'));
181
+ console.log(chalk.cyan(' /history') + chalk.gray(' - Show conversation history'));
182
+ console.log(chalk.cyan(' /stats') + chalk.gray(' - Show conversation statistics'));
183
+ console.log(chalk.gray('\n Tips:'));
184
+ console.log(chalk.gray(' - Ask follow-up questions naturally'));
185
+ console.log(chalk.gray(' - Reference previous answers ("the function you mentioned")'));
186
+ console.log(chalk.gray(' - Use /clear to start a fresh topic\n'));
187
+ break;
188
+ default:
189
+ console.log(chalk.yellow(`Unknown command: ${cmd}`));
190
+ console.log(chalk.gray('Type /help for available commands\n'));
191
+ break;
192
+ }
193
+ }
194
+ //# sourceMappingURL=chat-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/chat-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConfigCommands(program: Command): void;
3
+ //# sourceMappingURL=config-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2P7D"}
@@ -0,0 +1,245 @@
1
+ import chalk from 'chalk';
2
+ import { loadConfig, readGlobalConfig, readProjectConfig, saveGlobalConfig, saveProjectConfig, hasGlobalConfig, getGlobalConfigPath, getConfigSources } from '../../config/loader.js';
3
+ import { runInteractiveConfig } from './interactive-config.js';
4
+ function displayConfig(config, title) {
5
+ if (!config || Object.keys(config).length === 0) {
6
+ console.log(chalk.gray(` ${title}: (empty)`));
7
+ return;
8
+ }
9
+ console.log(chalk.bold(` ${title}:`));
10
+ console.log(' ' + JSON.stringify(config, null, 2).split('\n').join('\n '));
11
+ }
12
+ export function registerConfigCommands(program) {
13
+ const configCommand = program
14
+ .command('config')
15
+ .description('Manage CodeVault configuration');
16
+ // config init - Interactive setup
17
+ configCommand
18
+ .command('init')
19
+ .description('Initialize global configuration (interactive)')
20
+ .option('--force', 'Overwrite existing configuration')
21
+ .option('--no-interactive', 'Skip interactive prompts, create basic config')
22
+ .action(async (options) => {
23
+ // Use interactive mode by default
24
+ if (options.interactive !== false) {
25
+ await runInteractiveConfig(options.force);
26
+ return;
27
+ }
28
+ // Non-interactive mode (legacy)
29
+ if (hasGlobalConfig() && !options.force) {
30
+ console.log(chalk.yellow('⚠️ Global configuration already exists at:'));
31
+ console.log(chalk.cyan(` ${getGlobalConfigPath()}`));
32
+ console.log('');
33
+ console.log('Use --force to overwrite, or edit the file directly.');
34
+ console.log('Run: ' + chalk.cyan('codevault config show --global'));
35
+ return;
36
+ }
37
+ console.log(chalk.bold('🚀 CodeVault Configuration Setup\n'));
38
+ const config = {
39
+ defaultProvider: 'auto',
40
+ providers: {}
41
+ };
42
+ console.log('Configuration will be saved to:');
43
+ console.log(chalk.cyan(` ${getGlobalConfigPath()}\n`));
44
+ console.log(chalk.gray('You can configure providers now or later using:'));
45
+ console.log(chalk.cyan(' codevault config set <key> <value>\n'));
46
+ saveGlobalConfig(config);
47
+ console.log(chalk.green('✓ Global configuration initialized!'));
48
+ console.log('');
49
+ console.log('Next steps:');
50
+ console.log(chalk.cyan(' codevault config set providers.openai.apiKey YOUR_API_KEY'));
51
+ console.log(chalk.cyan(' codevault config set providers.openai.model text-embedding-3-large'));
52
+ });
53
+ // config set - Set configuration value
54
+ configCommand
55
+ .command('set <key> <value>')
56
+ .description('Set a configuration value')
57
+ .option('-l, --local [path]', 'Save to project config instead of global')
58
+ .action((key, value, options) => {
59
+ const isLocal = options.local !== undefined;
60
+ const basePath = typeof options.local === 'string' ? options.local : '.';
61
+ let config;
62
+ if (isLocal) {
63
+ config = readProjectConfig(basePath) || {};
64
+ }
65
+ else {
66
+ config = readGlobalConfig() || {};
67
+ }
68
+ // Parse key path (e.g., "openai.apiKey" -> ["openai", "apiKey"])
69
+ const keyPath = key.split('.');
70
+ // Set the value
71
+ let current = config;
72
+ for (let i = 0; i < keyPath.length - 1; i++) {
73
+ const part = keyPath[i];
74
+ if (!current[part]) {
75
+ current[part] = {};
76
+ }
77
+ current = current[part];
78
+ }
79
+ const lastKey = keyPath[keyPath.length - 1];
80
+ // Try to parse value as JSON, otherwise use as string
81
+ let parsedValue = value;
82
+ if (value === 'true')
83
+ parsedValue = true;
84
+ else if (value === 'false')
85
+ parsedValue = false;
86
+ else if (!isNaN(Number(value)))
87
+ parsedValue = Number(value);
88
+ current[lastKey] = parsedValue;
89
+ // Save config
90
+ if (isLocal) {
91
+ saveProjectConfig(config, basePath);
92
+ console.log(chalk.green(`✓ Set ${key} in project config`));
93
+ }
94
+ else {
95
+ saveGlobalConfig(config);
96
+ console.log(chalk.green(`✓ Set ${key} in global config`));
97
+ }
98
+ });
99
+ // config get - Get configuration value
100
+ configCommand
101
+ .command('get <key>')
102
+ .description('Get a configuration value')
103
+ .option('-g, --global', 'Get from global config only')
104
+ .option('-l, --local [path]', 'Get from project config only')
105
+ .action((key, options) => {
106
+ let config;
107
+ if (options.global) {
108
+ config = readGlobalConfig() || {};
109
+ }
110
+ else if (options.local !== undefined) {
111
+ const basePath = typeof options.local === 'string' ? options.local : '.';
112
+ config = readProjectConfig(basePath) || {};
113
+ }
114
+ else {
115
+ config = loadConfig();
116
+ }
117
+ // Navigate key path
118
+ const keyPath = key.split('.');
119
+ let value = config;
120
+ for (const part of keyPath) {
121
+ if (value && typeof value === 'object') {
122
+ value = value[part];
123
+ }
124
+ else {
125
+ value = undefined;
126
+ break;
127
+ }
128
+ }
129
+ if (value === undefined) {
130
+ console.log(chalk.yellow(`Key '${key}' not found`));
131
+ }
132
+ else if (typeof value === 'object') {
133
+ console.log(JSON.stringify(value, null, 2));
134
+ }
135
+ else {
136
+ console.log(value);
137
+ }
138
+ });
139
+ // config list - List all configuration
140
+ configCommand
141
+ .command('list')
142
+ .alias('show')
143
+ .description('Show current configuration')
144
+ .option('-g, --global', 'Show global config only')
145
+ .option('-l, --local [path]', 'Show project config only')
146
+ .option('-s, --sources', 'Show all configuration sources')
147
+ .action((options) => {
148
+ if (options.sources) {
149
+ const basePath = typeof options.local === 'string' ? options.local : '.';
150
+ const sources = getConfigSources(basePath);
151
+ console.log(chalk.bold('Configuration Sources:\n'));
152
+ displayConfig(sources.global, 'Global (~/.codevault/config.json)');
153
+ console.log('');
154
+ displayConfig(sources.project, 'Project (.codevault/config.json)');
155
+ console.log('');
156
+ displayConfig(sources.env, 'Environment Variables');
157
+ console.log('');
158
+ console.log(chalk.gray('Priority: Environment > Project > Global'));
159
+ return;
160
+ }
161
+ if (options.global) {
162
+ const config = readGlobalConfig();
163
+ console.log(chalk.bold('Global Configuration:\n'));
164
+ if (!config || Object.keys(config).length === 0) {
165
+ console.log(chalk.gray(' (empty)'));
166
+ console.log('');
167
+ console.log('Initialize with: ' + chalk.cyan('codevault config init'));
168
+ }
169
+ else {
170
+ console.log(JSON.stringify(config, null, 2));
171
+ }
172
+ return;
173
+ }
174
+ if (options.local !== undefined) {
175
+ const basePath = typeof options.local === 'string' ? options.local : '.';
176
+ const config = readProjectConfig(basePath);
177
+ console.log(chalk.bold('Project Configuration:\n'));
178
+ if (!config || Object.keys(config).length === 0) {
179
+ console.log(chalk.gray(' (empty)'));
180
+ }
181
+ else {
182
+ console.log(JSON.stringify(config, null, 2));
183
+ }
184
+ return;
185
+ }
186
+ // Show merged config
187
+ const config = loadConfig();
188
+ console.log(chalk.bold('Merged Configuration:\n'));
189
+ console.log(JSON.stringify(config, null, 2));
190
+ console.log('');
191
+ console.log(chalk.gray('Tip: Use --sources to see individual config sources'));
192
+ });
193
+ // config unset - Remove configuration value
194
+ configCommand
195
+ .command('unset <key>')
196
+ .description('Remove a configuration value')
197
+ .option('-l, --local [path]', 'Remove from project config instead of global')
198
+ .action((key, options) => {
199
+ const isLocal = options.local !== undefined;
200
+ const basePath = typeof options.local === 'string' ? options.local : '.';
201
+ let config;
202
+ if (isLocal) {
203
+ config = readProjectConfig(basePath) || {};
204
+ }
205
+ else {
206
+ config = readGlobalConfig() || {};
207
+ }
208
+ // Parse and navigate to parent of key
209
+ const keyPath = key.split('.');
210
+ let current = config;
211
+ for (let i = 0; i < keyPath.length - 1; i++) {
212
+ const part = keyPath[i];
213
+ if (!current[part]) {
214
+ console.log(chalk.yellow(`Key '${key}' not found`));
215
+ return;
216
+ }
217
+ current = current[part];
218
+ }
219
+ const lastKey = keyPath[keyPath.length - 1];
220
+ if (!(lastKey in current)) {
221
+ console.log(chalk.yellow(`Key '${key}' not found`));
222
+ return;
223
+ }
224
+ delete current[lastKey];
225
+ // Save config
226
+ if (isLocal) {
227
+ saveProjectConfig(config, basePath);
228
+ console.log(chalk.green(`✓ Removed ${key} from project config`));
229
+ }
230
+ else {
231
+ saveGlobalConfig(config);
232
+ console.log(chalk.green(`✓ Removed ${key} from global config`));
233
+ }
234
+ });
235
+ // config path - Show config file paths
236
+ configCommand
237
+ .command('path')
238
+ .description('Show configuration file paths')
239
+ .action(() => {
240
+ console.log(chalk.bold('Configuration Paths:\n'));
241
+ console.log(chalk.cyan('Global: ') + getGlobalConfigPath());
242
+ console.log(chalk.cyan('Project: ') + '.codevault/config.json');
243
+ });
244
+ }
245
+ //# sourceMappingURL=config-cmd.js.map