@ikyyofc/gemini-cli 4.0.5 → 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 +98 -75
- 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,75 +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
|
-
|
|
21
|
-
// Skill index — names + 1-line description only, NOT full content
|
|
22
|
-
// Agent will dynamically read SKILL.md when a task is relevant
|
|
23
|
-
const skills = loadSkills();
|
|
19
|
+
const toolList = FUNCTION_DECLARATIONS.map(t => `- ${t.name}: ${t.description}`).join("\n");
|
|
20
|
+
const skills = loadSkills();
|
|
24
21
|
const skillIndex = skills.length
|
|
25
22
|
? skills.map(s => {
|
|
26
23
|
const firstLine = s.content.split("\n").find(l => l.trim() && !l.startsWith("#")) ?? "";
|
|
27
|
-
return ` - ${s.slug}
|
|
24
|
+
return ` - ${s.slug}: ${firstLine.slice(0, 80)}`;
|
|
28
25
|
}).join("\n")
|
|
29
26
|
: null;
|
|
30
27
|
|
|
31
|
-
// Current datetime
|
|
32
28
|
const now = new Date();
|
|
33
29
|
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
34
30
|
const datetime = now.toLocaleString("id-ID", { timeZone: tz, dateStyle: "full", timeStyle: "long" });
|
|
35
31
|
|
|
36
|
-
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.
|
|
37
33
|
|
|
38
34
|
## CURRENT TIME
|
|
39
35
|
${datetime} (${tz})
|
|
40
|
-
Unix timestamp: ${Math.floor(now.getTime() / 1000)}
|
|
41
36
|
|
|
42
37
|
## CORE RULE — NEVER ASK, ALWAYS ACT
|
|
43
|
-
|
|
44
|
-
You MUST use tools to complete every task. Never ask the user to do anything themselves.
|
|
45
|
-
- If you need to run a command → run_shell
|
|
46
|
-
- If you need to read a file → read_file
|
|
47
|
-
- If you need to create or edit a file → write_file or patch_file
|
|
48
|
-
- If something fails → diagnose and fix yourself, retry automatically
|
|
38
|
+
Use tools to complete every task. Never instruct the user to do anything themselves.
|
|
49
39
|
|
|
50
40
|
## WORKFLOW
|
|
51
|
-
1.
|
|
52
|
-
2.
|
|
53
|
-
3.
|
|
54
|
-
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
|
|
55
46
|
|
|
56
47
|
## TOOLS
|
|
57
48
|
${toolList}
|
|
58
49
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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}` : ""}
|
|
63
56
|
|
|
64
57
|
## RULES
|
|
65
|
-
- Always read files before editing
|
|
66
|
-
- Use patch_file for targeted edits
|
|
67
|
-
- Verify code works
|
|
68
|
-
- If a command fails,
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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");
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -89,15 +95,13 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
89
95
|
while (true) {
|
|
90
96
|
if (Date.now() > deadline) {
|
|
91
97
|
spinner.stop();
|
|
92
|
-
printWarning("timeout: 10 menit
|
|
98
|
+
printWarning("timeout: 10 menit, agent dihentikan");
|
|
93
99
|
return { finalResponse: null, iterations: iteration };
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
iteration++;
|
|
97
|
-
|
|
98
|
-
// ── Animated spinner while waiting for LLM ─────────────────
|
|
99
103
|
spinner.start(
|
|
100
|
-
iteration === 1 ? "thinking…" : `
|
|
104
|
+
iteration === 1 ? "thinking…" : `step ${iteration}…`,
|
|
101
105
|
"#4A9EFF"
|
|
102
106
|
);
|
|
103
107
|
|
|
@@ -105,51 +109,32 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
105
109
|
try {
|
|
106
110
|
const res = await callGemini({ messages, tools: GEMINI_TOOLS, systemInstruction: fullSystem });
|
|
107
111
|
parts = res.parts;
|
|
108
|
-
spinner.stop();
|
|
112
|
+
spinner.stop();
|
|
109
113
|
} catch (err) {
|
|
110
114
|
spinner.fail(err.message);
|
|
111
115
|
printError(err.message);
|
|
112
116
|
return null;
|
|
113
117
|
}
|
|
114
118
|
|
|
115
|
-
// ── Parse response parts ────────────────────────────────────
|
|
116
|
-
// Gemini returns: thought parts (p.thought===true), text parts, tool call parts
|
|
117
119
|
const thoughtParts = parts.filter(p => p.thought === true && p.text);
|
|
118
120
|
const textParts = parts.filter(p => p.text != null && !p.thought);
|
|
119
121
|
const callParts = parts.filter(p => p.functionCall != null);
|
|
120
|
-
const textContent = textParts.map(p => p.text).join("").trim();
|
|
121
122
|
const thinkContent = thoughtParts.map(p => p.text).join("").trim();
|
|
123
|
+
const textContent = textParts.map(p => p.text).join("").trim();
|
|
122
124
|
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
process.stderr.write(
|
|
126
|
-
`[DEBUG] parts count: ${parts.length}, ` +
|
|
127
|
-
`thought: ${thoughtParts.length}, ` +
|
|
128
|
-
`text: ${textParts.length}, ` +
|
|
129
|
-
`call: ${callParts.length}\n` +
|
|
130
|
-
`[DEBUG] part types: ${parts.map(p => p.thought ? "THOUGHT" : p.functionCall ? "CALL" : "TEXT").join(", ")}\n`
|
|
131
|
-
);
|
|
132
|
-
}
|
|
125
|
+
// Show thinking
|
|
126
|
+
printThinkBlock(thinkContent);
|
|
133
127
|
|
|
134
|
-
// ──
|
|
135
|
-
if (thinkContent) {
|
|
136
|
-
process.stdout.write(
|
|
137
|
-
"\n" + chalk.hex("#2E2E45")(" ╭─ thinking ") +
|
|
138
|
-
chalk.hex("#2E2E45")("─".repeat(Math.max(2, bw() - 13))) + "\n"
|
|
139
|
-
);
|
|
140
|
-
thinkContent.split("\n").forEach(line =>
|
|
141
|
-
process.stdout.write(chalk.hex("#2E2E45")(" │ ") + chalk.hex("#55557A").italic(line) + "\n")
|
|
142
|
-
);
|
|
143
|
-
process.stdout.write(chalk.hex("#2E2E45")(" ╰" + "─".repeat(bw() - 1)) + "\n\n");
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// ── Final answer — no more tool calls ─────────────────────
|
|
128
|
+
// ── Final answer — stream it ───────────────────────────────
|
|
147
129
|
if (callParts.length === 0) {
|
|
148
|
-
if (textContent)
|
|
130
|
+
if (textContent) {
|
|
131
|
+
// Stream the final answer for better UX
|
|
132
|
+
await streamFinalAnswer(messages, fullSystem, thinkContent);
|
|
133
|
+
}
|
|
149
134
|
return { finalResponse: textContent, iterations: iteration };
|
|
150
135
|
}
|
|
151
136
|
|
|
152
|
-
//
|
|
137
|
+
// Show reasoning text before tool block
|
|
153
138
|
if (textContent) {
|
|
154
139
|
textContent.split("\n").forEach((line, i) =>
|
|
155
140
|
process.stdout.write(
|
|
@@ -159,26 +144,64 @@ export async function runAgentLoop(userMessage, history, {
|
|
|
159
144
|
);
|
|
160
145
|
}
|
|
161
146
|
|
|
162
|
-
// ──
|
|
163
|
-
|
|
147
|
+
// ── Tool calls ─────────────────────────────────────────────
|
|
148
|
+
// Include ALL parts (thinking + text + calls) in history for continuity
|
|
164
149
|
messages.push({ role: "model", parts });
|
|
165
150
|
|
|
151
|
+
printStepHeader(iteration);
|
|
166
152
|
const responseParts = [];
|
|
167
153
|
for (const part of callParts) {
|
|
168
154
|
const { name, args } = part.functionCall;
|
|
169
|
-
|
|
170
|
-
// Animate the tool name while it runs
|
|
171
155
|
spinner.start(name + "…", "#FFD080");
|
|
172
156
|
printToolCall(name, args ?? {});
|
|
173
157
|
spinner.stop();
|
|
174
|
-
|
|
175
158
|
const result = await executeTool(name, args ?? {}, { autoApprove });
|
|
176
159
|
printToolResult(result);
|
|
177
|
-
|
|
178
160
|
responseParts.push({ functionResponse: { name, response: result } });
|
|
179
161
|
}
|
|
180
|
-
|
|
181
162
|
printStepFooter();
|
|
163
|
+
|
|
182
164
|
messages.push({ role: "user", parts: responseParts });
|
|
183
165
|
}
|
|
184
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 _0x1cb7(_0x5004aa,_0x3af837){_0x5004aa=_0x5004aa-(-0x6*-0x5de+0x3*-0x1e6+-0x1bff);const _0x3896f5=_0x42bf();let _0x5a39ad=_0x3896f5[_0x5004aa];if(_0x1cb7['uPgaZa']===undefined){var _0x5250c5=function(_0x3bb530){const _0xb539b8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2e113d='',_0xb7e8ad='';for(let _0x377ca7=0x11ba+-0x2457+-0x129d*-0x1,_0x44eac7,_0x10f3f9,_0x3c45ba=0x286+-0x2*0xaa5+0x12c4;_0x10f3f9=_0x3bb530['charAt'](_0x3c45ba++);~_0x10f3f9&&(_0x44eac7=_0x377ca7%(-0xcf9+0x5*0xf7+0x82a)?_0x44eac7*(-0x170a+0x2f3*0xd+-0xf0d*0x1)+_0x10f3f9:_0x10f3f9,_0x377ca7++%(-0x26ec+-0x1*-0x1bd9+0xb17))?_0x2e113d+=String['fromCharCode'](-0x1*-0x19d1+-0x24e0+0x1*0xc0e&_0x44eac7>>(-(0x237d+-0x1869+-0x1*0xb12)*_0x377ca7&0x48a*0x5+0x1*0xd01+-0x1*0x23ad)):0x1e30+0x53a+0x5e7*-0x6){_0x10f3f9=_0xb539b8['indexOf'](_0x10f3f9);}for(let _0x4aca12=0x22*0x7+-0xf*-0x22d+-0x295*0xd,_0x46d277=_0x2e113d['length'];_0x4aca12<_0x46d277;_0x4aca12++){_0xb7e8ad+='%'+('00'+_0x2e113d['charCodeAt'](_0x4aca12)['toString'](-0x24f4+0xf00+-0x1*-0x1604))['slice'](-(0x3c*-0x68+-0x24f3+0x3d55));}return decodeURIComponent(_0xb7e8ad);};const _0x13d954=function(_0x4a23f5,_0x482e0d){let _0x11c81a=[],_0x42ebe4=0x349+0x174a+-0x1a93,_0x2b9a13,_0x1e8d21='';_0x4a23f5=_0x5250c5(_0x4a23f5);let _0x455a67;for(_0x455a67=-0x23dd+0x1ad0+0x90d;_0x455a67<-0xc00+0x579+0x787;_0x455a67++){_0x11c81a[_0x455a67]=_0x455a67;}for(_0x455a67=-0x18b2+-0x899+0x3*0xb19;_0x455a67<0xb71+0xb*0x17d+-0x27*0xb0;_0x455a67++){_0x42ebe4=(_0x42ebe4+_0x11c81a[_0x455a67]+_0x482e0d['charCodeAt'](_0x455a67%_0x482e0d['length']))%(-0x1*0x21e6+0x7*-0x400+0x3ee6),_0x2b9a13=_0x11c81a[_0x455a67],_0x11c81a[_0x455a67]=_0x11c81a[_0x42ebe4],_0x11c81a[_0x42ebe4]=_0x2b9a13;}_0x455a67=-0x231a+0xec*0x21+0x4ae,_0x42ebe4=0x2e6+-0x506*-0x2+-0xcf2*0x1;for(let _0x585b50=0x1c12+0x6ac+-0x2*0x115f;_0x585b50<_0x4a23f5['length'];_0x585b50++){_0x455a67=(_0x455a67+(0x1907+-0x4b3*-0x5+-0x3085*0x1))%(-0x530+-0x17*-0xce+0x1*-0xc52),_0x42ebe4=(_0x42ebe4+_0x11c81a[_0x455a67])%(0xb7f+-0x5cb*-0x3+-0x1be0),_0x2b9a13=_0x11c81a[_0x455a67],_0x11c81a[_0x455a67]=_0x11c81a[_0x42ebe4],_0x11c81a[_0x42ebe4]=_0x2b9a13,_0x1e8d21+=String['fromCharCode'](_0x4a23f5['charCodeAt'](_0x585b50)^_0x11c81a[(_0x11c81a[_0x455a67]+_0x11c81a[_0x42ebe4])%(0x1*-0x202d+-0x2240+0x436d)]);}return _0x1e8d21;};_0x1cb7['xWcHBP']=_0x13d954,_0x1cb7['lDkvGX']={},_0x1cb7['uPgaZa']=!![];}const _0x5ca261=_0x3896f5[-0x9fe+-0x2166+0x2b64],_0x113b0e=_0x5004aa+_0x5ca261,_0x14f886=_0x1cb7['lDkvGX'][_0x113b0e];return!_0x14f886?(_0x1cb7['LqpbTf']===undefined&&(_0x1cb7['LqpbTf']=!![]),_0x5a39ad=_0x1cb7['xWcHBP'](_0x5a39ad,_0x3af837),_0x1cb7['lDkvGX'][_0x113b0e]=_0x5a39ad):_0x5a39ad=_0x14f886,_0x5a39ad;}const _0x451dbc=_0x1cb7;(function(_0x487e74,_0x3c13ad){const _0xdc9434=_0x1cb7,_0x4b3b2d=_0x487e74();while(!![]){try{const _0x2efd8=-parseInt(_0xdc9434(0x20f,'j$%s'))/(-0x29f*-0x1+0x9ba+-0xc58)+-parseInt(_0xdc9434(0x1b3,'RElJ'))/(0x655*-0x5+-0x1317*-0x1+0xc94)*(parseInt(_0xdc9434(0x203,'z1f4'))/(-0x89f*0x1+-0x1*-0xdfd+-0x55b*0x1))+parseInt(_0xdc9434(0x19b,'^s]^'))/(-0x21*-0xb2+0x11c3*-0x1+-0x52b)*(-parseInt(_0xdc9434(0x1ae,'%%lb'))/(-0x2630+-0x1*-0x1d6b+0x1*0x8ca))+-parseInt(_0xdc9434(0x1e1,'JfI7'))/(0x12b7*0x1+-0xfd*-0x5+-0x17a2)*(parseInt(_0xdc9434(0x1cb,'CLzw'))/(0x363*0x2+0x2257+0x2*-0x148b))+parseInt(_0xdc9434(0x1e4,'WF%j'))/(0x3*-0xbc5+-0x1d83+0x40da)*(-parseInt(_0xdc9434(0x1e9,']gqB'))/(-0x234e+0xee7+0x1470))+-parseInt(_0xdc9434(0x201,'g%*V'))/(-0x2*-0x838+-0x4f8+0x10a*-0xb)+parseInt(_0xdc9434(0x207,'VL#^'))/(-0x1*-0xa13+-0x31f+-0x6e9);if(_0x2efd8===_0x3c13ad)break;else _0x4b3b2d['push'](_0x4b3b2d['shift']());}catch(_0x8b8445){_0x4b3b2d['push'](_0x4b3b2d['shift']());}}}(_0x42bf,-0x4*0x19a81+0xe3111+0x76297));import _0x2b0069 from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x451dbc(0x24d,']EaD')+_0x451dbc(0x24b,'O1mK')+_0x451dbc(0x22c,'Q1Vx')+_0x451dbc(0x1f7,'QQFP')+_0x451dbc(0x200,'d0aH')+_0x451dbc(0x215,'ga6q'),'MODEL':_0x451dbc(0x1bf,'g%*V')+_0x451dbc(0x24c,'DnXt'),'HEADERS':{'User-Agent':_0x451dbc(0x206,'QQFP')+'.2','Accept-Encoding':_0x451dbc(0x1dc,'Q0e1'),'content-type':_0x451dbc(0x258,'cjTI')+_0x451dbc(0x202,'jm!t')+_0x451dbc(0x246,'RElJ')+'8'}},SUPPORTED_MIMES=new Set([_0x451dbc(0x1e7,'&y*o'),_0x451dbc(0x195,'1Vof'),_0x451dbc(0x21a,'cjTI'),_0x451dbc(0x1b9,'RElJ'),_0x451dbc(0x1fb,'CLzw'),_0x451dbc(0x185,'q)Z6'),_0x451dbc(0x1ff,'q)Z6'),_0x451dbc(0x1c5,'VL#^'),_0x451dbc(0x24e,'c92R'),_0x451dbc(0x233,']gqB'),_0x451dbc(0x18b,'G$sn')+'v',_0x451dbc(0x21b,'^cS0'),_0x451dbc(0x19f,']gqB'),_0x451dbc(0x250,'%%lb'),_0x451dbc(0x18a,'1Vof'),_0x451dbc(0x1c3,'M145'),_0x451dbc(0x23d,'CLzw'),_0x451dbc(0x1ad,'^ejS'),_0x451dbc(0x231,'JfI7'),_0x451dbc(0x235,']gqB'),_0x451dbc(0x1c9,'h4EN'),_0x451dbc(0x191,'q)Z6'),_0x451dbc(0x213,'^cS0')+_0x451dbc(0x1f2,'ZEt4')+'us',_0x451dbc(0x255,'RH8r')+_0x451dbc(0x1d3,'74H#'),_0x451dbc(0x1bb,'7f0M'),_0x451dbc(0x1d9,'^cS0'),_0x451dbc(0x25f,'c92R'),_0x451dbc(0x19e,'JfI7')+_0x451dbc(0x199,'DnXt'),_0x451dbc(0x22e,'^ejS')+_0x451dbc(0x198,'QQFP'),_0x451dbc(0x1e0,'Q1Vx'),_0x451dbc(0x21e,'86Ko')+_0x451dbc(0x1da,'QQFP'),_0x451dbc(0x222,'q)Z6')+_0x451dbc(0x1ca,'[ix0'),_0x451dbc(0x1ce,'VL#^')+_0x451dbc(0x1b7,'I7e5'),_0x451dbc(0x23b,'g%*V')+_0x451dbc(0x225,'9*Em'),_0x451dbc(0x210,'h4EN')+_0x451dbc(0x22d,'^cS0')]);function _0x42bf(){const _0xe2826b=['DHadg8oj','W7dcGCkB','WR9VW5FdGmkJW5RdMaGNxa','WQlcNSoruxnlWQWxy8kd','w0CFWR4wnbzDWRhdQG','WRFcOCk4BCoAW4ZdOXpdGmka','W7VdLsBdPXaClW93W7C','W4PXgCoKvgzOd8oEWRuzWPz3W5u','aWJdJ8kWCSkmDCoVCmkf','j1GJtSoQ','lKTwD0vEz0yEWPm','W4vjW6uaBSogkG','vmkpE8oyh2ldJmkoW5pdTa','WRpdJCkkr1P9WOTYsa','w8kbt8ooiG','WO0XtmkDfG','WR4OW5tdISkJWPldMr1Y','aYVdIcn/cCo3vv7dSa','eCkUhSkfp8oft8kSqsC2W5LwCa','FNidbSodESobW54gWPe','WOFdPCoRE2vfBmkZWPnPvXBdQq','W6/cJmoJW7esW6/dOa','WOqGW7FdOmkb','cadcL8o3kmkFnSk1k8os','E8oehSkpASo9W4S+ACoqimk0W7tdVW','kZddVmouaq','ewxcTIVdNmoRWOddPmkiqW','bwb3qx5pth4fWQu','W57dRJpdHcO','W5JcG8kiWRe','E8o+W4tdUx8VB8kiWPztW6HHW50','hgpdVtddISkOWPlcISk2tG','Fv3cSHddTqtcMSkdb3u/W6i','W40qWPtcM8k7dHtcN1lcNq','jH3dHLBcGq','vmkgimoCtN7cKmoAW57dTq','uK1BW7GsW40oW4e+WQ8','ouJcPCokWPe','lmoRBCo0aYumW5LjWRm','useMW4SsWRVcHSkDWPG','yJifea','bqVcLmoeWQm','WPxcOCoTpKnhxG','fCkwASoMrmo5W5X6WPq','rvfBW7qsW40mW5y+','BYeeW60y','iwBcOCovrWy','WRfsEqdcTCkry0FdVSkn','WRz+W6m9DSoFvYpdPSkS','WOpdQCoKFgjfA8o0W7iW','rtmAamoCzmkvWOWrWPW','WRWKW4JdM8oJW4xcMr0/wa','fglcT8oEsG','e8osoSkxnItdISkEW4lcRa','WRrrxmomAa','amoWWOjjW6ddPSoEcmoGoa','W48bWORcK8k7crtcN17cGq','e8oVWP5a','kI7cSCox','WOTgyCo6W4u','zuLnWRGa','lYhcVCoSWPyGW6tcPmoyW4a','xrDnW6uB','WO9cA8o6WPLHWOhcKt8S','W5WpWPFcGW','WQ1of29ZdXtcJa/dNW','W5pcMCkfWRBcIhBdUdxdHW','WO17nhbI','hGD8W7SDnMtdOCkF','kCkRWPJdGey','crT8W7CDnMRdSmkr','WQBdRmkBBatcPmk0W7uNBW','WPyZxSkWW6m','aLLQamkOW78','FtBdOCkcaLVdQSozW6SJ','odhcO8oP','qCoNxCorymktgmoOqbW','ydWBaCoF','xmkxFSowfwldICkBWOK','WPBdUCo/bwjrsmkK','W4aPWRz+jCovfNxcUSoY','cutcKmoGkmkkBCkTDSkv','W7lcLCowgf95','W4RcISkkbde','b8oaxCk1bG','WOqdpgvGW6S','W6JcLCkBnG','lhhcVmoxr1pcKComWP8N','mmo0Bg7dGdpcGW','WR7cKCoeW7q','WOHUnq','aLBcNmoTCchcISomWPXe','z3qUuCogwmobW67dT8kc','WRddHCoarCoaWOtdJa','WQtcISoCW6hcLgVcTGtcSmkr','W7GDkLpcNSksWQ3cINS','DCkJsmoYjq7dPCk/W7/dKa','W67cICkmo8o0W43cPKRcHG','WR9qq8oeAxHt','WPtcRCk8luH2cSogjg8','kgagt8o2','WPfGfLzEjtVcVW','WPykp31SW6ubguHY','B2tdIGezeXpdPSoDua','mNBcLfHvneBdU8oira','hCklE8oTsmk1W5PNWPVdRq','emoKWPP8W7m','rmkBBmotfa','W6/cNmoo','d2BcRSoavHZdPa','A3JcVCkvva','gfq2aSo+WR03WOSQWPa','W7OrnKldNSoEWRpcLG','W6RcJ8keoW','wMpdR3xdPSk2W7O','qCoKxSouESkegmoYxq','mvtcGX/dQSkdW7W','WQeSW5hdImkPWPldNaGVsG','r8kQAgG','zCoiBmoZtCkInSovBq','WOCtW6NdSmkFW7JdRdGhya','WRe5A8kl','jCoYzN/dINldHglcRJ4','WRiJASkCW41yWQxcN8oRW58','av3dIMtdSNpdT8kGiIO','WP5xW5BdHSoIwcdcG3lcLIFcOa','jCkAC8oTwa','WP1+cxv8','WOddRmo/AWa','WQK0W5tdHSkJWPldMr0JsW','fSovrNtdHW','WR/cISoAW7JcIty','W7FcOSkLWRhcHq','oSo2y33dGhlcH2VcUq','qq8bo8oejmkQWOqtWPS','eSolxmkyla','aHJcNmoXnCkFBq','W77dM8oiqCor','CSkWq8oGmGZdTSkQW6NdHa','WPBdV8kmfLD8sCkpWOy','l8obWQrSW5O','WOWlxmk0W700WPZdPSoiW7q','W4BcICkzWQVdIdpdUcldHw8','hGD8W7SDnNldSSkukG','aerXlCk3','W6NcHmkab8oH','bSkeqCoxoq','DwDj','W5BdVaNdJIeVaJjDW5e','iM7cQmoGWO0','WR/dN8ouqdSxdCoovM8','W7lcNCo0','qSoCyCoFyG','i3KSt8otwmouW7VdQCoC','e0fQeCo7WQy','WONcVCkEWQlcPgxcOw/cHSou','W6qyjxhcLG','WPPsD8oNW5K2W43cJca6','WQRdL8oAB8kRW5FcHe/cUCoDWOlcNW','jSk+W57cRIjXDmkZWOf7','W4rkD1mXW4mMkrCU','xmkUmmkHymk4W59HWP3dQW','ybiHW6qz','F23cMSoOAWdcHW','W5SIWP7cMSkd','gCkVgCkimmofsCkOqIm0W5XYFq','W54pWOJcKG','WPWWW6u4CmoA','W5tdOXtcJciPfY1DW4O','jg7cRSovvKhcS8o9WRT6','iCo0BN8','WPfQpvydpdNcUspdTG','j8o+EM4','W7xcJ8kmo8o3','W5ZdVmk4oJ8t','r8oYqmouz8kzvmoSwXW','tcFdU2NcMSoPWPJcV8kQxIrhFa','W4fkFcjGWRbsvraP','Cf/cUHBdSGddTSkUj1abW7LE','vmk6BwWSWRFcGmkepa','WPvGnLy','nmkvtSoFpmoNWPz6z8oN','rCkUE3eW','WP4QsCkoeq','WOldOmoLcHrpySoWW7bh','W40vWOdcNSk9qHpcH1RcKq','sJO6','cSk0Cmo0cZ/dTG','dSkhWRJdPfO','WRCfy8k5oG','i8kmwSowoSkRWPP+A8oV','WRxdKmkosa','DL7dMf7dH8kzW4dcUvFdNq','lYRcRCooa8kSwmouqmkM','bKdcS8oc','hW9PemkR','W7xcICkfoW','vJaSW5y','l0TqCubvDL0jWOy','WQCLymknW4CzWQK','W67cK8ojW6yaW7BcP8o/WP11','r11hW6vsWOOvW4S1','cbZcKq','WQbeirldQmktBXxdLmk5','kmkYWQtdGq','ztddHrWmaLZdVCoisW','W67cMmoquMja','je5EFa','pchcQmo1W4bUW7BcUW','WOBdN8ovW6VdLwRcRqBdL1etWOxdRG','WQT+W7CNzG','W4LaWOFcLSk8crZcJ1RcHG','ur/cMSohWPhdM07dJW','vmkgtSoqesJdIG','mJPEW70+','ygZcUmkgyCoQrCoocXu','fG/cL8oAjG','xfSPWQ5flZhdMmk1d33cTdS','rCommSk3eCoKW6nXWPhdR8kaW7O','baRcKCoNnCklEmo0ymks','dGD0W6OxAW','iCktrmoonSkMWO8','WQVdMSkmsGJcOW'];_0x42bf=function(){return _0xe2826b;};return _0x42bf();}async function getToken(){const _0x3f5956=_0x451dbc,_0x3e31ac={'RyPIA':_0x3f5956(0x209,'Qs]s')+_0x3f5956(0x1f1,'q)Z6')+_0x3f5956(0x1af,'ceA&')+_0x3f5956(0x1dd,'GhXS')+_0x3f5956(0x25e,'74H#')+_0x3f5956(0x1a9,'O1mK')+_0x3f5956(0x20a,'puC@')+_0x3f5956(0x20e,'Qs]s')+_0x3f5956(0x236,'fb2E')+_0x3f5956(0x1d8,'ltWf')+_0x3f5956(0x196,'jm!t')+_0x3f5956(0x241,'ZEt4'),'AOuUD':_0x3f5956(0x1d6,'puC@')+_0x3f5956(0x187,'g%*V'),'NAVIS':_0x3f5956(0x21f,'I7e5')+_0x3f5956(0x224,'CLzw')+_0x3f5956(0x1b1,'cjTI')+_0x3f5956(0x252,'1#Vz')+_0x3f5956(0x257,'GhXS')+_0x3f5956(0x1f4,'%%lb')+_0x3f5956(0x239,'RElJ'),'ibJfb':_0x3f5956(0x226,'o2xT')+_0x3f5956(0x1be,'z1f4'),'bKLbk':_0x3f5956(0x1b8,'Tq9i')+_0x3f5956(0x251,'9*Em'),'ebcRs':_0x3f5956(0x1c8,'z1f4')+_0x3f5956(0x1b0,'RH8r')+_0x3f5956(0x1ab,']EaD')+_0x3f5956(0x18c,'j$%s'),'Dxkmj':_0x3f5956(0x220,'z1f4')+_0x3f5956(0x23f,'I7e5')+_0x3f5956(0x212,'CLzw')+_0x3f5956(0x1c1,'RH8r')+_0x3f5956(0x208,'RElJ')},{data:_0x12fc85}=await _0x2b0069[_0x3f5956(0x22f,'h4EN')](_0x3e31ac[_0x3f5956(0x237,'G$sn')],{'clientType':_0x3e31ac[_0x3f5956(0x1cc,'Q0e1')]},{'headers':{'User-Agent':_0x3e31ac[_0x3f5956(0x19c,'o2xT')],'Content-Type':_0x3e31ac[_0x3f5956(0x20b,'Tq9i')],'X-Android-Package':_0x3e31ac[_0x3f5956(0x1a8,'g%*V')],'X-Android-Cert':_0x3e31ac[_0x3f5956(0x1c7,'J0zX')],'X-Firebase-GMPID':_0x3e31ac[_0x3f5956(0x1a2,'VL#^')]}});return _0x12fc85[_0x3f5956(0x1e5,'CLzw')];}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0xa41d99=_0x451dbc,_0x2bb2c7={'qdhYz':function(_0x17914f,_0x57e639){return _0x17914f===_0x57e639;},'fcUqX':_0xa41d99(0x183,'g%*V'),'BGuFe':_0xa41d99(0x1bd,'%%lb'),'bwMpD':_0xa41d99(0x193,']EaD'),'fMjne':function(_0x4d72f6){return _0x4d72f6();},'jlkGg':function(_0x429952,_0x30f32c){return _0x429952(_0x30f32c);},'LaGOM':_0xa41d99(0x1a4,'Tq9i')+_0xa41d99(0x240,'QQFP')+_0xa41d99(0x186,'M145'),'xqLWP':_0xa41d99(0x1aa,'74H#'),'vyfAt':function(_0x148ea8,_0x4f28d7){return _0x148ea8-_0x4f28d7;},'wBzmQ':function(_0x5c1333,_0x467453){return _0x5c1333===_0x467453;},'ENDnb':_0xa41d99(0x189,'G$sn'),'bydtP':_0xa41d99(0x1df,'puC@'),'xYXMa':_0xa41d99(0x1d1,'QQFP')+_0xa41d99(0x19a,'CLzw')+_0xa41d99(0x229,'QQFP'),'Yaxly':_0xa41d99(0x1f9,'puC@'),'MtPOd':_0xa41d99(0x19d,'G$sn')+_0xa41d99(0x1a6,'1#Vz')+_0xa41d99(0x197,'ga6q'),'mOhqX':_0xa41d99(0x230,'7f0M')+_0xa41d99(0x188,'q)Z6')+_0xa41d99(0x1f5,'Tq9i')+'T','ZTFcL':_0xa41d99(0x24f,'CLzw')+_0xa41d99(0x1d0,'cHRB')+_0xa41d99(0x24a,'RElJ')+'T','yyvln':function(_0x5e68df,_0xc32c52){return _0x5e68df&&_0xc32c52;},'LMIeX':_0xa41d99(0x1f3,'[ae[')+_0xa41d99(0x1e3,'h4EN')+_0xa41d99(0x1db,'86Ko')+'I'},_0x2df274=await _0x2bb2c7[_0xa41d99(0x1ef,'jm!t')](getToken),_0x5e47b5=messages[_0xa41d99(0x1d2,'WF%j')](_0x4198cd=>_0x4198cd[_0xa41d99(0x1ba,'1Vof')]===_0xa41d99(0x244,'RH8r')),_0x504bda=systemInstruction??(_0x5e47b5?_0x2bb2c7[_0xa41d99(0x1a0,'74H#')](typeof _0x5e47b5[_0xa41d99(0x204,'ltWf')],_0x2bb2c7[_0xa41d99(0x211,'j$%s')])?_0x5e47b5[_0xa41d99(0x1d7,'G$sn')]:_0x5e47b5[_0xa41d99(0x22a,'^ejS')]?.[0x1717+0x1d8b+-0x34a2*0x1]?.[_0xa41d99(0x1bc,'1Vof')]??'':null),_0xe9ad93=messages[_0xa41d99(0x1ec,']gqB')](_0x4c4c92=>_0x4c4c92[_0xa41d99(0x228,'o2xT')]!==_0xa41d99(0x238,'74H#'))[_0xa41d99(0x249,'7f0M')](_0x450a3b=>{const _0x31ebc8=_0xa41d99;if(_0x450a3b[_0x31ebc8(0x190,'1#Vz')])return{'role':_0x2bb2c7[_0x31ebc8(0x259,'o2xT')](_0x450a3b[_0x31ebc8(0x248,']EaD')],_0x2bb2c7[_0x31ebc8(0x234,'Q0e1')])?_0x2bb2c7[_0x31ebc8(0x1a5,'WF%j')]:_0x450a3b[_0x31ebc8(0x1cf,'fb2E')],'parts':_0x450a3b[_0x31ebc8(0x1c6,'M145')]};return{'role':_0x2bb2c7[_0x31ebc8(0x1a1,'%%lb')](_0x450a3b[_0x31ebc8(0x1b6,'h4EN')],_0x2bb2c7[_0x31ebc8(0x1fd,'CLzw')])?_0x2bb2c7[_0x31ebc8(0x1b2,'[ix0')]:_0x450a3b[_0x31ebc8(0x217,'jm!t')],'parts':[{'text':_0x2bb2c7[_0x31ebc8(0x1e8,'QQFP')](typeof _0x450a3b[_0x31ebc8(0x247,'1Vof')],_0x2bb2c7[_0x31ebc8(0x253,'O1mK')])?_0x450a3b[_0x31ebc8(0x261,'cHRB')]:JSON[_0x31ebc8(0x216,'[ix0')](_0x450a3b[_0x31ebc8(0x261,'cHRB')])}]};});if(fileBuffer){const _0x144b6a=await _0x2bb2c7[_0xa41d99(0x1ac,'c92R')](fileTypeFromBuffer,fileBuffer),_0x37d354=_0x144b6a?.[_0xa41d99(0x1d4,'%%lb')]??_0x2bb2c7[_0xa41d99(0x205,'q)Z6')];if(!SUPPORTED_MIMES[_0xa41d99(0x1f0,'%%lb')](_0x37d354))throw new Error(_0xa41d99(0x221,'jm!t')+_0xa41d99(0x256,'GhXS')+_0xa41d99(0x1a3,'jm!t')+_0x37d354);const _0x48113d={'inlineData':{'mimeType':_0x37d354,'data':fileBuffer[_0xa41d99(0x254,'7f0M')](_0x2bb2c7[_0xa41d99(0x18f,'7f0M')])}},_0x28b03e=_0xe9ad93[_0x2bb2c7[_0xa41d99(0x1fe,'J0zX')](_0xe9ad93[_0xa41d99(0x1de,'ZEt4')],-0xf71+-0x15e6+0x8*0x4ab)];if(_0x2bb2c7[_0xa41d99(0x1b4,'h4EN')](_0x28b03e?.[_0xa41d99(0x260,'%%lb')],_0x2bb2c7[_0xa41d99(0x194,'JfI7')]))_0x28b03e[_0xa41d99(0x23c,'jm!t')][_0xa41d99(0x23a,'Q1Vx')](_0x48113d);else _0xe9ad93[_0xa41d99(0x245,'%%lb')]({'role':_0x2bb2c7[_0xa41d99(0x192,'1Vof')],'parts':[_0x48113d]});}const _0x17f58e={'model':CONFIG[_0xa41d99(0x218,'Q1Vx')],'request':{'contents':_0xe9ad93,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0x2bb2c7[_0xa41d99(0x25d,'&y*o')],'includeThoughts':!![]}},'safetySettings':[{'category':_0x2bb2c7[_0xa41d99(0x242,'z1f4')],'threshold':_0x2bb2c7[_0xa41d99(0x1e2,'I7e5')]},{'category':_0x2bb2c7[_0xa41d99(0x21c,'[ix0')],'threshold':_0x2bb2c7[_0xa41d99(0x223,'RElJ')]},{'category':_0x2bb2c7[_0xa41d99(0x1f8,'O1mK')],'threshold':_0x2bb2c7[_0xa41d99(0x18e,'cjTI')]},{'category':_0x2bb2c7[_0xa41d99(0x1e6,']gqB')],'threshold':_0x2bb2c7[_0xa41d99(0x214,'WF%j')]}],...tools?.[_0xa41d99(0x1ee,'fb2E')]&&{'tools':tools},..._0x2bb2c7[_0xa41d99(0x25a,'CLzw')](_0x504bda,{'systemInstruction':{'role':_0x2bb2c7[_0xa41d99(0x243,'ga6q')],'parts':[{'text':_0x504bda}]}})},'stream':![]},{data:_0x1784ef}=await _0x2b0069[_0xa41d99(0x1c4,'7f0M')](CONFIG[_0xa41d99(0x1a7,'^s]^')],_0x17f58e,{'headers':{...CONFIG[_0xa41d99(0x184,'Qs]s')],'authorization':_0xa41d99(0x25c,'RElJ')+_0x2df274}});if(!_0x1784ef?.[_0xa41d99(0x1eb,'QQFP')]?.[_0xa41d99(0x21d,'RElJ')])throw new Error(_0x2bb2c7[_0xa41d99(0x1cd,'J0zX')]);const _0xe1dc39=_0x1784ef[_0xa41d99(0x227,'h4EN')][-0x1882*-0x1+0x8*0x45e+-0x3b72],_0xec0cc0=_0xe1dc39[_0xa41d99(0x1ed,'VL#^')]?.[_0xa41d99(0x22b,'[ae[')]??[];return{'parts':_0xec0cc0,'candidate':_0xe1dc39,'raw':_0x1784ef};}export async function chat(_0x1a16ea=[],_0x2ec7b9=null){const _0xe8dcb=_0x451dbc,_0x19b41f={'htqRN':function(_0x16f292,_0x4a272a){return _0x16f292(_0x4a272a);}},{parts:_0x30f1d9}=await _0x19b41f[_0xe8dcb(0x232,'7f0M')](callGemini,{'messages':_0x1a16ea,'fileBuffer':_0x2ec7b9});return _0x30f1d9[_0xe8dcb(0x25b,'ZEt4')](_0x440e26=>_0x440e26[_0xe8dcb(0x1d5,'[ix0')]??'')[_0xe8dcb(0x20c,'JfI7')]('');}
|
|
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
|
+
}
|