koneck 1.0.3 → 2.1.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 (72) hide show
  1. package/dist/auto-docs.d.ts +4 -0
  2. package/dist/auto-docs.d.ts.map +1 -0
  3. package/dist/auto-docs.js +57 -0
  4. package/dist/auto-docs.js.map +1 -0
  5. package/dist/chat.d.ts.map +1 -1
  6. package/dist/chat.js +290 -0
  7. package/dist/chat.js.map +1 -1
  8. package/dist/code-graph.d.ts +14 -0
  9. package/dist/code-graph.d.ts.map +1 -0
  10. package/dist/code-graph.js +167 -0
  11. package/dist/code-graph.js.map +1 -0
  12. package/dist/critique.d.ts +4 -0
  13. package/dist/critique.d.ts.map +1 -0
  14. package/dist/critique.js +36 -0
  15. package/dist/critique.js.map +1 -0
  16. package/dist/daemon.d.ts +3 -0
  17. package/dist/daemon.d.ts.map +1 -0
  18. package/dist/daemon.js +111 -0
  19. package/dist/daemon.js.map +1 -0
  20. package/dist/debugger.d.ts +4 -0
  21. package/dist/debugger.d.ts.map +1 -0
  22. package/dist/debugger.js +104 -0
  23. package/dist/debugger.js.map +1 -0
  24. package/dist/engine.d.ts +5 -0
  25. package/dist/engine.d.ts.map +1 -1
  26. package/dist/engine.js +22 -5
  27. package/dist/engine.js.map +1 -1
  28. package/dist/health.d.ts +2 -0
  29. package/dist/health.d.ts.map +1 -0
  30. package/dist/health.js +201 -0
  31. package/dist/health.js.map +1 -0
  32. package/dist/index.js +167 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/issues.d.ts +3 -0
  35. package/dist/issues.d.ts.map +1 -0
  36. package/dist/issues.js +77 -0
  37. package/dist/issues.js.map +1 -0
  38. package/dist/knowledge-graph.d.ts +3 -0
  39. package/dist/knowledge-graph.d.ts.map +1 -0
  40. package/dist/knowledge-graph.js +85 -0
  41. package/dist/knowledge-graph.js.map +1 -0
  42. package/dist/memory.d.ts +7 -0
  43. package/dist/memory.d.ts.map +1 -1
  44. package/dist/memory.js +89 -2
  45. package/dist/memory.js.map +1 -1
  46. package/dist/pipeline.d.ts +3 -0
  47. package/dist/pipeline.d.ts.map +1 -0
  48. package/dist/pipeline.js +79 -0
  49. package/dist/pipeline.js.map +1 -0
  50. package/dist/plugin-packs.d.ts +14 -0
  51. package/dist/plugin-packs.d.ts.map +1 -0
  52. package/dist/plugin-packs.js +136 -0
  53. package/dist/plugin-packs.js.map +1 -0
  54. package/dist/reasoning-cache.d.ts +9 -0
  55. package/dist/reasoning-cache.d.ts.map +1 -0
  56. package/dist/reasoning-cache.js +67 -0
  57. package/dist/reasoning-cache.js.map +1 -0
  58. package/dist/recon.d.ts +2 -0
  59. package/dist/recon.d.ts.map +1 -0
  60. package/dist/recon.js +121 -0
  61. package/dist/recon.js.map +1 -0
  62. package/dist/refactor.d.ts +10 -0
  63. package/dist/refactor.d.ts.map +1 -0
  64. package/dist/refactor.js +182 -0
  65. package/dist/refactor.js.map +1 -0
  66. package/dist/test-gen.d.ts +3 -0
  67. package/dist/test-gen.d.ts.map +1 -0
  68. package/dist/test-gen.js +136 -0
  69. package/dist/test-gen.js.map +1 -0
  70. package/dist/types.d.ts +16 -0
  71. package/dist/types.d.ts.map +1 -1
  72. package/package.json +2 -2
