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
package/README.md CHANGED
@@ -6,6 +6,8 @@ AI 기반 코드 품질 분석 CLI (Ollama)
6
6
 
7
7
  Ollama를 활용한 대화형 코드 분석 에이전트. Java, TypeScript, Python, SQL, CSS 등 다국어·멀티스택 프로젝트를 자동 감지하고 품질 이슈를 분석합니다.
8
8
 
9
+ > **[ACTIVO 소개자료 (PDF)](docs/ACTIVO_Secure_Code_Agent.pdf)** — 아키텍처, 분석 기능, 도입 효과를 한눈에 확인할 수 있습니다.
10
+
9
11
  - **Tool Calling**: LLM이 상황에 맞는 도구를 직접 호출
10
12
  - **MCP 지원**: Model Context Protocol 연동
11
13
  - **React Ink TUI**: 터미널용 대화형 UI
@@ -117,12 +119,212 @@ activo --resume
117
119
  }
118
120
  ```
119
121
 
122
+ ## APEX 정적분석 연동
123
+
124
+ [APEX](https://github.com/mhb8436/apex-ai)는 400+ 규칙의 정적분석 엔진입니다. ACTIVO와 MCP로 연동하면 자연어로 코드 품질 점검·Excel 보고서·개선코드 생성을 한 번에 처리할 수 있습니다.
125
+
126
+ ### 연동 기능
127
+
128
+ | 기능 | 명령 예시 |
129
+ |------|----------|
130
+ | 코드 품질 분석 | `src 폴더 품질검사 해줘` |
131
+ | Excel 점검 내역 출력 | `엑셀로 출력해줘` |
132
+ | 경영진 보고서 | `보고서 만들어줘` |
133
+ | 개선코드 보고서 (대표사례) | `개선보고서 만들어줘` |
134
+ | 개선코드 보고서 (전체 이슈) | `전체 개선보고서 만들어줘` |
135
+ | 전체 보고서 자동화 | `전체보고서 /path/to/src /output` |
136
+
137
+ ### APEX MCP 설정
138
+
139
+ #### 1. APEX 빌드
140
+
141
+ ```bash
142
+ git clone https://github.com/mhb8436/apex-ai
143
+ cd apex-ai
144
+ make mcp # MCP 서버 빌드 → build/apex-mcp
145
+ ```
146
+
147
+ #### 2. activo 설정 (`~/.activo/config.json`)
148
+
149
+ ```json
150
+ {
151
+ "ollama": {
152
+ "baseUrl": "http://localhost:11434",
153
+ "model": "mistral:latest"
154
+ },
155
+ "mcp": {
156
+ "servers": {
157
+ "apex": {
158
+ "command": "/path/to/apex-ai/build/apex-mcp",
159
+ "args": [],
160
+ "env": {
161
+ "APEX_CONFIG_DIR": "/path/to/apex-ai"
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ ```
168
+
169
+ #### 3. 연동 확인
170
+
171
+ ```bash
172
+ activo
173
+ # [MCP] Connected: apex ← 이 메시지가 나오면 성공
174
+ ```
175
+
176
+ ### 전체 보고서 파이프라인
177
+
178
+ `전체보고서` 키워드 하나로 4단계 자동 실행:
179
+
180
+ ```
181
+ 전체보고서 /path/to/src /path/to/output
182
+ ```
183
+
184
+ ```
185
+ 1. mcp_apex_analyze_code → 400+ 규칙 정적분석
186
+ 2. mcp_apex_export_excel → 전체 이슈 Excel 저장 (4시트)
187
+ 3. generate_report → 경영진용 Markdown 보고서 (AI 분석 포함)
188
+ 4. generate_improvement_report → 문제코드/개선코드 Markdown 보고서
189
+ ```
190
+
191
+ **출력물:**
192
+ ```
193
+ output/
194
+ ├── 2024-01-15_14-30.xlsx # 고객 납품용 점검 내역 (필터/정렬 가능)
195
+ ├── 2024-01-15_14-30.md # 경영진 보고서 (AI 요약 포함)
196
+ ├── improvement_2024-01-15_14-31.md # 개선코드 보고서 (대표사례)
197
+ └── data/2024-01-15_14-30.json # 원본 분석 데이터
198
+ ```
199
+
200
+ ### 개선코드 보고서 옵션
201
+
202
+ ```bash
203
+ # 대표사례 모드 (기본, 빠름) - rule_id당 1개 사례
204
+ activo "개선보고서 /path/to/report.json"
205
+
206
+ # 전체 모드 - 모든 이슈 파일별 배치 처리
207
+ activo "전체 개선보고서 /path/to/report.json"
208
+
209
+ # 심각도 필터 (critical만)
210
+ # → generate_improvement_report mode=full min_severity=critical
211
+ ```
212
+
213
+ ### 폐쇄망(망분리) 환경 설치
214
+
215
+ 인터넷이 차단된 환경에서 ACTIVO + APEX를 사용하는 방법입니다.
216
+
217
+ #### 준비 (인터넷 연결 환경)
218
+
219
+ ```bash
220
+ # 1. activo 패키지 생성
221
+ cd activo
222
+ npm pack
223
+ # → activo-0.4.4.tgz 생성
224
+
225
+ # 2. apex MCP 바이너리 빌드
226
+ cd apex-ai
227
+ make mcp
228
+ # → build/apex-mcp, build/configs/ 생성
229
+
230
+ # 3. Ollama 모델 파일 준비
231
+ # Ollama 모델은 ~/.ollama/models/ 에 저장됨
232
+ # 해당 디렉토리를 통째로 복사하거나 모델 파일(.gguf)을 별도 내보내기
233
+ ```
234
+
235
+ #### 폐쇄망으로 복사할 파일 목록
236
+
237
+ ```
238
+ 배포 패키지/
239
+ ├── activo-0.4.4.tgz # activo npm 패키지
240
+ ├── apex-mcp # APEX MCP 서버 바이너리 (플랫폼별)
241
+ ├── apex-configs/ # APEX 규칙셋
242
+ │ ├── profiles.yaml
243
+ │ └── rulesets/
244
+ └── ollama-models/ # Ollama 모델 파일 (선택)
245
+ └── mistral/ # 또는 qwen2.5:7b 등
246
+ ```
247
+
248
+ #### 폐쇄망에서 설치
249
+
250
+ ```bash
251
+ # Node.js는 사전 설치 필요 (nodejs.org에서 오프라인 설치 패키지 다운로드)
252
+
253
+ # 1. activo 설치 (오프라인)
254
+ npm install -g activo-0.4.4.tgz
255
+
256
+ # 2. apex 바이너리 권한 설정 (Linux/macOS)
257
+ chmod +x apex-mcp
258
+
259
+ # 3. Ollama 설치 + 모델 로드
260
+ # ollama.ai에서 설치 파일 다운로드 후 설치
261
+ # 모델 파일을 ~/.ollama/models/ 에 복사하거나:
262
+ ollama create mistral -f Modelfile # GGUF에서 import
263
+
264
+ # 4. activo 설정
265
+ cat > ~/.activo/config.json << 'EOF'
266
+ {
267
+ "ollama": {
268
+ "baseUrl": "http://localhost:11434",
269
+ "model": "mistral:latest"
270
+ },
271
+ "mcp": {
272
+ "servers": {
273
+ "apex": {
274
+ "command": "/opt/apex/apex-mcp",
275
+ "args": [],
276
+ "env": {
277
+ "APEX_CONFIG_DIR": "/opt/apex"
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ EOF
284
+
285
+ # 5. 실행 확인
286
+ activo
287
+ ```
288
+
289
+ #### Anthropic API 대신 Ollama 사용
290
+
291
+ 폐쇄망에서는 Anthropic API 연결이 불가하므로 반드시 Ollama를 사용합니다:
292
+
293
+ ```json
294
+ {
295
+ "provider": "ollama",
296
+ "ollama": {
297
+ "baseUrl": "http://localhost:11434",
298
+ "model": "qwen2.5-coder:7b"
299
+ }
300
+ }
301
+ ```
302
+
303
+ > 권장 모델: `qwen2.5-coder:7b` (코드 분석 특화, 8GB RAM) 또는 `mistral:latest` (범용)
304
+
305
+ ---
306
+
307
+ ## 함께 사용하기
308
+
309
+ activo는 단독으로도 품질 점검 도구로 충분합니다. **APEX MCP 연동** 시 Excel 리포트·정밀 정적분석이 추가됩니다.
310
+
311
+ | 용도 | activo 단독 | activo + APEX |
312
+ |------|------------|--------------|
313
+ | 대화형 분석·설명 | ◎ | ◎ |
314
+ | 개발표준 RAG 검사 | ◎ | ◎ |
315
+ | 정밀 정적분석 (400+ 규칙) | - | ◎ |
316
+ | Excel 제출용 리포트 | - | ◎ |
317
+ | 전체 이슈 개선코드 보고서 | - | ◎ |
318
+ | 오프라인 단일 바이너리 | - | ◎ (APEX) |
319
+
120
320
  ## 기술 스택
121
321
 
122
- - **Ollama** - 로컬 LLM
322
+ - **Ollama / Anthropic API** - 로컬 LLM 또는 클라우드 LLM
323
+ - **APEX MCP** - 400+ 규칙 정적분석 엔진 (Go, ANTLR4)
123
324
  - **TypeScript Compiler API** - JS/TS AST 분석
124
325
  - **java-ast** - Java 파싱 (ANTLR4)
125
326
  - **React Ink** - 터미널 UI
327
+ - **Model Context Protocol (MCP)** - 외부 도구 연동
126
328
 
127
329
  ## 라이선스
128
330
 
@@ -0,0 +1,181 @@
1
+ {
2
+ "summary": {
3
+ "total_issues": 41,
4
+ "critical": 0,
5
+ "high": 0,
6
+ "medium": 41,
7
+ "low": 0,
8
+ "files_analyzed": 46,
9
+ "duration": "52.118667ms"
10
+ },
11
+ "profiles_used": [
12
+ "all"
13
+ ],
14
+ "issues": [
15
+ {
16
+ "rule_id": "quality-js-var",
17
+ "rule_name": "",
18
+ "severity": "medium",
19
+ "category": "style",
20
+ "file": "src/core/config.ts",
21
+ "line": 61,
22
+ "column": 0,
23
+ "message": "var 키워드 사용",
24
+ "suggestion": ""
25
+ },
26
+ {
27
+ "rule_id": "quality-js-console",
28
+ "rule_name": "",
29
+ "severity": "medium",
30
+ "category": "logging",
31
+ "file": "src/cli/headless.ts",
32
+ "line": 24,
33
+ "column": 0,
34
+ "message": "console.log 사용",
35
+ "suggestion": ""
36
+ },
37
+ {
38
+ "rule_id": "quality-js-console",
39
+ "rule_name": "",
40
+ "severity": "medium",
41
+ "category": "logging",
42
+ "file": "src/cli/headless.ts",
43
+ "line": 25,
44
+ "column": 0,
45
+ "message": "console.log 사용",
46
+ "suggestion": ""
47
+ },
48
+ {
49
+ "rule_id": "quality-js-console",
50
+ "rule_name": "",
51
+ "severity": "medium",
52
+ "category": "logging",
53
+ "file": "src/cli/headless.ts",
54
+ "line": 38,
55
+ "column": 0,
56
+ "message": "console.log 사용",
57
+ "suggestion": ""
58
+ },
59
+ {
60
+ "rule_id": "quality-js-console",
61
+ "rule_name": "",
62
+ "severity": "medium",
63
+ "category": "logging",
64
+ "file": "src/cli/headless.ts",
65
+ "line": 39,
66
+ "column": 0,
67
+ "message": "console.log 사용",
68
+ "suggestion": ""
69
+ },
70
+ {
71
+ "rule_id": "quality-js-console",
72
+ "rule_name": "",
73
+ "severity": "medium",
74
+ "category": "logging",
75
+ "file": "src/cli/headless.ts",
76
+ "line": 41,
77
+ "column": 0,
78
+ "message": "console.log 사용",
79
+ "suggestion": ""
80
+ },
81
+ {
82
+ "rule_id": "quality-js-console",
83
+ "rule_name": "",
84
+ "severity": "medium",
85
+ "category": "logging",
86
+ "file": "src/cli/headless.ts",
87
+ "line": 42,
88
+ "column": 0,
89
+ "message": "console.log 사용",
90
+ "suggestion": ""
91
+ },
92
+ {
93
+ "rule_id": "quality-js-console",
94
+ "rule_name": "",
95
+ "severity": "medium",
96
+ "category": "logging",
97
+ "file": "src/cli/headless.ts",
98
+ "line": 64,
99
+ "column": 0,
100
+ "message": "console.log 사용",
101
+ "suggestion": ""
102
+ },
103
+ {
104
+ "rule_id": "quality-js-console",
105
+ "rule_name": "",
106
+ "severity": "medium",
107
+ "category": "logging",
108
+ "file": "src/cli/headless.ts",
109
+ "line": 70,
110
+ "column": 0,
111
+ "message": "console.log 사용",
112
+ "suggestion": ""
113
+ },
114
+ {
115
+ "rule_id": "quality-js-console",
116
+ "rule_name": "",
117
+ "severity": "medium",
118
+ "category": "logging",
119
+ "file": "src/cli/headless.ts",
120
+ "line": 80,
121
+ "column": 0,
122
+ "message": "console.log 사용",
123
+ "suggestion": ""
124
+ },
125
+ {
126
+ "rule_id": "quality-js-console",
127
+ "rule_name": "",
128
+ "severity": "medium",
129
+ "category": "logging",
130
+ "file": "src/cli/banner.ts",
131
+ "line": 21,
132
+ "column": 0,
133
+ "message": "console.log 사용",
134
+ "suggestion": ""
135
+ },
136
+ {
137
+ "rule_id": "quality-js-console",
138
+ "rule_name": "",
139
+ "severity": "medium",
140
+ "category": "logging",
141
+ "file": "src/cli/banner.ts",
142
+ "line": 22,
143
+ "column": 0,
144
+ "message": "console.log 사용",
145
+ "suggestion": ""
146
+ },
147
+ {
148
+ "rule_id": "quality-js-console",
149
+ "rule_name": "",
150
+ "severity": "medium",
151
+ "category": "logging",
152
+ "file": "src/cli/banner.ts",
153
+ "line": 23,
154
+ "column": 0,
155
+ "message": "console.log 사용",
156
+ "suggestion": ""
157
+ },
158
+ {
159
+ "rule_id": "quality-js-console",
160
+ "rule_name": "",
161
+ "severity": "medium",
162
+ "category": "logging",
163
+ "file": "src/cli/banner.ts",
164
+ "line": 24,
165
+ "column": 0,
166
+ "message": "console.log 사용",
167
+ "suggestion": ""
168
+ },
169
+ {
170
+ "rule_id": "quality-js-console",
171
+ "rule_name": "",
172
+ "severity": "medium",
173
+ "category": "logging",
174
+ "file": "src/cli/banner.ts",
175
+ "line": 25,
176
+ "column": 0,
177
+ "message": "console.log 사용",
178
+ "suggestion": ""
179
+ }
180
+ ]
181
+ }
@@ -0,0 +1,181 @@
1
+ {
2
+ "summary": {
3
+ "total_issues": 41,
4
+ "critical": 0,
5
+ "high": 0,
6
+ "medium": 41,
7
+ "low": 0,
8
+ "files_analyzed": 46,
9
+ "duration": "63.319875ms"
10
+ },
11
+ "profiles_used": [
12
+ "all"
13
+ ],
14
+ "issues": [
15
+ {
16
+ "rule_id": "quality-js-console",
17
+ "rule_name": "",
18
+ "severity": "medium",
19
+ "category": "logging",
20
+ "file": "src/core/mcp/init.ts",
21
+ "line": 32,
22
+ "column": 0,
23
+ "message": "console.log 사용",
24
+ "suggestion": ""
25
+ },
26
+ {
27
+ "rule_id": "quality-js-console",
28
+ "rule_name": "",
29
+ "severity": "medium",
30
+ "category": "logging",
31
+ "file": "src/core/mcp/init.ts",
32
+ "line": 38,
33
+ "column": 0,
34
+ "message": "console.log 사용",
35
+ "suggestion": ""
36
+ },
37
+ {
38
+ "rule_id": "quality-js-console",
39
+ "rule_name": "",
40
+ "severity": "medium",
41
+ "category": "logging",
42
+ "file": "src/core/mcp/init.ts",
43
+ "line": 47,
44
+ "column": 0,
45
+ "message": "console.log 사용",
46
+ "suggestion": ""
47
+ },
48
+ {
49
+ "rule_id": "quality-js-console",
50
+ "rule_name": "",
51
+ "severity": "medium",
52
+ "category": "logging",
53
+ "file": "src/cli/headless.ts",
54
+ "line": 24,
55
+ "column": 0,
56
+ "message": "console.log 사용",
57
+ "suggestion": ""
58
+ },
59
+ {
60
+ "rule_id": "quality-js-console",
61
+ "rule_name": "",
62
+ "severity": "medium",
63
+ "category": "logging",
64
+ "file": "src/cli/headless.ts",
65
+ "line": 25,
66
+ "column": 0,
67
+ "message": "console.log 사용",
68
+ "suggestion": ""
69
+ },
70
+ {
71
+ "rule_id": "quality-js-console",
72
+ "rule_name": "",
73
+ "severity": "medium",
74
+ "category": "logging",
75
+ "file": "src/cli/headless.ts",
76
+ "line": 38,
77
+ "column": 0,
78
+ "message": "console.log 사용",
79
+ "suggestion": ""
80
+ },
81
+ {
82
+ "rule_id": "quality-js-console",
83
+ "rule_name": "",
84
+ "severity": "medium",
85
+ "category": "logging",
86
+ "file": "src/cli/headless.ts",
87
+ "line": 39,
88
+ "column": 0,
89
+ "message": "console.log 사용",
90
+ "suggestion": ""
91
+ },
92
+ {
93
+ "rule_id": "quality-js-console",
94
+ "rule_name": "",
95
+ "severity": "medium",
96
+ "category": "logging",
97
+ "file": "src/cli/headless.ts",
98
+ "line": 41,
99
+ "column": 0,
100
+ "message": "console.log 사용",
101
+ "suggestion": ""
102
+ },
103
+ {
104
+ "rule_id": "quality-js-console",
105
+ "rule_name": "",
106
+ "severity": "medium",
107
+ "category": "logging",
108
+ "file": "src/cli/headless.ts",
109
+ "line": 42,
110
+ "column": 0,
111
+ "message": "console.log 사용",
112
+ "suggestion": ""
113
+ },
114
+ {
115
+ "rule_id": "quality-js-console",
116
+ "rule_name": "",
117
+ "severity": "medium",
118
+ "category": "logging",
119
+ "file": "src/cli/headless.ts",
120
+ "line": 64,
121
+ "column": 0,
122
+ "message": "console.log 사용",
123
+ "suggestion": ""
124
+ },
125
+ {
126
+ "rule_id": "quality-js-console",
127
+ "rule_name": "",
128
+ "severity": "medium",
129
+ "category": "logging",
130
+ "file": "src/cli/headless.ts",
131
+ "line": 70,
132
+ "column": 0,
133
+ "message": "console.log 사용",
134
+ "suggestion": ""
135
+ },
136
+ {
137
+ "rule_id": "quality-js-console",
138
+ "rule_name": "",
139
+ "severity": "medium",
140
+ "category": "logging",
141
+ "file": "src/cli/headless.ts",
142
+ "line": 80,
143
+ "column": 0,
144
+ "message": "console.log 사용",
145
+ "suggestion": ""
146
+ },
147
+ {
148
+ "rule_id": "quality-js-console",
149
+ "rule_name": "",
150
+ "severity": "medium",
151
+ "category": "logging",
152
+ "file": "src/cli/banner.ts",
153
+ "line": 21,
154
+ "column": 0,
155
+ "message": "console.log 사용",
156
+ "suggestion": ""
157
+ },
158
+ {
159
+ "rule_id": "quality-js-console",
160
+ "rule_name": "",
161
+ "severity": "medium",
162
+ "category": "logging",
163
+ "file": "src/cli/banner.ts",
164
+ "line": 22,
165
+ "column": 0,
166
+ "message": "console.log 사용",
167
+ "suggestion": ""
168
+ },
169
+ {
170
+ "rule_id": "quality-js-console",
171
+ "rule_name": "",
172
+ "severity": "medium",
173
+ "category": "logging",
174
+ "file": "src/cli/banner.ts",
175
+ "line": 23,
176
+ "column": 0,
177
+ "message": "console.log 사용",
178
+ "suggestion": ""
179
+ }
180
+ ]
181
+ }