@ikyyofc/gemini-cli 4.0.5 → 4.0.7
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
|
+
const _0x641c88=_0x59d0;function _0x3a4a(){const _0x297f63=['a8oJW5K','mSo6WQ8zEW','W5RdUuRcNLS','BKtcVSkqEXBcLSktWRWX','W43cJxTT','WRaormoUAa','WOFcJ8kWwv8','uJpdTCkI','W4q1bmkhWRfEWOBcJCoVWRK','WObRW4xdS8onW6CujCkoWOu','W47cHLj0','W6/cJdaurG','WQvUWOyfpa','WP7dRrRcRG','W5HJW5/cVem','W4uGW47cSKO','suLrW74wuuBdR8kSfa','W6FdN8oXW7lcK8kadq','WPNcI2X9WRH2WRDHWPXc','W5BcNNj6WRS','k8o1WQajyG','tmoaW6Sh','WRrhWPPDwq','emkTj0S','vc/dOSkVWRZcPWvcW73cRa','bsK2BxZdOSowWPvbWQa','t3VdS1bXkcGsWQPV','ccmEWR42','o8oEaxm','WRzUWPPTaxTefq','eYvQoW','W67dG8o4W4tcKW','WQWKWOHQqxymq8kAWQm','W4RcMg9WWQK','j2DXWOFdNCoLW5y0sW','kaFdISoagG','WOGia2O','WOpcLmozW544W5bbomo/uq','W5JcU3PyWQv6WQjKWQXH','WRvmWOL9sW','WQlcMmo0iW','otbfW5pcISoT','a8k3l0DCgWZdKqHr','WPudhg5cW6SrWONcRty','jwfgWPBdGmkJW48+','W4lcQ0T2la','WQpcJSoPjCoVpKDHthq','W4FcJSklWQS+','W6S0W47dLmkhkSkkW4m','WP4QW4G6pa','WRDjW47dSCkG','bSodmSk2tq','ogPbWO3dMCkVW48','WOXEW4O','i8oxWOKNDSoFdSkVW4RcLG','DxJcJmobpq','W4mhW7xcHfy','WP/dTHFcUCk7CHv+WQFcJW','pZbcW5C','rCoPWOHmkx7cJXxdQSkq','qSoUBSo/bq','W5a2WPNcRSkxWRD4f8kRWQldNmkt','W4elaGrV','WPech3Tp','WRbHW6FdUSkkvCk7W6f3','t8klW7qCELNcQuBcQ8k1','W4VdPe/cIW','wCowW6aAzKRcPe3cVG','mSkcWOpdP8kA','cG1wkbS','gConjmkH','jmkMWP3dLG','fSkTgfPbxqpdNW','fSo5WQuzxG','WRNcM8oLamku','uIFdTmk+WQa','kSo6W7RcH8km','WOL/W51UWQ/dVW','p8kUWP/dHSkcFCocaSooW7e','W4hdMa0','WRzUWPPT','W5/cGw9TWRHN','B2ChWOtdHSkJW6CEA14','o8oaWRxcJq','WPuzvgGqWRyxWPxdRJW','W57cKLTNW7FdMW','WRHBW7HnWRa','uINdTG','WO7dOWxcRSo5nq','W78LW5lcQh4','gCosiCkJzG','W7tcRZehyq','lI7dN8o3gq','qZBdTSkMWRRdQ1DrW6tcSW','WQxdJSooW5yB','W5ddTCovW7FcLa','y8o1dCkxWRyVacldLSoS','nmoAWOXNrSkJ','smoqW6aB','WQLZWRrjxa','xmo/FSo4hG','iSkSWONdHW','W6RdLCoRWQNcKCklfaNcGHS','mmoaWO0N','W7JdMJdcP8om','nSoNWQSTsG','W4VcHLLBWPW','WQpcHCo+e8km','CfGnW4FcKaS','WPPlFfTzjYZcHSovFa','ku9wWOddI1ZdKmoEnZWiWRu','WPpcP8k1sv/cP3S','j3m+WOO','lmotWPRcGMG','WPWZyCoNE8kKdSoVWQ0','BeJcJCosmq','W47cI8ki','W6ddKCoRW6C','nmoQWPm/FW','W7VcJwjRWRHNW6q','oeejWQeg','W4VcH298','j8oDWOO+ASkCgW','W7vGWPTncG','jCoOpvKA','WOddMJSPW71xWRe1WP9w','W5mIwSkb','W43dJG3cJmoekCkrW47dUSkY','o8oAWRxcKq','W4b5WO1IkW','Ax7cS8oep8o+WPOQDCkl','ngCJWOycxComWQdcT8kW','WPyAW7ibeSoDaW','nmk7lN59','WRBdUbJcVSkg','W7WQW7HrwMBcKmk3WPJdJaO1','kXVdSmor','W5hdOSot','W4/dOKFcI0aAWPi1WQ4b','WQLJW7xdQq','m35rWOhdHCk9WPjHC8kw','W7VcKK1dW5W','W6VcO1faW7W','dH5Veae','CSo1gSkw','n8oTWQ7cHu0','qr89FHpdR8oEWOHBWQ0','jwTTWPy','WOBdHmopW5S9W5yaomoVtG','aCkQW4Ow','WOyRt8oYFW','pZJdQSoKd8kLW4XZamkU','WPvHW4tdVW','nmohWPCI','o8ouWRtcKti','W5RcQ1nSWQC','W54ElGu','W4tcMuDfW7a','WPSiW6i','zKRdKxfhcaGYWOzh','yd0NWORdOmkeW48Sta','l8oYWPZcQue','n8k6WOldMSkbr8ogg8oV','WO7dKSofW5eK','WPmge2PxW6LkW4xcRhy','aCk+W4Skia','WOBcVCoNfSks','WR4igMXgW6Tf','aIvOkJFdR8oo','WOfNW4tdRSogW7W','fZ/dMSoOfM3dP8o0W41f','tCkdgX1YgL/cJf4o','W5RdIHVcNa','cSo5W5pcOSkzDSo1W6tdSG','W5mOv8kj','a8k3l0DCgWddIaTq','ixVcQ3OC','WRtcHmo/jCkLkb4','lmopWPlcSG','WRPPWPjQyW','WROmwCoFvSoklmoaWPKe','nColWPO','W6G/WRtdTCk9nmkYW71G','W4xcN1XJW6hcJmoQW5rqWPS','fNpcSCo9W6xcVejkW6pcPCo5CW','WQn7WPj1r3Twf8kqWQq','W6asptbf','p8kZW5uFna','amoHcSkwDW','WPagW78hhSodaW','WR53WQ8mahRcSmkQWQS','W6NdMCoYW6m','s8k/j33dJq','WQRdSCoXW6m','W4bOnSk5k8k5k8oRWQ8/W585','W7hdINhcO3b2WQqeWOKR','W5hcJSkyWQqQ','WRhdJCoAW6CA','zJn9WQyaAmoUWO7cOW','WPWZyCoNE8kKfmoXWQ8W','W5q7WO8VWO3dStP0ACoC','WRjcW6Hp','WRtcSCkVr2i','ECkdW7/dKhT7xWpdLui','W7FdHmoTW6/cMmkjeaBcLq','W4RdNSoLW63cUq','WPNdNH8KWQtcGSkXWPrjWPxdKCk6','nmopWOtcOvrH','zM/dP8oeF8kKW4f1uSki','WQNdNtFcHCkluW1EWPC','zCoYwmo4pa','W6mPfJD0ueRdU8k7gW','nmotWPy+Fa','omkXWRicEG','WRj0W67dQSob','W5WAprTz','o8kOWOe','WPOeW7auhSkch18OuW','WOJcVHpcQKrKWQykWR0','W5iYDmkEWRu','zNNcSSoXkq','cSo8W4FcP8kFoSo7W7FdVf0','W6j3WRTHjHG','hCkMWOFdQCkw','gb1/W7pdSSknW6WJsKa','y8o1dCkxWRyVgctdHW','W43dQNtcRgW','W5RcIw19WRrXWQuOWPzb','W41utIGqWQTrWPBdRdjhW5pdPq','W7JcOc0RxW','WPT+W4TUWQ7cTZvGCG','WP5RWPGMdG','W6ldNCkNAmo1Dd97ugJdTYW','hGiIWP8k','b8oPW5NcRmkcmq','BmkVg8kkWR8','WOhcH8kmW5fM','tCoPxCoylq','W7bZWRLOlHBdHt5IW4a','htldH8oMaNhdQmoVW4zh','uINdTCk+','zH/dGmkiWRC','dbO+WOKf','W6WtDCkkWPu','pmoxW5/dTW','jConAmk2CmoTW6CjW57dHq','W7BdN8oZW6m','yv7dKgnBbaCYWOzo','iSohWQNcSYm','W6rTWOv9hW','jSkJj1HAx0lcIKag','WP3cOCk2wa','i8ojW7BcJ8kZc8oj','eSoUW4hcMSk8','W5JcJK5KbW','iw8PWOCefSomWQlcUW','WRO7W5WDcG','WQLTW7tdQCkC','pmomWRZcKui','kJldHmoNbG','a8k3bxPY','fmkRl0TCgWddLXG','W58oabPD','DYJdTCk/WQpdUfLxW7NcUq','CSoehSkBl8k1W716iry','W4iPW5/cPq','fanVW6NdUmkyW70WvKi','xmoeW6Cs','W73dSLFcLhC','WOKHW5JdVSof','W5NcHhTNW6ddN8kRWPW','W7xcRYqRDW7dHv3dGmol','sIVdPvv0lMKsWRPW','eWm/WPS0','WP8cfJbjW7WrWPVdQZe','W5qtx8k6WPO','FSoLW5btFIhcUvxdUh0','hCkDWQVcHbDmW4SMALa','mJXxW5hdMCo2W5SsENm','W4SYWPOXW7lcQMbNF8kqW6hcHgy','i3ayWQaJ','xCkFWRm','W6O8WR7dN8oBp8kAW4WNW4O','W67dTmoOW6dcRG','W67cQf9hoG','EfNdKhPG','WQtcNSoEi8kH','emkHWQJdOmkl','mXVdPSocpuy','W6RcJJ0izq','WPxdQmk4xftcRwzIc8kt','ea8DWRS1aG3cSCkiiG','nxVcRw9vWQpcT8kFuSox','x8kwE8o8imkTW5OlW6tdJHRcIW','WOCqW6e3mW','wM7dU0G','bSo6WOlcOa0','qCoUtmona8kUWR0tbeW','WPyceNa','xSk0W7VcJCkyk8oDW40','WRhcRIq4D1ldHG','fCoGWOWez8ocp8k8WPhcLG','j2C/WPyy','WO5UW5DZW67dOhL1Amkx','WPZcMvddN8kyoCkrW5BdICkQEW','WOegW70w','W7ddMmoWW7pcKCkgdq','W4RdJHFcICkxBq','WPpdKCohW4n7W5yspW','W5FcSvfvW5u','kCkIWOyfwIhcSKRdMHy','hHX4W53dQW','WOiGW4/dV8ooW6na','pCocfN4ZW63cHdNdOq','bCo4W57cV8kplCo1W6ZdUvK','W5JdVKFcH0aAWOGGW78','pZxcS30aW60','WPZcN8kpwuG','y8oLe8kqWPi','WPyXBSo0E8oLcG','lCoEhhGOWQVcHIFcLI0','W4ZcM1H/W7VdLCkKWO9oWOm','E2RcISoLca','W5lcGSkuWQGAWO5g','WQftWOq/dG','W4DMsmojDSoBkmok','ntRdQdXuWQpcV8kwmmok','W6RcQYePFq7dN0JdH8oC','Br8ZW47cUW','W7tcQa4yzW','g8oxo8kS','WR8eW4eDna','gmo4WRZcIbC','WOX2W77dISor','W73cRM1qW5O','pSoIW4tcVSkgkCo1W7hdOvC','lZroW4lcK8kXW4CAFW','fs9+kN3dQ8oBWOXvWRC','WQfKWQrptW','o8ozW4xdOSoVxJu','q8oPWOPjzNdcUHddHmk1W7G','WOnOW77dJCob','qLZdMx15','WRjQWPbTxq','W6RcN8oWW6xcGSkldu3cNWy','WPDKW4TIWQ0','DCovW47dUmo+qIb9sxC','W7ZdKSoVW7xcUW','WRe5W4y5cG','WPfyWPrarW','mdO7WOyzE2pdISk4fG','W5lcKfvjWQ8','W7hdLCo8W6NcJG','yCoVb8kkWRXUgW','WQyXWQqkgZdcQCo3WR/dGa','rCofz8oJia','kSofWRBcIsH5ubpdJKi','W7lcHJy/wW','WOK5h0HT','W7b2WQ1TkfRdGIzQW4W','AHiFW4a','eCk2ouDDuWtdNHC','mmoxWPW+','geJcNgq6','WQ1PW77dQCoaf8k9W7P6WP0','tmonW7WgCLBcSq','nYKWWPqvFxRdI8k8hq','pGZdU8oaprpdS8o0W44V','WPVcLY/cRSodp8k3W7q','jSkKW4yfqsxdSK3dJv0','dCoAW4ddOCob','WQX4W6dcPq','WPZcNSk/Cga','i2m1WPy','lrnzgWRdKCo2WRn3WO0','cmoUowS7','pSoyf2K','omomWRxcKsr3','WOaDW6mAfCok','W43dGa3cNmoii8ke','W5ZcIKrKw2ryW5z1W74','W5xcIvHGW58','fSoAW4FdT8oT','r07cNmoJdSofWQy','dSoIW5m','DmkhW4P6pSohqCkhW5xdNq','W7JcOrCfxW','WOFcRCkkB3m','iCoaWPyLFq','lCkpWOaRrW','WOb0W4hdQG','rZxcPSkSWQhdP1SfW4ZcJa','z8k6sq'];_0x3a4a=function(){return _0x297f63;};return _0x3a4a();}(function(_0x5bd585,_0x32b511){const _0x53fd19=_0x59d0,_0x57209f=_0x5bd585();while(!![]){try{const _0xeab8f8=parseInt(_0x53fd19(0x1cc,'Ckpi'))/(-0x6*-0x5fb+0x1f09+0x164e*-0x3)*(parseInt(_0x53fd19(0x20c,'Ckpi'))/(-0x2*0x53d+0xa8b+-0xf))+-parseInt(_0x53fd19(0x262,'sog9'))/(-0x138*-0x1f+-0x8*0x59+0xd*-0x2b1)+parseInt(_0x53fd19(0xee,'pCGI'))/(-0x21e5+-0x1*0xc3d+0x1713*0x2)*(-parseInt(_0x53fd19(0x235,'S(0x'))/(-0x2*-0x76+-0x2659+0x2572))+parseInt(_0x53fd19(0x180,'1v3*'))/(-0x3*0xb41+0x425+0x1da4)+parseInt(_0x53fd19(0x1e1,'e7xg'))/(-0x1275+0x2124+-0xea8)*(parseInt(_0x53fd19(0x15e,'e7xg'))/(0x25c8+0x3*0x3f5+-0x319f))+-parseInt(_0x53fd19(0x1c1,'FYEA'))/(0x149*0x7+0x1bd2+0x358*-0xb)*(parseInt(_0x53fd19(0x162,'yB[X'))/(-0x47*0x3f+0x39*0x9+0xf82))+-parseInt(_0x53fd19(0x152,'l!h3'))/(-0x2380+-0x65f*-0x3+-0x2*-0x837)*(-parseInt(_0x53fd19(0x154,'b71i'))/(-0x18a7+-0x1b*-0xd4+0x257*0x1));if(_0xeab8f8===_0x32b511)break;else _0x57209f['push'](_0x57209f['shift']());}catch(_0x34df0b){_0x57209f['push'](_0x57209f['shift']());}}}(_0x3a4a,0x1*0x1742e+-0xe9d56+0x155562));function _0x59d0(_0x53a341,_0x218011){_0x53a341=_0x53a341-(0xa45*0x1+-0xe46+0x4*0x138);const _0xa03f91=_0x3a4a();let _0x1ad4d0=_0xa03f91[_0x53a341];if(_0x59d0['uEcCLU']===undefined){var _0x347ca1=function(_0x43b437){const _0x53bc04='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x232dbe='',_0x22ac9d='';for(let _0x5ca223=-0x1424+0x1*-0x1a7b+0x2e9f,_0x448ed3,_0x4006aa,_0x37b51e=-0x1e3a+-0x1477+0x32b1;_0x4006aa=_0x43b437['charAt'](_0x37b51e++);~_0x4006aa&&(_0x448ed3=_0x5ca223%(0x1283+-0x2325+0x10a6)?_0x448ed3*(-0x59f+-0xc6+0x7*0xf3)+_0x4006aa:_0x4006aa,_0x5ca223++%(-0x584+-0xc0c+0x1194))?_0x232dbe+=String['fromCharCode'](0x3a*0x85+-0xd*-0x266+-0x3c51&_0x448ed3>>(-(-0xf2e+-0x5*0x6ee+0x31d6)*_0x5ca223&-0xd68+0x283+0xd7*0xd)):0xc9+0x3ce+-0xeb*0x5){_0x4006aa=_0x53bc04['indexOf'](_0x4006aa);}for(let _0x1c79d6=-0x110a+0x243+-0x1*-0xec7,_0x18d21c=_0x232dbe['length'];_0x1c79d6<_0x18d21c;_0x1c79d6++){_0x22ac9d+='%'+('00'+_0x232dbe['charCodeAt'](_0x1c79d6)['toString'](-0x18e0+-0x159*-0x15+-0x35d))['slice'](-(-0x1080+-0x667+-0x55*-0x45));}return decodeURIComponent(_0x22ac9d);};const _0x42fe01=function(_0x1c08bf,_0x591aaa){let _0x43473b=[],_0x5e9ca9=-0x1f7*0x12+0x25c3*-0x1+0x4921,_0x530af3,_0x17fb13='';_0x1c08bf=_0x347ca1(_0x1c08bf);let _0x1d2b99;for(_0x1d2b99=0x240b+-0x25*0x52+0xb*-0x233;_0x1d2b99<-0x46e+-0x607+0xb75;_0x1d2b99++){_0x43473b[_0x1d2b99]=_0x1d2b99;}for(_0x1d2b99=-0x1*-0xbba+0x1c1*-0x1+-0x3*0x353;_0x1d2b99<-0x1*0x26b7+-0xaaa+0x3261;_0x1d2b99++){_0x5e9ca9=(_0x5e9ca9+_0x43473b[_0x1d2b99]+_0x591aaa['charCodeAt'](_0x1d2b99%_0x591aaa['length']))%(-0x8c7+-0x1143+0x2*0xd85),_0x530af3=_0x43473b[_0x1d2b99],_0x43473b[_0x1d2b99]=_0x43473b[_0x5e9ca9],_0x43473b[_0x5e9ca9]=_0x530af3;}_0x1d2b99=-0x1bb1+0x216d+-0x5bc,_0x5e9ca9=0xc23+-0x243f+0x181c;for(let _0x23fdae=-0x64d+0x186b+-0x121e;_0x23fdae<_0x1c08bf['length'];_0x23fdae++){_0x1d2b99=(_0x1d2b99+(0x1c85+-0x4*0x2b6+-0x11ac))%(0x293*0x7+-0x1072*0x1+-0x93),_0x5e9ca9=(_0x5e9ca9+_0x43473b[_0x1d2b99])%(-0x5*0x14f+0x2570+-0x1de5),_0x530af3=_0x43473b[_0x1d2b99],_0x43473b[_0x1d2b99]=_0x43473b[_0x5e9ca9],_0x43473b[_0x5e9ca9]=_0x530af3,_0x17fb13+=String['fromCharCode'](_0x1c08bf['charCodeAt'](_0x23fdae)^_0x43473b[(_0x43473b[_0x1d2b99]+_0x43473b[_0x5e9ca9])%(-0xa0e+-0x13*-0x2+0xae8)]);}return _0x17fb13;};_0x59d0['XsVOLb']=_0x42fe01,_0x59d0['HUraZL']={},_0x59d0['uEcCLU']=!![];}const _0x46293b=_0xa03f91[-0x1b55+-0x10db+-0x4*-0xb0c],_0x346bf8=_0x53a341+_0x46293b,_0x30dfde=_0x59d0['HUraZL'][_0x346bf8];return!_0x30dfde?(_0x59d0['AgPCcb']===undefined&&(_0x59d0['AgPCcb']=!![]),_0x1ad4d0=_0x59d0['XsVOLb'](_0x1ad4d0,_0x218011),_0x59d0['HUraZL'][_0x346bf8]=_0x1ad4d0):_0x1ad4d0=_0x30dfde,_0x1ad4d0;}import _0x51d346 from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x641c88(0x1bf,'S(0x')+_0x641c88(0x1f6,'1Wfc')+_0x641c88(0x25b,'K94P')+_0x641c88(0x23e,'mNP%')+_0x641c88(0x1d2,'492M')+_0x641c88(0x102,'$oSJ'),'MODEL':_0x641c88(0x22e,'sog9')+_0x641c88(0x1c8,'@gL6'),'HEADERS':{'User-Agent':_0x641c88(0x140,'1v3*')+'.2','Accept-Encoding':_0x641c88(0x222,'sog9'),'content-type':_0x641c88(0x200,'f!Rz')+_0x641c88(0x245,'wv%R')+_0x641c88(0x20b,'7PUc')+'8'}},SUPPORTED_MIMES=new Set([_0x641c88(0x163,'e7xg'),_0x641c88(0x10e,'e7xg'),_0x641c88(0x265,'l!h3'),_0x641c88(0x1ab,'@gL6'),_0x641c88(0x1b2,'pCGI'),_0x641c88(0x175,'5p)b'),_0x641c88(0x1d5,'9qRP'),_0x641c88(0x1e3,'@gL6'),_0x641c88(0x1a1,'JGY9'),_0x641c88(0x19b,'yB[X'),_0x641c88(0x1c5,'e8zA')+'v',_0x641c88(0x15a,')#Jy'),_0x641c88(0x126,'EcB['),_0x641c88(0x247,'h*tL'),_0x641c88(0x23d,'b71i'),_0x641c88(0x17d,'Z4o%'),_0x641c88(0x1d7,'EcB['),_0x641c88(0x24f,'JGY9'),_0x641c88(0x182,'mz1Z'),_0x641c88(0x149,'&uPq'),_0x641c88(0x203,'C1OF'),_0x641c88(0x14b,'JGY9'),_0x641c88(0xfc,'Z4o%')+_0x641c88(0x237,'GOhH')+'us',_0x641c88(0x130,'dGYR')+_0x641c88(0x1a9,'sog9'),_0x641c88(0x218,'$9IH'),_0x641c88(0x1ec,'pCGI'),_0x641c88(0x1d0,'dGYR'),_0x641c88(0x1ed,'mNP%')+_0x641c88(0x227,'EcB['),_0x641c88(0x1cb,'mz1Z')+_0x641c88(0x120,'5p)b'),_0x641c88(0x242,'wv%R'),_0x641c88(0x208,'l!h3')+_0x641c88(0xeb,'Ckpi'),_0x641c88(0x253,'ykmB')+_0x641c88(0x225,'&uPq'),_0x641c88(0xf9,'b71i')+_0x641c88(0x108,')ekM'),_0x641c88(0x18a,'C1OF')+_0x641c88(0x233,'tcw3'),_0x641c88(0x23f,'&byt')+_0x641c88(0x187,'Z4o%')]);async function getToken(){const _0x52a90e=_0x641c88,_0x1b233a={'rUOgE':_0x52a90e(0x153,'(8U[')+_0x52a90e(0x266,'F$fn')+_0x52a90e(0x20d,'492M')+_0x52a90e(0x1d6,'&uPq')+_0x52a90e(0xf0,'1v3*')+_0x52a90e(0x250,'1v3*')+_0x52a90e(0xea,'UGZK')+_0x52a90e(0x22d,'()WV')+_0x52a90e(0x24b,'GOhH')+_0x52a90e(0x128,'h*tL')+_0x52a90e(0x1c9,'K94P')+_0x52a90e(0xfd,'K94P'),'unLyX':_0x52a90e(0x17c,'pCGI')+_0x52a90e(0x16d,'3]Zd'),'rnZBA':_0x52a90e(0x196,'JGY9')+_0x52a90e(0x164,'mz1Z')+_0x52a90e(0x12e,'mNP%')+_0x52a90e(0x1e2,'xGNf')+_0x52a90e(0x119,'GOhH')+_0x52a90e(0x147,'JGY9')+_0x52a90e(0x21d,'K94P'),'nEHlO':_0x52a90e(0x155,'wv%R')+_0x52a90e(0x1d8,'xGNf'),'lWZAa':_0x52a90e(0x1ae,'1v3*')+_0x52a90e(0x1d4,'sog9'),'BzqaO':_0x52a90e(0x133,'9T0H')+_0x52a90e(0x1b6,'l!h3')+_0x52a90e(0x1a4,'e8zA')+_0x52a90e(0x1b1,'dKo!'),'rBOKL':_0x52a90e(0x228,'7PUc')+_0x52a90e(0x167,'f!Rz')+_0x52a90e(0x16c,'9T0H')+_0x52a90e(0x109,'Av3m')+_0x52a90e(0x188,'dGYR')},{data:_0x4b88e5}=await _0x51d346[_0x52a90e(0x127,'l!h3')](_0x1b233a[_0x52a90e(0x105,'K94P')],{'clientType':_0x1b233a[_0x52a90e(0x195,'C1OF')]},{'headers':{'User-Agent':_0x1b233a[_0x52a90e(0x106,'GOhH')],'Content-Type':_0x1b233a[_0x52a90e(0x257,'l!h3')],'X-Android-Package':_0x1b233a[_0x52a90e(0x1f2,'&byt')],'X-Android-Cert':_0x1b233a[_0x52a90e(0xfa,'dGYR')],'X-Firebase-GMPID':_0x1b233a[_0x52a90e(0x1ff,'e8zA')]}});return _0x4b88e5[_0x52a90e(0x259,'h*tL')];}function buildPayload({messages:_0x206f85,fileBuffer:_0x345031,tools:_0x14c6e7,systemInstruction:_0x4e94f1,stream:_0x52763c}){const _0x52ccf2=_0x641c88,_0x44ff55={'jDwfX':function(_0x5f2472,_0x589d4c){return _0x5f2472===_0x589d4c;},'VuSOa':_0x52ccf2(0x13e,'UGZK'),'pXwup':_0x52ccf2(0x1f5,'mz1Z'),'nCOBF':function(_0x405cee,_0x117261){return _0x405cee===_0x117261;},'typDH':_0x52ccf2(0x216,'5p)b'),'dcRIM':function(_0x6f3c4f,_0x4a4955){return _0x6f3c4f===_0x4a4955;},'EPDnv':function(_0x13778b,_0x30843b){return _0x13778b(_0x30843b);},'FhYSy':_0x52ccf2(0x179,'&uPq')+_0x52ccf2(0x1f4,'$oSJ')+_0x52ccf2(0x138,'Av3m'),'weQRI':_0x52ccf2(0x24e,'pCGI'),'KovZd':function(_0x432d72,_0x95b37d){return _0x432d72-_0x95b37d;},'xbpsM':_0x52ccf2(0x24d,'ykmB'),'lWTdr':_0x52ccf2(0x165,'mz1Z'),'RKASQ':_0x52ccf2(0x15f,'EcB[')+_0x52ccf2(0x150,'e7xg')+_0x52ccf2(0x15d,'dGYR'),'suOra':_0x52ccf2(0x18b,'7PUc'),'FGcWN':_0x52ccf2(0x146,'7PUc')+_0x52ccf2(0x16f,'Av3m')+_0x52ccf2(0x1ea,'(8U['),'zsQfv':_0x52ccf2(0x13b,'&byt')+_0x52ccf2(0x20a,'S(0x')+_0x52ccf2(0x212,'mNP%')+'T','dKrTh':_0x52ccf2(0x1fa,'S(0x')+_0x52ccf2(0x1a6,'pCGI')+_0x52ccf2(0x193,'&byt')+'T','fyKTL':function(_0x314a4b,_0x1f8a54){return _0x314a4b&&_0x1f8a54;},'znupA':function(_0x4da7d7,_0x3cdb30){return _0x4da7d7??_0x3cdb30;}},_0x30d351=_0x206f85[_0x52ccf2(0x22f,'$9IH')](_0x31cb87=>_0x31cb87[_0x52ccf2(0x267,'EcB[')]===_0x52ccf2(0xf1,'(8U[')),_0x5a3187=_0x4e94f1??(_0x30d351?_0x44ff55[_0x52ccf2(0x117,'C1OF')](typeof _0x30d351[_0x52ccf2(0x144,'mNP%')],_0x44ff55[_0x52ccf2(0x10d,'dKo!')])?_0x30d351[_0x52ccf2(0x1db,'e7xg')]:_0x30d351[_0x52ccf2(0xe7,'b71i')]?.[-0x1b22+-0x577*-0x6+-0x5a8]?.[_0x52ccf2(0x101,'UGZK')]??'':null),_0x56a1d3=_0x206f85[_0x52ccf2(0x145,'sog9')](_0x2c2b06=>_0x2c2b06[_0x52ccf2(0x1cd,'5p)b')]!==_0x52ccf2(0x215,'f!Rz'))[_0x52ccf2(0x174,'UGZK')](_0x4b75de=>{const _0x44af25=_0x52ccf2;if(_0x4b75de[_0x44af25(0x14c,'xGNf')])return{'role':_0x44ff55[_0x44af25(0x252,'$9IH')](_0x4b75de[_0x44af25(0x115,'GOhH')],_0x44ff55[_0x44af25(0x183,')#Jy')])?_0x44ff55[_0x44af25(0x112,'K94P')]:_0x4b75de[_0x44af25(0x115,'GOhH')],'parts':_0x4b75de[_0x44af25(0x1f3,'wv%R')]};return{'role':_0x44ff55[_0x44af25(0x1b7,'$oSJ')](_0x4b75de[_0x44af25(0xe3,'UGZK')],_0x44ff55[_0x44af25(0x104,'Ckpi')])?_0x44ff55[_0x44af25(0x240,'S(0x')]:_0x4b75de[_0x44af25(0xe2,'FYEA')],'parts':[{'text':_0x44ff55[_0x44af25(0x118,'9qRP')](typeof _0x4b75de[_0x44af25(0x10b,'UsVH')],_0x44ff55[_0x44af25(0x1c2,'5p)b')])?_0x4b75de[_0x44af25(0x236,'$oSJ')]:JSON[_0x44af25(0x205,'JGY9')](_0x4b75de[_0x44af25(0x159,'5p)b')])}]};});if(_0x345031){const _0x4a3fdb=_0x44ff55[_0x52ccf2(0x22a,'e7xg')](fileTypeFromBuffer,_0x345031),_0x165502=_0x4a3fdb?.[_0x52ccf2(0x197,'UsVH')]??_0x44ff55[_0x52ccf2(0x1bb,'UGZK')];if(!SUPPORTED_MIMES[_0x52ccf2(0x13a,'5p)b')](_0x165502))throw new Error(_0x52ccf2(0x1eb,'&uPq')+_0x52ccf2(0x1ac,'&byt')+_0x52ccf2(0x1b5,'F$fn')+_0x165502);const _0x13e501={'inlineData':{'mimeType':_0x165502,'data':_0x345031[_0x52ccf2(0x251,'h*tL')](_0x44ff55[_0x52ccf2(0x21f,'UsVH')])}},_0x5aa67c=_0x56a1d3[_0x44ff55[_0x52ccf2(0x17b,'UGZK')](_0x56a1d3[_0x52ccf2(0x16b,'dKo!')],0x1*-0x1d69+0x1*0x25ce+-0x864)];if(_0x44ff55[_0x52ccf2(0x21e,'@gL6')](_0x5aa67c?.[_0x52ccf2(0x192,'$oSJ')],_0x44ff55[_0x52ccf2(0x14f,'wv%R')]))_0x5aa67c[_0x52ccf2(0x1ca,'yB[X')][_0x52ccf2(0x241,'9qRP')](_0x13e501);else _0x56a1d3[_0x52ccf2(0x12c,'Z4o%')]({'role':_0x44ff55[_0x52ccf2(0x1f7,'$oSJ')],'parts':[_0x13e501]});}return{'model':CONFIG[_0x52ccf2(0x1c4,'f!Rz')],'request':{'contents':_0x56a1d3,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0x44ff55[_0x52ccf2(0x1d9,'UsVH')],'includeThoughts':!![]},'temperature':0x0},'safetySettings':[{'category':_0x44ff55[_0x52ccf2(0xe5,'K94P')],'threshold':_0x44ff55[_0x52ccf2(0x177,'()WV')]},{'category':_0x44ff55[_0x52ccf2(0x1b8,'$9IH')],'threshold':_0x44ff55[_0x52ccf2(0x1a2,'Av3m')]},{'category':_0x44ff55[_0x52ccf2(0x25c,'9T0H')],'threshold':_0x44ff55[_0x52ccf2(0x132,'e7xg')]},{'category':_0x44ff55[_0x52ccf2(0xe0,'UGZK')],'threshold':_0x44ff55[_0x52ccf2(0x1ba,'ykmB')]}],..._0x14c6e7?.[_0x52ccf2(0x186,'&uPq')]&&{'tools':_0x14c6e7},..._0x44ff55[_0x52ccf2(0x185,'S(0x')](_0x5a3187,{'systemInstruction':{'role':_0x44ff55[_0x52ccf2(0x219,'(8U[')],'parts':[{'text':_0x5a3187}]}})},'stream':_0x44ff55[_0x52ccf2(0x189,'e8zA')](_0x52763c,![])};}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0x92e7d4=_0x641c88,_0x2d3ed9={'SMzmV':function(_0x293543){return _0x293543();},'hmtKs':function(_0xc111f,_0x302b3c){return _0xc111f(_0x302b3c);},'uiFWi':_0x92e7d4(0x191,'FYEA')+_0x92e7d4(0x1be,'UsVH')+_0x92e7d4(0x223,'b71i')+'I'},_0xdda0cc=await _0x2d3ed9[_0x92e7d4(0x1e8,'f!Rz')](getToken),_0x3ec5c4=_0x2d3ed9[_0x92e7d4(0xf7,'@gL6')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':![]}),{data:_0xd162b0}=await _0x51d346[_0x92e7d4(0x18c,'b71i')](CONFIG[_0x92e7d4(0x125,'$oSJ')],_0x3ec5c4,{'headers':{...CONFIG[_0x92e7d4(0x198,'&uPq')],'authorization':_0x92e7d4(0x143,'1v3*')+_0xdda0cc}});if(!_0xd162b0?.[_0x92e7d4(0x11b,'Ckpi')]?.[_0x92e7d4(0x1bc,'7PUc')])throw new Error(_0x2d3ed9[_0x92e7d4(0x261,'e8zA')]);const _0x88ff56=_0xd162b0[_0x92e7d4(0x17f,'GOhH')][-0x17a4+0xb76+0x617*0x2][_0x92e7d4(0x217,'Ckpi')]?.[_0x92e7d4(0x19d,'l!h3')]??[];return{'parts':_0x88ff56,'raw':_0xd162b0};}export async function callGeminiStream({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null,onThought:_0xc0feab,onText:_0x22b70f,onDone:_0xbe61fa}={}){const _0x46eea7=_0x641c88,_0x5bb877={'Nllag':function(_0xbc14c8,_0x388fe6){return _0xbc14c8?.(_0x388fe6);},'mpMlS':function(_0x38bdaf,_0x41ff3f){return _0x38bdaf(_0x41ff3f);},'wfZdT':function(_0x361f36,_0x299292){return _0x361f36(_0x299292);},'RupPP':_0x46eea7(0x1dd,'(8U[')+_0x46eea7(0x1fe,')#Jy')+_0x46eea7(0x11a,'()WV'),'uecox':_0x46eea7(0xf4,'3]Zd'),'QzDfl':function(_0x12b1a1,_0x2a6d31){return _0x12b1a1-_0x2a6d31;},'kxVPr':function(_0x4dbde6,_0x19a3cb){return _0x4dbde6===_0x19a3cb;},'iMOVa':_0x46eea7(0x214,'9qRP'),'UzFpb':function(_0x4038c0,_0x5d302e){return _0x4038c0?.(_0x5d302e);},'tnoBL':_0x46eea7(0xdf,'F$fn'),'kCBRb':_0x46eea7(0x264,'1v3*'),'EMNkW':_0x46eea7(0xe9,'mz1Z'),'IREjU':_0x46eea7(0x1da,'Z4o%'),'mazrX':_0x46eea7(0xf8,'7PUc'),'wXvoa':_0x46eea7(0x20f,'l!h3'),'dbhgM':_0x46eea7(0x1e4,')ekM'),'CEKpg':_0x46eea7(0x12a,'(8U['),'SSvYi':_0x46eea7(0x1c0,'xGNf')+'E]','tvUBH':_0x46eea7(0x1cf,'Ckpi'),'TEJqb':function(_0x5d8b15,_0x13d614){return _0x5d8b15!==_0x13d614;},'wyBeS':_0x46eea7(0x1ee,'wv%R'),'NnzkO':_0x46eea7(0x15c,'Syvs'),'rpigs':_0x46eea7(0xe6,'ykmB'),'oTiNS':_0x46eea7(0x1e5,'@gL6'),'IRMnq':_0x46eea7(0x238,'GOhH'),'bXhMi':_0x46eea7(0x25f,'pCGI'),'uKRUy':_0x46eea7(0x21c,'&uPq'),'AvMLz':_0x46eea7(0x220,'K94P'),'mCYIG':function(_0x4ff96c){return _0x4ff96c();},'auNTA':_0x46eea7(0x17a,'C1OF')},_0x339bd2=await _0x5bb877[_0x46eea7(0x256,'5p)b')](getToken),_0x107738=_0x5bb877[_0x46eea7(0x263,'Av3m')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':!![]}),_0xb79d32=await _0x51d346[_0x46eea7(0x11c,'f!Rz')](CONFIG[_0x46eea7(0x25a,'l!h3')],_0x107738,{'headers':{...CONFIG[_0x46eea7(0x21b,'9T0H')],'authorization':_0x46eea7(0x113,'GOhH')+_0x339bd2},'responseType':_0x5bb877[_0x46eea7(0x1a0,'JGY9')]});return new Promise((_0x292482,_0x57cd7e)=>{const _0x351608=_0x46eea7,_0x3146db={'taWBC':function(_0x3fccf1,_0x555b66){const _0x2067a8=_0x59d0;return _0x5bb877[_0x2067a8(0x171,'492M')](_0x3fccf1,_0x555b66);},'LmPnO':_0x5bb877[_0x351608(0x16e,'e8zA')],'IiuyQ':_0x5bb877[_0x351608(0x1fc,'$oSJ')],'ZznuI':function(_0x520ddb,_0x56bf1f){const _0x187939=_0x351608;return _0x5bb877[_0x187939(0x11d,'C1OF')](_0x520ddb,_0x56bf1f);},'uTdVN':function(_0x595831,_0x325d4e){const _0xbb2e9e=_0x351608;return _0x5bb877[_0xbb2e9e(0xff,'wv%R')](_0x595831,_0x325d4e);},'dfVWb':_0x5bb877[_0x351608(0x1e0,')#Jy')],'iroVb':function(_0x11f210,_0x325dc3){const _0x53edfa=_0x351608;return _0x5bb877[_0x53edfa(0x172,'sog9')](_0x11f210,_0x325dc3);},'VyePN':function(_0x590b41,_0x3f56e7){const _0x21b4cd=_0x351608;return _0x5bb877[_0x21b4cd(0x1fb,'GOhH')](_0x590b41,_0x3f56e7);},'zZyFG':_0x5bb877[_0x351608(0x107,'ykmB')],'kGPvI':_0x5bb877[_0x351608(0x158,'FYEA')],'uLLBO':_0x5bb877[_0x351608(0x1d3,'pCGI')],'UlkwK':_0x5bb877[_0x351608(0x207,'xGNf')],'lVdMZ':_0x5bb877[_0x351608(0x258,'FYEA')],'MTNfA':_0x5bb877[_0x351608(0x13d,'dKo!')],'ybvQJ':_0x5bb877[_0x351608(0x181,'@gL6')],'VRSFx':_0x5bb877[_0x351608(0x213,'9qRP')],'QVvGR':function(_0x5e7196,_0x58ba1b){const _0x5003e4=_0x351608;return _0x5bb877[_0x5003e4(0x1e9,'sog9')](_0x5e7196,_0x58ba1b);},'wdcyW':_0x5bb877[_0x351608(0x1f9,'wv%R')],'nDssI':_0x5bb877[_0x351608(0x1b4,'yB[X')],'sNuXT':function(_0x190ed5,_0x1014ac){const _0x215184=_0x351608;return _0x5bb877[_0x215184(0xfb,'$oSJ')](_0x190ed5,_0x1014ac);},'BPWJq':_0x5bb877[_0x351608(0x248,'7PUc')],'adpvC':function(_0x38a9ed,_0x1240dc){const _0x5482e3=_0x351608;return _0x5bb877[_0x5482e3(0x1ad,'S(0x')](_0x38a9ed,_0x1240dc);},'cCPuz':_0x5bb877[_0x351608(0x169,'$oSJ')],'vLxDw':_0x5bb877[_0x351608(0xf6,'FYEA')]};if(_0x5bb877[_0x351608(0x100,'e8zA')](_0x5bb877[_0x351608(0x12b,'mNP%')],_0x5bb877[_0x351608(0x19c,'5p)b')]))_0x2b2ebd+=_0x45aef9[_0x351608(0x148,'Ckpi')],_0x5bb877[_0x351608(0x21a,'1Wfc')](_0x1b9e67,_0x5be6c4[_0x351608(0x12f,'h*tL')]);else{let _0xbce88b='',_0x27830c='',_0x3cb8da='';const _0xe54d21=[];_0xb79d32[_0x351608(0x111,'$oSJ')]['on'](_0x5bb877[_0x351608(0x221,'492M')],_0x4c21e1=>{const _0x1daa8d=_0x351608,_0x1dfc5e={'jsgBe':function(_0x37c790,_0x5c35a1){const _0x4807a6=_0x59d0;return _0x3146db[_0x4807a6(0x139,'(8U[')](_0x37c790,_0x5c35a1);},'ifzfp':function(_0x1515ef,_0x190582){const _0x3e350f=_0x59d0;return _0x3146db[_0x3e350f(0x17e,'EcB[')](_0x1515ef,_0x190582);},'oGDCm':function(_0x5993ef,_0x4161d7){const _0x5acfdb=_0x59d0;return _0x3146db[_0x5acfdb(0x161,'dGYR')](_0x5993ef,_0x4161d7);},'DytzX':_0x3146db[_0x1daa8d(0x1d1,'(8U[')],'wGkde':_0x3146db[_0x1daa8d(0xe1,'mNP%')],'LirXy':_0x3146db[_0x1daa8d(0x19f,'7PUc')],'vHKSt':function(_0x19f893,_0x1bc09f){const _0x46d1b9=_0x1daa8d;return _0x3146db[_0x46d1b9(0x178,'9T0H')](_0x19f893,_0x1bc09f);}};if(_0x3146db[_0x1daa8d(0x129,'(8U[')](_0x3146db[_0x1daa8d(0x20e,'1Wfc')],_0x3146db[_0x1daa8d(0x210,'UsVH')]))_0x236b04[_0x1daa8d(0x10c,'yB[X')](_0x2fdf3b);else{_0xbce88b+=_0x4c21e1[_0x1daa8d(0xe4,'JGY9')](_0x3146db[_0x1daa8d(0x18f,'()WV')]);const _0x1b4f02=_0xbce88b[_0x1daa8d(0x246,'GOhH')]('\x0a');_0xbce88b=_0x1b4f02[_0x1daa8d(0xf3,'b71i')]();for(const _0x467b86 of _0x1b4f02){if(_0x3146db[_0x1daa8d(0x202,'1v3*')](_0x3146db[_0x1daa8d(0x199,'&uPq')],_0x3146db[_0x1daa8d(0x1b9,'&byt')])){if(_0x244b7f[_0x1daa8d(0x209,'F$fn')]&&_0x22b5c3[_0x1daa8d(0x1c3,'&byt')])_0x373013+=_0x29e8ee[_0x1daa8d(0x1a5,'tcw3')],_0x1dfc5e[_0x1daa8d(0x244,'$oSJ')](_0x11eba8,_0x18239c[_0x1daa8d(0x23a,'F$fn')]);else{if(_0x5bb91f[_0x1daa8d(0x249,'1v3*')])_0x27ffc2+=_0x4d7ddf[_0x1daa8d(0x14e,'dKo!')],_0x1dfc5e[_0x1daa8d(0x13f,'dGYR')](_0x10993,_0x4b747b[_0x1daa8d(0x204,')ekM')]);else _0x26d2e8[_0x1daa8d(0x11e,'9T0H')+'ll']&&_0x256bb8[_0x1daa8d(0xfe,'F$fn')](_0x527f14);}}else{const _0x6781c4=_0x467b86[_0x1daa8d(0x103,'K94P')]();if(!_0x6781c4||_0x3146db[_0x1daa8d(0x142,'ykmB')](_0x6781c4,_0x3146db[_0x1daa8d(0x160,'75gV')]))continue;const _0x5e96c7=_0x6781c4[_0x1daa8d(0x25e,'3]Zd')](_0x3146db[_0x1daa8d(0x201,'@gL6')])?_0x6781c4[_0x1daa8d(0x234,'tcw3')](-0x9*-0x264+0x860+-0x1dde):_0x6781c4;try{const _0x19c8f0=JSON[_0x1daa8d(0x173,'Av3m')](_0x5e96c7),_0x1234b7=_0x19c8f0[_0x1daa8d(0x11f,'yB[X')]?.[-0xc61*-0x1+-0x346+-0x91b*0x1]?.[_0x1daa8d(0x1ef,'1Wfc')]?.[_0x1daa8d(0x19a,'$9IH')]??[];for(const _0x2f94d9 of _0x1234b7){if(_0x3146db[_0x1daa8d(0x230,'@gL6')](_0x3146db[_0x1daa8d(0xf2,'mz1Z')],_0x3146db[_0x1daa8d(0x1f8,'5p)b')])){if(_0x2d6511[_0x1daa8d(0x136,'f!Rz')])return{'role':mxZRfg[_0x1daa8d(0x12d,'dKo!')](_0x115422[_0x1daa8d(0x134,'sog9')],mxZRfg[_0x1daa8d(0x166,'UsVH')])?mxZRfg[_0x1daa8d(0x24c,'wv%R')]:_0x523abb[_0x1daa8d(0x23c,'JGY9')],'parts':_0xce83ec[_0x1daa8d(0x141,'@sk^')]};return{'role':mxZRfg[_0x1daa8d(0x239,'K94P')](_0x3d055f[_0x1daa8d(0x14a,'()WV')],mxZRfg[_0x1daa8d(0x1a8,'EcB[')])?mxZRfg[_0x1daa8d(0x22b,'UsVH')]:_0xd40c5a[_0x1daa8d(0x232,'3]Zd')],'parts':[{'text':mxZRfg[_0x1daa8d(0x114,'yB[X')](typeof _0x14918c[_0x1daa8d(0x14d,'ykmB')],mxZRfg[_0x1daa8d(0x156,'Av3m')])?_0x1b8c98[_0x1daa8d(0x1fd,'Z4o%')]:_0x27dfda[_0x1daa8d(0x168,'$oSJ')](_0x29c7e6[_0x1daa8d(0x116,'K94P')])}]};}else{if(_0x2f94d9[_0x1daa8d(0x1ce,'$oSJ')]&&_0x2f94d9[_0x1daa8d(0x23a,'F$fn')])_0x27830c+=_0x2f94d9[_0x1daa8d(0x124,'7PUc')],_0x3146db[_0x1daa8d(0x18e,'S(0x')](_0xc0feab,_0x2f94d9[_0x1daa8d(0x101,'UGZK')]);else{if(_0x2f94d9[_0x1daa8d(0x211,'yB[X')]){if(_0x3146db[_0x1daa8d(0x254,'75gV')](_0x3146db[_0x1daa8d(0x137,'GOhH')],_0x3146db[_0x1daa8d(0x10f,'9T0H')]))_0x3cb8da+=_0x2f94d9[_0x1daa8d(0x14e,'dKo!')],_0x3146db[_0x1daa8d(0x194,'f!Rz')](_0x22b70f,_0x2f94d9[_0x1daa8d(0x249,'1v3*')]);else{const _0x710631=MQjpbb[_0x1daa8d(0x1de,'9T0H')](_0x54f963,_0x4fc498),_0x1179aa=_0x710631?.[_0x1daa8d(0x15b,'$oSJ')]??MQjpbb[_0x1daa8d(0x1e7,'5p)b')];if(!_0x5bad61[_0x1daa8d(0x110,'75gV')](_0x1179aa))throw new _0x2138ee(_0x1daa8d(0x1a3,'b71i')+_0x1daa8d(0x24a,'dGYR')+_0x1daa8d(0x224,'Z4o%')+_0x1179aa);const _0x44dd19={'inlineData':{'mimeType':_0x1179aa,'data':_0x1f1ee8[_0x1daa8d(0x1aa,'(8U[')](MQjpbb[_0x1daa8d(0xf5,'tcw3')])}},_0x51eaf2=_0x403a00[MQjpbb[_0x1daa8d(0x122,'3]Zd')](_0x1e8fc5[_0x1daa8d(0x16b,'dKo!')],0x12f8+0x267f+0xb7e*-0x5)];if(MQjpbb[_0x1daa8d(0x1af,'()WV')](_0x51eaf2?.[_0x1daa8d(0x243,'mNP%')],MQjpbb[_0x1daa8d(0x19e,'dKo!')]))_0x51eaf2[_0x1daa8d(0x170,'K94P')][_0x1daa8d(0x22c,'b71i')](_0x44dd19);else _0x383fe5[_0x1daa8d(0x241,'9qRP')]({'role':MQjpbb[_0x1daa8d(0x1f1,'sog9')],'parts':[_0x44dd19]});}}else _0x2f94d9[_0x1daa8d(0x1dc,'9qRP')+'ll']&&(_0x3146db[_0x1daa8d(0x121,'JGY9')](_0x3146db[_0x1daa8d(0x23b,'wv%R')],_0x3146db[_0x1daa8d(0x1bd,'@gL6')])?_0xe54d21[_0x1daa8d(0x1e6,'FYEA')](_0x2f94d9):(_0x27b3c5+=_0x5d613a[_0x1daa8d(0x206,'K94P')],_0x1dfc5e[_0x1daa8d(0x226,'K94P')](_0x4af921,_0x25159b[_0x1daa8d(0xec,'wv%R')])));}}}}catch{}}}}}),_0xb79d32[_0x351608(0x190,'1Wfc')]['on'](_0x5bb877[_0x351608(0x25d,'tcw3')],()=>{const _0x4bd85a=_0x351608,_0x534fc3=[];if(_0x27830c)_0x534fc3[_0x4bd85a(0x135,'K94P')]({'text':_0x27830c,'thought':!![]});if(_0x3cb8da)_0x534fc3[_0x4bd85a(0xef,'f!Rz')]({'text':_0x3cb8da});_0x534fc3[_0x4bd85a(0x131,'@sk^')](..._0xe54d21),_0x5bb877[_0x4bd85a(0x157,'@sk^')](_0xbe61fa,_0x534fc3),_0x5bb877[_0x4bd85a(0x231,')#Jy')](_0x292482,{'parts':_0x534fc3});}),_0xb79d32[_0x351608(0x1a7,'F$fn')]['on'](_0x5bb877[_0x351608(0xe8,'&uPq')],_0x57cd7e);}});}export async function chat(_0x4291d7=[],_0x269dc8=null){const _0x2aa0a3=_0x641c88,_0x3e870b={'DYFBd':function(_0x1eab71,_0x137e76){return _0x1eab71(_0x137e76);}},{parts:_0x552d7e}=await _0x3e870b[_0x2aa0a3(0x18d,'b71i')](callGemini,{'messages':_0x4291d7,'fileBuffer':_0x269dc8});return _0x552d7e[_0x2aa0a3(0xed,'GOhH')](_0x490589=>!_0x490589[_0x2aa0a3(0x1df,'75gV')])[_0x2aa0a3(0x151,'dKo!')](_0xcdcc34=>_0xcdcc34[_0x2aa0a3(0x229,'GOhH')]??'')[_0x2aa0a3(0x1c6,'1v3*')]('');}
|
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
|
+
}
|