k0ntext 3.3.1 → 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 +225 -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 +1 -0
- package/dist/cli/repl/index.d.ts.map +1 -1
- package/dist/cli/repl/index.js +18 -6
- package/dist/cli/repl/index.js.map +1 -1
- 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 +16 -6
- 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,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restore Command
|
|
3
|
+
*
|
|
4
|
+
* CLI command to restore AI tool config files from backups.
|
|
5
|
+
* Supports listing backups and restoring from specific backups.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import fs from 'fs/promises';
|
|
12
|
+
import { select, confirm } from '@inquirer/prompts';
|
|
13
|
+
import { BackupManager } from '../utils/backup-manager.js';
|
|
14
|
+
/**
|
|
15
|
+
* Parse git stash reference from backup path
|
|
16
|
+
*/
|
|
17
|
+
function parseGitStashRef(backupPath) {
|
|
18
|
+
if (backupPath.startsWith('git-stash:')) {
|
|
19
|
+
return { stashRef: backupPath.replace('git-stash:', '') };
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Restore from git stash
|
|
25
|
+
*/
|
|
26
|
+
async function restoreFromGitStash(stashRef, projectRoot, filePath) {
|
|
27
|
+
try {
|
|
28
|
+
const { execSync } = await import('child_process');
|
|
29
|
+
const relativePath = path.relative(projectRoot, filePath);
|
|
30
|
+
// Try to apply the stash
|
|
31
|
+
execSync(`git stash apply ${stashRef} -- "${relativePath}"`, {
|
|
32
|
+
cwd: projectRoot,
|
|
33
|
+
stdio: 'pipe'
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format backup info for display
|
|
43
|
+
*/
|
|
44
|
+
function formatBackupInfo(backupPath, tool) {
|
|
45
|
+
const gitStash = parseGitStashRef(backupPath);
|
|
46
|
+
if (gitStash) {
|
|
47
|
+
return `${chalk.cyan(tool.padEnd(12))} ${chalk.dim('Git stash:')} ${chalk.yellow(gitStash.stashRef)}`;
|
|
48
|
+
}
|
|
49
|
+
const fileName = path.basename(backupPath);
|
|
50
|
+
const dateMatch = fileName.match(/\.(\d{4}-\d{2}-\d{2}T[\d:.-]+)\.bak$/);
|
|
51
|
+
if (dateMatch) {
|
|
52
|
+
const date = new Date(dateMatch[1].replace(/-/g, ':'));
|
|
53
|
+
const formatted = date.toLocaleString();
|
|
54
|
+
return `${chalk.cyan(tool.padEnd(12))} ${chalk.dim('File:')} ${chalk.yellow(fileName)} ${chalk.dim(`(${formatted})`)}`;
|
|
55
|
+
}
|
|
56
|
+
return `${chalk.cyan(tool.padEnd(12))} ${chalk.yellow(backupPath)}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* List available backups for a tool
|
|
60
|
+
*/
|
|
61
|
+
async function listBackupsForTool(db, projectRoot, tool) {
|
|
62
|
+
const generatedFiles = db.getGeneratedFiles(tool);
|
|
63
|
+
return generatedFiles
|
|
64
|
+
.filter(f => f.backupPath)
|
|
65
|
+
.map(f => ({
|
|
66
|
+
tool,
|
|
67
|
+
backupPath: f.backupPath,
|
|
68
|
+
filePath: f.filePath,
|
|
69
|
+
generatedAt: f.generatedAt
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Restore command
|
|
74
|
+
*/
|
|
75
|
+
export const restoreCommand = new Command('restore')
|
|
76
|
+
.description('Restore AI tool config files from backups')
|
|
77
|
+
.option('--list', 'List available backups')
|
|
78
|
+
.option('--backup <path>', 'Restore from specific backup path')
|
|
79
|
+
.option('--tool <name>', 'Filter by tool name')
|
|
80
|
+
.option('--force', 'Restore without confirmation')
|
|
81
|
+
.action(async (options) => {
|
|
82
|
+
const spinner = ora();
|
|
83
|
+
const projectRoot = process.cwd();
|
|
84
|
+
try {
|
|
85
|
+
// Load database
|
|
86
|
+
const { DatabaseClient } = await import('../../db/client.js');
|
|
87
|
+
const db = new DatabaseClient(projectRoot);
|
|
88
|
+
const backupManager = new BackupManager(db, projectRoot);
|
|
89
|
+
// List mode
|
|
90
|
+
if (options.list) {
|
|
91
|
+
spinner.start('Finding backups...');
|
|
92
|
+
const tools = options.tool
|
|
93
|
+
? [options.tool]
|
|
94
|
+
: ['claude', 'copilot', 'cline', 'antigravity', 'windsurf', 'aider', 'continue', 'cursor', 'gemini'];
|
|
95
|
+
const allBackups = [];
|
|
96
|
+
for (const tool of tools) {
|
|
97
|
+
const backups = await listBackupsForTool(db, projectRoot, tool);
|
|
98
|
+
allBackups.push(...backups);
|
|
99
|
+
}
|
|
100
|
+
spinner.stop();
|
|
101
|
+
if (allBackups.length === 0) {
|
|
102
|
+
console.log(chalk.yellow('\nNo backups found.'));
|
|
103
|
+
console.log(chalk.dim('Generate context files first to create backups.\n'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
console.log(chalk.bold('\nAvailable Backups'));
|
|
107
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
108
|
+
for (const backup of allBackups) {
|
|
109
|
+
console.log(formatBackupInfo(backup.backupPath, backup.tool));
|
|
110
|
+
console.log(chalk.dim(` Target: ${backup.filePath}\n`));
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk.dim(`Run ${chalk.white('k0ntext restore --backup <path>')} to restore from a backup.\n`));
|
|
113
|
+
db.close();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Restore from specific backup
|
|
117
|
+
if (options.backup) {
|
|
118
|
+
const backupPath = options.backup;
|
|
119
|
+
const targetPath = await findTargetForBackup(db, backupPath, options.tool);
|
|
120
|
+
if (!targetPath) {
|
|
121
|
+
spinner.fail(chalk.red('Backup not found in database'));
|
|
122
|
+
console.log(chalk.dim('\nUse --list to see available backups.\n'));
|
|
123
|
+
db.close();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Confirm unless --force
|
|
127
|
+
if (!options.force) {
|
|
128
|
+
const confirmed = await confirm({
|
|
129
|
+
message: `Restore ${targetPath.filePath} from backup?`,
|
|
130
|
+
default: false
|
|
131
|
+
});
|
|
132
|
+
if (!confirmed) {
|
|
133
|
+
console.log(chalk.dim('\nRestore cancelled.\n'));
|
|
134
|
+
db.close();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
spinner.start('Restoring from backup...');
|
|
139
|
+
const success = await restoreFromBackup(backupPath, targetPath.filePath, projectRoot);
|
|
140
|
+
if (success) {
|
|
141
|
+
spinner.succeed(chalk.green('File restored successfully!'));
|
|
142
|
+
// Clear the user_modified flag since we restored the generated version
|
|
143
|
+
const tool = targetPath.tool;
|
|
144
|
+
db.upsertGeneratedFile({
|
|
145
|
+
tool,
|
|
146
|
+
filePath: targetPath.filePath,
|
|
147
|
+
contentHash: db.hashContent(await fs.readFile(targetPath.filePath, 'utf-8')),
|
|
148
|
+
backupPath: undefined // Clear backup after restore
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
spinner.fail(chalk.red('Restore failed'));
|
|
153
|
+
}
|
|
154
|
+
db.close();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Interactive mode
|
|
158
|
+
spinner.start('Loading backups...');
|
|
159
|
+
const tools = ['claude', 'copilot', 'cline', 'antigravity', 'windsurf', 'aider', 'continue', 'cursor', 'gemini'];
|
|
160
|
+
const allBackups = [];
|
|
161
|
+
for (const tool of tools) {
|
|
162
|
+
const backups = await listBackupsForTool(db, projectRoot, tool);
|
|
163
|
+
for (const backup of backups) {
|
|
164
|
+
allBackups.push({
|
|
165
|
+
...backup,
|
|
166
|
+
label: `${tool}: ${path.basename(backup.filePath)} (${backup.backupPath.split(':').pop()})`
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
spinner.stop();
|
|
171
|
+
if (allBackups.length === 0) {
|
|
172
|
+
console.log(chalk.yellow('\nNo backups found.'));
|
|
173
|
+
console.log(chalk.dim('Generate context files first to create backups.\n'));
|
|
174
|
+
db.close();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Prompt user to select backup
|
|
178
|
+
const selected = await select({
|
|
179
|
+
message: 'Select a backup to restore:',
|
|
180
|
+
choices: [
|
|
181
|
+
...allBackups.map(b => ({
|
|
182
|
+
name: b.label,
|
|
183
|
+
value: b
|
|
184
|
+
})),
|
|
185
|
+
{ name: 'Cancel', value: null }
|
|
186
|
+
]
|
|
187
|
+
});
|
|
188
|
+
if (!selected) {
|
|
189
|
+
console.log(chalk.dim('\nRestore cancelled.\n'));
|
|
190
|
+
db.close();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// Confirm restore
|
|
194
|
+
const confirmed = await confirm({
|
|
195
|
+
message: `Restore ${selected.filePath} from backup?`,
|
|
196
|
+
default: true
|
|
197
|
+
});
|
|
198
|
+
if (!confirmed) {
|
|
199
|
+
console.log(chalk.dim('\nRestore cancelled.\n'));
|
|
200
|
+
db.close();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
spinner.start('Restoring from backup...');
|
|
204
|
+
const success = await restoreFromBackup(selected.backupPath, selected.filePath, projectRoot);
|
|
205
|
+
if (success) {
|
|
206
|
+
spinner.succeed(chalk.green('File restored successfully!'));
|
|
207
|
+
// Clear the user_modified flag
|
|
208
|
+
const content = await fs.readFile(selected.filePath, 'utf-8');
|
|
209
|
+
db.upsertGeneratedFile({
|
|
210
|
+
tool: selected.tool,
|
|
211
|
+
filePath: selected.filePath,
|
|
212
|
+
contentHash: db.hashContent(content),
|
|
213
|
+
backupPath: undefined
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
spinner.fail(chalk.red('Restore failed'));
|
|
218
|
+
}
|
|
219
|
+
db.close();
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
spinner.fail('Restore failed');
|
|
223
|
+
console.error(chalk.red(`\nError: ${error instanceof Error ? error.message : error}`));
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
/**
|
|
228
|
+
* Find the target file path for a backup
|
|
229
|
+
*/
|
|
230
|
+
async function findTargetForBackup(db, backupPath, toolFilter) {
|
|
231
|
+
const tools = toolFilter
|
|
232
|
+
? [toolFilter]
|
|
233
|
+
: ['claude', 'copilot', 'cline', 'antigravity', 'windsurf', 'aider', 'continue', 'cursor', 'gemini'];
|
|
234
|
+
for (const tool of tools) {
|
|
235
|
+
const files = db.getGeneratedFiles(tool);
|
|
236
|
+
for (const file of files) {
|
|
237
|
+
if (file.backupPath === backupPath) {
|
|
238
|
+
return { tool, filePath: file.filePath };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Restore from a backup (file or git stash)
|
|
246
|
+
*/
|
|
247
|
+
async function restoreFromBackup(backupPath, targetPath, projectRoot) {
|
|
248
|
+
const gitStash = parseGitStashRef(backupPath);
|
|
249
|
+
if (gitStash) {
|
|
250
|
+
return await restoreFromGitStash(gitStash.stashRef, projectRoot, targetPath);
|
|
251
|
+
}
|
|
252
|
+
// File copy restore
|
|
253
|
+
try {
|
|
254
|
+
await fs.copyFile(backupPath, targetPath);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/cli/commands/restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Sync Command
|
|
3
|
+
*
|
|
4
|
+
* CLI command for syncing .claude/ templates from package templates/base/
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Sync templates command
|
|
9
|
+
*/
|
|
10
|
+
export declare const syncTemplatesCommand: Command;
|
|
11
|
+
/**
|
|
12
|
+
* Template status command (shows current sync status)
|
|
13
|
+
*/
|
|
14
|
+
export declare const templateStatusCommand: Command;
|
|
15
|
+
//# sourceMappingURL=sync-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-templates.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sync-templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,eAAO,MAAM,oBAAoB,SAqI7B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,qBAAqB,SAiD9B,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Sync Command
|
|
3
|
+
*
|
|
4
|
+
* CLI command for syncing .claude/ templates from package templates/base/
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { DatabaseClient } from '../../db/client.js';
|
|
8
|
+
import { TemplateSyncEngine } from '../../template-sync/index.js';
|
|
9
|
+
import { TEMPLATE_SUBDIRS } from '../../template-sync/types.js';
|
|
10
|
+
import ora from 'ora';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
// ES module __dirname equivalent
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = path.dirname(__filename);
|
|
17
|
+
/**
|
|
18
|
+
* Sync templates command
|
|
19
|
+
*/
|
|
20
|
+
export const syncTemplatesCommand = new Command('sync-templates')
|
|
21
|
+
.description('Sync .claude/ templates from package templates/base/')
|
|
22
|
+
.option('--dry-run', 'Show changes without applying them')
|
|
23
|
+
.option('--force', 'Auto-overwrite conflicts without prompting')
|
|
24
|
+
.option('--subdirs <dirs>', 'Comma-separated subdirectories to sync (commands,agents,schemas,standards,tools,automation)')
|
|
25
|
+
.option('-v, --verbose', 'Show detailed output including diffs')
|
|
26
|
+
.option('--no-archive', 'Skip archiving removed files')
|
|
27
|
+
.action(async (options) => {
|
|
28
|
+
const spinner = ora({ spinner: 'dots' }).start();
|
|
29
|
+
try {
|
|
30
|
+
// Parse subdirectories if provided
|
|
31
|
+
let subdirectories;
|
|
32
|
+
if (options.subdirs) {
|
|
33
|
+
const requestedDirs = options.subdirs.split(',').map((s) => s.trim().toLowerCase());
|
|
34
|
+
subdirectories = requestedDirs.filter((d) => TEMPLATE_SUBDIRS.includes(d));
|
|
35
|
+
if (subdirectories.length === 0) {
|
|
36
|
+
spinner.stop();
|
|
37
|
+
console.error(chalk.red(`\n✖ Error: No valid subdirectories provided`));
|
|
38
|
+
console.error(chalk.gray(` Valid options: ${TEMPLATE_SUBDIRS.join(', ')}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (subdirectories.length !== requestedDirs.length) {
|
|
42
|
+
const invalid = requestedDirs.filter((d) => !TEMPLATE_SUBDIRS.includes(d));
|
|
43
|
+
console.warn(chalk.yellow(`\n⚠ Warning: Invalid subdirectories ignored: ${invalid.join(', ')}`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Initialize database and engine
|
|
47
|
+
const db = new DatabaseClient(process.cwd());
|
|
48
|
+
// Path needs to go up from dist/cli/commands to the project root, then to templates/base
|
|
49
|
+
const templateRoot = path.resolve(__dirname, '../../../templates/base');
|
|
50
|
+
const engine = new TemplateSyncEngine(db, process.cwd(), templateRoot);
|
|
51
|
+
// Check status
|
|
52
|
+
spinner.text = 'Checking template sync status...';
|
|
53
|
+
const status = await engine.getStatusSummary();
|
|
54
|
+
spinner.stop();
|
|
55
|
+
if (status.manifestExists && status.templateVersion) {
|
|
56
|
+
console.log(chalk.gray(`\nCurrent template version: ${status.templateVersion}`));
|
|
57
|
+
console.log(chalk.gray(`Package version: ${status.currentVersion}`));
|
|
58
|
+
}
|
|
59
|
+
if (status.userModifiedFiles.length > 0) {
|
|
60
|
+
console.log(chalk.yellow(`\n⚠ ${status.userModifiedFiles.length} user-modified file(s) detected:`));
|
|
61
|
+
for (const file of status.userModifiedFiles.slice(0, 5)) {
|
|
62
|
+
console.log(chalk.dim(` • ${file}`));
|
|
63
|
+
}
|
|
64
|
+
if (status.userModifiedFiles.length > 5) {
|
|
65
|
+
console.log(chalk.dim(` ... and ${status.userModifiedFiles.length - 5} more`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Check if sync is actually needed (has files to sync)
|
|
69
|
+
if (!options.force) {
|
|
70
|
+
const { TemplateComparator } = await import('../../template-sync/index.js');
|
|
71
|
+
const comparator = new TemplateComparator(db, process.cwd(), path.resolve(__dirname, '../../../templates/base'), options.verbose);
|
|
72
|
+
const comparisonResult = await comparator.compare();
|
|
73
|
+
const actionableFiles = TemplateComparator.getActionableComparisons(comparisonResult.comparisons);
|
|
74
|
+
if (actionableFiles.length === 0 && status.manifestExists) {
|
|
75
|
+
console.log(chalk.green('\n✓ Templates are already up to date'));
|
|
76
|
+
db.close();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (actionableFiles.length > 0) {
|
|
80
|
+
console.log(chalk.cyan(`\n${actionableFiles.length} file(s) need syncing:`));
|
|
81
|
+
actionableFiles.slice(0, 5).forEach(f => console.log(chalk.dim(` • ${f.path}`)));
|
|
82
|
+
if (actionableFiles.length > 5) {
|
|
83
|
+
console.log(chalk.dim(` ... and ${actionableFiles.length - 5} more`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
console.log('');
|
|
88
|
+
// Configure sync options
|
|
89
|
+
const syncOptions = {
|
|
90
|
+
dryRun: options.dryRun ?? false,
|
|
91
|
+
force: options.force ?? false,
|
|
92
|
+
subdirectories: subdirectories,
|
|
93
|
+
verbose: options.verbose ?? false,
|
|
94
|
+
archiveRemoved: options.archive !== false
|
|
95
|
+
};
|
|
96
|
+
// Execute sync
|
|
97
|
+
const result = await engine.sync(syncOptions);
|
|
98
|
+
// Display results
|
|
99
|
+
if (!options.dryRun) {
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(chalk.bold('Sync Summary:'));
|
|
102
|
+
console.log(chalk.cyan(` Total files: ${result.total}`));
|
|
103
|
+
console.log(chalk.green(` Updated: ${result.updated}`));
|
|
104
|
+
console.log(chalk.cyan(` Created: ${result.created}`));
|
|
105
|
+
console.log(chalk.yellow(` Skipped: ${result.skipped.length}`));
|
|
106
|
+
if (result.conflicts.length > 0) {
|
|
107
|
+
console.log(chalk.red(` Conflicts: ${result.conflicts.length}`));
|
|
108
|
+
for (const conflict of result.conflicts.slice(0, 3)) {
|
|
109
|
+
console.log(chalk.dim(` - ${conflict.path}`));
|
|
110
|
+
}
|
|
111
|
+
if (result.conflicts.length > 3) {
|
|
112
|
+
console.log(chalk.dim(` ... and ${result.conflicts.length - 3} more`));
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk.gray('\n Run again to resolve conflicts individually'));
|
|
115
|
+
}
|
|
116
|
+
if (result.userOnly.length > 0 && options.archive !== false) {
|
|
117
|
+
console.log(chalk.gray(` Archived: ${result.userOnly.length} removed file(s)`));
|
|
118
|
+
}
|
|
119
|
+
console.log(chalk.gray(` Duration: ${result.durationMs}ms`));
|
|
120
|
+
if (result.conflicts.length === 0) {
|
|
121
|
+
console.log(chalk.green('\n✓ Template sync complete!'));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(chalk.yellow('\n⚠ Template sync complete with unresolved conflicts'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
db.close();
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
spinner.fail(chalk.red('Sync failed'));
|
|
131
|
+
console.error(chalk.dim(error instanceof Error ? error.message : String(error)));
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
/**
|
|
136
|
+
* Template status command (shows current sync status)
|
|
137
|
+
*/
|
|
138
|
+
export const templateStatusCommand = new Command('template-status')
|
|
139
|
+
.description('Show template sync status')
|
|
140
|
+
.option('-v, --verbose', 'Show detailed status')
|
|
141
|
+
.action(async (options) => {
|
|
142
|
+
const spinner = ora({ spinner: 'dots' }).start();
|
|
143
|
+
try {
|
|
144
|
+
const db = new DatabaseClient(process.cwd());
|
|
145
|
+
const templateRoot = path.resolve(__dirname, '../../templates/base');
|
|
146
|
+
const engine = new TemplateSyncEngine(db, process.cwd(), templateRoot);
|
|
147
|
+
const status = await engine.getStatusSummary();
|
|
148
|
+
spinner.stop();
|
|
149
|
+
console.log('');
|
|
150
|
+
console.log(chalk.bold('Template Sync Status:\n'));
|
|
151
|
+
console.log(`${chalk.cyan('Package Version:')} ${status.currentVersion}`);
|
|
152
|
+
if (status.manifestExists) {
|
|
153
|
+
console.log(`${chalk.cyan('Template Version:')} ${status.templateVersion || 'unknown'}`);
|
|
154
|
+
if (status.needsUpdate) {
|
|
155
|
+
console.log(chalk.yellow(' ⚠ Templates are outdated'));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.log(chalk.green(' ✓ Templates are up to date'));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(chalk.yellow(' No manifest found - run sync to initialize'));
|
|
163
|
+
}
|
|
164
|
+
if (status.userModifiedFiles.length > 0) {
|
|
165
|
+
console.log(`\n${chalk.cyan('User-Modified Files:')} ${status.userModifiedFiles.length}`);
|
|
166
|
+
if (options.verbose) {
|
|
167
|
+
for (const file of status.userModifiedFiles) {
|
|
168
|
+
console.log(chalk.dim(` • ${file}`));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
console.log('');
|
|
173
|
+
db.close();
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
spinner.fail(chalk.red('Status check failed'));
|
|
177
|
+
console.error(chalk.dim(error instanceof Error ? error.message : String(error)));
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=sync-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-templates.js","sourceRoot":"","sources":["../../../src/cli/commands/sync-templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,iCAAiC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;KACzD,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC/D,MAAM,CAAC,kBAAkB,EAAE,6FAA6F,CAAC;KACzH,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,mCAAmC;QACnC,IAAI,cAAc,CAAC;QACnB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5F,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAQ,CAAC,CAAC,CAAC;YAE1F,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAQ,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gDAAgD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,yFAAyF;QACzF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAEvE,eAAe;QACf,OAAO,CAAC,IAAI,GAAG,kCAAkC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAE/C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,MAAM,kCAAkC,CAAC,CAAC,CAAC;YACpG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAClI,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YAEpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAElG,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBACjE,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,MAAM,wBAAwB,CAAC,CAAC,CAAC;gBAC7E,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,eAAe,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,yBAAyB;QACzB,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;YAC7B,cAAc,EAAE,cAAqB;YACrC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,cAAc,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK;SAC1C,CAAC;QAEF,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9C,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAEjE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAClE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnD,CAAC;gBACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;YAE9D,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAChE,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAE/C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAE1E,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,SAAS,EAAE,CAAC,CAAC;YAEzF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1F,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Check Command
|
|
3
|
+
*
|
|
4
|
+
* CLI command to check if context files are outdated.
|
|
5
|
+
* Users can run this independently or it will be integrated into `init`.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Version check command
|
|
10
|
+
*/
|
|
11
|
+
export declare const versionCheckCommand: Command;
|
|
12
|
+
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/version-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC;;GAEG;AACH,eAAO,MAAM,mBAAmB,SAqF5B,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Check Command
|
|
3
|
+
*
|
|
4
|
+
* CLI command to check if context files are outdated.
|
|
5
|
+
* Users can run this independently or it will be integrated into `init`.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
const packageJsonPath = path.join(__dirname, '../../../package.json');
|
|
16
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
17
|
+
const K0NTEXT_VERSION = packageJson.version;
|
|
18
|
+
import { checkContextFiles, showVersionSummary, promptRegeneration } from '../version/index.js';
|
|
19
|
+
/**
|
|
20
|
+
* Perform regeneration of outdated files
|
|
21
|
+
*
|
|
22
|
+
* @param outdatedFiles - Files to regenerate
|
|
23
|
+
* @param projectRoot - Project root directory
|
|
24
|
+
*/
|
|
25
|
+
async function regenerateFiles(outdatedFiles, projectRoot) {
|
|
26
|
+
const { DatabaseClient } = await import('../../db/client.js');
|
|
27
|
+
const db = new DatabaseClient(projectRoot);
|
|
28
|
+
// Check database has content
|
|
29
|
+
const stats = db.getStats();
|
|
30
|
+
if (stats.items === 0) {
|
|
31
|
+
console.log(chalk.yellow('⚠ No context in database. Run `k0ntext index` first.'));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const { generateForTool } = await import('../generate.js');
|
|
35
|
+
const spinner = ora('Regenerating context files...');
|
|
36
|
+
for (const file of outdatedFiles) {
|
|
37
|
+
spinner.text = `Regenerating ${file.tool} context...`;
|
|
38
|
+
try {
|
|
39
|
+
const resultPath = await generateForTool(file.tool, db, true, false, { verbose: false });
|
|
40
|
+
if (resultPath) {
|
|
41
|
+
spinner.succeed(chalk.green(`✓ Regenerated ${file.tool} context`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
spinner.fail(chalk.red(`✗ Failed to regenerate ${file.tool}`));
|
|
46
|
+
if (error instanceof Error) {
|
|
47
|
+
console.error(chalk.dim(error.message));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
spinner.start();
|
|
51
|
+
}
|
|
52
|
+
spinner.stop();
|
|
53
|
+
db.close();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Version check command
|
|
57
|
+
*/
|
|
58
|
+
export const versionCheckCommand = new Command('check')
|
|
59
|
+
.description('Check if context files are outdated')
|
|
60
|
+
.option('--update', 'Prompt to update outdated files')
|
|
61
|
+
.option('--force', 'Update without prompting')
|
|
62
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
63
|
+
.action(async (options) => {
|
|
64
|
+
const spinner = ora();
|
|
65
|
+
const projectRoot = process.cwd();
|
|
66
|
+
const verbose = options.verbose || false;
|
|
67
|
+
try {
|
|
68
|
+
spinner.start('Checking context file versions...');
|
|
69
|
+
// Load database for modification detection
|
|
70
|
+
let db;
|
|
71
|
+
try {
|
|
72
|
+
const { DatabaseClient } = await import('../../db/client.js');
|
|
73
|
+
db = new DatabaseClient(projectRoot);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Database might not exist, that's okay
|
|
77
|
+
}
|
|
78
|
+
// Check versions
|
|
79
|
+
const result = await checkContextFiles({
|
|
80
|
+
projectRoot,
|
|
81
|
+
currentVersion: K0NTEXT_VERSION,
|
|
82
|
+
checkModifications: !!db
|
|
83
|
+
}, db);
|
|
84
|
+
spinner.stop();
|
|
85
|
+
// Show summary
|
|
86
|
+
showVersionSummary(result);
|
|
87
|
+
// Close database if opened
|
|
88
|
+
if (db) {
|
|
89
|
+
db.close();
|
|
90
|
+
}
|
|
91
|
+
// Handle updates
|
|
92
|
+
if (result.outdated.length > 0 && options.update) {
|
|
93
|
+
if (options.force) {
|
|
94
|
+
// Update without prompting
|
|
95
|
+
console.log(chalk.bold('\nRegenerating files...'));
|
|
96
|
+
await regenerateFiles(result.outdated, projectRoot);
|
|
97
|
+
console.log(chalk.green('\n✓ All files regenerated successfully!'));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Prompt user
|
|
101
|
+
const promptResult = await promptRegeneration(result.outdated);
|
|
102
|
+
if (promptResult.choice === 'skip') {
|
|
103
|
+
console.log(chalk.dim('\nSkipped. Run `k0ntext check --update` later.'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
let filesToRegenerate = result.outdated;
|
|
107
|
+
// Filter by user selection if needed
|
|
108
|
+
if (promptResult.choice === 'select' && promptResult.selectedTools) {
|
|
109
|
+
filesToRegenerate = result.outdated.filter(f => promptResult.selectedTools?.includes(f.tool));
|
|
110
|
+
}
|
|
111
|
+
// Skip modified files if user chose not to include them
|
|
112
|
+
if (!promptResult.includeModified) {
|
|
113
|
+
filesToRegenerate = filesToRegenerate.filter(f => !f.userModified);
|
|
114
|
+
}
|
|
115
|
+
console.log(chalk.bold('\nRegenerating files...'));
|
|
116
|
+
await regenerateFiles(filesToRegenerate, projectRoot);
|
|
117
|
+
console.log(chalk.green('\n✓ Files regenerated successfully!'));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (result.outdated.length > 0) {
|
|
121
|
+
console.log(chalk.dim(`\nRun ${chalk.white('k0ntext check --update')} to update outdated files.`));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
spinner.fail('Version check failed');
|
|
126
|
+
console.error(chalk.red(`\nError: ${error instanceof Error ? error.message : error}`));
|
|
127
|
+
if (verbose && error instanceof Error) {
|
|
128
|
+
console.error(chalk.dim(error.stack));
|
|
129
|
+
}
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/cli/commands/version-check.ts"],"names":[],"mappings":"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"}
|