@ikyyofc/gemini-cli 4.0.4 → 4.0.6
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/index.js +52 -9
- package/package.json +1 -1
- package/src/agent.js +108 -76
- package/src/gemini.js +1 -1
- package/src/skills.js +33 -134
package/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import fs from "fs";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import chalk from "chalk";
|
|
6
6
|
|
|
7
|
-
import { chat }
|
|
7
|
+
import { chat, callGeminiStream } from "./src/gemini.js";
|
|
8
8
|
import { runAgentLoop } from "./src/agent.js";
|
|
9
9
|
import {
|
|
10
10
|
loadMemory, buildContextString, memoryShow, memoryAdd, ensureGlobalDir, GLOBAL_DIR
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
renderWelcome, renderHelp,
|
|
18
18
|
printUser, printAssistant,
|
|
19
|
-
printError, printInfo, printSuccess, printWarning
|
|
19
|
+
printError, printInfo, printSuccess, printWarning, bw
|
|
20
20
|
} from "./src/renderer.js";
|
|
21
21
|
import {
|
|
22
22
|
PasteTransform, restorePaste,
|
|
@@ -163,19 +163,62 @@ async function send(rawLine) {
|
|
|
163
163
|
history.push({ role: "assistant", content: res.finalResponse });
|
|
164
164
|
}
|
|
165
165
|
} else {
|
|
166
|
-
|
|
166
|
+
// Chat mode — streaming
|
|
167
167
|
const msgs = [];
|
|
168
168
|
if (sysInstruction()) msgs.push({ role: "system", content: sysInstruction() });
|
|
169
169
|
msgs.push(...history, { role: "user", content: userText });
|
|
170
|
+
|
|
171
|
+
const W = bw();
|
|
172
|
+
const prefix = chalk.hex("#00D4AA")(" │ ");
|
|
173
|
+
let started = false;
|
|
174
|
+
let fullText = "";
|
|
175
|
+
let thinkText = "";
|
|
176
|
+
|
|
177
|
+
const sp = new Spinner();
|
|
170
178
|
sp.start("thinking…", "#4A9EFF");
|
|
179
|
+
|
|
171
180
|
try {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
181
|
+
await callGeminiStream({
|
|
182
|
+
messages: msgs,
|
|
183
|
+
fileBuffer: pendingFile || null,
|
|
184
|
+
onThought: (chunk) => {
|
|
185
|
+
thinkText += chunk;
|
|
186
|
+
},
|
|
187
|
+
onText: (chunk) => {
|
|
188
|
+
if (!started) {
|
|
189
|
+
sp.stop();
|
|
190
|
+
// Show thinking first if any
|
|
191
|
+
if (thinkText.trim()) {
|
|
192
|
+
process.stdout.write(
|
|
193
|
+
"\n" + chalk.hex("#2A2A40")(" ╭─ thinking " + "─".repeat(Math.max(2, W - 13))) + "\n"
|
|
194
|
+
);
|
|
195
|
+
thinkText.trim().split("\n").forEach(line =>
|
|
196
|
+
process.stdout.write(chalk.hex("#2A2A40")(" │ ") + chalk.hex("#4A4A6A").italic(line) + "\n")
|
|
197
|
+
);
|
|
198
|
+
process.stdout.write(chalk.hex("#2A2A40")(" ╰" + "─".repeat(W + 1)) + "\n\n");
|
|
199
|
+
}
|
|
200
|
+
process.stdout.write(
|
|
201
|
+
"\n" + chalk.hex("#00D4AA")(" ╭─") +
|
|
202
|
+
chalk.hex("#00D4AA").bold(" gemini ") +
|
|
203
|
+
chalk.hex("#4A4A5E")("─".repeat(Math.max(0, W - 10))) + "\n"
|
|
204
|
+
);
|
|
205
|
+
started = true;
|
|
206
|
+
}
|
|
207
|
+
fullText += chunk;
|
|
208
|
+
process.stdout.write(prefix + chunk.replace(/\n/g, "\n" + prefix));
|
|
209
|
+
},
|
|
210
|
+
onDone: () => {
|
|
211
|
+
if (!started) sp.stop();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
if (started) {
|
|
216
|
+
process.stdout.write("\n" + chalk.hex("#00D4AA")(" ╰" + "─".repeat(W + 1)) + "\n\n");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
history.push({ role: "user", content: userText }, { role: "assistant", content: fullText });
|
|
177
220
|
} catch (e) {
|
|
178
|
-
sp.
|
|
221
|
+
sp.stop();
|
|
179
222
|
printError(e.message);
|
|
180
223
|
}
|
|
181
224
|
}
|
package/package.json
CHANGED
package/src/agent.js
CHANGED
|
@@ -1,66 +1,81 @@
|
|
|
1
|
-
// src/agent.js — ReAct agent loop
|
|
1
|
+
// src/agent.js — ReAct agent loop with streaming final answer
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import { callGemini } from "./gemini.js";
|
|
3
|
+
import { callGemini, callGeminiStream } from "./gemini.js";
|
|
4
4
|
import { GEMINI_TOOLS, FUNCTION_DECLARATIONS, executeTool } from "./tools.js";
|
|
5
5
|
import { Spinner } from "./utils/spinner.js";
|
|
6
|
-
import { loadSkills,
|
|
6
|
+
import { loadSkills, SKILLS_DIR } from "./skills.js";
|
|
7
7
|
import {
|
|
8
8
|
printAssistant, printError, printWarning,
|
|
9
9
|
printToolCall, printToolResult,
|
|
10
10
|
printStepHeader, printStepFooter, bw,
|
|
11
11
|
} from "./renderer.js";
|
|
12
12
|
|
|
13
|
-
const TIMEOUT_MS = 10 * 60 * 1000;
|
|
13
|
+
const TIMEOUT_MS = 10 * 60 * 1000;
|
|
14
14
|
|
|
15
15
|
// ─────────────────────────────────────────────────────────────────
|
|
16
16
|
// System prompt
|
|
17
17
|
// ─────────────────────────────────────────────────────────────────
|
|
18
18
|
function buildSystemPrompt(extra = "") {
|
|
19
|
-
const toolList
|
|
20
|
-
const skills
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
19
|
+
const toolList = FUNCTION_DECLARATIONS.map(t => `- ${t.name}: ${t.description}`).join("\n");
|
|
20
|
+
const skills = loadSkills();
|
|
21
|
+
const skillIndex = skills.length
|
|
22
|
+
? skills.map(s => {
|
|
23
|
+
const firstLine = s.content.split("\n").find(l => l.trim() && !l.startsWith("#")) ?? "";
|
|
24
|
+
return ` - ${s.slug}: ${firstLine.slice(0, 80)}`;
|
|
25
|
+
}).join("\n")
|
|
26
|
+
: null;
|
|
27
|
+
|
|
28
|
+
const now = new Date();
|
|
29
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
30
|
+
const datetime = now.toLocaleString("id-ID", { timeZone: tz, dateStyle: "full", timeStyle: "long" });
|
|
31
31
|
|
|
32
|
-
return `You are an autonomous AI coding agent running in the user's terminal.
|
|
32
|
+
return `You are an autonomous AI coding agent running in the user's terminal.
|
|
33
33
|
|
|
34
34
|
## CURRENT TIME
|
|
35
35
|
${datetime} (${tz})
|
|
36
|
-
Unix timestamp: ${Math.floor(now.getTime() / 1000)}
|
|
37
36
|
|
|
38
37
|
## CORE RULE — NEVER ASK, ALWAYS ACT
|
|
39
|
-
|
|
40
|
-
You MUST use tools to complete every task. Never ask the user to do anything themselves.
|
|
41
|
-
- If you need to run a command → run_shell
|
|
42
|
-
- If you need to read a file → read_file
|
|
43
|
-
- If you need to create or edit a file → write_file or patch_file
|
|
44
|
-
- If something fails → diagnose and fix yourself, retry automatically
|
|
38
|
+
Use tools to complete every task. Never instruct the user to do anything themselves.
|
|
45
39
|
|
|
46
40
|
## WORKFLOW
|
|
47
|
-
1.
|
|
48
|
-
2.
|
|
49
|
-
3.
|
|
50
|
-
4.
|
|
41
|
+
1. CHECK SKILLS — if skills are available, read the relevant one FIRST before starting
|
|
42
|
+
2. EXPLORE — understand the project structure
|
|
43
|
+
3. ACT — complete the task fully using tools
|
|
44
|
+
4. VERIFY — test after changes
|
|
45
|
+
5. REPORT — brief summary
|
|
51
46
|
|
|
52
47
|
## TOOLS
|
|
53
48
|
${toolList}
|
|
54
49
|
|
|
50
|
+
${skillIndex ? `## AVAILABLE SKILLS
|
|
51
|
+
You have skills installed. ALWAYS check if a skill is relevant before starting a task.
|
|
52
|
+
If relevant, read it first: read_file("${SKILLS_DIR}/<slug>/SKILL.md")
|
|
53
|
+
|
|
54
|
+
Installed:
|
|
55
|
+
${skillIndex}` : ""}
|
|
56
|
+
|
|
55
57
|
## RULES
|
|
56
|
-
- Always read files before editing
|
|
57
|
-
- Use patch_file for targeted edits
|
|
58
|
-
- Verify code works
|
|
59
|
-
- If a command fails,
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
- Always read files before editing
|
|
59
|
+
- Use patch_file for targeted edits
|
|
60
|
+
- Verify code works after changes
|
|
61
|
+
- If a command fails, diagnose and retry
|
|
62
|
+
- Platform: ${process.platform} | CWD: ${process.cwd()}
|
|
63
|
+
|
|
64
|
+
${extra ? `## EXTRA\n${extra}` : ""}`.trim();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ─────────────────────────────────────────────────────────────────
|
|
68
|
+
// Display thinking block
|
|
69
|
+
// ─────────────────────────────────────────────────────────────────
|
|
70
|
+
function printThinkBlock(text) {
|
|
71
|
+
if (!text?.trim()) return;
|
|
72
|
+
process.stdout.write(
|
|
73
|
+
"\n" + chalk.hex("#2A2A40")(" ╭─ thinking " + "─".repeat(Math.max(2, bw() - 13))) + "\n"
|
|
74
|
+
);
|
|
75
|
+
text.trim().split("\n").forEach(line =>
|
|
76
|
+
process.stdout.write(chalk.hex("#2A2A40")(" │ ") + chalk.hex("#4A4A6A").italic(line) + "\n")
|
|
77
|
+
);
|
|
78
|
+
process.stdout.write(chalk.hex("#2A2A40")(" ╰" + "─".repeat(bw() + 1)) + "\n\n");
|
|
64
79
|
}
|
|
65
80
|
|
|
66
81
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -80,15 +95,13 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
80
95
|
while (true) {
|
|
81
96
|
if (Date.now() > deadline) {
|
|
82
97
|
spinner.stop();
|
|
83
|
-
printWarning("timeout: 10 menit
|
|
98
|
+
printWarning("timeout: 10 menit, agent dihentikan");
|
|
84
99
|
return { finalResponse: null, iterations: iteration };
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
iteration++;
|
|
88
|
-
|
|
89
|
-
// ── Animated spinner while waiting for LLM ─────────────────
|
|
90
103
|
spinner.start(
|
|
91
|
-
iteration === 1 ? "thinking…" : `
|
|
104
|
+
iteration === 1 ? "thinking…" : `step ${iteration}…`,
|
|
92
105
|
"#4A9EFF"
|
|
93
106
|
);
|
|
94
107
|
|
|
@@ -96,51 +109,32 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
96
109
|
try {
|
|
97
110
|
const res = await callGemini({ messages, tools: GEMINI_TOOLS, systemInstruction: fullSystem });
|
|
98
111
|
parts = res.parts;
|
|
99
|
-
spinner.stop();
|
|
112
|
+
spinner.stop();
|
|
100
113
|
} catch (err) {
|
|
101
114
|
spinner.fail(err.message);
|
|
102
115
|
printError(err.message);
|
|
103
116
|
return null;
|
|
104
117
|
}
|
|
105
118
|
|
|
106
|
-
// ── Parse response parts ────────────────────────────────────
|
|
107
|
-
// Gemini returns: thought parts (p.thought===true), text parts, tool call parts
|
|
108
119
|
const thoughtParts = parts.filter(p => p.thought === true && p.text);
|
|
109
120
|
const textParts = parts.filter(p => p.text != null && !p.thought);
|
|
110
121
|
const callParts = parts.filter(p => p.functionCall != null);
|
|
111
|
-
const textContent = textParts.map(p => p.text).join("").trim();
|
|
112
122
|
const thinkContent = thoughtParts.map(p => p.text).join("").trim();
|
|
123
|
+
const textContent = textParts.map(p => p.text).join("").trim();
|
|
113
124
|
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
process.stderr.write(
|
|
117
|
-
`[DEBUG] parts count: ${parts.length}, ` +
|
|
118
|
-
`thought: ${thoughtParts.length}, ` +
|
|
119
|
-
`text: ${textParts.length}, ` +
|
|
120
|
-
`call: ${callParts.length}\n` +
|
|
121
|
-
`[DEBUG] part types: ${parts.map(p => p.thought ? "THOUGHT" : p.functionCall ? "CALL" : "TEXT").join(", ")}\n`
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// ── Show native thinking (p.thought===true from API) ───────
|
|
126
|
-
if (thinkContent) {
|
|
127
|
-
process.stdout.write(
|
|
128
|
-
"\n" + chalk.hex("#2E2E45")(" ╭─ thinking ") +
|
|
129
|
-
chalk.hex("#2E2E45")("─".repeat(Math.max(2, bw() - 13))) + "\n"
|
|
130
|
-
);
|
|
131
|
-
thinkContent.split("\n").forEach(line =>
|
|
132
|
-
process.stdout.write(chalk.hex("#2E2E45")(" │ ") + chalk.hex("#55557A").italic(line) + "\n")
|
|
133
|
-
);
|
|
134
|
-
process.stdout.write(chalk.hex("#2E2E45")(" ╰" + "─".repeat(bw() - 1)) + "\n\n");
|
|
135
|
-
}
|
|
125
|
+
// Show thinking
|
|
126
|
+
printThinkBlock(thinkContent);
|
|
136
127
|
|
|
137
|
-
// ── Final answer —
|
|
128
|
+
// ── Final answer — stream it ───────────────────────────────
|
|
138
129
|
if (callParts.length === 0) {
|
|
139
|
-
if (textContent)
|
|
130
|
+
if (textContent) {
|
|
131
|
+
// Stream the final answer for better UX
|
|
132
|
+
await streamFinalAnswer(messages, fullSystem, thinkContent);
|
|
133
|
+
}
|
|
140
134
|
return { finalResponse: textContent, iterations: iteration };
|
|
141
135
|
}
|
|
142
136
|
|
|
143
|
-
//
|
|
137
|
+
// Show reasoning text before tool block
|
|
144
138
|
if (textContent) {
|
|
145
139
|
textContent.split("\n").forEach((line, i) =>
|
|
146
140
|
process.stdout.write(
|
|
@@ -150,26 +144,64 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
150
144
|
);
|
|
151
145
|
}
|
|
152
146
|
|
|
153
|
-
// ──
|
|
154
|
-
|
|
147
|
+
// ── Tool calls ─────────────────────────────────────────────
|
|
148
|
+
// Include ALL parts (thinking + text + calls) in history for continuity
|
|
155
149
|
messages.push({ role: "model", parts });
|
|
156
150
|
|
|
151
|
+
printStepHeader(iteration);
|
|
157
152
|
const responseParts = [];
|
|
158
153
|
for (const part of callParts) {
|
|
159
154
|
const { name, args } = part.functionCall;
|
|
160
|
-
|
|
161
|
-
// Animate the tool name while it runs
|
|
162
155
|
spinner.start(name + "…", "#FFD080");
|
|
163
156
|
printToolCall(name, args ?? {});
|
|
164
157
|
spinner.stop();
|
|
165
|
-
|
|
166
158
|
const result = await executeTool(name, args ?? {}, { autoApprove });
|
|
167
159
|
printToolResult(result);
|
|
168
|
-
|
|
169
160
|
responseParts.push({ functionResponse: { name, response: result } });
|
|
170
161
|
}
|
|
171
|
-
|
|
172
162
|
printStepFooter();
|
|
163
|
+
|
|
173
164
|
messages.push({ role: "user", parts: responseParts });
|
|
174
165
|
}
|
|
175
166
|
}
|
|
167
|
+
|
|
168
|
+
// ─────────────────────────────────────────────────────────────────
|
|
169
|
+
// Stream the final answer with live typing effect
|
|
170
|
+
// ─────────────────────────────────────────────────────────────────
|
|
171
|
+
async function streamFinalAnswer(messages, systemInstruction, prevThink) {
|
|
172
|
+
const W = bw();
|
|
173
|
+
const prefix = chalk.hex("#00D4AA")(" │ ");
|
|
174
|
+
let started = false;
|
|
175
|
+
let thinkAcc = "";
|
|
176
|
+
|
|
177
|
+
const printHeader = () => {
|
|
178
|
+
process.stdout.write(
|
|
179
|
+
"\n" + chalk.hex("#00D4AA")(" ╭─") +
|
|
180
|
+
chalk.hex("#00D4AA").bold(" gemini ") +
|
|
181
|
+
chalk.hex("#4A4A5E")("─".repeat(Math.max(0, W - 10))) + "\n"
|
|
182
|
+
);
|
|
183
|
+
started = true;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
await callGeminiStream({
|
|
187
|
+
messages,
|
|
188
|
+
systemInstruction,
|
|
189
|
+
onThought: (chunk) => {
|
|
190
|
+
thinkAcc += chunk;
|
|
191
|
+
},
|
|
192
|
+
onText: (chunk) => {
|
|
193
|
+
if (!started) printHeader();
|
|
194
|
+
process.stdout.write(prefix + chunk.replace(/\n/g, "\n" + prefix));
|
|
195
|
+
},
|
|
196
|
+
onDone: (parts) => {
|
|
197
|
+
// Show thinking if new thinking arrived in final answer
|
|
198
|
+
if (thinkAcc.trim() && thinkAcc !== prevThink) {
|
|
199
|
+
printThinkBlock(thinkAcc);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
if (started) {
|
|
205
|
+
process.stdout.write("\n" + chalk.hex("#00D4AA")(" ╰" + "─".repeat(W + 1)) + "\n\n");
|
|
206
|
+
}
|
|
207
|
+
}
|
package/src/gemini.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x30c7(_0x1da458,_0x73140a){_0x1da458=_0x1da458-(0x1ab3+0x43*-0x7d+0x73e);const _0x4e99f9=_0x1f9e();let _0x41a3b2=_0x4e99f9[_0x1da458];if(_0x30c7['bvbgXu']===undefined){var _0x461fd8=function(_0x54c82f){const _0x3d687a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x310a2d='',_0x2f951f='';for(let _0x484aa8=-0x1317+0x5*0x3d7+-0x7*0x4,_0x241e3a,_0x5e80c2,_0x1dde23=-0x253b+-0x17d3+0x1e87*0x2;_0x5e80c2=_0x54c82f['charAt'](_0x1dde23++);~_0x5e80c2&&(_0x241e3a=_0x484aa8%(-0x1cc7+-0x1685+0x3350)?_0x241e3a*(0xd*0x24b+0x2095+-0x1f12*0x2)+_0x5e80c2:_0x5e80c2,_0x484aa8++%(-0x950+-0x13eb+0x1d3f))?_0x310a2d+=String['fromCharCode'](0x7a*0x4d+-0xa95+-0x191e&_0x241e3a>>(-(-0x1bdb+0x1*-0x2279+-0x65*-0x9e)*_0x484aa8&-0x1*0x1027+0x1371+-0x4c*0xb)):-0x4ff+0x5*-0x82+0x3*0x283){_0x5e80c2=_0x3d687a['indexOf'](_0x5e80c2);}for(let _0x3c390d=0x2e*-0xbf+0xf79*-0x1+0x15*0x25f,_0x2f181a=_0x310a2d['length'];_0x3c390d<_0x2f181a;_0x3c390d++){_0x2f951f+='%'+('00'+_0x310a2d['charCodeAt'](_0x3c390d)['toString'](0x1*0x1585+0x29*0xb+-0x1738))['slice'](-(0x1*0xda9+0x1aa8*-0x1+0xd01*0x1));}return decodeURIComponent(_0x2f951f);};const _0x1c65a8=function(_0x181a87,_0x45a70e){let _0x400d94=[],_0x8cdaee=-0x347+0x288+0x1*0xbf,_0x581bc5,_0x41fcb0='';_0x181a87=_0x461fd8(_0x181a87);let _0x5f312a;for(_0x5f312a=0x1891+0x120b+-0x2a9c;_0x5f312a<-0x25e0+0x976+0x1d6a;_0x5f312a++){_0x400d94[_0x5f312a]=_0x5f312a;}for(_0x5f312a=0x1a8c+-0xe3b+-0xc51;_0x5f312a<-0xf67*-0x2+-0x8c3*-0x4+-0x6*0xacf;_0x5f312a++){_0x8cdaee=(_0x8cdaee+_0x400d94[_0x5f312a]+_0x45a70e['charCodeAt'](_0x5f312a%_0x45a70e['length']))%(-0xca4+-0xf11+0x1cb5),_0x581bc5=_0x400d94[_0x5f312a],_0x400d94[_0x5f312a]=_0x400d94[_0x8cdaee],_0x400d94[_0x8cdaee]=_0x581bc5;}_0x5f312a=-0x20de+0x1a3a+-0x6a4*-0x1,_0x8cdaee=0x2fc+0x1ace+-0x1dca;for(let _0x2a193d=0x12d4+-0x106f*-0x1+-0x2343;_0x2a193d<_0x181a87['length'];_0x2a193d++){_0x5f312a=(_0x5f312a+(0xbc+-0x247d+-0x2*-0x11e1))%(0x19*-0x49+0x1a4f+-0x122e*0x1),_0x8cdaee=(_0x8cdaee+_0x400d94[_0x5f312a])%(-0x3*-0x5cf+0xd8*-0x16+0x223),_0x581bc5=_0x400d94[_0x5f312a],_0x400d94[_0x5f312a]=_0x400d94[_0x8cdaee],_0x400d94[_0x8cdaee]=_0x581bc5,_0x41fcb0+=String['fromCharCode'](_0x181a87['charCodeAt'](_0x2a193d)^_0x400d94[(_0x400d94[_0x5f312a]+_0x400d94[_0x8cdaee])%(0x53a+0x2384*0x1+-0x13df*0x2)]);}return _0x41fcb0;};_0x30c7['MZWJHW']=_0x1c65a8,_0x30c7['QyJyhI']={},_0x30c7['bvbgXu']=!![];}const _0x5374c3=_0x4e99f9[-0x8f6+0x17ae+-0xeb8],_0x3409f2=_0x1da458+_0x5374c3,_0x3b69e3=_0x30c7['QyJyhI'][_0x3409f2];return!_0x3b69e3?(_0x30c7['IeUNTV']===undefined&&(_0x30c7['IeUNTV']=!![]),_0x41a3b2=_0x30c7['MZWJHW'](_0x41a3b2,_0x73140a),_0x30c7['QyJyhI'][_0x3409f2]=_0x41a3b2):_0x41a3b2=_0x3b69e3,_0x41a3b2;}const _0x1e5df6=_0x30c7;(function(_0x32bcce,_0x373aca){const _0x1c4aef=_0x30c7,_0x2b1a23=_0x32bcce();while(!![]){try{const _0x539825=parseInt(_0x1c4aef(0x195,'zVqg'))/(0xa*-0xf0+0xa49*-0x2+0x1df3)+parseInt(_0x1c4aef(0x204,'BnUF'))/(-0x1de9+0xa14+0x13d7*0x1)*(parseInt(_0x1c4aef(0x164,'zVqg'))/(-0x215+-0x179e+0x19b6))+-parseInt(_0x1c4aef(0x183,'HjSG'))/(0x43*0x29+-0xebe+0x407)*(-parseInt(_0x1c4aef(0x151,'X6oH'))/(0xeb4+-0xef2+-0x1*-0x43))+parseInt(_0x1c4aef(0x1f6,'zVqg'))/(0xe18+0x15*-0x105+-0x1*-0x757)+parseInt(_0x1c4aef(0x1a5,']K5G'))/(-0x195b*-0x1+0xcb9+0xbf*-0x33)*(parseInt(_0x1c4aef(0x1b2,'FFNY'))/(0xe2*-0x10+0x1524+0x6*-0x12a))+-parseInt(_0x1c4aef(0x20a,'FFNY'))/(0xa48+-0x39*0x95+-0x1*-0x16ee)*(parseInt(_0x1c4aef(0x13d,'9EKH'))/(-0x1*0x4d1+-0x182d+0x742*0x4))+-parseInt(_0x1c4aef(0x1d2,'rlH^'))/(0x27*-0xd0+0x7*0x4f7+-0x183*0x2)*(parseInt(_0x1c4aef(0x182,'dWA@'))/(-0x1*-0x135d+0x1aad*-0x1+0x75c));if(_0x539825===_0x373aca)break;else _0x2b1a23['push'](_0x2b1a23['shift']());}catch(_0x16167c){_0x2b1a23['push'](_0x2b1a23['shift']());}}}(_0x1f9e,-0x88da*0x7+0x878fd+0x232dd));function _0x1f9e(){const _0x3932e3=['WPyBW48','eqpdSSoMWRVdVhW/W7RdNa','xmknvwhcMq','dCkuWRhcNG','WOK3WOCHWQiNgSolj1q','omk4W7tdMuSYW4TKASoX','W4pcLdngW4xcTSkLW40fW6i','wr3cIH3dHuZdJa','rWJcM0f/mmkd','lCk1WOHyEa','WPRdL08QW4SaWQ3dS8oF','W6SbW74kfG','wIpdKNJcHGS','W4uKWPiJWR82gSotFXy','W7xdP2z9','W4yKWQySWQeIsmkFwdW','WP8BigRdQHRdT14','WPxcVNVdN2NdMq','iv5M','W7/dOq/cR8ktWO/cU8k4','WOBdLSo0hG0','W7tdSxT7W4hcQSkMWQJcQW','W6nsWR/dU8o/','W4TCmSohW5O','WPVdUSoC','W6tcTcCeW4aqWRFdKSoGBW','WPOAWQikjmooW7tdK30m','W5OcAmkxWRpdLh4jW6mp','W4LLWOS','E3nTyte','W4SnD8kuWQRdJZ5jWRLB','WOxdR8oEaqVdUW','EGefpW','W5FdGuTiWRG','W7qUlSkcW6RdP8obiSkdhG','W4fqp8kMW7v/hmoJb8kd','nr1vWQNcIG','W6z1WP5TWP5HkCk4WOjh','zCklW4TDW4e','WQRcVtJcOGnwyatcQa','W4HPWPNdK8okithcImoxta','gCkyWO5Aw03cICkNW6e','WRNdKW7cGwdcUCoWW51+ja','W6WOW4Wgn8o/W5hdO3e','agLskZpcRCo1WOS','W6XRpmoj','W4JdRYxdN2tdPa1mzG','kaVdJ8oC','C8oqW697W7y','fxXAm3xcRCoNWOL0W74','pqinjCktW5y1','W40kD8k1WQS9fW','e8k/WPhcGuW','nCk6WPdcP1DfWRj0Bmka','WR4+WP4Gd8oL','W6/dPu1fWOu','W5nRWPtdKq','WP8BigRdQHtdPv9EWPS','dv/dMb7dO23dRhT2','gInfpgJcQ8oYW5bUW6u','WQOGWQPrW7tcNmoGFCo+vW','W41UW7ddG8kR','WO4RWODxW50','W43dGCkZWRCz','W6q1W50no8kZW4ddUx8i','BxX0tta','omkWWQu4w8k8W4ukWP7dLa','WQKSpgtcQq','W5RdMCoOo00','seblvXXLEhHNW70','W7JcLmkDtq','vqe+fmkf','W7ZcS8oBc27dO8ok','W6xcJSkkqmkD','W53cKJK','eMvgk3NcVa','C8klW7zRW6NcTgFcQNJdPa','W7ZdP3hdVmoTW5xdVSohWOXaW6LaWPrl','gGKpcK1CB355W7rB','W5/cGWyVWQSPW5tdOCoCtq','qmkrWOxdI3C','xG/cMGRcMGG','WPVcIsxcOSky','x2GYoCkKWR3dNb7dU2e','WRS7hv3cJq','W7mSW4KepCo/W5BdOga','emkzWP5dr1JdKCoPW6dcVq','aItcNSomWQVdQtbHrSko','iLHAzmopWPX3eNVcMmkKmeSl','sSonW7BdMdHcWRzkumk/WQC','WOBdJSoki0SLu1TiWQW','c8oMz8o2','W4vNW4JcH8kbBtxcGSolsW','WPlcU8okaqNdUCoDW5RcLmkV','WRrOW4mHsq','WOFdHSkIdr/dTmoFb1/dQq','rYhcTxbrhCoTWPWPga','BSkqirFdGmkMW4Lye8ox','W4uHWOyMWRL6fmoaCq','W6rRW4n0hSk7WOFcVWL/','qvxdSmk1WQ/cJt1NW7ldMG','od1iWRhcGvFdG8kuW4a','rhNdI2m','CtFdQbeXWQm','bgnzkW','WOxdJmkSEHNcICkPCf3dQq','DCkeAv/cQYlcPeH4WQe','cv/dNLRcMGVdS1fAfuJcGq','Bu56WRfRWR3cIuhcGq','A1xdQSoWW4HrjCkZ','pvNcNmoXWQZcT1S7u8ke','WRBcJKBdP17dVIfZtue','WOtdTmoadq','AZVdOHmQW6tcRJDB','WPXLW5r3W6iMf8o3EcNcNq','mWddT8owW6j6aG','W6tdKmkEWQmI','hSkovexdQa','W43dL8ksabSXgaj5WQ8','WO7dO8kssIS','WOddSSoidqRcS8kqW57cImk4','W78bpSobW4W','W5aDW48khG','WO7dMGJdLCoTWRfBW5nlW5hcHMiz','cSkcWOzw','W7ddTxf7WP0','etyk','C1ugsmkgWPNdUJtdGuy','FGS+o8ky','aCkxq2JdKSknW7v/pCoY','WQZcU8kqlfFcIsPRo30','WPWFW5ldVZrMW7RdLCkiW4m','mWNdGSoEW6WWc8kOWR0','dSkcWRhcNM1R','W5ikcmoGW5ldGCoTh8kOma','WOxdOSoFhaddSq','W4hcKu3dNxxdLZu','sGFdJJet','AZVdOHmQW6tcU2OjW5C','W5ZcGSoUp1JcI8k2BbZcQq','W5fCWQ9CW79nw8kCWQjJ','WPGxj8ktWOjIv8kXxCk+','C1ufeSkjWPldUG','W43cHvxcG8k7WQ1BW6v9W4q','W4hdVmkmWRyM','WQv1WPCOfmoQW5NdOLK7','qMxdNg7cHKOHW7ZdJG','kmkWDftdTCkHW4jed8kq','W4/dHSk+WQ4cfdddTCkr','W7aRoSoFW7NcJW','WRhdHbdcMhNcLmo0W55coa','W6VcGmkaqCkygbj2WPWq','bSkeshRdNSklW6X+oCo5','smokW7xdNZ4XWRHSF8kYWOOx','qCodu8o2rSkAW7a','zb/cIvzUF8o2WOCHCa','x1LFxHOPDgn4','u8kqWR9TW7xcS3JcQNRdVa','uIlcOaRdUW','rJOtAIBcR8oOWPLVW74','WPpcU8opcqVdUmkuW4RcJmkR','mLVdJGeQbSoMWRKEjCkr','faDOWP3cOG','W4rjWQDeWRLwf8kyWRj4','ecNdGmo6W44','cCo1m8kpfq','W7KKnmozW6JdRmoy','W6X0WO/dL8oE','gafYCJriuh4','WPGvW5hdPIGLW68','WR5Np8oiW7pcGSkRBmoFWOe','W5RcHZKZW70','pmk+sSorgCk5WP/dTCkHW6K','oXhdH8oqW6yWaCkXWR7dQq','W4OXWRaLWRG','W5JcG1/cKSkXW6WC','W5vrWR8fWPLK','W7mSW4KepCo/W4ZdVxe','awlcMCoA','W4eNW4iPWQq6fSkhvYK','W4uHWOyMWRL6gSooCb8','W5qmW7GeeW','cCoocSk8pa','WO3cVM3dJdldMW5rAxW','W7XRW5bVn8oKW5VdSKbW','FchdTr82WR/cOIKB','ExlcT0r+W6VcKaPcW6G','F2tcGSkrW40','b8kDWOGuBCklW6aLWQq','W7pcPxBcRG','WOhdOSoliIm','FCkkBelcStVcPG0KW70','W5XbAmkKW6KGaSoNaSku','hgRcHSolWRC','W6hcJmkpqSkuuXTNWPaf','xd7dMSkpW7xcSIuaf8op','gSogWOiqBW','WOBdUSoEhby','ux7cH2dcJbX9W4VdRM0','oSkQsupdS8kHW4nn','fmkwWQpcJw0PWPLqtmkG','WRr1W6uhfCkZW5ldIG','mf7dGGiICmowWPKtdSkxza','WR3dL8oxfSoit0btWR8gWRifWQm','cv3dKv7cLa7dJvD4m2pcUG','W6KrWQWB','W6GKnSoi','W4i9WOWR','uGddNYKnWORcLWiWW6G','W7S+pSoeW6lcRCokj8kmfa','j8k2nftdRSkLWOjdgmoB','EIJdRWy','WONcUMFdJg4','vxZdIgFcGayHW77dJNG','bSkmWPSq','W4CxW4KBpG','W4zwWRLCWRvBaG','W6KpeCojW6C','Av3cL8kiWRffgSkZWQZdQmkN','FXKc','zbJcNLP1BComWRqazG','WPRcUNVdNhtdLq5tBxW','WO8FW4FdPG','oSkGyKm','W4hdQIpcGcNdGGn3zL8P'];_0x1f9e=function(){return _0x3932e3;};return _0x1f9e();}import _0x380986 from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x1e5df6(0x1b5,'dD8U')+_0x1e5df6(0x20f,'0waJ')+_0x1e5df6(0x1ad,'(61y')+_0x1e5df6(0x186,'fRA^')+_0x1e5df6(0x1bd,')X7c')+_0x1e5df6(0x14c,'s(G#'),'MODEL':_0x1e5df6(0x1e9,'SdFd')+_0x1e5df6(0x15c,'dWA@'),'HEADERS':{'User-Agent':_0x1e5df6(0x194,'SdFd')+'.2','Accept-Encoding':_0x1e5df6(0x1fd,'G!@B'),'content-type':_0x1e5df6(0x16f,'rlH^')+_0x1e5df6(0x181,'SKpc')+_0x1e5df6(0x1c5,'lsNi')+'8'}},SUPPORTED_MIMES=new Set([_0x1e5df6(0x1f2,'HjSG'),_0x1e5df6(0x155,'E@*u'),_0x1e5df6(0x1ae,'BnUF'),_0x1e5df6(0x166,'H7WW'),_0x1e5df6(0x152,'fRA^'),_0x1e5df6(0x1ec,'x$ew'),_0x1e5df6(0x19b,'G!@B'),_0x1e5df6(0x1a2,'HVVE'),_0x1e5df6(0x1c6,'rlH^'),_0x1e5df6(0x1bc,'id)6'),_0x1e5df6(0x1b4,'G!@B')+'v',_0x1e5df6(0x1db,'E@*u'),_0x1e5df6(0x211,'EIkg'),_0x1e5df6(0x17f,'E@*u'),_0x1e5df6(0x1b9,']K5G'),_0x1e5df6(0x153,'*TRn'),_0x1e5df6(0x18f,'x3(3'),_0x1e5df6(0x1de,'0waJ'),_0x1e5df6(0x1be,'igi['),_0x1e5df6(0x18c,'0waJ'),_0x1e5df6(0x1fb,'s(G#'),_0x1e5df6(0x1d7,'BnUF'),_0x1e5df6(0x206,'lsNi')+_0x1e5df6(0x1d4,'7vfr')+'us',_0x1e5df6(0x218,'0waJ')+_0x1e5df6(0x15a,'Prst'),_0x1e5df6(0x1ea,'R)oj'),_0x1e5df6(0x13f,'ZGg^'),_0x1e5df6(0x13a,'PG1m'),_0x1e5df6(0x1e1,'FFNY')+_0x1e5df6(0x169,'igi['),_0x1e5df6(0x179,'hI1V')+_0x1e5df6(0x212,'zVqg'),_0x1e5df6(0x156,'tTl$'),_0x1e5df6(0x163,'PG1m')+_0x1e5df6(0x205,'dWA@'),_0x1e5df6(0x1b6,'#iCJ')+_0x1e5df6(0x174,'EIkg'),_0x1e5df6(0x16a,'E@*u')+_0x1e5df6(0x217,'id)6'),_0x1e5df6(0x1c0,'HDrB')+_0x1e5df6(0x1ee,'PO0v'),_0x1e5df6(0x15b,'tTl$')+_0x1e5df6(0x16e,'dD8U')]);async function getToken(){const _0x319c87=_0x1e5df6,_0x8cdcc8={'pMXvh':_0x319c87(0x180,'*TRn')+_0x319c87(0x1bb,'W71o')+_0x319c87(0x1fc,')X7c')+_0x319c87(0x176,'Prst')+_0x319c87(0x14d,'R)oj')+_0x319c87(0x184,'pXLn')+_0x319c87(0x154,'HDrB')+_0x319c87(0x1f0,'id)6')+_0x319c87(0x1ac,'fo(A')+_0x319c87(0x21a,'0waJ')+_0x319c87(0x198,'SKpc')+_0x319c87(0x1da,'#iCJ'),'wygJF':_0x319c87(0x14f,'#iCJ')+_0x319c87(0x196,'GxBL'),'pZKGZ':_0x319c87(0x145,'MAc2')+_0x319c87(0x1e2,'W71o')+_0x319c87(0x18b,')X7c')+_0x319c87(0x1e4,'G!@B')+_0x319c87(0x20c,'f]sK')+_0x319c87(0x1a0,'qpT1')+_0x319c87(0x1ed,'SKpc'),'BVGOP':_0x319c87(0x1ff,'id)6')+_0x319c87(0x1bf,'7vfr'),'RCVZD':_0x319c87(0x1a9,'16dQ')+_0x319c87(0x15d,'R)oj'),'xtTBQ':_0x319c87(0x1b7,'R)oj')+_0x319c87(0x189,'dD8U')+_0x319c87(0x210,'HjSG')+_0x319c87(0x1d6,'H4Yq'),'qaGhy':_0x319c87(0x193,'dD8U')+_0x319c87(0x1c9,'tTl$')+_0x319c87(0x18e,'f]sK')+_0x319c87(0x18d,'W71o')+_0x319c87(0x188,'W71o')},{data:_0x292ae3}=await _0x380986[_0x319c87(0x192,'tTl$')](_0x8cdcc8[_0x319c87(0x13e,'HVVE')],{'clientType':_0x8cdcc8[_0x319c87(0x1e8,'HVVE')]},{'headers':{'User-Agent':_0x8cdcc8[_0x319c87(0x1cf,'Z8tj')],'Content-Type':_0x8cdcc8[_0x319c87(0x140,'fRA^')],'X-Android-Package':_0x8cdcc8[_0x319c87(0x147,'rlH^')],'X-Android-Cert':_0x8cdcc8[_0x319c87(0x150,'Prst')],'X-Firebase-GMPID':_0x8cdcc8[_0x319c87(0x1d5,'hI1V')]}});return _0x292ae3[_0x319c87(0x19d,'BnUF')];}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0x279dda=_0x1e5df6,_0x14ea7f={'mBnrp':function(_0x4be824,_0xaa1819){return _0x4be824===_0xaa1819;},'neRjn':_0x279dda(0x1e3,'G!@B'),'BRdzl':_0x279dda(0x173,'x$ew'),'eJdlA':function(_0x389c2a,_0x163935){return _0x389c2a===_0x163935;},'MfLaL':function(_0xe74ab9,_0x3a5f46){return _0xe74ab9===_0x3a5f46;},'nDSkD':_0x279dda(0x149,'HVVE'),'luPyq':function(_0x579954){return _0x579954();},'JMcCG':function(_0x123211,_0x590cc6){return _0x123211===_0x590cc6;},'nLIeW':function(_0x5e0cd8,_0x405c2a){return _0x5e0cd8(_0x405c2a);},'PKNri':_0x279dda(0x1cd,'#iCJ')+_0x279dda(0x165,'tTl$')+_0x279dda(0x200,'PO0v'),'DLOvE':_0x279dda(0x17b,'zVqg'),'EoREs':function(_0x49dfdc,_0x5935cb){return _0x49dfdc-_0x5935cb;},'sDKdj':function(_0x1372e2,_0x76ef45){return _0x1372e2===_0x76ef45;},'WUHGV':_0x279dda(0x219,'ZGg^'),'JcDdO':_0x279dda(0x1e7,']K5G'),'oOVqK':_0x279dda(0x1b0,'s(G#')+_0x279dda(0x17d,'16dQ')+_0x279dda(0x1f7,'0waJ'),'UXbkL':_0x279dda(0x18a,'lsNi'),'FbTJF':_0x279dda(0x15f,'HjSG')+_0x279dda(0x1fa,'G!@B')+_0x279dda(0x17e,'PG1m'),'JEPQB':_0x279dda(0x144,'W71o')+_0x279dda(0x1ab,')X7c')+_0x279dda(0x16c,'PO0v')+'T','Mpwcq':_0x279dda(0x1c2,')X7c')+_0x279dda(0x143,'hI1V')+_0x279dda(0x199,'FFNY')+'T','QIUeA':function(_0x1bcd4f,_0x580874){return _0x1bcd4f&&_0x580874;},'oqNJk':_0x279dda(0x1c7,'Prst')+_0x279dda(0x1ca,'HVVE')+_0x279dda(0x1dd,'0waJ')+'I'},_0x43aa73=await _0x14ea7f[_0x279dda(0x1a1,'qpT1')](getToken),_0x549cb4=messages[_0x279dda(0x1f9,'0waJ')](_0x2c1411=>_0x2c1411[_0x279dda(0x1f8,'s(G#')]===_0x279dda(0x1b1,'HVVE')),_0x4a4db6=systemInstruction??(_0x549cb4?_0x14ea7f[_0x279dda(0x1ce,'BnUF')](typeof _0x549cb4[_0x279dda(0x1b8,'16dQ')],_0x14ea7f[_0x279dda(0x216,'E@*u')])?_0x549cb4[_0x279dda(0x1d9,']K5G')]:_0x549cb4[_0x279dda(0x1eb,'SKpc')]?.[0x2*0x56+-0x1290+0x11e4]?.[_0x279dda(0x208,'(61y')]??'':null),_0x57e85d=messages[_0x279dda(0x175,'tTl$')](_0x313320=>_0x313320[_0x279dda(0x159,'BnUF')]!==_0x279dda(0x1af,'HjSG'))[_0x279dda(0x20b,'(61y')](_0x1d2145=>{const _0x3f948c=_0x279dda;if(_0x1d2145[_0x3f948c(0x1ef,'HVVE')])return{'role':_0x14ea7f[_0x3f948c(0x167,'d&rK')](_0x1d2145[_0x3f948c(0x185,'H4Yq')],_0x14ea7f[_0x3f948c(0x1d8,'0waJ')])?_0x14ea7f[_0x3f948c(0x16d,'PG1m')]:_0x1d2145[_0x3f948c(0x162,'fRA^')],'parts':_0x1d2145[_0x3f948c(0x1e0,'Z8tj')]};return{'role':_0x14ea7f[_0x3f948c(0x1a3,'s(G#')](_0x1d2145[_0x3f948c(0x157,'7vfr')],_0x14ea7f[_0x3f948c(0x1aa,'dWA@')])?_0x14ea7f[_0x3f948c(0x201,'E@*u')]:_0x1d2145[_0x3f948c(0x1a6,'*TRn')],'parts':[{'text':_0x14ea7f[_0x3f948c(0x168,'H7WW')](typeof _0x1d2145[_0x3f948c(0x1b8,'16dQ')],_0x14ea7f[_0x3f948c(0x15e,'HjSG')])?_0x1d2145[_0x3f948c(0x1d0,'s(G#')]:JSON[_0x3f948c(0x1e6,'PO0v')](_0x1d2145[_0x3f948c(0x202,'#iCJ')])}]};});if(fileBuffer){const _0x2d5bab=await _0x14ea7f[_0x279dda(0x1c8,'zVqg')](fileTypeFromBuffer,fileBuffer),_0x172cb4=_0x2d5bab?.[_0x279dda(0x1dc,'SKpc')]??_0x14ea7f[_0x279dda(0x19f,')X7c')];if(!SUPPORTED_MIMES[_0x279dda(0x146,'fRA^')](_0x172cb4))throw new Error(_0x279dda(0x148,'MAc2')+_0x279dda(0x187,'HVVE')+_0x279dda(0x1a8,'tTl$')+_0x172cb4);const _0x57e81a={'inlineData':{'mimeType':_0x172cb4,'data':fileBuffer[_0x279dda(0x1f1,')X7c')](_0x14ea7f[_0x279dda(0x16b,'rlH^')])}},_0x52bf73=_0x57e85d[_0x14ea7f[_0x279dda(0x171,'dWA@')](_0x57e85d[_0x279dda(0x13b,'FFNY')],0x1f30+-0x162f+-0x900)];if(_0x14ea7f[_0x279dda(0x203,'s(G#')](_0x52bf73?.[_0x279dda(0x19a,'HVVE')],_0x14ea7f[_0x279dda(0x1b3,'G!@B')]))_0x52bf73[_0x279dda(0x1a7,'ZGg^')][_0x279dda(0x170,'x$ew')](_0x57e81a);else _0x57e85d[_0x279dda(0x190,'id)6')]({'role':_0x14ea7f[_0x279dda(0x14b,'ZGg^')],'parts':[_0x57e81a]});}const _0xd9932c={'model':CONFIG[_0x279dda(0x1cc,'x3(3')],'request':{'contents':_0x57e85d,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0x14ea7f[_0x279dda(0x19e,'igi[')],'includeThoughts':!![]},'temperature':0x0},'safetySettings':[{'category':_0x14ea7f[_0x279dda(0x1ba,'igi[')],'threshold':_0x14ea7f[_0x279dda(0x17c,'9EKH')]},{'category':_0x14ea7f[_0x279dda(0x20d,'SdFd')],'threshold':_0x14ea7f[_0x279dda(0x1a4,'E@*u')]},{'category':_0x14ea7f[_0x279dda(0x17a,'pcxZ')],'threshold':_0x14ea7f[_0x279dda(0x214,'*TRn')]},{'category':_0x14ea7f[_0x279dda(0x1d1,'fRA^')],'threshold':_0x14ea7f[_0x279dda(0x141,'7vfr')]}],...tools?.[_0x279dda(0x191,'G!@B')]&&{'tools':tools},..._0x14ea7f[_0x279dda(0x1df,'E@*u')](_0x4a4db6,{'systemInstruction':{'role':_0x14ea7f[_0x279dda(0x1e5,'f]sK')],'parts':[{'text':_0x4a4db6}]}})},'stream':![]},{data:_0x146bd}=await _0x380986[_0x279dda(0x20e,'HjSG')](CONFIG[_0x279dda(0x13c,'tTl$')],_0xd9932c,{'headers':{...CONFIG[_0x279dda(0x172,'dD8U')],'authorization':_0x279dda(0x213,'lsNi')+_0x43aa73}});if(!_0x146bd?.[_0x279dda(0x1c1,'x$ew')]?.[_0x279dda(0x160,'W71o')])throw new Error(_0x14ea7f[_0x279dda(0x161,'ZGg^')]);const _0x389604=_0x146bd[_0x279dda(0x207,'FFNY')][0x95+-0x1a7f+0x19ea],_0x150763=_0x389604[_0x279dda(0x1d3,'(61y')]?.[_0x279dda(0x1fe,'FFNY')]??[];return{'parts':_0x150763,'candidate':_0x389604,'raw':_0x146bd};}export async function chat(_0x451e8e=[],_0x1c830b=null){const _0x4466e9=_0x1e5df6,_0x8dad32={'lUyqd':function(_0x53bbb9,_0x505a1a){return _0x53bbb9(_0x505a1a);}},{parts:_0x366868}=await _0x8dad32[_0x4466e9(0x14e,'x3(3')](callGemini,{'messages':_0x451e8e,'fileBuffer':_0x1c830b});return _0x366868[_0x4466e9(0x142,'HVVE')](_0x206801=>_0x206801[_0x4466e9(0x209,')X7c')]??'')[_0x4466e9(0x14a,'dWA@')]('');}
|
|
1
|
+
function _0x52b0(_0x2c58e5,_0x34dd52){_0x2c58e5=_0x2c58e5-(0x13a*0x7+-0x24b9+0x7*0x449);const _0x3728a8=_0x3a52();let _0x56fe44=_0x3728a8[_0x2c58e5];if(_0x52b0['xUfKAi']===undefined){var _0x3b0a32=function(_0x3a3534){const _0x14541b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x6c17da='',_0x48ec20='';for(let _0x16a142=-0x1*0xc87+0x2f5+0x992,_0x5054d9,_0x35f4f2,_0x37d9e3=-0x1bcf+-0x8b*-0x47+-0x113*0xa;_0x35f4f2=_0x3a3534['charAt'](_0x37d9e3++);~_0x35f4f2&&(_0x5054d9=_0x16a142%(-0xa13*0x1+-0x7d4*0x4+0x3*0xdcd)?_0x5054d9*(0x1*-0x1223+-0xfd6+0x2239*0x1)+_0x35f4f2:_0x35f4f2,_0x16a142++%(-0x6c4+-0x4*-0x41b+0x2*-0x4d2))?_0x6c17da+=String['fromCharCode'](-0x6*0x1f0+-0xcf9+0x1998&_0x5054d9>>(-(0x364*0x8+-0x1a7e+-0xa0)*_0x16a142&0x2149*0x1+-0x5c*0x61+0x199)):-0x1*-0xfaf+0x18ff+0x7f*-0x52){_0x35f4f2=_0x14541b['indexOf'](_0x35f4f2);}for(let _0x26b4a5=0x3*0x85d+-0x2*0x62b+-0xcc1,_0x194799=_0x6c17da['length'];_0x26b4a5<_0x194799;_0x26b4a5++){_0x48ec20+='%'+('00'+_0x6c17da['charCodeAt'](_0x26b4a5)['toString'](0x188+0xb2d*-0x3+0x200f))['slice'](-(-0xca9*0x3+-0x1*0x5e0+0x2bdd));}return decodeURIComponent(_0x48ec20);};const _0x42ff70=function(_0x22f637,_0x1e7459){let _0x2536b3=[],_0x209f29=0x24a1+0x70a+-0x2bab,_0x1b6c46,_0x361124='';_0x22f637=_0x3b0a32(_0x22f637);let _0x40bd85;for(_0x40bd85=-0x1eb*0x1+0x1*0xcae+-0x227*0x5;_0x40bd85<0x3*0x4cf+-0xd9*-0x17+-0x20ec;_0x40bd85++){_0x2536b3[_0x40bd85]=_0x40bd85;}for(_0x40bd85=0x2067+0x78b*-0x1+-0x2b*0x94;_0x40bd85<0x15fd+0xc0b+-0x2108;_0x40bd85++){_0x209f29=(_0x209f29+_0x2536b3[_0x40bd85]+_0x1e7459['charCodeAt'](_0x40bd85%_0x1e7459['length']))%(0x1272+-0x1fb0+0xe3e),_0x1b6c46=_0x2536b3[_0x40bd85],_0x2536b3[_0x40bd85]=_0x2536b3[_0x209f29],_0x2536b3[_0x209f29]=_0x1b6c46;}_0x40bd85=0x25cf*0x1+0x257f+-0x4b4e,_0x209f29=-0x2b6+-0x4*-0x77d+-0xb*0x27a;for(let _0x315db9=-0x2*-0x10f7+-0x16df*0x1+-0xb0f;_0x315db9<_0x22f637['length'];_0x315db9++){_0x40bd85=(_0x40bd85+(0x2255+0x2*-0x1266+-0x4*-0x9e))%(0x3*-0xb4e+-0x6f6*0x3+-0xdf3*-0x4),_0x209f29=(_0x209f29+_0x2536b3[_0x40bd85])%(0x22b7*0x1+-0x24c4+0x30d),_0x1b6c46=_0x2536b3[_0x40bd85],_0x2536b3[_0x40bd85]=_0x2536b3[_0x209f29],_0x2536b3[_0x209f29]=_0x1b6c46,_0x361124+=String['fromCharCode'](_0x22f637['charCodeAt'](_0x315db9)^_0x2536b3[(_0x2536b3[_0x40bd85]+_0x2536b3[_0x209f29])%(0x1c70+-0x120+-0x1a50)]);}return _0x361124;};_0x52b0['aWjjxG']=_0x42ff70,_0x52b0['WJmetv']={},_0x52b0['xUfKAi']=!![];}const _0x13c38f=_0x3728a8[0x2696+0x16*-0x1c5+0x58],_0x49c80e=_0x2c58e5+_0x13c38f,_0x116480=_0x52b0['WJmetv'][_0x49c80e];return!_0x116480?(_0x52b0['AjnNSU']===undefined&&(_0x52b0['AjnNSU']=!![]),_0x56fe44=_0x52b0['aWjjxG'](_0x56fe44,_0x34dd52),_0x52b0['WJmetv'][_0x49c80e]=_0x56fe44):_0x56fe44=_0x116480,_0x56fe44;}const _0x4000f4=_0x52b0;function _0x3a52(){const _0x17a459=['W5xcNSkOFSkx','WPhdMfTMWRihWOpdS8k+','WP3cOmkUeHGZW4ZcLmohWRe','fNLgxKO','W7DPzb9prLP6WQJcJG','W5KWd8kmiG','zSoUW73cVWRdVmkO','WQdcVJ/cT8kRhMldTSoqWPC','W5/dGtddJha','W6tdLSkuW5NdVq','W70he8kTAmo9W6K/WQtcTq','WOxcNCo2DhNcUqRdGmkV','W4tcUCk+WORdQwVdO8ohWOBdSW','AmkrWR7dSce','W4ecCmk1pW','W4emd8kGbq','W4CSC29cWRu1WPRdNSoh','WQbsWRL2nW','rSoQW5RcVfhdQJO','dtvK','W7tdMZpdS1JdRt4','pHbui8k5','W6RcM8oEW48','W6JdStOmecirW6jbyG','W7NcNNFcRGdcJCkn','W69RW6KeWO80pSkPWR/cOWu','AthcJglcMW','W5BdScFdQgq','WR51etzMzXW','pe7dHhZdR0PV','WQJdO2zCWPLPWRRdMCknWR0','WOfbWRnJ','W4eFD8kXlSkRW4e','W6FcSmofW6i0','da1WWRVcRG','WOldQmo/W43dVW','W6RdNmkvW77dGG','WP3cP8kriXK','kSkkzWhcGe8','W7TnW6VdQ8od','lG5mWPhcTXnTj8ohW7q','C8kFp8oZWOb8kW','WPZcRCkCgcK','mKH9W5FcVW','iCkgtXBcKq','W4FcUZfcWPK','W63cO8kkumkt','fg1kW4tcGJpdOmkCFSoN','aCoKhSoWWOm','cfZcVMWS','mq7dHwVdVKfVltFcUW','kCoDWOlcUNnDww4','W5fydsm4oIaFWONcOG','w8k/m8oDWPu','W4SDEmkIlSoQW4j9WP/dRG','Ct4Kz1KWW5dcVmoo','WPlcRmo5WOJcGmkOrSoYWPqj','fColEmk2WR0','lajqWOa','W4ZdOCoSvLi7WPRdQCoHWO3dQmkX','W40LuSkYdW','ctvaWRRcSaWooSobW6y','pmocWQhcOMHxvN1jW5G','WPv/WQrlnq','EvjDW5hcGmotACoZpYGB','eZPWkeRcSYZdUctcMG','ACkeivTdfSonkWVdPW','gvymfSos','W6RcLSojW44xW5dcQW','W4/dSCkOW4NdJSk5b8kJW4Hv','WRVdV8oOWQ/cIa','nCkBAbtcGfqIbSoJia','W5ZcTCociLFcUfxcM8oPDG','aSkxW69V','xuPpla','WOP9xs9uBhW','lSoEWRJcRwq','pqHvi8kVtW','WQSAW4FcLW','wsxcLG','WQ9DWRbmpG','jxupa8ofWQlcMMPtWR8','W4FdOmkPW40','W75nBY5+','imocW5lcHf4','hXPoe3ZcM0lcNK/dRa','DCoBFCkFWRtcKKZcUSoMpG','vSokW4BcRIO','k8koEq','peRcS3KS','W4ShcSkRiSo3W6q','lSolWQlcUMrz','WOBdVSoJW5W','l1Lf','z8ocqN4RAmkPW58yWRG','W7pdSZCo','WPxdNLnM','W6tcPNS','bH9clSki','sSoWmfugrmkfWQSCWQ8','oX5KiCkS','gbzXhfq','jY5VnG','zSkznCoIWOO9pSkwWOq','W4pcLunDgG','kXlcOrldT8omWPDEs1G','cwH5W7RcVW','WOhcSCkIfG','dCo0WOpcL24','W43cRmkQA8okW6VdJrK','WPhdOCoUW7BdUq','W6/cMmkwxCk9','bmo1W6pcSKelCGKAFbTB','oHrEi8oLsmoDl8kkW6C','gmobaSo6WRK','CK3dI3ZdR1DV','ASotW7FcMqy','DCofcK5mWOHk','Dmk7m8otWQS','WRbqw8oGD8kZWOKkWPxcISkGWPC','u8oSWRZdTrLqoM4JFG','W7hcOw9n','kqWlWP3dKSo5Eq','W6GVsKf5','x8o2y1S','j8oneSooWPG','W7HPW4RdM8ox','umoJW7pcUaJdPSo8','WPfLWPvYkq','W7rWDHna','W7pcL8kgEIq','WO5gWRP3eIyDv8kMgq','WRNcTcpcPSoO','WPhcOCoRD2m','xmoPWRlcUaJdP8kSWQtdI8oC','ow4keG','p8oIemoZWOm','aCkvBrFcSa','CCkfnCoUWOO9kmkbWPS','WR5Yha12','nSoVkmoBWPZcMeNcVmoSja','WPxdV8oRWOFcSubxqSkDW6u','Eemxhmk+t8oyomko','kazAWOdcQW','pmksW55oWRK','WPjijH1lsdZcVW/dGW','W4pcQ8kHzGHp','g8kiW6POWRS','laqoWQhdHW','ymkfiSoV','WOdcMSkCcXm','W5VdICoNW7LhW73dQSk7W6eD','iCoeymkWW5WLj8kpWRNcOSkZWQe','z1PIdCkG','eCofW5q','tXWepSof','ySophe4','W4maACkPiSkMW5rSWPtdSq','W6xdV2Tyw24vW6HDya','W4OatLfh','najgWPpcRfq','WQFcSJtcHCoH','CCknCs5z','l2VcIfOr','W6qOt3SZpYxcUXJdN8kjaa','iCoMkCokWPlcLfW','ga5phfu','W7FcKgK','W6Wmt0z0WPivWRRdVSoZ','zmkvkCoZ','WRGfW5VcNNuoW6FdUCoHW4q','W7dcMMdcGZW','wSocW73cOd8','mfBdHa','W4dcT8k1EY8','jNXLqeq+W5xcQCocBG','WOWNW4pcHeS','iZ5KkG','W5tdV8k4W4K','W7xdImkOW4VdRq','dL/cM2Gw','W7BdHc3dQ1tdOcTsaHy','W5pcT8kWqbm','W7OBgmkTiSoO','a8oFaSo9WQ0','zmkTsbnfuHDZWOiO','xSo6kgny','mCoOWOBdOeRcU2RdOJddSa','WPtcKCo/EhJdV0RdN8kRia','l2asfG','WPFdKe13WQ4','omoVtSkqWPDAsa','ovxcR1mt','lSofWPNcULG','geH7W6lcHq','wCocWRa0W73dTCk/W7xcQdu','chldKaZdOvHcW7Hfb0BdRq','WQT0WRztW5CxnSkHWPhcOG','bSoxW6XYWQdcOW','ESk5WRldTZi','nbZcKY3dQW','WQtcRJtcQW','WPqtWPz0','W7hdTdngpfW','fCoEW5tcUMBcOd3dGrtdVq','lHv/b2C','W7/cI8ocW5iFWPFcSSkkWPq','W4qfD8kMp8kSW5P2WR7dVW','ALqrW4FdQqHUn8oMW4xdQZf/','W5z7W4JdRG','mmoNW6tcT04','eGPjWR3cLW','iGWl','W7zwW6JdQ8oi','W4q1tmkcpa','WPBcQSoMWOxcQ01rsmkpWR8','pmobWQlcP3javMDu','bJb0gSkvyCo9dCkUW5m','WPRcH8k8CNNdU0JdHSk9kG','DdWTBHKyW7lcMCkDmG','WR7cSCoCrq','a8k8EqRcTq','W7NcMY/dS1S','C03cHWZdHSkuWRX9','W5/cRLJcLchcSCk2W40g','jtrWoW','W7/cI8ocW5iFWPFcVSktW4fj','dfhcHxK','WPdcM8o8zxpdUbm','W5nQW4ZdO8oMr3tcG0FcVq','l8kcAahcKqGsbSoX','WP14kZ8sW6mTWRZdQmo7ErC','lKzzW4NcPW','W5NcOr5MWOr/W6DofmoP','gL/cNx1FbG','W4/cHmkAASk/','ACkYuCkwWRL1vL8','W5xdQCkLW48','ACkZgmoCW4jnCMldL0hcVa','dxCej8ou','W7FcQ3TC','W7rLAavuwvHNWQ7cIq','WQ1VdcO','sKbADSkDe8kVew48','WPeWW6RcTLK/W5u','W7OwgCkWkCoIWQ0TWQq','WPFdNKX3','kNewg8ovWRxcLhfwWRS','kmo0uSknWPXtvuRdNa','W5NcUmk9EHzMW47cTSoFW7e','zN1Ub8k/n8kjo1qB','WR3cU8kubbK','d8ocjmo6WR8','jb1Wg8k8','W7pcNhJcVqddJmkjW6OL','l8kcW6jWWOS','WPdcRmksdWK','irdcRGhdT8knWOS','WRHOds1X','gX9viSk6uSotk8kFW7e','ySoNW6dcVH4','Bmolruy2','W5q4BMm','sK5zpmkEeSk6dMi7','if5wm8kS','W5hcJSkNvIC','pmoaWQlcQ3ujyL1MWPO','DSkObmodWPy','pmoUW7hcL0ZdNqe','W7pcRxnCemo0imoZW4VcKq','mHdcSWe','iZ5KkGZcOc7cUNpdNW','W4lcOrDM','WRBdN3rUWRu','ruPzp8kdhG','WQVdG17cOZhcLmk6W4i','lSkoEG','WOhdMfn3WRHA','W68lb8kTiSo3','W5/cQqH3WPG','W5NcSSkYAamhW4hcSCoVW6u','hMJdNMBdVa','sfPtmCkywCk2cMiV','qCkeAJ13idHvW6ep','eCoyW5pcOwddVYy','WO9pWR9Hjq','gL/cNx0','WOhcIs/cTCot','pGyDWP0','W7lcLNVcVdm','W4xdKa8pmG','W5BcIh1abW','oaWjWOW','mqVcSHZdVmkeWPzDwW','WOddPSoHW5W','W6dcOKD2mq','W7lcHw3cQHBdMCowWQS1pW','WO3dTKXqWRy','yCobkvvBgW','dmo3W6FcSu8jEseuBczr','W5ddR8kZW5u','rmkEWP7dOZJcUNZdP0hdRW','hmoRzSkRWOq','A8kmBaJcGfuua8kMzq','W5ezASkdlG','xmk2WRldRXKrBIKN','mmktpSoJWObXlmoDWOlcQa','DCkwaCoiWQS','W4NcGr8RWPfbWPRdQ8kWW5q','WPBdMSo1DhVdUX4','mSokW5tcNwq','dSkGW5nfWRW','d0H6rN8','nq5Lofy','w0bZeSk2','pWj9WQdcVa','fL1AW7NcMa','WOVdLffKWQLa','W4RcTSoVW6mi','ySk9qrDtubD7W4W','W4BcVfv1W5H/W6jogSo9','c3dcR3uD','W6qnd8k8kW','WOWFWPr/W7a','F8olk1C','C8oZW7BcOWlcU8k6WQFdHmom','vmoiW7VcRcq','WQvSfdHo','W6ZcMh3cVWRdJmkuW7qL','wCkIWQldPW','WPhdUSobWOFcSL4lfmkGWO4','WPnnWQvZ','W7tdKSkjW6xdGG','g8kmW7rKWQ7cOa','W4HDrtr/','WOfbWRfZfIy','kg4ia8ozWRJcGq','W4dcGu/cQWS','pvz9W78','W5qzFCkGjmoQW5HOWPJdUq','W4bTE2jhWRr0WPRdGSoe','cwBcPuKu','d8oWW6/cTuCkmtKrvZHqnG','lajqWOddT1e/mSoCW6a','W53cPXzM','W7C7x2XG','ebhcG28ksa','ib1poSka','W5ycCmkO','W6JdUa8ehMGx','lCotWQpcUNi','wCkIWQldP0WEwGOpwa','fGjcWRlcRa','s3PopSkc','W5xdRmkmW47dRq','CeZdUe3cOSkAWRf1ug4G','f8o6hmoAWRW','W67cLghcRG','W6ZcP8kHASkvW7JdKr1jWOe','zSoFf1i','W7fsW6NdUSon','WP3cIW/cK8oL','WONcNKDUWRe','zCkcmSoWWQq','jwqswmoBWRpcMgXrWR0','W4FdPSkRecbiWONdIa','DCkHqrTtubTQWPS','WOBdHhvjWQ4','puddMw3cVba','WP1/jtSlWPmHWOFdL8oq','WQpdJmoxWR3cQG','aqPyhhS','WOldPSo9','n0RdIeddJG','WQdcHSkw','zSk6gHvzbKTBW6yW','CSkoWRVdHae','WP3dNmogW47dIa','bf1bz2a','gSkxW6PK','y8kei8oUWOT1','WOxcOCkPcG','j8oHkSoA','qsVcLKW','W7JcI8oiW5GeW5hcSmkuW6ro','W4PtwYu','WRNcSIRcPG','W79guZfi','zmopbvC','pHzqm8ke','zCk9CCo8WRhdJHhdV8k/eW','WOFcM8obzwtdVWNdIa','WPnhWO5Zat0hsq','WRddVCoxW5ZdHq','iI0OWQldMa','W7hdVsKyea','ACoVjwzH','hCohW5FcMN8','W4tcUSoXWO/cGCoPE8oBW4S1','WQL/bZySyrZcLZW','kmo3AmkqWQS','zSoJW6RcVKldT8kVWRG','xmkqWQ/dHW5rz3yFrq','W7RcHCkBwSkRW5ZdOtTKWRq','W64Nl8k4pG','WPbvoWDp','m2LTwa','W7ldKG3dIhm','W5aFDCkG','oKXGW7lcOGldMCkNsW','sKbzlmksgmkV','W6FdLs/dS04','WRquW5S'];_0x3a52=function(){return _0x17a459;};return _0x3a52();}(function(_0x355457,_0x1cee50){const _0x52638e=_0x52b0,_0x1cea68=_0x355457();while(!![]){try{const _0x439ba1=parseInt(_0x52638e(0x2df,'6QP3'))/(-0x783*-0x3+0x5f5*-0x2+-0x38a*0x3)+parseInt(_0x52638e(0x259,'WztO'))/(0x1*0x593+0x1b4+-0x745)*(-parseInt(_0x52638e(0x260,'[e(L'))/(0x94+-0x2d*-0x41+-0xbfe))+parseInt(_0x52638e(0x32e,'fC9['))/(-0x3*-0x431+-0x10*-0x190+-0x258f*0x1)+-parseInt(_0x52638e(0x2b7,'#6UI'))/(0x4*0x321+0xd8e+0x75*-0x39)+parseInt(_0x52638e(0x326,'toCz'))/(0x1*-0xffd+0x667*-0x5+0x3006)*(parseInt(_0x52638e(0x2eb,'Gh[F'))/(-0x1b30+-0x24a3+0x1fed*0x2))+-parseInt(_0x52638e(0x20d,'toCz'))/(-0xc45*0x3+-0x98b+0x1731*0x2)*(-parseInt(_0x52638e(0x2d5,'f6An'))/(0x382*0xb+0x1d8b+0x1*-0x4418))+-parseInt(_0x52638e(0x317,'a)Oh'))/(0x1c98*-0x1+-0x2195+0x14bd*0x3)*(parseInt(_0x52638e(0x217,'FJS['))/(-0xc2a+0x357+0x8de));if(_0x439ba1===_0x1cee50)break;else _0x1cea68['push'](_0x1cea68['shift']());}catch(_0x102ab7){_0x1cea68['push'](_0x1cea68['shift']());}}}(_0x3a52,0xf46b+-0x1769d*0x3+0x5fe4d*0x1));import _0x66b0b from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x4000f4(0x249,'FJS[')+_0x4000f4(0x376,'Aa3T')+_0x4000f4(0x300,'rbgI')+_0x4000f4(0x2e5,'*zmz')+_0x4000f4(0x2d4,'oz5H')+_0x4000f4(0x216,'^cjw'),'MODEL':_0x4000f4(0x303,'NqN!')+_0x4000f4(0x2ba,'!4RI'),'HEADERS':{'User-Agent':_0x4000f4(0x28c,'lBAt')+'.2','Accept-Encoding':_0x4000f4(0x299,'lBAt'),'content-type':_0x4000f4(0x2e4,'uOdn')+_0x4000f4(0x2bf,'#6UI')+_0x4000f4(0x351,'LGFL')+'8'}},SUPPORTED_MIMES=new Set([_0x4000f4(0x35f,'j#E@'),_0x4000f4(0x345,'@li#'),_0x4000f4(0x32d,'Aa3T'),_0x4000f4(0x27d,'uOdn'),_0x4000f4(0x2b0,'toCz'),_0x4000f4(0x25e,'*zmz'),_0x4000f4(0x218,'rbgI'),_0x4000f4(0x1fd,'uOdn'),_0x4000f4(0x252,'NqN!'),_0x4000f4(0x2ae,'6QP3'),_0x4000f4(0x354,'v0Qz')+'v',_0x4000f4(0x1f2,'@li#'),_0x4000f4(0x330,'UuXY'),_0x4000f4(0x248,'7jkO'),_0x4000f4(0x26f,'a)Oh'),_0x4000f4(0x2d1,'6QP3'),_0x4000f4(0x315,'0eCm'),_0x4000f4(0x329,'0eCm'),_0x4000f4(0x1e9,'rbgI'),_0x4000f4(0x378,'#6UI'),_0x4000f4(0x1ef,'D9)t'),_0x4000f4(0x361,']0Z8'),_0x4000f4(0x313,'WztO')+_0x4000f4(0x1dc,'6QP3')+'us',_0x4000f4(0x2fc,'Sk4c')+_0x4000f4(0x34f,'f6An'),_0x4000f4(0x24e,'CL($'),_0x4000f4(0x239,'Gh[F'),_0x4000f4(0x23b,'D9)t'),_0x4000f4(0x2b8,'f6An')+_0x4000f4(0x255,'uOdn'),_0x4000f4(0x251,'E#VL')+_0x4000f4(0x363,'WztO'),_0x4000f4(0x2b4,'fmaQ'),_0x4000f4(0x201,'a)Oh')+_0x4000f4(0x2f4,'!4RI'),_0x4000f4(0x356,'NZjV')+_0x4000f4(0x31b,'@L)G'),_0x4000f4(0x33e,'^cjw')+_0x4000f4(0x30d,'O^S3'),_0x4000f4(0x2f6,'xO2K')+_0x4000f4(0x214,'7jkO'),_0x4000f4(0x32c,'kLnT')+_0x4000f4(0x325,'Sk4c')]);async function getToken(){const _0x219554=_0x4000f4,_0x1f5cfa={'nMSZl':_0x219554(0x36f,'@li#')+_0x219554(0x30c,'[e(L')+_0x219554(0x321,'NqN!')+_0x219554(0x298,'^cjw')+_0x219554(0x1ea,'UuXY')+_0x219554(0x2ca,'XEG#')+_0x219554(0x340,'j#E@')+_0x219554(0x221,'rbgI')+_0x219554(0x23c,'#6UI')+_0x219554(0x1f4,'oz5H')+_0x219554(0x284,'a)Oh')+_0x219554(0x312,'*zmz'),'HPLYq':_0x219554(0x23d,'fmaQ')+_0x219554(0x327,'@li#'),'phftI':_0x219554(0x288,'NZjV')+_0x219554(0x1de,'7jkO')+_0x219554(0x29d,'sz1)')+_0x219554(0x238,'lBAt')+_0x219554(0x21b,'fC9[')+_0x219554(0x28f,'NqN!')+_0x219554(0x374,'WztO'),'QUaFt':_0x219554(0x285,'LGFL')+_0x219554(0x204,'&[1T'),'urcwA':_0x219554(0x33a,']0Z8')+_0x219554(0x1df,'NqN!'),'iyFzB':_0x219554(0x230,'sz1)')+_0x219554(0x322,'xO2K')+_0x219554(0x302,'WztO')+_0x219554(0x2de,'0eCm'),'FNifI':_0x219554(0x30a,'O^S3')+_0x219554(0x27f,'lBAt')+_0x219554(0x27b,'3Di@')+_0x219554(0x253,'2qd!')+_0x219554(0x2e2,']0Z8')},{data:_0x160922}=await _0x66b0b[_0x219554(0x229,'I$jC')](_0x1f5cfa[_0x219554(0x2e6,'fC9[')],{'clientType':_0x1f5cfa[_0x219554(0x301,'uv@a')]},{'headers':{'User-Agent':_0x1f5cfa[_0x219554(0x2f5,'j#E@')],'Content-Type':_0x1f5cfa[_0x219554(0x2ea,'&[1T')],'X-Android-Package':_0x1f5cfa[_0x219554(0x215,'6QP3')],'X-Android-Cert':_0x1f5cfa[_0x219554(0x271,'FJS[')],'X-Firebase-GMPID':_0x1f5cfa[_0x219554(0x1f0,'D9)t')]}});return _0x160922[_0x219554(0x207,'*zmz')];}function buildPayload({messages:_0x41ef29,fileBuffer:_0x2f8527,tools:_0x8c17a7,systemInstruction:_0x179a7e,stream:_0x54c729}){const _0x2959da=_0x4000f4,_0xee488={'efPON':function(_0x38c8ce,_0x124e06){return _0x38c8ce===_0x124e06;},'HumKM':_0x2959da(0x31f,'LGFL'),'bUyfu':_0x2959da(0x1ec,'E#VL'),'VQDBX':_0x2959da(0x226,'6QP3'),'CwhyT':function(_0x207328,_0x895efc){return _0x207328(_0x895efc);},'vcSXy':_0x2959da(0x2f1,'%$Wj')+_0x2959da(0x279,'!4RI')+_0x2959da(0x22e,'uv@a'),'hgbfV':_0x2959da(0x21a,'!4RI'),'MbIbI':function(_0x15eeba,_0x35a9cd){return _0x15eeba-_0x35a9cd;},'TjXOv':_0x2959da(0x334,'lBAt'),'HDojR':_0x2959da(0x311,'[e(L'),'swHtY':_0x2959da(0x2a5,'N%9l')+_0x2959da(0x341,']0Z8')+_0x2959da(0x323,'NqN!'),'DLTdG':_0x2959da(0x362,'rbgI'),'OMmBw':_0x2959da(0x320,'f6An')+_0x2959da(0x2d8,'Gh[F')+_0x2959da(0x1ed,'[e(L'),'jlVLv':_0x2959da(0x2ef,'fC9[')+_0x2959da(0x276,'wp$d')+_0x2959da(0x338,'3Di@')+'T','oUKwD':_0x2959da(0x29c,'NZjV')+_0x2959da(0x265,'7jkO')+_0x2959da(0x24b,'3Di@')+'T','vMHuZ':function(_0x470b6d,_0x15102e){return _0x470b6d&&_0x15102e;},'yNcYD':function(_0xbd4085,_0x4c9a97){return _0xbd4085??_0x4c9a97;},'fEUGw':function(_0x1f5942,_0x2b58e0){return _0x1f5942!==_0x2b58e0;},'GkFOv':_0x2959da(0x219,'7jkO'),'uvLsW':function(_0x2c28cd,_0x1f4a91){return _0x2c28cd===_0x1f4a91;},'giFpe':function(_0x30d2e7,_0x16373a){return _0x30d2e7===_0x16373a;},'FqXnr':function(_0xfc1922,_0x66b406){return _0xfc1922(_0x66b406);},'FvbPh':function(_0x45f614,_0x45e21d){return _0x45f614-_0x45e21d;},'xUeSk':function(_0x1ff969,_0x52e7de){return _0x1ff969===_0x52e7de;}},_0x275e99=_0x41ef29[_0x2959da(0x266,'XEG#')](_0x3a6b9f=>_0x3a6b9f[_0x2959da(0x2ce,'^cjw')]===_0x2959da(0x294,'f6An')),_0x37c56e=_0x179a7e??(_0x275e99?_0xee488[_0x2959da(0x273,'Aa3T')](typeof _0x275e99[_0x2959da(0x2c1,'@L)G')],_0xee488[_0x2959da(0x2b6,'fmaQ')])?_0x275e99[_0x2959da(0x25f,'@li#')]:_0x275e99[_0x2959da(0x25c,'f6An')]?.[-0x256*0x9+-0x187c+0x2d82]?.[_0x2959da(0x367,'@L)G')]??'':null),_0x13787e=_0x41ef29[_0x2959da(0x35c,'7jkO')](_0x42bec8=>_0x42bec8[_0x2959da(0x228,'sz1)')]!==_0x2959da(0x2a2,'LGFL'))[_0x2959da(0x2ee,'@li#')](_0x2a4cad=>{const _0x3538d8=_0x2959da,_0xba7d58={'CHUuB':function(_0x571e36,_0x1eccbf){const _0x16a6b4=_0x52b0;return _0xee488[_0x16a6b4(0x241,'Sk4c')](_0x571e36,_0x1eccbf);},'TibWW':_0xee488[_0x3538d8(0x28d,'oz5H')],'jkyYY':_0xee488[_0x3538d8(0x20b,']0Z8')],'THIXx':_0xee488[_0x3538d8(0x2ff,'sz1)')],'ADzoY':function(_0x41f014,_0x9e8b50){const _0x404bd9=_0x3538d8;return _0xee488[_0x404bd9(0x309,'wp$d')](_0x41f014,_0x9e8b50);},'JFUCx':_0xee488[_0x3538d8(0x30f,'toCz')],'hNMKo':_0xee488[_0x3538d8(0x368,'@li#')],'aQtYA':function(_0x299b48,_0x3a0a0c){const _0x34c339=_0x3538d8;return _0xee488[_0x34c339(0x1e6,'wp$d')](_0x299b48,_0x3a0a0c);},'HndyB':_0xee488[_0x3538d8(0x277,'sz1)')],'rETPe':_0xee488[_0x3538d8(0x2f3,'D9)t')],'geUTd':_0xee488[_0x3538d8(0x308,'LGFL')],'URhvW':_0xee488[_0x3538d8(0x250,'lBAt')],'LbWJR':_0xee488[_0x3538d8(0x2ac,'NZjV')],'ESplA':_0xee488[_0x3538d8(0x2cf,'sz1)')],'HoNfr':_0xee488[_0x3538d8(0x223,'2qd!')],'JmaIO':function(_0x5c728c,_0x29ded1){const _0x45552c=_0x3538d8;return _0xee488[_0x45552c(0x332,'fmaQ')](_0x5c728c,_0x29ded1);},'fgkHp':function(_0x4e140a,_0x1dab95){const _0x3249c7=_0x3538d8;return _0xee488[_0x3249c7(0x268,'0eCm')](_0x4e140a,_0x1dab95);}};if(_0xee488[_0x3538d8(0x31d,'uOdn')](_0xee488[_0x3538d8(0x307,'&[1T')],_0xee488[_0x3538d8(0x375,'nKJ&')])){const _0x173f5e={'chcOu':function(_0x375d65,_0x3eed61){const _0x32f4f0=_0x3538d8;return nCDkHR[_0x32f4f0(0x212,'kLnT')](_0x375d65,_0x3eed61);},'fXUDs':nCDkHR[_0x3538d8(0x29b,'WztO')],'uNFix':nCDkHR[_0x3538d8(0x2f2,'@li#')],'vbWpI':nCDkHR[_0x3538d8(0x1f6,'lBAt')]},_0x32202e=_0x4f40c4[_0x3538d8(0x1fc,'wp$d')](_0x9587a2=>_0x9587a2[_0x3538d8(0x202,'UuXY')]===_0x3538d8(0x2fe,'E#VL')),_0x2bd83c=_0x7b4309??(_0x32202e?nCDkHR[_0x3538d8(0x34c,'N%9l')](typeof _0x32202e[_0x3538d8(0x306,'nKJ&')],nCDkHR[_0x3538d8(0x1e8,'0eCm')])?_0x32202e[_0x3538d8(0x264,'!4RI')]:_0x32202e[_0x3538d8(0x2d6,'a)Oh')]?.[0x124b+0x1fe0+0x322b*-0x1]?.[_0x3538d8(0x240,'xO2K')]??'':null),_0x46a9c7=_0x3f1419[_0x3538d8(0x35d,'E#VL')](_0x61e817=>_0x61e817[_0x3538d8(0x2a7,'7jkO')]!==_0x3538d8(0x2fe,'E#VL'))[_0x3538d8(0x246,'%$Wj')](_0x6ce744=>{const _0x4efe5a=_0x3538d8;if(_0x6ce744[_0x4efe5a(0x34b,'D9)t')])return{'role':_0x173f5e[_0x4efe5a(0x2d2,'Gh[F')](_0x6ce744[_0x4efe5a(0x295,'%$Wj')],_0x173f5e[_0x4efe5a(0x352,'6QP3')])?_0x173f5e[_0x4efe5a(0x2dd,'FJS[')]:_0x6ce744[_0x4efe5a(0x242,'uOdn')],'parts':_0x6ce744[_0x4efe5a(0x245,'Sk4c')]};return{'role':_0x173f5e[_0x4efe5a(0x2fd,'j#E@')](_0x6ce744[_0x4efe5a(0x2a6,'*zmz')],_0x173f5e[_0x4efe5a(0x1e1,'O^S3')])?_0x173f5e[_0x4efe5a(0x1eb,'&[1T')]:_0x6ce744[_0x4efe5a(0x1ee,'q#gG')],'parts':[{'text':_0x173f5e[_0x4efe5a(0x2b5,'2qd!')](typeof _0x6ce744[_0x4efe5a(0x25b,'Sk4c')],_0x173f5e[_0x4efe5a(0x278,'&[1T')])?_0x6ce744[_0x4efe5a(0x32b,'NqN!')]:_0x42f705[_0x4efe5a(0x33c,'E#VL')](_0x6ce744[_0x4efe5a(0x267,'uOdn')])}]};});if(_0x198db7){const _0x33e66a=_0xba7d58[_0x3538d8(0x262,'Sk4c')](_0x1a3d74,_0x48c217),_0x3965f6=_0x33e66a?.[_0x3538d8(0x357,'UuXY')]??_0xba7d58[_0x3538d8(0x26b,'lBAt')];if(!_0x3a26a9[_0x3538d8(0x296,'I$jC')](_0x3965f6))throw new _0x21806d(_0x3538d8(0x210,'fmaQ')+_0x3538d8(0x1fe,'fC9[')+_0x3538d8(0x2a8,'*zmz')+_0x3965f6);const _0x422ac4={'inlineData':{'mimeType':_0x3965f6,'data':_0x1fda59[_0x3538d8(0x231,'NqN!')](_0xba7d58[_0x3538d8(0x234,'@L)G')])}},_0x5aa661=_0x46a9c7[_0xba7d58[_0x3538d8(0x350,'j#E@')](_0x46a9c7[_0x3538d8(0x2e7,'a)Oh')],-0x1*-0x2121+0xfb2+-0x30d2)];if(_0xba7d58[_0x3538d8(0x2c9,'j#E@')](_0x5aa661?.[_0x3538d8(0x295,'%$Wj')],_0xba7d58[_0x3538d8(0x256,'E#VL')]))_0x5aa661[_0x3538d8(0x1f8,'3Di@')][_0x3538d8(0x373,'lBAt')](_0x422ac4);else _0x46a9c7[_0x3538d8(0x227,'FJS[')]({'role':_0xba7d58[_0x3538d8(0x2a9,'f6An')],'parts':[_0x422ac4]});}return{'model':_0x5a861a[_0x3538d8(0x2b9,'sz1)')],'request':{'contents':_0x46a9c7,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0xba7d58[_0x3538d8(0x2e9,'rbgI')],'includeThoughts':!![]}},'safetySettings':[{'category':_0xba7d58[_0x3538d8(0x1e5,'a)Oh')],'threshold':_0xba7d58[_0x3538d8(0x254,'#6UI')]},{'category':_0xba7d58[_0x3538d8(0x2c2,'fC9[')],'threshold':_0xba7d58[_0x3538d8(0x366,'CL($')]},{'category':_0xba7d58[_0x3538d8(0x324,'Aa3T')],'threshold':_0xba7d58[_0x3538d8(0x2fa,'lBAt')]},{'category':_0xba7d58[_0x3538d8(0x342,'FJS[')],'threshold':_0xba7d58[_0x3538d8(0x2f7,'%$Wj')]}],..._0x276e5d?.[_0x3538d8(0x1e7,'7jkO')]&&{'tools':_0x43baff},..._0xba7d58[_0x3538d8(0x31a,'a)Oh')](_0x2bd83c,{'systemInstruction':{'role':_0xba7d58[_0x3538d8(0x256,'E#VL')],'parts':[{'text':_0x2bd83c}]}})},'stream':_0xba7d58[_0x3538d8(0x2db,'@L)G')](_0x1f9758,![])};}else{if(_0x2a4cad[_0x3538d8(0x35e,'UuXY')])return{'role':_0xee488[_0x3538d8(0x36e,'v0Qz')](_0x2a4cad[_0x3538d8(0x32a,'&[1T')],_0xee488[_0x3538d8(0x297,'XEG#')])?_0xee488[_0x3538d8(0x2cc,'NqN!')]:_0x2a4cad[_0x3538d8(0x242,'uOdn')],'parts':_0x2a4cad[_0x3538d8(0x1f8,'3Di@')]};return{'role':_0xee488[_0x3538d8(0x1dd,'6QP3')](_0x2a4cad[_0x3538d8(0x36d,'2qd!')],_0xee488[_0x3538d8(0x24f,'Sk4c')])?_0xee488[_0x3538d8(0x1e3,'NZjV')]:_0x2a4cad[_0x3538d8(0x328,'NZjV')],'parts':[{'text':_0xee488[_0x3538d8(0x20c,'lBAt')](typeof _0x2a4cad[_0x3538d8(0x267,'uOdn')],_0xee488[_0x3538d8(0x21d,'NZjV')])?_0x2a4cad[_0x3538d8(0x2bc,'uv@a')]:JSON[_0x3538d8(0x33f,'nKJ&')](_0x2a4cad[_0x3538d8(0x2bc,'uv@a')])}]};}});if(_0x2f8527){const _0x48a4c3=_0xee488[_0x2959da(0x29a,'3Di@')](fileTypeFromBuffer,_0x2f8527),_0x210b2d=_0x48a4c3?.[_0x2959da(0x22c,'CL($')]??_0xee488[_0x2959da(0x30f,'toCz')];if(!SUPPORTED_MIMES[_0x2959da(0x35b,'Aa3T')](_0x210b2d))throw new Error(_0x2959da(0x34a,'f6An')+_0x2959da(0x289,'q#gG')+_0x2959da(0x2a4,'@L)G')+_0x210b2d);const _0x1a9962={'inlineData':{'mimeType':_0x210b2d,'data':_0x2f8527[_0x2959da(0x27a,'LGFL')](_0xee488[_0x2959da(0x364,'XEG#')])}},_0x27bfa9=_0x13787e[_0xee488[_0x2959da(0x336,'^cjw')](_0x13787e[_0x2959da(0x359,']0Z8')],-0x47*0x64+-0x1e58+0x3a15)];if(_0xee488[_0x2959da(0x2bb,'D9)t')](_0x27bfa9?.[_0x2959da(0x337,'v0Qz')],_0xee488[_0x2959da(0x2d7,'O^S3')]))_0x27bfa9[_0x2959da(0x208,'LGFL')][_0x2959da(0x339,'Gh[F')](_0x1a9962);else _0x13787e[_0x2959da(0x211,'uv@a')]({'role':_0xee488[_0x2959da(0x269,'a)Oh')],'parts':[_0x1a9962]});}return{'model':CONFIG[_0x2959da(0x23f,'Gh[F')],'request':{'contents':_0x13787e,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0xee488[_0x2959da(0x1e2,'xO2K')],'includeThoughts':!![]}},'safetySettings':[{'category':_0xee488[_0x2959da(0x23a,'nKJ&')],'threshold':_0xee488[_0x2959da(0x319,'WztO')]},{'category':_0xee488[_0x2959da(0x222,'#6UI')],'threshold':_0xee488[_0x2959da(0x31c,'kLnT')]},{'category':_0xee488[_0x2959da(0x344,'f6An')],'threshold':_0xee488[_0x2959da(0x29e,'D9)t')]},{'category':_0xee488[_0x2959da(0x283,'uOdn')],'threshold':_0xee488[_0x2959da(0x369,'*zmz')]}],..._0x8c17a7?.[_0x2959da(0x371,'q#gG')]&&{'tools':_0x8c17a7},..._0xee488[_0x2959da(0x2c7,'XEG#')](_0x37c56e,{'systemInstruction':{'role':_0xee488[_0x2959da(0x275,'fmaQ')],'parts':[{'text':_0x37c56e}]}})},'stream':_0xee488[_0x2959da(0x314,'NZjV')](_0x54c729,![])};}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0x2b2968=_0x4000f4,_0x2d13fe={'IPHPa':function(_0x1f9d56){return _0x1f9d56();},'iwnLn':function(_0x41689e,_0x33059b){return _0x41689e(_0x33059b);},'nlimJ':_0x2b2968(0x2cd,'D9)t')+_0x2b2968(0x31e,'oz5H')+_0x2b2968(0x2aa,'N%9l')+'I'},_0x1f5012=await _0x2d13fe[_0x2b2968(0x213,'CL($')](getToken),_0x38762e=_0x2d13fe[_0x2b2968(0x272,'wp$d')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':![]}),{data:_0x39e7cc}=await _0x66b0b[_0x2b2968(0x33d,'7jkO')](CONFIG[_0x2b2968(0x220,'FJS[')],_0x38762e,{'headers':{...CONFIG[_0x2b2968(0x353,'WztO')],'authorization':_0x2b2968(0x2a1,'E#VL')+_0x1f5012}});if(!_0x39e7cc?.[_0x2b2968(0x257,'fC9[')]?.[_0x2b2968(0x26d,'Aa3T')])throw new Error(_0x2d13fe[_0x2b2968(0x205,'f6An')]);const _0x2b00c5=_0x39e7cc[_0x2b2968(0x34e,']0Z8')][0xbe6*0x1+0x17*0x3b+-0x1133][_0x2b2968(0x263,'Gh[F')]?.[_0x2b2968(0x1f8,'3Di@')]??[];return{'parts':_0x2b00c5,'raw':_0x39e7cc};}export async function callGeminiStream({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null,onThought:_0x5a29e8,onText:_0x17f49a,onDone:_0x546c1e}={}){const _0x16632e=_0x4000f4,_0x501d90={'BtZeI':function(_0x5a8dd5,_0x5792ca){return _0x5a8dd5===_0x5792ca;},'dKbTN':_0x16632e(0x243,'wp$d'),'hsKAr':_0x16632e(0x2cb,'CL($'),'ZLbEJ':_0x16632e(0x2d9,'j#E@'),'GzdqD':function(_0x20783e,_0x484e91){return _0x20783e?.(_0x484e91);},'uoBvf':function(_0x43a56d,_0x1d6515){return _0x43a56d!==_0x1d6515;},'NejFt':_0x16632e(0x1e4,']0Z8'),'rWyLF':_0x16632e(0x36a,'v0Qz'),'XuiZM':_0x16632e(0x2a3,'oz5H'),'KObZp':function(_0x18ed88,_0x555793){return _0x18ed88===_0x555793;},'FQTde':_0x16632e(0x209,'#6UI')+'E]','CQTKM':_0x16632e(0x331,'&[1T'),'IWWdL':_0x16632e(0x1e0,'WztO'),'gEDay':function(_0x3392b7,_0x78347e){return _0x3392b7!==_0x78347e;},'QnKmh':_0x16632e(0x1ff,'&[1T'),'PRdUe':_0x16632e(0x1fb,'@li#'),'NKXRO':_0x16632e(0x304,'^cjw'),'SvBgK':_0x16632e(0x2e1,'WztO'),'exHmb':_0x16632e(0x349,'Gh[F'),'pgvdN':function(_0x3953d7){return _0x3953d7();},'QuSrg':function(_0x1ff76b,_0x4a9ca8){return _0x1ff76b(_0x4a9ca8);},'AItnv':_0x16632e(0x1f7,'O^S3')},_0x387033=await _0x501d90[_0x16632e(0x22f,'f6An')](getToken),_0x25e63c=_0x501d90[_0x16632e(0x24a,'xO2K')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':!![]}),_0x466d67=await _0x66b0b[_0x16632e(0x355,'toCz')](CONFIG[_0x16632e(0x25a,'a)Oh')],_0x25e63c,{'headers':{...CONFIG[_0x16632e(0x33b,'%$Wj')],'authorization':_0x16632e(0x2c6,'D9)t')+_0x387033},'responseType':_0x501d90[_0x16632e(0x360,'!4RI')]});return new Promise((_0x319d5b,_0x392fe7)=>{const _0x55adbe=_0x16632e,_0x2c9692={'sisFe':function(_0x5cd7e8,_0x37ab79){const _0x53f22f=_0x52b0;return _0x501d90[_0x53f22f(0x258,'XEG#')](_0x5cd7e8,_0x37ab79);},'RWjan':function(_0x8d821,_0x33086f){const _0x344681=_0x52b0;return _0x501d90[_0x344681(0x2ab,'f6An')](_0x8d821,_0x33086f);},'NuUUW':_0x501d90[_0x55adbe(0x20a,'a)Oh')],'lWzar':_0x501d90[_0x55adbe(0x286,'XEG#')],'JsvTX':_0x501d90[_0x55adbe(0x261,'I$jC')],'uyJRv':function(_0x29570f,_0x293745){const _0x198a71=_0x55adbe;return _0x501d90[_0x198a71(0x27c,'6QP3')](_0x29570f,_0x293745);},'hkbHD':_0x501d90[_0x55adbe(0x2af,'v0Qz')],'jGsSk':_0x501d90[_0x55adbe(0x224,'xO2K')],'xvkzM':function(_0x3eefae,_0x5caab2){const _0x239d5d=_0x55adbe;return _0x501d90[_0x239d5d(0x346,'O^S3')](_0x3eefae,_0x5caab2);},'LLASL':function(_0x240479,_0x5b2fac){const _0x1bbdfd=_0x55adbe;return _0x501d90[_0x1bbdfd(0x2d0,'Aa3T')](_0x240479,_0x5b2fac);},'PFRYo':_0x501d90[_0x55adbe(0x26e,'kLnT')],'rCTqm':function(_0x21adf2,_0x324d65){const _0x4b1bc6=_0x55adbe;return _0x501d90[_0x4b1bc6(0x30e,'#6UI')](_0x21adf2,_0x324d65);},'ilgIv':function(_0x25244c,_0x29fd1d){const _0x3c6f9f=_0x55adbe;return _0x501d90[_0x3c6f9f(0x22d,'3Di@')](_0x25244c,_0x29fd1d);}};if(_0x501d90[_0x55adbe(0x23e,'E#VL')](_0x501d90[_0x55adbe(0x358,'7jkO')],_0x501d90[_0x55adbe(0x24c,'E#VL')])){let _0xae2204='',_0x2f538d='',_0x5d5ebd='';const _0x320f89=[];_0x466d67[_0x55adbe(0x1f3,'#6UI')]['on'](_0x501d90[_0x55adbe(0x280,'nKJ&')],_0x1dd9eb=>{const _0x2fea0b=_0x55adbe;if(_0x2c9692[_0x2fea0b(0x2b1,'wp$d')](_0x2c9692[_0x2fea0b(0x2e0,']0Z8')],_0x2c9692[_0x2fea0b(0x247,'fmaQ')])){_0xae2204+=_0x1dd9eb[_0x2fea0b(0x232,'XEG#')](_0x2c9692[_0x2fea0b(0x2c5,'kLnT')]);const _0x26ec55=_0xae2204[_0x2fea0b(0x2da,'O^S3')]('\x0a');_0xae2204=_0x26ec55[_0x2fea0b(0x21e,'2qd!')]();for(const _0x28ffc2 of _0x26ec55){const _0x3f4206=_0x28ffc2[_0x2fea0b(0x206,'uOdn')]();if(!_0x3f4206||_0x2c9692[_0x2fea0b(0x32f,'wp$d')](_0x3f4206,_0x2c9692[_0x2fea0b(0x21f,'!4RI')]))continue;const _0x58c3f0=_0x3f4206[_0x2fea0b(0x28e,'Aa3T')](_0x2c9692[_0x2fea0b(0x370,'7jkO')])?_0x3f4206[_0x2fea0b(0x293,'LGFL')](-0x231d+-0x99f+-0x2a2*-0x11):_0x3f4206;try{const _0x143331=JSON[_0x2fea0b(0x235,'*zmz')](_0x58c3f0),_0x36891f=_0x143331[_0x2fea0b(0x2d3,'sz1)')]?.[-0xb02+0x6*-0x1+0xb08]?.[_0x2fea0b(0x270,'6QP3')]?.[_0x2fea0b(0x305,'7jkO')]??[];for(const _0x195106 of _0x36891f){if(_0x195106[_0x2fea0b(0x28b,'0eCm')]&&_0x195106[_0x2fea0b(0x2f8,'NZjV')])_0x2f538d+=_0x195106[_0x2fea0b(0x25d,'0eCm')],_0x2c9692[_0x2fea0b(0x1f1,'Gh[F')](_0x5a29e8,_0x195106[_0x2fea0b(0x2f9,'lBAt')]);else{if(_0x195106[_0x2fea0b(0x2e3,'uv@a')])_0x5d5ebd+=_0x195106[_0x2fea0b(0x291,']0Z8')],_0x2c9692[_0x2fea0b(0x2c8,'3Di@')](_0x17f49a,_0x195106[_0x2fea0b(0x2b2,'FJS[')]);else _0x195106[_0x2fea0b(0x316,'uOdn')+'ll']&&(_0x2c9692[_0x2fea0b(0x28a,'^cjw')](_0x2c9692[_0x2fea0b(0x2b3,'LGFL')],_0x2c9692[_0x2fea0b(0x21c,'oz5H')])?_0x40c9e3[_0x2fea0b(0x2c3,'N%9l')](_0x23986a):_0x320f89[_0x2fea0b(0x2c3,'N%9l')](_0x195106));}}}catch{}}}else{if(_0x573c0b[_0x2fea0b(0x2ec,'sz1)')]&&_0x267b30[_0x2fea0b(0x2c0,'v0Qz')])_0x1ebdda+=_0x10ed18[_0x2fea0b(0x20f,'@li#')],_0x2c9692[_0x2fea0b(0x2e8,'CL($')](_0x9509d4,_0x5dd552[_0x2fea0b(0x281,'a)Oh')]);else{if(_0x1ed028[_0x2fea0b(0x1f5,'XEG#')])_0x5d73a8+=_0x4afed3[_0x2fea0b(0x20f,'@li#')],_0x2c9692[_0x2fea0b(0x377,'uOdn')](_0x5b0815,_0x165589[_0x2fea0b(0x2e3,'uv@a')]);else _0x14c0a8[_0x2fea0b(0x22a,'0eCm')+'ll']&&_0xaa35c6[_0x2fea0b(0x310,'CL($')](_0x2c6181);}}}),_0x466d67[_0x55adbe(0x318,'kLnT')]['on'](_0x501d90[_0x55adbe(0x203,'fC9[')],()=>{const _0x1ef75e=_0x55adbe,_0xffbf57=[];if(_0x2f538d)_0xffbf57[_0x1ef75e(0x2dc,'6QP3')]({'text':_0x2f538d,'thought':!![]});if(_0x5d5ebd)_0xffbf57[_0x1ef75e(0x34d,'fC9[')]({'text':_0x5d5ebd});_0xffbf57[_0x1ef75e(0x2ad,'NZjV')](..._0x320f89),_0x2c9692[_0x1ef75e(0x2c4,'sz1)')](_0x546c1e,_0xffbf57),_0x2c9692[_0x1ef75e(0x237,'WztO')](_0x319d5b,{'parts':_0xffbf57});}),_0x466d67[_0x55adbe(0x365,'&[1T')]['on'](_0x501d90[_0x55adbe(0x347,'FJS[')],_0x392fe7);}else{if(_0x2ee79b[_0x55adbe(0x26a,'2qd!')])return{'role':KdDOwN[_0x55adbe(0x2a0,'&[1T')](_0x1db23[_0x55adbe(0x22b,'3Di@')],KdDOwN[_0x55adbe(0x2bd,'6QP3')])?KdDOwN[_0x55adbe(0x274,'UuXY')]:_0x3c4b1d[_0x55adbe(0x36b,'@L)G')],'parts':_0x4969a0[_0x55adbe(0x2fb,'&[1T')]};return{'role':KdDOwN[_0x55adbe(0x20e,'sz1)')](_0x4e4f6f[_0x55adbe(0x225,'O^S3')],KdDOwN[_0x55adbe(0x236,'q#gG')])?KdDOwN[_0x55adbe(0x26c,'FJS[')]:_0x20a1b6[_0x55adbe(0x202,'UuXY')],'parts':[{'text':KdDOwN[_0x55adbe(0x233,'2qd!')](typeof _0x5b22cd[_0x55adbe(0x348,'toCz')],KdDOwN[_0x55adbe(0x343,'sz1)')])?_0x41adeb[_0x55adbe(0x244,']0Z8')]:_0x44e11c[_0x55adbe(0x36c,'toCz')](_0x1ba4aa[_0x55adbe(0x1fa,'^cjw')])}]};}});}export async function chat(_0x5f41bb=[],_0x48e7e9=null){const _0x590393=_0x4000f4,_0xcdd8ea={'OUSBv':function(_0xd65f23,_0x551b52){return _0xd65f23(_0x551b52);}},{parts:_0x5acac9}=await _0xcdd8ea[_0x590393(0x2ed,'NZjV')](callGemini,{'messages':_0x5f41bb,'fileBuffer':_0x48e7e9});return _0x5acac9[_0x590393(0x1f9,'XEG#')](_0x7eeaed=>!_0x7eeaed[_0x590393(0x24d,'D9)t')])[_0x590393(0x29f,'Aa3T')](_0x30beeb=>_0x30beeb[_0x590393(0x2f0,'6QP3')]??'')[_0x590393(0x290,'O^S3')]('');}
|
package/src/skills.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/skills.js — Skills manager via npx skills CLI
|
|
2
|
-
//
|
|
2
|
+
// Skills path: ~/.agents/skills/<slug>/SKILL.md
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import path from "path";
|
|
5
5
|
import os from "os";
|
|
@@ -8,34 +8,18 @@ import { exec } from "child_process";
|
|
|
8
8
|
|
|
9
9
|
const execAsync = promisify(exec);
|
|
10
10
|
|
|
11
|
-
// Single canonical location for ALL skills
|
|
12
11
|
export const AGENTS_DIR = path.join(os.homedir(), ".agents");
|
|
12
|
+
export const SKILLS_DIR = path.join(AGENTS_DIR, "skills"); // npx skills default
|
|
13
13
|
|
|
14
|
-
// Agent dirs that npx skills may create (we scan after install to find new files)
|
|
15
14
|
const KNOWN_AGENT_DIRS = [
|
|
16
|
-
".gemini", ".gemini/skills",
|
|
17
|
-
".
|
|
18
|
-
".cursor", ".cursor/rules",
|
|
19
|
-
".codex", ".opencode",
|
|
20
|
-
".cline", ".aider",
|
|
21
|
-
".amp", ".copilot",
|
|
15
|
+
".gemini", ".gemini/skills", ".claude", ".cursor",
|
|
16
|
+
".codex", ".opencode", ".cline", ".aider",
|
|
22
17
|
];
|
|
23
18
|
|
|
24
19
|
export function ensureSkillsDirs() {
|
|
25
|
-
fs.mkdirSync(
|
|
20
|
+
fs.mkdirSync(SKILLS_DIR, { recursive: true });
|
|
26
21
|
}
|
|
27
22
|
|
|
28
|
-
// ─────────────────────────────────────────────────────────────────
|
|
29
|
-
// Delete skills-lock.json from cwd (npx skills drops this on install)
|
|
30
|
-
// ─────────────────────────────────────────────────────────────────
|
|
31
|
-
export function cleanLockFile(cwd = process.cwd()) {
|
|
32
|
-
const p = path.join(cwd, "skills-lock.json");
|
|
33
|
-
try { if (fs.existsSync(p)) fs.unlinkSync(p); } catch {}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// ─────────────────────────────────────────────────────────────────
|
|
37
|
-
// Scan a dir tree for SKILL.md files
|
|
38
|
-
// ─────────────────────────────────────────────────────────────────
|
|
39
23
|
function scanForSkillMds(baseDir, maxDepth = 5) {
|
|
40
24
|
const results = [];
|
|
41
25
|
const SKIP = new Set(["node_modules", ".git", "dist", "build"]);
|
|
@@ -52,9 +36,6 @@ function scanForSkillMds(baseDir, maxDepth = 5) {
|
|
|
52
36
|
return results;
|
|
53
37
|
}
|
|
54
38
|
|
|
55
|
-
// ─────────────────────────────────────────────────────────────────
|
|
56
|
-
// Run npx skills — exposes real stderr on failure
|
|
57
|
-
// ─────────────────────────────────────────────────────────────────
|
|
58
39
|
async function npxSkills(args, cwd = process.cwd(), timeout = 120_000) {
|
|
59
40
|
const cmd = `npx --yes skills ${args}`;
|
|
60
41
|
try {
|
|
@@ -70,9 +51,6 @@ async function npxSkills(args, cwd = process.cwd(), timeout = 120_000) {
|
|
|
70
51
|
}
|
|
71
52
|
}
|
|
72
53
|
|
|
73
|
-
// ─────────────────────────────────────────────────────────────────
|
|
74
|
-
// Parse "owner/repo@skill-name" shorthand
|
|
75
|
-
// ─────────────────────────────────────────────────────────────────
|
|
76
54
|
function parseSource(raw) {
|
|
77
55
|
const atIdx = raw.indexOf("@");
|
|
78
56
|
if (atIdx > 0 && !raw.startsWith("http") && !raw.startsWith("git@")) {
|
|
@@ -81,52 +59,12 @@ function parseSource(raw) {
|
|
|
81
59
|
return { source: raw, skill: null };
|
|
82
60
|
}
|
|
83
61
|
|
|
84
|
-
// ─────────────────────────────────────────────────────────────────
|
|
85
|
-
// After npx install: copy new SKILL.md files → ~/.agents/<slug>/
|
|
86
|
-
// ─────────────────────────────────────────────────────────────────
|
|
87
|
-
function consolidate(cwd, beforeSnapshot) {
|
|
88
|
-
const copied = [];
|
|
89
|
-
const dest = AGENTS_DIR;
|
|
90
|
-
|
|
91
|
-
// 1. Check known agent dirs first
|
|
92
|
-
for (const rel of KNOWN_AGENT_DIRS) {
|
|
93
|
-
for (const f of scanForSkillMds(path.join(cwd, rel), 3)) {
|
|
94
|
-
if (beforeSnapshot.has(f)) continue;
|
|
95
|
-
const slug = path.basename(path.dirname(f));
|
|
96
|
-
const dir = path.join(dest, slug);
|
|
97
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
98
|
-
fs.copyFileSync(f, path.join(dir, "SKILL.md"));
|
|
99
|
-
copied.push(slug);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 2. Broader scan of cwd for anything missed
|
|
104
|
-
if (copied.length === 0) {
|
|
105
|
-
for (const f of scanForSkillMds(cwd, 5)) {
|
|
106
|
-
if (beforeSnapshot.has(f)) continue;
|
|
107
|
-
// Skip anything already inside ~/.agents
|
|
108
|
-
if (f.startsWith(dest)) continue;
|
|
109
|
-
const slug = path.basename(path.dirname(f));
|
|
110
|
-
const dir = path.join(dest, slug);
|
|
111
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
-
fs.copyFileSync(f, path.join(dir, "SKILL.md"));
|
|
113
|
-
copied.push(slug);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return [...new Set(copied)]; // deduplicate
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ─────────────────────────────────────────────────────────────────
|
|
121
|
-
// Install — npx skills puts files directly into ~/.agents/skills/
|
|
122
|
-
// No post-copy needed; just run npx and report what's new
|
|
123
|
-
// ─────────────────────────────────────────────────────────────────
|
|
124
62
|
export async function installSkill(rawSource, opts = {}) {
|
|
125
63
|
const { skill: explicitSkill = null, all = false } = opts;
|
|
126
64
|
const { source, skill: parsedSkill } = parseSource(rawSource);
|
|
127
65
|
const skillName = explicitSkill ?? parsedSkill;
|
|
128
66
|
|
|
129
|
-
|
|
67
|
+
const cwd = process.cwd();
|
|
130
68
|
const before = new Set(loadSkills().map(s => s.slug));
|
|
131
69
|
|
|
132
70
|
const parts = ["add", source, "-y"];
|
|
@@ -134,98 +72,59 @@ export async function installSkill(rawSource, opts = {}) {
|
|
|
134
72
|
if (all) parts.push("--skill '*'");
|
|
135
73
|
|
|
136
74
|
const { stdout, stderr } = await npxSkills(parts.join(" "));
|
|
137
|
-
|
|
138
|
-
// Cleanup skills-lock.json that npx skills drops in cwd
|
|
139
75
|
cleanLockFile();
|
|
140
76
|
|
|
141
|
-
// Report what was newly installed
|
|
142
77
|
const after = loadSkills().map(s => s.slug);
|
|
143
78
|
const newSlugs = after.filter(s => !before.has(s));
|
|
144
|
-
|
|
145
79
|
return { output: stdout || stderr, installed: newSlugs };
|
|
146
80
|
}
|
|
147
81
|
|
|
148
|
-
// ─────────────────────────────────────────────────────────────────
|
|
149
|
-
// Remove — checks both ~/.agents/<slug>/ and ~/.agents/skills/<slug>/
|
|
150
|
-
// ─────────────────────────────────────────────────────────────────
|
|
151
82
|
export async function removeSkillNpx(slug) {
|
|
152
83
|
const candidates = [
|
|
84
|
+
path.join(SKILLS_DIR, slug),
|
|
153
85
|
path.join(AGENTS_DIR, slug),
|
|
154
|
-
path.join(AGENTS_DIR, "skills", slug),
|
|
155
86
|
];
|
|
156
87
|
const found = candidates.filter(d => fs.existsSync(d));
|
|
157
88
|
if (!found.length) throw new Error(`"${slug}" not found in ~/.agents/`);
|
|
158
|
-
|
|
159
89
|
found.forEach(d => fs.rmSync(d, { recursive: true, force: true }));
|
|
160
90
|
try { await npxSkills(`remove ${slug} -y`); } catch {}
|
|
161
|
-
|
|
162
91
|
return { output: `Removed: ${found.join(", ")}` };
|
|
163
92
|
}
|
|
164
93
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
export async function
|
|
169
|
-
const { stdout } = await npxSkills(`find ${JSON.stringify(query)}`);
|
|
170
|
-
return stdout;
|
|
171
|
-
}
|
|
172
|
-
export async function listNpxSkills() {
|
|
173
|
-
const { stdout } = await npxSkills("list");
|
|
174
|
-
return stdout;
|
|
175
|
-
}
|
|
176
|
-
export async function updateSkill(slug = "") {
|
|
177
|
-
const { stdout } = await npxSkills(slug ? `update ${slug} -y` : "update -y");
|
|
178
|
-
return stdout;
|
|
179
|
-
}
|
|
180
|
-
export async function initSkill(name = "") {
|
|
181
|
-
const { stdout } = await npxSkills(name ? `init "${name}"` : "init");
|
|
182
|
-
return stdout;
|
|
183
|
-
}
|
|
94
|
+
export async function findSkills(query) { return (await npxSkills(`find ${JSON.stringify(query)}`)).stdout; }
|
|
95
|
+
export async function listNpxSkills() { return (await npxSkills("list")).stdout; }
|
|
96
|
+
export async function updateSkill(slug = "") { return (await npxSkills(slug ? `update ${slug} -y` : "update -y")).stdout; }
|
|
97
|
+
export async function initSkill(name = "") { return (await npxSkills(name ? `init "${name}"` : "init")).stdout; }
|
|
184
98
|
|
|
185
99
|
// ─────────────────────────────────────────────────────────────────
|
|
186
|
-
// Load
|
|
187
|
-
// ~/.agents/<slug>/SKILL.md (manual / flat)
|
|
188
|
-
// ~/.agents/skills/<slug>/SKILL.md (npx skills default)
|
|
100
|
+
// Load installed skills from SKILLS_DIR
|
|
189
101
|
// ─────────────────────────────────────────────────────────────────
|
|
190
102
|
export function loadSkills() {
|
|
191
103
|
const skills = [];
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
if (!
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
path: path.join(baseDir, entry.name),
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
// Flat: ~/.agents/<slug>/SKILL.md
|
|
214
|
-
scanBase(AGENTS_DIR);
|
|
215
|
-
// Nested: ~/.agents/skills/<slug>/SKILL.md (npx skills default)
|
|
216
|
-
scanBase(path.join(AGENTS_DIR, "skills"));
|
|
217
|
-
|
|
104
|
+
if (!fs.existsSync(SKILLS_DIR)) return skills;
|
|
105
|
+
|
|
106
|
+
for (const entry of fs.readdirSync(SKILLS_DIR, { withFileTypes: true })) {
|
|
107
|
+
if (!entry.isDirectory()) continue;
|
|
108
|
+
const skillMd = path.join(SKILLS_DIR, entry.name, "SKILL.md");
|
|
109
|
+
if (!fs.existsSync(skillMd)) continue;
|
|
110
|
+
|
|
111
|
+
const content = fs.readFileSync(skillMd, "utf8");
|
|
112
|
+
const nameMatch = content.match(/^#\s+(.+)$/m);
|
|
113
|
+
skills.push({
|
|
114
|
+
name: nameMatch?.[1]?.trim() ?? entry.name,
|
|
115
|
+
slug: entry.name,
|
|
116
|
+
content,
|
|
117
|
+
path: path.join(SKILLS_DIR, entry.name),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
218
120
|
return skills;
|
|
219
121
|
}
|
|
220
122
|
|
|
221
|
-
export function buildSkillsPrompt(skills) {
|
|
222
|
-
if (!skills.length) return null;
|
|
223
|
-
const sections = skills.map(s =>
|
|
224
|
-
`### Skill: ${s.name}\n${s.content.trim()}`
|
|
225
|
-
).join("\n\n---\n\n");
|
|
226
|
-
return `## INSTALLED SKILLS\n\nApply the following skills when relevant:\n\n${sections}`;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
123
|
export function listInstalledSkills() {
|
|
230
124
|
return loadSkills().map(s => ({ ...s, global: true, dir: s.path }));
|
|
231
125
|
}
|
|
126
|
+
|
|
127
|
+
export function cleanLockFile(cwd = process.cwd()) {
|
|
128
|
+
const p = path.join(cwd, "skills-lock.json");
|
|
129
|
+
try { if (fs.existsSync(p)) fs.unlinkSync(p); } catch {}
|
|
130
|
+
}
|