@sparrowai/sparrow-mcp 1.0.11 → 1.1.1

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 (111) hide show
  1. package/.agent/skills/README.md +67 -0
  2. package/.agent/skills/sparrow-comprehensive-security/SKILL.md +141 -0
  3. package/.agent/skills/sparrow-fix-vulnerabilities/SKILL.md +101 -0
  4. package/.agent/skills/sparrow-full-audit/SKILL.md +103 -0
  5. package/.agent/skills/sparrow-mcp-test/SKILL.md +199 -0
  6. package/.agent/skills/sparrow-quick-scan/SKILL.md +91 -0
  7. package/.agent/skills/sparrow-sca-check/SKILL.md +126 -0
  8. package/README.md +65 -0
  9. package/bin/sparrow-mcp-test.cjs +29 -0
  10. package/dist/.tsbuildinfo +1 -1
  11. package/dist/scripts/mcp-test/mcp-client.d.ts +39 -0
  12. package/dist/scripts/mcp-test/mcp-client.js +1 -0
  13. package/dist/scripts/test-runner/standalone-test.d.ts +1 -0
  14. package/dist/scripts/test-runner/standalone-test.js +1 -0
  15. package/dist/src/config/appConfig.js +1 -0
  16. package/dist/src/config/constants.d.ts +45 -0
  17. package/dist/src/config/constants.js +1 -0
  18. package/dist/src/controllers/__tests__/analysis.controller.test.d.ts +1 -0
  19. package/dist/src/controllers/__tests__/analysis.controller.test.js +1 -0
  20. package/dist/src/controllers/__tests__/sast.controller.test.d.ts +1 -0
  21. package/dist/src/controllers/__tests__/sast.controller.test.js +1 -0
  22. package/dist/src/controllers/__tests__/sca.controller.test.d.ts +1 -0
  23. package/dist/src/controllers/__tests__/sca.controller.test.js +1 -0
  24. package/dist/src/controllers/__tests__/security.controller.test.d.ts +1 -0
  25. package/dist/src/controllers/__tests__/security.controller.test.js +1 -0
  26. package/dist/src/controllers/__tests__/system.controller.test.d.ts +1 -0
  27. package/dist/src/controllers/__tests__/system.controller.test.js +1 -0
  28. package/dist/src/controllers/analysis.controller.d.ts +150 -0
  29. package/dist/src/controllers/analysis.controller.js +1 -0
  30. package/dist/src/controllers/sast.controller.d.ts +109 -0
  31. package/dist/src/controllers/sast.controller.js +1 -0
  32. package/dist/src/controllers/sca.controller.d.ts +119 -0
  33. package/dist/src/controllers/sca.controller.js +1 -0
  34. package/dist/src/controllers/security.controller.d.ts +30 -0
  35. package/dist/src/controllers/security.controller.js +1 -0
  36. package/dist/src/controllers/system.controller.d.ts +2 -0
  37. package/dist/src/controllers/system.controller.js +1 -0
  38. package/dist/src/schemas/tool.schemas.d.ts +51 -0
  39. package/dist/src/schemas/tool.schemas.js +1 -0
  40. package/dist/src/server.js +2 -0
  41. package/dist/src/services/__tests__/checker.service.test.d.ts +1 -0
  42. package/dist/src/services/__tests__/checker.service.test.js +1 -0
  43. package/dist/src/services/__tests__/llm.service.test.d.ts +1 -0
  44. package/dist/src/services/__tests__/llm.service.test.js +1 -0
  45. package/dist/src/services/__tests__/s3.service.test.d.ts +1 -0
  46. package/dist/src/services/__tests__/s3.service.test.js +1 -0
  47. package/dist/src/services/__tests__/sparrow.service.test.d.ts +1 -0
  48. package/dist/src/services/__tests__/sparrow.service.test.js +1 -0
  49. package/dist/{services → src/services}/analysis.service.d.ts +32 -10
  50. package/dist/src/services/analysis.service.js +1 -0
  51. package/dist/src/services/checker.service.d.ts +21 -0
  52. package/dist/src/services/checker.service.js +1 -0
  53. package/dist/src/services/llm/AnthropicProvider.d.ts +7 -0
  54. package/dist/src/services/llm/AnthropicProvider.js +1 -0
  55. package/dist/src/services/llm/BedrockProvider.d.ts +7 -0
  56. package/dist/src/services/llm/BedrockProvider.js +1 -0
  57. package/dist/src/services/llm/GeminiProvider.d.ts +7 -0
  58. package/dist/src/services/llm/GeminiProvider.js +1 -0
  59. package/dist/src/services/llm/LLMFactory.d.ts +4 -0
  60. package/dist/src/services/llm/LLMFactory.js +1 -0
  61. package/dist/src/services/llm/LLMProvider.d.ts +3 -0
  62. package/dist/src/services/llm/LLMProvider.js +1 -0
  63. package/dist/src/services/llm/OllamaProvider.d.ts +7 -0
  64. package/dist/src/services/llm/OllamaProvider.js +1 -0
  65. package/dist/src/services/llm/OpenAIProvider.d.ts +7 -0
  66. package/dist/src/services/llm/OpenAIProvider.js +1 -0
  67. package/dist/{services → src/services}/llm.service.d.ts +1 -2
  68. package/dist/src/services/llm.service.js +1 -0
  69. package/dist/src/services/s3.service.d.ts +33 -0
  70. package/dist/src/services/s3.service.js +1 -0
  71. package/dist/{services → src/services}/sparrow.service.d.ts +3 -15
  72. package/dist/src/services/sparrow.service.js +1 -0
  73. package/dist/src/types/types.d.ts +186 -0
  74. package/dist/src/types/types.js +1 -0
  75. package/dist/src/utils/__tests__/crypto.util.test.d.ts +1 -0
  76. package/dist/src/utils/__tests__/crypto.util.test.js +1 -0
  77. package/dist/src/utils/__tests__/diff.util.test.d.ts +1 -0
  78. package/dist/src/utils/__tests__/diff.util.test.js +1 -0
  79. package/dist/src/utils/__tests__/fileManager.test.d.ts +1 -0
  80. package/dist/src/utils/__tests__/fileManager.test.js +1 -0
  81. package/dist/src/utils/__tests__/fileManagerSecure.test.d.ts +1 -0
  82. package/dist/src/utils/__tests__/fileManagerSecure.test.js +1 -0
  83. package/dist/src/utils/__tests__/logger.test.d.ts +1 -0
  84. package/dist/src/utils/__tests__/logger.test.js +1 -0
  85. package/dist/src/utils/crypto.util.d.ts +3 -0
  86. package/dist/src/utils/crypto.util.js +1 -0
  87. package/dist/src/utils/diff.util.js +1 -0
  88. package/dist/src/utils/fileManager.d.ts +7 -0
  89. package/dist/src/utils/fileManager.js +1 -0
  90. package/dist/src/utils/fileManagerSecure.d.ts +8 -0
  91. package/dist/src/utils/fileManagerSecure.js +1 -0
  92. package/dist/src/utils/logger.js +1 -0
  93. package/package.json +28 -7
  94. package/test-cases-example.md +97 -0
  95. package/dist/config/appConfig.js +0 -1
  96. package/dist/server.js +0 -2
  97. package/dist/services/analysis.service.js +0 -1
  98. package/dist/services/llm.service.js +0 -1
  99. package/dist/services/s3.service.d.ts +0 -75
  100. package/dist/services/s3.service.js +0 -1
  101. package/dist/services/sparrow.service.js +0 -1
  102. package/dist/types/types.d.ts +0 -100
  103. package/dist/types/types.js +0 -1
  104. package/dist/utils/crypto.util.d.ts +0 -36
  105. package/dist/utils/crypto.util.js +0 -1
  106. package/dist/utils/diff.util.js +0 -1
  107. package/dist/utils/logger.js +0 -1
  108. /package/dist/{config → src/config}/appConfig.d.ts +0 -0
  109. /package/dist/{server.d.ts → src/server.d.ts} +0 -0
  110. /package/dist/{utils → src/utils}/diff.util.d.ts +0 -0
  111. /package/dist/{utils → src/utils}/logger.d.ts +0 -0
