activo 0.3.8 → 0.4.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/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +46 -10
- package/dist/core/agent.js.map +1 -1
- package/dist/core/tools/standards.d.ts +3 -0
- package/dist/core/tools/standards.d.ts.map +1 -1
- package/dist/core/tools/standards.js +383 -0
- package/dist/core/tools/standards.js.map +1 -1
- package/package.json +1 -1
- package/src/core/agent.ts +48 -12
- package/src/core/tools/standards.ts +444 -0
package/dist/core/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAsC,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,UAAU,CAAC;KACpB,CAAC,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAsC,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,UAAU,CAAC;KACpB,CAAC,CAAC;CACJ;AAmED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,WAAW,CAAC,CA2EtB;AAED,wBAAuB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,cAAc,CAAC,EAAE,MAAM,GACtB,cAAc,CAAC,UAAU,CAAC,CAkG5B"}
|
package/dist/core/agent.js
CHANGED
|
@@ -1,16 +1,52 @@
|
|
|
1
1
|
import { getAllTools, executeTool } from "./tools/index.js";
|
|
2
|
-
const BASE_SYSTEM_PROMPT = `You are ACTIVO
|
|
2
|
+
const BASE_SYSTEM_PROMPT = `You are ACTIVO, a code quality analyzer. You MUST call tools to perform tasks.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
4
|
+
## CRITICAL RULES
|
|
5
|
+
1. Call tool IMMEDIATELY when user requests an action
|
|
6
|
+
2. NEVER output text before calling a tool
|
|
7
|
+
3. NEVER fabricate results - only report actual tool output
|
|
8
|
+
4. After tool returns, summarize in user's language (Korean if user speaks Korean)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
## TOOLS BY CATEGORY
|
|
11
|
+
|
|
12
|
+
### Document Conversion & RAG
|
|
13
|
+
- import_hwp_standards(hwpPath, outputDir): Convert HWP to markdown
|
|
14
|
+
- import_pdf_standards(pdfPath, outputDir): Convert PDF to markdown
|
|
15
|
+
- index_standards(directory?): Index standards for RAG search (run after import)
|
|
16
|
+
- search_standards(query, topK?): Search standards by semantic query
|
|
17
|
+
- check_quality_rag(filepath, topK?): Check code using RAG to find relevant standards
|
|
18
|
+
|
|
19
|
+
### Code Analysis (Recommended: use analyze_all)
|
|
20
|
+
- analyze_all(path, include?): Analyze all code (Java/JS/TS/Python)
|
|
21
|
+
- java_analyze(path): Java code analysis
|
|
22
|
+
- java_complexity(path): Java complexity metrics
|
|
23
|
+
- spring_check(path): Spring pattern check
|
|
24
|
+
- ast_analyze(path): JS/TS AST analysis
|
|
25
|
+
- react_check(path): React pattern check
|
|
26
|
+
- vue_check(path): Vue pattern check
|
|
27
|
+
- python_check(path): Python code analysis
|
|
28
|
+
|
|
29
|
+
### SQL/DB Analysis
|
|
30
|
+
- sql_check(path): SQL query analysis
|
|
31
|
+
- mybatis_check(path): MyBatis mapper analysis
|
|
32
|
+
|
|
33
|
+
### Web Analysis
|
|
34
|
+
- css_check(path): CSS analysis
|
|
35
|
+
- html_check(path): HTML analysis
|
|
36
|
+
- dependency_check(path): package.json dependency analysis
|
|
37
|
+
- openapi_check(path): OpenAPI spec analysis
|
|
38
|
+
|
|
39
|
+
### File Operations
|
|
40
|
+
- read_file(path): Read file content
|
|
41
|
+
- write_file(path, content): Write file
|
|
42
|
+
- list_directory(path): List directory contents
|
|
43
|
+
- grep_search(pattern, path): Search pattern in files
|
|
44
|
+
- glob_search(pattern): Search files by pattern
|
|
45
|
+
|
|
46
|
+
## EXAMPLE
|
|
47
|
+
User: "Analyze src folder"
|
|
48
|
+
→ Call analyze_all(path="src") immediately
|
|
49
|
+
→ After result: Summarize findings`;
|
|
14
50
|
// Build system prompt with optional context
|
|
15
51
|
function buildSystemPrompt(contextSummary) {
|
|
16
52
|
if (!contextSummary) {
|
package/dist/core/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAA8B,MAAM,kBAAkB,CAAC;AAqBxF,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,8 @@ export declare const importPdfTool: Tool;
|
|
|
3
3
|
export declare const listStandardsTool: Tool;
|
|
4
4
|
export declare const checkQualityTool: Tool;
|
|
5
5
|
export declare const importHwpTool: Tool;
|
|
6
|
+
export declare const indexStandardsTool: Tool;
|
|
7
|
+
export declare const searchStandardsTool: Tool;
|
|
8
|
+
export declare const checkQualityWithRagTool: Tool;
|
|
6
9
|
export declare const standardsTools: Tool[];
|
|
7
10
|
//# sourceMappingURL=standards.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards.d.ts","sourceRoot":"","sources":["../../../src/core/tools/standards.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standards.d.ts","sourceRoot":"","sources":["../../../src/core/tools/standards.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AA8N9C,eAAO,MAAM,aAAa,EAAE,IAwH3B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,IA2C/B,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,IA0D9B,CAAC;AA+CF,eAAO,MAAM,aAAa,EAAE,IA2H3B,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,IAiFhC,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,IAiEjC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,IAkGrC,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,IAAI,EAQhC,CAAC"}
|
|
@@ -1,9 +1,164 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
3
4
|
import pdfParse from "pdf-parse";
|
|
4
5
|
import { toMarkdown as hwpToMarkdown } from "@ohah/hwpjs";
|
|
5
6
|
import { OllamaClient } from "../llm/ollama.js";
|
|
6
7
|
import { loadConfig } from "../config.js";
|
|
8
|
+
// RAG constants
|
|
9
|
+
const STANDARDS_EMBEDDINGS_DIR = ".activo/standards-rag";
|
|
10
|
+
const DEFAULT_EMBED_MODEL = "nomic-embed-text";
|
|
11
|
+
// RAG helper functions
|
|
12
|
+
function getStandardsRagDir() {
|
|
13
|
+
return path.resolve(process.cwd(), STANDARDS_EMBEDDINGS_DIR);
|
|
14
|
+
}
|
|
15
|
+
function ensureStandardsRagDir() {
|
|
16
|
+
const dir = getStandardsRagDir();
|
|
17
|
+
if (!fs.existsSync(dir)) {
|
|
18
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getStandardsIndexPath() {
|
|
22
|
+
return path.join(getStandardsRagDir(), "index.json");
|
|
23
|
+
}
|
|
24
|
+
function getStandardsDataPath() {
|
|
25
|
+
return path.join(getStandardsRagDir(), "embeddings.json");
|
|
26
|
+
}
|
|
27
|
+
function loadStandardsIndex() {
|
|
28
|
+
const indexPath = getStandardsIndexPath();
|
|
29
|
+
if (fs.existsSync(indexPath)) {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(fs.readFileSync(indexPath, "utf-8"));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function saveStandardsIndex(index) {
|
|
40
|
+
ensureStandardsRagDir();
|
|
41
|
+
fs.writeFileSync(getStandardsIndexPath(), JSON.stringify(index, null, 2));
|
|
42
|
+
}
|
|
43
|
+
function loadStandardsEmbeddings() {
|
|
44
|
+
const dataPath = getStandardsDataPath();
|
|
45
|
+
if (fs.existsSync(dataPath)) {
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(fs.readFileSync(dataPath, "utf-8"));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
function saveStandardsEmbeddings(data) {
|
|
56
|
+
ensureStandardsRagDir();
|
|
57
|
+
fs.writeFileSync(getStandardsDataPath(), JSON.stringify(data));
|
|
58
|
+
}
|
|
59
|
+
function calculateHash(content) {
|
|
60
|
+
return crypto.createHash("md5").update(content).digest("hex");
|
|
61
|
+
}
|
|
62
|
+
// Split markdown into semantic chunks (by sections/rules)
|
|
63
|
+
function splitStandardsIntoChunks(content, filepath) {
|
|
64
|
+
const chunks = [];
|
|
65
|
+
const lines = content.split("\n");
|
|
66
|
+
let currentSection = "";
|
|
67
|
+
let currentRuleId;
|
|
68
|
+
let currentContent = [];
|
|
69
|
+
let inRule = false;
|
|
70
|
+
for (const line of lines) {
|
|
71
|
+
// Detect rule pattern: ## RULE-XXX: Title
|
|
72
|
+
const ruleMatch = line.match(/^##\s+(RULE-\d+):\s*(.+)/i);
|
|
73
|
+
// Detect section headers
|
|
74
|
+
const sectionMatch = line.match(/^#+\s+(.+)/);
|
|
75
|
+
if (ruleMatch) {
|
|
76
|
+
// Save previous chunk
|
|
77
|
+
if (currentContent.length > 0) {
|
|
78
|
+
const text = currentContent.join("\n").trim();
|
|
79
|
+
if (text) {
|
|
80
|
+
chunks.push({
|
|
81
|
+
filepath,
|
|
82
|
+
section: currentSection,
|
|
83
|
+
ruleId: currentRuleId,
|
|
84
|
+
content: text,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
currentRuleId = ruleMatch[1];
|
|
89
|
+
currentSection = ruleMatch[2];
|
|
90
|
+
currentContent = [line];
|
|
91
|
+
inRule = true;
|
|
92
|
+
}
|
|
93
|
+
else if (sectionMatch && !inRule) {
|
|
94
|
+
// Save previous chunk
|
|
95
|
+
if (currentContent.length > 0) {
|
|
96
|
+
const text = currentContent.join("\n").trim();
|
|
97
|
+
if (text) {
|
|
98
|
+
chunks.push({
|
|
99
|
+
filepath,
|
|
100
|
+
section: currentSection,
|
|
101
|
+
ruleId: currentRuleId,
|
|
102
|
+
content: text,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
currentSection = sectionMatch[1];
|
|
107
|
+
currentRuleId = undefined;
|
|
108
|
+
currentContent = [line];
|
|
109
|
+
}
|
|
110
|
+
else if (line.match(/^##/) && inRule) {
|
|
111
|
+
// End of rule, start new section
|
|
112
|
+
if (currentContent.length > 0) {
|
|
113
|
+
const text = currentContent.join("\n").trim();
|
|
114
|
+
if (text) {
|
|
115
|
+
chunks.push({
|
|
116
|
+
filepath,
|
|
117
|
+
section: currentSection,
|
|
118
|
+
ruleId: currentRuleId,
|
|
119
|
+
content: text,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
inRule = false;
|
|
124
|
+
currentRuleId = undefined;
|
|
125
|
+
const newSection = line.match(/^#+\s+(.+)/);
|
|
126
|
+
currentSection = newSection ? newSection[1] : "";
|
|
127
|
+
currentContent = [line];
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
currentContent.push(line);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Save remaining content
|
|
134
|
+
if (currentContent.length > 0) {
|
|
135
|
+
const text = currentContent.join("\n").trim();
|
|
136
|
+
if (text) {
|
|
137
|
+
chunks.push({
|
|
138
|
+
filepath,
|
|
139
|
+
section: currentSection,
|
|
140
|
+
ruleId: currentRuleId,
|
|
141
|
+
content: text,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Filter out small chunks (less than 50 chars)
|
|
146
|
+
return chunks.filter(c => c.content.length >= 50);
|
|
147
|
+
}
|
|
148
|
+
// Cosine similarity
|
|
149
|
+
function cosineSimilarity(a, b) {
|
|
150
|
+
if (a.length !== b.length)
|
|
151
|
+
return 0;
|
|
152
|
+
let dotProduct = 0;
|
|
153
|
+
let normA = 0;
|
|
154
|
+
let normB = 0;
|
|
155
|
+
for (let i = 0; i < a.length; i++) {
|
|
156
|
+
dotProduct += a[i] * b[i];
|
|
157
|
+
normA += a[i] * a[i];
|
|
158
|
+
normB += b[i] * b[i];
|
|
159
|
+
}
|
|
160
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
161
|
+
}
|
|
7
162
|
// Resolve natural language directory paths
|
|
8
163
|
function resolveOutputDir(outputDir) {
|
|
9
164
|
if (!outputDir) {
|
|
@@ -383,11 +538,239 @@ export const importHwpTool = {
|
|
|
383
538
|
}
|
|
384
539
|
},
|
|
385
540
|
};
|
|
541
|
+
// Index Standards for RAG
|
|
542
|
+
export const indexStandardsTool = {
|
|
543
|
+
name: "index_standards",
|
|
544
|
+
description: "Index development standards for RAG search. Run this after importing PDF/HWP files to enable semantic search.",
|
|
545
|
+
parameters: {
|
|
546
|
+
type: "object",
|
|
547
|
+
properties: {
|
|
548
|
+
directory: {
|
|
549
|
+
type: "string",
|
|
550
|
+
description: "Standards directory (default: .activo/standards)",
|
|
551
|
+
},
|
|
552
|
+
},
|
|
553
|
+
},
|
|
554
|
+
handler: async (args) => {
|
|
555
|
+
try {
|
|
556
|
+
const dir = resolveOutputDir(args.directory);
|
|
557
|
+
if (!fs.existsSync(dir)) {
|
|
558
|
+
return { success: false, content: "", error: `Standards directory not found: ${dir}` };
|
|
559
|
+
}
|
|
560
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md") && f !== "_index.md");
|
|
561
|
+
if (files.length === 0) {
|
|
562
|
+
return { success: false, content: "", error: "No markdown files found in standards directory" };
|
|
563
|
+
}
|
|
564
|
+
const config = loadConfig();
|
|
565
|
+
const client = new OllamaClient(config.ollama);
|
|
566
|
+
const allChunks = [];
|
|
567
|
+
// Collect all chunks from all files
|
|
568
|
+
for (const file of files) {
|
|
569
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
570
|
+
const chunks = splitStandardsIntoChunks(content, file);
|
|
571
|
+
allChunks.push(...chunks);
|
|
572
|
+
}
|
|
573
|
+
if (allChunks.length === 0) {
|
|
574
|
+
return { success: false, content: "", error: "No valid chunks found in standards files" };
|
|
575
|
+
}
|
|
576
|
+
// Generate embeddings
|
|
577
|
+
const embeddings = [];
|
|
578
|
+
let processed = 0;
|
|
579
|
+
for (const chunk of allChunks) {
|
|
580
|
+
const embedding = await client.embed(chunk.content, DEFAULT_EMBED_MODEL);
|
|
581
|
+
embeddings.push({
|
|
582
|
+
chunk,
|
|
583
|
+
embedding,
|
|
584
|
+
hash: calculateHash(chunk.content),
|
|
585
|
+
});
|
|
586
|
+
processed++;
|
|
587
|
+
}
|
|
588
|
+
// Save embeddings
|
|
589
|
+
saveStandardsEmbeddings(embeddings);
|
|
590
|
+
// Save index
|
|
591
|
+
const index = {
|
|
592
|
+
version: "1.0",
|
|
593
|
+
model: DEFAULT_EMBED_MODEL,
|
|
594
|
+
createdAt: new Date().toISOString(),
|
|
595
|
+
updatedAt: new Date().toISOString(),
|
|
596
|
+
totalChunks: embeddings.length,
|
|
597
|
+
};
|
|
598
|
+
saveStandardsIndex(index);
|
|
599
|
+
return {
|
|
600
|
+
success: true,
|
|
601
|
+
content: `Standards indexed successfully!\n\n` +
|
|
602
|
+
`📂 Directory: ${dir}\n` +
|
|
603
|
+
`📄 Files: ${files.length}\n` +
|
|
604
|
+
`🔖 Chunks: ${embeddings.length}\n` +
|
|
605
|
+
`🧠 Model: ${DEFAULT_EMBED_MODEL}\n\n` +
|
|
606
|
+
`Use 'search_standards' to find relevant rules.`,
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
catch (error) {
|
|
610
|
+
return { success: false, content: "", error: String(error) };
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
};
|
|
614
|
+
// Search Standards using RAG
|
|
615
|
+
export const searchStandardsTool = {
|
|
616
|
+
name: "search_standards",
|
|
617
|
+
description: "Search development standards using semantic search (RAG). Returns relevant rules/sections based on query.",
|
|
618
|
+
parameters: {
|
|
619
|
+
type: "object",
|
|
620
|
+
required: ["query"],
|
|
621
|
+
properties: {
|
|
622
|
+
query: {
|
|
623
|
+
type: "string",
|
|
624
|
+
description: "Search query (e.g., 'variable naming', 'error handling', 'SQL injection')",
|
|
625
|
+
},
|
|
626
|
+
topK: {
|
|
627
|
+
type: "number",
|
|
628
|
+
description: "Number of results to return (default: 5)",
|
|
629
|
+
},
|
|
630
|
+
},
|
|
631
|
+
},
|
|
632
|
+
handler: async (args) => {
|
|
633
|
+
try {
|
|
634
|
+
const query = args.query;
|
|
635
|
+
const topK = args.topK || 5;
|
|
636
|
+
const embeddings = loadStandardsEmbeddings();
|
|
637
|
+
if (embeddings.length === 0) {
|
|
638
|
+
return {
|
|
639
|
+
success: false,
|
|
640
|
+
content: "",
|
|
641
|
+
error: "No standards indexed. Run 'index_standards' first.",
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
const config = loadConfig();
|
|
645
|
+
const client = new OllamaClient(config.ollama);
|
|
646
|
+
// Get query embedding
|
|
647
|
+
const queryEmbedding = await client.embed(query, DEFAULT_EMBED_MODEL);
|
|
648
|
+
// Calculate similarities
|
|
649
|
+
const results = embeddings.map((e) => ({
|
|
650
|
+
...e,
|
|
651
|
+
similarity: cosineSimilarity(queryEmbedding, e.embedding),
|
|
652
|
+
}));
|
|
653
|
+
// Sort by similarity and get top K
|
|
654
|
+
results.sort((a, b) => b.similarity - a.similarity);
|
|
655
|
+
const topResults = results.slice(0, topK);
|
|
656
|
+
// Format results
|
|
657
|
+
let output = `## Search Results for: "${query}"\n\n`;
|
|
658
|
+
output += `Found ${topResults.length} relevant standards:\n\n`;
|
|
659
|
+
for (let i = 0; i < topResults.length; i++) {
|
|
660
|
+
const r = topResults[i];
|
|
661
|
+
output += `### ${i + 1}. ${r.chunk.ruleId || r.chunk.section || "Section"}\n`;
|
|
662
|
+
output += `📄 File: ${r.chunk.filepath}\n`;
|
|
663
|
+
output += `📊 Relevance: ${(r.similarity * 100).toFixed(1)}%\n\n`;
|
|
664
|
+
output += `${r.chunk.content.slice(0, 500)}${r.chunk.content.length > 500 ? "..." : ""}\n\n`;
|
|
665
|
+
output += `---\n\n`;
|
|
666
|
+
}
|
|
667
|
+
return { success: true, content: output };
|
|
668
|
+
}
|
|
669
|
+
catch (error) {
|
|
670
|
+
return { success: false, content: "", error: String(error) };
|
|
671
|
+
}
|
|
672
|
+
},
|
|
673
|
+
};
|
|
674
|
+
// Check Code Quality with RAG
|
|
675
|
+
export const checkQualityWithRagTool = {
|
|
676
|
+
name: "check_quality_rag",
|
|
677
|
+
description: "Check code quality using RAG to find relevant standards automatically.",
|
|
678
|
+
parameters: {
|
|
679
|
+
type: "object",
|
|
680
|
+
required: ["filepath"],
|
|
681
|
+
properties: {
|
|
682
|
+
filepath: {
|
|
683
|
+
type: "string",
|
|
684
|
+
description: "File to check",
|
|
685
|
+
},
|
|
686
|
+
topK: {
|
|
687
|
+
type: "number",
|
|
688
|
+
description: "Number of relevant standards to use (default: 5)",
|
|
689
|
+
},
|
|
690
|
+
},
|
|
691
|
+
},
|
|
692
|
+
handler: async (args) => {
|
|
693
|
+
try {
|
|
694
|
+
const filepath = path.resolve(args.filepath);
|
|
695
|
+
const topK = args.topK || 5;
|
|
696
|
+
if (!fs.existsSync(filepath)) {
|
|
697
|
+
return { success: false, content: "", error: `File not found: ${filepath}` };
|
|
698
|
+
}
|
|
699
|
+
const embeddings = loadStandardsEmbeddings();
|
|
700
|
+
if (embeddings.length === 0) {
|
|
701
|
+
return {
|
|
702
|
+
success: false,
|
|
703
|
+
content: "",
|
|
704
|
+
error: "No standards indexed. Run 'index_standards' first after importing PDF/HWP.",
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
// Read code
|
|
708
|
+
const code = fs.readFileSync(filepath, "utf-8");
|
|
709
|
+
const config = loadConfig();
|
|
710
|
+
const client = new OllamaClient(config.ollama);
|
|
711
|
+
// Create query from code (first 1000 chars + filename)
|
|
712
|
+
const queryText = `Code analysis for ${path.basename(filepath)}:\n${code.slice(0, 1000)}`;
|
|
713
|
+
const queryEmbedding = await client.embed(queryText, DEFAULT_EMBED_MODEL);
|
|
714
|
+
// Find relevant standards
|
|
715
|
+
const results = embeddings.map((e) => ({
|
|
716
|
+
...e,
|
|
717
|
+
similarity: cosineSimilarity(queryEmbedding, e.embedding),
|
|
718
|
+
}));
|
|
719
|
+
results.sort((a, b) => b.similarity - a.similarity);
|
|
720
|
+
const relevantStandards = results.slice(0, topK);
|
|
721
|
+
// Build standards context
|
|
722
|
+
let standardsContext = "## Relevant Development Standards\n\n";
|
|
723
|
+
for (const r of relevantStandards) {
|
|
724
|
+
if (r.chunk.ruleId) {
|
|
725
|
+
standardsContext += `### ${r.chunk.ruleId}: ${r.chunk.section}\n`;
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
standardsContext += `### ${r.chunk.section}\n`;
|
|
729
|
+
}
|
|
730
|
+
standardsContext += `${r.chunk.content}\n\n`;
|
|
731
|
+
}
|
|
732
|
+
// Build analysis prompt
|
|
733
|
+
const ext = path.extname(filepath);
|
|
734
|
+
const lang = { ".ts": "typescript", ".js": "javascript", ".java": "java", ".py": "python" }[ext] || "text";
|
|
735
|
+
const prompt = `You are a code quality expert. Analyze the code based on the provided development standards.
|
|
736
|
+
|
|
737
|
+
${standardsContext}
|
|
738
|
+
|
|
739
|
+
## Code to Analyze
|
|
740
|
+
File: ${filepath}
|
|
741
|
+
\`\`\`${lang}
|
|
742
|
+
${code.slice(0, 6000)}
|
|
743
|
+
\`\`\`
|
|
744
|
+
|
|
745
|
+
## Analysis Request
|
|
746
|
+
1. Check for violations of the above standards
|
|
747
|
+
2. Provide specific line numbers if possible
|
|
748
|
+
3. Suggest improvements
|
|
749
|
+
4. Rate overall compliance (1-10)
|
|
750
|
+
|
|
751
|
+
Respond in Korean.`;
|
|
752
|
+
const response = await client.chat([{ role: "user", content: prompt }]);
|
|
753
|
+
return {
|
|
754
|
+
success: true,
|
|
755
|
+
content: `## Code Quality Analysis (RAG)\n\n` +
|
|
756
|
+
`📄 File: ${filepath}\n` +
|
|
757
|
+
`🔖 Standards used: ${relevantStandards.length}\n\n` +
|
|
758
|
+
`---\n\n${response.content}`,
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
catch (error) {
|
|
762
|
+
return { success: false, content: "", error: String(error) };
|
|
763
|
+
}
|
|
764
|
+
},
|
|
765
|
+
};
|
|
386
766
|
// All standards tools
|
|
387
767
|
export const standardsTools = [
|
|
388
768
|
importPdfTool,
|
|
389
769
|
importHwpTool,
|
|
390
770
|
listStandardsTool,
|
|
391
771
|
checkQualityTool,
|
|
772
|
+
indexStandardsTool,
|
|
773
|
+
searchStandardsTool,
|
|
774
|
+
checkQualityWithRagTool,
|
|
392
775
|
];
|
|
393
776
|
//# sourceMappingURL=standards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards.js","sourceRoot":"","sources":["../../../src/core/tools/standards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards.js","sourceRoot":"","sources":["../../../src/core/tools/standards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,gBAAgB;AAChB,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AACzD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAwB/C,uBAAuB;AACvB,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAqB;IAC/C,qBAAqB,EAAE,CAAC;IACxB,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,uBAAuB;IAC9B,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAA0B;IACzD,qBAAqB,EAAE,CAAC;IACxB,EAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,0DAA0D;AAC1D,SAAS,wBAAwB,CAAC,OAAe,EAAE,QAAgB;IACjE,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,aAAiC,CAAC;IACtC,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1D,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,SAAS,EAAE,CAAC;YACd,sBAAsB;YACtB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ;wBACR,OAAO,EAAE,cAAc;wBACvB,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,sBAAsB;YACtB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ;wBACR,OAAO,EAAE,cAAc;wBACvB,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,aAAa,GAAG,SAAS,CAAC;YAC1B,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACvC,iCAAiC;YACjC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ;wBACR,OAAO,EAAE,cAAc;wBACvB,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,MAAM,GAAG,KAAK,CAAC;YACf,aAAa,GAAG,SAAS,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5C,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ;gBACR,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,oBAAoB;AACpB,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,2CAA2C;AAC3C,SAAS,gBAAgB,CAAC,SAA6B;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAElD,4BAA4B;IAC5B,MAAM,kBAAkB,GAAG;QACzB,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;QACpC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;QAC9B,mBAAmB,EAAE,gBAAgB,EAAE,aAAa;QACpD,GAAG,EAAE,IAAI;KACV,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,4KAA4K;IACzL,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oFAAoF;aAClG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,iEAAiE;aAC/E;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,8BAA8B;YAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;YACrC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAA+B,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAqB,IAAI,KAAK,CAAC;YAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAC;YAC7E,CAAC;YAED,wCAAwC;YACxC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAElC,0BAA0B;YAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,IAAI,UAAU,EAAE,CAAC;gBACf,sBAAsB;gBACtB,MAAM,cAAc,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBAExD,IAAI,EAAE,GAAG,KAAK,QAAQ,MAAM,CAAC;gBAC7B,EAAE,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9C,EAAE,IAAI,gBAAgB,cAAc,IAAI,CAAC;gBACzC,EAAE,IAAI,YAAY,QAAQ,IAAI,CAAC;gBAC/B,EAAE,IAAI,yBAAyB,CAAC;gBAChC,EAAE,IAAI,SAAS,CAAC;gBAChB,EAAE,IAAI,IAAI,CAAC;gBACX,EAAE,IAAI,WAAW,CAAC;gBAClB,EAAE,IAAI,4CAA4C,CAAC;gBAEnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAEtD,IAAI,EAAE,GAAG,KAAK,QAAQ,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC7C,EAAE,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC9C,EAAE,IAAI,gBAAgB,cAAc,IAAI,CAAC;oBACzC,EAAE,IAAI,YAAY,QAAQ,IAAI,CAAC;oBAC/B,EAAE,IAAI,yBAAyB,CAAC;oBAChC,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;oBAChB,EAAE,IAAI,WAAW,CAAC;oBAClB,EAAE,IAAI,4CAA4C,CAAC;oBAEnD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;gBAED,eAAe;gBACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBACpD,IAAI,OAAO,GAAG,mCAAmC,CAAC;gBAClD,OAAO,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnD,OAAO,IAAI,gBAAgB,cAAc,IAAI,CAAC;gBAC9C,OAAO,IAAI,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC;gBAC1C,OAAO,IAAI,yBAAyB,CAAC;gBACrC,OAAO,IAAI,cAAc,CAAC;gBAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAClC,CAAC;gBACD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,gBAAgB;oBACvB,aAAa,SAAS,IAAI;oBAC1B,YAAY,OAAO,CAAC,MAAM,IAAI;oBAC9B,WAAW,QAAQ,IAAI;oBACvB,yBAAyB;oBACzB,WAAW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;oBACxD,8BAA8B;oBAC9B,sEAAsE;aACzE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,kDAAkD;IAC/D,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAA+B,CAAC,CAAC;YAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;YACzF,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;YACxF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;YAChE,CAAC;YAED,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;gBACtD,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YACpD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,wBAAwB,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,MAAM,WAAW,UAAU,QAAQ;aACrH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,kDAAkD;IAC/D,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAkB,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAkC,CAAC,CAAC;YAE/E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,QAAQ,EAAE,EAAE,CAAC;YAC/E,CAAC;YAED,iBAAiB;YACjB,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;gBACjG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,SAAS,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;gBAChF,CAAC;YACH,CAAC;YAED,WAAW;YACX,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC;YACtG,CAAC;YAED,wBAAwB;YACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAE9D,cAAc;YACd,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAExE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,mBAAmB;AACnB,SAAS,eAAe,CAAC,IAAY,EAAE,OAAe;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,IAAI,IAAI,GAAG,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB,EAAE,SAAiB;IAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;IAE3G,IAAI,MAAM,GAAG,qCAAqC,CAAC;IAEnD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,eAAe,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,mBAAmB,QAAQ,WAAW,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC;IAC3F,MAAM,IAAI,WAAW,CAAC;IACtB,MAAM,IAAI,qBAAqB,CAAC;IAChC,MAAM,IAAI,YAAY,CAAC;IACvB,MAAM,IAAI,oBAAoB,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,6JAA6J;IAC1K,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oFAAoF;aAClG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,iEAAiE;aAC/E;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,8BAA8B;YAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;YACrC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAA+B,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAqB,IAAI,KAAK,CAAC;YAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAC;YAC7E,CAAC;YAED,mCAAmC;YACnC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE;gBACnD,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;YAEH,0BAA0B;YAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,IAAI,UAAU,EAAE,CAAC;gBACf,sBAAsB;gBACtB,MAAM,cAAc,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBAExD,IAAI,EAAE,GAAG,KAAK,QAAQ,MAAM,CAAC;gBAC7B,EAAE,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9C,EAAE,IAAI,gBAAgB,cAAc,IAAI,CAAC;gBACzC,EAAE,IAAI,iBAAiB,CAAC;gBACxB,EAAE,IAAI,sBAAsB,CAAC;gBAC7B,EAAE,IAAI,SAAS,CAAC;gBAChB,EAAE,IAAI,IAAI,CAAC;gBACX,EAAE,IAAI,WAAW,CAAC;gBAClB,EAAE,IAAI,4CAA4C,CAAC;gBAEnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAEtD,IAAI,EAAE,GAAG,KAAK,QAAQ,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC7C,EAAE,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC9C,EAAE,IAAI,gBAAgB,cAAc,IAAI,CAAC;oBACzC,EAAE,IAAI,iBAAiB,CAAC;oBACxB,EAAE,IAAI,sBAAsB,CAAC;oBAC7B,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;oBAChB,EAAE,IAAI,WAAW,CAAC;oBAClB,EAAE,IAAI,4CAA4C,CAAC;oBAEnD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;gBAED,eAAe;gBACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBACpD,IAAI,OAAO,GAAG,mCAAmC,CAAC;gBAClD,OAAO,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnD,OAAO,IAAI,gBAAgB,cAAc,IAAI,CAAC;gBAC9C,OAAO,IAAI,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC;gBAC1C,OAAO,IAAI,sBAAsB,CAAC;gBAClC,OAAO,IAAI,cAAc,CAAC;gBAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAClC,CAAC;gBACD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,gBAAgB;oBACvB,aAAa,SAAS,IAAI;oBAC1B,YAAY,OAAO,CAAC,MAAM,IAAI;oBAC9B,cAAc;oBACd,sBAAsB;oBACtB,WAAW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;oBACxD,8BAA8B;oBAC9B,sEAAsE;aACzE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,+GAA+G;IAC5H,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAA+B,CAAC,CAAC;YAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,kCAAkC,GAAG,EAAE,EAAE,CAAC;YACzF,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;YACxF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;YAClG,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/C,MAAM,SAAS,GAAqB,EAAE,CAAC;YAEvC,oCAAoC;YACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACvD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC;YAC5F,CAAC;YAED,sBAAsB;YACtB,MAAM,UAAU,GAAyB,EAAE,CAAC;YAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;gBACzE,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK;oBACL,SAAS;oBACT,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;iBACnC,CAAC,CAAC;gBACH,SAAS,EAAE,CAAC;YACd,CAAC;YAED,kBAAkB;YAClB,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAEpC,aAAa;YACb,MAAM,KAAK,GAAmB;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,WAAW,EAAE,UAAU,CAAC,MAAM;aAC/B,CAAC;YACF,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,qCAAqC;oBAC5C,iBAAiB,GAAG,IAAI;oBACxB,aAAa,KAAK,CAAC,MAAM,IAAI;oBAC7B,cAAc,UAAU,CAAC,MAAM,IAAI;oBACnC,aAAa,mBAAmB,MAAM;oBACtC,gDAAgD;aACnD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,2GAA2G;IACxH,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2EAA2E;aACzF;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;YACnC,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,CAAC,CAAC;YAExC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,oDAAoD;iBAC5D,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/C,sBAAsB;YACtB,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YAEtE,yBAAyB;YACzB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,GAAG,CAAC;gBACJ,UAAU,EAAE,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC;aAC1D,CAAC,CAAC,CAAC;YAEJ,mCAAmC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAE1C,iBAAiB;YACjB,IAAI,MAAM,GAAG,2BAA2B,KAAK,OAAO,CAAC;YACrD,MAAM,IAAI,SAAS,UAAU,CAAC,MAAM,0BAA0B,CAAC;YAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC;gBAC9E,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC3C,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBAClE,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;gBAC7F,MAAM,IAAI,SAAS,CAAC;YACtB,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,uBAAuB,GAAS;IAC3C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,wEAAwE;IACrF,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC7B;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAkB,CAAC,CAAC;YACvD,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,CAAC,CAAC;YAExC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,QAAQ,EAAE,EAAE,CAAC;YAC/E,CAAC;YAED,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,4EAA4E;iBACpF,CAAC;YACJ,CAAC;YAED,YAAY;YACZ,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/C,uDAAuD;YACvD,MAAM,SAAS,GAAG,qBAAqB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1F,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAE1E,0BAA0B;YAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,GAAG,CAAC;gBACJ,UAAU,EAAE,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC;aAC1D,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAEjD,0BAA0B;YAC1B,IAAI,gBAAgB,GAAG,uCAAuC,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACnB,gBAAgB,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,gBAAgB,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC;gBACjD,CAAC;gBACD,gBAAgB,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;YAC/C,CAAC;YAED,wBAAwB;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;YAE3G,MAAM,MAAM,GAAG;;EAEnB,gBAAgB;;;QAGV,QAAQ;QACR,IAAI;EACV,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;;;;;;;;;mBASF,CAAC;YAEd,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAExE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,oCAAoC;oBAC3C,YAAY,QAAQ,IAAI;oBACxB,sBAAsB,iBAAiB,CAAC,MAAM,MAAM;oBACpD,UAAU,QAAQ,CAAC,OAAO,EAAE;aAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;CACxB,CAAC"}
|
package/package.json
CHANGED
package/src/core/agent.ts
CHANGED
|
@@ -21,18 +21,54 @@ export interface AgentResult {
|
|
|
21
21
|
}>;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
const BASE_SYSTEM_PROMPT = `You are ACTIVO
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
const BASE_SYSTEM_PROMPT = `You are ACTIVO, a code quality analyzer. You MUST call tools to perform tasks.
|
|
25
|
+
|
|
26
|
+
## CRITICAL RULES
|
|
27
|
+
1. Call tool IMMEDIATELY when user requests an action
|
|
28
|
+
2. NEVER output text before calling a tool
|
|
29
|
+
3. NEVER fabricate results - only report actual tool output
|
|
30
|
+
4. After tool returns, summarize in user's language (Korean if user speaks Korean)
|
|
31
|
+
|
|
32
|
+
## TOOLS BY CATEGORY
|
|
33
|
+
|
|
34
|
+
### Document Conversion & RAG
|
|
35
|
+
- import_hwp_standards(hwpPath, outputDir): Convert HWP to markdown
|
|
36
|
+
- import_pdf_standards(pdfPath, outputDir): Convert PDF to markdown
|
|
37
|
+
- index_standards(directory?): Index standards for RAG search (run after import)
|
|
38
|
+
- search_standards(query, topK?): Search standards by semantic query
|
|
39
|
+
- check_quality_rag(filepath, topK?): Check code using RAG to find relevant standards
|
|
40
|
+
|
|
41
|
+
### Code Analysis (Recommended: use analyze_all)
|
|
42
|
+
- analyze_all(path, include?): Analyze all code (Java/JS/TS/Python)
|
|
43
|
+
- java_analyze(path): Java code analysis
|
|
44
|
+
- java_complexity(path): Java complexity metrics
|
|
45
|
+
- spring_check(path): Spring pattern check
|
|
46
|
+
- ast_analyze(path): JS/TS AST analysis
|
|
47
|
+
- react_check(path): React pattern check
|
|
48
|
+
- vue_check(path): Vue pattern check
|
|
49
|
+
- python_check(path): Python code analysis
|
|
50
|
+
|
|
51
|
+
### SQL/DB Analysis
|
|
52
|
+
- sql_check(path): SQL query analysis
|
|
53
|
+
- mybatis_check(path): MyBatis mapper analysis
|
|
54
|
+
|
|
55
|
+
### Web Analysis
|
|
56
|
+
- css_check(path): CSS analysis
|
|
57
|
+
- html_check(path): HTML analysis
|
|
58
|
+
- dependency_check(path): package.json dependency analysis
|
|
59
|
+
- openapi_check(path): OpenAPI spec analysis
|
|
60
|
+
|
|
61
|
+
### File Operations
|
|
62
|
+
- read_file(path): Read file content
|
|
63
|
+
- write_file(path, content): Write file
|
|
64
|
+
- list_directory(path): List directory contents
|
|
65
|
+
- grep_search(pattern, path): Search pattern in files
|
|
66
|
+
- glob_search(pattern): Search files by pattern
|
|
67
|
+
|
|
68
|
+
## EXAMPLE
|
|
69
|
+
User: "Analyze src folder"
|
|
70
|
+
→ Call analyze_all(path="src") immediately
|
|
71
|
+
→ After result: Summarize findings`;
|
|
36
72
|
|
|
37
73
|
// Build system prompt with optional context
|
|
38
74
|
function buildSystemPrompt(contextSummary?: string): string {
|
|
@@ -1,11 +1,199 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
3
4
|
import pdfParse from "pdf-parse";
|
|
4
5
|
import { toMarkdown as hwpToMarkdown } from "@ohah/hwpjs";
|
|
5
6
|
import { Tool, ToolResult } from "./types.js";
|
|
6
7
|
import { OllamaClient } from "../llm/ollama.js";
|
|
7
8
|
import { loadConfig } from "../config.js";
|
|
8
9
|
|
|
10
|
+
// RAG constants
|
|
11
|
+
const STANDARDS_EMBEDDINGS_DIR = ".activo/standards-rag";
|
|
12
|
+
const DEFAULT_EMBED_MODEL = "nomic-embed-text";
|
|
13
|
+
|
|
14
|
+
// RAG interfaces
|
|
15
|
+
interface StandardsChunk {
|
|
16
|
+
filepath: string;
|
|
17
|
+
section: string;
|
|
18
|
+
ruleId?: string;
|
|
19
|
+
content: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface StandardsEmbedding {
|
|
23
|
+
chunk: StandardsChunk;
|
|
24
|
+
embedding: number[];
|
|
25
|
+
hash: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface StandardsIndex {
|
|
29
|
+
version: string;
|
|
30
|
+
model: string;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
updatedAt: string;
|
|
33
|
+
totalChunks: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// RAG helper functions
|
|
37
|
+
function getStandardsRagDir(): string {
|
|
38
|
+
return path.resolve(process.cwd(), STANDARDS_EMBEDDINGS_DIR);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function ensureStandardsRagDir(): void {
|
|
42
|
+
const dir = getStandardsRagDir();
|
|
43
|
+
if (!fs.existsSync(dir)) {
|
|
44
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getStandardsIndexPath(): string {
|
|
49
|
+
return path.join(getStandardsRagDir(), "index.json");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getStandardsDataPath(): string {
|
|
53
|
+
return path.join(getStandardsRagDir(), "embeddings.json");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function loadStandardsIndex(): StandardsIndex | null {
|
|
57
|
+
const indexPath = getStandardsIndexPath();
|
|
58
|
+
if (fs.existsSync(indexPath)) {
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(fs.readFileSync(indexPath, "utf-8"));
|
|
61
|
+
} catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function saveStandardsIndex(index: StandardsIndex): void {
|
|
69
|
+
ensureStandardsRagDir();
|
|
70
|
+
fs.writeFileSync(getStandardsIndexPath(), JSON.stringify(index, null, 2));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function loadStandardsEmbeddings(): StandardsEmbedding[] {
|
|
74
|
+
const dataPath = getStandardsDataPath();
|
|
75
|
+
if (fs.existsSync(dataPath)) {
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(fs.readFileSync(dataPath, "utf-8"));
|
|
78
|
+
} catch {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function saveStandardsEmbeddings(data: StandardsEmbedding[]): void {
|
|
86
|
+
ensureStandardsRagDir();
|
|
87
|
+
fs.writeFileSync(getStandardsDataPath(), JSON.stringify(data));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function calculateHash(content: string): string {
|
|
91
|
+
return crypto.createHash("md5").update(content).digest("hex");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Split markdown into semantic chunks (by sections/rules)
|
|
95
|
+
function splitStandardsIntoChunks(content: string, filepath: string): StandardsChunk[] {
|
|
96
|
+
const chunks: StandardsChunk[] = [];
|
|
97
|
+
const lines = content.split("\n");
|
|
98
|
+
|
|
99
|
+
let currentSection = "";
|
|
100
|
+
let currentRuleId: string | undefined;
|
|
101
|
+
let currentContent: string[] = [];
|
|
102
|
+
let inRule = false;
|
|
103
|
+
|
|
104
|
+
for (const line of lines) {
|
|
105
|
+
// Detect rule pattern: ## RULE-XXX: Title
|
|
106
|
+
const ruleMatch = line.match(/^##\s+(RULE-\d+):\s*(.+)/i);
|
|
107
|
+
// Detect section headers
|
|
108
|
+
const sectionMatch = line.match(/^#+\s+(.+)/);
|
|
109
|
+
|
|
110
|
+
if (ruleMatch) {
|
|
111
|
+
// Save previous chunk
|
|
112
|
+
if (currentContent.length > 0) {
|
|
113
|
+
const text = currentContent.join("\n").trim();
|
|
114
|
+
if (text) {
|
|
115
|
+
chunks.push({
|
|
116
|
+
filepath,
|
|
117
|
+
section: currentSection,
|
|
118
|
+
ruleId: currentRuleId,
|
|
119
|
+
content: text,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
currentRuleId = ruleMatch[1];
|
|
124
|
+
currentSection = ruleMatch[2];
|
|
125
|
+
currentContent = [line];
|
|
126
|
+
inRule = true;
|
|
127
|
+
} else if (sectionMatch && !inRule) {
|
|
128
|
+
// Save previous chunk
|
|
129
|
+
if (currentContent.length > 0) {
|
|
130
|
+
const text = currentContent.join("\n").trim();
|
|
131
|
+
if (text) {
|
|
132
|
+
chunks.push({
|
|
133
|
+
filepath,
|
|
134
|
+
section: currentSection,
|
|
135
|
+
ruleId: currentRuleId,
|
|
136
|
+
content: text,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
currentSection = sectionMatch[1];
|
|
141
|
+
currentRuleId = undefined;
|
|
142
|
+
currentContent = [line];
|
|
143
|
+
} else if (line.match(/^##/) && inRule) {
|
|
144
|
+
// End of rule, start new section
|
|
145
|
+
if (currentContent.length > 0) {
|
|
146
|
+
const text = currentContent.join("\n").trim();
|
|
147
|
+
if (text) {
|
|
148
|
+
chunks.push({
|
|
149
|
+
filepath,
|
|
150
|
+
section: currentSection,
|
|
151
|
+
ruleId: currentRuleId,
|
|
152
|
+
content: text,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
inRule = false;
|
|
157
|
+
currentRuleId = undefined;
|
|
158
|
+
const newSection = line.match(/^#+\s+(.+)/);
|
|
159
|
+
currentSection = newSection ? newSection[1] : "";
|
|
160
|
+
currentContent = [line];
|
|
161
|
+
} else {
|
|
162
|
+
currentContent.push(line);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Save remaining content
|
|
167
|
+
if (currentContent.length > 0) {
|
|
168
|
+
const text = currentContent.join("\n").trim();
|
|
169
|
+
if (text) {
|
|
170
|
+
chunks.push({
|
|
171
|
+
filepath,
|
|
172
|
+
section: currentSection,
|
|
173
|
+
ruleId: currentRuleId,
|
|
174
|
+
content: text,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Filter out small chunks (less than 50 chars)
|
|
180
|
+
return chunks.filter(c => c.content.length >= 50);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Cosine similarity
|
|
184
|
+
function cosineSimilarity(a: number[], b: number[]): number {
|
|
185
|
+
if (a.length !== b.length) return 0;
|
|
186
|
+
let dotProduct = 0;
|
|
187
|
+
let normA = 0;
|
|
188
|
+
let normB = 0;
|
|
189
|
+
for (let i = 0; i < a.length; i++) {
|
|
190
|
+
dotProduct += a[i] * b[i];
|
|
191
|
+
normA += a[i] * a[i];
|
|
192
|
+
normB += b[i] * b[i];
|
|
193
|
+
}
|
|
194
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
195
|
+
}
|
|
196
|
+
|
|
9
197
|
// Resolve natural language directory paths
|
|
10
198
|
function resolveOutputDir(outputDir: string | undefined): string {
|
|
11
199
|
if (!outputDir) {
|
|
@@ -436,10 +624,266 @@ export const importHwpTool: Tool = {
|
|
|
436
624
|
},
|
|
437
625
|
};
|
|
438
626
|
|
|
627
|
+
// Index Standards for RAG
|
|
628
|
+
export const indexStandardsTool: Tool = {
|
|
629
|
+
name: "index_standards",
|
|
630
|
+
description: "Index development standards for RAG search. Run this after importing PDF/HWP files to enable semantic search.",
|
|
631
|
+
parameters: {
|
|
632
|
+
type: "object",
|
|
633
|
+
properties: {
|
|
634
|
+
directory: {
|
|
635
|
+
type: "string",
|
|
636
|
+
description: "Standards directory (default: .activo/standards)",
|
|
637
|
+
},
|
|
638
|
+
},
|
|
639
|
+
},
|
|
640
|
+
handler: async (args): Promise<ToolResult> => {
|
|
641
|
+
try {
|
|
642
|
+
const dir = resolveOutputDir(args.directory as string | undefined);
|
|
643
|
+
|
|
644
|
+
if (!fs.existsSync(dir)) {
|
|
645
|
+
return { success: false, content: "", error: `Standards directory not found: ${dir}` };
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md") && f !== "_index.md");
|
|
649
|
+
if (files.length === 0) {
|
|
650
|
+
return { success: false, content: "", error: "No markdown files found in standards directory" };
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
const config = loadConfig();
|
|
654
|
+
const client = new OllamaClient(config.ollama);
|
|
655
|
+
|
|
656
|
+
const allChunks: StandardsChunk[] = [];
|
|
657
|
+
|
|
658
|
+
// Collect all chunks from all files
|
|
659
|
+
for (const file of files) {
|
|
660
|
+
const content = fs.readFileSync(path.join(dir, file), "utf-8");
|
|
661
|
+
const chunks = splitStandardsIntoChunks(content, file);
|
|
662
|
+
allChunks.push(...chunks);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
if (allChunks.length === 0) {
|
|
666
|
+
return { success: false, content: "", error: "No valid chunks found in standards files" };
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
// Generate embeddings
|
|
670
|
+
const embeddings: StandardsEmbedding[] = [];
|
|
671
|
+
let processed = 0;
|
|
672
|
+
|
|
673
|
+
for (const chunk of allChunks) {
|
|
674
|
+
const embedding = await client.embed(chunk.content, DEFAULT_EMBED_MODEL);
|
|
675
|
+
embeddings.push({
|
|
676
|
+
chunk,
|
|
677
|
+
embedding,
|
|
678
|
+
hash: calculateHash(chunk.content),
|
|
679
|
+
});
|
|
680
|
+
processed++;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// Save embeddings
|
|
684
|
+
saveStandardsEmbeddings(embeddings);
|
|
685
|
+
|
|
686
|
+
// Save index
|
|
687
|
+
const index: StandardsIndex = {
|
|
688
|
+
version: "1.0",
|
|
689
|
+
model: DEFAULT_EMBED_MODEL,
|
|
690
|
+
createdAt: new Date().toISOString(),
|
|
691
|
+
updatedAt: new Date().toISOString(),
|
|
692
|
+
totalChunks: embeddings.length,
|
|
693
|
+
};
|
|
694
|
+
saveStandardsIndex(index);
|
|
695
|
+
|
|
696
|
+
return {
|
|
697
|
+
success: true,
|
|
698
|
+
content: `Standards indexed successfully!\n\n` +
|
|
699
|
+
`📂 Directory: ${dir}\n` +
|
|
700
|
+
`📄 Files: ${files.length}\n` +
|
|
701
|
+
`🔖 Chunks: ${embeddings.length}\n` +
|
|
702
|
+
`🧠 Model: ${DEFAULT_EMBED_MODEL}\n\n` +
|
|
703
|
+
`Use 'search_standards' to find relevant rules.`,
|
|
704
|
+
};
|
|
705
|
+
} catch (error) {
|
|
706
|
+
return { success: false, content: "", error: String(error) };
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
// Search Standards using RAG
|
|
712
|
+
export const searchStandardsTool: Tool = {
|
|
713
|
+
name: "search_standards",
|
|
714
|
+
description: "Search development standards using semantic search (RAG). Returns relevant rules/sections based on query.",
|
|
715
|
+
parameters: {
|
|
716
|
+
type: "object",
|
|
717
|
+
required: ["query"],
|
|
718
|
+
properties: {
|
|
719
|
+
query: {
|
|
720
|
+
type: "string",
|
|
721
|
+
description: "Search query (e.g., 'variable naming', 'error handling', 'SQL injection')",
|
|
722
|
+
},
|
|
723
|
+
topK: {
|
|
724
|
+
type: "number",
|
|
725
|
+
description: "Number of results to return (default: 5)",
|
|
726
|
+
},
|
|
727
|
+
},
|
|
728
|
+
},
|
|
729
|
+
handler: async (args): Promise<ToolResult> => {
|
|
730
|
+
try {
|
|
731
|
+
const query = args.query as string;
|
|
732
|
+
const topK = (args.topK as number) || 5;
|
|
733
|
+
|
|
734
|
+
const embeddings = loadStandardsEmbeddings();
|
|
735
|
+
if (embeddings.length === 0) {
|
|
736
|
+
return {
|
|
737
|
+
success: false,
|
|
738
|
+
content: "",
|
|
739
|
+
error: "No standards indexed. Run 'index_standards' first.",
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
const config = loadConfig();
|
|
744
|
+
const client = new OllamaClient(config.ollama);
|
|
745
|
+
|
|
746
|
+
// Get query embedding
|
|
747
|
+
const queryEmbedding = await client.embed(query, DEFAULT_EMBED_MODEL);
|
|
748
|
+
|
|
749
|
+
// Calculate similarities
|
|
750
|
+
const results = embeddings.map((e) => ({
|
|
751
|
+
...e,
|
|
752
|
+
similarity: cosineSimilarity(queryEmbedding, e.embedding),
|
|
753
|
+
}));
|
|
754
|
+
|
|
755
|
+
// Sort by similarity and get top K
|
|
756
|
+
results.sort((a, b) => b.similarity - a.similarity);
|
|
757
|
+
const topResults = results.slice(0, topK);
|
|
758
|
+
|
|
759
|
+
// Format results
|
|
760
|
+
let output = `## Search Results for: "${query}"\n\n`;
|
|
761
|
+
output += `Found ${topResults.length} relevant standards:\n\n`;
|
|
762
|
+
|
|
763
|
+
for (let i = 0; i < topResults.length; i++) {
|
|
764
|
+
const r = topResults[i];
|
|
765
|
+
output += `### ${i + 1}. ${r.chunk.ruleId || r.chunk.section || "Section"}\n`;
|
|
766
|
+
output += `📄 File: ${r.chunk.filepath}\n`;
|
|
767
|
+
output += `📊 Relevance: ${(r.similarity * 100).toFixed(1)}%\n\n`;
|
|
768
|
+
output += `${r.chunk.content.slice(0, 500)}${r.chunk.content.length > 500 ? "..." : ""}\n\n`;
|
|
769
|
+
output += `---\n\n`;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
return { success: true, content: output };
|
|
773
|
+
} catch (error) {
|
|
774
|
+
return { success: false, content: "", error: String(error) };
|
|
775
|
+
}
|
|
776
|
+
},
|
|
777
|
+
};
|
|
778
|
+
|
|
779
|
+
// Check Code Quality with RAG
|
|
780
|
+
export const checkQualityWithRagTool: Tool = {
|
|
781
|
+
name: "check_quality_rag",
|
|
782
|
+
description: "Check code quality using RAG to find relevant standards automatically.",
|
|
783
|
+
parameters: {
|
|
784
|
+
type: "object",
|
|
785
|
+
required: ["filepath"],
|
|
786
|
+
properties: {
|
|
787
|
+
filepath: {
|
|
788
|
+
type: "string",
|
|
789
|
+
description: "File to check",
|
|
790
|
+
},
|
|
791
|
+
topK: {
|
|
792
|
+
type: "number",
|
|
793
|
+
description: "Number of relevant standards to use (default: 5)",
|
|
794
|
+
},
|
|
795
|
+
},
|
|
796
|
+
},
|
|
797
|
+
handler: async (args): Promise<ToolResult> => {
|
|
798
|
+
try {
|
|
799
|
+
const filepath = path.resolve(args.filepath as string);
|
|
800
|
+
const topK = (args.topK as number) || 5;
|
|
801
|
+
|
|
802
|
+
if (!fs.existsSync(filepath)) {
|
|
803
|
+
return { success: false, content: "", error: `File not found: ${filepath}` };
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
const embeddings = loadStandardsEmbeddings();
|
|
807
|
+
if (embeddings.length === 0) {
|
|
808
|
+
return {
|
|
809
|
+
success: false,
|
|
810
|
+
content: "",
|
|
811
|
+
error: "No standards indexed. Run 'index_standards' first after importing PDF/HWP.",
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// Read code
|
|
816
|
+
const code = fs.readFileSync(filepath, "utf-8");
|
|
817
|
+
const config = loadConfig();
|
|
818
|
+
const client = new OllamaClient(config.ollama);
|
|
819
|
+
|
|
820
|
+
// Create query from code (first 1000 chars + filename)
|
|
821
|
+
const queryText = `Code analysis for ${path.basename(filepath)}:\n${code.slice(0, 1000)}`;
|
|
822
|
+
const queryEmbedding = await client.embed(queryText, DEFAULT_EMBED_MODEL);
|
|
823
|
+
|
|
824
|
+
// Find relevant standards
|
|
825
|
+
const results = embeddings.map((e) => ({
|
|
826
|
+
...e,
|
|
827
|
+
similarity: cosineSimilarity(queryEmbedding, e.embedding),
|
|
828
|
+
}));
|
|
829
|
+
results.sort((a, b) => b.similarity - a.similarity);
|
|
830
|
+
const relevantStandards = results.slice(0, topK);
|
|
831
|
+
|
|
832
|
+
// Build standards context
|
|
833
|
+
let standardsContext = "## Relevant Development Standards\n\n";
|
|
834
|
+
for (const r of relevantStandards) {
|
|
835
|
+
if (r.chunk.ruleId) {
|
|
836
|
+
standardsContext += `### ${r.chunk.ruleId}: ${r.chunk.section}\n`;
|
|
837
|
+
} else {
|
|
838
|
+
standardsContext += `### ${r.chunk.section}\n`;
|
|
839
|
+
}
|
|
840
|
+
standardsContext += `${r.chunk.content}\n\n`;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
// Build analysis prompt
|
|
844
|
+
const ext = path.extname(filepath);
|
|
845
|
+
const lang = { ".ts": "typescript", ".js": "javascript", ".java": "java", ".py": "python" }[ext] || "text";
|
|
846
|
+
|
|
847
|
+
const prompt = `You are a code quality expert. Analyze the code based on the provided development standards.
|
|
848
|
+
|
|
849
|
+
${standardsContext}
|
|
850
|
+
|
|
851
|
+
## Code to Analyze
|
|
852
|
+
File: ${filepath}
|
|
853
|
+
\`\`\`${lang}
|
|
854
|
+
${code.slice(0, 6000)}
|
|
855
|
+
\`\`\`
|
|
856
|
+
|
|
857
|
+
## Analysis Request
|
|
858
|
+
1. Check for violations of the above standards
|
|
859
|
+
2. Provide specific line numbers if possible
|
|
860
|
+
3. Suggest improvements
|
|
861
|
+
4. Rate overall compliance (1-10)
|
|
862
|
+
|
|
863
|
+
Respond in Korean.`;
|
|
864
|
+
|
|
865
|
+
const response = await client.chat([{ role: "user", content: prompt }]);
|
|
866
|
+
|
|
867
|
+
return {
|
|
868
|
+
success: true,
|
|
869
|
+
content: `## Code Quality Analysis (RAG)\n\n` +
|
|
870
|
+
`📄 File: ${filepath}\n` +
|
|
871
|
+
`🔖 Standards used: ${relevantStandards.length}\n\n` +
|
|
872
|
+
`---\n\n${response.content}`,
|
|
873
|
+
};
|
|
874
|
+
} catch (error) {
|
|
875
|
+
return { success: false, content: "", error: String(error) };
|
|
876
|
+
}
|
|
877
|
+
},
|
|
878
|
+
};
|
|
879
|
+
|
|
439
880
|
// All standards tools
|
|
440
881
|
export const standardsTools: Tool[] = [
|
|
441
882
|
importPdfTool,
|
|
442
883
|
importHwpTool,
|
|
443
884
|
listStandardsTool,
|
|
444
885
|
checkQualityTool,
|
|
886
|
+
indexStandardsTool,
|
|
887
|
+
searchStandardsTool,
|
|
888
|
+
checkQualityWithRagTool,
|
|
445
889
|
];
|