@ikyyofc/gemini-cli 4.0.5 → 4.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js 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.5",
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,75 +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, AGENTS_DIR } 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
-
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} ${firstLine.slice(0, 80)}`;
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. 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.
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. EXPLOREunderstand the project structure before acting
52
- 2. ACTcomplete the task fully using tools
53
- 3. VERIFYtest/run after changes to confirm it works
54
- 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
55
46
 
56
47
  ## TOOLS
57
48
  ${toolList}
58
49
 
59
- ## SKILLS
60
- ${skillIndex
61
- ? `You have the following skills installed. When a task matches a skill, FIRST read the skill file to load its instructions into context, then follow them.\n\nInstalled skills:\n${skillIndex}\n\nTo use a skill: read_file("~/.agents/<slug>/SKILL.md")\nSkills directory: ${AGENTS_DIR}`
62
- : "No skills installed. User can install skills with: /skill add <owner/repo>"}
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 them
66
- - Use patch_file for targeted edits (safer than full rewrite)
67
- - Verify code works by running it after changes
68
- - If a command fails, fix it yourself and retry
69
- - Current working directory: ${process.cwd()}
70
- - Platform: ${process.platform}
71
-
72
- ${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");
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 tercapai, agent dihentikan");
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…" : `thinking… (step ${iteration})`,
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(); // clear line silently
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
- // DEBUG — tulis struktur parts ke stderr (hapus setelah konfirmasi thinking bekerja)
124
- if (process.env.DEBUG_PARTS) {
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
- // ── Show native thinking (p.thought===true from API) ───────
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) printAssistant(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
- // ── Model reasoning text alongside tool calls ──────────────
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
- // ── Step block — fresh per iteration ──────────────────────
163
- printStepHeader(iteration);
147
+ // ── Tool calls ─────────────────────────────────────────────
148
+ // Include ALL parts (thinking + text + calls) in history for continuity
164
149
  messages.push({ role: "model", parts });
165
150
 
151
+ printStepHeader(iteration);
166
152
  const responseParts = [];
167
153
  for (const part of callParts) {
168
154
  const { name, args } = part.functionCall;
169
-
170
- // Animate the tool name while it runs
171
155
  spinner.start(name + "…", "#FFD080");
172
156
  printToolCall(name, args ?? {});
173
157
  spinner.stop();
174
-
175
158
  const result = await executeTool(name, args ?? {}, { autoApprove });
176
159
  printToolResult(result);
177
-
178
160
  responseParts.push({ functionResponse: { name, response: result } });
179
161
  }
180
-
181
162
  printStepFooter();
163
+
182
164
  messages.push({ role: "user", parts: responseParts });
183
165
  }
184
166
  }
167
+
168
+ // ─────────────────────────────────────────────────────────────────
169
+ // Stream the final answer with live typing effect
170
+ // ─────────────────────────────────────────────────────────────────
171
+ async function streamFinalAnswer(messages, systemInstruction, prevThink) {
172
+ const W = bw();
173
+ const prefix = chalk.hex("#00D4AA")(" │ ");
174
+ let started = false;
175
+ let thinkAcc = "";
176
+
177
+ const printHeader = () => {
178
+ process.stdout.write(
179
+ "\n" + chalk.hex("#00D4AA")(" ╭─") +
180
+ chalk.hex("#00D4AA").bold(" gemini ") +
181
+ chalk.hex("#4A4A5E")("─".repeat(Math.max(0, W - 10))) + "\n"
182
+ );
183
+ started = true;
184
+ };
185
+
186
+ await callGeminiStream({
187
+ messages,
188
+ systemInstruction,
189
+ onThought: (chunk) => {
190
+ thinkAcc += chunk;
191
+ },
192
+ onText: (chunk) => {
193
+ if (!started) printHeader();
194
+ process.stdout.write(prefix + chunk.replace(/\n/g, "\n" + prefix));
195
+ },
196
+ onDone: (parts) => {
197
+ // Show thinking if new thinking arrived in final answer
198
+ if (thinkAcc.trim() && thinkAcc !== prevThink) {
199
+ printThinkBlock(thinkAcc);
200
+ }
201
+ }
202
+ });
203
+
204
+ if (started) {
205
+ process.stdout.write("\n" + chalk.hex("#00D4AA")(" ╰" + "─".repeat(W + 1)) + "\n\n");
206
+ }
207
+ }
package/src/gemini.js CHANGED
@@ -1 +1 @@
1
- function _0x1cb7(_0x5004aa,_0x3af837){_0x5004aa=_0x5004aa-(-0x6*-0x5de+0x3*-0x1e6+-0x1bff);const _0x3896f5=_0x42bf();let _0x5a39ad=_0x3896f5[_0x5004aa];if(_0x1cb7['uPgaZa']===undefined){var _0x5250c5=function(_0x3bb530){const _0xb539b8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2e113d='',_0xb7e8ad='';for(let _0x377ca7=0x11ba+-0x2457+-0x129d*-0x1,_0x44eac7,_0x10f3f9,_0x3c45ba=0x286+-0x2*0xaa5+0x12c4;_0x10f3f9=_0x3bb530['charAt'](_0x3c45ba++);~_0x10f3f9&&(_0x44eac7=_0x377ca7%(-0xcf9+0x5*0xf7+0x82a)?_0x44eac7*(-0x170a+0x2f3*0xd+-0xf0d*0x1)+_0x10f3f9:_0x10f3f9,_0x377ca7++%(-0x26ec+-0x1*-0x1bd9+0xb17))?_0x2e113d+=String['fromCharCode'](-0x1*-0x19d1+-0x24e0+0x1*0xc0e&_0x44eac7>>(-(0x237d+-0x1869+-0x1*0xb12)*_0x377ca7&0x48a*0x5+0x1*0xd01+-0x1*0x23ad)):0x1e30+0x53a+0x5e7*-0x6){_0x10f3f9=_0xb539b8['indexOf'](_0x10f3f9);}for(let _0x4aca12=0x22*0x7+-0xf*-0x22d+-0x295*0xd,_0x46d277=_0x2e113d['length'];_0x4aca12<_0x46d277;_0x4aca12++){_0xb7e8ad+='%'+('00'+_0x2e113d['charCodeAt'](_0x4aca12)['toString'](-0x24f4+0xf00+-0x1*-0x1604))['slice'](-(0x3c*-0x68+-0x24f3+0x3d55));}return decodeURIComponent(_0xb7e8ad);};const _0x13d954=function(_0x4a23f5,_0x482e0d){let _0x11c81a=[],_0x42ebe4=0x349+0x174a+-0x1a93,_0x2b9a13,_0x1e8d21='';_0x4a23f5=_0x5250c5(_0x4a23f5);let _0x455a67;for(_0x455a67=-0x23dd+0x1ad0+0x90d;_0x455a67<-0xc00+0x579+0x787;_0x455a67++){_0x11c81a[_0x455a67]=_0x455a67;}for(_0x455a67=-0x18b2+-0x899+0x3*0xb19;_0x455a67<0xb71+0xb*0x17d+-0x27*0xb0;_0x455a67++){_0x42ebe4=(_0x42ebe4+_0x11c81a[_0x455a67]+_0x482e0d['charCodeAt'](_0x455a67%_0x482e0d['length']))%(-0x1*0x21e6+0x7*-0x400+0x3ee6),_0x2b9a13=_0x11c81a[_0x455a67],_0x11c81a[_0x455a67]=_0x11c81a[_0x42ebe4],_0x11c81a[_0x42ebe4]=_0x2b9a13;}_0x455a67=-0x231a+0xec*0x21+0x4ae,_0x42ebe4=0x2e6+-0x506*-0x2+-0xcf2*0x1;for(let _0x585b50=0x1c12+0x6ac+-0x2*0x115f;_0x585b50<_0x4a23f5['length'];_0x585b50++){_0x455a67=(_0x455a67+(0x1907+-0x4b3*-0x5+-0x3085*0x1))%(-0x530+-0x17*-0xce+0x1*-0xc52),_0x42ebe4=(_0x42ebe4+_0x11c81a[_0x455a67])%(0xb7f+-0x5cb*-0x3+-0x1be0),_0x2b9a13=_0x11c81a[_0x455a67],_0x11c81a[_0x455a67]=_0x11c81a[_0x42ebe4],_0x11c81a[_0x42ebe4]=_0x2b9a13,_0x1e8d21+=String['fromCharCode'](_0x4a23f5['charCodeAt'](_0x585b50)^_0x11c81a[(_0x11c81a[_0x455a67]+_0x11c81a[_0x42ebe4])%(0x1*-0x202d+-0x2240+0x436d)]);}return _0x1e8d21;};_0x1cb7['xWcHBP']=_0x13d954,_0x1cb7['lDkvGX']={},_0x1cb7['uPgaZa']=!![];}const _0x5ca261=_0x3896f5[-0x9fe+-0x2166+0x2b64],_0x113b0e=_0x5004aa+_0x5ca261,_0x14f886=_0x1cb7['lDkvGX'][_0x113b0e];return!_0x14f886?(_0x1cb7['LqpbTf']===undefined&&(_0x1cb7['LqpbTf']=!![]),_0x5a39ad=_0x1cb7['xWcHBP'](_0x5a39ad,_0x3af837),_0x1cb7['lDkvGX'][_0x113b0e]=_0x5a39ad):_0x5a39ad=_0x14f886,_0x5a39ad;}const _0x451dbc=_0x1cb7;(function(_0x487e74,_0x3c13ad){const _0xdc9434=_0x1cb7,_0x4b3b2d=_0x487e74();while(!![]){try{const _0x2efd8=-parseInt(_0xdc9434(0x20f,'j$%s'))/(-0x29f*-0x1+0x9ba+-0xc58)+-parseInt(_0xdc9434(0x1b3,'RElJ'))/(0x655*-0x5+-0x1317*-0x1+0xc94)*(parseInt(_0xdc9434(0x203,'z1f4'))/(-0x89f*0x1+-0x1*-0xdfd+-0x55b*0x1))+parseInt(_0xdc9434(0x19b,'^s]^'))/(-0x21*-0xb2+0x11c3*-0x1+-0x52b)*(-parseInt(_0xdc9434(0x1ae,'%%lb'))/(-0x2630+-0x1*-0x1d6b+0x1*0x8ca))+-parseInt(_0xdc9434(0x1e1,'JfI7'))/(0x12b7*0x1+-0xfd*-0x5+-0x17a2)*(parseInt(_0xdc9434(0x1cb,'CLzw'))/(0x363*0x2+0x2257+0x2*-0x148b))+parseInt(_0xdc9434(0x1e4,'WF%j'))/(0x3*-0xbc5+-0x1d83+0x40da)*(-parseInt(_0xdc9434(0x1e9,']gqB'))/(-0x234e+0xee7+0x1470))+-parseInt(_0xdc9434(0x201,'g%*V'))/(-0x2*-0x838+-0x4f8+0x10a*-0xb)+parseInt(_0xdc9434(0x207,'VL#^'))/(-0x1*-0xa13+-0x31f+-0x6e9);if(_0x2efd8===_0x3c13ad)break;else _0x4b3b2d['push'](_0x4b3b2d['shift']());}catch(_0x8b8445){_0x4b3b2d['push'](_0x4b3b2d['shift']());}}}(_0x42bf,-0x4*0x19a81+0xe3111+0x76297));import _0x2b0069 from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x451dbc(0x24d,']EaD')+_0x451dbc(0x24b,'O1mK')+_0x451dbc(0x22c,'Q1Vx')+_0x451dbc(0x1f7,'QQFP')+_0x451dbc(0x200,'d0aH')+_0x451dbc(0x215,'ga6q'),'MODEL':_0x451dbc(0x1bf,'g%*V')+_0x451dbc(0x24c,'DnXt'),'HEADERS':{'User-Agent':_0x451dbc(0x206,'QQFP')+'.2','Accept-Encoding':_0x451dbc(0x1dc,'Q0e1'),'content-type':_0x451dbc(0x258,'cjTI')+_0x451dbc(0x202,'jm!t')+_0x451dbc(0x246,'RElJ')+'8'}},SUPPORTED_MIMES=new Set([_0x451dbc(0x1e7,'&y*o'),_0x451dbc(0x195,'1Vof'),_0x451dbc(0x21a,'cjTI'),_0x451dbc(0x1b9,'RElJ'),_0x451dbc(0x1fb,'CLzw'),_0x451dbc(0x185,'q)Z6'),_0x451dbc(0x1ff,'q)Z6'),_0x451dbc(0x1c5,'VL#^'),_0x451dbc(0x24e,'c92R'),_0x451dbc(0x233,']gqB'),_0x451dbc(0x18b,'G$sn')+'v',_0x451dbc(0x21b,'^cS0'),_0x451dbc(0x19f,']gqB'),_0x451dbc(0x250,'%%lb'),_0x451dbc(0x18a,'1Vof'),_0x451dbc(0x1c3,'M145'),_0x451dbc(0x23d,'CLzw'),_0x451dbc(0x1ad,'^ejS'),_0x451dbc(0x231,'JfI7'),_0x451dbc(0x235,']gqB'),_0x451dbc(0x1c9,'h4EN'),_0x451dbc(0x191,'q)Z6'),_0x451dbc(0x213,'^cS0')+_0x451dbc(0x1f2,'ZEt4')+'us',_0x451dbc(0x255,'RH8r')+_0x451dbc(0x1d3,'74H#'),_0x451dbc(0x1bb,'7f0M'),_0x451dbc(0x1d9,'^cS0'),_0x451dbc(0x25f,'c92R'),_0x451dbc(0x19e,'JfI7')+_0x451dbc(0x199,'DnXt'),_0x451dbc(0x22e,'^ejS')+_0x451dbc(0x198,'QQFP'),_0x451dbc(0x1e0,'Q1Vx'),_0x451dbc(0x21e,'86Ko')+_0x451dbc(0x1da,'QQFP'),_0x451dbc(0x222,'q)Z6')+_0x451dbc(0x1ca,'[ix0'),_0x451dbc(0x1ce,'VL#^')+_0x451dbc(0x1b7,'I7e5'),_0x451dbc(0x23b,'g%*V')+_0x451dbc(0x225,'9*Em'),_0x451dbc(0x210,'h4EN')+_0x451dbc(0x22d,'^cS0')]);function _0x42bf(){const _0xe2826b=['DHadg8oj','W7dcGCkB','WR9VW5FdGmkJW5RdMaGNxa','WQlcNSoruxnlWQWxy8kd','w0CFWR4wnbzDWRhdQG','WRFcOCk4BCoAW4ZdOXpdGmka','W7VdLsBdPXaClW93W7C','W4PXgCoKvgzOd8oEWRuzWPz3W5u','aWJdJ8kWCSkmDCoVCmkf','j1GJtSoQ','lKTwD0vEz0yEWPm','W4vjW6uaBSogkG','vmkpE8oyh2ldJmkoW5pdTa','WRpdJCkkr1P9WOTYsa','w8kbt8ooiG','WO0XtmkDfG','WR4OW5tdISkJWPldMr1Y','aYVdIcn/cCo3vv7dSa','eCkUhSkfp8oft8kSqsC2W5LwCa','FNidbSodESobW54gWPe','WOFdPCoRE2vfBmkZWPnPvXBdQq','W6/cJmoJW7esW6/dOa','WOqGW7FdOmkb','cadcL8o3kmkFnSk1k8os','E8oehSkpASo9W4S+ACoqimk0W7tdVW','kZddVmouaq','ewxcTIVdNmoRWOddPmkiqW','bwb3qx5pth4fWQu','W57dRJpdHcO','W5JcG8kiWRe','E8o+W4tdUx8VB8kiWPztW6HHW50','hgpdVtddISkOWPlcISk2tG','Fv3cSHddTqtcMSkdb3u/W6i','W40qWPtcM8k7dHtcN1lcNq','jH3dHLBcGq','vmkgimoCtN7cKmoAW57dTq','uK1BW7GsW40oW4e+WQ8','ouJcPCokWPe','lmoRBCo0aYumW5LjWRm','useMW4SsWRVcHSkDWPG','yJifea','bqVcLmoeWQm','WPxcOCoTpKnhxG','fCkwASoMrmo5W5X6WPq','rvfBW7qsW40mW5y+','BYeeW60y','iwBcOCovrWy','WRfsEqdcTCkry0FdVSkn','WRz+W6m9DSoFvYpdPSkS','WOpdQCoKFgjfA8o0W7iW','rtmAamoCzmkvWOWrWPW','WRWKW4JdM8oJW4xcMr0/wa','fglcT8oEsG','e8osoSkxnItdISkEW4lcRa','WRrrxmomAa','amoWWOjjW6ddPSoEcmoGoa','W48bWORcK8k7crtcN17cGq','e8oVWP5a','kI7cSCox','WOTgyCo6W4u','zuLnWRGa','lYhcVCoSWPyGW6tcPmoyW4a','xrDnW6uB','WO9cA8o6WPLHWOhcKt8S','W5WpWPFcGW','WQ1of29ZdXtcJa/dNW','W5pcMCkfWRBcIhBdUdxdHW','WO17nhbI','hGD8W7SDnMtdOCkF','kCkRWPJdGey','crT8W7CDnMRdSmkr','WQBdRmkBBatcPmk0W7uNBW','WPyZxSkWW6m','aLLQamkOW78','FtBdOCkcaLVdQSozW6SJ','odhcO8oP','qCoNxCorymktgmoOqbW','ydWBaCoF','xmkxFSowfwldICkBWOK','WPBdUCo/bwjrsmkK','W4aPWRz+jCovfNxcUSoY','cutcKmoGkmkkBCkTDSkv','W7lcLCowgf95','W4RcISkkbde','b8oaxCk1bG','WOqdpgvGW6S','W6JcLCkBnG','lhhcVmoxr1pcKComWP8N','mmo0Bg7dGdpcGW','WR7cKCoeW7q','WOHUnq','aLBcNmoTCchcISomWPXe','z3qUuCogwmobW67dT8kc','WRddHCoarCoaWOtdJa','WQtcISoCW6hcLgVcTGtcSmkr','W7GDkLpcNSksWQ3cINS','DCkJsmoYjq7dPCk/W7/dKa','W67cICkmo8o0W43cPKRcHG','WR9qq8oeAxHt','WPtcRCk8luH2cSogjg8','kgagt8o2','WPfGfLzEjtVcVW','WPykp31SW6ubguHY','B2tdIGezeXpdPSoDua','mNBcLfHvneBdU8oira','hCklE8oTsmk1W5PNWPVdRq','emoKWPP8W7m','rmkBBmotfa','W6/cNmoo','d2BcRSoavHZdPa','A3JcVCkvva','gfq2aSo+WR03WOSQWPa','W7OrnKldNSoEWRpcLG','W6RcJ8keoW','wMpdR3xdPSk2W7O','qCoKxSouESkegmoYxq','mvtcGX/dQSkdW7W','WQeSW5hdImkPWPldNaGVsG','r8kQAgG','zCoiBmoZtCkInSovBq','WOCtW6NdSmkFW7JdRdGhya','WRe5A8kl','jCoYzN/dINldHglcRJ4','WRiJASkCW41yWQxcN8oRW58','av3dIMtdSNpdT8kGiIO','WP5xW5BdHSoIwcdcG3lcLIFcOa','jCkAC8oTwa','WP1+cxv8','WOddRmo/AWa','WQK0W5tdHSkJWPldMr0JsW','fSovrNtdHW','WR/cISoAW7JcIty','W7FcOSkLWRhcHq','oSo2y33dGhlcH2VcUq','qq8bo8oejmkQWOqtWPS','eSolxmkyla','aHJcNmoXnCkFBq','W77dM8oiqCor','CSkWq8oGmGZdTSkQW6NdHa','WPBdV8kmfLD8sCkpWOy','l8obWQrSW5O','WOWlxmk0W700WPZdPSoiW7q','W4BcICkzWQVdIdpdUcldHw8','hGD8W7SDnNldSSkukG','aerXlCk3','W6NcHmkab8oH','bSkeqCoxoq','DwDj','W5BdVaNdJIeVaJjDW5e','iM7cQmoGWO0','WR/dN8ouqdSxdCoovM8','W7lcNCo0','qSoCyCoFyG','i3KSt8otwmouW7VdQCoC','e0fQeCo7WQy','WONcVCkEWQlcPgxcOw/cHSou','W6qyjxhcLG','WPPsD8oNW5K2W43cJca6','WQRdL8oAB8kRW5FcHe/cUCoDWOlcNW','jSk+W57cRIjXDmkZWOf7','W4rkD1mXW4mMkrCU','xmkUmmkHymk4W59HWP3dQW','ybiHW6qz','F23cMSoOAWdcHW','W5SIWP7cMSkd','gCkVgCkimmofsCkOqIm0W5XYFq','W54pWOJcKG','WPWWW6u4CmoA','W5tdOXtcJciPfY1DW4O','jg7cRSovvKhcS8o9WRT6','iCo0BN8','WPfQpvydpdNcUspdTG','j8o+EM4','W7xcJ8kmo8o3','W5ZdVmk4oJ8t','r8oYqmouz8kzvmoSwXW','tcFdU2NcMSoPWPJcV8kQxIrhFa','W4fkFcjGWRbsvraP','Cf/cUHBdSGddTSkUj1abW7LE','vmk6BwWSWRFcGmkepa','WPvGnLy','nmkvtSoFpmoNWPz6z8oN','rCkUE3eW','WP4QsCkoeq','WOldOmoLcHrpySoWW7bh','W40vWOdcNSk9qHpcH1RcKq','sJO6','cSk0Cmo0cZ/dTG','dSkhWRJdPfO','WRCfy8k5oG','i8kmwSowoSkRWPP+A8oV','WRxdKmkosa','DL7dMf7dH8kzW4dcUvFdNq','lYRcRCooa8kSwmouqmkM','bKdcS8oc','hW9PemkR','W7xcICkfoW','vJaSW5y','l0TqCubvDL0jWOy','WQCLymknW4CzWQK','W67cK8ojW6yaW7BcP8o/WP11','r11hW6vsWOOvW4S1','cbZcKq','WQbeirldQmktBXxdLmk5','kmkYWQtdGq','ztddHrWmaLZdVCoisW','W67cMmoquMja','je5EFa','pchcQmo1W4bUW7BcUW','WOBdN8ovW6VdLwRcRqBdL1etWOxdRG','WQT+W7CNzG','W4LaWOFcLSk8crZcJ1RcHG','ur/cMSohWPhdM07dJW','vmkgtSoqesJdIG','mJPEW70+','ygZcUmkgyCoQrCoocXu','fG/cL8oAjG','xfSPWQ5flZhdMmk1d33cTdS','rCommSk3eCoKW6nXWPhdR8kaW7O','baRcKCoNnCklEmo0ymks','dGD0W6OxAW','iCktrmoonSkMWO8','WQVdMSkmsGJcOW'];_0x42bf=function(){return _0xe2826b;};return _0x42bf();}async function getToken(){const _0x3f5956=_0x451dbc,_0x3e31ac={'RyPIA':_0x3f5956(0x209,'Qs]s')+_0x3f5956(0x1f1,'q)Z6')+_0x3f5956(0x1af,'ceA&')+_0x3f5956(0x1dd,'GhXS')+_0x3f5956(0x25e,'74H#')+_0x3f5956(0x1a9,'O1mK')+_0x3f5956(0x20a,'puC@')+_0x3f5956(0x20e,'Qs]s')+_0x3f5956(0x236,'fb2E')+_0x3f5956(0x1d8,'ltWf')+_0x3f5956(0x196,'jm!t')+_0x3f5956(0x241,'ZEt4'),'AOuUD':_0x3f5956(0x1d6,'puC@')+_0x3f5956(0x187,'g%*V'),'NAVIS':_0x3f5956(0x21f,'I7e5')+_0x3f5956(0x224,'CLzw')+_0x3f5956(0x1b1,'cjTI')+_0x3f5956(0x252,'1#Vz')+_0x3f5956(0x257,'GhXS')+_0x3f5956(0x1f4,'%%lb')+_0x3f5956(0x239,'RElJ'),'ibJfb':_0x3f5956(0x226,'o2xT')+_0x3f5956(0x1be,'z1f4'),'bKLbk':_0x3f5956(0x1b8,'Tq9i')+_0x3f5956(0x251,'9*Em'),'ebcRs':_0x3f5956(0x1c8,'z1f4')+_0x3f5956(0x1b0,'RH8r')+_0x3f5956(0x1ab,']EaD')+_0x3f5956(0x18c,'j$%s'),'Dxkmj':_0x3f5956(0x220,'z1f4')+_0x3f5956(0x23f,'I7e5')+_0x3f5956(0x212,'CLzw')+_0x3f5956(0x1c1,'RH8r')+_0x3f5956(0x208,'RElJ')},{data:_0x12fc85}=await _0x2b0069[_0x3f5956(0x22f,'h4EN')](_0x3e31ac[_0x3f5956(0x237,'G$sn')],{'clientType':_0x3e31ac[_0x3f5956(0x1cc,'Q0e1')]},{'headers':{'User-Agent':_0x3e31ac[_0x3f5956(0x19c,'o2xT')],'Content-Type':_0x3e31ac[_0x3f5956(0x20b,'Tq9i')],'X-Android-Package':_0x3e31ac[_0x3f5956(0x1a8,'g%*V')],'X-Android-Cert':_0x3e31ac[_0x3f5956(0x1c7,'J0zX')],'X-Firebase-GMPID':_0x3e31ac[_0x3f5956(0x1a2,'VL#^')]}});return _0x12fc85[_0x3f5956(0x1e5,'CLzw')];}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0xa41d99=_0x451dbc,_0x2bb2c7={'qdhYz':function(_0x17914f,_0x57e639){return _0x17914f===_0x57e639;},'fcUqX':_0xa41d99(0x183,'g%*V'),'BGuFe':_0xa41d99(0x1bd,'%%lb'),'bwMpD':_0xa41d99(0x193,']EaD'),'fMjne':function(_0x4d72f6){return _0x4d72f6();},'jlkGg':function(_0x429952,_0x30f32c){return _0x429952(_0x30f32c);},'LaGOM':_0xa41d99(0x1a4,'Tq9i')+_0xa41d99(0x240,'QQFP')+_0xa41d99(0x186,'M145'),'xqLWP':_0xa41d99(0x1aa,'74H#'),'vyfAt':function(_0x148ea8,_0x4f28d7){return _0x148ea8-_0x4f28d7;},'wBzmQ':function(_0x5c1333,_0x467453){return _0x5c1333===_0x467453;},'ENDnb':_0xa41d99(0x189,'G$sn'),'bydtP':_0xa41d99(0x1df,'puC@'),'xYXMa':_0xa41d99(0x1d1,'QQFP')+_0xa41d99(0x19a,'CLzw')+_0xa41d99(0x229,'QQFP'),'Yaxly':_0xa41d99(0x1f9,'puC@'),'MtPOd':_0xa41d99(0x19d,'G$sn')+_0xa41d99(0x1a6,'1#Vz')+_0xa41d99(0x197,'ga6q'),'mOhqX':_0xa41d99(0x230,'7f0M')+_0xa41d99(0x188,'q)Z6')+_0xa41d99(0x1f5,'Tq9i')+'T','ZTFcL':_0xa41d99(0x24f,'CLzw')+_0xa41d99(0x1d0,'cHRB')+_0xa41d99(0x24a,'RElJ')+'T','yyvln':function(_0x5e68df,_0xc32c52){return _0x5e68df&&_0xc32c52;},'LMIeX':_0xa41d99(0x1f3,'[ae[')+_0xa41d99(0x1e3,'h4EN')+_0xa41d99(0x1db,'86Ko')+'I'},_0x2df274=await _0x2bb2c7[_0xa41d99(0x1ef,'jm!t')](getToken),_0x5e47b5=messages[_0xa41d99(0x1d2,'WF%j')](_0x4198cd=>_0x4198cd[_0xa41d99(0x1ba,'1Vof')]===_0xa41d99(0x244,'RH8r')),_0x504bda=systemInstruction??(_0x5e47b5?_0x2bb2c7[_0xa41d99(0x1a0,'74H#')](typeof _0x5e47b5[_0xa41d99(0x204,'ltWf')],_0x2bb2c7[_0xa41d99(0x211,'j$%s')])?_0x5e47b5[_0xa41d99(0x1d7,'G$sn')]:_0x5e47b5[_0xa41d99(0x22a,'^ejS')]?.[0x1717+0x1d8b+-0x34a2*0x1]?.[_0xa41d99(0x1bc,'1Vof')]??'':null),_0xe9ad93=messages[_0xa41d99(0x1ec,']gqB')](_0x4c4c92=>_0x4c4c92[_0xa41d99(0x228,'o2xT')]!==_0xa41d99(0x238,'74H#'))[_0xa41d99(0x249,'7f0M')](_0x450a3b=>{const _0x31ebc8=_0xa41d99;if(_0x450a3b[_0x31ebc8(0x190,'1#Vz')])return{'role':_0x2bb2c7[_0x31ebc8(0x259,'o2xT')](_0x450a3b[_0x31ebc8(0x248,']EaD')],_0x2bb2c7[_0x31ebc8(0x234,'Q0e1')])?_0x2bb2c7[_0x31ebc8(0x1a5,'WF%j')]:_0x450a3b[_0x31ebc8(0x1cf,'fb2E')],'parts':_0x450a3b[_0x31ebc8(0x1c6,'M145')]};return{'role':_0x2bb2c7[_0x31ebc8(0x1a1,'%%lb')](_0x450a3b[_0x31ebc8(0x1b6,'h4EN')],_0x2bb2c7[_0x31ebc8(0x1fd,'CLzw')])?_0x2bb2c7[_0x31ebc8(0x1b2,'[ix0')]:_0x450a3b[_0x31ebc8(0x217,'jm!t')],'parts':[{'text':_0x2bb2c7[_0x31ebc8(0x1e8,'QQFP')](typeof _0x450a3b[_0x31ebc8(0x247,'1Vof')],_0x2bb2c7[_0x31ebc8(0x253,'O1mK')])?_0x450a3b[_0x31ebc8(0x261,'cHRB')]:JSON[_0x31ebc8(0x216,'[ix0')](_0x450a3b[_0x31ebc8(0x261,'cHRB')])}]};});if(fileBuffer){const _0x144b6a=await _0x2bb2c7[_0xa41d99(0x1ac,'c92R')](fileTypeFromBuffer,fileBuffer),_0x37d354=_0x144b6a?.[_0xa41d99(0x1d4,'%%lb')]??_0x2bb2c7[_0xa41d99(0x205,'q)Z6')];if(!SUPPORTED_MIMES[_0xa41d99(0x1f0,'%%lb')](_0x37d354))throw new Error(_0xa41d99(0x221,'jm!t')+_0xa41d99(0x256,'GhXS')+_0xa41d99(0x1a3,'jm!t')+_0x37d354);const _0x48113d={'inlineData':{'mimeType':_0x37d354,'data':fileBuffer[_0xa41d99(0x254,'7f0M')](_0x2bb2c7[_0xa41d99(0x18f,'7f0M')])}},_0x28b03e=_0xe9ad93[_0x2bb2c7[_0xa41d99(0x1fe,'J0zX')](_0xe9ad93[_0xa41d99(0x1de,'ZEt4')],-0xf71+-0x15e6+0x8*0x4ab)];if(_0x2bb2c7[_0xa41d99(0x1b4,'h4EN')](_0x28b03e?.[_0xa41d99(0x260,'%%lb')],_0x2bb2c7[_0xa41d99(0x194,'JfI7')]))_0x28b03e[_0xa41d99(0x23c,'jm!t')][_0xa41d99(0x23a,'Q1Vx')](_0x48113d);else _0xe9ad93[_0xa41d99(0x245,'%%lb')]({'role':_0x2bb2c7[_0xa41d99(0x192,'1Vof')],'parts':[_0x48113d]});}const _0x17f58e={'model':CONFIG[_0xa41d99(0x218,'Q1Vx')],'request':{'contents':_0xe9ad93,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0x2bb2c7[_0xa41d99(0x25d,'&y*o')],'includeThoughts':!![]}},'safetySettings':[{'category':_0x2bb2c7[_0xa41d99(0x242,'z1f4')],'threshold':_0x2bb2c7[_0xa41d99(0x1e2,'I7e5')]},{'category':_0x2bb2c7[_0xa41d99(0x21c,'[ix0')],'threshold':_0x2bb2c7[_0xa41d99(0x223,'RElJ')]},{'category':_0x2bb2c7[_0xa41d99(0x1f8,'O1mK')],'threshold':_0x2bb2c7[_0xa41d99(0x18e,'cjTI')]},{'category':_0x2bb2c7[_0xa41d99(0x1e6,']gqB')],'threshold':_0x2bb2c7[_0xa41d99(0x214,'WF%j')]}],...tools?.[_0xa41d99(0x1ee,'fb2E')]&&{'tools':tools},..._0x2bb2c7[_0xa41d99(0x25a,'CLzw')](_0x504bda,{'systemInstruction':{'role':_0x2bb2c7[_0xa41d99(0x243,'ga6q')],'parts':[{'text':_0x504bda}]}})},'stream':![]},{data:_0x1784ef}=await _0x2b0069[_0xa41d99(0x1c4,'7f0M')](CONFIG[_0xa41d99(0x1a7,'^s]^')],_0x17f58e,{'headers':{...CONFIG[_0xa41d99(0x184,'Qs]s')],'authorization':_0xa41d99(0x25c,'RElJ')+_0x2df274}});if(!_0x1784ef?.[_0xa41d99(0x1eb,'QQFP')]?.[_0xa41d99(0x21d,'RElJ')])throw new Error(_0x2bb2c7[_0xa41d99(0x1cd,'J0zX')]);const _0xe1dc39=_0x1784ef[_0xa41d99(0x227,'h4EN')][-0x1882*-0x1+0x8*0x45e+-0x3b72],_0xec0cc0=_0xe1dc39[_0xa41d99(0x1ed,'VL#^')]?.[_0xa41d99(0x22b,'[ae[')]??[];return{'parts':_0xec0cc0,'candidate':_0xe1dc39,'raw':_0x1784ef};}export async function chat(_0x1a16ea=[],_0x2ec7b9=null){const _0xe8dcb=_0x451dbc,_0x19b41f={'htqRN':function(_0x16f292,_0x4a272a){return _0x16f292(_0x4a272a);}},{parts:_0x30f1d9}=await _0x19b41f[_0xe8dcb(0x232,'7f0M')](callGemini,{'messages':_0x1a16ea,'fileBuffer':_0x2ec7b9});return _0x30f1d9[_0xe8dcb(0x25b,'ZEt4')](_0x440e26=>_0x440e26[_0xe8dcb(0x1d5,'[ix0')]??'')[_0xe8dcb(0x20c,'JfI7')]('');}
1
+ function _0x52b0(_0x2c58e5,_0x34dd52){_0x2c58e5=_0x2c58e5-(0x13a*0x7+-0x24b9+0x7*0x449);const _0x3728a8=_0x3a52();let _0x56fe44=_0x3728a8[_0x2c58e5];if(_0x52b0['xUfKAi']===undefined){var _0x3b0a32=function(_0x3a3534){const _0x14541b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x6c17da='',_0x48ec20='';for(let _0x16a142=-0x1*0xc87+0x2f5+0x992,_0x5054d9,_0x35f4f2,_0x37d9e3=-0x1bcf+-0x8b*-0x47+-0x113*0xa;_0x35f4f2=_0x3a3534['charAt'](_0x37d9e3++);~_0x35f4f2&&(_0x5054d9=_0x16a142%(-0xa13*0x1+-0x7d4*0x4+0x3*0xdcd)?_0x5054d9*(0x1*-0x1223+-0xfd6+0x2239*0x1)+_0x35f4f2:_0x35f4f2,_0x16a142++%(-0x6c4+-0x4*-0x41b+0x2*-0x4d2))?_0x6c17da+=String['fromCharCode'](-0x6*0x1f0+-0xcf9+0x1998&_0x5054d9>>(-(0x364*0x8+-0x1a7e+-0xa0)*_0x16a142&0x2149*0x1+-0x5c*0x61+0x199)):-0x1*-0xfaf+0x18ff+0x7f*-0x52){_0x35f4f2=_0x14541b['indexOf'](_0x35f4f2);}for(let _0x26b4a5=0x3*0x85d+-0x2*0x62b+-0xcc1,_0x194799=_0x6c17da['length'];_0x26b4a5<_0x194799;_0x26b4a5++){_0x48ec20+='%'+('00'+_0x6c17da['charCodeAt'](_0x26b4a5)['toString'](0x188+0xb2d*-0x3+0x200f))['slice'](-(-0xca9*0x3+-0x1*0x5e0+0x2bdd));}return decodeURIComponent(_0x48ec20);};const _0x42ff70=function(_0x22f637,_0x1e7459){let _0x2536b3=[],_0x209f29=0x24a1+0x70a+-0x2bab,_0x1b6c46,_0x361124='';_0x22f637=_0x3b0a32(_0x22f637);let _0x40bd85;for(_0x40bd85=-0x1eb*0x1+0x1*0xcae+-0x227*0x5;_0x40bd85<0x3*0x4cf+-0xd9*-0x17+-0x20ec;_0x40bd85++){_0x2536b3[_0x40bd85]=_0x40bd85;}for(_0x40bd85=0x2067+0x78b*-0x1+-0x2b*0x94;_0x40bd85<0x15fd+0xc0b+-0x2108;_0x40bd85++){_0x209f29=(_0x209f29+_0x2536b3[_0x40bd85]+_0x1e7459['charCodeAt'](_0x40bd85%_0x1e7459['length']))%(0x1272+-0x1fb0+0xe3e),_0x1b6c46=_0x2536b3[_0x40bd85],_0x2536b3[_0x40bd85]=_0x2536b3[_0x209f29],_0x2536b3[_0x209f29]=_0x1b6c46;}_0x40bd85=0x25cf*0x1+0x257f+-0x4b4e,_0x209f29=-0x2b6+-0x4*-0x77d+-0xb*0x27a;for(let _0x315db9=-0x2*-0x10f7+-0x16df*0x1+-0xb0f;_0x315db9<_0x22f637['length'];_0x315db9++){_0x40bd85=(_0x40bd85+(0x2255+0x2*-0x1266+-0x4*-0x9e))%(0x3*-0xb4e+-0x6f6*0x3+-0xdf3*-0x4),_0x209f29=(_0x209f29+_0x2536b3[_0x40bd85])%(0x22b7*0x1+-0x24c4+0x30d),_0x1b6c46=_0x2536b3[_0x40bd85],_0x2536b3[_0x40bd85]=_0x2536b3[_0x209f29],_0x2536b3[_0x209f29]=_0x1b6c46,_0x361124+=String['fromCharCode'](_0x22f637['charCodeAt'](_0x315db9)^_0x2536b3[(_0x2536b3[_0x40bd85]+_0x2536b3[_0x209f29])%(0x1c70+-0x120+-0x1a50)]);}return _0x361124;};_0x52b0['aWjjxG']=_0x42ff70,_0x52b0['WJmetv']={},_0x52b0['xUfKAi']=!![];}const _0x13c38f=_0x3728a8[0x2696+0x16*-0x1c5+0x58],_0x49c80e=_0x2c58e5+_0x13c38f,_0x116480=_0x52b0['WJmetv'][_0x49c80e];return!_0x116480?(_0x52b0['AjnNSU']===undefined&&(_0x52b0['AjnNSU']=!![]),_0x56fe44=_0x52b0['aWjjxG'](_0x56fe44,_0x34dd52),_0x52b0['WJmetv'][_0x49c80e]=_0x56fe44):_0x56fe44=_0x116480,_0x56fe44;}const _0x4000f4=_0x52b0;function _0x3a52(){const _0x17a459=['W5xcNSkOFSkx','WPhdMfTMWRihWOpdS8k+','WP3cOmkUeHGZW4ZcLmohWRe','fNLgxKO','W7DPzb9prLP6WQJcJG','W5KWd8kmiG','zSoUW73cVWRdVmkO','WQdcVJ/cT8kRhMldTSoqWPC','W5/dGtddJha','W6tdLSkuW5NdVq','W70he8kTAmo9W6K/WQtcTq','WOxcNCo2DhNcUqRdGmkV','W4tcUCk+WORdQwVdO8ohWOBdSW','AmkrWR7dSce','W4ecCmk1pW','W4emd8kGbq','W4CSC29cWRu1WPRdNSoh','WQbsWRL2nW','rSoQW5RcVfhdQJO','dtvK','W7tdMZpdS1JdRt4','pHbui8k5','W6RcM8oEW48','W6JdStOmecirW6jbyG','W7NcNNFcRGdcJCkn','W69RW6KeWO80pSkPWR/cOWu','AthcJglcMW','W5BdScFdQgq','WR51etzMzXW','pe7dHhZdR0PV','WQJdO2zCWPLPWRRdMCknWR0','WOfbWRnJ','W4eFD8kXlSkRW4e','W6FcSmofW6i0','da1WWRVcRG','WOldQmo/W43dVW','W6RdNmkvW77dGG','WP3cP8kriXK','kSkkzWhcGe8','W7TnW6VdQ8od','lG5mWPhcTXnTj8ohW7q','C8kFp8oZWOb8kW','WPZcRCkCgcK','mKH9W5FcVW','iCkgtXBcKq','W4FcUZfcWPK','W63cO8kkumkt','fg1kW4tcGJpdOmkCFSoN','aCoKhSoWWOm','cfZcVMWS','mq7dHwVdVKfVltFcUW','kCoDWOlcUNnDww4','W5fydsm4oIaFWONcOG','w8k/m8oDWPu','W4SDEmkIlSoQW4j9WP/dRG','Ct4Kz1KWW5dcVmoo','WPlcRmo5WOJcGmkOrSoYWPqj','fColEmk2WR0','lajqWOa','W4ZdOCoSvLi7WPRdQCoHWO3dQmkX','W40LuSkYdW','ctvaWRRcSaWooSobW6y','pmocWQhcOMHxvN1jW5G','WPv/WQrlnq','EvjDW5hcGmotACoZpYGB','eZPWkeRcSYZdUctcMG','ACkeivTdfSonkWVdPW','gvymfSos','W6RcLSojW44xW5dcQW','W4/dSCkOW4NdJSk5b8kJW4Hv','WRVdV8oOWQ/cIa','nCkBAbtcGfqIbSoJia','W5ZcTCociLFcUfxcM8oPDG','aSkxW69V','xuPpla','WOP9xs9uBhW','lSoEWRJcRwq','pqHvi8kVtW','WQSAW4FcLW','wsxcLG','WQ9DWRbmpG','jxupa8ofWQlcMMPtWR8','W4FdOmkPW40','W75nBY5+','imocW5lcHf4','hXPoe3ZcM0lcNK/dRa','DCoBFCkFWRtcKKZcUSoMpG','vSokW4BcRIO','k8koEq','peRcS3KS','W4ShcSkRiSo3W6q','lSolWQlcUMrz','WOBdVSoJW5W','l1Lf','z8ocqN4RAmkPW58yWRG','W7pdSZCo','WPxdNLnM','W6tcPNS','bH9clSki','sSoWmfugrmkfWQSCWQ8','oX5KiCkS','gbzXhfq','jY5VnG','zSkznCoIWOO9pSkwWOq','W4pcLunDgG','kXlcOrldT8omWPDEs1G','cwH5W7RcVW','WOhcSCkIfG','dCo0WOpcL24','W43cRmkQA8okW6VdJrK','WPhdOCoUW7BdUq','W6/cMmkwxCk9','bmo1W6pcSKelCGKAFbTB','oHrEi8oLsmoDl8kkW6C','gmobaSo6WRK','CK3dI3ZdR1DV','ASotW7FcMqy','DCofcK5mWOHk','Dmk7m8otWQS','WRbqw8oGD8kZWOKkWPxcISkGWPC','u8oSWRZdTrLqoM4JFG','W7hcOw9n','kqWlWP3dKSo5Eq','W6GVsKf5','x8o2y1S','j8oneSooWPG','W7HPW4RdM8ox','umoJW7pcUaJdPSo8','WPfLWPvYkq','W7rWDHna','W7pcL8kgEIq','WO5gWRP3eIyDv8kMgq','WRNcTcpcPSoO','WPhcOCoRD2m','xmoPWRlcUaJdP8kSWQtdI8oC','ow4keG','p8oIemoZWOm','aCkvBrFcSa','CCkfnCoUWOO9kmkbWPS','WR5Yha12','nSoVkmoBWPZcMeNcVmoSja','WPxdV8oRWOFcSubxqSkDW6u','Eemxhmk+t8oyomko','kazAWOdcQW','pmksW55oWRK','WPjijH1lsdZcVW/dGW','W4pcQ8kHzGHp','g8kiW6POWRS','laqoWQhdHW','ymkfiSoV','WOdcMSkCcXm','W5VdICoNW7LhW73dQSk7W6eD','iCoeymkWW5WLj8kpWRNcOSkZWQe','z1PIdCkG','eCofW5q','tXWepSof','ySophe4','W4maACkPiSkMW5rSWPtdSq','W6xdV2Tyw24vW6HDya','W4OatLfh','najgWPpcRfq','WQFcSJtcHCoH','CCknCs5z','l2VcIfOr','W6qOt3SZpYxcUXJdN8kjaa','iCoMkCokWPlcLfW','ga5phfu','W7FcKgK','W6Wmt0z0WPivWRRdVSoZ','zmkvkCoZ','WRGfW5VcNNuoW6FdUCoHW4q','W7dcMMdcGZW','wSocW73cOd8','mfBdHa','W4dcT8k1EY8','jNXLqeq+W5xcQCocBG','WOWNW4pcHeS','iZ5KkG','W5tdV8k4W4K','W7xdImkOW4VdRq','dL/cM2Gw','W7BdHc3dQ1tdOcTsaHy','W5pcT8kWqbm','W7OBgmkTiSoO','a8oFaSo9WQ0','zmkTsbnfuHDZWOiO','xSo6kgny','mCoOWOBdOeRcU2RdOJddSa','WPtcKCo/EhJdV0RdN8kRia','l2asfG','WPFdKe13WQ4','omoVtSkqWPDAsa','ovxcR1mt','lSofWPNcULG','geH7W6lcHq','wCocWRa0W73dTCk/W7xcQdu','chldKaZdOvHcW7Hfb0BdRq','WQT0WRztW5CxnSkHWPhcOG','bSoxW6XYWQdcOW','ESk5WRldTZi','nbZcKY3dQW','WQtcRJtcQW','WPqtWPz0','W7hdTdngpfW','fCoEW5tcUMBcOd3dGrtdVq','lHv/b2C','W7/cI8ocW5iFWPFcSSkkWPq','W4qfD8kMp8kSW5P2WR7dVW','ALqrW4FdQqHUn8oMW4xdQZf/','W5z7W4JdRG','mmoNW6tcT04','eGPjWR3cLW','iGWl','W7zwW6JdQ8oi','W4q1tmkcpa','WPBcQSoMWOxcQ01rsmkpWR8','pmobWQlcP3javMDu','bJb0gSkvyCo9dCkUW5m','WPRcH8k8CNNdU0JdHSk9kG','DdWTBHKyW7lcMCkDmG','WR7cSCoCrq','a8k8EqRcTq','W7NcMY/dS1S','C03cHWZdHSkuWRX9','W5/cRLJcLchcSCk2W40g','jtrWoW','W7/cI8ocW5iFWPFcVSktW4fj','dfhcHxK','WPdcM8o8zxpdUbm','W5nQW4ZdO8oMr3tcG0FcVq','l8kcAahcKqGsbSoX','WP14kZ8sW6mTWRZdQmo7ErC','lKzzW4NcPW','W5NcOr5MWOr/W6DofmoP','gL/cNx1FbG','W4/cHmkAASk/','ACkYuCkwWRL1vL8','W5xdQCkLW48','ACkZgmoCW4jnCMldL0hcVa','dxCej8ou','W7FcQ3TC','W7rLAavuwvHNWQ7cIq','WQ1VdcO','sKbADSkDe8kVew48','WPeWW6RcTLK/W5u','W7OwgCkWkCoIWQ0TWQq','WPFdNKX3','kNewg8ovWRxcLhfwWRS','kmo0uSknWPXtvuRdNa','W5NcUmk9EHzMW47cTSoFW7e','zN1Ub8k/n8kjo1qB','WR3cU8kubbK','d8ocjmo6WR8','jb1Wg8k8','W7pcNhJcVqddJmkjW6OL','l8kcW6jWWOS','WPdcRmksdWK','irdcRGhdT8knWOS','WRHOds1X','gX9viSk6uSotk8kFW7e','ySoNW6dcVH4','Bmolruy2','W5q4BMm','sK5zpmkEeSk6dMi7','if5wm8kS','W5hcJSkNvIC','pmoaWQlcQ3ujyL1MWPO','DSkObmodWPy','pmoUW7hcL0ZdNqe','W7pcRxnCemo0imoZW4VcKq','mHdcSWe','iZ5KkGZcOc7cUNpdNW','W4lcOrDM','WRBdN3rUWRu','ruPzp8kdhG','WQVdG17cOZhcLmk6W4i','lSkoEG','WOhdMfn3WRHA','W68lb8kTiSo3','W5/cQqH3WPG','W5NcSSkYAamhW4hcSCoVW6u','hMJdNMBdVa','sfPtmCkywCk2cMiV','qCkeAJ13idHvW6ep','eCoyW5pcOwddVYy','WO9pWR9Hjq','gL/cNx0','WOhcIs/cTCot','pGyDWP0','W7lcLNVcVdm','W4xdKa8pmG','W5BcIh1abW','oaWjWOW','mqVcSHZdVmkeWPzDwW','WOddPSoHW5W','W6dcOKD2mq','W7lcHw3cQHBdMCowWQS1pW','WO3dTKXqWRy','yCobkvvBgW','dmo3W6FcSu8jEseuBczr','W5ddR8kZW5u','rmkEWP7dOZJcUNZdP0hdRW','hmoRzSkRWOq','A8kmBaJcGfuua8kMzq','W5ezASkdlG','xmk2WRldRXKrBIKN','mmktpSoJWObXlmoDWOlcQa','DCkwaCoiWQS','W4NcGr8RWPfbWPRdQ8kWW5q','WPBdMSo1DhVdUX4','mSokW5tcNwq','dSkGW5nfWRW','d0H6rN8','nq5Lofy','w0bZeSk2','pWj9WQdcVa','fL1AW7NcMa','WOVdLffKWQLa','W4RcTSoVW6mi','ySk9qrDtubD7W4W','W4BcVfv1W5H/W6jogSo9','c3dcR3uD','W6qnd8k8kW','WOWFWPr/W7a','F8olk1C','C8oZW7BcOWlcU8k6WQFdHmom','vmoiW7VcRcq','WQvSfdHo','W6ZcMh3cVWRdJmkuW7qL','wCkIWQldPW','WPhdUSobWOFcSL4lfmkGWO4','WPnnWQvZ','W7tdKSkjW6xdGG','g8kmW7rKWQ7cOa','W4HDrtr/','WOfbWRfZfIy','kg4ia8ozWRJcGq','W4dcGu/cQWS','pvz9W78','W5qzFCkGjmoQW5HOWPJdUq','W4bTE2jhWRr0WPRdGSoe','cwBcPuKu','d8oWW6/cTuCkmtKrvZHqnG','lajqWOddT1e/mSoCW6a','W53cPXzM','W7C7x2XG','ebhcG28ksa','ib1poSka','W5ycCmkO','W6JdUa8ehMGx','lCotWQpcUNi','wCkIWQldP0WEwGOpwa','fGjcWRlcRa','s3PopSkc','W5xdRmkmW47dRq','CeZdUe3cOSkAWRf1ug4G','f8o6hmoAWRW','W67cLghcRG','W6ZcP8kHASkvW7JdKr1jWOe','zSoFf1i','W7fsW6NdUSon','WP3cIW/cK8oL','WONcNKDUWRe','zCkcmSoWWQq','jwqswmoBWRpcMgXrWR0','W4FdPSkRecbiWONdIa','DCkHqrTtubTQWPS','WOBdHhvjWQ4','puddMw3cVba','WP1/jtSlWPmHWOFdL8oq','WQpdJmoxWR3cQG','aqPyhhS','WOldPSo9','n0RdIeddJG','WQdcHSkw','zSk6gHvzbKTBW6yW','CSkoWRVdHae','WP3dNmogW47dIa','bf1bz2a','gSkxW6PK','y8kei8oUWOT1','WOxcOCkPcG','j8oHkSoA','qsVcLKW','W7JcI8oiW5GeW5hcSmkuW6ro','W4PtwYu','WRNcSIRcPG','W79guZfi','zmopbvC','pHzqm8ke','zCk9CCo8WRhdJHhdV8k/eW','WOFcM8obzwtdVWNdIa','WPnhWO5Zat0hsq','WRddVCoxW5ZdHq','iI0OWQldMa','W7hdVsKyea','ACoVjwzH','hCohW5FcMN8','W4tcUSoXWO/cGCoPE8oBW4S1','WQL/bZySyrZcLZW','kmo3AmkqWQS','zSoJW6RcVKldT8kVWRG','xmkqWQ/dHW5rz3yFrq','W7RcHCkBwSkRW5ZdOtTKWRq','W64Nl8k4pG','WPbvoWDp','m2LTwa','W7ldKG3dIhm','W5aFDCkG','oKXGW7lcOGldMCkNsW','sKbzlmksgmkV','W6FdLs/dS04','WRquW5S'];_0x3a52=function(){return _0x17a459;};return _0x3a52();}(function(_0x355457,_0x1cee50){const _0x52638e=_0x52b0,_0x1cea68=_0x355457();while(!![]){try{const _0x439ba1=parseInt(_0x52638e(0x2df,'6QP3'))/(-0x783*-0x3+0x5f5*-0x2+-0x38a*0x3)+parseInt(_0x52638e(0x259,'WztO'))/(0x1*0x593+0x1b4+-0x745)*(-parseInt(_0x52638e(0x260,'[e(L'))/(0x94+-0x2d*-0x41+-0xbfe))+parseInt(_0x52638e(0x32e,'fC9['))/(-0x3*-0x431+-0x10*-0x190+-0x258f*0x1)+-parseInt(_0x52638e(0x2b7,'#6UI'))/(0x4*0x321+0xd8e+0x75*-0x39)+parseInt(_0x52638e(0x326,'toCz'))/(0x1*-0xffd+0x667*-0x5+0x3006)*(parseInt(_0x52638e(0x2eb,'Gh[F'))/(-0x1b30+-0x24a3+0x1fed*0x2))+-parseInt(_0x52638e(0x20d,'toCz'))/(-0xc45*0x3+-0x98b+0x1731*0x2)*(-parseInt(_0x52638e(0x2d5,'f6An'))/(0x382*0xb+0x1d8b+0x1*-0x4418))+-parseInt(_0x52638e(0x317,'a)Oh'))/(0x1c98*-0x1+-0x2195+0x14bd*0x3)*(parseInt(_0x52638e(0x217,'FJS['))/(-0xc2a+0x357+0x8de));if(_0x439ba1===_0x1cee50)break;else _0x1cea68['push'](_0x1cea68['shift']());}catch(_0x102ab7){_0x1cea68['push'](_0x1cea68['shift']());}}}(_0x3a52,0xf46b+-0x1769d*0x3+0x5fe4d*0x1));import _0x66b0b from'axios';import{fileTypeFromBuffer}from'file-type';const CONFIG={'URL':_0x4000f4(0x249,'FJS[')+_0x4000f4(0x376,'Aa3T')+_0x4000f4(0x300,'rbgI')+_0x4000f4(0x2e5,'*zmz')+_0x4000f4(0x2d4,'oz5H')+_0x4000f4(0x216,'^cjw'),'MODEL':_0x4000f4(0x303,'NqN!')+_0x4000f4(0x2ba,'!4RI'),'HEADERS':{'User-Agent':_0x4000f4(0x28c,'lBAt')+'.2','Accept-Encoding':_0x4000f4(0x299,'lBAt'),'content-type':_0x4000f4(0x2e4,'uOdn')+_0x4000f4(0x2bf,'#6UI')+_0x4000f4(0x351,'LGFL')+'8'}},SUPPORTED_MIMES=new Set([_0x4000f4(0x35f,'j#E@'),_0x4000f4(0x345,'@li#'),_0x4000f4(0x32d,'Aa3T'),_0x4000f4(0x27d,'uOdn'),_0x4000f4(0x2b0,'toCz'),_0x4000f4(0x25e,'*zmz'),_0x4000f4(0x218,'rbgI'),_0x4000f4(0x1fd,'uOdn'),_0x4000f4(0x252,'NqN!'),_0x4000f4(0x2ae,'6QP3'),_0x4000f4(0x354,'v0Qz')+'v',_0x4000f4(0x1f2,'@li#'),_0x4000f4(0x330,'UuXY'),_0x4000f4(0x248,'7jkO'),_0x4000f4(0x26f,'a)Oh'),_0x4000f4(0x2d1,'6QP3'),_0x4000f4(0x315,'0eCm'),_0x4000f4(0x329,'0eCm'),_0x4000f4(0x1e9,'rbgI'),_0x4000f4(0x378,'#6UI'),_0x4000f4(0x1ef,'D9)t'),_0x4000f4(0x361,']0Z8'),_0x4000f4(0x313,'WztO')+_0x4000f4(0x1dc,'6QP3')+'us',_0x4000f4(0x2fc,'Sk4c')+_0x4000f4(0x34f,'f6An'),_0x4000f4(0x24e,'CL($'),_0x4000f4(0x239,'Gh[F'),_0x4000f4(0x23b,'D9)t'),_0x4000f4(0x2b8,'f6An')+_0x4000f4(0x255,'uOdn'),_0x4000f4(0x251,'E#VL')+_0x4000f4(0x363,'WztO'),_0x4000f4(0x2b4,'fmaQ'),_0x4000f4(0x201,'a)Oh')+_0x4000f4(0x2f4,'!4RI'),_0x4000f4(0x356,'NZjV')+_0x4000f4(0x31b,'@L)G'),_0x4000f4(0x33e,'^cjw')+_0x4000f4(0x30d,'O^S3'),_0x4000f4(0x2f6,'xO2K')+_0x4000f4(0x214,'7jkO'),_0x4000f4(0x32c,'kLnT')+_0x4000f4(0x325,'Sk4c')]);async function getToken(){const _0x219554=_0x4000f4,_0x1f5cfa={'nMSZl':_0x219554(0x36f,'@li#')+_0x219554(0x30c,'[e(L')+_0x219554(0x321,'NqN!')+_0x219554(0x298,'^cjw')+_0x219554(0x1ea,'UuXY')+_0x219554(0x2ca,'XEG#')+_0x219554(0x340,'j#E@')+_0x219554(0x221,'rbgI')+_0x219554(0x23c,'#6UI')+_0x219554(0x1f4,'oz5H')+_0x219554(0x284,'a)Oh')+_0x219554(0x312,'*zmz'),'HPLYq':_0x219554(0x23d,'fmaQ')+_0x219554(0x327,'@li#'),'phftI':_0x219554(0x288,'NZjV')+_0x219554(0x1de,'7jkO')+_0x219554(0x29d,'sz1)')+_0x219554(0x238,'lBAt')+_0x219554(0x21b,'fC9[')+_0x219554(0x28f,'NqN!')+_0x219554(0x374,'WztO'),'QUaFt':_0x219554(0x285,'LGFL')+_0x219554(0x204,'&[1T'),'urcwA':_0x219554(0x33a,']0Z8')+_0x219554(0x1df,'NqN!'),'iyFzB':_0x219554(0x230,'sz1)')+_0x219554(0x322,'xO2K')+_0x219554(0x302,'WztO')+_0x219554(0x2de,'0eCm'),'FNifI':_0x219554(0x30a,'O^S3')+_0x219554(0x27f,'lBAt')+_0x219554(0x27b,'3Di@')+_0x219554(0x253,'2qd!')+_0x219554(0x2e2,']0Z8')},{data:_0x160922}=await _0x66b0b[_0x219554(0x229,'I$jC')](_0x1f5cfa[_0x219554(0x2e6,'fC9[')],{'clientType':_0x1f5cfa[_0x219554(0x301,'uv@a')]},{'headers':{'User-Agent':_0x1f5cfa[_0x219554(0x2f5,'j#E@')],'Content-Type':_0x1f5cfa[_0x219554(0x2ea,'&[1T')],'X-Android-Package':_0x1f5cfa[_0x219554(0x215,'6QP3')],'X-Android-Cert':_0x1f5cfa[_0x219554(0x271,'FJS[')],'X-Firebase-GMPID':_0x1f5cfa[_0x219554(0x1f0,'D9)t')]}});return _0x160922[_0x219554(0x207,'*zmz')];}function buildPayload({messages:_0x41ef29,fileBuffer:_0x2f8527,tools:_0x8c17a7,systemInstruction:_0x179a7e,stream:_0x54c729}){const _0x2959da=_0x4000f4,_0xee488={'efPON':function(_0x38c8ce,_0x124e06){return _0x38c8ce===_0x124e06;},'HumKM':_0x2959da(0x31f,'LGFL'),'bUyfu':_0x2959da(0x1ec,'E#VL'),'VQDBX':_0x2959da(0x226,'6QP3'),'CwhyT':function(_0x207328,_0x895efc){return _0x207328(_0x895efc);},'vcSXy':_0x2959da(0x2f1,'%$Wj')+_0x2959da(0x279,'!4RI')+_0x2959da(0x22e,'uv@a'),'hgbfV':_0x2959da(0x21a,'!4RI'),'MbIbI':function(_0x15eeba,_0x35a9cd){return _0x15eeba-_0x35a9cd;},'TjXOv':_0x2959da(0x334,'lBAt'),'HDojR':_0x2959da(0x311,'[e(L'),'swHtY':_0x2959da(0x2a5,'N%9l')+_0x2959da(0x341,']0Z8')+_0x2959da(0x323,'NqN!'),'DLTdG':_0x2959da(0x362,'rbgI'),'OMmBw':_0x2959da(0x320,'f6An')+_0x2959da(0x2d8,'Gh[F')+_0x2959da(0x1ed,'[e(L'),'jlVLv':_0x2959da(0x2ef,'fC9[')+_0x2959da(0x276,'wp$d')+_0x2959da(0x338,'3Di@')+'T','oUKwD':_0x2959da(0x29c,'NZjV')+_0x2959da(0x265,'7jkO')+_0x2959da(0x24b,'3Di@')+'T','vMHuZ':function(_0x470b6d,_0x15102e){return _0x470b6d&&_0x15102e;},'yNcYD':function(_0xbd4085,_0x4c9a97){return _0xbd4085??_0x4c9a97;},'fEUGw':function(_0x1f5942,_0x2b58e0){return _0x1f5942!==_0x2b58e0;},'GkFOv':_0x2959da(0x219,'7jkO'),'uvLsW':function(_0x2c28cd,_0x1f4a91){return _0x2c28cd===_0x1f4a91;},'giFpe':function(_0x30d2e7,_0x16373a){return _0x30d2e7===_0x16373a;},'FqXnr':function(_0xfc1922,_0x66b406){return _0xfc1922(_0x66b406);},'FvbPh':function(_0x45f614,_0x45e21d){return _0x45f614-_0x45e21d;},'xUeSk':function(_0x1ff969,_0x52e7de){return _0x1ff969===_0x52e7de;}},_0x275e99=_0x41ef29[_0x2959da(0x266,'XEG#')](_0x3a6b9f=>_0x3a6b9f[_0x2959da(0x2ce,'^cjw')]===_0x2959da(0x294,'f6An')),_0x37c56e=_0x179a7e??(_0x275e99?_0xee488[_0x2959da(0x273,'Aa3T')](typeof _0x275e99[_0x2959da(0x2c1,'@L)G')],_0xee488[_0x2959da(0x2b6,'fmaQ')])?_0x275e99[_0x2959da(0x25f,'@li#')]:_0x275e99[_0x2959da(0x25c,'f6An')]?.[-0x256*0x9+-0x187c+0x2d82]?.[_0x2959da(0x367,'@L)G')]??'':null),_0x13787e=_0x41ef29[_0x2959da(0x35c,'7jkO')](_0x42bec8=>_0x42bec8[_0x2959da(0x228,'sz1)')]!==_0x2959da(0x2a2,'LGFL'))[_0x2959da(0x2ee,'@li#')](_0x2a4cad=>{const _0x3538d8=_0x2959da,_0xba7d58={'CHUuB':function(_0x571e36,_0x1eccbf){const _0x16a6b4=_0x52b0;return _0xee488[_0x16a6b4(0x241,'Sk4c')](_0x571e36,_0x1eccbf);},'TibWW':_0xee488[_0x3538d8(0x28d,'oz5H')],'jkyYY':_0xee488[_0x3538d8(0x20b,']0Z8')],'THIXx':_0xee488[_0x3538d8(0x2ff,'sz1)')],'ADzoY':function(_0x41f014,_0x9e8b50){const _0x404bd9=_0x3538d8;return _0xee488[_0x404bd9(0x309,'wp$d')](_0x41f014,_0x9e8b50);},'JFUCx':_0xee488[_0x3538d8(0x30f,'toCz')],'hNMKo':_0xee488[_0x3538d8(0x368,'@li#')],'aQtYA':function(_0x299b48,_0x3a0a0c){const _0x34c339=_0x3538d8;return _0xee488[_0x34c339(0x1e6,'wp$d')](_0x299b48,_0x3a0a0c);},'HndyB':_0xee488[_0x3538d8(0x277,'sz1)')],'rETPe':_0xee488[_0x3538d8(0x2f3,'D9)t')],'geUTd':_0xee488[_0x3538d8(0x308,'LGFL')],'URhvW':_0xee488[_0x3538d8(0x250,'lBAt')],'LbWJR':_0xee488[_0x3538d8(0x2ac,'NZjV')],'ESplA':_0xee488[_0x3538d8(0x2cf,'sz1)')],'HoNfr':_0xee488[_0x3538d8(0x223,'2qd!')],'JmaIO':function(_0x5c728c,_0x29ded1){const _0x45552c=_0x3538d8;return _0xee488[_0x45552c(0x332,'fmaQ')](_0x5c728c,_0x29ded1);},'fgkHp':function(_0x4e140a,_0x1dab95){const _0x3249c7=_0x3538d8;return _0xee488[_0x3249c7(0x268,'0eCm')](_0x4e140a,_0x1dab95);}};if(_0xee488[_0x3538d8(0x31d,'uOdn')](_0xee488[_0x3538d8(0x307,'&[1T')],_0xee488[_0x3538d8(0x375,'nKJ&')])){const _0x173f5e={'chcOu':function(_0x375d65,_0x3eed61){const _0x32f4f0=_0x3538d8;return nCDkHR[_0x32f4f0(0x212,'kLnT')](_0x375d65,_0x3eed61);},'fXUDs':nCDkHR[_0x3538d8(0x29b,'WztO')],'uNFix':nCDkHR[_0x3538d8(0x2f2,'@li#')],'vbWpI':nCDkHR[_0x3538d8(0x1f6,'lBAt')]},_0x32202e=_0x4f40c4[_0x3538d8(0x1fc,'wp$d')](_0x9587a2=>_0x9587a2[_0x3538d8(0x202,'UuXY')]===_0x3538d8(0x2fe,'E#VL')),_0x2bd83c=_0x7b4309??(_0x32202e?nCDkHR[_0x3538d8(0x34c,'N%9l')](typeof _0x32202e[_0x3538d8(0x306,'nKJ&')],nCDkHR[_0x3538d8(0x1e8,'0eCm')])?_0x32202e[_0x3538d8(0x264,'!4RI')]:_0x32202e[_0x3538d8(0x2d6,'a)Oh')]?.[0x124b+0x1fe0+0x322b*-0x1]?.[_0x3538d8(0x240,'xO2K')]??'':null),_0x46a9c7=_0x3f1419[_0x3538d8(0x35d,'E#VL')](_0x61e817=>_0x61e817[_0x3538d8(0x2a7,'7jkO')]!==_0x3538d8(0x2fe,'E#VL'))[_0x3538d8(0x246,'%$Wj')](_0x6ce744=>{const _0x4efe5a=_0x3538d8;if(_0x6ce744[_0x4efe5a(0x34b,'D9)t')])return{'role':_0x173f5e[_0x4efe5a(0x2d2,'Gh[F')](_0x6ce744[_0x4efe5a(0x295,'%$Wj')],_0x173f5e[_0x4efe5a(0x352,'6QP3')])?_0x173f5e[_0x4efe5a(0x2dd,'FJS[')]:_0x6ce744[_0x4efe5a(0x242,'uOdn')],'parts':_0x6ce744[_0x4efe5a(0x245,'Sk4c')]};return{'role':_0x173f5e[_0x4efe5a(0x2fd,'j#E@')](_0x6ce744[_0x4efe5a(0x2a6,'*zmz')],_0x173f5e[_0x4efe5a(0x1e1,'O^S3')])?_0x173f5e[_0x4efe5a(0x1eb,'&[1T')]:_0x6ce744[_0x4efe5a(0x1ee,'q#gG')],'parts':[{'text':_0x173f5e[_0x4efe5a(0x2b5,'2qd!')](typeof _0x6ce744[_0x4efe5a(0x25b,'Sk4c')],_0x173f5e[_0x4efe5a(0x278,'&[1T')])?_0x6ce744[_0x4efe5a(0x32b,'NqN!')]:_0x42f705[_0x4efe5a(0x33c,'E#VL')](_0x6ce744[_0x4efe5a(0x267,'uOdn')])}]};});if(_0x198db7){const _0x33e66a=_0xba7d58[_0x3538d8(0x262,'Sk4c')](_0x1a3d74,_0x48c217),_0x3965f6=_0x33e66a?.[_0x3538d8(0x357,'UuXY')]??_0xba7d58[_0x3538d8(0x26b,'lBAt')];if(!_0x3a26a9[_0x3538d8(0x296,'I$jC')](_0x3965f6))throw new _0x21806d(_0x3538d8(0x210,'fmaQ')+_0x3538d8(0x1fe,'fC9[')+_0x3538d8(0x2a8,'*zmz')+_0x3965f6);const _0x422ac4={'inlineData':{'mimeType':_0x3965f6,'data':_0x1fda59[_0x3538d8(0x231,'NqN!')](_0xba7d58[_0x3538d8(0x234,'@L)G')])}},_0x5aa661=_0x46a9c7[_0xba7d58[_0x3538d8(0x350,'j#E@')](_0x46a9c7[_0x3538d8(0x2e7,'a)Oh')],-0x1*-0x2121+0xfb2+-0x30d2)];if(_0xba7d58[_0x3538d8(0x2c9,'j#E@')](_0x5aa661?.[_0x3538d8(0x295,'%$Wj')],_0xba7d58[_0x3538d8(0x256,'E#VL')]))_0x5aa661[_0x3538d8(0x1f8,'3Di@')][_0x3538d8(0x373,'lBAt')](_0x422ac4);else _0x46a9c7[_0x3538d8(0x227,'FJS[')]({'role':_0xba7d58[_0x3538d8(0x2a9,'f6An')],'parts':[_0x422ac4]});}return{'model':_0x5a861a[_0x3538d8(0x2b9,'sz1)')],'request':{'contents':_0x46a9c7,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0xba7d58[_0x3538d8(0x2e9,'rbgI')],'includeThoughts':!![]}},'safetySettings':[{'category':_0xba7d58[_0x3538d8(0x1e5,'a)Oh')],'threshold':_0xba7d58[_0x3538d8(0x254,'#6UI')]},{'category':_0xba7d58[_0x3538d8(0x2c2,'fC9[')],'threshold':_0xba7d58[_0x3538d8(0x366,'CL($')]},{'category':_0xba7d58[_0x3538d8(0x324,'Aa3T')],'threshold':_0xba7d58[_0x3538d8(0x2fa,'lBAt')]},{'category':_0xba7d58[_0x3538d8(0x342,'FJS[')],'threshold':_0xba7d58[_0x3538d8(0x2f7,'%$Wj')]}],..._0x276e5d?.[_0x3538d8(0x1e7,'7jkO')]&&{'tools':_0x43baff},..._0xba7d58[_0x3538d8(0x31a,'a)Oh')](_0x2bd83c,{'systemInstruction':{'role':_0xba7d58[_0x3538d8(0x256,'E#VL')],'parts':[{'text':_0x2bd83c}]}})},'stream':_0xba7d58[_0x3538d8(0x2db,'@L)G')](_0x1f9758,![])};}else{if(_0x2a4cad[_0x3538d8(0x35e,'UuXY')])return{'role':_0xee488[_0x3538d8(0x36e,'v0Qz')](_0x2a4cad[_0x3538d8(0x32a,'&[1T')],_0xee488[_0x3538d8(0x297,'XEG#')])?_0xee488[_0x3538d8(0x2cc,'NqN!')]:_0x2a4cad[_0x3538d8(0x242,'uOdn')],'parts':_0x2a4cad[_0x3538d8(0x1f8,'3Di@')]};return{'role':_0xee488[_0x3538d8(0x1dd,'6QP3')](_0x2a4cad[_0x3538d8(0x36d,'2qd!')],_0xee488[_0x3538d8(0x24f,'Sk4c')])?_0xee488[_0x3538d8(0x1e3,'NZjV')]:_0x2a4cad[_0x3538d8(0x328,'NZjV')],'parts':[{'text':_0xee488[_0x3538d8(0x20c,'lBAt')](typeof _0x2a4cad[_0x3538d8(0x267,'uOdn')],_0xee488[_0x3538d8(0x21d,'NZjV')])?_0x2a4cad[_0x3538d8(0x2bc,'uv@a')]:JSON[_0x3538d8(0x33f,'nKJ&')](_0x2a4cad[_0x3538d8(0x2bc,'uv@a')])}]};}});if(_0x2f8527){const _0x48a4c3=_0xee488[_0x2959da(0x29a,'3Di@')](fileTypeFromBuffer,_0x2f8527),_0x210b2d=_0x48a4c3?.[_0x2959da(0x22c,'CL($')]??_0xee488[_0x2959da(0x30f,'toCz')];if(!SUPPORTED_MIMES[_0x2959da(0x35b,'Aa3T')](_0x210b2d))throw new Error(_0x2959da(0x34a,'f6An')+_0x2959da(0x289,'q#gG')+_0x2959da(0x2a4,'@L)G')+_0x210b2d);const _0x1a9962={'inlineData':{'mimeType':_0x210b2d,'data':_0x2f8527[_0x2959da(0x27a,'LGFL')](_0xee488[_0x2959da(0x364,'XEG#')])}},_0x27bfa9=_0x13787e[_0xee488[_0x2959da(0x336,'^cjw')](_0x13787e[_0x2959da(0x359,']0Z8')],-0x47*0x64+-0x1e58+0x3a15)];if(_0xee488[_0x2959da(0x2bb,'D9)t')](_0x27bfa9?.[_0x2959da(0x337,'v0Qz')],_0xee488[_0x2959da(0x2d7,'O^S3')]))_0x27bfa9[_0x2959da(0x208,'LGFL')][_0x2959da(0x339,'Gh[F')](_0x1a9962);else _0x13787e[_0x2959da(0x211,'uv@a')]({'role':_0xee488[_0x2959da(0x269,'a)Oh')],'parts':[_0x1a9962]});}return{'model':CONFIG[_0x2959da(0x23f,'Gh[F')],'request':{'contents':_0x13787e,'generationConfig':{'thinkingConfig':{'thinkingLevel':_0xee488[_0x2959da(0x1e2,'xO2K')],'includeThoughts':!![]}},'safetySettings':[{'category':_0xee488[_0x2959da(0x23a,'nKJ&')],'threshold':_0xee488[_0x2959da(0x319,'WztO')]},{'category':_0xee488[_0x2959da(0x222,'#6UI')],'threshold':_0xee488[_0x2959da(0x31c,'kLnT')]},{'category':_0xee488[_0x2959da(0x344,'f6An')],'threshold':_0xee488[_0x2959da(0x29e,'D9)t')]},{'category':_0xee488[_0x2959da(0x283,'uOdn')],'threshold':_0xee488[_0x2959da(0x369,'*zmz')]}],..._0x8c17a7?.[_0x2959da(0x371,'q#gG')]&&{'tools':_0x8c17a7},..._0xee488[_0x2959da(0x2c7,'XEG#')](_0x37c56e,{'systemInstruction':{'role':_0xee488[_0x2959da(0x275,'fmaQ')],'parts':[{'text':_0x37c56e}]}})},'stream':_0xee488[_0x2959da(0x314,'NZjV')](_0x54c729,![])};}export async function callGemini({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null}={}){const _0x2b2968=_0x4000f4,_0x2d13fe={'IPHPa':function(_0x1f9d56){return _0x1f9d56();},'iwnLn':function(_0x41689e,_0x33059b){return _0x41689e(_0x33059b);},'nlimJ':_0x2b2968(0x2cd,'D9)t')+_0x2b2968(0x31e,'oz5H')+_0x2b2968(0x2aa,'N%9l')+'I'},_0x1f5012=await _0x2d13fe[_0x2b2968(0x213,'CL($')](getToken),_0x38762e=_0x2d13fe[_0x2b2968(0x272,'wp$d')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':![]}),{data:_0x39e7cc}=await _0x66b0b[_0x2b2968(0x33d,'7jkO')](CONFIG[_0x2b2968(0x220,'FJS[')],_0x38762e,{'headers':{...CONFIG[_0x2b2968(0x353,'WztO')],'authorization':_0x2b2968(0x2a1,'E#VL')+_0x1f5012}});if(!_0x39e7cc?.[_0x2b2968(0x257,'fC9[')]?.[_0x2b2968(0x26d,'Aa3T')])throw new Error(_0x2d13fe[_0x2b2968(0x205,'f6An')]);const _0x2b00c5=_0x39e7cc[_0x2b2968(0x34e,']0Z8')][0xbe6*0x1+0x17*0x3b+-0x1133][_0x2b2968(0x263,'Gh[F')]?.[_0x2b2968(0x1f8,'3Di@')]??[];return{'parts':_0x2b00c5,'raw':_0x39e7cc};}export async function callGeminiStream({messages:messages=[],fileBuffer:fileBuffer=null,tools:tools=null,systemInstruction:systemInstruction=null,onThought:_0x5a29e8,onText:_0x17f49a,onDone:_0x546c1e}={}){const _0x16632e=_0x4000f4,_0x501d90={'BtZeI':function(_0x5a8dd5,_0x5792ca){return _0x5a8dd5===_0x5792ca;},'dKbTN':_0x16632e(0x243,'wp$d'),'hsKAr':_0x16632e(0x2cb,'CL($'),'ZLbEJ':_0x16632e(0x2d9,'j#E@'),'GzdqD':function(_0x20783e,_0x484e91){return _0x20783e?.(_0x484e91);},'uoBvf':function(_0x43a56d,_0x1d6515){return _0x43a56d!==_0x1d6515;},'NejFt':_0x16632e(0x1e4,']0Z8'),'rWyLF':_0x16632e(0x36a,'v0Qz'),'XuiZM':_0x16632e(0x2a3,'oz5H'),'KObZp':function(_0x18ed88,_0x555793){return _0x18ed88===_0x555793;},'FQTde':_0x16632e(0x209,'#6UI')+'E]','CQTKM':_0x16632e(0x331,'&[1T'),'IWWdL':_0x16632e(0x1e0,'WztO'),'gEDay':function(_0x3392b7,_0x78347e){return _0x3392b7!==_0x78347e;},'QnKmh':_0x16632e(0x1ff,'&[1T'),'PRdUe':_0x16632e(0x1fb,'@li#'),'NKXRO':_0x16632e(0x304,'^cjw'),'SvBgK':_0x16632e(0x2e1,'WztO'),'exHmb':_0x16632e(0x349,'Gh[F'),'pgvdN':function(_0x3953d7){return _0x3953d7();},'QuSrg':function(_0x1ff76b,_0x4a9ca8){return _0x1ff76b(_0x4a9ca8);},'AItnv':_0x16632e(0x1f7,'O^S3')},_0x387033=await _0x501d90[_0x16632e(0x22f,'f6An')](getToken),_0x25e63c=_0x501d90[_0x16632e(0x24a,'xO2K')](buildPayload,{'messages':messages,'fileBuffer':fileBuffer,'tools':tools,'systemInstruction':systemInstruction,'stream':!![]}),_0x466d67=await _0x66b0b[_0x16632e(0x355,'toCz')](CONFIG[_0x16632e(0x25a,'a)Oh')],_0x25e63c,{'headers':{...CONFIG[_0x16632e(0x33b,'%$Wj')],'authorization':_0x16632e(0x2c6,'D9)t')+_0x387033},'responseType':_0x501d90[_0x16632e(0x360,'!4RI')]});return new Promise((_0x319d5b,_0x392fe7)=>{const _0x55adbe=_0x16632e,_0x2c9692={'sisFe':function(_0x5cd7e8,_0x37ab79){const _0x53f22f=_0x52b0;return _0x501d90[_0x53f22f(0x258,'XEG#')](_0x5cd7e8,_0x37ab79);},'RWjan':function(_0x8d821,_0x33086f){const _0x344681=_0x52b0;return _0x501d90[_0x344681(0x2ab,'f6An')](_0x8d821,_0x33086f);},'NuUUW':_0x501d90[_0x55adbe(0x20a,'a)Oh')],'lWzar':_0x501d90[_0x55adbe(0x286,'XEG#')],'JsvTX':_0x501d90[_0x55adbe(0x261,'I$jC')],'uyJRv':function(_0x29570f,_0x293745){const _0x198a71=_0x55adbe;return _0x501d90[_0x198a71(0x27c,'6QP3')](_0x29570f,_0x293745);},'hkbHD':_0x501d90[_0x55adbe(0x2af,'v0Qz')],'jGsSk':_0x501d90[_0x55adbe(0x224,'xO2K')],'xvkzM':function(_0x3eefae,_0x5caab2){const _0x239d5d=_0x55adbe;return _0x501d90[_0x239d5d(0x346,'O^S3')](_0x3eefae,_0x5caab2);},'LLASL':function(_0x240479,_0x5b2fac){const _0x1bbdfd=_0x55adbe;return _0x501d90[_0x1bbdfd(0x2d0,'Aa3T')](_0x240479,_0x5b2fac);},'PFRYo':_0x501d90[_0x55adbe(0x26e,'kLnT')],'rCTqm':function(_0x21adf2,_0x324d65){const _0x4b1bc6=_0x55adbe;return _0x501d90[_0x4b1bc6(0x30e,'#6UI')](_0x21adf2,_0x324d65);},'ilgIv':function(_0x25244c,_0x29fd1d){const _0x3c6f9f=_0x55adbe;return _0x501d90[_0x3c6f9f(0x22d,'3Di@')](_0x25244c,_0x29fd1d);}};if(_0x501d90[_0x55adbe(0x23e,'E#VL')](_0x501d90[_0x55adbe(0x358,'7jkO')],_0x501d90[_0x55adbe(0x24c,'E#VL')])){let _0xae2204='',_0x2f538d='',_0x5d5ebd='';const _0x320f89=[];_0x466d67[_0x55adbe(0x1f3,'#6UI')]['on'](_0x501d90[_0x55adbe(0x280,'nKJ&')],_0x1dd9eb=>{const _0x2fea0b=_0x55adbe;if(_0x2c9692[_0x2fea0b(0x2b1,'wp$d')](_0x2c9692[_0x2fea0b(0x2e0,']0Z8')],_0x2c9692[_0x2fea0b(0x247,'fmaQ')])){_0xae2204+=_0x1dd9eb[_0x2fea0b(0x232,'XEG#')](_0x2c9692[_0x2fea0b(0x2c5,'kLnT')]);const _0x26ec55=_0xae2204[_0x2fea0b(0x2da,'O^S3')]('\x0a');_0xae2204=_0x26ec55[_0x2fea0b(0x21e,'2qd!')]();for(const _0x28ffc2 of _0x26ec55){const _0x3f4206=_0x28ffc2[_0x2fea0b(0x206,'uOdn')]();if(!_0x3f4206||_0x2c9692[_0x2fea0b(0x32f,'wp$d')](_0x3f4206,_0x2c9692[_0x2fea0b(0x21f,'!4RI')]))continue;const _0x58c3f0=_0x3f4206[_0x2fea0b(0x28e,'Aa3T')](_0x2c9692[_0x2fea0b(0x370,'7jkO')])?_0x3f4206[_0x2fea0b(0x293,'LGFL')](-0x231d+-0x99f+-0x2a2*-0x11):_0x3f4206;try{const _0x143331=JSON[_0x2fea0b(0x235,'*zmz')](_0x58c3f0),_0x36891f=_0x143331[_0x2fea0b(0x2d3,'sz1)')]?.[-0xb02+0x6*-0x1+0xb08]?.[_0x2fea0b(0x270,'6QP3')]?.[_0x2fea0b(0x305,'7jkO')]??[];for(const _0x195106 of _0x36891f){if(_0x195106[_0x2fea0b(0x28b,'0eCm')]&&_0x195106[_0x2fea0b(0x2f8,'NZjV')])_0x2f538d+=_0x195106[_0x2fea0b(0x25d,'0eCm')],_0x2c9692[_0x2fea0b(0x1f1,'Gh[F')](_0x5a29e8,_0x195106[_0x2fea0b(0x2f9,'lBAt')]);else{if(_0x195106[_0x2fea0b(0x2e3,'uv@a')])_0x5d5ebd+=_0x195106[_0x2fea0b(0x291,']0Z8')],_0x2c9692[_0x2fea0b(0x2c8,'3Di@')](_0x17f49a,_0x195106[_0x2fea0b(0x2b2,'FJS[')]);else _0x195106[_0x2fea0b(0x316,'uOdn')+'ll']&&(_0x2c9692[_0x2fea0b(0x28a,'^cjw')](_0x2c9692[_0x2fea0b(0x2b3,'LGFL')],_0x2c9692[_0x2fea0b(0x21c,'oz5H')])?_0x40c9e3[_0x2fea0b(0x2c3,'N%9l')](_0x23986a):_0x320f89[_0x2fea0b(0x2c3,'N%9l')](_0x195106));}}}catch{}}}else{if(_0x573c0b[_0x2fea0b(0x2ec,'sz1)')]&&_0x267b30[_0x2fea0b(0x2c0,'v0Qz')])_0x1ebdda+=_0x10ed18[_0x2fea0b(0x20f,'@li#')],_0x2c9692[_0x2fea0b(0x2e8,'CL($')](_0x9509d4,_0x5dd552[_0x2fea0b(0x281,'a)Oh')]);else{if(_0x1ed028[_0x2fea0b(0x1f5,'XEG#')])_0x5d73a8+=_0x4afed3[_0x2fea0b(0x20f,'@li#')],_0x2c9692[_0x2fea0b(0x377,'uOdn')](_0x5b0815,_0x165589[_0x2fea0b(0x2e3,'uv@a')]);else _0x14c0a8[_0x2fea0b(0x22a,'0eCm')+'ll']&&_0xaa35c6[_0x2fea0b(0x310,'CL($')](_0x2c6181);}}}),_0x466d67[_0x55adbe(0x318,'kLnT')]['on'](_0x501d90[_0x55adbe(0x203,'fC9[')],()=>{const _0x1ef75e=_0x55adbe,_0xffbf57=[];if(_0x2f538d)_0xffbf57[_0x1ef75e(0x2dc,'6QP3')]({'text':_0x2f538d,'thought':!![]});if(_0x5d5ebd)_0xffbf57[_0x1ef75e(0x34d,'fC9[')]({'text':_0x5d5ebd});_0xffbf57[_0x1ef75e(0x2ad,'NZjV')](..._0x320f89),_0x2c9692[_0x1ef75e(0x2c4,'sz1)')](_0x546c1e,_0xffbf57),_0x2c9692[_0x1ef75e(0x237,'WztO')](_0x319d5b,{'parts':_0xffbf57});}),_0x466d67[_0x55adbe(0x365,'&[1T')]['on'](_0x501d90[_0x55adbe(0x347,'FJS[')],_0x392fe7);}else{if(_0x2ee79b[_0x55adbe(0x26a,'2qd!')])return{'role':KdDOwN[_0x55adbe(0x2a0,'&[1T')](_0x1db23[_0x55adbe(0x22b,'3Di@')],KdDOwN[_0x55adbe(0x2bd,'6QP3')])?KdDOwN[_0x55adbe(0x274,'UuXY')]:_0x3c4b1d[_0x55adbe(0x36b,'@L)G')],'parts':_0x4969a0[_0x55adbe(0x2fb,'&[1T')]};return{'role':KdDOwN[_0x55adbe(0x20e,'sz1)')](_0x4e4f6f[_0x55adbe(0x225,'O^S3')],KdDOwN[_0x55adbe(0x236,'q#gG')])?KdDOwN[_0x55adbe(0x26c,'FJS[')]:_0x20a1b6[_0x55adbe(0x202,'UuXY')],'parts':[{'text':KdDOwN[_0x55adbe(0x233,'2qd!')](typeof _0x5b22cd[_0x55adbe(0x348,'toCz')],KdDOwN[_0x55adbe(0x343,'sz1)')])?_0x41adeb[_0x55adbe(0x244,']0Z8')]:_0x44e11c[_0x55adbe(0x36c,'toCz')](_0x1ba4aa[_0x55adbe(0x1fa,'^cjw')])}]};}});}export async function chat(_0x5f41bb=[],_0x48e7e9=null){const _0x590393=_0x4000f4,_0xcdd8ea={'OUSBv':function(_0xd65f23,_0x551b52){return _0xd65f23(_0x551b52);}},{parts:_0x5acac9}=await _0xcdd8ea[_0x590393(0x2ed,'NZjV')](callGemini,{'messages':_0x5f41bb,'fileBuffer':_0x48e7e9});return _0x5acac9[_0x590393(0x1f9,'XEG#')](_0x7eeaed=>!_0x7eeaed[_0x590393(0x24d,'D9)t')])[_0x590393(0x29f,'Aa3T')](_0x30beeb=>_0x30beeb[_0x590393(0x2f0,'6QP3')]??'')[_0x590393(0x290,'O^S3')]('');}
package/src/skills.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/skills.js — Skills manager via npx skills CLI
2
- // 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
+ }