@@ -1,100 +0,0 @@
1
- export interface AnalysisRequest {
2
- fileContent: string;
3
- fileName: string;
4
- }
5
- export interface FileInfo {
6
- fileName: string;
7
- fileContent: string;
8
- }
9
- export interface MultiFileAnalysisRequest {
10
- files: FileInfo[];
11
- zipFileName?: string;
12
- }
13
- export interface MultiFileAnalysisRequestWithPaths {
14
- filePaths: string[];
15
- zipFileName?: string;
16
- }
17
- export interface AnalysisStatus {
18
- analysisId: string;
19
- status: 'pending' | 'processing' | 'completed' | 'failed';
20
- progress?: number;
21
- message?: string;
22
- vulnerabilities?: Vulnerability[];
23
- analysisBrief?: string;
24
- }
25
- export interface AnalysisResult {
26
- analysisId: string;
27
- /**
28
- * 논리적 분석 상태 요약
29
- * - 'completed' : 결과적으로 성공적으로 완료된 분석 (result === 'SUCCESS' 또는 별도 result 미제공이지만 COMPLETE로 끝난 경우)
30
- * - 'failed' : 분석이 실패하거나 중지된 경우 (result === 'FAIL' | 'STOP' 등)
31
- */
32
- status: 'completed' | 'failed';
33
- /**
34
- * Sparrow OnDemand가 제공하는 상세 결과 코드
35
- * - 'SUCCESS' : 분석 성공
36
- * - 'FAIL' : 분석 실패
37
- * - 'STOP' : 사용자/시스템 요청으로 중지
38
- */
39
- result?: 'SUCCESS' | 'FAIL' | 'STOP';
40
- vulnerabilities: Vulnerability[];
41
- analysisBrief: string;
42
- }
43
- export interface Vulnerability {
44
- checkerKey: string;
45
- description: string;
46
- severity: 'HIGH' | 'MEDIUM' | 'LOW';
47
- lineNumber?: number;
48
- filePath?: string;
49
- }
50
- export interface SparrowAnalysisRequest {
51
- fileName: string;
52
- fileContent: string;
53
- }
54
- export interface SparrowAnalysisResponse {
55
- requestId: string;
56
- analysisId?: string;
57
- status: string;
58
- message?: string;
59
- }
60
- export interface SparrowAnalysisResult {
61
- requestId: string;
62
- analysisId?: string;
63
- status: string;
64
- result?: 'SUCCESS' | 'FAIL' | 'STOP';
65
- progress?: number;
66
- downloadUrl?: string;
67
- vulnerabilities?: any[];
68
- }
69
- export interface S3UploadResult {
70
- success: boolean;
71
- key?: string;
72
- url?: string;
73
- error?: string;
74
- }
75
- export interface LLMResponse {
76
- content: string;
77
- success: boolean;
78
- error?: string;
79
- }
80
- export interface Config {
81
- ollama: {
82
- baseUrl: string;
83
- model: string;
84
- };
85
- s3: {
86
- bucket: string;
87
- region: string;
88
- accessKeyId: string;
89
- secretAccessKey: string;
90
- endpoint?: string;
91
- };
92
- sparrow: {
93
- baseUrl: string;
94
- apiKey: string;
95
- };
96
- notion?: {
97
- apiKey: string;
98
- databaseId: string;
99
- };
100
- }
@@ -1 +0,0 @@
1
- function a6_0x3a45(){var _0x2a5714=['4677JoyLkB','1296954WncgTD','lpnrg','2917277zFdWsJ','6703BoNxIx','toString','1080870AmuBnK','10LFtcuZ','5qzGYjo','9jxmGAM','244KdFwGy','11984076CsABYw','52XdjFVz','(((.+)+)+)','660608AqovuT','constructo'];a6_0x3a45=function(){return _0x2a5714;};return a6_0x3a45();}(function(_0x54f2bd,_0x2ac446){var _0x1b399a=a6_0x3750,_0x28e02b=_0x54f2bd();while(!![]){try{var _0x55faab=parseInt(_0x1b399a(0x103))/0x1*(-parseInt(_0x1b399a(0x10b))/0x2)+-parseInt(_0x1b399a(0xff))/0x3*(parseInt(_0x1b399a(0x109))/0x4)+parseInt(_0x1b399a(0x107))/0x5*(-parseInt(_0x1b399a(0x100))/0x6)+-parseInt(_0x1b399a(0x105))/0x7+-parseInt(_0x1b399a(0x10d))/0x8*(-parseInt(_0x1b399a(0x108))/0x9)+parseInt(_0x1b399a(0x106))/0xa*(-parseInt(_0x1b399a(0x102))/0xb)+parseInt(_0x1b399a(0x10a))/0xc;if(_0x55faab===_0x2ac446)break;else _0x28e02b['push'](_0x28e02b['shift']());}catch(_0x569102){_0x28e02b['push'](_0x28e02b['shift']());}}}(a6_0x3a45,0x2afe0));var a6_0x1db1f1=(function(){var _0x5a7347=!![];return function(_0x5eba01,_0x539382){var _0x21c3d2=_0x5a7347?function(){if(_0x539382){var _0x6df6f7=_0x539382['apply'](_0x5eba01,arguments);return _0x539382=null,_0x6df6f7;}}:function(){};return _0x5a7347=![],_0x21c3d2;};}()),a6_0x15f801=a6_0x1db1f1(this,function(){var _0x254027=a6_0x3750,_0x12fa89={};_0x12fa89['lpnrg']='(((.+)+)+)'+'+$';var _0x1e57ac=_0x12fa89;return a6_0x15f801[_0x254027(0x104)]()['search'](_0x1e57ac[_0x254027(0x101)])[_0x254027(0x104)]()[_0x254027(0xfe)+'r'](a6_0x15f801)['search'](_0x254027(0x10c)+'+$');});function a6_0x3750(_0x15e78f,_0x220115){_0x15e78f=_0x15e78f-0xfe;var _0x2237f1=a6_0x3a45();var _0x15f801=_0x2237f1[_0x15e78f];return _0x15f801;}a6_0x15f801();export{};
@@ -1,36 +0,0 @@
1
- /**
2
- * 암호화/복호화 유틸리티
3
- *
4
- * ⚠️ 보안 경고 ⚠️
5
- * 이 모듈은 XOR 기반 암호화를 사용하며, 보안 강도가 낮습니다.
6
- * npm 배포 시 코드가 공개되면 역공학이 가능합니다.
7
- *
8
- * 용도:
9
- * - 개발/테스트 환경에서의 기본적인 난독화 목적
10
- * - 프로덕션 환경에서는 환경 변수 사용을 강력히 권장합니다.
11
- *
12
- * 참고:
13
- * - XOR 암호화는 암호학적으로 안전하지 않습니다.
14
- * - 키가 코드에 포함되어 있어 완전한 보안을 보장할 수 없습니다.
15
- * - 실제 민감한 정보는 환경 변수나 보안 키 관리 시스템을 사용하세요.
16
- */
17
- /**
18
- * 문자열을 암호화 (XOR 기반 + Base64)
19
- * @param plaintext 평문
20
- * @param key 암호화 키
21
- * @returns 암호화된 문자열 (Base64)
22
- */
23
- export declare function encryptString(plaintext: string, key: string): string;
24
- /**
25
- * 암호화된 문자열을 복호화
26
- * @param ciphertext 암호화된 문자열 (Base64)
27
- * @param key 복호화 키
28
- * @returns 평문
29
- */
30
- export declare function decryptString(ciphertext: string, key: string): string;
31
- /**
32
- * 내부 키를 사용한 복호화 (난독화를 위해 분산된 로직)
33
- * @param encrypted 암호화된 데이터
34
- * @returns 복호화된 문자열
35
- */
36
- export declare function decryptInternal(encrypted: string): string;
@@ -1 +0,0 @@
1
- (function(_0x16a14f,_0x18ae97){const _0x36e3e8=a7_0x1225,_0x1456d4=_0x16a14f();while(!![]){try{const _0x5b207f=parseInt(_0x36e3e8(0x1e9))/0x1+parseInt(_0x36e3e8(0x1f9))/0x2+parseInt(_0x36e3e8(0x1f6))/0x3*(parseInt(_0x36e3e8(0x1f3))/0x4)+parseInt(_0x36e3e8(0x1f4))/0x5*(parseInt(_0x36e3e8(0x1ee))/0x6)+-parseInt(_0x36e3e8(0x1f7))/0x7+-parseInt(_0x36e3e8(0x1ec))/0x8+-parseInt(_0x36e3e8(0x1f8))/0x9;if(_0x5b207f===_0x18ae97)break;else _0x1456d4['push'](_0x1456d4['shift']());}catch(_0x59abb7){_0x1456d4['push'](_0x1456d4['shift']());}}}(a7_0x4382,0x6aefe));const a7_0x43866e=(function(){const _0x29885e=a7_0x1225,_0x1fd7e6={};_0x1fd7e6[_0x29885e(0x1f2)]='eLqGI';const _0x2c02dd=_0x1fd7e6;let _0x2c89ea=!![];return function(_0x23bf2f,_0x3b6293){const _0x4d029f=_0x29885e;if(_0x4d029f(0x1ed)!==_0x2c02dd[_0x4d029f(0x1f2)]){const _0x5b81c3=_0x2c89ea?function(){if(_0x3b6293){const _0x13f319=_0x3b6293['apply'](_0x23bf2f,arguments);return _0x3b6293=null,_0x13f319;}}:function(){};return _0x2c89ea=![],_0x5b81c3;}else{const _0x211cc4=_0x3c1cea['fromCharCo'+'de'](0x53,0x33,0x5f,0x4b,0x65,0x79),_0x3a30ab=_0x45e2a6[_0x4d029f(0x1fb)+'de'](0x5f,0x45,0x6e,0x63,0x72,0x79,0x70,0x74),_0x41ccf3=_0x5d80bf[_0x4d029f(0x1fb)+'de'](0x5f,0x32,0x30,0x32,0x34),_0x5b5168=_0x211cc4+_0x3a30ab+_0x41ccf3;return _0x49e368(_0x154240,_0x5b5168);}};}()),a7_0x2da33a=a7_0x43866e(this,function(){const _0x192545=a7_0x1225;return a7_0x2da33a[_0x192545(0x1ef)]()['search'](_0x192545(0x1f5)+'+$')[_0x192545(0x1ef)]()['constructo'+'r'](a7_0x2da33a)[_0x192545(0x1eb)]('(((.+)+)+)'+'+$');});a7_0x2da33a();export function encryptString(_0x8bac50,_0x5d9dbc){const _0x139910=a7_0x1225,_0x419bc9=Buffer[_0x139910(0x1f1)](_0x5d9dbc,'utf8'),_0x1fca2a=Buffer[_0x139910(0x1f1)](_0x8bac50,_0x139910(0x1f0)),_0x577c1d=Buffer['alloc'](_0x1fca2a['length']);for(let _0x5f1498=0x0;_0x5f1498<_0x1fca2a[_0x139910(0x1fa)];_0x5f1498++){_0x577c1d[_0x5f1498]=_0x1fca2a[_0x5f1498]^_0x419bc9[_0x5f1498%_0x419bc9[_0x139910(0x1fa)]];}return _0x577c1d[_0x139910(0x1ef)](_0x139910(0x1ea));}export function decryptString(_0x45bc12,_0x1d2a8a){const _0x174569=a7_0x1225,_0x1ded70=Buffer[_0x174569(0x1f1)](_0x1d2a8a,'utf8'),_0x277225=Buffer['from'](_0x45bc12,'base64'),_0xaf3794=Buffer['alloc'](_0x277225[_0x174569(0x1fa)]);for(let _0x6fdb93=0x0;_0x6fdb93<_0x277225['length'];_0x6fdb93++){_0xaf3794[_0x6fdb93]=_0x277225[_0x6fdb93]^_0x1ded70[_0x6fdb93%_0x1ded70['length']];}return _0xaf3794['toString'](_0x174569(0x1f0));}function a7_0x4382(){const _0x5a1345=['rSIEg','207556BDOOPS','2598125pvQzKk','(((.+)+)+)','21izVyfe','4780755xEgDYM','4825881TwQUNg','1312868GHdXuC','length','fromCharCo','526374tpQjGG','base64','search','3267744hfuEdr','FNGkF','6fdNbDK','toString','utf8','from'];a7_0x4382=function(){return _0x5a1345;};return a7_0x4382();}function a7_0x1225(_0x15374d,_0xa4d3e8){_0x15374d=_0x15374d-0x1e9;const _0x37286b=a7_0x4382();let _0x2da33a=_0x37286b[_0x15374d];return _0x2da33a;}export function decryptInternal(_0x1592e3){const _0x42bea4=a7_0x1225,_0x1da61e={};_0x1da61e['gDijC']=function(_0x2c87cf,_0x48ac08){return _0x2c87cf+_0x48ac08;};const _0xe92f0c=_0x1da61e,_0x196035=String[_0x42bea4(0x1fb)+'de'](0x53,0x33,0x5f,0x4b,0x65,0x79),_0x55a4bf=String[_0x42bea4(0x1fb)+'de'](0x5f,0x45,0x6e,0x63,0x72,0x79,0x70,0x74),_0x1fe1d5=String[_0x42bea4(0x1fb)+'de'](0x5f,0x32,0x30,0x32,0x34),_0x444f5f=_0xe92f0c['gDijC'](_0x196035+_0x55a4bf,_0x1fe1d5);return decryptString(_0x1592e3,_0x444f5f);}
@@ -1 +0,0 @@
1
- function a8_0x1667(_0x23bc84,_0x112e38){_0x23bc84=_0x23bc84-0x7c;const _0x264244=a8_0x3522();let _0x2d9565=_0x264244[_0x23bc84];return _0x2d9565;}const a8_0x44d212=a8_0x1667;(function(_0x141ba7,_0xc8b32b){const _0x586c7d=a8_0x1667,_0x184039=_0x141ba7();while(!![]){try{const _0x408ef3=parseInt(_0x586c7d(0xa2))/0x1*(parseInt(_0x586c7d(0x8a))/0x2)+-parseInt(_0x586c7d(0x81))/0x3*(-parseInt(_0x586c7d(0x84))/0x4)+-parseInt(_0x586c7d(0xab))/0x5*(-parseInt(_0x586c7d(0xa5))/0x6)+parseInt(_0x586c7d(0x9f))/0x7*(parseInt(_0x586c7d(0x83))/0x8)+parseInt(_0x586c7d(0x8f))/0x9*(parseInt(_0x586c7d(0x9e))/0xa)+-parseInt(_0x586c7d(0x96))/0xb*(-parseInt(_0x586c7d(0x7e))/0xc)+-parseInt(_0x586c7d(0x90))/0xd;if(_0x408ef3===_0xc8b32b)break;else _0x184039['push'](_0x184039['shift']());}catch(_0x3167de){_0x184039['push'](_0x184039['shift']());}}}(a8_0x3522,0xebe9f));const a8_0x1304a2=(function(){let _0x57ef14=!![];return function(_0x5638e5,_0x150e35){const _0x319a3c=_0x57ef14?function(){if(_0x150e35){const _0x207c36=_0x150e35['apply'](_0x5638e5,arguments);return _0x150e35=null,_0x207c36;}}:function(){};return _0x57ef14=![],_0x319a3c;};}()),a8_0x2d9565=a8_0x1304a2(this,function(){const _0x40d537=a8_0x1667,_0x18d791={};_0x18d791[_0x40d537(0xa8)]=_0x40d537(0xa6)+'+$';const _0x56e87a=_0x18d791;return a8_0x2d9565[_0x40d537(0x82)]()['search'](_0x56e87a['kuroS'])[_0x40d537(0x82)]()[_0x40d537(0xae)+'r'](a8_0x2d9565)['search'](_0x56e87a[_0x40d537(0xa8)]);});a8_0x2d9565();import{logger}from'./logger.js';export class DiffUtil{static[a8_0x44d212(0x92)+'ff'](_0x4d4386,_0x1c4d69){const _0x224348=a8_0x44d212,_0xbd5798={};_0xbd5798[_0x224348(0xa4)]=_0x224348(0x9b),_0xbd5798[_0x224348(0x9a)]=function(_0x4f5683,_0x580d60){return _0x4f5683+_0x580d60;},_0xbd5798[_0x224348(0x93)]=_0x224348(0x7c),_0xbd5798['jBwPg']='코드\x20diff\x20생성'+_0x224348(0x91),_0xbd5798['HjqEX']=_0x224348(0xac)+_0x224348(0x7f);const _0x592d11=_0xbd5798;try{const _0x43c428=_0x4d4386['split']('\x0a'),_0x4b5eb3=_0x1c4d69[_0x224348(0x87)]('\x0a'),_0x288ee7=[];_0x288ee7['push'](_0x224348(0xb0)),_0x288ee7[_0x224348(0x86)](_0x592d11[_0x224348(0xa4)]),_0x288ee7[_0x224348(0x86)](_0x592d11[_0x224348(0x9a)](_0x224348(0x88)+_0x43c428[_0x224348(0xa3)]+_0x592d11[_0x224348(0x93)],_0x4b5eb3[_0x224348(0xa3)])+'\x20@@');const _0x2e6814=Math[_0x224348(0xa7)](_0x43c428[_0x224348(0xa3)],_0x4b5eb3[_0x224348(0xa3)]);for(let _0x426359=0x0;_0x426359<_0x2e6814;_0x426359++){const _0x113629=_0x43c428[_0x426359]||'',_0x551c28=_0x4b5eb3[_0x426359]||'';_0x113629===_0x551c28?_0x288ee7[_0x224348(0x86)]('\x20'+_0x113629):(_0x113629&&_0x288ee7[_0x224348(0x86)]('-'+_0x113629),_0x551c28&&_0x288ee7[_0x224348(0x86)]('+'+_0x551c28));}return logger[_0x224348(0x8d)](_0x592d11['jBwPg']),_0x288ee7[_0x224348(0x98)]('\x0a');}catch(_0x593589){return logger['error']('Diff\x20생성\x20실패'+':',_0x593589),_0x592d11[_0x224348(0xa9)];}}static[a8_0x44d212(0x99)+a8_0x44d212(0x8c)](_0x2a2303,_0xb99277,_0x452af5=a8_0x44d212(0xad)){const _0x50fd7d=a8_0x44d212;try{const _0x4714e1=_0x2a2303[_0x50fd7d(0x87)]('\x0a'),_0x5ad7d7=_0xb99277[_0x50fd7d(0x87)]('\x0a'),_0x460e78=[];_0x460e78[_0x50fd7d(0x86)]('---\x20a/'+_0x452af5),_0x460e78[_0x50fd7d(0x86)](_0x50fd7d(0x80)+_0x452af5);const _0x3d324d=this[_0x50fd7d(0xaa)+'ks'](_0x4714e1,_0x5ad7d7);for(const _0x4e1133 of _0x3d324d){_0x460e78[_0x50fd7d(0x86)]('@@\x20-'+_0x4e1133[_0x50fd7d(0x9d)]+','+_0x4e1133[_0x50fd7d(0xa1)]+'\x20+'+_0x4e1133[_0x50fd7d(0x7d)]+','+_0x4e1133['newCount']+_0x50fd7d(0x94));for(const _0x58174f of _0x4e1133['lines']){_0x460e78['push'](_0x58174f);}}return logger['info'](_0x50fd7d(0x8b)+_0x50fd7d(0x95)),_0x460e78['join']('\x0a');}catch(_0x5b5cec){return logger[_0x50fd7d(0xa0)]('Unified\x20di'+_0x50fd7d(0x97),_0x5b5cec),_0x50fd7d(0x8b)+_0x50fd7d(0x85)+_0x50fd7d(0x9c);}}static[a8_0x44d212(0xaa)+'ks'](_0x4443fc,_0x262b58){const _0x2b123f=a8_0x44d212,_0x9b4974={};_0x9b4974[_0x2b123f(0xaf)]=function(_0x1fe8e7,_0x5d5b42){return _0x1fe8e7+_0x5d5b42;};const _0x133937=_0x9b4974,_0x11c1a8=[],_0x18992c=Math[_0x2b123f(0xa7)](_0x4443fc[_0x2b123f(0xa3)],_0x262b58['length']),_0x36485a=[];let _0x26fc40=0x1,_0x382c35=0x1,_0x4ba7cd=0x0,_0x1498cf=0x0;for(let _0x2f8c8d=0x0;_0x2f8c8d<_0x18992c;_0x2f8c8d++){const _0x2a10b3=_0x4443fc[_0x2f8c8d]||'',_0x4bcbae=_0x262b58[_0x2f8c8d]||'';if(_0x2a10b3===_0x4bcbae){if(_0x4ba7cd>0x0||_0x1498cf>0x0){const _0x125590={};_0x125590[_0x2b123f(0x9d)]=_0x26fc40,_0x125590[_0x2b123f(0xa1)]=_0x4ba7cd,_0x125590[_0x2b123f(0x7d)]=_0x382c35,_0x125590[_0x2b123f(0x8e)]=_0x1498cf,_0x125590['lines']=[..._0x36485a],_0x11c1a8[_0x2b123f(0x86)](_0x125590),_0x36485a[_0x2b123f(0xa3)]=0x0,_0x4ba7cd=0x0,_0x1498cf=0x0;}_0x26fc40=_0x2f8c8d+0x2,_0x382c35=_0x133937[_0x2b123f(0xaf)](_0x2f8c8d,0x2);}else _0x4ba7cd===0x0&&_0x1498cf===0x0&&(_0x26fc40=_0x2f8c8d+0x1,_0x382c35=_0x2f8c8d+0x1),_0x2a10b3&&(_0x36485a['push']('-'+_0x2a10b3),_0x4ba7cd++),_0x4bcbae&&(_0x36485a['push']('+'+_0x4bcbae),_0x1498cf++);}if(_0x4ba7cd>0x0||_0x1498cf>0x0){const _0x2c7c4f={};_0x2c7c4f['oldStart']=_0x26fc40,_0x2c7c4f[_0x2b123f(0xa1)]=_0x4ba7cd,_0x2c7c4f[_0x2b123f(0x7d)]=_0x382c35,_0x2c7c4f[_0x2b123f(0x8e)]=_0x1498cf,_0x2c7c4f[_0x2b123f(0x89)]=[..._0x36485a],_0x11c1a8[_0x2b123f(0x86)](_0x2c7c4f);}return _0x11c1a8;}}function a8_0x3522(){const _0x59d3ea=['newStart','48hyQdNw','패했습니다.','+++\x20b/','157974NXQFjZ','toString','2595512YemVZu','108MraANR','ff\x20생성에\x20실패했','push','split','@@\x20-1,','lines','164468TryZYF','Unified\x20di','ifiedDiff','info','newCount','15165fjSmiu','57309915ttEEgw','\x20완료','generateDi','dTHDs','\x20@@','ff\x20생성\x20완료','95216mRSNPP','ff\x20생성\x20실패:','join','generateUn','CxsEy','+++\x20안전한\x20코드','습니다.','oldStart','7730ZhvAwa','21wPRqXc','error','oldCount','19ErnTEv','length','LqGZl','60DlxUTa','(((.+)+)+)','max','kuroS','HjqEX','computeHun','40050tDLQTo','Diff\x20생성에\x20실','code.java','constructo','cOtIM','---\x20원본\x20코드','\x20+1,'];a8_0x3522=function(){return _0x59d3ea;};return a8_0x3522();}
@@ -1 +0,0 @@
1
- const a9_0x497499=a9_0x2c79;(function(_0x13db0d,_0x43a852){const _0x3b3ddb=a9_0x2c79,_0x24e87d=_0x13db0d();while(!![]){try{const _0xc24c1e=-parseInt(_0x3b3ddb(0x1a0))/0x1*(parseInt(_0x3b3ddb(0x1a1))/0x2)+-parseInt(_0x3b3ddb(0x192))/0x3*(parseInt(_0x3b3ddb(0x1ba))/0x4)+parseInt(_0x3b3ddb(0x1c2))/0x5+-parseInt(_0x3b3ddb(0x1c4))/0x6*(parseInt(_0x3b3ddb(0x195))/0x7)+parseInt(_0x3b3ddb(0x1be))/0x8*(-parseInt(_0x3b3ddb(0x1a2))/0x9)+parseInt(_0x3b3ddb(0x1a5))/0xa*(-parseInt(_0x3b3ddb(0x1aa))/0xb)+-parseInt(_0x3b3ddb(0x1b1))/0xc*(-parseInt(_0x3b3ddb(0x1b3))/0xd);if(_0xc24c1e===_0x43a852)break;else _0x24e87d['push'](_0x24e87d['shift']());}catch(_0x4d48e9){_0x24e87d['push'](_0x24e87d['shift']());}}}(a9_0x5ea3,0x4283e));const a9_0x96a892=(function(){let _0x51043e=!![];return function(_0x3f86b2,_0x1fac73){const _0x2dafbc=_0x51043e?function(){const _0x4eaa80=a9_0x2c79;if(_0x1fac73){const _0x4334f6=_0x1fac73[_0x4eaa80(0x1a3)](_0x3f86b2,arguments);return _0x1fac73=null,_0x4334f6;}}:function(){};return _0x51043e=![],_0x2dafbc;};}()),a9_0x372c8c=a9_0x96a892(this,function(){const _0x138ac9=a9_0x2c79;return a9_0x372c8c[_0x138ac9(0x1a8)]()['search']('(((.+)+)+)'+'+$')[_0x138ac9(0x1a8)]()[_0x138ac9(0x1b4)+'r'](a9_0x372c8c)[_0x138ac9(0x19d)](_0x138ac9(0x193)+'+$');});a9_0x372c8c();import a9_0x586b34 from'winston';function a9_0x2c79(_0x38c998,_0x1c23ad){_0x38c998=_0x38c998-0x190;const _0x5991a7=a9_0x5ea3();let _0x372c8c=_0x5991a7[_0x38c998];return _0x372c8c;}function a9_0x5ea3(){const _0x466184=['constructo','printf','logs','MCP_SERVER','../..','keys','4QKEHNm','json','Console','existsSync','328TuPOkc','LOG_TO_CON','error','stringify','2180215ddktWN','combined.l','3096pbUHYF','THH:mm:ss.','transports','CURSOR','errors','format','env','-code-gene','345129xPyMFc','(((.+)+)+)','timestamp','553vJgrhN','length','join','createLogg','recursive','YYYY-MM-DD','info','rator','search','add','combine','95paPyNN','2596wXFmck','28188FVuJQS','apply','stack','744980FzrscF','warn','MCP_STDIO','toString','mkdirSync','66TEEAZT','resolve','toLowerCas','service','SSSZ','MCP','File','48jRPjBN','CURSOR_MCP','2245490HyusjK'];a9_0x5ea3=function(){return _0x466184;};return a9_0x5ea3();}import a9_0x165e05 from'path';import a9_0x5d3530 from'fs';import{fileURLToPath}from'url';const loggerModuleDir=a9_0x165e05['dirname'](fileURLToPath(import.meta.url)),projectRootForLogs=a9_0x165e05['resolve'](loggerModuleDir,a9_0x497499(0x1b8)),logsDirAbs=a9_0x165e05[a9_0x497499(0x1ab)](projectRootForLogs,a9_0x497499(0x1b6));try{if(!a9_0x5d3530[a9_0x497499(0x1bd)](logsDirAbs)){const a9_0x3cdeff={};a9_0x3cdeff[a9_0x497499(0x199)]=!![],a9_0x5d3530[a9_0x497499(0x1a9)](logsDirAbs,a9_0x3cdeff);}}catch{}const isStdioMcpHost=Boolean(process['env'][a9_0x497499(0x1af)]||process[a9_0x497499(0x190)][a9_0x497499(0x1b7)]||process[a9_0x497499(0x190)][a9_0x497499(0x1a7)]||process['env'][a9_0x497499(0x1c7)]||process['env'][a9_0x497499(0x1b2)]),enableConsole=String(process[a9_0x497499(0x190)][a9_0x497499(0x1bf)+'SOLE'])[a9_0x497499(0x1ac)+'e']()==='true'&&!isStdioMcpHost,a9_0x22edf9={};a9_0x22edf9[a9_0x497499(0x1a4)]=!![];const a9_0xbbcb7={};a9_0xbbcb7[a9_0x497499(0x1ad)]='mcp-secure'+a9_0x497499(0x191)+a9_0x497499(0x19c);export const logger=a9_0x586b34[a9_0x497499(0x198)+'er']({'level':process[a9_0x497499(0x190)]['LOG_LEVEL']||a9_0x497499(0x19b),'format':a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x19f)](a9_0x586b34['format'][a9_0x497499(0x194)](),a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x1c8)](a9_0x22edf9),a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x1bb)]()),'defaultMeta':a9_0xbbcb7,'transports':[]});try{const a9_0x5041b1={};a9_0x5041b1[a9_0x497499(0x1c9)]=a9_0x497499(0x19a)+'THH:mm:ss.'+a9_0x497499(0x1ae);const a9_0x5d112c={};a9_0x5d112c[a9_0x497499(0x1a4)]=!![],logger[a9_0x497499(0x19e)](new a9_0x586b34['transports'][(a9_0x497499(0x1b0))]({'filename':a9_0x165e05[a9_0x497499(0x197)](logsDirAbs,'error.log'),'level':a9_0x497499(0x1c0),'format':a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x19f)](a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x194)](a9_0x5041b1),a9_0x586b34[a9_0x497499(0x1c9)]['errors'](a9_0x5d112c),a9_0x586b34[a9_0x497499(0x1c9)]['json']())}));const a9_0x5f5612={};a9_0x5f5612[a9_0x497499(0x1c9)]=a9_0x497499(0x19a)+'THH:mm:ss.'+a9_0x497499(0x1ae);const a9_0xe9966d={};a9_0xe9966d[a9_0x497499(0x1a4)]=!![],logger['add'](new a9_0x586b34[(a9_0x497499(0x1c6))]['File']({'filename':a9_0x165e05[a9_0x497499(0x197)](logsDirAbs,a9_0x497499(0x1c3)+'og'),'format':a9_0x586b34[a9_0x497499(0x1c9)]['combine'](a9_0x586b34['format'][a9_0x497499(0x194)](a9_0x5f5612),a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x1c8)](a9_0xe9966d),a9_0x586b34['format'][a9_0x497499(0x1bb)]())}));}catch{}if(enableConsole){const a9_0xc67fa5={};a9_0xc67fa5[a9_0x497499(0x1c9)]=a9_0x497499(0x19a)+a9_0x497499(0x1c5)+'SSSZ',logger[a9_0x497499(0x19e)](new a9_0x586b34['transports'][(a9_0x497499(0x1bc))]({'format':a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x19f)](a9_0x586b34[a9_0x497499(0x1c9)]['colorize'](),a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x194)](a9_0xc67fa5),a9_0x586b34[a9_0x497499(0x1c9)][a9_0x497499(0x1b5)](_0x3f6c57=>{const _0x4c8334=a9_0x497499,{level:_0x3a6e6a,message:_0x40d5f2,timestamp:_0x5b39b6,..._0xaf66cb}=_0x3f6c57,_0x118044=Object[_0x4c8334(0x1b9)](_0xaf66cb)[_0x4c8334(0x196)]?'\x20'+JSON[_0x4c8334(0x1c1)](_0xaf66cb):'';return'['+_0x5b39b6+']\x20'+_0x3a6e6a+':\x20'+_0x40d5f2+_0x118044;})),'stderrLevels':[a9_0x497499(0x1c0),a9_0x497499(0x1a6)]}));}
File without changes
File without changes
File without changes
File without changes