activo 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +203 -1
  2. package/data/2026-03-04_20-54.json +181 -0
  3. package/data/2026-03-04_20-56.json +181 -0
  4. package/data/apex-rulesets/egov.yaml +469 -0
  5. package/data/apex-rulesets/modernize.yaml +687 -0
  6. package/data/apex-rulesets/quality.yaml +1677 -0
  7. package/data/apex-rulesets/rule-schema.yaml +587 -0
  8. package/data/apex-rulesets/secure.yaml +1688 -0
  9. package/data/apex-rulesets/spring.yaml +455 -0
  10. package/data/apex-rulesets/sql-format.yaml +99 -0
  11. package/data/apex-rulesets/sql-oracle.yaml +281 -0
  12. package/data/apex-rulesets/sql.yaml +1660 -0
  13. package/dist/cli/headless.d.ts.map +1 -1
  14. package/dist/cli/headless.js +32 -10
  15. package/dist/cli/headless.js.map +1 -1
  16. package/dist/cli/index.js +31 -3
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/agent.d.ts +3 -3
  19. package/dist/core/agent.d.ts.map +1 -1
  20. package/dist/core/agent.js +255 -17
  21. package/dist/core/agent.js.map +1 -1
  22. package/dist/core/commands.d.ts +2 -1
  23. package/dist/core/commands.d.ts.map +1 -1
  24. package/dist/core/commands.js +61 -9
  25. package/dist/core/commands.js.map +1 -1
  26. package/dist/core/config.d.ts +14 -0
  27. package/dist/core/config.d.ts.map +1 -1
  28. package/dist/core/config.js +41 -4
  29. package/dist/core/config.js.map +1 -1
  30. package/dist/core/conversation.d.ts +2 -2
  31. package/dist/core/conversation.d.ts.map +1 -1
  32. package/dist/core/conversation.js.map +1 -1
  33. package/dist/core/intentRouter.d.ts +43 -0
  34. package/dist/core/intentRouter.d.ts.map +1 -0
  35. package/dist/core/intentRouter.js +804 -0
  36. package/dist/core/intentRouter.js.map +1 -0
  37. package/dist/core/llm/anthropic.d.ts +24 -0
  38. package/dist/core/llm/anthropic.d.ts.map +1 -0
  39. package/dist/core/llm/anthropic.js +226 -0
  40. package/dist/core/llm/anthropic.js.map +1 -0
  41. package/dist/core/llm/ollama.d.ts +5 -14
  42. package/dist/core/llm/ollama.d.ts.map +1 -1
  43. package/dist/core/llm/ollama.js +3 -0
  44. package/dist/core/llm/ollama.js.map +1 -1
  45. package/dist/core/llm/types.d.ts +22 -0
  46. package/dist/core/llm/types.d.ts.map +1 -0
  47. package/dist/core/llm/types.js +2 -0
  48. package/dist/core/llm/types.js.map +1 -0
  49. package/dist/core/mcp/client.d.ts +6 -0
  50. package/dist/core/mcp/client.d.ts.map +1 -1
  51. package/dist/core/mcp/client.js +16 -0
  52. package/dist/core/mcp/client.js.map +1 -1
  53. package/dist/core/mcp/init.d.ts +12 -0
  54. package/dist/core/mcp/init.d.ts.map +1 -0
  55. package/dist/core/mcp/init.js +55 -0
  56. package/dist/core/mcp/init.js.map +1 -0
  57. package/dist/core/mcp/logger.d.ts +14 -0
  58. package/dist/core/mcp/logger.d.ts.map +1 -0
  59. package/dist/core/mcp/logger.js +50 -0
  60. package/dist/core/mcp/logger.js.map +1 -0
  61. package/dist/core/tools/analyzeAll.d.ts.map +1 -1
  62. package/dist/core/tools/analyzeAll.js +16 -28
  63. package/dist/core/tools/analyzeAll.js.map +1 -1
  64. package/dist/core/tools/analyzePatterns.d.ts +3 -0
  65. package/dist/core/tools/analyzePatterns.d.ts.map +1 -0
  66. package/dist/core/tools/analyzePatterns.js +293 -0
  67. package/dist/core/tools/analyzePatterns.js.map +1 -0
  68. package/dist/core/tools/apexPaths.d.ts +14 -0
  69. package/dist/core/tools/apexPaths.d.ts.map +1 -0
  70. package/dist/core/tools/apexPaths.js +54 -0
  71. package/dist/core/tools/apexPaths.js.map +1 -0
  72. package/dist/core/tools/apexUtils.d.ts +36 -0
  73. package/dist/core/tools/apexUtils.d.ts.map +1 -0
  74. package/dist/core/tools/apexUtils.js +83 -0
  75. package/dist/core/tools/apexUtils.js.map +1 -0
  76. package/dist/core/tools/explainIssue.d.ts +3 -0
  77. package/dist/core/tools/explainIssue.d.ts.map +1 -0
  78. package/dist/core/tools/explainIssue.js +181 -0
  79. package/dist/core/tools/explainIssue.js.map +1 -0
  80. package/dist/core/tools/fixGen.d.ts +3 -0
  81. package/dist/core/tools/fixGen.d.ts.map +1 -0
  82. package/dist/core/tools/fixGen.js +338 -0
  83. package/dist/core/tools/fixGen.js.map +1 -0
  84. package/dist/core/tools/generateImprovements.d.ts +21 -0
  85. package/dist/core/tools/generateImprovements.d.ts.map +1 -0
  86. package/dist/core/tools/generateImprovements.js +602 -0
  87. package/dist/core/tools/generateImprovements.js.map +1 -0
  88. package/dist/core/tools/generateReport.d.ts +3 -0
  89. package/dist/core/tools/generateReport.d.ts.map +1 -0
  90. package/dist/core/tools/generateReport.js +315 -0
  91. package/dist/core/tools/generateReport.js.map +1 -0
  92. package/dist/core/tools/index.d.ts +7 -0
  93. package/dist/core/tools/index.d.ts.map +1 -1
  94. package/dist/core/tools/index.js +62 -23
  95. package/dist/core/tools/index.js.map +1 -1
  96. package/dist/core/tools/javaAst.d.ts.map +1 -1
  97. package/dist/core/tools/javaAst.js +191 -0
  98. package/dist/core/tools/javaAst.js.map +1 -1
  99. package/dist/core/tools/recommendProfile.d.ts +3 -0
  100. package/dist/core/tools/recommendProfile.d.ts.map +1 -0
  101. package/dist/core/tools/recommendProfile.js +334 -0
  102. package/dist/core/tools/recommendProfile.js.map +1 -0
  103. package/dist/core/tools/ruleGen.d.ts +3 -0
  104. package/dist/core/tools/ruleGen.d.ts.map +1 -0
  105. package/dist/core/tools/ruleGen.js +1103 -0
  106. package/dist/core/tools/ruleGen.js.map +1 -0
  107. package/dist/core/tools/standards.d.ts.map +1 -1
  108. package/dist/core/tools/standards.js +7 -3
  109. package/dist/core/tools/standards.js.map +1 -1
  110. package/dist/ui/App.d.ts.map +1 -1
  111. package/dist/ui/App.js +86 -35
  112. package/dist/ui/App.js.map +1 -1
  113. package/dist/ui/components/InputBox.d.ts +1 -3
  114. package/dist/ui/components/InputBox.d.ts.map +1 -1
  115. package/dist/ui/components/InputBox.js +146 -5
  116. package/dist/ui/components/InputBox.js.map +1 -1
  117. package/dist/ui/components/MessageList.d.ts +3 -1
  118. package/dist/ui/components/MessageList.d.ts.map +1 -1
  119. package/dist/ui/components/MessageList.js +13 -7
  120. package/dist/ui/components/MessageList.js.map +1 -1
  121. package/dist/ui/components/StatusBar.d.ts +1 -1
  122. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  123. package/dist/ui/components/StatusBar.js +3 -2
  124. package/dist/ui/components/StatusBar.js.map +1 -1
  125. package/dist/ui/components/ToolStatus.d.ts +3 -1
  126. package/dist/ui/components/ToolStatus.d.ts.map +1 -1
  127. package/dist/ui/components/ToolStatus.js +19 -4
  128. package/dist/ui/components/ToolStatus.js.map +1 -1
  129. package/package.json +7 -1
  130. package/demo.gif +0 -0
  131. package/demo.tape +0 -53
  132. package/screenshot.png +0 -0
  133. package/src/cli/banner.ts +0 -38
  134. package/src/cli/headless.ts +0 -63
  135. package/src/cli/index.ts +0 -57
  136. package/src/core/agent.ts +0 -237
  137. package/src/core/commands.ts +0 -118
  138. package/src/core/config.ts +0 -98
  139. package/src/core/conversation.ts +0 -235
  140. package/src/core/llm/ollama.ts +0 -351
  141. package/src/core/mcp/client.ts +0 -143
  142. package/src/core/tools/analyzeAll.ts +0 -494
  143. package/src/core/tools/ast.ts +0 -826
  144. package/src/core/tools/builtIn.ts +0 -221
  145. package/src/core/tools/cache.ts +0 -570
  146. package/src/core/tools/cssAnalysis.ts +0 -324
  147. package/src/core/tools/dependencyAnalysis.ts +0 -363
  148. package/src/core/tools/embeddings.ts +0 -746
  149. package/src/core/tools/frontendAst.ts +0 -802
  150. package/src/core/tools/htmlAnalysis.ts +0 -466
  151. package/src/core/tools/index.ts +0 -160
  152. package/src/core/tools/javaAst.ts +0 -812
  153. package/src/core/tools/memory.ts +0 -655
  154. package/src/core/tools/mybatisAnalysis.ts +0 -322
  155. package/src/core/tools/openapiAnalysis.ts +0 -431
  156. package/src/core/tools/pythonAnalysis.ts +0 -477
  157. package/src/core/tools/sqlAnalysis.ts +0 -298
  158. package/src/core/tools/standards.test.ts +0 -186
  159. package/src/core/tools/standards.ts +0 -889
  160. package/src/core/tools/types.ts +0 -38
  161. package/src/ui/App.tsx +0 -334
  162. package/src/ui/components/InputBox.tsx +0 -37
  163. package/src/ui/components/MessageList.tsx +0 -80
  164. package/src/ui/components/StatusBar.tsx +0 -36
  165. package/src/ui/components/ToolStatus.tsx +0 -38
  166. package/tsconfig.json +0 -21
