@ikyyofc/gemini-cli 4.0.4 → 4.0.6

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