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.
- package/README.md +240 -26
- package/dist/agents/cleanup-agent.d.ts.map +1 -1
- package/dist/agents/cleanup-agent.js +18 -6
- package/dist/agents/cleanup-agent.js.map +1 -1
- package/dist/agents/drift-agent.d.ts +7 -0
- package/dist/agents/drift-agent.d.ts.map +1 -1
- package/dist/agents/drift-agent.js +29 -8
- package/dist/agents/drift-agent.js.map +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +8 -1
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/drift-detect.d.ts.map +1 -1
- package/dist/cli/commands/drift-detect.js +21 -1
- package/dist/cli/commands/drift-detect.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +12 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +261 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/sync-templates.d.ts +15 -0
- package/dist/cli/commands/sync-templates.d.ts.map +1 -0
- package/dist/cli/commands/sync-templates.js +181 -0
- package/dist/cli/commands/sync-templates.js.map +1 -0
- package/dist/cli/commands/version-check.d.ts +12 -0
- package/dist/cli/commands/version-check.d.ts.map +1 -0
- package/dist/cli/commands/version-check.js +133 -0
- package/dist/cli/commands/version-check.js.map +1 -0
- package/dist/cli/generate.d.ts +5 -0
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +80 -16
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/index.js +145 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl/index.d.ts +4 -0
- package/dist/cli/repl/index.d.ts.map +1 -1
- package/dist/cli/repl/index.js +113 -95
- package/dist/cli/repl/index.js.map +1 -1
- package/dist/cli/repl/tui/panels/config.d.ts +71 -0
- package/dist/cli/repl/tui/panels/config.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/config.js +392 -0
- package/dist/cli/repl/tui/panels/config.js.map +1 -0
- package/dist/cli/repl/tui/panels/drift.d.ts +95 -0
- package/dist/cli/repl/tui/panels/drift.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/drift.js +353 -0
- package/dist/cli/repl/tui/panels/drift.js.map +1 -0
- package/dist/cli/repl/tui/panels/indexing.d.ts +86 -0
- package/dist/cli/repl/tui/panels/indexing.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/indexing.js +254 -0
- package/dist/cli/repl/tui/panels/indexing.js.map +1 -0
- package/dist/cli/repl/tui/panels/search.d.ts +66 -0
- package/dist/cli/repl/tui/panels/search.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/search.js +215 -0
- package/dist/cli/repl/tui/panels/search.js.map +1 -0
- package/dist/cli/utils/backup-manager.d.ts +94 -0
- package/dist/cli/utils/backup-manager.d.ts.map +1 -0
- package/dist/cli/utils/backup-manager.js +230 -0
- package/dist/cli/utils/backup-manager.js.map +1 -0
- package/dist/cli/utils/file-detector.d.ts +87 -0
- package/dist/cli/utils/file-detector.d.ts.map +1 -0
- package/dist/cli/utils/file-detector.js +131 -0
- package/dist/cli/utils/file-detector.js.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +9 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/modification-prompt.d.ts +41 -0
- package/dist/cli/utils/modification-prompt.d.ts.map +1 -0
- package/dist/cli/utils/modification-prompt.js +84 -0
- package/dist/cli/utils/modification-prompt.js.map +1 -0
- package/dist/cli/version/checker.d.ts +47 -0
- package/dist/cli/version/checker.d.ts.map +1 -0
- package/dist/cli/version/checker.js +143 -0
- package/dist/cli/version/checker.js.map +1 -0
- package/dist/cli/version/comparator.d.ts +46 -0
- package/dist/cli/version/comparator.d.ts.map +1 -0
- package/dist/cli/version/comparator.js +99 -0
- package/dist/cli/version/comparator.js.map +1 -0
- package/dist/cli/version/index.d.ts +11 -0
- package/dist/cli/version/index.d.ts.map +1 -0
- package/dist/cli/version/index.js +11 -0
- package/dist/cli/version/index.js.map +1 -0
- package/dist/cli/version/parser.d.ts +38 -0
- package/dist/cli/version/parser.d.ts.map +1 -0
- package/dist/cli/version/parser.js +90 -0
- package/dist/cli/version/parser.js.map +1 -0
- package/dist/cli/version/prompt.d.ts +40 -0
- package/dist/cli/version/prompt.d.ts.map +1 -0
- package/dist/cli/version/prompt.js +162 -0
- package/dist/cli/version/prompt.js.map +1 -0
- package/dist/cli/version/types.d.ts +89 -0
- package/dist/cli/version/types.d.ts.map +1 -0
- package/dist/cli/version/types.js +7 -0
- package/dist/cli/version/types.js.map +1 -0
- package/dist/db/client.d.ts +64 -2
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +148 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/schema.d.ts +41 -2
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +77 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/mcp.js +2 -2
- package/dist/mcp.js.map +1 -1
- package/dist/template-engine/data-transformer.d.ts +17 -0
- package/dist/template-engine/data-transformer.d.ts.map +1 -0
- package/dist/template-engine/data-transformer.js +343 -0
- package/dist/template-engine/data-transformer.js.map +1 -0
- package/dist/template-engine/engine.d.ts +74 -0
- package/dist/template-engine/engine.d.ts.map +1 -0
- package/dist/template-engine/engine.js +183 -0
- package/dist/template-engine/engine.js.map +1 -0
- package/dist/template-engine/helpers.d.ts +81 -0
- package/dist/template-engine/helpers.d.ts.map +1 -0
- package/dist/template-engine/helpers.js +153 -0
- package/dist/template-engine/helpers.js.map +1 -0
- package/dist/template-engine/index.d.ts +10 -0
- package/dist/template-engine/index.d.ts.map +1 -0
- package/dist/template-engine/index.js +10 -0
- package/dist/template-engine/index.js.map +1 -0
- package/dist/template-engine/types.d.ts +147 -0
- package/dist/template-engine/types.d.ts.map +1 -0
- package/dist/template-engine/types.js +7 -0
- package/dist/template-engine/types.js.map +1 -0
- package/dist/template-sync/comparator.d.ts +138 -0
- package/dist/template-sync/comparator.d.ts.map +1 -0
- package/dist/template-sync/comparator.js +353 -0
- package/dist/template-sync/comparator.js.map +1 -0
- package/dist/template-sync/conflict-resolver.d.ts +112 -0
- package/dist/template-sync/conflict-resolver.d.ts.map +1 -0
- package/dist/template-sync/conflict-resolver.js +328 -0
- package/dist/template-sync/conflict-resolver.js.map +1 -0
- package/dist/template-sync/engine.d.ts +93 -0
- package/dist/template-sync/engine.d.ts.map +1 -0
- package/dist/template-sync/engine.js +350 -0
- package/dist/template-sync/engine.js.map +1 -0
- package/dist/template-sync/hasher.d.ts +67 -0
- package/dist/template-sync/hasher.d.ts.map +1 -0
- package/dist/template-sync/hasher.js +94 -0
- package/dist/template-sync/hasher.js.map +1 -0
- package/dist/template-sync/index.d.ts +20 -0
- package/dist/template-sync/index.d.ts.map +1 -0
- package/dist/template-sync/index.js +14 -0
- package/dist/template-sync/index.js.map +1 -0
- package/dist/template-sync/manifest.d.ts +131 -0
- package/dist/template-sync/manifest.d.ts.map +1 -0
- package/dist/template-sync/manifest.js +309 -0
- package/dist/template-sync/manifest.js.map +1 -0
- package/dist/template-sync/merger.d.ts +125 -0
- package/dist/template-sync/merger.d.ts.map +1 -0
- package/dist/template-sync/merger.js +371 -0
- package/dist/template-sync/merger.js.map +1 -0
- package/dist/template-sync/scanner.d.ts +106 -0
- package/dist/template-sync/scanner.d.ts.map +1 -0
- package/dist/template-sync/scanner.js +196 -0
- package/dist/template-sync/scanner.js.map +1 -0
- package/dist/template-sync/types.d.ts +199 -0
- package/dist/template-sync/types.d.ts.map +1 -0
- package/dist/template-sync/types.js +30 -0
- package/dist/template-sync/types.js.map +1 -0
- package/package.json +2 -1
- package/src/agents/cleanup-agent.ts +21 -6
- package/src/agents/drift-agent.ts +31 -8
- package/src/cli/commands/cleanup.ts +9 -1
- package/src/cli/commands/drift-detect.ts +24 -1
- package/src/cli/commands/restore.ts +318 -0
- package/src/cli/commands/sync-templates.ts +210 -0
- package/src/cli/commands/version-check.ts +158 -0
- package/src/cli/generate.ts +99 -17
- package/src/cli/index.ts +167 -1
- package/src/cli/repl/index.ts +118 -105
- package/src/cli/repl/tui/panels/config.ts +457 -0
- package/src/cli/repl/tui/panels/drift.ts +458 -0
- package/src/cli/repl/tui/panels/indexing.ts +324 -0
- package/src/cli/repl/tui/panels/search.ts +272 -0
- package/src/cli/utils/backup-manager.ts +275 -0
- package/src/cli/utils/file-detector.ts +181 -0
- package/src/cli/utils/index.ts +9 -0
- package/src/cli/utils/modification-prompt.ts +112 -0
- package/src/cli/version/checker.ts +172 -0
- package/src/cli/version/comparator.ts +106 -0
- package/src/cli/version/index.ts +11 -0
- package/src/cli/version/parser.ts +101 -0
- package/src/cli/version/prompt.ts +208 -0
- package/src/cli/version/types.ts +95 -0
- package/src/db/client.ts +220 -3
- package/src/db/schema.ts +109 -2
- package/src/mcp.ts +2 -2
- package/src/template-engine/data-transformer.ts +367 -0
- package/src/template-engine/engine.ts +213 -0
- package/src/template-engine/helpers.ts +163 -0
- package/src/template-engine/index.ts +10 -0
- package/src/template-engine/types.ts +158 -0
- package/src/template-sync/comparator.ts +452 -0
- package/src/template-sync/conflict-resolver.ts +401 -0
- package/src/template-sync/engine.ts +417 -0
- package/src/template-sync/hasher.ts +104 -0
- package/src/template-sync/index.ts +60 -0
- package/src/template-sync/manifest.ts +358 -0
- package/src/template-sync/merger.ts +454 -0
- package/src/template-sync/scanner.ts +254 -0
- 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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"}
|