@@ -0,0 +1,338 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { OllamaClient } from "../llm/ollama.js";
4
+ import { AnthropicClient } from "../llm/anthropic.js";
5
+ import { loadConfig } from "../config.js";
6
+ // ─── Report Parsing ───
7
+ function parseReport(reportPath) {
8
+ const content = fs.readFileSync(reportPath, "utf-8");
9
+ const data = JSON.parse(content);
10
+ // Format 1: { issues: [...] }
11
+ if (Array.isArray(data.issues)) {
12
+ return data.issues.map(normalizeIssue);
13
+ }
14
+ // Format 2: apex MCP output { top_issues: [...] }
15
+ if (Array.isArray(data.top_issues)) {
16
+ return data.top_issues.map((issue) => ({
17
+ rule_id: issue.rule_id || issue.id || "unknown",
18
+ file: issue.file || issue.filepath || "",
19
+ line: issue.line || 0,
20
+ severity: issue.severity || "medium",
21
+ category: issue.category,
22
+ message: issue.message || issue.description || "",
23
+ suggestion: issue.suggestion || issue.fix,
24
+ }));
25
+ }
26
+ // Format 3: direct array
27
+ if (Array.isArray(data)) {
28
+ return data.map(normalizeIssue);
29
+ }
30
+ throw new Error("지원하지 않는 리포트 형식입니다. { issues: [...] } 형식이 필요합니다.");
31
+ }
32
+ function normalizeIssue(issue) {
33
+ return {
34
+ rule_id: issue.rule_id || issue.id || "unknown",
35
+ file: issue.file || issue.filepath || "",
36
+ line: issue.line || 0,
37
+ severity: issue.severity || "medium",
38
+ category: issue.category,
39
+ message: issue.message || issue.description || "",
40
+ suggestion: issue.suggestion || issue.fix,
41
+ };
42
+ }
43
+ // ─── Issue Grouping ───
44
+ function groupIssuesByFile(issues) {
45
+ const groups = new Map();
46
+ for (const issue of issues) {
47
+ if (!issue.file)
48
+ continue;
49
+ if (!groups.has(issue.file))
50
+ groups.set(issue.file, []);
51
+ groups.get(issue.file).push(issue);
52
+ }
53
+ // Sort issues within each file by line number
54
+ return Array.from(groups.entries()).map(([filepath, issues]) => ({
55
+ filepath,
56
+ issues: issues.sort((a, b) => a.line - b.line),
57
+ }));
58
+ }
59
+ // ─── Source Context Reading ───
60
+ function readSourceContext(filepath, issues, contextLines) {
61
+ if (!fs.existsSync(filepath)) {
62
+ return `// File not found: ${filepath}`;
63
+ }
64
+ const content = fs.readFileSync(filepath, "utf-8");
65
+ const lines = content.split("\n");
66
+ // Find the range of lines needed
67
+ let minLine = Infinity;
68
+ let maxLine = 0;
69
+ for (const issue of issues) {
70
+ if (issue.line > 0) {
71
+ minLine = Math.min(minLine, issue.line - contextLines);
72
+ maxLine = Math.max(maxLine, issue.line + contextLines);
73
+ }
74
+ }
75
+ // If all issues have line 0 or no lines, return first 100 lines
76
+ if (minLine === Infinity) {
77
+ minLine = 1;
78
+ maxLine = Math.min(100, lines.length);
79
+ }
80
+ minLine = Math.max(1, minLine);
81
+ maxLine = Math.min(lines.length, maxLine);
82
+ // If range is too large, just return issue lines with context
83
+ if (maxLine - minLine > 200) {
84
+ const segments = [];
85
+ for (const issue of issues) {
86
+ const start = Math.max(1, issue.line - contextLines);
87
+ const end = Math.min(lines.length, issue.line + contextLines);
88
+ const segment = lines.slice(start - 1, end).map((line, i) => `${start + i}\t${line}`).join("\n");
89
+ segments.push(`// ... (line ${start}-${end})\n${segment}`);
90
+ }
91
+ return segments.join("\n// ...\n");
92
+ }
93
+ return lines.slice(minLine - 1, maxLine).map((line, i) => `${minLine + i}\t${line}`).join("\n");
94
+ }
95
+ // ─── LLM Prompt ───
96
+ function buildFixPrompt(filepath, issues, sourceCode) {
97
+ const ext = path.extname(filepath).replace(".", "");
98
+ const lang = { java: "java", js: "javascript", ts: "typescript", py: "python", xml: "xml", sql: "sql" }[ext] || ext;
99
+ const issuesList = issues.map((issue, i) => {
100
+ let line = `${i + 1}. Line ${issue.line}: [${issue.rule_id}] ${issue.message}`;
101
+ if (issue.suggestion) {
102
+ line += ` (suggestion: ${issue.suggestion})`;
103
+ }
104
+ return line;
105
+ }).join("\n");
106
+ return `Fix the issues in this source code. Output a unified diff.
107
+
108
+ ## File: ${filepath}
109
+
110
+ ## Issues:
111
+ ${issuesList}
112
+
113
+ ## Source Code:
114
+ \`\`\`${lang}
115
+ ${sourceCode}
116
+ \`\`\`
117
+
118
+ ## Output Format
119
+ Output ONLY:
120
+ 1. A unified diff (--- a/... +++ b/... @@ ... @@)
121
+ 2. A one-line EXPLANATION
122
+
123
+ \`\`\`diff
124
+ --- a/${filepath}
125
+ +++ b/${filepath}
126
+ @@ ... @@
127
+ context line
128
+ -removed line
129
+ +added line
130
+ \`\`\`
131
+ EXPLANATION: brief description of changes
132
+
133
+ IMPORTANT:
134
+ - Fix ALL listed issues
135
+ - Keep minimal changes (don't reformat unrelated code)
136
+ - Preserve original indentation style
137
+ - If an issue cannot be fixed, explain why in EXPLANATION`;
138
+ }
139
+ // ─── Diff Parsing ───
140
+ function extractDiffAndExplanation(response) {
141
+ let diff = "";
142
+ let explanation = "";
143
+ // Extract diff block
144
+ const diffMatch = response.match(/```diff\s*\n([\s\S]*?)```/);
145
+ if (diffMatch) {
146
+ diff = diffMatch[1].trim();
147
+ }
148
+ else {
149
+ // Try to find diff-like content without code block
150
+ const lines = response.split("\n");
151
+ const diffLines = [];
152
+ let inDiff = false;
153
+ for (const line of lines) {
154
+ if (line.startsWith("--- a/") || line.startsWith("--- ")) {
155
+ inDiff = true;
156
+ }
157
+ if (inDiff) {
158
+ diffLines.push(line);
159
+ if (line.trim() === "" && diffLines.length > 3) {
160
+ // End of diff hunk
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ diff = diffLines.join("\n").trim();
166
+ }
167
+ // Extract explanation
168
+ const explMatch = response.match(/EXPLANATION:\s*(.+)/i);
169
+ if (explMatch) {
170
+ explanation = explMatch[1].trim();
171
+ }
172
+ return { diff, explanation };
173
+ }
174
+ // ─── LLM Client Creation ───
175
+ function createLLMClient() {
176
+ const config = loadConfig();
177
+ if (config.provider === "anthropic") {
178
+ return new AnthropicClient(config.anthropic);
179
+ }
180
+ return new OllamaClient(config.ollama);
181
+ }
182
+ // ─── Main Tool ───
183
+ const generateFixesTool = {
184
+ name: "generate_fixes",
185
+ description: "APEX 검사 리포트의 이슈들에 대해 수정 코드(diff)를 자동 생성합니다. Use when user asks: '코드수정', '수정코드', 'generate fix', '개선코드', '패치'.",
186
+ parameters: {
187
+ type: "object",
188
+ required: ["report_path"],
189
+ properties: {
190
+ report_path: {
191
+ type: "string",
192
+ description: "APEX JSON 리포트 경로 (또는 MCP 결과 JSON)",
193
+ },
194
+ output_dir: {
195
+ type: "string",
196
+ description: "출력 디렉토리 (기본: .activo/fixes)",
197
+ },
198
+ max_issues_per_file: {
199
+ type: "number",
200
+ description: "파일당 최대 이슈 수 (초과 시 스킵, 기본: 20)",
201
+ },
202
+ context_lines: {
203
+ type: "number",
204
+ description: "이슈 라인 전후 컨텍스트 줄 수 (기본: 10)",
205
+ },
206
+ },
207
+ },
208
+ handler: async (args) => {
209
+ try {
210
+ const reportPath = args.report_path;
211
+ const outputDir = args.output_dir || ".activo/fixes";
212
+ const maxIssuesPerFile = args.max_issues_per_file || 20;
213
+ const contextLines = args.context_lines || 10;
214
+ // Validate input
215
+ if (!fs.existsSync(reportPath)) {
216
+ return { success: false, content: "", error: `리포트 파일 없음: ${reportPath}` };
217
+ }
218
+ // 1. Parse report
219
+ const issues = parseReport(reportPath);
220
+ if (issues.length === 0) {
221
+ return { success: true, content: JSON.stringify({ message: "이슈가 없습니다", totalIssues: 0 }) };
222
+ }
223
+ // 2. Group by file
224
+ const fileGroups = groupIssuesByFile(issues);
225
+ // 3. Process each file
226
+ const client = createLLMClient();
227
+ const fixResults = [];
228
+ const skippedFiles = [];
229
+ let errorCount = 0;
230
+ fs.mkdirSync(outputDir, { recursive: true });
231
+ const perFileTimeout = 90000; // 90 seconds per file
232
+ for (let fi = 0; fi < fileGroups.length; fi++) {
233
+ const group = fileGroups[fi];
234
+ const progress = `[${fi + 1}/${fileGroups.length}]`;
235
+ // Skip files with too many issues
236
+ if (group.issues.length > maxIssuesPerFile) {
237
+ skippedFiles.push(`${group.filepath} (${group.issues.length} issues > ${maxIssuesPerFile} max)`);
238
+ continue;
239
+ }
240
+ // Skip non-existent files
241
+ if (!fs.existsSync(group.filepath)) {
242
+ skippedFiles.push(`${group.filepath} (파일 없음)`);
243
+ continue;
244
+ }
245
+ try {
246
+ console.error(`${progress} Generating fix: ${path.basename(group.filepath)} (${group.issues.length} issues)...`);
247
+ // Read source context
248
+ const sourceCode = readSourceContext(group.filepath, group.issues, contextLines);
249
+ // Build prompt and call LLM with timeout
250
+ const prompt = buildFixPrompt(group.filepath, group.issues, sourceCode);
251
+ const chatPromise = client.chat([{ role: "user", content: prompt }]);
252
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`타임아웃 (${perFileTimeout / 1000}초)`)), perFileTimeout));
253
+ const response = await Promise.race([chatPromise, timeoutPromise]);
254
+ // Extract diff
255
+ const { diff, explanation } = extractDiffAndExplanation(response.content);
256
+ if (diff) {
257
+ // Save diff file
258
+ const safeName = group.filepath.replace(/[/\\]/g, "_").replace(/^_/, "");
259
+ const diffPath = path.join(outputDir, `${safeName}.diff`);
260
+ fs.writeFileSync(diffPath, diff, "utf-8");
261
+ fixResults.push({
262
+ filepath: group.filepath,
263
+ diff,
264
+ explanation,
265
+ issueCount: group.issues.length,
266
+ });
267
+ console.error(`${progress} ✓ ${path.basename(group.filepath)}`);
268
+ }
269
+ else {
270
+ errorCount++;
271
+ skippedFiles.push(`${group.filepath} (diff 생성 실패)`);
272
+ console.error(`${progress} ✗ ${path.basename(group.filepath)} - diff 생성 실패`);
273
+ }
274
+ }
275
+ catch (e) {
276
+ errorCount++;
277
+ const errMsg = e instanceof Error ? e.message : String(e);
278
+ skippedFiles.push(`${group.filepath} (오류: ${errMsg})`);
279
+ console.error(`${progress} ✗ ${path.basename(group.filepath)} - ${errMsg}`);
280
+ }
281
+ }
282
+ // 4. Generate summary
283
+ const summaryMd = generateFixSummaryMd(fixResults, skippedFiles, issues.length);
284
+ fs.writeFileSync(path.join(outputDir, "_fix_summary.md"), summaryMd, "utf-8");
285
+ const summary = {
286
+ totalFiles: fileGroups.length,
287
+ fixedFiles: fixResults.length,
288
+ skippedFiles: skippedFiles.length,
289
+ totalIssues: issues.length,
290
+ fixedIssues: fixResults.reduce((sum, r) => sum + r.issueCount, 0),
291
+ errors: errorCount,
292
+ outputDir,
293
+ };
294
+ return {
295
+ success: true,
296
+ content: JSON.stringify(summary, null, 2),
297
+ };
298
+ }
299
+ catch (error) {
300
+ return { success: false, content: "", error: String(error) };
301
+ }
302
+ },
303
+ };
304
+ // ─── Summary Generation ───
305
+ function generateFixSummaryMd(fixResults, skippedFiles, totalIssues) {
306
+ let md = "# Fix Generation Summary\n\n";
307
+ md += `- 전체 이슈: ${totalIssues}건\n`;
308
+ md += `- 수정 생성: ${fixResults.length}개 파일, ${fixResults.reduce((s, r) => s + r.issueCount, 0)}건\n`;
309
+ md += `- 스킵: ${skippedFiles.length}개 파일\n\n`;
310
+ if (fixResults.length > 0) {
311
+ md += "## 수정된 파일\n\n";
312
+ md += "| 파일 | 이슈 수 | 설명 |\n";
313
+ md += "|------|---------|------|\n";
314
+ for (const r of fixResults) {
315
+ md += `| ${r.filepath} | ${r.issueCount} | ${r.explanation.slice(0, 80)} |\n`;
316
+ }
317
+ md += "\n";
318
+ }
319
+ if (skippedFiles.length > 0) {
320
+ md += "## 스킵된 파일\n\n";
321
+ for (const f of skippedFiles) {
322
+ md += `- ${f}\n`;
323
+ }
324
+ md += "\n";
325
+ }
326
+ md += "## 사용법\n\n";
327
+ md += "```bash\n";
328
+ md += "# diff 적용\n";
329
+ md += "cd /path/to/project\n";
330
+ md += "patch -p1 < .activo/fixes/파일명.diff\n";
331
+ md += "\n";
332
+ md += "# 또는 git apply\n";
333
+ md += "git apply .activo/fixes/파일명.diff\n";
334
+ md += "```\n";
335
+ return md;
336
+ }
337
+ export const fixGenTools = [generateFixesTool];
338
+ //# sourceMappingURL=fixGen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixGen.js","sourceRoot":"","sources":["../../../src/core/tools/fixGen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Tool } from "./types.js";
2
+ interface ParsedPasteIssue {
3
+ rule_id: string;
4
+ severity: string;
5
+ category: string;
6
+ file: string;
7
+ line: number;
8
+ message: string;
9
+ }
10
+ /**
11
+ * Detect if input is tab-separated Excel paste.
12
+ */
13
+ export declare function isExcelPaste(text: string): boolean;
14
+ /**
15
+ * Parse tab-separated Excel paste into issues.
16
+ * Auto-detects column positions by content patterns.
17
+ */
18
+ export declare function parseExcelPaste(text: string): ParsedPasteIssue[];
19
+ export declare const generateImprovementTools: Tool[];
20
+ export {};
21
+ //# sourceMappingURL=generateImprovements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateImprovements.d.ts","sourceRoot":"","sources":["../../../src/core/tools/generateImprovements.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AA4O9C,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAkEhE;AAkZD,eAAO,MAAM,wBAAwB,EAAE,IAAI,EAAoC,CAAC"}