@@ -0,0 +1,67 @@
1
+ import { readFile, writeFile, mkdir, readdir, unlink, stat } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import path from 'path';
4
+ function hashKey(s) {
5
+ let h = 5381;
6
+ for (let i = 0; i < s.length; i++)
7
+ h = ((h << 5) + h) ^ s.charCodeAt(i);
8
+ return (h >>> 0).toString(16);
9
+ }
10
+ function cacheDir(cwd) {
11
+ return path.join(cwd, '.koneck', 'cache');
12
+ }
13
+ function entryPath(cwd, key) {
14
+ return path.join(cacheDir(cwd), `${hashKey(key)}.json`);
15
+ }
16
+ export async function getCached(key, cwd) {
17
+ const file = entryPath(cwd, key);
18
+ if (!existsSync(file))
19
+ return null;
20
+ try {
21
+ const entry = JSON.parse(await readFile(file, 'utf8'));
22
+ if (Date.now() > entry.expiresAt) {
23
+ await unlink(file).catch(() => { });
24
+ return null;
25
+ }
26
+ return entry.value;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ export async function setCached(key, value, cwd, ttlSeconds = 3600) {
33
+ await mkdir(cacheDir(cwd), { recursive: true });
34
+ const entry = { key, value, expiresAt: Date.now() + ttlSeconds * 1000 };
35
+ await writeFile(entryPath(cwd, key), JSON.stringify(entry));
36
+ }
37
+ export async function clearCache(cwd) {
38
+ const dir = cacheDir(cwd);
39
+ if (!existsSync(dir)) {
40
+ console.log('Reasoning cache cleared.');
41
+ return;
42
+ }
43
+ const files = await readdir(dir);
44
+ await Promise.all(files.map(f => unlink(path.join(dir, f))));
45
+ console.log('Reasoning cache cleared.');
46
+ }
47
+ export async function getCacheStats(cwd) {
48
+ const dir = cacheDir(cwd);
49
+ if (!existsSync(dir))
50
+ return { entries: 0, sizeKb: 0, oldestEntry: null };
51
+ const files = await readdir(dir);
52
+ if (files.length === 0)
53
+ return { entries: 0, sizeKb: 0, oldestEntry: null };
54
+ let totalBytes = 0;
55
+ let oldestMtime = Infinity;
56
+ let oldestEntry = null;
57
+ for (const f of files) {
58
+ const info = await stat(path.join(dir, f));
59
+ totalBytes += info.size;
60
+ if (info.mtimeMs < oldestMtime) {
61
+ oldestMtime = info.mtimeMs;
62
+ oldestEntry = new Date(info.mtimeMs).toISOString();
63
+ }
64
+ }
65
+ return { entries: files.length, sizeKb: Math.round(totalBytes / 1024), oldestEntry };
66
+ }
67
+ //# sourceMappingURL=reasoning-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-cache.js","sourceRoot":"","sources":["../src/reasoning-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function gatherRecon(task: string, cwd: string): Promise<string>;
2
+ //# sourceMappingURL=recon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon.d.ts","sourceRoot":"","sources":["../src/recon.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkH5E"}
package/dist/recon.js ADDED
@@ -0,0 +1,121 @@
1
+ import { readFile, stat } from 'fs/promises';
2
+ import { execa } from 'execa';
3
+ import { globby } from 'globby';
4
+ import chalk from 'chalk';
5
+ const MAX_KEYWORDS = 15;
6
+ const MAX_GREP_KEYWORDS = 3;
7
+ const MAX_FILES_PER_KEYWORD = 5;
8
+ const MAX_TOTAL_FILES = 8;
9
+ const SNIPPET_LINES = 60;
10
+ const MAX_FILE_BYTES = 100 * 1024; // 100 KB
11
+ const MIN_CONTENT_LENGTH = 100;
12
+ export async function gatherRecon(task, cwd) {
13
+ try {
14
+ // 1. Extract keywords
15
+ const keywords = task
16
+ .split(/[\s\W]+/)
17
+ .filter(t => t.length > 3)
18
+ .filter((t, i, a) => a.indexOf(t) === i)
19
+ .slice(0, MAX_KEYWORDS);
20
+ console.log(chalk.dim(`↳ recon: keywords → ${keywords.slice(0, MAX_GREP_KEYWORDS).join(', ')}`));
21
+ // 2. Grep for symbols across .ts/.js/.py/.go files
22
+ const grepKeywords = keywords.slice(0, MAX_GREP_KEYWORDS);
23
+ const foundFiles = new Set();
24
+ for (const kw of grepKeywords) {
25
+ try {
26
+ const { stdout } = await execa('grep', [
27
+ '-rn',
28
+ '--include=*.ts',
29
+ '--include=*.js',
30
+ '--include=*.py',
31
+ '--include=*.go',
32
+ '-l',
33
+ kw,
34
+ '.',
35
+ ], { cwd, reject: false });
36
+ const paths = stdout.trim().split('\n').filter(Boolean).slice(0, MAX_FILES_PER_KEYWORD);
37
+ for (const p of paths)
38
+ foundFiles.add(p.replace(/^\.\//, ''));
39
+ }
40
+ catch {
41
+ // grep failure is non-fatal
42
+ }
43
+ }
44
+ // 3. Check for test files mentioning keywords
45
+ try {
46
+ const testPatterns = ['**/*.test.*', '**/*.spec.*', '**/__tests__/**/*'];
47
+ const testFiles = await globby(testPatterns, {
48
+ cwd,
49
+ ignore: ['node_modules/**', 'dist/**'],
50
+ absolute: false,
51
+ });
52
+ for (const kw of grepKeywords) {
53
+ for (const tf of testFiles) {
54
+ if (tf.toLowerCase().includes(kw.toLowerCase())) {
55
+ foundFiles.add(tf);
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // non-fatal
63
+ }
64
+ // 4. Read snippets (max 8 files, skip >100 KB)
65
+ const filesToRead = [...foundFiles].slice(0, MAX_TOTAL_FILES);
66
+ const snippets = [];
67
+ for (const rel of filesToRead) {
68
+ try {
69
+ const abs = rel.startsWith('/') ? rel : `${cwd}/${rel}`;
70
+ const s = await stat(abs);
71
+ if (s.size > MAX_FILE_BYTES)
72
+ continue;
73
+ const content = await readFile(abs, 'utf8');
74
+ const first60 = content.split('\n').slice(0, SNIPPET_LINES).join('\n');
75
+ snippets.push(`--- ${rel} (first ${SNIPPET_LINES} lines) ---\n${first60}`);
76
+ }
77
+ catch {
78
+ // non-fatal
79
+ }
80
+ }
81
+ console.log(chalk.dim(`↳ recon: ${filesToRead.length} file(s) found, ${snippets.length} snippet(s) read`));
82
+ // 5. Git context
83
+ let gitLog = '';
84
+ let gitDiff = '';
85
+ try {
86
+ const log = await execa('git', ['log', '--oneline', '-10'], { cwd, reject: false });
87
+ gitLog = log.stdout.trim();
88
+ }
89
+ catch { /* non-fatal */ }
90
+ try {
91
+ const diff = await execa('git', ['diff', '--stat', 'HEAD'], { cwd, reject: false });
92
+ gitDiff = diff.stdout.trim();
93
+ }
94
+ catch { /* non-fatal */ }
95
+ // 6. Build context block
96
+ const parts = [
97
+ `Keywords extracted: ${keywords.join(', ')}`,
98
+ `Relevant files found: ${filesToRead.length ? filesToRead.join(', ') : 'none'}`,
99
+ ];
100
+ if (gitLog || gitDiff) {
101
+ parts.push('Recent git activity:');
102
+ if (gitLog)
103
+ parts.push(gitLog);
104
+ if (gitDiff)
105
+ parts.push(gitDiff);
106
+ }
107
+ if (snippets.length) {
108
+ parts.push('File snippets:');
109
+ parts.push(...snippets);
110
+ }
111
+ const inner = parts.join('\n');
112
+ if (inner.length < MIN_CONTENT_LENGTH)
113
+ return '';
114
+ return `<recon>\n${inner}\n</recon>`;
115
+ }
116
+ catch {
117
+ // recon must never crash the main flow
118
+ return '';
119
+ }
120
+ }
121
+ //# sourceMappingURL=recon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recon.js","sourceRoot":"","sources":["../src/recon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AgentConfig } from './types.js';
2
+ export declare function renameSymbol(symbolName: string, newName: string, cwd: string): Promise<{
3
+ filesChanged: string[];
4
+ occurrences: number;
5
+ }>;
6
+ export declare function extractInterface(filePath: string, className: string, cwd: string): Promise<void>;
7
+ export declare function moveSymbol(symbolName: string, fromFile: string, toFile: string, cwd: string): Promise<void>;
8
+ export declare function splitFile(filePath: string, cwd: string, config: AgentConfig): Promise<void>;
9
+ export declare function runRefactor(action: 'rename' | 'extract' | 'move' | 'split', args: string[], config: AgentConfig): Promise<void>;
10
+ //# sourceMappingURL=refactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../src/refactor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B1D;AAID,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAkCf;AAID,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CA8Df;AAID,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjG;AAID,wBAAsB,WAAW,CAC/B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,EAC/C,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,182 @@
1
+ import path from 'node:path';
2
+ import chalk from 'chalk';
3
+ import { Project, SyntaxKind } from 'ts-morph';
4
+ import { runAgent } from './engine.js';
5
+ // ─── Rename Symbol ────────────────────────────────────────────────────────────
6
+ export async function renameSymbol(symbolName, newName, cwd) {
7
+ const project = new Project({ tsConfigFilePath: path.join(cwd, 'tsconfig.json') });
8
+ const changedFiles = new Set();
9
+ let occurrences = 0;
10
+ try {
11
+ for (const sourceFile of project.getSourceFiles()) {
12
+ const identifiers = sourceFile.getDescendantsOfKind(SyntaxKind.Identifier)
13
+ .filter(id => id.getText() === symbolName);
14
+ if (identifiers.length === 0)
15
+ continue;
16
+ occurrences += identifiers.length;
17
+ // rename all via the first node's rename (ts-morph propagates across project)
18
+ identifiers[0].rename(newName);
19
+ changedFiles.add(sourceFile.getFilePath());
20
+ }
21
+ await project.save();
22
+ }
23
+ catch (err) {
24
+ throw new Error(`renameSymbol failed: ${err.message}`);
25
+ }
26
+ const filesChanged = Array.from(changedFiles);
27
+ console.log(chalk.green('✔') +
28
+ ` Renamed "${symbolName}" → "${newName}" in ${filesChanged.length} files (${occurrences} occurrences)`);
29
+ return { filesChanged, occurrences };
30
+ }
31
+ // ─── Extract Interface ────────────────────────────────────────────────────────
32
+ export async function extractInterface(filePath, className, cwd) {
33
+ const project = new Project({ tsConfigFilePath: path.join(cwd, 'tsconfig.json') });
34
+ const absPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);
35
+ try {
36
+ const sourceFile = project.getSourceFileOrThrow(absPath);
37
+ const classDecl = sourceFile.getClassOrThrow(className);
38
+ const methods = classDecl.getMethods().filter(m => m.getScope() === undefined || m.getScope() === 'public');
39
+ const signatures = methods.map(m => {
40
+ const params = m.getParameters().map(p => p.getText()).join(', ');
41
+ const returnType = m.getReturnTypeNode()?.getText() ?? 'void';
42
+ return ` ${m.getName()}(${params}): ${returnType};`;
43
+ });
44
+ const interfaceName = `${className}Interface`;
45
+ const interfaceContent = `export interface ${interfaceName} {\n${signatures.join('\n')}\n}\n`;
46
+ const dir = path.dirname(absPath);
47
+ const outPath = path.join(dir, `${interfaceName}.ts`);
48
+ const newFile = project.createSourceFile(outPath, interfaceContent, { overwrite: true });
49
+ await newFile.save();
50
+ // Add implements clause to the class
51
+ const relImport = `./${interfaceName}.js`;
52
+ sourceFile.addImportDeclaration({ namedImports: [interfaceName], moduleSpecifier: relImport });
53
+ classDecl.addImplements(interfaceName);
54
+ await sourceFile.save();
55
+ }
56
+ catch (err) {
57
+ throw new Error(`extractInterface failed: ${err.message}`);
58
+ }
59
+ const relOut = path.relative(cwd, path.join(path.dirname(absPath), `${className}Interface.ts`));
60
+ console.log(chalk.green('✔') + ` Interface extracted: ${relOut}`);
61
+ }
62
+ // ─── Move Symbol ──────────────────────────────────────────────────────────────
63
+ export async function moveSymbol(symbolName, fromFile, toFile, cwd) {
64
+ const project = new Project({ tsConfigFilePath: path.join(cwd, 'tsconfig.json') });
65
+ const absFrom = path.isAbsolute(fromFile) ? fromFile : path.join(cwd, fromFile);
66
+ const absTo = path.isAbsolute(toFile) ? toFile : path.join(cwd, toFile);
67
+ try {
68
+ const src = project.getSourceFileOrThrow(absFrom);
69
+ // Locate the declaration (function, class, or variable statement)
70
+ const decl = src.getFunction(symbolName) ??
71
+ src.getClass(symbolName) ??
72
+ src.getVariableDeclaration(symbolName);
73
+ if (!decl)
74
+ throw new Error(`Symbol "${symbolName}" not found in ${fromFile}`);
75
+ const declText = decl.getText();
76
+ const isVariable = src.getVariableDeclaration(symbolName) !== undefined;
77
+ const exportedText = isVariable
78
+ ? `export const ${declText};\n`
79
+ : declText.startsWith('export') ? `${declText}\n` : `export ${declText}\n`;
80
+ // Write to destination (create or append)
81
+ let dest = project.getSourceFile(absTo);
82
+ if (!dest) {
83
+ dest = project.createSourceFile(absTo, exportedText, { overwrite: false });
84
+ }
85
+ else {
86
+ dest.addStatements(exportedText);
87
+ }
88
+ await dest.save();
89
+ // Remove original, add re-export
90
+ if (isVariable) {
91
+ src.getVariableStatement(symbolName)?.remove();
92
+ }
93
+ else {
94
+ (src.getFunction(symbolName) ?? src.getClass(symbolName))?.remove();
95
+ }
96
+ const relToFrom = `./${path.relative(path.dirname(absFrom), absTo).replace(/\.ts$/, '.js')}`;
97
+ src.addExportDeclaration({ namedExports: [symbolName], moduleSpecifier: relToFrom });
98
+ await src.save();
99
+ // Update other files importing from fromFile
100
+ const relFromBase = `./${path.basename(absFrom, '.ts')}.js`;
101
+ for (const sf of project.getSourceFiles()) {
102
+ if (sf.getFilePath() === absFrom || sf.getFilePath() === absTo)
103
+ continue;
104
+ for (const imp of sf.getImportDeclarations()) {
105
+ if (imp.getModuleSpecifierValue().endsWith(relFromBase)) {
106
+ const named = imp.getNamedImports().find(n => n.getName() === symbolName);
107
+ if (!named)
108
+ continue;
109
+ named.remove();
110
+ const relToSf = `./${path.relative(path.dirname(sf.getFilePath()), absTo).replace(/\.ts$/, '.js')}`;
111
+ sf.addImportDeclaration({ namedImports: [symbolName], moduleSpecifier: relToSf });
112
+ }
113
+ }
114
+ await sf.save();
115
+ }
116
+ }
117
+ catch (err) {
118
+ throw new Error(`moveSymbol failed: ${err.message}`);
119
+ }
120
+ const relFrom = path.relative(cwd, absFrom);
121
+ const relTo = path.relative(cwd, absTo);
122
+ console.log(chalk.green('✔') + ` Moved "${symbolName}" from ${relFrom} → ${relTo}`);
123
+ }
124
+ // ─── Split File ───────────────────────────────────────────────────────────────
125
+ export async function splitFile(filePath, cwd, config) {
126
+ const absPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);
127
+ const { createReadStream } = await import('node:fs');
128
+ const { createInterface } = await import('node:readline');
129
+ let lineCount = 0;
130
+ await new Promise((resolve, reject) => {
131
+ const rl = createInterface({ input: createReadStream(absPath) });
132
+ rl.on('line', () => lineCount++);
133
+ rl.on('close', resolve);
134
+ rl.on('error', reject);
135
+ });
136
+ if (lineCount <= 200) {
137
+ console.log(chalk.yellow('⚠') + ` ${filePath} is ${lineCount} lines — no split needed (threshold: 200)`);
138
+ return;
139
+ }
140
+ console.log(chalk.blue('ℹ') + ` Splitting ${filePath} (${lineCount} lines)…`);
141
+ const task = `Split ${filePath} into smaller focused modules. Each export group should go in its own file. ` +
142
+ `Update all imports. The original file should re-export everything for backward compatibility.`;
143
+ await runAgent(task, { ...config, cwd });
144
+ console.log(chalk.green('✔') + ` Split complete: ${filePath}`);
145
+ }
146
+ // ─── Dispatcher ───────────────────────────────────────────────────────────────
147
+ export async function runRefactor(action, args, config) {
148
+ const cwd = config.cwd;
149
+ switch (action) {
150
+ case 'rename':
151
+ if (args.length !== 2) {
152
+ console.error('Usage: refactor rename <oldName> <newName>');
153
+ return;
154
+ }
155
+ await renameSymbol(args[0], args[1], cwd);
156
+ break;
157
+ case 'extract':
158
+ if (args.length !== 2) {
159
+ console.error('Usage: refactor extract <filePath> <className>');
160
+ return;
161
+ }
162
+ await extractInterface(args[0], args[1], cwd);
163
+ break;
164
+ case 'move':
165
+ if (args.length !== 3) {
166
+ console.error('Usage: refactor move <symbolName> <fromFile> <toFile>');
167
+ return;
168
+ }
169
+ await moveSymbol(args[0], args[1], args[2], cwd);
170
+ break;
171
+ case 'split':
172
+ if (args.length !== 1) {
173
+ console.error('Usage: refactor split <filePath>');
174
+ return;
175
+ }
176
+ await splitFile(args[0], cwd, config);
177
+ break;
178
+ default:
179
+ console.error(`Unknown refactor action: ${action}. Valid: rename | extract | move | split`);
180
+ }
181
+ }
182
+ //# sourceMappingURL=refactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.js","sourceRoot":"","sources":["../src/refactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentConfig } from './types.js';
2
+ export declare function runTestGen(config: AgentConfig, targetFile?: string): Promise<void>;
3
+ //# sourceMappingURL=test-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-gen.d.ts","sourceRoot":"","sources":["../src/test-gen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoHxF"}
@@ -0,0 +1,136 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import { execa } from 'execa';
5
+ import { globby } from 'globby';
6
+ import { Project } from 'ts-morph';
7
+ import { runAgent } from './engine.js';
8
+ import { detectProject } from './project.js';
9
+ const HDR = chalk.bold.cyan;
10
+ const OK = chalk.green('✔');
11
+ const ERR = chalk.red('✖');
12
+ export async function runTestGen(config, targetFile) {
13
+ console.log(HDR('\n━━━ Test Generation ━━━━━━━━━━━━━━━━━━━━'));
14
+ // 1. Detect test framework
15
+ const proj = await detectProject(config.cwd);
16
+ let testCmd = proj.testCommand ?? 'npm test';
17
+ let testFramework = 'unknown';
18
+ try {
19
+ const raw = await fs.readFile(path.join(config.cwd, 'package.json'), 'utf-8');
20
+ const pkg = JSON.parse(raw);
21
+ const deps = { ...pkg.devDependencies, ...pkg.dependencies };
22
+ if ('vitest' in deps) {
23
+ testFramework = 'vitest';
24
+ testCmd = 'npx vitest run';
25
+ }
26
+ else if ('jest' in deps) {
27
+ testFramework = 'jest';
28
+ testCmd = 'npx jest';
29
+ }
30
+ else if ('mocha' in deps) {
31
+ testFramework = 'mocha';
32
+ testCmd = 'npx mocha';
33
+ }
34
+ else {
35
+ testFramework = testCmd;
36
+ }
37
+ }
38
+ catch { /* keep defaults */ }
39
+ // 2. Find source files without tests
40
+ let candidates;
41
+ if (targetFile) {
42
+ candidates = [targetFile];
43
+ }
44
+ else {
45
+ const sources = await globby('src/**/*.ts', {
46
+ cwd: config.cwd,
47
+ ignore: ['**/*.test.ts', '**/*.spec.ts', '**/*.d.ts'],
48
+ });
49
+ candidates = [];
50
+ for (const src of sources) {
51
+ const base = src.replace(/\.ts$/, '');
52
+ const hasTest = await Promise.any([
53
+ fs.access(path.join(config.cwd, `${base}.test.ts`)).then(() => true),
54
+ fs.access(path.join(config.cwd, `${base}.spec.ts`)).then(() => true),
55
+ ]).catch(() => false);
56
+ if (!hasTest)
57
+ candidates.push(src);
58
+ }
59
+ }
60
+ console.log(`Found ${chalk.yellow(candidates.length)} files without tests`);
61
+ if (!candidates.length) {
62
+ console.log(`${OK} Nothing to do`);
63
+ return;
64
+ }
65
+ // 3. Analyse candidates (max 5) with ts-morph
66
+ const toProcess = candidates.slice(0, 5);
67
+ const tsMorphProject = new Project({ skipAddingFilesFromTsConfig: true });
68
+ const summaries = [];
69
+ for (const rel of toProcess) {
70
+ const sf = tsMorphProject.addSourceFileAtPath(path.join(config.cwd, rel));
71
+ const sigs = [];
72
+ for (const [name, decls] of sf.getExportedDeclarations()) {
73
+ for (const decl of decls) {
74
+ if ('getParameters' in decl && typeof decl.getParameters === 'function') {
75
+ const d = decl;
76
+ const params = d.getParameters().map(p => `${p.getName()}: ${p.getType().getText()}`).join(', ');
77
+ const ret = d.getReturnType?.()?.getText() ?? 'void';
78
+ sigs.push(`${name}(${params}): ${ret}`);
79
+ }
80
+ }
81
+ }
82
+ if (sigs.length)
83
+ summaries.push(`File ${rel} exports: ${sigs.join(', ')}`);
84
+ }
85
+ // 4. Coverage check (best-effort)
86
+ console.log('Analyzing coverage...');
87
+ let coverageHint = '';
88
+ try {
89
+ const [cv, ...cvArgs] = `${testCmd} --coverage`.split(' ');
90
+ const { stdout, stderr } = await execa(cv, cvArgs, { cwd: config.cwd, reject: false, timeout: 30000 });
91
+ coverageHint = (stdout + stderr).slice(0, 600);
92
+ }
93
+ catch { /* coverage unavailable */ }
94
+ // 5. Generate tests — batch up to 3 files per runAgent call
95
+ const BATCH = 3;
96
+ for (let i = 0; i < toProcess.length; i += BATCH) {
97
+ const batch = toProcess.slice(i, i + BATCH);
98
+ batch.forEach(f => console.log(`Generating tests for: ${chalk.cyan(f)}`));
99
+ const filesSummary = batch.map((rel, j) => {
100
+ const base = rel.replace(/\.ts$/, '');
101
+ return [
102
+ `Source: ${rel} → Test: ${base}.test.ts`,
103
+ summaries[i + j] ?? rel,
104
+ ].join('\n');
105
+ }).join('\n\n');
106
+ const existingList = batch.map(r => r.replace(/\.ts$/, '') + '.test.ts').join(', ');
107
+ const prompt = [
108
+ `Generate missing tests for these files. Rules:`,
109
+ `- Use the existing test framework (${testFramework})`,
110
+ `- Import from the actual file paths`,
111
+ `- Test each exported function with: happy path, edge cases, error cases`,
112
+ `- Do NOT duplicate any tests that already exist in ${existingList}`,
113
+ `- Write tests to their respective test files listed below`,
114
+ ``,
115
+ `Files to test:`,
116
+ filesSummary,
117
+ coverageHint ? `\nCoverage output (prioritise uncovered lines):\n${coverageHint}` : '',
118
+ ].filter(Boolean).join('\n');
119
+ await runAgent(prompt, { ...config, maxTurns: 12, silent: false });
120
+ }
121
+ // 6. Run tests; auto-fix failures once
122
+ console.log('\nRunning tests...');
123
+ const [tc, ...tcArgs] = testCmd.split(' ');
124
+ const run1 = await execa(tc, tcArgs, { cwd: config.cwd, reject: false });
125
+ const out1 = run1.stdout + run1.stderr;
126
+ if (run1.exitCode !== 0) {
127
+ console.log(chalk.yellow('Fixing test failures...'));
128
+ await runAgent(`Fix these test failures:\n${out1}`, { ...config, maxTurns: 8 });
129
+ const run2 = await execa(tc, tcArgs, { cwd: config.cwd, reject: false });
130
+ console.log(run2.exitCode === 0 ? `${OK} All tests pass` : `${ERR} Tests still failing`);
131
+ }
132
+ else {
133
+ console.log(`${OK} All tests pass`);
134
+ }
135
+ }
136
+ //# sourceMappingURL=test-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-gen.js","sourceRoot":"","sources":["../src/test-gen.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -159,5 +159,21 @@ export interface CLIArgs {
159
159
  authAction?: string;
160
160
  resumeLast: boolean;
161
161
  resumePick: boolean;
162
+ healthMode: boolean;
163
+ daemonMode: boolean;
164
+ daemonAction?: string;
165
+ issuesMode: boolean;
166
+ issuesAction?: string;
167
+ issueId?: number;
168
+ pipelineMode: boolean;
169
+ debugMode: boolean;
170
+ debugCommand?: string;
171
+ refactorMode: boolean;
172
+ refactorAction?: string;
173
+ packsMode: boolean;
174
+ packsAction?: string;
175
+ packName?: string;
176
+ testGenMode: boolean;
177
+ testGenTarget?: string;
162
178
  }
163
179
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}