@syke1/mcp-server 1.5.6 → 1.6.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.
- package/LICENSE +13 -57
- package/README.md +18 -21
- package/dist/ai/analyzer.js +1 -112
- package/dist/ai/context-extractor.js +1 -224
- package/dist/ai/provider.js +1 -186
- package/dist/ai/realtime-analyzer.js +1 -253
- package/dist/config.js +1 -121
- package/dist/git/change-coupling.js +1 -250
- package/dist/graph/incremental.js +1 -319
- package/dist/graph/memo-cache.js +1 -176
- package/dist/graph/scc.js +1 -206
- package/dist/graph.js +1 -137
- package/dist/index.js +1 -852
- package/dist/license/validator.d.ts +3 -0
- package/dist/license/validator.js +1 -328
- package/dist/scoring/pagerank.js +1 -221
- package/dist/scoring/risk-scorer.js +1 -623
- package/dist/tools/analyze-impact.js +1 -378
- package/dist/tools/gate-build.js +1 -409
- package/dist/watcher/file-cache.js +1 -281
- package/dist/web/server.js +1 -925
- package/package.json +53 -68
package/dist/ai/provider.js
CHANGED
|
@@ -1,186 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AI Provider abstraction — Multi-AI support (Gemini, OpenAI, Anthropic)
|
|
4
|
-
* Automatically selects the best available provider based on API keys.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.getAIProvider = getAIProvider;
|
|
8
|
-
exports.resetAIProvider = resetAIProvider;
|
|
9
|
-
exports.getProviderName = getProviderName;
|
|
10
|
-
const generative_ai_1 = require("@google/generative-ai");
|
|
11
|
-
const config_1 = require("../config");
|
|
12
|
-
// ── Gemini ──────────────────────────────────────────────────────────
|
|
13
|
-
class GeminiProvider {
|
|
14
|
-
constructor(apiKey) {
|
|
15
|
-
this.name = "Gemini (gemini-2.5-flash)";
|
|
16
|
-
this.ai = new generative_ai_1.GoogleGenerativeAI(apiKey);
|
|
17
|
-
}
|
|
18
|
-
async analyze(systemPrompt, userPrompt) {
|
|
19
|
-
const model = this.ai.getGenerativeModel({ model: "gemini-2.5-flash" });
|
|
20
|
-
const result = await model.generateContent({
|
|
21
|
-
contents: [{ role: "user", parts: [{ text: userPrompt }] }],
|
|
22
|
-
systemInstruction: { role: "model", parts: [{ text: systemPrompt }] },
|
|
23
|
-
});
|
|
24
|
-
return result.response.text();
|
|
25
|
-
}
|
|
26
|
-
async analyzeJSON(systemPrompt, userPrompt) {
|
|
27
|
-
const text = await this.analyze(systemPrompt, userPrompt);
|
|
28
|
-
let jsonStr = text;
|
|
29
|
-
const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
30
|
-
if (jsonMatch)
|
|
31
|
-
jsonStr = jsonMatch[1];
|
|
32
|
-
return JSON.parse(jsonStr.trim());
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// ── OpenAI ──────────────────────────────────────────────────────────
|
|
36
|
-
class OpenAIProvider {
|
|
37
|
-
constructor(apiKey) {
|
|
38
|
-
this.name = "OpenAI (gpt-4o-mini)";
|
|
39
|
-
this.apiKey = apiKey;
|
|
40
|
-
}
|
|
41
|
-
async analyze(systemPrompt, userPrompt) {
|
|
42
|
-
const res = await fetch("https://api.openai.com/v1/chat/completions", {
|
|
43
|
-
method: "POST",
|
|
44
|
-
headers: {
|
|
45
|
-
"Content-Type": "application/json",
|
|
46
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
47
|
-
},
|
|
48
|
-
body: JSON.stringify({
|
|
49
|
-
model: "gpt-4o-mini",
|
|
50
|
-
messages: [
|
|
51
|
-
{ role: "system", content: systemPrompt },
|
|
52
|
-
{ role: "user", content: userPrompt },
|
|
53
|
-
],
|
|
54
|
-
temperature: 0.3,
|
|
55
|
-
}),
|
|
56
|
-
});
|
|
57
|
-
if (!res.ok) {
|
|
58
|
-
const body = await res.text();
|
|
59
|
-
throw new Error(`OpenAI API error ${res.status}: ${body}`);
|
|
60
|
-
}
|
|
61
|
-
const data = (await res.json());
|
|
62
|
-
return data.choices[0].message.content;
|
|
63
|
-
}
|
|
64
|
-
async analyzeJSON(systemPrompt, userPrompt) {
|
|
65
|
-
const res = await fetch("https://api.openai.com/v1/chat/completions", {
|
|
66
|
-
method: "POST",
|
|
67
|
-
headers: {
|
|
68
|
-
"Content-Type": "application/json",
|
|
69
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
70
|
-
},
|
|
71
|
-
body: JSON.stringify({
|
|
72
|
-
model: "gpt-4o-mini",
|
|
73
|
-
messages: [
|
|
74
|
-
{ role: "system", content: systemPrompt },
|
|
75
|
-
{ role: "user", content: userPrompt },
|
|
76
|
-
],
|
|
77
|
-
temperature: 0.3,
|
|
78
|
-
response_format: { type: "json_object" },
|
|
79
|
-
}),
|
|
80
|
-
});
|
|
81
|
-
if (!res.ok) {
|
|
82
|
-
const body = await res.text();
|
|
83
|
-
throw new Error(`OpenAI API error ${res.status}: ${body}`);
|
|
84
|
-
}
|
|
85
|
-
const data = (await res.json());
|
|
86
|
-
return JSON.parse(data.choices[0].message.content);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// ── Anthropic ───────────────────────────────────────────────────────
|
|
90
|
-
class AnthropicProvider {
|
|
91
|
-
constructor(apiKey) {
|
|
92
|
-
this.name = "Claude (claude-sonnet-4-20250514)";
|
|
93
|
-
this.apiKey = apiKey;
|
|
94
|
-
}
|
|
95
|
-
async analyze(systemPrompt, userPrompt) {
|
|
96
|
-
const res = await fetch("https://api.anthropic.com/v1/messages", {
|
|
97
|
-
method: "POST",
|
|
98
|
-
headers: {
|
|
99
|
-
"Content-Type": "application/json",
|
|
100
|
-
"x-api-key": this.apiKey,
|
|
101
|
-
"anthropic-version": "2023-06-01",
|
|
102
|
-
},
|
|
103
|
-
body: JSON.stringify({
|
|
104
|
-
model: "claude-sonnet-4-20250514",
|
|
105
|
-
max_tokens: 4096,
|
|
106
|
-
system: systemPrompt,
|
|
107
|
-
messages: [{ role: "user", content: userPrompt }],
|
|
108
|
-
}),
|
|
109
|
-
});
|
|
110
|
-
if (!res.ok) {
|
|
111
|
-
const body = await res.text();
|
|
112
|
-
throw new Error(`Anthropic API error ${res.status}: ${body}`);
|
|
113
|
-
}
|
|
114
|
-
const data = (await res.json());
|
|
115
|
-
return data.content[0].text;
|
|
116
|
-
}
|
|
117
|
-
async analyzeJSON(systemPrompt, userPrompt) {
|
|
118
|
-
const text = await this.analyze(systemPrompt + "\n\nRespond with JSON only. No explanatory text, just pure JSON.", userPrompt);
|
|
119
|
-
let jsonStr = text;
|
|
120
|
-
const jsonMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
121
|
-
if (jsonMatch)
|
|
122
|
-
jsonStr = jsonMatch[1];
|
|
123
|
-
return JSON.parse(jsonStr.trim());
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
// ── Factory ─────────────────────────────────────────────────────────
|
|
127
|
-
let cachedProvider = undefined;
|
|
128
|
-
/**
|
|
129
|
-
* Returns the best available AI provider, or null if no API key is set.
|
|
130
|
-
*
|
|
131
|
-
* Priority:
|
|
132
|
-
* 1. SYKE_AI_PROVIDER env var forces a specific provider
|
|
133
|
-
* 2. Auto-select: GEMINI_KEY > OPENAI_KEY > ANTHROPIC_KEY
|
|
134
|
-
*/
|
|
135
|
-
function getAIProvider() {
|
|
136
|
-
if (cachedProvider !== undefined)
|
|
137
|
-
return cachedProvider;
|
|
138
|
-
const forced = (0, config_1.getConfig)("aiProvider", "SYKE_AI_PROVIDER")?.toLowerCase();
|
|
139
|
-
const geminiKey = (0, config_1.getConfig)("geminiKey", "GEMINI_KEY");
|
|
140
|
-
const openaiKey = (0, config_1.getConfig)("openaiKey", "OPENAI_KEY");
|
|
141
|
-
const anthropicKey = (0, config_1.getConfig)("anthropicKey", "ANTHROPIC_KEY");
|
|
142
|
-
if (forced) {
|
|
143
|
-
if (forced === "gemini" && geminiKey) {
|
|
144
|
-
cachedProvider = new GeminiProvider(geminiKey);
|
|
145
|
-
}
|
|
146
|
-
else if (forced === "openai" && openaiKey) {
|
|
147
|
-
cachedProvider = new OpenAIProvider(openaiKey);
|
|
148
|
-
}
|
|
149
|
-
else if (forced === "anthropic" && anthropicKey) {
|
|
150
|
-
cachedProvider = new AnthropicProvider(anthropicKey);
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
console.error(`[syke] SYKE_AI_PROVIDER=${forced} but no matching API key found`);
|
|
154
|
-
cachedProvider = null;
|
|
155
|
-
}
|
|
156
|
-
return cachedProvider;
|
|
157
|
-
}
|
|
158
|
-
// Auto-select
|
|
159
|
-
if (geminiKey) {
|
|
160
|
-
cachedProvider = new GeminiProvider(geminiKey);
|
|
161
|
-
}
|
|
162
|
-
else if (openaiKey) {
|
|
163
|
-
cachedProvider = new OpenAIProvider(openaiKey);
|
|
164
|
-
}
|
|
165
|
-
else if (anthropicKey) {
|
|
166
|
-
cachedProvider = new AnthropicProvider(anthropicKey);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
cachedProvider = null;
|
|
170
|
-
}
|
|
171
|
-
return cachedProvider;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Reset the cached provider so the next getAIProvider() call re-evaluates config.
|
|
175
|
-
* Call this after changing API keys at runtime.
|
|
176
|
-
*/
|
|
177
|
-
function resetAIProvider() {
|
|
178
|
-
cachedProvider = undefined;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Human-readable name for the active AI provider (for logs/UI).
|
|
182
|
-
*/
|
|
183
|
-
function getProviderName() {
|
|
184
|
-
const provider = getAIProvider();
|
|
185
|
-
return provider ? provider.name : "disabled";
|
|
186
|
-
}
|
|
1
|
+
'use strict';const _0x36795b=_0x1137;(function(_0x1b5d27,_0x6ba392){const _0x571a7a={_0x18bcc9:0x147,_0x106903:0x11e,_0x447905:0x117,_0x5a8d58:0x118,_0x59b6e0:0x14a,_0x159da4:0x114,_0x1be49a:0x136,_0x188b4d:0x14b},_0x39e50f=_0x1137,_0x370f89=_0x1b5d27();while(!![]){try{const _0x5a02bc=parseInt(_0x39e50f(_0x571a7a._0x18bcc9))/0x1+-parseInt(_0x39e50f(_0x571a7a._0x106903))/0x2*(-parseInt(_0x39e50f(_0x571a7a._0x447905))/0x3)+parseInt(_0x39e50f(0x13d))/0x4*(parseInt(_0x39e50f(0x128))/0x5)+parseInt(_0x39e50f(0x141))/0x6*(-parseInt(_0x39e50f(_0x571a7a._0x5a8d58))/0x7)+-parseInt(_0x39e50f(_0x571a7a._0x59b6e0))/0x8*(parseInt(_0x39e50f(_0x571a7a._0x159da4))/0x9)+-parseInt(_0x39e50f(_0x571a7a._0x1be49a))/0xa+parseInt(_0x39e50f(_0x571a7a._0x188b4d))/0xb*(parseInt(_0x39e50f(0x138))/0xc);if(_0x5a02bc===_0x6ba392)break;else _0x370f89['push'](_0x370f89['shift']());}catch(_0x3b5dab){_0x370f89['push'](_0x370f89['shift']());}}}(_0x4d01,0xdac0d));const _0x29fd7c={};_0x29fd7c['value']=!![],Object[_0x36795b(0x156)](exports,_0x36795b(0x149),_0x29fd7c),exports['getAIProvider']=getAIProvider,exports['resetAIProvider']=resetAIProvider,exports['getProviderName']=getProviderName;function _0x4d01(){const _0x215290=['CvLcCeS','r0vnsu5jx0Tfwq','CM9Szq','rK9mr0i','zgTrrNi','zgvMAw5LuhjVCgvYDhK','Bw9KzwW','mtq4mdvlz1Hbwhq','qu5usfjpueLdx0Tfwq','z2vTAw5PltiUns1MBgfZAa','mtaZntm5v0HNqMjN','mZeXntG0z0TwDKfP','q29UDgvUDc1uExbL','DxnLCG','z2v0r2vUzxjHDgL2zu1VzgvS','yNHxyuy','ywLqCM92AwrLCG','mZHXuNDkz1q','cGPszxnWB25KihDPDgGGsLnptIbVBMX5lIboBYbLEhbSyw5HDg9YEsb0zxH0lcbQDxn0ihb1CMuGsLnptI4','Ahr0Chm6lY9HCgKUB3bLBMfPlMnVBs92ms9JAgf0l2nVBxbSzxrPB25Z','y2HVAwnLCW','qgDVB2DSzs9Nzw5LCMf0AxzLlwfP','t1bftKfjx0Tfwq','igj1DcbUBYbTyxrJAgLUzYbbueKGA2v5igzVDw5K','BMfTzq','C3rYAw5NAwz5','A2TvBey','nw9AzKjHvG','yw5HBhL6zq','y29UDgvUDa','Bwf4x3rVA2vUCW','z2v0q29UzMLN','u1Llrv9bsv9quK9wsurfuG','q2XHDwrLicHJBgf1zguTC29UBMv0ltqTmJaYnta1mtqP','r29Vz2XLr2vUzxjHDgL2zufj','yw50AhjVCgLJs2v5','Dgv4Da','Bwf0y2G','CgfYC2u','qMvHCMvYia','Ahr0Chm6lY9HCgKUyw50AhjVCgLJlMnVBs92ms9TzxnZywDLCW','mteWmdaYmJblCMDJwg4','yxbPs2v5','mZzwC0f5ufO','r1zrwva','u3rIvLi','u2DzCKq','ufDeswi','ndiXmdqXmNHmEvP3wG','A0HnyKK','mJaYmY0WnI0Wmq','r2vTAw5PicHNzw1PBMKTmI41lwzSyxnOkq','nKHhtNPYua','w3n5A2vDifnzs0vFquLFufjpvKLervi9','ru5nwMG','ANnVBG','CvbJCKK','Aefcufe','mty3oti5munlzwL6Ca','B3jlsNu','x19LC01VzhvSzq','odi2ngrQue9XqW','mti5mtm2n1zcyKHVAq','Bhj2Dgq','yw5HBhL6zuPtt04','z2vTAw5P','ANnVBL9VyMPLy3q','lI4Vy29UzMLN'];_0x4d01=function(){return _0x215290;};return _0x4d01();}const generative_ai_1=require(_0x36795b(0x122)),config_1=require(_0x36795b(0x150));function _0x1137(_0x55f8fb,_0x2b15ac){_0x55f8fb=_0x55f8fb-0x113;const _0x4d01af=_0x4d01();let _0x113799=_0x4d01af[_0x55f8fb];if(_0x1137['uJkobG']===undefined){var _0x4b24c3=function(_0x33c083){const _0x254790='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x55c2d0='',_0x5851f1='';for(let _0x20cb25=0x0,_0x1538d9,_0x5175e4,_0x2f6cea=0x0;_0x5175e4=_0x33c083['charAt'](_0x2f6cea++);~_0x5175e4&&(_0x1538d9=_0x20cb25%0x4?_0x1538d9*0x40+_0x5175e4:_0x5175e4,_0x20cb25++%0x4)?_0x55c2d0+=String['fromCharCode'](0xff&_0x1538d9>>(-0x2*_0x20cb25&0x6)):0x0){_0x5175e4=_0x254790['indexOf'](_0x5175e4);}for(let _0x964b9a=0x0,_0x3094fe=_0x55c2d0['length'];_0x964b9a<_0x3094fe;_0x964b9a++){_0x5851f1+='%'+('00'+_0x55c2d0['charCodeAt'](_0x964b9a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5851f1);};_0x1137['WzNTyp']=_0x4b24c3,_0x1137['ZUnwIY']={},_0x1137['uJkobG']=!![];}const _0x30b5b4=_0x4d01af[0x0],_0x243a9b=_0x55f8fb+_0x30b5b4,_0x5567e1=_0x1137['ZUnwIY'][_0x243a9b];return!_0x5567e1?(_0x113799=_0x1137['WzNTyp'](_0x113799),_0x1137['ZUnwIY'][_0x243a9b]=_0x113799):_0x113799=_0x5567e1,_0x113799;}class GeminiProvider{constructor(_0x4c255b){const _0x563a37=_0x36795b;this['name']=_0x563a37(0x140),this['ai']=new generative_ai_1[(_0x563a37(0x12f))](_0x4c255b);}async[_0x36795b(0x129)](_0x6a2fbb,_0x5e6064){const _0x4ccbd0={_0x29fe1a:0x116,_0x8904af:0x113,_0x4f3425:0x11b,_0x2a4a73:0x151,_0x11daa0:0x131},_0x3948cb=_0x36795b,_0x92ef1d={};_0x92ef1d['SgYrD']=_0x3948cb(_0x4ccbd0._0x29fe1a),_0x92ef1d[_0x3948cb(0x151)]=_0x3948cb(0x11a);const _0x56cbaa=_0x92ef1d,_0x19525f={};_0x19525f[_0x3948cb(_0x4ccbd0._0x8904af)]=_0x56cbaa[_0x3948cb(0x13b)];const _0x6a3747=this['ai'][_0x3948cb(_0x4ccbd0._0x4f3425)](_0x19525f),_0x4013fe={};_0x4013fe['text']=_0x5e6064;const _0x7a5b1d={};_0x7a5b1d['role']=_0x56cbaa[_0x3948cb(_0x4ccbd0._0x2a4a73)],_0x7a5b1d['parts']=[_0x4013fe];const _0x4588d6={};_0x4588d6['text']=_0x6a2fbb;const _0x390034={};_0x390034['role']='model',_0x390034['parts']=[_0x4588d6];const _0x5e503f={};_0x5e503f['contents']=[_0x7a5b1d],_0x5e503f['systemInstruction']=_0x390034;const _0x3878cf=await _0x6a3747['generateContent'](_0x5e503f);return _0x3878cf['response'][_0x3948cb(_0x4ccbd0._0x11daa0)]();}async['analyzeJSON'](_0x178730,_0x5aebe9){const _0x2ba33b={_0xd20aee:0x133},_0x531743=_0x36795b,_0x2db182=await this['analyze'](_0x178730,_0x5aebe9);let _0x5072e0=_0x2db182;const _0x41de5f=_0x2db182[_0x531743(0x132)](/```(?:json)?\s*([\s\S]*?)```/);if(_0x41de5f)_0x5072e0=_0x41de5f[0x1];return JSON[_0x531743(_0x2ba33b._0xd20aee)](_0x5072e0['trim']());}}class OpenAIProvider{constructor(_0x538034){const _0x5b0c19={_0x2a402e:0x137},_0x36b67b=_0x36795b,_0x2d9719={};_0x2d9719[_0x36b67b(0x155)]='OpenAI\x20(gpt-4o-mini)';const _0x5c4b1f=_0x2d9719;this['name']=_0x5c4b1f[_0x36b67b(0x155)],this[_0x36b67b(_0x5b0c19._0x2a402e)]=_0x538034;}async['analyze'](_0x5b0574,_0x5d17c2){const _0x1e9ada={_0x5c0746:0x119,_0x5a764d:0x134,_0x319687:0x137,_0x9a7ca5:0x14c,_0x5d727b:0x131},_0x52c18f=_0x36795b,_0x48af17={'PWDIb':function(_0x54f50,_0xd97825,_0x52a68b){return _0x54f50(_0xd97825,_0x52a68b);},'lrvtd':'gpt-4o-mini','ulTfo':'system','OTUlL':'user'},_0x1736e2={};_0x1736e2[_0x52c18f(_0x1e9ada._0x5c0746)]='application/json',_0x1736e2['Authorization']=_0x52c18f(_0x1e9ada._0x5a764d)+this[_0x52c18f(_0x1e9ada._0x319687)];const _0x4201ab=await _0x48af17[_0x52c18f(0x13c)](fetch,_0x52c18f(0x120),{'method':'POST','headers':_0x1736e2,'body':JSON['stringify']({'model':_0x48af17[_0x52c18f(_0x1e9ada._0x9a7ca5)],'messages':[{'role':_0x48af17['ulTfo'],'content':_0x5b0574},{'role':_0x48af17['OTUlL'],'content':_0x5d17c2}],'temperature':0.3})});if(!_0x4201ab['ok']){const _0x532b27=await _0x4201ab[_0x52c18f(_0x1e9ada._0x5d727b)]();throw new Error('OpenAI\x20API\x20error\x20'+_0x4201ab['status']+':\x20'+_0x532b27);}const _0x2d4fa2=await _0x4201ab[_0x52c18f(0x144)]();return _0x2d4fa2['choices'][0x0]['message'][_0x52c18f(0x12a)];}async[_0x36795b(0x14d)](_0x5edd77,_0x523db7){const _0x1677e7={_0x47d9c6:0x154,_0x47f546:0x153,_0x4fb035:0x12a,_0x339d3a:0x11a,_0x1f5c5a:0x126,_0x41cd77:0x131,_0x14a676:0x133,_0x424ee8:0x12a},_0x9bf093=_0x36795b,_0x65f11e={};_0x65f11e['MeyGe']='POST',_0x65f11e[_0x9bf093(_0x1677e7._0x47d9c6)]=_0x9bf093(0x14f);const _0x243a6f=_0x65f11e,_0x26e0e6={};_0x26e0e6['Content-Type']='application/json',_0x26e0e6['Authorization']='Bearer\x20'+this['apiKey'];const _0x1c66bf={};_0x1c66bf[_0x9bf093(_0x1677e7._0x47f546)]='system',_0x1c66bf[_0x9bf093(_0x1677e7._0x4fb035)]=_0x5edd77;const _0x19bfa6={};_0x19bfa6[_0x9bf093(0x153)]=_0x9bf093(_0x1677e7._0x339d3a),_0x19bfa6[_0x9bf093(0x12a)]=_0x523db7;const _0x51022d=await fetch('https://api.openai.com/v1/chat/completions',{'method':_0x243a6f['MeyGe'],'headers':_0x26e0e6,'body':JSON[_0x9bf093(_0x1677e7._0x1f5c5a)]({'model':'gpt-4o-mini','messages':[_0x1c66bf,_0x19bfa6],'temperature':0.3,'response_format':{'type':_0x243a6f[_0x9bf093(0x154)]}})});if(!_0x51022d['ok']){const _0x2be132=await _0x51022d[_0x9bf093(_0x1677e7._0x41cd77)]();throw new Error('OpenAI\x20API\x20error\x20'+_0x51022d['status']+':\x20'+_0x2be132);}const _0x45534c=await _0x51022d['json']();return JSON[_0x9bf093(_0x1677e7._0x14a676)](_0x45534c[_0x9bf093(0x121)][0x0]['message'][_0x9bf093(_0x1677e7._0x424ee8)]);}}class AnthropicProvider{constructor(_0x210a9d){const _0x1567a2={_0x1657c3:0x125},_0x182955=_0x36795b,_0x42efff={};_0x42efff['XjFwz']=_0x182955(0x12e);const _0x3f7669=_0x42efff;this[_0x182955(_0x1567a2._0x1657c3)]=_0x3f7669['XjFwz'],this['apiKey']=_0x210a9d;}async['analyze'](_0x54e6d3,_0x5b7983){const _0x2a13b6={_0x4e979e:0x135,_0x257ecc:0x12a,_0x1259c7:0x12b,_0x2ed699:0x137,_0x1d2701:0x126,_0x46e3f8:0x131},_0x112022=_0x36795b,_0x88e34b={'svFuV':function(_0x267472,_0x5d270a,_0x42171d){return _0x267472(_0x5d270a,_0x42171d);},'tNIGv':_0x112022(_0x2a13b6._0x4e979e),'mKgBR':'application/json'},_0x305b1d={};_0x305b1d['role']=_0x112022(0x11a),_0x305b1d[_0x112022(_0x2a13b6._0x257ecc)]=_0x5b7983;const _0x3c83ff={};_0x3c83ff[_0x112022(0x113)]='claude-sonnet-4-20250514',_0x3c83ff[_0x112022(_0x2a13b6._0x1259c7)]=0x1000,_0x3c83ff['system']=_0x54e6d3,_0x3c83ff['messages']=[_0x305b1d];const _0x305add=await _0x88e34b['svFuV'](fetch,_0x88e34b['tNIGv'],{'method':'POST','headers':{'Content-Type':_0x88e34b['mKgBR'],'x-api-key':this[_0x112022(_0x2a13b6._0x2ed699)],'anthropic-version':_0x112022(0x13f)},'body':JSON[_0x112022(_0x2a13b6._0x1d2701)](_0x3c83ff)});if(!_0x305add['ok']){const _0x1c39ac=await _0x305add[_0x112022(_0x2a13b6._0x46e3f8)]();throw new Error('Anthropic\x20API\x20error\x20'+_0x305add['status']+':\x20'+_0x1c39ac);}const _0x465a1d=await _0x305add[_0x112022(0x144)]();return _0x465a1d['content'][0x0]['text'];}async['analyzeJSON'](_0x1cd3cc,_0x32e7ae){const _0x4c25eb={_0x38cdd1:0x143,_0x542f57:0x132,_0x200222:0x133},_0x1ac22f=_0x36795b,_0x19b920={};_0x19b920['ENMZh']=function(_0x2804b3,_0x28e32c){return _0x2804b3+_0x28e32c;};const _0x1de527=_0x19b920,_0x1d8ff5=await this['analyze'](_0x1de527[_0x1ac22f(_0x4c25eb._0x38cdd1)](_0x1cd3cc,_0x1ac22f(0x11f)),_0x32e7ae);let _0x2b2beb=_0x1d8ff5;const _0x313f5f=_0x1d8ff5[_0x1ac22f(_0x4c25eb._0x542f57)](/```(?:json)?\s*([\s\S]*?)```/);if(_0x313f5f)_0x2b2beb=_0x313f5f[0x1];return JSON[_0x1ac22f(_0x4c25eb._0x200222)](_0x2b2beb['trim']());}}let cachedProvider=undefined;function getAIProvider(){const _0x4a372b={_0x485b6a:0x11c,_0x7c3810:0x11d,_0xba2bb7:0x12d,_0xec8a17:0x139,_0x3868c2:0x145,_0x535b29:0x12c,_0x121248:0x12c,_0x262573:0x152,_0x56a336:0x130,_0x24de7f:0x148,_0x21987e:0x13e,_0xd7b505:0x142,_0xb2373:0x124},_0x2a7c86=_0x36795b,_0x20fe3f={};_0x20fe3f[_0x2a7c86(_0x4a372b._0x485b6a)]=_0x2a7c86(_0x4a372b._0x7c3810),_0x20fe3f['StbVR']=_0x2a7c86(_0x4a372b._0xba2bb7),_0x20fe3f[_0x2a7c86(_0x4a372b._0xec8a17)]='openaiKey',_0x20fe3f['orKJu']=_0x2a7c86(0x115),_0x20fe3f[_0x2a7c86(0x146)]=function(_0x2f3fd5,_0x1bca19){return _0x2f3fd5===_0x1bca19;},_0x20fe3f[_0x2a7c86(_0x4a372b._0x3868c2)]=_0x2a7c86(0x14e),_0x20fe3f['kHMbI']='openai',_0x20fe3f['rKcqq']='anthropic';const _0x2bb7c7=_0x20fe3f;if(cachedProvider!==undefined)return cachedProvider;const _0x477bd0=(0x0,config_1[_0x2a7c86(_0x4a372b._0x535b29)])(_0x2bb7c7['bxWaF'],_0x2bb7c7[_0x2a7c86(0x13a)])?.['toLowerCase'](),_0x50835e=(0x0,config_1[_0x2a7c86(_0x4a372b._0x121248)])('geminiKey',_0x2a7c86(_0x4a372b._0x262573)),_0x3a4f33=(0x0,config_1[_0x2a7c86(_0x4a372b._0x121248)])(_0x2bb7c7['GVQYP'],_0x2a7c86(0x123)),_0x1781b8=(0x0,config_1[_0x2a7c86(_0x4a372b._0x121248)])(_0x2a7c86(_0x4a372b._0x56a336),_0x2bb7c7[_0x2a7c86(_0x4a372b._0x24de7f)]);if(_0x477bd0){if(_0x2bb7c7[_0x2a7c86(0x146)](_0x477bd0,_0x2bb7c7[_0x2a7c86(_0x4a372b._0x3868c2)])&&_0x50835e)cachedProvider=new GeminiProvider(_0x50835e);else{if(_0x477bd0===_0x2bb7c7[_0x2a7c86(_0x4a372b._0x21987e)]&&_0x3a4f33)cachedProvider=new OpenAIProvider(_0x3a4f33);else _0x477bd0===_0x2bb7c7['rKcqq']&&_0x1781b8?cachedProvider=new AnthropicProvider(_0x1781b8):(console['error'](_0x2a7c86(_0x4a372b._0xd7b505)+_0x477bd0+_0x2a7c86(_0x4a372b._0xb2373)),cachedProvider=null);}return cachedProvider;}if(_0x50835e)cachedProvider=new GeminiProvider(_0x50835e);else{if(_0x3a4f33)cachedProvider=new OpenAIProvider(_0x3a4f33);else _0x1781b8?cachedProvider=new AnthropicProvider(_0x1781b8):cachedProvider=null;}return cachedProvider;}function resetAIProvider(){cachedProvider=undefined;}function getProviderName(){const _0x16d885={_0x56983c:0x127,_0x248a13:0x125},_0x579a59=_0x36795b,_0x302843={'kkUlF':function(_0x288ff8){return _0x288ff8();}},_0x1e9814=_0x302843[_0x579a59(_0x16d885._0x56983c)](getAIProvider);return _0x1e9814?_0x1e9814[_0x579a59(_0x16d885._0x248a13)]:'disabled';}
|
|
@@ -1,253 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.analyzeChangeRealtime = analyzeChangeRealtime;
|
|
37
|
-
const analyze_impact_1 = require("../tools/analyze-impact");
|
|
38
|
-
const crypto = __importStar(require("crypto"));
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
|
-
const provider_1 = require("./provider");
|
|
41
|
-
const context_extractor_1 = require("./context-extractor");
|
|
42
|
-
const analysisCache = new Map();
|
|
43
|
-
const MAX_CACHE_SIZE = 100;
|
|
44
|
-
function computeContentHash(content, diff) {
|
|
45
|
-
return crypto.createHash("md5").update((content || "") + "\n---\n" + diff).digest("hex");
|
|
46
|
-
}
|
|
47
|
-
function evictOldestCacheEntry() {
|
|
48
|
-
let oldestKey = null;
|
|
49
|
-
let oldestTime = Infinity;
|
|
50
|
-
for (const [key, entry] of analysisCache) {
|
|
51
|
-
if (entry.insertedAt < oldestTime) {
|
|
52
|
-
oldestTime = entry.insertedAt;
|
|
53
|
-
oldestKey = key;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (oldestKey)
|
|
57
|
-
analysisCache.delete(oldestKey);
|
|
58
|
-
}
|
|
59
|
-
// ── Rate limiter: max 10 AI calls per minute (sliding window) ──
|
|
60
|
-
const RATE_LIMIT_MAX = 10;
|
|
61
|
-
const RATE_LIMIT_WINDOW_MS = 60000;
|
|
62
|
-
const callTimestamps = [];
|
|
63
|
-
function isRateLimited() {
|
|
64
|
-
const now = Date.now();
|
|
65
|
-
// Remove timestamps outside the window
|
|
66
|
-
while (callTimestamps.length > 0 && callTimestamps[0] <= now - RATE_LIMIT_WINDOW_MS) {
|
|
67
|
-
callTimestamps.shift();
|
|
68
|
-
}
|
|
69
|
-
return callTimestamps.length >= RATE_LIMIT_MAX;
|
|
70
|
-
}
|
|
71
|
-
function recordCall() {
|
|
72
|
-
callTimestamps.push(Date.now());
|
|
73
|
-
}
|
|
74
|
-
function getSystemPrompt() {
|
|
75
|
-
return `You are a senior full-stack architect and code impact monitoring AI with 20 years of experience.
|
|
76
|
-
Role: Detect potential errors and cascading impacts before build when files are modified/added/deleted.
|
|
77
|
-
|
|
78
|
-
Analysis principles:
|
|
79
|
-
1. Broken imports/exports: Check if deleted/renamed classes/functions/variables are referenced in other files
|
|
80
|
-
2. Type mismatches: Verify parameter types and return type changes match call sites
|
|
81
|
-
3. State management cascade: Impact of Provider/Notifier changes on UI and business logic
|
|
82
|
-
4. Routing impact: Effect of route/parameter changes on navigation
|
|
83
|
-
5. Missing initialization: Whether newly added Providers are properly registered
|
|
84
|
-
|
|
85
|
-
Response format (must be JSON):
|
|
86
|
-
{
|
|
87
|
-
"riskLevel": "CRITICAL|HIGH|MEDIUM|LOW|SAFE",
|
|
88
|
-
"summary": "One-line summary",
|
|
89
|
-
"brokenImports": ["List of potentially broken imports"],
|
|
90
|
-
"sideEffects": ["List of expected side effects"],
|
|
91
|
-
"warnings": ["List of warnings"],
|
|
92
|
-
"suggestion": "Recommended action"
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
CRITICAL: Build failure certain
|
|
96
|
-
HIGH: Runtime error possible
|
|
97
|
-
MEDIUM: Behavior change possible
|
|
98
|
-
LOW: Minor impact
|
|
99
|
-
SAFE: Safe change
|
|
100
|
-
|
|
101
|
-
Respond with JSON only. No explanatory text, just pure JSON.`;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Analyze a file change in real-time using the configured AI provider.
|
|
105
|
-
* Receives the diff + connected files context from memory cache.
|
|
106
|
-
*/
|
|
107
|
-
async function analyzeChangeRealtime(change, graph, getFileContent) {
|
|
108
|
-
const start = Date.now();
|
|
109
|
-
const relPath = change.relativePath;
|
|
110
|
-
const codeBlockLang = graph.languages[0] || "text";
|
|
111
|
-
// Get impacted files from graph
|
|
112
|
-
const absPath = path.normalize(path.join(graph.sourceDir, relPath));
|
|
113
|
-
let affectedNodes = [];
|
|
114
|
-
if (graph.files.has(absPath)) {
|
|
115
|
-
const impact = await (0, analyze_impact_1.analyzeImpact)(absPath, graph);
|
|
116
|
-
affectedNodes = [...impact.directDependents, ...impact.transitiveDependents];
|
|
117
|
-
}
|
|
118
|
-
// Build context: changed file + top 5 connected files' smart context
|
|
119
|
-
const connectedFiles = [];
|
|
120
|
-
const revDeps = graph.reverse.get(absPath) || [];
|
|
121
|
-
const fwdDeps = graph.forward.get(absPath) || [];
|
|
122
|
-
const connected = [...new Set([...revDeps, ...fwdDeps])].slice(0, 5);
|
|
123
|
-
for (const dep of connected) {
|
|
124
|
-
const depRel = path.relative(graph.sourceDir, dep).replace(/\\/g, "/");
|
|
125
|
-
const content = getFileContent(depRel);
|
|
126
|
-
if (content) {
|
|
127
|
-
const smartCtx = (0, context_extractor_1.buildSmartContext)(content, codeBlockLang);
|
|
128
|
-
connectedFiles.push(`### ${depRel}\n\`\`\`${codeBlockLang}\n${smartCtx}\n\`\`\``);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
// Build diff summary with signature changes
|
|
132
|
-
let diffSummary = "";
|
|
133
|
-
if (change.type === "deleted") {
|
|
134
|
-
diffSummary = `File deleted. Previous content:\n\`\`\`${codeBlockLang}\n${(change.oldContent || "").split("\n").slice(0, 40).join("\n")}\n\`\`\``;
|
|
135
|
-
}
|
|
136
|
-
else if (change.type === "added") {
|
|
137
|
-
const smartNew = (0, context_extractor_1.buildSmartContext)(change.newContent || "", codeBlockLang);
|
|
138
|
-
diffSummary = `New file added:\n\`\`\`${codeBlockLang}\n${smartNew}\n\`\`\``;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
// Modified — include signature diff
|
|
142
|
-
const diffLines = change.diff.slice(0, 30).map(d => {
|
|
143
|
-
if (d.type === "added")
|
|
144
|
-
return `+ L${d.line}: ${d.new}`;
|
|
145
|
-
if (d.type === "removed")
|
|
146
|
-
return `- L${d.line}: ${d.old}`;
|
|
147
|
-
return `~ L${d.line}: ${d.old} → ${d.new}`;
|
|
148
|
-
});
|
|
149
|
-
diffSummary = `Changed lines (top 30 of ${change.diff.length}):\n\`\`\`\n${diffLines.join("\n")}\n\`\`\``;
|
|
150
|
-
// Add structural signature changes
|
|
151
|
-
if (change.oldContent && change.newContent) {
|
|
152
|
-
const sigChanges = (0, context_extractor_1.diffSignatures)(change.oldContent, change.newContent, codeBlockLang);
|
|
153
|
-
if (sigChanges.length > 0) {
|
|
154
|
-
diffSummary += "\n\n### Structural changes (signature diff)";
|
|
155
|
-
for (const sc of sigChanges) {
|
|
156
|
-
if (sc.type === "added") {
|
|
157
|
-
diffSummary += `\n+ Added: ${sc.newSignature}`;
|
|
158
|
-
}
|
|
159
|
-
else if (sc.type === "removed") {
|
|
160
|
-
diffSummary += `\n- Removed: ${sc.oldSignature}`;
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
diffSummary += `\n~ Changed: ${sc.oldSignature}\n → ${sc.newSignature}`;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (change.newContent) {
|
|
169
|
-
const smartNew = (0, context_extractor_1.buildSmartContext)(change.newContent, codeBlockLang);
|
|
170
|
-
diffSummary += `\n\nFull file after modification:\n\`\`\`${codeBlockLang}\n${smartNew}\n\`\`\``;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
const userPrompt = `## File change detected: ${relPath}
|
|
174
|
-
Change type: ${change.type.toUpperCase()}
|
|
175
|
-
Project languages: ${graph.languages.join(", ") || "unknown"}
|
|
176
|
-
Affected files: ${affectedNodes.length}
|
|
177
|
-
|
|
178
|
-
${diffSummary}
|
|
179
|
-
|
|
180
|
-
${connectedFiles.length > 0 ? `## Connected files (${connectedFiles.length})\n${connectedFiles.join("\n\n")}` : "No connected files"}
|
|
181
|
-
|
|
182
|
-
Analyze the impact of this change on the project.`;
|
|
183
|
-
// ── Hash cache check: skip AI if content+diff unchanged ──
|
|
184
|
-
const diffStr = change.diff.map(d => `${d.type}:${d.line}:${d.old || ""}:${d.new || ""}`).join("|");
|
|
185
|
-
const contentHash = computeContentHash(change.newContent, diffStr);
|
|
186
|
-
const cached = analysisCache.get(relPath);
|
|
187
|
-
if (cached && cached.hash === contentHash) {
|
|
188
|
-
console.error(`[syke:ai] Cache hit for ${relPath} — skipping AI call`);
|
|
189
|
-
return { ...cached.result, timestamp: change.timestamp, analysisMs: 0 };
|
|
190
|
-
}
|
|
191
|
-
// ── Rate limit check ──
|
|
192
|
-
if (isRateLimited()) {
|
|
193
|
-
const analysisMs = Date.now() - start;
|
|
194
|
-
console.error(`[syke:ai] Rate limit reached (${RATE_LIMIT_MAX}/min) — skipping AI for ${relPath}`);
|
|
195
|
-
return {
|
|
196
|
-
file: relPath,
|
|
197
|
-
changeType: change.type,
|
|
198
|
-
timestamp: change.timestamp,
|
|
199
|
-
riskLevel: affectedNodes.length >= 10 ? "HIGH" : affectedNodes.length >= 5 ? "MEDIUM" : "LOW",
|
|
200
|
-
summary: `Rate limited — graph-based analysis: ${affectedNodes.length} files impacted`,
|
|
201
|
-
brokenImports: [],
|
|
202
|
-
sideEffects: [],
|
|
203
|
-
warnings: ["AI analysis skipped: rate limit (10 calls/min)"],
|
|
204
|
-
suggestion: "Wait a moment for AI analysis to resume",
|
|
205
|
-
affectedNodes,
|
|
206
|
-
analysisMs,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
const provider = (0, provider_1.getAIProvider)();
|
|
211
|
-
if (!provider) {
|
|
212
|
-
throw new Error("No AI provider available (set GEMINI_KEY, OPENAI_KEY, or ANTHROPIC_KEY)");
|
|
213
|
-
}
|
|
214
|
-
recordCall();
|
|
215
|
-
const parsed = await provider.analyzeJSON(getSystemPrompt(), userPrompt);
|
|
216
|
-
const analysisMs = Date.now() - start;
|
|
217
|
-
const result = {
|
|
218
|
-
file: relPath,
|
|
219
|
-
changeType: change.type,
|
|
220
|
-
timestamp: change.timestamp,
|
|
221
|
-
riskLevel: parsed.riskLevel || "LOW",
|
|
222
|
-
summary: parsed.summary || "Analysis complete",
|
|
223
|
-
brokenImports: parsed.brokenImports || [],
|
|
224
|
-
sideEffects: parsed.sideEffects || [],
|
|
225
|
-
warnings: parsed.warnings || [],
|
|
226
|
-
suggestion: parsed.suggestion || "",
|
|
227
|
-
affectedNodes,
|
|
228
|
-
analysisMs,
|
|
229
|
-
};
|
|
230
|
-
// Store in cache
|
|
231
|
-
if (analysisCache.size >= MAX_CACHE_SIZE)
|
|
232
|
-
evictOldestCacheEntry();
|
|
233
|
-
analysisCache.set(relPath, { hash: contentHash, result, insertedAt: Date.now() });
|
|
234
|
-
return result;
|
|
235
|
-
}
|
|
236
|
-
catch (err) {
|
|
237
|
-
const analysisMs = Date.now() - start;
|
|
238
|
-
console.error(`[syke:ai] Analysis error for ${relPath}: ${err.message}`);
|
|
239
|
-
return {
|
|
240
|
-
file: relPath,
|
|
241
|
-
changeType: change.type,
|
|
242
|
-
timestamp: change.timestamp,
|
|
243
|
-
riskLevel: affectedNodes.length >= 10 ? "HIGH" : affectedNodes.length >= 5 ? "MEDIUM" : "LOW",
|
|
244
|
-
summary: `AI analysis failed — graph-based analysis: ${affectedNodes.length} files impacted`,
|
|
245
|
-
brokenImports: [],
|
|
246
|
-
sideEffects: [],
|
|
247
|
-
warnings: [`AI analysis error: ${err.message}`],
|
|
248
|
-
suggestion: "Manual review required",
|
|
249
|
-
affectedNodes,
|
|
250
|
-
analysisMs,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
}
|
|
1
|
+
'use strict';const _0x4ccec1=_0x310c;(function(_0x2853fa,_0x4fa9fa){const _0x2f68ba={_0x3bf68c:0x19e,_0x11d59d:0x15a,_0x5a455f:0x182,_0x589883:0x17e},_0x2abcc9=_0x310c,_0x2d45ea=_0x2853fa();while(!![]){try{const _0x5dde31=parseInt(_0x2abcc9(0x187))/0x1+parseInt(_0x2abcc9(0x1b2))/0x2*(-parseInt(_0x2abcc9(_0x2f68ba._0x3bf68c))/0x3)+parseInt(_0x2abcc9(_0x2f68ba._0x11d59d))/0x4*(parseInt(_0x2abcc9(0x178))/0x5)+parseInt(_0x2abcc9(0x14b))/0x6+parseInt(_0x2abcc9(_0x2f68ba._0x5a455f))/0x7+-parseInt(_0x2abcc9(_0x2f68ba._0x589883))/0x8+-parseInt(_0x2abcc9(0x1a8))/0x9;if(_0x5dde31===_0x4fa9fa)break;else _0x2d45ea['push'](_0x2d45ea['shift']());}catch(_0x53175e){_0x2d45ea['push'](_0x2d45ea['shift']());}}}(_0x315a,0x8e928));var __createBinding=this&&this['__createBinding']||(Object[_0x4ccec1(0x185)]?function(_0x3e9374,_0x5942c4,_0xb16ae0,_0x289e97){const _0x1981f6={_0x901c19:0x19b,_0x242a39:0x16d},_0xcfaf07=_0x4ccec1,_0x1a19e7={};_0x1a19e7[_0xcfaf07(_0x1981f6._0x901c19)]=function(_0x122ce7,_0x95dfd7){return _0x122ce7 in _0x95dfd7;},_0x1a19e7['dAhEp']='get';const _0x13aac1=_0x1a19e7;if(_0x289e97===undefined)_0x289e97=_0xb16ae0;var _0x24e8a5=Object['getOwnPropertyDescriptor'](_0x5942c4,_0xb16ae0);if(!_0x24e8a5||(_0x13aac1['fxThT'](_0x13aac1[_0xcfaf07(_0x1981f6._0x242a39)],_0x24e8a5)?!_0x5942c4['__esModule']:_0x24e8a5['writable']||_0x24e8a5[_0xcfaf07(0x15b)])){const _0x3f882e={};_0x3f882e['enumerable']=!![],_0x3f882e['get']=function(){return _0x5942c4[_0xb16ae0];},_0x24e8a5=_0x3f882e;}Object[_0xcfaf07(0x166)](_0x3e9374,_0x289e97,_0x24e8a5);}:function(_0x390c73,_0x43c4d8,_0x5e877b,_0x1c608b){const _0x9aa1f4=_0x4ccec1,_0x105070={};_0x105070[_0x9aa1f4(0x1af)]=function(_0xd842d4,_0x53d402){return _0xd842d4===_0x53d402;};const _0x4243ac=_0x105070;if(_0x4243ac[_0x9aa1f4(0x1af)](_0x1c608b,undefined))_0x1c608b=_0x5e877b;_0x390c73[_0x1c608b]=_0x43c4d8[_0x5e877b];}),__setModuleDefault=this&&this['__setModuleDefault']||(Object['create']?function(_0x3e3791,_0x223d04){const _0x167eae={_0x128c2:0x186},_0x20784c=_0x4ccec1,_0x161b6f={};_0x161b6f[_0x20784c(_0x167eae._0x128c2)]=!![],_0x161b6f['value']=_0x223d04,Object['defineProperty'](_0x3e3791,'default',_0x161b6f);}:function(_0x554cbf,_0x592279){const _0x212ced={_0xeaf241:0x1a3},_0x37d969=_0x4ccec1;_0x554cbf[_0x37d969(_0x212ced._0xeaf241)]=_0x592279;}),__importStar=this&&this['__importStar']||(function(){const _0x5b009a={_0x1405dd:0x194},_0x2f41dd={_0x1d3e95:0x170},_0x59011e={_0x43fcc7:0x156},_0x6cb637=_0x4ccec1,_0x3f2686={'xETUm':_0x6cb637(_0x5b009a._0x1405dd),'HWFIh':function(_0x35aff5,_0x456aa6,_0x37fe52){return _0x35aff5(_0x456aa6,_0x37fe52);},'OtbMR':function(_0x2e3b76,_0x347bd7){return _0x2e3b76!=_0x347bd7;},'ebMwZ':function(_0x1809f8,_0x3a186c){return _0x1809f8<_0x3a186c;},'eZuIT':function(_0x7c1ae0,_0x826982){return _0x7c1ae0!==_0x826982;},'uXaeM':function(_0x116f55,_0x401227,_0x494792,_0x1d5a47){return _0x116f55(_0x401227,_0x494792,_0x1d5a47);}};var _0x19fcc8=function(_0x2769f3){const _0x2f850b={_0x3e2409:0x151},_0x525e9b=_0x6cb637;return _0x19fcc8=Object[_0x525e9b(_0x59011e._0x43fcc7)]||function(_0x4b1c1a){const _0x50533e=_0x525e9b;var _0x1eca2f=[];for(var _0x39a1d5 in _0x4b1c1a)if(Object[_0x50533e(0x176)][_0x50533e(_0x2f850b._0x3e2409)][_0x50533e(0x19c)](_0x4b1c1a,_0x39a1d5))_0x1eca2f[_0x1eca2f[_0x50533e(0x193)]]=_0x39a1d5;return _0x1eca2f;},_0x19fcc8(_0x2769f3);};return function(_0x49a8d8){const _0x542454=_0x6cb637,_0x148a48=_0x3f2686['xETUm'][_0x542454(0x196)]('|');let _0x1761fc=0x0;while(!![]){switch(_0x148a48[_0x1761fc++]){case'0':if(_0x49a8d8&&_0x49a8d8['__esModule'])return _0x49a8d8;continue;case'1':_0x3f2686['HWFIh'](__setModuleDefault,_0x404afb,_0x49a8d8);continue;case'2':if(_0x3f2686['OtbMR'](_0x49a8d8,null)){for(var _0x1e7954=_0x19fcc8(_0x49a8d8),_0x3ae478=0x0;_0x3f2686[_0x542454(_0x2f41dd._0x1d3e95)](_0x3ae478,_0x1e7954[_0x542454(0x193)]);_0x3ae478++)if(_0x3f2686[_0x542454(0x158)](_0x1e7954[_0x3ae478],_0x542454(0x1a3)))_0x3f2686[_0x542454(0x18d)](__createBinding,_0x404afb,_0x49a8d8,_0x1e7954[_0x3ae478]);}continue;case'3':var _0x404afb={};continue;case'4':return _0x404afb;}break;}};}());const _0x4ccc03={};_0x4ccc03[_0x4ccec1(0x150)]=!![],Object['defineProperty'](exports,'__esModule',_0x4ccc03),exports[_0x4ccec1(0x1a4)]=analyzeChangeRealtime;const analyze_impact_1=require(_0x4ccec1(0x18b)),crypto=__importStar(require('crypto')),path=__importStar(require('path')),provider_1=require(_0x4ccec1(0x1b4)),context_extractor_1=require('./context-extractor'),analysisCache=new Map(),MAX_CACHE_SIZE=0x64;function computeContentHash(_0x4d9372,_0x281d75){const _0x28302a={_0x272084:0x195,_0x40ded3:0x184},_0x3dd157=_0x4ccec1,_0xa70ab2={};_0xa70ab2['ThHUR']='md5',_0xa70ab2['BVXhj']=function(_0x29b548,_0x107f4f){return _0x29b548+_0x107f4f;},_0xa70ab2['UQgcU']=function(_0x13d67d,_0x10b463){return _0x13d67d||_0x10b463;},_0xa70ab2[_0x3dd157(0x152)]='\x0a---\x0a',_0xa70ab2['ieLNq']='hex';const _0x4bab28=_0xa70ab2;return crypto[_0x3dd157(0x17b)](_0x4bab28[_0x3dd157(_0x28302a._0x272084)])[_0x3dd157(0x1b3)](_0x4bab28[_0x3dd157(0x184)](_0x4bab28[_0x3dd157(_0x28302a._0x40ded3)](_0x4bab28['UQgcU'](_0x4d9372,''),_0x4bab28['lgvwY']),_0x281d75))['digest'](_0x4bab28[_0x3dd157(0x1b9)]);}function evictOldestCacheEntry(){const _0x5bbbb4={_0x2a6452:0x153},_0x1d8acb=_0x4ccec1;let _0x3e532b=null,_0x1e54c2=Infinity;for(const [_0x243f0f,_0x65ec04]of analysisCache){_0x65ec04['insertedAt']<_0x1e54c2&&(_0x1e54c2=_0x65ec04['insertedAt'],_0x3e532b=_0x243f0f);}if(_0x3e532b)analysisCache[_0x1d8acb(_0x5bbbb4._0x2a6452)](_0x3e532b);}const RATE_LIMIT_MAX=0xa,RATE_LIMIT_WINDOW_MS=0xea60,callTimestamps=[];function isRateLimited(){const _0x3fb2d6={_0x5d15d7:0x15d,_0x2d8a87:0x1b8,_0x4b82d3:0x193},_0x44a98f=_0x4ccec1,_0x40f5cb={};_0x40f5cb[_0x44a98f(_0x3fb2d6._0x5d15d7)]=function(_0x1d467a,_0x3d62cf){return _0x1d467a<=_0x3d62cf;},_0x40f5cb[_0x44a98f(_0x3fb2d6._0x2d8a87)]=function(_0x590181,_0x560293){return _0x590181-_0x560293;};const _0x301080=_0x40f5cb,_0x500fd6=Date['now']();while(callTimestamps[_0x44a98f(_0x3fb2d6._0x4b82d3)]>0x0&&_0x301080['WlfnF'](callTimestamps[0x0],_0x301080[_0x44a98f(0x1b8)](_0x500fd6,RATE_LIMIT_WINDOW_MS))){callTimestamps[_0x44a98f(0x14c)]();}return callTimestamps[_0x44a98f(0x193)]>=RATE_LIMIT_MAX;}function recordCall(){const _0x1cff3f=_0x4ccec1;callTimestamps['push'](Date[_0x1cff3f(0x1bc)]());}function _0x315a(){const _0x2b4894=['nZeYodaXyMzOqunA','ww91igfYzsbHihnLBMLVCIbMDwXSlxn0ywnRigfYy2HPDgvJDcbHBMqGy29KzsbPBxbHy3qGBw9UAxrVCMLUzYbbssb3AxrOidiWihLLyxjZig9Migv4CgvYAwvUy2uUcLjVBgu6ierLDgvJDcbWB3rLBNrPywWGzxjYB3jZigfUzcbJyxnJywrPBMCGAw1Wywn0CYbIzwzVCMuGyNvPBgqGD2HLBIbMAwXLCYbHCMuGBw9KAwzPzwqVywrKzwqVzgvSzxrLzc4kcKfUywX5C2LZihbYAw5JAxbSzxm6cJeUiejYB2TLBIbPBxbVCNrZl2v4Cg9YDhm6ienOzwnRigLMigrLBgv0zwqVCMvUyw1LzcbJBgfZC2vZl2z1BMn0Aw9UCY92yxjPywjSzxmGyxjLihjLzMvYzw5JzwqGAw4GB3rOzxiGzMLSzxmkmI4GvhLWzsbTAxnTyxrJAgvZoIbwzxjPzNKGCgfYyw1LDgvYihr5CgvZigfUzcbYzxr1CM4GDhLWzsbJAgfUz2vZig1HDgnOignHBgWGC2L0zxmkmY4Gu3rHDguGBwfUywDLBwvUDcbJyxnJywrLoIbjBxbHy3qGB2yGuhjVDMLKzxiVtM90AwzPzxiGy2HHBMDLCYbVBIbvssbHBMqGyNvZAw5LC3mGBg9NAwmknc4GuM91DgLUzYbPBxbHy3q6ievMzMvJDcbVzIbYB3v0zs9WyxjHBwv0zxiGy2HHBMDLCYbVBIbUyxzPz2f0Aw9UcJuUie1PC3nPBMCGAw5PDgLHBgL6yxrPB246ifDOzxrOzxiGBMv3BhKGywrKzwqGuhjVDMLKzxjZigfYzsbWCM9WzxjSEsbYzwDPC3rLCMvKcGPszxnWB25ZzsbMB3jTyxqGkg11C3qGyMuGsLnptIK6cNSkicaICMLZA0XLDMvSiJOGiKnssvrjq0fmFeHjr0H8tuvesvvnFeXpv3XtquzfiIWkicaIC3vTBwfYEsi6icjpBMuTBgLUzsbZDw1Tyxj5iIWkicaIyNjVA2vUsw1WB3j0CYi6ifSItgLZDcbVzIbWB3rLBNrPywXSEsbICM9Rzw4GAw1WB3j0CYjDlaOGicjZAwrLrwzMzwn0CYi6ifSItgLZDcbVzIbLEhbLy3rLzcbZAwrLigvMzMvJDhmIxsWkicaID2fYBMLUz3mIoIbBiKXPC3qGB2yGD2fYBMLUz3mIxsWkicaIC3vNz2vZDgLVBIi6icjszwnVBw1LBMrLzcbHy3rPB24IcN0kcKnssvrjq0fmoIbcDwLSzcbMywLSDxjLignLCNrHAw4kseLhsdOGuNvUDgLTzsbLCNjVCIbWB3nZAwjSzqPnrurjvu06iejLAgf2Aw9YignOyw5NzsbWB3nZAwjSzqPmt1C6ie1PBM9YigLTCgfJDaPtquzfoIbtywzLignOyw5NzqOkuMvZCg9Uzcb3AxrOiePtt04GB25SEs4GtM8GzxHWBgfUyxrVCNKGDgv4DcWGANvZDcbWDxjLiePtt04U','z2v0','cLbYB2PLy3qGBgfUz3vHz2vZoIa','lI4VDg9VBhmVyw5HBhL6zs1PBxbHy3q','vu53ywC','DvHHzu0','tM8Gy29UBMvJDgvKigzPBgvZ','A3b0qKu','BwvZC2fNzq','iYmGq29UBMvJDgvKigzPBgvZicG','C2L6zq','BgvUz3rO','mhWZFdj8mxW0','vgHivvi','C3bSAxq','FIbm','w3n5A2u6ywLDifjHDguGBgLTAxqGCMvHy2HLzcaO','BgLUzq','CLfxDK0','zNHuAfq','y2fSBa','u2jpANi','mZzyA2nQCKy','cIaG4OAsicaGicaGia','qw5HBhLZAxmGy29TCgXLDgu','cMbGya','DhLWzq','zgvMyxvSDa','yw5HBhL6zunOyw5NzvjLywX0Aw1L','cKnOyw5Nzsb0ExbLoIa','BMv3','B2XKu2LNBMf0DxjL','mJy5nJy5n2LTBgPlwq','CMv2zxjZzq','tuvesvvn','CMvSyxrPDMvqyxrO','w3n5A2u6ywLDiefUywX5C2LZigvYCM9YigzVCIa','yNjVA2vUsw1WB3j0CW','yw5HBhL6zuLTCgfJDa','sxPVq3u','BMv3q29UDgvUDa','CMvWBgfJzq','mtiZnJCWEfHvD0Xy','DxbKyxrL','lI9WCM92AwrLCG','ktOkygbGcG','rMLSzsbKzwXLDgvKlIbqCMv2Aw91CYbJB250zw50oGPGyga','yNnlzfu','BKT5Egi','AwvmtNe','cGPbBMfSExPLihrOzsbPBxbHy3qGB2yGDgHPCYbJAgfUz2uGB24GDgHLihbYB2PLy3qU','cKfMzMvJDgvKigzPBgvZoIa','BM93','igzPBgvZigLTCgfJDgvK','BwfW','ntK4odC2ohHtDgPmAW','C2HPzNq','B2XKq29UDgvUDa','CMLZA0XLDMvS','twfUDwfSihjLDMLLDYbYzxf1AxjLza','DMfSDwu','AgfZt3DUuhjVCgvYDhK','BgD2D1K','zgvSzxrL','kYbm','zMLSzq','z2v0t3DUuhjVCgvYDhLoyw1LCW','zgLMzG','zvP1svq','BM9YBwfSAxPL','otq2mtK2zNbetfjZ','y29UzMLNDxjHyMXL','iokaLcbZA2LWCgLUzYbbssbJywXS','v2XMBKy','v2fPDcbHig1VBwvUDcbMB3iGquKGyw5HBhLZAxmGDg8GCMvZDw1L','C291CMnLrgLY','D2fYBMLUz3m','C2XPy2u','AM9PBG','quKGyw5HBhLZAxmGzxjYB3i6ia','zgLMzLnPz25HDhvYzxm','tMv3igzPBguGywrKzwq6cMbGya','zgvMAw5LuhjVCgvYDhK','cI0GuMvTB3zLzdOG','BgfUz3vHz2vZ','wuXTuKG','rfjlzLm','cGOJiYmGu3rYDwn0DxjHBcbJAgfUz2vZicHZAwDUyxr1CMuGzgLMzIK','yNvPBgrtBwfYDenVBNrLEhq','zefOrxa','BMv3u2LNBMf0DxjL','iokgKIa','zwjnD1O','l21PBIKG4OcuihnRAxbWAw5NiefjigzVCIa','C3Djve0','w3n5A2u6ywLDienHy2HLigHPDcbMB3iG','cISGqwrKzwq6ia','zgLYzwn0rgvWzw5Kzw50CW','ChjVDg90ExbL','q2HHBMDLzcbSAw5LCYaODg9WidmWig9Mia','nxD1CK9jyq','CMvZDwX0','quKGyw5HBhLZAxmGzMfPBgvKiokaLcbNCMfWAc1IyxnLzcbHBMfSExnPCZOG','y3jLyxrLsgfZAa','uMf0zsbSAw1PDgvKiokaLcbNCMfWAc1IyxnLzcbHBMfSExnPCZOG','iYmJia','nJeWmJa2neriCg5NAW','y2HHBMDLvhLWzq','te9x','z2v0quLqCM92AwrLCG','mZa4nJm2m2rZs2n2sa','iYmGrMLSzsbJAgfUz2uGzgv0zwn0zwq6ia','qLzyAgO','y3jLyxrL','zw51BwvYywjSzq'];_0x315a=function(){return _0x2b4894;};return _0x315a();}function _0x310c(_0x31a3d2,_0x384bbe){_0x31a3d2=_0x31a3d2-0x149;const _0x315aab=_0x315a();let _0x310c05=_0x315aab[_0x31a3d2];if(_0x310c['BlnuQZ']===undefined){var _0x24f8f5=function(_0x45c023){const _0x2955d6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x51b8fb='',_0x42c11d='';for(let _0x44dcfa=0x0,_0x24b930,_0x20b58d,_0x21e8f7=0x0;_0x20b58d=_0x45c023['charAt'](_0x21e8f7++);~_0x20b58d&&(_0x24b930=_0x44dcfa%0x4?_0x24b930*0x40+_0x20b58d:_0x20b58d,_0x44dcfa++%0x4)?_0x51b8fb+=String['fromCharCode'](0xff&_0x24b930>>(-0x2*_0x44dcfa&0x6)):0x0){_0x20b58d=_0x2955d6['indexOf'](_0x20b58d);}for(let _0x54e673=0x0,_0x1a7d90=_0x51b8fb['length'];_0x54e673<_0x1a7d90;_0x54e673++){_0x42c11d+='%'+('00'+_0x51b8fb['charCodeAt'](_0x54e673)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x42c11d);};_0x310c['RbDOSb']=_0x24f8f5,_0x310c['trSmrb']={},_0x310c['BlnuQZ']=!![];}const _0x42f91f=_0x315aab[0x0],_0x30d9b2=_0x31a3d2+_0x42f91f,_0x1ee9ef=_0x310c['trSmrb'][_0x30d9b2];return!_0x1ee9ef?(_0x310c05=_0x310c['RbDOSb'](_0x310c05),_0x310c['trSmrb'][_0x30d9b2]=_0x310c05):_0x310c05=_0x1ee9ef,_0x310c05;}function getSystemPrompt(){const _0x292b69={_0x1bdc53:0x188},_0x4725ab=_0x4ccec1;return _0x4725ab(_0x292b69._0x1bdc53);}async function analyzeChangeRealtime(_0x46c033,_0x3ab22c,_0x4c432e){const _0x207440={_0x2ddb34:0x180,_0x487984:0x14f,_0x9b3c8c:0x1ab,_0x533fbd:0x159,_0x41936e:0x1ae,_0xf8ff12:0x175,_0x827f62:0x161,_0x3ee8f2:0x15f,_0x27adee:0x1b1,_0x3f5660:0x16c,_0x312a73:0x17d,_0x35dd7f:0x162,_0x39d29c:0x165,_0x4dd32b:0x1a1,_0x33deb4:0x161,_0x21754d:0x177,_0x5325cb:0x157,_0x44f481:0x1b5,_0x35050f:0x14d,_0x19a6af:0x16b,_0x2254cb:0x19d,_0x551135:0x1b7,_0x53c812:0x174,_0x89ce99:0x16e,_0x384535:0x167,_0x526724:0x1a7,_0x17e757:0x16c,_0xcbe7bf:0x18a,_0x10a09a:0x1bb,_0x3afe6f:0x169,_0x353bf2:0x173,_0x193ec2:0x198,_0x3f3e01:0x171,_0x13d10f:0x18c,_0x16f5b4:0x18c,_0x3605df:0x1bc,_0x2a7d62:0x14e,_0x5895a3:0x192,_0xfb62c5:0x1ac,_0x28f1a4:0x17a,_0x83fc52:0x190,_0x3c03f0:0x16a},_0x152b23=_0x4ccec1,_0x1e5eb0={'bsKdU':'added','YDyCD':function(_0x2f0ad0,_0x86ae04){return _0x2f0ad0===_0x86ae04;},'swITM':'removed','WlxRq':'text','RZIrP':function(_0xc8ecb1,_0x27b87a){return _0xc8ecb1(_0x27b87a);},'swbmw':'deleted','kptBE':function(_0x45187e,_0x48915d){return _0x45187e===_0x48915d;},'hXkYC':function(_0x1ce55e,_0x63e8cc){return _0x1ce55e>_0x63e8cc;},'SbOjr':function(_0x3af8c6,_0x23165e){return _0x3af8c6===_0x23165e;},'qGbhi':function(_0x383ce8,_0x2d5b56){return _0x383ce8===_0x2d5b56;},'nJTDa':function(_0x706b82,_0x49d8c4){return _0x706b82>_0x49d8c4;},'YLmRH':_0x152b23(0x18e),'Imrqw':function(_0x23aa29){return _0x23aa29();},'yBtJe':function(_0x3390c6,_0x12b712){return _0x3390c6-_0x12b712;},'UNwag':function(_0x571510,_0x488372){return _0x571510>=_0x488372;},'lqazO':'HIGH','IwjsG':_0x152b23(_0x207440._0x2ddb34),'rQWvM':function(_0x53c881,_0x19b2e8){return _0x53c881-_0x19b2e8;},'Przja':function(_0x1d2150,_0x2c935e){return _0x1d2150>=_0x2c935e;},'nNWwi':_0x152b23(0x1aa),'DRKfS':_0x152b23(_0x207440._0x487984)},_0x3e7742=Date['now'](),_0x96a420=_0x46c033[_0x152b23(_0x207440._0x9b3c8c)],_0x490b2d=_0x3ab22c[_0x152b23(0x168)][0x0]||_0x1e5eb0['WlxRq'],_0x1562e4=path[_0x152b23(_0x207440._0x533fbd)](path['join'](_0x3ab22c[_0x152b23(0x15f)],_0x96a420));let _0x459384=[];if(_0x3ab22c['files']['has'](_0x1562e4)){const _0x295376=await(0x0,analyze_impact_1[_0x152b23(_0x207440._0x41936e)])(_0x1562e4,_0x3ab22c);_0x459384=[..._0x295376[_0x152b23(_0x207440._0xf8ff12)],..._0x295376['transitiveDependents']];}const _0x25dc39=[],_0x308a1b=_0x3ab22c[_0x152b23(0x1a9)][_0x152b23(0x189)](_0x1562e4)||[],_0x51f949=_0x3ab22c['forward']['get'](_0x1562e4)||[],_0x2f0762=[...new Set([..._0x308a1b,..._0x51f949])][_0x152b23(_0x207440._0x827f62)](0x0,0x5);for(const _0x1d07fd of _0x2f0762){const _0x10f406=path['relative'](_0x3ab22c[_0x152b23(_0x207440._0x3ee8f2)],_0x1d07fd)[_0x152b23(_0x207440._0x27adee)](/\\/g,'/'),_0x592850=_0x1e5eb0['RZIrP'](_0x4c432e,_0x10f406);if(_0x592850){const _0x3cf7b0=(0x0,context_extractor_1[_0x152b23(_0x207440._0x3f5660)])(_0x592850,_0x490b2d);_0x25dc39['push'](_0x152b23(_0x207440._0x312a73)+_0x10f406+'\x0a```'+_0x490b2d+'\x0a'+_0x3cf7b0+'\x0a```');}}let _0x5a2332='';if(_0x46c033['type']===_0x1e5eb0['swbmw'])_0x5a2332=_0x152b23(0x1b6)+_0x490b2d+'\x0a'+(_0x46c033['oldContent']||'')['split']('\x0a')[_0x152b23(0x161)](0x0,0x28)[_0x152b23(_0x207440._0x35dd7f)]('\x0a')+'\x0a```';else{if(_0x1e5eb0[_0x152b23(0x18f)](_0x46c033['type'],'added')){const _0x2145e5=(0x0,context_extractor_1['buildSmartContext'])(_0x46c033['newContent']||'',_0x490b2d);_0x5a2332=_0x152b23(_0x207440._0x39d29c)+_0x490b2d+'\x0a'+_0x2145e5+_0x152b23(_0x207440._0x4dd32b);}else{const _0x24c596=_0x46c033['diff'][_0x152b23(_0x207440._0x33deb4)](0x0,0x1e)[_0x152b23(0x14a)](_0x20f2c1=>{const _0x380d28=_0x152b23;if(_0x20f2c1['type']===_0x1e5eb0[_0x380d28(0x1b7)])return _0x380d28(0x154)+_0x20f2c1['line']+':\x20'+_0x20f2c1['new'];if(_0x1e5eb0['YDyCD'](_0x20f2c1['type'],_0x1e5eb0[_0x380d28(0x172)]))return'-\x20L'+_0x20f2c1['line']+':\x20'+_0x20f2c1['old'];return _0x380d28(0x197)+_0x20f2c1[_0x380d28(0x199)]+':\x20'+_0x20f2c1['old']+_0x380d28(0x16f)+_0x20f2c1[_0x380d28(0x1a6)];});_0x5a2332=_0x152b23(_0x207440._0x21754d)+_0x46c033[_0x152b23(_0x207440._0x5325cb)]['length']+_0x152b23(_0x207440._0x44f481)+_0x24c596[_0x152b23(_0x207440._0x35dd7f)]('\x0a')+_0x152b23(0x1a1);if(_0x46c033[_0x152b23(_0x207440._0x35050f)]&&_0x46c033['newContent']){const _0x33fe5f=(0x0,context_extractor_1[_0x152b23(0x164)])(_0x46c033[_0x152b23(_0x207440._0x35050f)],_0x46c033['newContent'],_0x490b2d);if(_0x1e5eb0['hXkYC'](_0x33fe5f[_0x152b23(0x193)],0x0)){_0x5a2332+=_0x152b23(_0x207440._0x19a6af);for(const _0x342d7d of _0x33fe5f){if(_0x1e5eb0[_0x152b23(_0x207440._0x2254cb)](_0x342d7d[_0x152b23(0x1a2)],_0x1e5eb0[_0x152b23(_0x207440._0x551135)]))_0x5a2332+=_0x152b23(_0x207440._0x53c812)+_0x342d7d[_0x152b23(_0x207440._0x89ce99)];else _0x1e5eb0['qGbhi'](_0x342d7d['type'],_0x1e5eb0[_0x152b23(0x172)])?_0x5a2332+=_0x152b23(_0x207440._0x384535)+_0x342d7d['oldSignature']:_0x5a2332+='\x0a~\x20Changed:\x20'+_0x342d7d[_0x152b23(_0x207440._0x526724)]+_0x152b23(0x19f)+_0x342d7d[_0x152b23(0x16e)];}}}if(_0x46c033[_0x152b23(0x1b0)]){const _0x5dea3f=(0x0,context_extractor_1[_0x152b23(_0x207440._0x17e757)])(_0x46c033[_0x152b23(0x1b0)],_0x490b2d);_0x5a2332+='\x0a\x0aFull\x20file\x20after\x20modification:\x0a```'+_0x490b2d+'\x0a'+_0x5dea3f+'\x0a```';}}}const _0x5291ab=_0x152b23(0x183)+_0x96a420+_0x152b23(0x1a5)+_0x46c033['type']['toUpperCase']()+_0x152b23(_0x207440._0xcbe7bf)+(_0x3ab22c['languages'][_0x152b23(_0x207440._0x35dd7f)](',\x20')||'unknown')+_0x152b23(_0x207440._0x10a09a)+_0x459384['length']+'\x0a\x0a'+_0x5a2332+'\x0a\x0a'+(_0x1e5eb0['nJTDa'](_0x25dc39['length'],0x0)?_0x152b23(0x191)+_0x25dc39['length']+')\x0a'+_0x25dc39[_0x152b23(0x162)]('\x0a\x0a'):_0x1e5eb0[_0x152b23(_0x207440._0x3afe6f)])+_0x152b23(0x1ba),_0x2d578a=_0x46c033[_0x152b23(0x157)]['map'](_0x434aef=>_0x434aef[_0x152b23(0x1a2)]+':'+_0x434aef['line']+':'+(_0x434aef['old']||'')+':'+(_0x434aef['new']||''))['join']('|'),_0x3c2ccb=computeContentHash(_0x46c033['newContent'],_0x2d578a),_0x1e5e84=analysisCache['get'](_0x96a420);if(_0x1e5e84&&_0x1e5eb0['SbOjr'](_0x1e5e84['hash'],_0x3c2ccb)){console['error'](_0x152b23(_0x207440._0x353bf2)+_0x96a420+_0x152b23(0x15c));const _0x576614={..._0x1e5e84[_0x152b23(0x179)]};return _0x576614['timestamp']=_0x46c033['timestamp'],_0x576614['analysisMs']=0x0,_0x576614;}if(_0x1e5eb0['Imrqw'](isRateLimited)){const _0xfa3bbf=_0x1e5eb0['yBtJe'](Date[_0x152b23(0x1bc)](),_0x3e7742);return console['error'](_0x152b23(_0x207440._0x193ec2)+RATE_LIMIT_MAX+_0x152b23(_0x207440._0x3f3e01)+_0x96a420),{'file':_0x96a420,'changeType':_0x46c033[_0x152b23(0x1a2)],'timestamp':_0x46c033['timestamp'],'riskLevel':_0x1e5eb0[_0x152b23(_0x207440._0x13d10f)](_0x459384[_0x152b23(0x193)],0xa)?_0x1e5eb0['lqazO']:_0x1e5eb0[_0x152b23(_0x207440._0x16f5b4)](_0x459384['length'],0x5)?'MEDIUM':_0x1e5eb0['IwjsG'],'summary':_0x152b23(0x17c)+_0x459384[_0x152b23(0x193)]+_0x152b23(0x149),'brokenImports':[],'sideEffects':[],'warnings':['AI\x20analysis\x20skipped:\x20rate\x20limit\x20(10\x20calls/min)'],'suggestion':_0x152b23(0x15e),'affectedNodes':_0x459384,'analysisMs':_0xfa3bbf};}try{const _0xa9a7d5=(0x0,provider_1[_0x152b23(0x181)])();if(!_0xa9a7d5)throw new Error('No\x20AI\x20provider\x20available\x20(set\x20GEMINI_KEY,\x20OPENAI_KEY,\x20or\x20ANTHROPIC_KEY)');recordCall();const _0x4a1530=await _0xa9a7d5['analyzeJSON'](getSystemPrompt(),_0x5291ab),_0x64be6e=Date[_0x152b23(_0x207440._0x3605df)]()-_0x3e7742,_0xc17c62={};_0xc17c62[_0x152b23(0x155)]=_0x96a420,_0xc17c62[_0x152b23(0x17f)]=_0x46c033[_0x152b23(0x1a2)],_0xc17c62['timestamp']=_0x46c033['timestamp'],_0xc17c62[_0x152b23(_0x207440._0x2a7d62)]=_0x4a1530['riskLevel']||_0x152b23(0x180),_0xc17c62['summary']=_0x4a1530['summary']||_0x152b23(0x1a0),_0xc17c62[_0x152b23(0x1ad)]=_0x4a1530['brokenImports']||[],_0xc17c62['sideEffects']=_0x4a1530['sideEffects']||[],_0xc17c62[_0x152b23(0x160)]=_0x4a1530[_0x152b23(0x160)]||[],_0xc17c62['suggestion']=_0x4a1530['suggestion']||'',_0xc17c62['affectedNodes']=_0x459384,_0xc17c62['analysisMs']=_0x64be6e;const _0x51c146=_0xc17c62;if(analysisCache[_0x152b23(_0x207440._0x5895a3)]>=MAX_CACHE_SIZE)evictOldestCacheEntry();return analysisCache['set'](_0x96a420,{'hash':_0x3c2ccb,'result':_0x51c146,'insertedAt':Date['now']()}),_0x51c146;}catch(_0x4b3deb){const _0x19b965=_0x1e5eb0[_0x152b23(0x19a)](Date[_0x152b23(0x1bc)](),_0x3e7742);return console['error'](_0x152b23(_0x207440._0xfb62c5)+_0x96a420+':\x20'+_0x4b3deb['message']),{'file':_0x96a420,'changeType':_0x46c033['type'],'timestamp':_0x46c033['timestamp'],'riskLevel':_0x1e5eb0['Przja'](_0x459384['length'],0xa)?_0x1e5eb0['lqazO']:_0x459384['length']>=0x5?_0x1e5eb0['nNWwi']:_0x152b23(0x180),'summary':_0x152b23(_0x207440._0x28f1a4)+_0x459384[_0x152b23(0x193)]+_0x152b23(0x149),'brokenImports':[],'sideEffects':[],'warnings':[_0x152b23(0x163)+_0x4b3deb[_0x152b23(_0x207440._0x83fc52)]],'suggestion':_0x1e5eb0[_0x152b23(_0x207440._0x3c03f0)],'affectedNodes':_0x459384,'analysisMs':_0x19b965};}}
|
package/dist/config.js
CHANGED
|
@@ -1,121 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.CONFIG_FILE_PATH = exports.CONFIG_DIR_PATH = void 0;
|
|
37
|
-
exports.getConfig = getConfig;
|
|
38
|
-
exports.getAllConfig = getAllConfig;
|
|
39
|
-
exports.setConfig = setConfig;
|
|
40
|
-
/**
|
|
41
|
-
* Central config reader for SYKE MCP Server.
|
|
42
|
-
*
|
|
43
|
-
* Priority: environment variables > ~/.syke/config.json
|
|
44
|
-
*
|
|
45
|
-
* IDE users (Cursor, Windsurf, etc.) set env vars in their MCP config.
|
|
46
|
-
* Terminal users (Claude Code CLI) edit ~/.syke/config.json directly.
|
|
47
|
-
*/
|
|
48
|
-
const fs = __importStar(require("fs"));
|
|
49
|
-
const path = __importStar(require("path"));
|
|
50
|
-
const os = __importStar(require("os"));
|
|
51
|
-
const CONFIG_DIR = path.join(os.homedir(), ".syke");
|
|
52
|
-
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
53
|
-
let cached = null;
|
|
54
|
-
/**
|
|
55
|
-
* Read ~/.syke/config.json (cached after first read)
|
|
56
|
-
*/
|
|
57
|
-
function readConfigFile() {
|
|
58
|
-
if (cached)
|
|
59
|
-
return cached;
|
|
60
|
-
try {
|
|
61
|
-
if (fs.existsSync(CONFIG_FILE)) {
|
|
62
|
-
cached = JSON.parse(fs.readFileSync(CONFIG_FILE, "utf-8"));
|
|
63
|
-
return cached;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// ignore parse errors
|
|
68
|
-
}
|
|
69
|
-
cached = {};
|
|
70
|
-
return cached;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get a config value. Env var takes priority over config file.
|
|
74
|
-
*/
|
|
75
|
-
function getConfig(key, envVar) {
|
|
76
|
-
// 1. Environment variable
|
|
77
|
-
if (envVar && process.env[envVar]) {
|
|
78
|
-
return process.env[envVar];
|
|
79
|
-
}
|
|
80
|
-
// 2. Config file
|
|
81
|
-
const file = readConfigFile();
|
|
82
|
-
const val = file[key];
|
|
83
|
-
return val !== undefined && val !== null ? String(val) : undefined;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get all resolved config (for logging/debug)
|
|
87
|
-
*/
|
|
88
|
-
function getAllConfig() {
|
|
89
|
-
return {
|
|
90
|
-
licenseKey: getConfig("licenseKey", "SYKE_LICENSE_KEY"),
|
|
91
|
-
geminiKey: getConfig("geminiKey", "GEMINI_KEY"),
|
|
92
|
-
openaiKey: getConfig("openaiKey", "OPENAI_KEY"),
|
|
93
|
-
anthropicKey: getConfig("anthropicKey", "ANTHROPIC_KEY"),
|
|
94
|
-
aiProvider: getConfig("aiProvider", "SYKE_AI_PROVIDER"),
|
|
95
|
-
port: getConfig("port", "SYKE_WEB_PORT"),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Set a config value in ~/.syke/config.json
|
|
100
|
-
*/
|
|
101
|
-
function setConfig(key, value) {
|
|
102
|
-
const file = readConfigFile();
|
|
103
|
-
if (value === null) {
|
|
104
|
-
delete file[key];
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
file[key] = value;
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
if (!fs.existsSync(CONFIG_DIR)) {
|
|
111
|
-
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(file, null, 2));
|
|
114
|
-
cached = file;
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// ignore write errors
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.CONFIG_DIR_PATH = CONFIG_DIR;
|
|
121
|
-
exports.CONFIG_FILE_PATH = CONFIG_FILE;
|
|
1
|
+
'use strict';var _0xfc4070=_0x2752;function _0x1ffe(){var _0x59c961=['y2fSBa','ndbVs0rxqvK','rMnWug0','u1Llrv9xrujFue9sva','z2v0t3DUuhjVCgvYDhLoyw1LCW','mJy4mJe2uMfUy25w','z2v0','CKjYDee','BgLJzw5ZzuTLEq','z2v0qwXSq29UzMLN','x19LC01VzhvSzq','whnStha','BuvxtuO','AxPYzNi','zxHPC3rZu3LUyW','ndKYotC0ovzqv0DSDa','nta5nZmZwufcvLLq','mtiWALzUDeXi','zgvMAw5LuhjVCgvYDhK','mtbSsxHlEhu','BwTKAxjtEw5J','vfP5rvu','zNHhENu','AgfZt3DUuhjVCgvYDhK','y29UzMLNDxjHyMXL','CKjfq20','BgLvugW','zgvMyxvSDa','lNn5A2u','y05JsuK','q09orKLhx0zjtevFuefusa','ywLqCM92AwrLCG','z2v0q29UzMLN','C2v0q29UzMLN','oezlq0r1yG','A2TTyNK','AM9PBG','Cg9YDa','mZq4rK5ysNnU','zw52','y3jLyxrL','mZq1owjfu1nZyG','D3jPDgfIBgu','mtiYotDrEKfSrhG','mti3nZu4r0ndCu9U','mJq3ntu0m3DxrxnsDW','mtCXmKT2y3rAqW','q09orKLhx0rjuL9qqvri','Cgf0Aa','r010B0S','x19JCMvHDgvcAw5KAw5N','CgfYC2u'];_0x1ffe=function(){return _0x59c961;};return _0x1ffe();}(function(_0x53cb0b,_0x1f5931){var _0x5c6df9={_0x41dc21:0x181,_0x57faa8:0x165,_0x3ad50d:0x16a,_0x4de853:0x180,_0x20f683:0x183},_0x1bbc2d=_0x2752,_0x5358b9=_0x53cb0b();while(!![]){try{var _0x205d75=parseInt(_0x1bbc2d(0x167))/0x1*(-parseInt(_0x1bbc2d(_0x5c6df9._0x41dc21))/0x2)+-parseInt(_0x1bbc2d(_0x5c6df9._0x57faa8))/0x3*(parseInt(_0x1bbc2d(_0x5c6df9._0x3ad50d))/0x4)+parseInt(_0x1bbc2d(0x171))/0x5*(parseInt(_0x1bbc2d(0x168))/0x6)+-parseInt(_0x1bbc2d(0x169))/0x7*(-parseInt(_0x1bbc2d(0x15e))/0x8)+parseInt(_0x1bbc2d(_0x5c6df9._0x4de853))/0x9+-parseInt(_0x1bbc2d(_0x5c6df9._0x20f683))/0xa*(-parseInt(_0x1bbc2d(0x17f))/0xb)+-parseInt(_0x1bbc2d(0x162))/0xc*(-parseInt(_0x1bbc2d(0x175))/0xd);if(_0x205d75===_0x1f5931)break;else _0x5358b9['push'](_0x5358b9['shift']());}catch(_0x141a8e){_0x5358b9['push'](_0x5358b9['shift']());}}}(_0x1ffe,0x60a25));var __createBinding=this&&this[_0xfc4070(0x16e)]||(Object['create']?function(_0x1b304a,_0x432975,_0x1bb392,_0x275649){var _0x25108b={_0x1397dd:0x177,_0x44396c:0x166,_0xd78655:0x182},_0x271fb0=_0xfc4070,_0x1e88f2={};_0x1e88f2['fgevH']=function(_0x9cb482,_0x3a3adf){return _0x9cb482 in _0x3a3adf;},_0x1e88f2['rBrtA']=_0x271fb0(0x176);var _0x2c4f25=_0x1e88f2;if(_0x275649===undefined)_0x275649=_0x1bb392;var _0xf5f1b1=Object['getOwnPropertyDescriptor'](_0x432975,_0x1bb392);if(!_0xf5f1b1||(_0x2c4f25['fgevH'](_0x2c4f25[_0x271fb0(_0x25108b._0x1397dd)],_0xf5f1b1)?!_0x432975[_0x271fb0(0x17a)]:_0xf5f1b1[_0x271fb0(_0x25108b._0x44396c)]||_0xf5f1b1[_0x271fb0(0x188)])){var _0x3b083a={};_0x3b083a['enumerable']=!![],_0x3b083a['get']=function(){return _0x432975[_0x1bb392];},_0xf5f1b1=_0x3b083a;}Object[_0x271fb0(_0x25108b._0xd78655)](_0x1b304a,_0x275649,_0xf5f1b1);}:function(_0x3eca22,_0x54552a,_0x6bc3bc,_0x1cdc13){if(_0x1cdc13===undefined)_0x1cdc13=_0x6bc3bc;_0x3eca22[_0x1cdc13]=_0x54552a[_0x6bc3bc];}),__setModuleDefault=this&&this['__setModuleDefault']||(Object[_0xfc4070(0x164)]?function(_0x45d682,_0x289f6d){var _0x3c85ea={_0x119a8a:0x17c},_0x43ef5e=_0xfc4070,_0x2925ac={};_0x2925ac[_0x43ef5e(_0x3c85ea._0x119a8a)]=_0x43ef5e(0x18b);var _0x687c79=_0x2925ac,_0x5321a3={};_0x5321a3['enumerable']=!![],_0x5321a3['value']=_0x289f6d,Object['defineProperty'](_0x45d682,_0x687c79[_0x43ef5e(0x17c)],_0x5321a3);}:function(_0x1b443d,_0x58d61e){var _0x50c49d=_0xfc4070,_0x3cce3d={};_0x3cce3d[_0x50c49d(0x189)]='default';var _0x594867=_0x3cce3d;_0x1b443d[_0x594867['rBECm']]=_0x58d61e;}),__importStar=this&&this['__importStar']||(function(){var _0x35eb77={_0x4d65ee:0x17b,_0x1000b5:0x185,_0x148fa0:0x18b,_0x401231:0x159},_0x32a734={_0x218b4b:0x186},_0x2aa896={'fxGzu':function(_0x1ec24c,_0x11a07d){return _0x1ec24c(_0x11a07d);},'XslLp':'0|2|3|4|1','GMtoK':function(_0x2654c3,_0x533001){return _0x2654c3<_0x533001;},'TZyEU':function(_0xe7dd04,_0x4f71d8){return _0xe7dd04!==_0x4f71d8;},'cNcII':function(_0x7fb03e,_0x1cc607,_0x44b705,_0x3da825){return _0x7fb03e(_0x1cc607,_0x44b705,_0x3da825);}},_0xbb3286=function(_0x23b288){var _0x1c24eb={_0x3481e7:0x170},_0x1a6583=_0x2752;return _0xbb3286=Object[_0x1a6583(0x174)]||function(_0x1ad62a){var _0x159cc3=_0x1a6583,_0x120471=[];for(var _0x55ce21 in _0x1ad62a)if(Object['prototype'][_0x159cc3(0x187)][_0x159cc3(_0x1c24eb._0x3481e7)](_0x1ad62a,_0x55ce21))_0x120471[_0x120471['length']]=_0x55ce21;return _0x120471;},_0x2aa896[_0x1a6583(_0x32a734._0x218b4b)](_0xbb3286,_0x23b288);};return function(_0x4557d9){var _0x135c7a=_0x2752,_0xd82788=_0x2aa896[_0x135c7a(_0x35eb77._0x4d65ee)]['split']('|'),_0x2df928=0x0;while(!![]){switch(_0xd82788[_0x2df928++]){case'0':if(_0x4557d9&&_0x4557d9[_0x135c7a(0x17a)])return _0x4557d9;continue;case'1':return _0x540de9;case'2':var _0x540de9={};continue;case'3':if(_0x4557d9!=null){for(var _0x2fa9eb=_0xbb3286(_0x4557d9),_0xfbb44=0x0;_0x2aa896[_0x135c7a(0x16d)](_0xfbb44,_0x2fa9eb['length']);_0xfbb44++)if(_0x2aa896[_0x135c7a(_0x35eb77._0x1000b5)](_0x2fa9eb[_0xfbb44],_0x135c7a(_0x35eb77._0x148fa0)))_0x2aa896[_0x135c7a(_0x35eb77._0x401231)](__createBinding,_0x540de9,_0x4557d9,_0x2fa9eb[_0xfbb44]);}continue;case'4':__setModuleDefault(_0x540de9,_0x4557d9);continue;}break;}};}()),_0x3e195d={};_0x3e195d['value']=!![],Object[_0xfc4070(0x182)](exports,'__esModule',_0x3e195d),exports[_0xfc4070(0x15a)]=exports['CONFIG_DIR_PATH']=void 0x0,exports[_0xfc4070(0x15c)]=getConfig,exports[_0xfc4070(0x179)]=getAllConfig,exports[_0xfc4070(0x15d)]=setConfig;const fs=__importStar(require('fs')),path=__importStar(require(_0xfc4070(0x16c))),os=__importStar(require('os')),CONFIG_DIR=path['join'](os['homedir'](),_0xfc4070(0x158)),CONFIG_FILE=path[_0xfc4070(0x160)](CONFIG_DIR,'config.json');let cached=null;function readConfigFile(){var _0x4d53c3={_0x51a3a3:0x17e,_0x24ee38:0x16f},_0x5bafe5=_0xfc4070,_0x4094c8={};_0x4094c8[_0x5bafe5(0x18a)]='utf-8';var _0x32ccd7=_0x4094c8;if(cached)return cached;try{if(fs[_0x5bafe5(_0x4d53c3._0x51a3a3)](CONFIG_FILE))return cached=JSON[_0x5bafe5(_0x4d53c3._0x24ee38)](fs['readFileSync'](CONFIG_FILE,_0x32ccd7['liUPl'])),cached;}catch{}return cached={},cached;}function getConfig(_0x54f77e,_0x45b016){var _0x27b2bb=_0xfc4070,_0x41eb6e={};_0x41eb6e['BDtxc']=function(_0x90242e,_0x32ad32){return _0x90242e!==_0x32ad32;};var _0x8b9a76=_0x41eb6e;if(_0x45b016&&process[_0x27b2bb(0x163)][_0x45b016])return process['env'][_0x45b016];const _0x57e45c=readConfigFile(),_0x38ad8b=_0x57e45c[_0x54f77e];return _0x8b9a76['BDtxc'](_0x38ad8b,undefined)&&_0x38ad8b!==null?String(_0x38ad8b):undefined;}function getAllConfig(){var _0x4e927e={_0x1bd713:0x17d,_0x18dce8:0x15b},_0x2e8e73=_0xfc4070,_0x47529e={'iwvCE':function(_0x75e422,_0xd8f7f1,_0x4e7748){return _0x75e422(_0xd8f7f1,_0x4e7748);},'izrfr':'OPENAI_KEY','kkmby':function(_0x375df0,_0x59bb4f,_0x4217be){return _0x375df0(_0x59bb4f,_0x4217be);},'FcpPm':_0x2e8e73(0x161)};return{'licenseKey':_0x47529e['iwvCE'](getConfig,_0x2e8e73(0x178),'SYKE_LICENSE_KEY'),'geminiKey':getConfig('geminiKey','GEMINI_KEY'),'openaiKey':getConfig('openaiKey',_0x47529e[_0x2e8e73(_0x4e927e._0x1bd713)]),'anthropicKey':getConfig('anthropicKey','ANTHROPIC_KEY'),'aiProvider':getConfig(_0x2e8e73(_0x4e927e._0x18dce8),'SYKE_AI_PROVIDER'),'port':_0x47529e[_0x2e8e73(0x15f)](getConfig,_0x47529e[_0x2e8e73(0x172)],_0x2e8e73(0x173))};}function _0x2752(_0x4a549e,_0x14b9af){_0x4a549e=_0x4a549e-0x158;var _0x1ffed4=_0x1ffe();var _0x27521e=_0x1ffed4[_0x4a549e];if(_0x2752['rELmjv']===undefined){var _0x216d20=function(_0x57fcfe){var _0x520f71='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x3ef583='',_0x103c18='';for(var _0x445e8f=0x0,_0x1fca20,_0x213776,_0x1090aa=0x0;_0x213776=_0x57fcfe['charAt'](_0x1090aa++);~_0x213776&&(_0x1fca20=_0x445e8f%0x4?_0x1fca20*0x40+_0x213776:_0x213776,_0x445e8f++%0x4)?_0x3ef583+=String['fromCharCode'](0xff&_0x1fca20>>(-0x2*_0x445e8f&0x6)):0x0){_0x213776=_0x520f71['indexOf'](_0x213776);}for(var _0x268281=0x0,_0x2040a7=_0x3ef583['length'];_0x268281<_0x2040a7;_0x268281++){_0x103c18+='%'+('00'+_0x3ef583['charCodeAt'](_0x268281)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x103c18);};_0x2752['BNDbGz']=_0x216d20,_0x2752['URfJZx']={},_0x2752['rELmjv']=!![];}var _0x4912dd=_0x1ffed4[0x0],_0xcc1f97=_0x4a549e+_0x4912dd,_0x361da3=_0x2752['URfJZx'][_0xcc1f97];return!_0x361da3?(_0x27521e=_0x2752['BNDbGz'](_0x27521e),_0x2752['URfJZx'][_0xcc1f97]=_0x27521e):_0x27521e=_0x361da3,_0x27521e;}function setConfig(_0x5b2fd5,_0x4871a6){var _0x36ab09={_0x28c79b:0x17e},_0x578464=_0xfc4070;const _0xd621fe=readConfigFile();_0x4871a6===null?delete _0xd621fe[_0x5b2fd5]:_0xd621fe[_0x5b2fd5]=_0x4871a6;try{if(!fs[_0x578464(_0x36ab09._0x28c79b)](CONFIG_DIR)){var _0x1ec98e={};_0x1ec98e['recursive']=!![],fs[_0x578464(0x184)](CONFIG_DIR,_0x1ec98e);}fs['writeFileSync'](CONFIG_FILE,JSON['stringify'](_0xd621fe,null,0x2)),cached=_0xd621fe;}catch{}}exports[_0xfc4070(0x16b)]=CONFIG_DIR,exports['CONFIG_FILE_PATH']=CONFIG_FILE;
|