k0ntext 3.3.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +240 -26
  2. package/dist/agents/cleanup-agent.d.ts.map +1 -1
  3. package/dist/agents/cleanup-agent.js +18 -6
  4. package/dist/agents/cleanup-agent.js.map +1 -1
  5. package/dist/agents/drift-agent.d.ts +7 -0
  6. package/dist/agents/drift-agent.d.ts.map +1 -1
  7. package/dist/agents/drift-agent.js +29 -8
  8. package/dist/agents/drift-agent.js.map +1 -1
  9. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  10. package/dist/cli/commands/cleanup.js +8 -1
  11. package/dist/cli/commands/cleanup.js.map +1 -1
  12. package/dist/cli/commands/drift-detect.d.ts.map +1 -1
  13. package/dist/cli/commands/drift-detect.js +21 -1
  14. package/dist/cli/commands/drift-detect.js.map +1 -1
  15. package/dist/cli/commands/restore.d.ts +12 -0
  16. package/dist/cli/commands/restore.d.ts.map +1 -0
  17. package/dist/cli/commands/restore.js +261 -0
  18. package/dist/cli/commands/restore.js.map +1 -0
  19. package/dist/cli/commands/sync-templates.d.ts +15 -0
  20. package/dist/cli/commands/sync-templates.d.ts.map +1 -0
  21. package/dist/cli/commands/sync-templates.js +181 -0
  22. package/dist/cli/commands/sync-templates.js.map +1 -0
  23. package/dist/cli/commands/version-check.d.ts +12 -0
  24. package/dist/cli/commands/version-check.d.ts.map +1 -0
  25. package/dist/cli/commands/version-check.js +133 -0
  26. package/dist/cli/commands/version-check.js.map +1 -0
  27. package/dist/cli/generate.d.ts +5 -0
  28. package/dist/cli/generate.d.ts.map +1 -1
  29. package/dist/cli/generate.js +80 -16
  30. package/dist/cli/generate.js.map +1 -1
  31. package/dist/cli/index.js +145 -1
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/repl/index.d.ts +4 -0
  34. package/dist/cli/repl/index.d.ts.map +1 -1
  35. package/dist/cli/repl/index.js +113 -95
  36. package/dist/cli/repl/index.js.map +1 -1
  37. package/dist/cli/repl/tui/panels/config.d.ts +71 -0
  38. package/dist/cli/repl/tui/panels/config.d.ts.map +1 -0
  39. package/dist/cli/repl/tui/panels/config.js +392 -0
  40. package/dist/cli/repl/tui/panels/config.js.map +1 -0
  41. package/dist/cli/repl/tui/panels/drift.d.ts +95 -0
  42. package/dist/cli/repl/tui/panels/drift.d.ts.map +1 -0
  43. package/dist/cli/repl/tui/panels/drift.js +353 -0
  44. package/dist/cli/repl/tui/panels/drift.js.map +1 -0
  45. package/dist/cli/repl/tui/panels/indexing.d.ts +86 -0
  46. package/dist/cli/repl/tui/panels/indexing.d.ts.map +1 -0
  47. package/dist/cli/repl/tui/panels/indexing.js +254 -0
  48. package/dist/cli/repl/tui/panels/indexing.js.map +1 -0
  49. package/dist/cli/repl/tui/panels/search.d.ts +66 -0
  50. package/dist/cli/repl/tui/panels/search.d.ts.map +1 -0
  51. package/dist/cli/repl/tui/panels/search.js +215 -0
  52. package/dist/cli/repl/tui/panels/search.js.map +1 -0
  53. package/dist/cli/utils/backup-manager.d.ts +94 -0
  54. package/dist/cli/utils/backup-manager.d.ts.map +1 -0
  55. package/dist/cli/utils/backup-manager.js +230 -0
  56. package/dist/cli/utils/backup-manager.js.map +1 -0
  57. package/dist/cli/utils/file-detector.d.ts +87 -0
  58. package/dist/cli/utils/file-detector.d.ts.map +1 -0
  59. package/dist/cli/utils/file-detector.js +131 -0
  60. package/dist/cli/utils/file-detector.js.map +1 -0
  61. package/dist/cli/utils/index.d.ts +9 -0
  62. package/dist/cli/utils/index.d.ts.map +1 -0
  63. package/dist/cli/utils/index.js +9 -0
  64. package/dist/cli/utils/index.js.map +1 -0
  65. package/dist/cli/utils/modification-prompt.d.ts +41 -0
  66. package/dist/cli/utils/modification-prompt.d.ts.map +1 -0
  67. package/dist/cli/utils/modification-prompt.js +84 -0
  68. package/dist/cli/utils/modification-prompt.js.map +1 -0
  69. package/dist/cli/version/checker.d.ts +47 -0
  70. package/dist/cli/version/checker.d.ts.map +1 -0
  71. package/dist/cli/version/checker.js +143 -0
  72. package/dist/cli/version/checker.js.map +1 -0
  73. package/dist/cli/version/comparator.d.ts +46 -0
  74. package/dist/cli/version/comparator.d.ts.map +1 -0
  75. package/dist/cli/version/comparator.js +99 -0
  76. package/dist/cli/version/comparator.js.map +1 -0
  77. package/dist/cli/version/index.d.ts +11 -0
  78. package/dist/cli/version/index.d.ts.map +1 -0
  79. package/dist/cli/version/index.js +11 -0
  80. package/dist/cli/version/index.js.map +1 -0
  81. package/dist/cli/version/parser.d.ts +38 -0
  82. package/dist/cli/version/parser.d.ts.map +1 -0
  83. package/dist/cli/version/parser.js +90 -0
  84. package/dist/cli/version/parser.js.map +1 -0
  85. package/dist/cli/version/prompt.d.ts +40 -0
  86. package/dist/cli/version/prompt.d.ts.map +1 -0
  87. package/dist/cli/version/prompt.js +162 -0
  88. package/dist/cli/version/prompt.js.map +1 -0
  89. package/dist/cli/version/types.d.ts +89 -0
  90. package/dist/cli/version/types.d.ts.map +1 -0
  91. package/dist/cli/version/types.js +7 -0
  92. package/dist/cli/version/types.js.map +1 -0
  93. package/dist/db/client.d.ts +64 -2
  94. package/dist/db/client.d.ts.map +1 -1
  95. package/dist/db/client.js +148 -2
  96. package/dist/db/client.js.map +1 -1
  97. package/dist/db/schema.d.ts +41 -2
  98. package/dist/db/schema.d.ts.map +1 -1
  99. package/dist/db/schema.js +77 -2
  100. package/dist/db/schema.js.map +1 -1
  101. package/dist/mcp.js +2 -2
  102. package/dist/mcp.js.map +1 -1
  103. package/dist/template-engine/data-transformer.d.ts +17 -0
  104. package/dist/template-engine/data-transformer.d.ts.map +1 -0
  105. package/dist/template-engine/data-transformer.js +343 -0
  106. package/dist/template-engine/data-transformer.js.map +1 -0
  107. package/dist/template-engine/engine.d.ts +74 -0
  108. package/dist/template-engine/engine.d.ts.map +1 -0
  109. package/dist/template-engine/engine.js +183 -0
  110. package/dist/template-engine/engine.js.map +1 -0
  111. package/dist/template-engine/helpers.d.ts +81 -0
  112. package/dist/template-engine/helpers.d.ts.map +1 -0
  113. package/dist/template-engine/helpers.js +153 -0
  114. package/dist/template-engine/helpers.js.map +1 -0
  115. package/dist/template-engine/index.d.ts +10 -0
  116. package/dist/template-engine/index.d.ts.map +1 -0
  117. package/dist/template-engine/index.js +10 -0
  118. package/dist/template-engine/index.js.map +1 -0
  119. package/dist/template-engine/types.d.ts +147 -0
  120. package/dist/template-engine/types.d.ts.map +1 -0
  121. package/dist/template-engine/types.js +7 -0
  122. package/dist/template-engine/types.js.map +1 -0
  123. package/dist/template-sync/comparator.d.ts +138 -0
  124. package/dist/template-sync/comparator.d.ts.map +1 -0
  125. package/dist/template-sync/comparator.js +353 -0
  126. package/dist/template-sync/comparator.js.map +1 -0
  127. package/dist/template-sync/conflict-resolver.d.ts +112 -0
  128. package/dist/template-sync/conflict-resolver.d.ts.map +1 -0
  129. package/dist/template-sync/conflict-resolver.js +328 -0
  130. package/dist/template-sync/conflict-resolver.js.map +1 -0
  131. package/dist/template-sync/engine.d.ts +93 -0
  132. package/dist/template-sync/engine.d.ts.map +1 -0
  133. package/dist/template-sync/engine.js +350 -0
  134. package/dist/template-sync/engine.js.map +1 -0
  135. package/dist/template-sync/hasher.d.ts +67 -0
  136. package/dist/template-sync/hasher.d.ts.map +1 -0
  137. package/dist/template-sync/hasher.js +94 -0
  138. package/dist/template-sync/hasher.js.map +1 -0
  139. package/dist/template-sync/index.d.ts +20 -0
  140. package/dist/template-sync/index.d.ts.map +1 -0
  141. package/dist/template-sync/index.js +14 -0
  142. package/dist/template-sync/index.js.map +1 -0
  143. package/dist/template-sync/manifest.d.ts +131 -0
  144. package/dist/template-sync/manifest.d.ts.map +1 -0
  145. package/dist/template-sync/manifest.js +309 -0
  146. package/dist/template-sync/manifest.js.map +1 -0
  147. package/dist/template-sync/merger.d.ts +125 -0
  148. package/dist/template-sync/merger.d.ts.map +1 -0
  149. package/dist/template-sync/merger.js +371 -0
  150. package/dist/template-sync/merger.js.map +1 -0
  151. package/dist/template-sync/scanner.d.ts +106 -0
  152. package/dist/template-sync/scanner.d.ts.map +1 -0
  153. package/dist/template-sync/scanner.js +196 -0
  154. package/dist/template-sync/scanner.js.map +1 -0
  155. package/dist/template-sync/types.d.ts +199 -0
  156. package/dist/template-sync/types.d.ts.map +1 -0
  157. package/dist/template-sync/types.js +30 -0
  158. package/dist/template-sync/types.js.map +1 -0
  159. package/package.json +2 -1
  160. package/src/agents/cleanup-agent.ts +21 -6
  161. package/src/agents/drift-agent.ts +31 -8
  162. package/src/cli/commands/cleanup.ts +9 -1
  163. package/src/cli/commands/drift-detect.ts +24 -1
  164. package/src/cli/commands/restore.ts +318 -0
  165. package/src/cli/commands/sync-templates.ts +210 -0
  166. package/src/cli/commands/version-check.ts +158 -0
  167. package/src/cli/generate.ts +99 -17
  168. package/src/cli/index.ts +167 -1
  169. package/src/cli/repl/index.ts +118 -105
  170. package/src/cli/repl/tui/panels/config.ts +457 -0
  171. package/src/cli/repl/tui/panels/drift.ts +458 -0
  172. package/src/cli/repl/tui/panels/indexing.ts +324 -0
  173. package/src/cli/repl/tui/panels/search.ts +272 -0
  174. package/src/cli/utils/backup-manager.ts +275 -0
  175. package/src/cli/utils/file-detector.ts +181 -0
  176. package/src/cli/utils/index.ts +9 -0
  177. package/src/cli/utils/modification-prompt.ts +112 -0
  178. package/src/cli/version/checker.ts +172 -0
  179. package/src/cli/version/comparator.ts +106 -0
  180. package/src/cli/version/index.ts +11 -0
  181. package/src/cli/version/parser.ts +101 -0
  182. package/src/cli/version/prompt.ts +208 -0
  183. package/src/cli/version/types.ts +95 -0
  184. package/src/db/client.ts +220 -3
  185. package/src/db/schema.ts +109 -2
  186. package/src/mcp.ts +2 -2
  187. package/src/template-engine/data-transformer.ts +367 -0
  188. package/src/template-engine/engine.ts +213 -0
  189. package/src/template-engine/helpers.ts +163 -0
  190. package/src/template-engine/index.ts +10 -0
  191. package/src/template-engine/types.ts +158 -0
  192. package/src/template-sync/comparator.ts +452 -0
  193. package/src/template-sync/conflict-resolver.ts +401 -0
  194. package/src/template-sync/engine.ts +417 -0
  195. package/src/template-sync/hasher.ts +104 -0
  196. package/src/template-sync/index.ts +60 -0
  197. package/src/template-sync/manifest.ts +358 -0
  198. package/src/template-sync/merger.ts +454 -0
  199. package/src/template-sync/scanner.ts +254 -0
  200. package/src/template-sync/types.ts +247 -0
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Data Transformer
3
+ *
4
+ * Builds rich template data from database context.
5
+ */
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ /**
9
+ * Build template data from database and project analysis
10
+ *
11
+ * @param db - Database client
12
+ * @param projectRoot - Project root directory
13
+ * @param k0ntextVersion - Current k0ntext version
14
+ * @returns Complete template data
15
+ */
16
+ export async function buildTemplateData(db, projectRoot, k0ntextVersion) {
17
+ // Get all context items from database
18
+ const allItems = db.getAllItems();
19
+ // Extract project metadata
20
+ const project = await extractProjectData(projectRoot, allItems);
21
+ // Extract architecture information
22
+ const architecture = extractArchitectureData(allItems);
23
+ // Extract key files
24
+ const keyFiles = extractKeyFilesData(allItems);
25
+ // Extract commands
26
+ const commands = await extractCommandsData(projectRoot);
27
+ // Extract workflows
28
+ const workflows = extractWorkflowsData(allItems);
29
+ // Extract gotchas
30
+ const gotchas = extractGotchasData(allItems);
31
+ // Build metadata
32
+ const metadata = {
33
+ generator_version: k0ntextVersion,
34
+ timestamp: new Date().toISOString(),
35
+ header: `Generated by k0ntext v${k0ntextVersion}`
36
+ };
37
+ // Build coordination/footer
38
+ const coordination = {
39
+ footer: `*Generated by k0ntext v${k0ntextVersion}*`,
40
+ version: k0ntextVersion,
41
+ timestamp: new Date().toISOString()
42
+ };
43
+ return {
44
+ project,
45
+ architecture,
46
+ key_files: keyFiles,
47
+ commands,
48
+ workflows,
49
+ gotchas: gotchas.length > 0 ? gotchas : undefined,
50
+ metadata,
51
+ coordination
52
+ };
53
+ }
54
+ /**
55
+ * Extract project data from items and package.json
56
+ */
57
+ async function extractProjectData(projectRoot, items) {
58
+ // Try to read package.json
59
+ let packageData = {};
60
+ try {
61
+ const packageJsonPath = path.join(projectRoot, 'package.json');
62
+ const packageJson = await fs.readFile(packageJsonPath, 'utf-8');
63
+ packageData = JSON.parse(packageJson);
64
+ }
65
+ catch {
66
+ // No package.json
67
+ }
68
+ // Extract project info from items or package.json
69
+ const projectItem = items.find(i => i.type === 'config' && i.name === 'project');
70
+ return {
71
+ name: projectItem?.content?.name || packageData.name || path.basename(projectRoot),
72
+ description: projectItem?.content?.description || packageData.description || '',
73
+ type: projectItem?.content?.type || inferProjectType(packageData),
74
+ tech_stack: extractTechStack(items, packageData),
75
+ primary_language: projectItem?.content?.primary_language || inferPrimaryLanguage(packageData),
76
+ version: packageData.version
77
+ };
78
+ }
79
+ /**
80
+ * Infer project type from package.json
81
+ */
82
+ function inferProjectType(packageData) {
83
+ if (packageData.dependencies?.next)
84
+ return 'Next.js Application';
85
+ if (packageData.dependencies?.react)
86
+ return 'React Application';
87
+ if (packageData.dependencies?.vue)
88
+ return 'Vue Application';
89
+ if (packageData.dependencies?.express)
90
+ return 'Express API';
91
+ if (packageData.dependencies?.fastify)
92
+ return 'Fastify API';
93
+ if (packageData.dependencies?.['nestjs/core'])
94
+ return 'NestJS Application';
95
+ return 'CLI Tool / Library';
96
+ }
97
+ /**
98
+ * Extract tech stack from items and package.json
99
+ */
100
+ function extractTechStack(items, packageData) {
101
+ const stack = [];
102
+ // From package.json dependencies
103
+ const deps = { ...packageData.dependencies, ...packageData.devDependencies };
104
+ if (deps.typescript)
105
+ stack.push('TypeScript');
106
+ if (deps.javascript)
107
+ stack.push('JavaScript');
108
+ if (deps.react || deps['react-dom'])
109
+ stack.push('React');
110
+ if (deps.vue)
111
+ stack.push('Vue');
112
+ if (deps.next)
113
+ stack.push('Next.js');
114
+ if (deps.express)
115
+ stack.push('Express');
116
+ if (deps.vitest || deps.jest)
117
+ stack.push('Vitest');
118
+ if (deps.commander)
119
+ stack.push('Commander.js');
120
+ // From items
121
+ const codeItems = items.filter(i => i.type === 'code');
122
+ const languages = new Set();
123
+ for (const item of codeItems) {
124
+ const ext = path.extname(item.filePath || '');
125
+ if (ext === '.ts' || ext === '.tsx')
126
+ languages.add('TypeScript');
127
+ if (ext === '.js' || ext === '.jsx')
128
+ languages.add('JavaScript');
129
+ if (ext === '.py')
130
+ languages.add('Python');
131
+ if (ext === '.go')
132
+ languages.add('Go');
133
+ if (ext === '.rs')
134
+ languages.add('Rust');
135
+ }
136
+ for (const lang of languages) {
137
+ if (!stack.includes(lang)) {
138
+ stack.push(lang);
139
+ }
140
+ }
141
+ return stack.length > 0 ? stack : ['Node.js'];
142
+ }
143
+ /**
144
+ * Infer primary language from package.json
145
+ */
146
+ function inferPrimaryLanguage(packageData) {
147
+ if (packageData.dependencies?.typescript || packageData.devDependencies?.typescript) {
148
+ return 'TypeScript';
149
+ }
150
+ return 'JavaScript';
151
+ }
152
+ /**
153
+ * Extract architecture data from items
154
+ */
155
+ function extractArchitectureData(items) {
156
+ const workflowItems = items.filter(i => i.type === 'workflow');
157
+ return {
158
+ pattern: inferArchitecturePattern(workflowItems),
159
+ layers: extractLayers(items),
160
+ key_modules: extractKeyModules(items),
161
+ integrations: extractIntegrations(items)
162
+ };
163
+ }
164
+ /**
165
+ * Infer architecture pattern from workflows
166
+ */
167
+ function inferArchitecturePattern(workflows) {
168
+ // Simple heuristic based on workflow names
169
+ if (workflows.some(w => w.name?.includes('MVC')))
170
+ return 'MVC';
171
+ if (workflows.some(w => w.name?.includes('Layered')))
172
+ return 'Layered';
173
+ if (workflows.some(w => w.name?.includes('Micro')))
174
+ return 'Microservices';
175
+ if (workflows.some(w => w.name?.includes('Event')))
176
+ return 'Event-Driven';
177
+ return 'Modular';
178
+ }
179
+ /**
180
+ * Extract architectural layers
181
+ */
182
+ function extractLayers(items) {
183
+ const layers = [];
184
+ // Common layers to look for
185
+ const commonLayers = [
186
+ { name: 'CLI', path: 'bin/' },
187
+ { name: 'Commands', path: 'src/cli/' },
188
+ { name: 'Database', path: 'src/db/' },
189
+ { name: 'Core Logic', path: 'src/' },
190
+ { name: 'Utilities', path: 'src/utils/' },
191
+ { name: 'Templates', path: 'templates/' },
192
+ { name: 'Tests', path: 'tests/' }
193
+ ];
194
+ for (const layer of commonLayers) {
195
+ const hasFiles = items.some(i => i.filePath?.startsWith(layer.path));
196
+ if (hasFiles) {
197
+ layers.push({
198
+ name: layer.name,
199
+ path: layer.path
200
+ });
201
+ }
202
+ }
203
+ return layers;
204
+ }
205
+ /**
206
+ * Extract key modules
207
+ */
208
+ function extractKeyModules(items) {
209
+ return items
210
+ .filter(i => i.type === 'code' && i.name)
211
+ .map(i => i.name)
212
+ .slice(0, 10);
213
+ }
214
+ /**
215
+ * Extract integrations
216
+ */
217
+ function extractIntegrations(items) {
218
+ const integrations = [];
219
+ for (const item of items) {
220
+ const content = item.content || '';
221
+ if (content.includes('better-sqlite3'))
222
+ integrations.push('SQLite (better-sqlite3)');
223
+ if (content.includes('sqlite-vec'))
224
+ integrations.push('sqlite-vec');
225
+ if (content.includes('openrouter') || content.includes('OpenRouter'))
226
+ integrations.push('OpenRouter');
227
+ if (content.includes('commander'))
228
+ integrations.push('Commander.js');
229
+ if (content.includes('vitest'))
230
+ integrations.push('Vitest');
231
+ if (content.includes('inquirer'))
232
+ integrations.push('Inquirer');
233
+ }
234
+ return [...new Set(integrations)];
235
+ }
236
+ /**
237
+ * Extract key files data
238
+ */
239
+ function extractKeyFilesData(items) {
240
+ return {
241
+ entry_points: extractEntryPoints(items),
242
+ api_routes: extractApiRoutes(items),
243
+ config: extractConfigFiles(items),
244
+ tests: extractTestFiles(items)
245
+ };
246
+ }
247
+ /**
248
+ * Extract entry points
249
+ */
250
+ function extractEntryPoints(items) {
251
+ const entryPoints = [];
252
+ for (const item of items) {
253
+ if (item.filePath?.includes('bin/') || item.filePath?.includes('index.') || item.filePath?.includes('main.')) {
254
+ entryPoints.push(item.filePath);
255
+ }
256
+ }
257
+ return entryPoints.slice(0, 5);
258
+ }
259
+ /**
260
+ * Extract API routes
261
+ */
262
+ function extractApiRoutes(items) {
263
+ const routes = [];
264
+ for (const item of items) {
265
+ if (item.type === 'code' && (item.filePath?.includes('routes/') || item.filePath?.includes('api/'))) {
266
+ routes.push(item.filePath);
267
+ }
268
+ }
269
+ return routes.slice(0, 5);
270
+ }
271
+ /**
272
+ * Extract config files
273
+ */
274
+ function extractConfigFiles(items) {
275
+ return items
276
+ .filter(i => i.type === 'config' && i.filePath)
277
+ .map(i => i.filePath)
278
+ .slice(0, 5);
279
+ }
280
+ /**
281
+ * Extract test files
282
+ */
283
+ function extractTestFiles(items) {
284
+ return items
285
+ .filter(i => i.type === 'code' && (i.filePath?.includes('.test.') || i.filePath?.includes('.spec.')))
286
+ .map(i => i.filePath)
287
+ .slice(0, 5);
288
+ }
289
+ /**
290
+ * Extract commands data
291
+ */
292
+ async function extractCommandsData(projectRoot) {
293
+ const commands = {};
294
+ // Read package.json for scripts
295
+ try {
296
+ const packageJsonPath = path.join(projectRoot, 'package.json');
297
+ const packageJson = await fs.readFile(packageJsonPath, 'utf-8');
298
+ const packageData = JSON.parse(packageJson);
299
+ const scripts = packageData.scripts || {};
300
+ commands.install = 'npm install';
301
+ commands.dev = scripts.dev || scripts.start || 'npm run dev';
302
+ commands.test = scripts.test || 'npm test';
303
+ commands.build = scripts.build || 'npm run build';
304
+ commands.lint = scripts.lint || 'npm run lint';
305
+ commands.clean = scripts.clean || 'npm run clean';
306
+ }
307
+ catch {
308
+ // Fallback commands
309
+ commands.install = 'npm install';
310
+ commands.test = 'npm test';
311
+ commands.build = 'npm run build';
312
+ }
313
+ return commands;
314
+ }
315
+ /**
316
+ * Extract workflows data
317
+ */
318
+ function extractWorkflowsData(items) {
319
+ return items
320
+ .filter(i => i.type === 'workflow')
321
+ .slice(0, 10)
322
+ .map(item => ({
323
+ name: item.name,
324
+ category: item.metadata?.category,
325
+ complexity: item.metadata?.complexity,
326
+ description: item.content?.split('\n')[0]?.substring(0, 200) || '',
327
+ files: [item.filePath].filter(Boolean)
328
+ }));
329
+ }
330
+ /**
331
+ * Extract gotchas data
332
+ */
333
+ function extractGotchasData(items) {
334
+ return items
335
+ .filter(i => i.type === 'knowledge' && (i.name?.includes('gotcha') || i.name?.includes('issue')))
336
+ .slice(0, 10)
337
+ .map(item => ({
338
+ title: item.name,
339
+ description: item.content?.substring(0, 500) || '',
340
+ severity: item.metadata?.severity || 'medium'
341
+ }));
342
+ }
343
+ //# sourceMappingURL=data-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-transformer.js","sourceRoot":"","sources":["../../src/template-engine/data-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Template Engine
3
+ *
4
+ * Handlebars-based template engine for rich context generation.
5
+ */
6
+ import type { TemplateRenderOptions, TemplateRenderResult } from './types.js';
7
+ import type { DatabaseClient } from '../db/client.js';
8
+ /**
9
+ * Template engine class
10
+ *
11
+ * Manages Handlebars templates and rendering.
12
+ */
13
+ export declare class TemplateEngine {
14
+ private handlebars;
15
+ private templateCache;
16
+ private partialsCache;
17
+ private templatesDir;
18
+ private k0ntextVersion;
19
+ constructor(k0ntextVersion: string);
20
+ /**
21
+ * Render a template with data
22
+ *
23
+ * @param options - Template render options
24
+ * @param db - Database client
25
+ * @param projectRoot - Project root directory
26
+ * @returns Rendered content
27
+ */
28
+ render(options: TemplateRenderOptions, db: DatabaseClient, projectRoot: string): Promise<TemplateRenderResult>;
29
+ /**
30
+ * Load a template by name
31
+ *
32
+ * @param templateName - Name of the template (e.g., 'claude', 'copilot')
33
+ * @param loadPartials - Whether to load partials
34
+ * @returns Compiled template
35
+ */
36
+ private loadTemplate;
37
+ /**
38
+ * Load all partials from the partials directory
39
+ */
40
+ private loadPartials;
41
+ /**
42
+ * Merge custom data into template data
43
+ *
44
+ * @param base - Base template data
45
+ * @param custom - Custom data to merge
46
+ * @returns Merged data
47
+ */
48
+ private mergeData;
49
+ /**
50
+ * Check if a template exists
51
+ *
52
+ * @param templateName - Name of the template
53
+ * @returns True if template file exists
54
+ */
55
+ hasTemplate(templateName: string): Promise<boolean>;
56
+ /**
57
+ * Get list of available templates
58
+ *
59
+ * @returns Array of template names
60
+ */
61
+ getAvailableTemplates(): Promise<string[]>;
62
+ /**
63
+ * Clear template cache
64
+ */
65
+ clearCache(): void;
66
+ }
67
+ /**
68
+ * Create a template engine instance
69
+ *
70
+ * @param k0ntextVersion - Current k0ntext version
71
+ * @returns Template engine instance
72
+ */
73
+ export declare function createTemplateEngine(k0ntextVersion: string): TemplateEngine;
74
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/template-engine/engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAgB,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKtD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,aAAa,CAAsD;IAC3E,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,EAAE,MAAM;IASlC;;;;;;;OAOG;IACG,MAAM,CACV,OAAO,EAAE,qBAAqB,EAC9B,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,CAAC;IAsBhC;;;;;;OAMG;YACW,YAAY;IA8B1B;;OAEG;YACW,YAAY;IA4B1B;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAejB;;;;;OAKG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzD;;;;OAIG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWhD;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,CAE3E"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Template Engine
3
+ *
4
+ * Handlebars-based template engine for rich context generation.
5
+ */
6
+ import Handlebars from 'handlebars';
7
+ import fs from 'fs/promises';
8
+ import path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { registerHelpers } from './helpers.js';
11
+ import { buildTemplateData } from './data-transformer.js';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ /**
15
+ * Template engine class
16
+ *
17
+ * Manages Handlebars templates and rendering.
18
+ */
19
+ export class TemplateEngine {
20
+ handlebars;
21
+ templateCache = new Map();
22
+ partialsCache = new Set();
23
+ templatesDir;
24
+ k0ntextVersion;
25
+ constructor(k0ntextVersion) {
26
+ this.handlebars = Handlebars.create();
27
+ this.k0ntextVersion = k0ntextVersion;
28
+ this.templatesDir = path.join(__dirname, '../../templates/handlebars');
29
+ // Register custom helpers
30
+ registerHelpers(this.handlebars);
31
+ }
32
+ /**
33
+ * Render a template with data
34
+ *
35
+ * @param options - Template render options
36
+ * @param db - Database client
37
+ * @param projectRoot - Project root directory
38
+ * @returns Rendered content
39
+ */
40
+ async render(options, db, projectRoot) {
41
+ // Build template data from database
42
+ let templateData = await buildTemplateData(db, projectRoot, this.k0ntextVersion);
43
+ // Merge custom data if provided
44
+ if (options.customData) {
45
+ templateData = this.mergeData(templateData, options.customData);
46
+ }
47
+ // Load template
48
+ const template = await this.loadTemplate(options.template, options.usePartials !== false);
49
+ // Render template
50
+ const content = template(templateData);
51
+ return {
52
+ content,
53
+ template: options.template,
54
+ bytes: Buffer.byteLength(content, 'utf-8')
55
+ };
56
+ }
57
+ /**
58
+ * Load a template by name
59
+ *
60
+ * @param templateName - Name of the template (e.g., 'claude', 'copilot')
61
+ * @param loadPartials - Whether to load partials
62
+ * @returns Compiled template
63
+ */
64
+ async loadTemplate(templateName, loadPartials = true) {
65
+ // Check cache first
66
+ if (this.templateCache.has(templateName)) {
67
+ return this.templateCache.get(templateName);
68
+ }
69
+ // Load partials if needed
70
+ if (loadPartials && this.partialsCache.size === 0) {
71
+ await this.loadPartials();
72
+ }
73
+ // Read template file
74
+ const templatePath = path.join(this.templatesDir, `${templateName}.hbs`);
75
+ try {
76
+ const templateContent = await fs.readFile(templatePath, 'utf-8');
77
+ const template = this.handlebars.compile(templateContent);
78
+ // Cache compiled template
79
+ this.templateCache.set(templateName, template);
80
+ return template;
81
+ }
82
+ catch (error) {
83
+ throw new Error(`Failed to load template '${templateName}': ${error instanceof Error ? error.message : error}`);
84
+ }
85
+ }
86
+ /**
87
+ * Load all partials from the partials directory
88
+ */
89
+ async loadPartials() {
90
+ const partialsDir = path.join(this.templatesDir, 'partials');
91
+ try {
92
+ await fs.access(partialsDir);
93
+ }
94
+ catch {
95
+ // Partials directory doesn't exist
96
+ return;
97
+ }
98
+ const entries = await fs.readdir(partialsDir);
99
+ for (const entry of entries) {
100
+ if (!entry.endsWith('.hbs'))
101
+ continue;
102
+ const partialName = entry.replace('.hbs', '');
103
+ const partialPath = path.join(partialsDir, entry);
104
+ try {
105
+ const partialContent = await fs.readFile(partialPath, 'utf-8');
106
+ this.handlebars.registerPartial(partialName, partialContent);
107
+ this.partialsCache.add(partialName);
108
+ }
109
+ catch (error) {
110
+ console.warn(`Warning: Failed to load partial '${partialName}':`, error);
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Merge custom data into template data
116
+ *
117
+ * @param base - Base template data
118
+ * @param custom - Custom data to merge
119
+ * @returns Merged data
120
+ */
121
+ mergeData(base, custom) {
122
+ return {
123
+ project: { ...base.project, ...custom.project },
124
+ architecture: { ...base.architecture, ...custom.architecture },
125
+ key_files: { ...base.key_files, ...custom.key_files },
126
+ commands: { ...base.commands, ...custom.commands },
127
+ workflows: custom.workflows || base.workflows,
128
+ gotchas: custom.gotchas || base.gotchas,
129
+ critical_constraints: custom.critical_constraints || base.critical_constraints,
130
+ environment: custom.environment ? { ...base.environment, ...custom.environment } : base.environment,
131
+ metadata: { ...base.metadata, ...custom.metadata },
132
+ coordination: custom.coordination ? { ...base.coordination, ...custom.coordination } : base.coordination
133
+ };
134
+ }
135
+ /**
136
+ * Check if a template exists
137
+ *
138
+ * @param templateName - Name of the template
139
+ * @returns True if template file exists
140
+ */
141
+ async hasTemplate(templateName) {
142
+ const templatePath = path.join(this.templatesDir, `${templateName}.hbs`);
143
+ try {
144
+ await fs.access(templatePath);
145
+ return true;
146
+ }
147
+ catch {
148
+ return false;
149
+ }
150
+ }
151
+ /**
152
+ * Get list of available templates
153
+ *
154
+ * @returns Array of template names
155
+ */
156
+ async getAvailableTemplates() {
157
+ try {
158
+ const entries = await fs.readdir(this.templatesDir);
159
+ return entries
160
+ .filter(e => e.endsWith('.hbs') && !e.startsWith('.'))
161
+ .map(e => e.replace('.hbs', ''));
162
+ }
163
+ catch {
164
+ return [];
165
+ }
166
+ }
167
+ /**
168
+ * Clear template cache
169
+ */
170
+ clearCache() {
171
+ this.templateCache.clear();
172
+ }
173
+ }
174
+ /**
175
+ * Create a template engine instance
176
+ *
177
+ * @param k0ntextVersion - Current k0ntext version
178
+ * @returns Template engine instance
179
+ */
180
+ export function createTemplateEngine(k0ntextVersion) {
181
+ return new TemplateEngine(k0ntextVersion);
182
+ }
183
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/template-engine/engine.ts"],"names":[],"mappings":"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"}