@offgridsec/kira-lite-mcp 0.1.3 → 0.1.4
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/README.md +486 -34
- package/dist/config.d.ts +1 -0
- package/dist/config.js +1 -1
- package/dist/core/engines/kira-core.js +1 -1
- package/dist/core/engines/osv.js +1 -485
- package/dist/core/engines/runner.js +1 -30
- package/dist/core/scanner.js +1 -101
- package/dist/core/types.js +1 -1
- package/dist/core/utils.js +1 -70
- package/dist/index.js +1 -477
- package/dist/rules/c-cpp.js +1 -202
- package/dist/rules/cicd.js +1 -144
- package/dist/rules/csharp.js +1 -207
- package/dist/rules/docker.js +1 -143
- package/dist/rules/go.js +1 -184
- package/dist/rules/index.js +1 -147
- package/dist/rules/java.js +1 -1
- package/dist/rules/javascript-extended.js +1 -1
- package/dist/rules/javascript.js +1 -1
- package/dist/rules/kubernetes.js +1 -1
- package/dist/rules/php.js +1 -1
- package/dist/rules/python-extended.js +1 -1
- package/dist/rules/python.js +1 -1
- package/dist/rules/ruby.js +1 -1
- package/dist/rules/secrets-extended.js +1 -1
- package/dist/rules/secrets.js +1 -1
- package/dist/rules/shell.js +1 -1
- package/dist/rules/terraform.js +1 -1
- package/dist/telemetry.js +1 -1
- package/dist/tools/fix-vulnerability.js +1 -1
- package/dist/tools/scan-code.js +1 -1
- package/dist/tools/scan-dependencies.js +1 -1
- package/dist/tools/scan-diff.js +1 -1
- package/dist/tools/scan-file.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,33 +9,399 @@ Kira-Lite catches vulnerabilities **before code is written to disk**. It integra
|
|
|
9
9
|
Security tools shouldn't live in a separate tab. Kira-Lite runs **inside your AI coding assistant** — the same place you write code. No context switching, no separate dashboards, no CI pipeline to wait for.
|
|
10
10
|
|
|
11
11
|
- **Scans before code hits disk** — vulnerabilities are caught and fixed in the same conversation
|
|
12
|
-
- **Works where you already are** — Claude Code, Cursor, Windsurf, or any MCP-compatible editor
|
|
12
|
+
- **Works where you already are** — Claude Code, Cursor, Windsurf, Codex, Antigravity, or any MCP-compatible editor
|
|
13
13
|
- **Zero config to start** — one `npx` command, no API keys, no accounts
|
|
14
14
|
- **Your code stays local** — nothing is sent to external servers; all scanning happens on your machine
|
|
15
15
|
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
- **Node.js** >= 18
|
|
19
|
+
- An MCP-compatible AI coding assistant
|
|
20
|
+
|
|
16
21
|
## Quick Start
|
|
17
22
|
|
|
18
23
|
```bash
|
|
19
24
|
# Install globally
|
|
20
25
|
npm install -g @offgridsec/kira-lite-mcp
|
|
21
26
|
|
|
22
|
-
# Or run directly
|
|
27
|
+
# Or run directly without installing
|
|
23
28
|
npx @offgridsec/kira-lite-mcp
|
|
24
29
|
```
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Setup by IDE / Tool
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
Pick your IDE or tool below and follow the steps. Each section is self-contained.
|
|
29
36
|
|
|
30
|
-
|
|
37
|
+
### Claude Code (CLI)
|
|
38
|
+
|
|
39
|
+
Claude Code requires three things: (1) register the MCP server, (2) add a `CLAUDE.md` file so Claude knows to scan automatically, and (3) add `.claude/settings.local.json` for auto-permissions and hook enforcement.
|
|
40
|
+
|
|
41
|
+
#### Step 1 — Register the MCP server (one-time, global)
|
|
31
42
|
|
|
32
43
|
```bash
|
|
33
44
|
claude mcp add --scope user kira-lite -- npx -y @offgridsec/kira-lite-mcp
|
|
34
45
|
```
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
This makes kira-lite available in every project.
|
|
48
|
+
|
|
49
|
+
#### Step 2 — Per-project setup
|
|
50
|
+
|
|
51
|
+
Navigate to your project directory, then copy the two config files:
|
|
52
|
+
|
|
53
|
+
**macOS / Linux:**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cd /path/to/your-project
|
|
57
|
+
|
|
58
|
+
# Copy CLAUDE.md (tells Claude to scan before every write)
|
|
59
|
+
cp $(npm root -g)/@offgridsec/kira-lite-mcp/config/CLAUDE.md .
|
|
60
|
+
|
|
61
|
+
# Copy settings (auto-allows kira-lite tools + adds post-write hook)
|
|
62
|
+
mkdir -p .claude
|
|
63
|
+
cp $(npm root -g)/@offgridsec/kira-lite-mcp/config/settings.local.json .claude/settings.local.json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Windows (PowerShell):**
|
|
37
67
|
|
|
38
|
-
|
|
68
|
+
```powershell
|
|
69
|
+
cd C:\path\to\your-project
|
|
70
|
+
|
|
71
|
+
$pkg = (npm root -g) + "\@offgridsec\kira-lite-mcp"
|
|
72
|
+
Copy-Item "$pkg\config\CLAUDE.md" .
|
|
73
|
+
New-Item -ItemType Directory -Force .claude | Out-Null
|
|
74
|
+
Copy-Item "$pkg\config\settings.local.json" .claude\settings.local.json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
> **Already have a `CLAUDE.md` or `.claude/settings.local.json`?** Don't overwrite them — merge manually:
|
|
78
|
+
>
|
|
79
|
+
> <details>
|
|
80
|
+
> <summary><strong>If you already have a CLAUDE.md</strong></summary>
|
|
81
|
+
>
|
|
82
|
+
> Append the kira-lite instructions to the end of your existing file:
|
|
83
|
+
>
|
|
84
|
+
> ```bash
|
|
85
|
+
> # macOS / Linux
|
|
86
|
+
> echo "" >> CLAUDE.md
|
|
87
|
+
> cat $(npm root -g)/@offgridsec/kira-lite-mcp/config/CLAUDE.md >> CLAUDE.md
|
|
88
|
+
> ```
|
|
89
|
+
>
|
|
90
|
+
> Or manually add this block to the bottom of your `CLAUDE.md`:
|
|
91
|
+
>
|
|
92
|
+
> ```markdown
|
|
93
|
+
> # SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
94
|
+
>
|
|
95
|
+
> You MUST call the `scan_code` MCP tool before EVERY single Edit or Write tool call. No exceptions. This is not optional.
|
|
96
|
+
>
|
|
97
|
+
> ## How it works
|
|
98
|
+
>
|
|
99
|
+
> 1. Before you use Edit or Write, call `scan_code` with the code you are about to write
|
|
100
|
+
> 2. If findings are returned, fix them and call `scan_code` again
|
|
101
|
+
> 3. Only write the code after scan returns clean
|
|
102
|
+
> 4. For edits to existing files, use `scan_diff` with original and new code
|
|
103
|
+
>
|
|
104
|
+
> ## Rules
|
|
105
|
+
>
|
|
106
|
+
> - EVERY Edit/Write MUST be preceded by a scan_code call
|
|
107
|
+
> - If scan returns critical or high findings, DO NOT write the code
|
|
108
|
+
> - Tell the user what you found and what you fixed
|
|
109
|
+
> - This applies to ALL files: .js, .ts, .py, .go, .java, .rb, .php, .yaml, .tf, Dockerfile, etc.
|
|
110
|
+
> ```
|
|
111
|
+
>
|
|
112
|
+
> </details>
|
|
113
|
+
>
|
|
114
|
+
> <details>
|
|
115
|
+
> <summary><strong>If you already have .claude/settings.local.json</strong></summary>
|
|
116
|
+
>
|
|
117
|
+
> Merge these entries into your existing file:
|
|
118
|
+
>
|
|
119
|
+
> **Add to `permissions.allow` array:**
|
|
120
|
+
>
|
|
121
|
+
> ```json
|
|
122
|
+
> "mcp__kira-lite__scan_code",
|
|
123
|
+
> "mcp__kira-lite__scan_file",
|
|
124
|
+
> "mcp__kira-lite__scan_diff",
|
|
125
|
+
> "mcp__kira-lite__fix_vulnerability",
|
|
126
|
+
> "mcp__kira-lite__get_config",
|
|
127
|
+
> "mcp__kira-lite__set_config"
|
|
128
|
+
> ```
|
|
129
|
+
>
|
|
130
|
+
> **Add to `hooks` object:**
|
|
131
|
+
>
|
|
132
|
+
> ```json
|
|
133
|
+
> "PostToolCall": [
|
|
134
|
+
> {
|
|
135
|
+
> "matcher": "Write|Edit",
|
|
136
|
+
> "hooks": [
|
|
137
|
+
> {
|
|
138
|
+
> "type": "command",
|
|
139
|
+
> "command": "npx --yes @offgridsec/kira-lite-mcp/hook.mjs"
|
|
140
|
+
> }
|
|
141
|
+
> ]
|
|
142
|
+
> }
|
|
143
|
+
> ]
|
|
144
|
+
> ```
|
|
145
|
+
>
|
|
146
|
+
> **Example — before:**
|
|
147
|
+
>
|
|
148
|
+
> ```json
|
|
149
|
+
> {
|
|
150
|
+
> "permissions": {
|
|
151
|
+
> "allow": [
|
|
152
|
+
> "Bash(npm test:*)"
|
|
153
|
+
> ]
|
|
154
|
+
> }
|
|
155
|
+
> }
|
|
156
|
+
> ```
|
|
157
|
+
>
|
|
158
|
+
> **Example — after:**
|
|
159
|
+
>
|
|
160
|
+
> ```json
|
|
161
|
+
> {
|
|
162
|
+
> "permissions": {
|
|
163
|
+
> "allow": [
|
|
164
|
+
> "Bash(npm test:*)",
|
|
165
|
+
> "mcp__kira-lite__scan_code",
|
|
166
|
+
> "mcp__kira-lite__scan_file",
|
|
167
|
+
> "mcp__kira-lite__scan_diff",
|
|
168
|
+
> "mcp__kira-lite__fix_vulnerability",
|
|
169
|
+
> "mcp__kira-lite__get_config",
|
|
170
|
+
> "mcp__kira-lite__set_config"
|
|
171
|
+
> ]
|
|
172
|
+
> },
|
|
173
|
+
> "hooks": {
|
|
174
|
+
> "PostToolCall": [
|
|
175
|
+
> {
|
|
176
|
+
> "matcher": "Write|Edit",
|
|
177
|
+
> "hooks": [
|
|
178
|
+
> {
|
|
179
|
+
> "type": "command",
|
|
180
|
+
> "command": "npx --yes @offgridsec/kira-lite-mcp/hook.mjs"
|
|
181
|
+
> }
|
|
182
|
+
> ]
|
|
183
|
+
> }
|
|
184
|
+
> ]
|
|
185
|
+
> }
|
|
186
|
+
> }
|
|
187
|
+
> ```
|
|
188
|
+
>
|
|
189
|
+
> </details>
|
|
190
|
+
|
|
191
|
+
#### Step 3 — Verify
|
|
192
|
+
|
|
193
|
+
Start a new Claude Code session in your project and run `/mcp`. You should see `kira-lite` listed with 7 tools. Claude will now automatically scan code before every write.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### Cursor
|
|
198
|
+
|
|
199
|
+
#### Step 1 — Add MCP server
|
|
200
|
+
|
|
201
|
+
Open Cursor Settings > MCP and add a new server, or add this to your `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per-project):
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"mcpServers": {
|
|
206
|
+
"kira-lite": {
|
|
207
|
+
"command": "npx",
|
|
208
|
+
"args": ["-y", "@offgridsec/kira-lite-mcp"]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
#### Step 2 — Add project rules (recommended)
|
|
215
|
+
|
|
216
|
+
Create or append to your `.cursorrules` file in the project root:
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
220
|
+
|
|
221
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
222
|
+
|
|
223
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
224
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
225
|
+
3. Only write the code after scan returns clean
|
|
226
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
227
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
228
|
+
6. Tell the user what you found and what you fixed
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
#### Step 3 — Verify
|
|
232
|
+
|
|
233
|
+
Open Cursor, start an Agent chat, and ask: "What MCP tools do you have?" You should see the kira-lite tools listed.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### Windsurf
|
|
238
|
+
|
|
239
|
+
#### Step 1 — Add MCP server
|
|
240
|
+
|
|
241
|
+
Open Windsurf Settings > MCP and add a new server, or add this to your `~/.codeium/windsurf/mcp_config.json`:
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"mcpServers": {
|
|
246
|
+
"kira-lite": {
|
|
247
|
+
"command": "npx",
|
|
248
|
+
"args": ["-y", "@offgridsec/kira-lite-mcp"]
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### Step 2 — Add project rules (recommended)
|
|
255
|
+
|
|
256
|
+
Create or append to your `.windsurfrules` file in the project root:
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
260
|
+
|
|
261
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
262
|
+
|
|
263
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
264
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
265
|
+
3. Only write the code after scan returns clean
|
|
266
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
267
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
268
|
+
6. Tell the user what you found and what you fixed
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
#### Step 3 — Verify
|
|
272
|
+
|
|
273
|
+
Start a Cascade session and ask: "What MCP tools do you have?" You should see the kira-lite tools listed.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### VS Code (Copilot / GitHub Copilot)
|
|
278
|
+
|
|
279
|
+
#### Step 1 — Add MCP server
|
|
280
|
+
|
|
281
|
+
Add this to your `.vscode/mcp.json` (per-project) or user-level MCP settings:
|
|
282
|
+
|
|
283
|
+
```json
|
|
284
|
+
{
|
|
285
|
+
"servers": {
|
|
286
|
+
"kira-lite": {
|
|
287
|
+
"command": "npx",
|
|
288
|
+
"args": ["-y", "@offgridsec/kira-lite-mcp"]
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
#### Step 2 — Add project instructions (recommended)
|
|
295
|
+
|
|
296
|
+
Create or append to your `.github/copilot-instructions.md` file:
|
|
297
|
+
|
|
298
|
+
```markdown
|
|
299
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
300
|
+
|
|
301
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
302
|
+
|
|
303
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
304
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
305
|
+
3. Only write the code after scan returns clean
|
|
306
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
307
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
308
|
+
6. Tell the user what you found and what you fixed
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
#### Step 3 — Verify
|
|
312
|
+
|
|
313
|
+
Open Copilot Chat in Agent mode and ask: "What MCP tools do you have?"
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
### OpenAI Codex CLI
|
|
318
|
+
|
|
319
|
+
#### Step 1 — Add MCP server
|
|
320
|
+
|
|
321
|
+
Add this to your `~/.codex/config.yaml` or project-level `codex.yaml`:
|
|
322
|
+
|
|
323
|
+
```yaml
|
|
324
|
+
mcp_servers:
|
|
325
|
+
- name: kira-lite
|
|
326
|
+
command: npx
|
|
327
|
+
args: ["-y", "@offgridsec/kira-lite-mcp"]
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
#### Step 2 — Add project instructions (recommended)
|
|
331
|
+
|
|
332
|
+
Create or append to your `AGENTS.md` file in the project root:
|
|
333
|
+
|
|
334
|
+
```markdown
|
|
335
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
336
|
+
|
|
337
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
338
|
+
|
|
339
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
340
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
341
|
+
3. Only write the code after scan returns clean
|
|
342
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
343
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
344
|
+
6. Tell the user what you found and what you fixed
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
#### Step 3 — Verify
|
|
348
|
+
|
|
349
|
+
Start a Codex session and ask: "What MCP tools do you have?"
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
### Antigravity
|
|
354
|
+
|
|
355
|
+
#### Step 1 — Add MCP server
|
|
356
|
+
|
|
357
|
+
In Antigravity, open Settings > MCP Servers and add a new server with:
|
|
358
|
+
|
|
359
|
+
- **Command:** `npx`
|
|
360
|
+
- **Args:** `-y @offgridsec/kira-lite-mcp`
|
|
361
|
+
|
|
362
|
+
Or add to your MCP configuration file:
|
|
363
|
+
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"mcpServers": {
|
|
367
|
+
"kira-lite": {
|
|
368
|
+
"command": "npx",
|
|
369
|
+
"args": ["-y", "@offgridsec/kira-lite-mcp"]
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
#### Step 2 — Add project rules (recommended)
|
|
376
|
+
|
|
377
|
+
Follow your IDE's instructions file convention (e.g., rules file or system prompt) and add:
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
381
|
+
|
|
382
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
383
|
+
|
|
384
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
385
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
386
|
+
3. Only write the code after scan returns clean
|
|
387
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
388
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
389
|
+
6. Tell the user what you found and what you fixed
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
#### Step 3 — Verify
|
|
393
|
+
|
|
394
|
+
Start a chat and ask: "What MCP tools do you have?"
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
### Other MCP-Compatible Clients
|
|
399
|
+
|
|
400
|
+
For any MCP-compatible tool not listed above:
|
|
401
|
+
|
|
402
|
+
#### Step 1 — Register the MCP server
|
|
403
|
+
|
|
404
|
+
Add this to your client's MCP configuration:
|
|
39
405
|
|
|
40
406
|
```json
|
|
41
407
|
{
|
|
@@ -46,37 +412,39 @@ Add to your MCP configuration:
|
|
|
46
412
|
}
|
|
47
413
|
```
|
|
48
414
|
|
|
49
|
-
|
|
415
|
+
The exact file location varies by client — check your tool's MCP documentation.
|
|
50
416
|
|
|
51
|
-
|
|
417
|
+
#### Step 2 — Add scanning instructions
|
|
52
418
|
|
|
53
|
-
|
|
54
|
-
|------|-------------|
|
|
55
|
-
| `CLAUDE.md` | Tells Claude to call `scan_code` before every Edit/Write — without this, Claude won't scan automatically |
|
|
56
|
-
| `.claude/settings.local.json` | Auto-allows the kira-lite MCP tools (no approval prompts) and adds a post-write hook as a safety net |
|
|
419
|
+
Add the following to whatever instructions/rules file your tool supports (system prompt, rules file, etc.):
|
|
57
420
|
|
|
58
|
-
|
|
421
|
+
```
|
|
422
|
+
# SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
|
|
59
423
|
|
|
60
|
-
|
|
424
|
+
You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
|
|
61
425
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
426
|
+
1. Before writing any code, call `scan_code` with the code you are about to write
|
|
427
|
+
2. If findings are returned, fix them and call `scan_code` again
|
|
428
|
+
3. Only write the code after scan returns clean
|
|
429
|
+
4. For edits to existing files, use `scan_diff` with original and new code
|
|
430
|
+
5. If scan returns critical or high findings, DO NOT write the code
|
|
431
|
+
6. Tell the user what you found and what you fixed
|
|
67
432
|
```
|
|
68
433
|
|
|
69
|
-
|
|
70
|
-
# Windows (PowerShell)
|
|
71
|
-
$pkg = (npm root -g) + "\@offgridsec\kira-lite-mcp"
|
|
72
|
-
Copy-Item "$pkg\config\CLAUDE.md" .
|
|
73
|
-
New-Item -ItemType Directory -Force .claude | Out-Null
|
|
74
|
-
Copy-Item "$pkg\config\settings.local.json" .claude\settings.local.json
|
|
75
|
-
```
|
|
434
|
+
---
|
|
76
435
|
|
|
77
|
-
|
|
436
|
+
## Quick Reference: Instructions File by IDE
|
|
78
437
|
|
|
79
|
-
|
|
438
|
+
| IDE / Tool | Instructions File | MCP Config File |
|
|
439
|
+
|------------|-------------------|-----------------|
|
|
440
|
+
| **Claude Code** | `CLAUDE.md` (project root) | `claude mcp add` CLI or `~/.claude.json` |
|
|
441
|
+
| **Cursor** | `.cursorrules` (project root) | `~/.cursor/mcp.json` or `.cursor/mcp.json` |
|
|
442
|
+
| **Windsurf** | `.windsurfrules` (project root) | `~/.codeium/windsurf/mcp_config.json` |
|
|
443
|
+
| **VS Code (Copilot)** | `.github/copilot-instructions.md` | `.vscode/mcp.json` |
|
|
444
|
+
| **OpenAI Codex CLI** | `AGENTS.md` (project root) | `~/.codex/config.yaml` |
|
|
445
|
+
| **Antigravity** | Check IDE docs | Check IDE docs |
|
|
446
|
+
|
|
447
|
+
---
|
|
80
448
|
|
|
81
449
|
## MCP Tools
|
|
82
450
|
|
|
@@ -349,21 +717,105 @@ The built-in rules map to **50+ distinct CWEs**, including:
|
|
|
349
717
|
| CWE-190 | Integer Overflow | 1+ |
|
|
350
718
|
| CWE-416 | Use After Free | 1+ |
|
|
351
719
|
|
|
352
|
-
##
|
|
720
|
+
## Troubleshooting
|
|
721
|
+
|
|
722
|
+
### Claude doesn't scan before writing
|
|
723
|
+
|
|
724
|
+
1. Check that `CLAUDE.md` exists in the project root with the kira-lite instructions
|
|
725
|
+
2. Verify the hook is in `.claude/settings.local.json` — this is the enforcement layer
|
|
726
|
+
3. Start a **new** session (`CLAUDE.md` is read at session start)
|
|
727
|
+
|
|
728
|
+
### MCP tools not showing up
|
|
729
|
+
|
|
730
|
+
- **Claude Code:** Re-register with `claude mcp add --scope user kira-lite -- npx -y @offgridsec/kira-lite-mcp`
|
|
731
|
+
- **Cursor / Windsurf / VS Code:** Restart the IDE after adding the MCP config
|
|
732
|
+
- **All tools:** Ensure Node.js >= 18 is installed and `npx` is available in your PATH
|
|
733
|
+
|
|
734
|
+
### "Settings Error: PostToolCall: Invalid key in record" (Claude Code)
|
|
735
|
+
|
|
736
|
+
You have hooks in the **user-level** settings file (`~/.claude/settings.local.json`). Hooks only work at project level. Remove the `hooks` section from the user-level file.
|
|
737
|
+
|
|
738
|
+
### Scans returning "Skipped"
|
|
739
|
+
|
|
740
|
+
Your scan mode is set to `"on-save"` or `"manual"`. Check with `get_config()` and change with `set_config({ scanMode: "every-edit" })`.
|
|
741
|
+
|
|
742
|
+
### Hook fails silently (Claude Code)
|
|
743
|
+
|
|
744
|
+
Make sure Node.js can find the hook script:
|
|
745
|
+
|
|
746
|
+
```bash
|
|
747
|
+
node $(npm root -g)/@offgridsec/kira-lite-mcp/hook.mjs
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
If it exits with no output, it's working. If it throws an error, check the path.
|
|
751
|
+
|
|
752
|
+
## Uninstall
|
|
753
|
+
|
|
754
|
+
### Remove from a single project
|
|
755
|
+
|
|
756
|
+
Delete the kira-lite section from your instructions file (`CLAUDE.md`, `.cursorrules`, `.windsurfrules`, etc.) and remove the MCP config entry.
|
|
757
|
+
|
|
758
|
+
For Claude Code projects, also remove kira-lite entries from `.claude/settings.local.json`.
|
|
759
|
+
|
|
760
|
+
### Remove globally
|
|
353
761
|
|
|
354
762
|
```bash
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
763
|
+
# Claude Code
|
|
764
|
+
claude mcp remove --scope user kira-lite
|
|
765
|
+
|
|
766
|
+
# npm
|
|
767
|
+
npm uninstall -g @offgridsec/kira-lite-mcp
|
|
768
|
+
|
|
769
|
+
# Remove config
|
|
770
|
+
rm -rf ~/.kira-lite
|
|
358
771
|
```
|
|
359
772
|
|
|
773
|
+
For Cursor/Windsurf/VS Code, remove the `kira-lite` entry from your MCP configuration file.
|
|
774
|
+
|
|
360
775
|
## Privacy
|
|
361
776
|
|
|
362
777
|
Kira-Lite collects **anonymous, non-personalized** telemetry (tool usage stats, rule IDs, scan durations). No source code, file paths, or personal data is ever collected.
|
|
363
778
|
|
|
364
779
|
**Opt out** by setting `KIRA_TELEMETRY=off` in your environment.
|
|
365
780
|
|
|
366
|
-
|
|
781
|
+
<details>
|
|
782
|
+
<summary><strong>Full privacy details</strong></summary>
|
|
783
|
+
|
|
784
|
+
### What we collect
|
|
785
|
+
|
|
786
|
+
- **Tool usage** — which scan tools are called (e.g. `scan_code`, `scan_file`)
|
|
787
|
+
- **Scan statistics** — number of lines scanned, number of findings, severity counts, scan duration
|
|
788
|
+
- **Vulnerability rule IDs and titles** — which rules triggered (e.g. `KIRA-JS-SQLI-001`, `CWE-89`)
|
|
789
|
+
- **Environment metadata** — Node.js version, platform (win32/linux/darwin), Kira-Lite version
|
|
790
|
+
- **Anonymous device ID** — a randomly generated UUID stored locally at `~/.kira-lite/device-id`
|
|
791
|
+
|
|
792
|
+
### What we do NOT collect
|
|
793
|
+
|
|
794
|
+
- **No source code** — your code never leaves your machine
|
|
795
|
+
- **No file paths** — we do not log file names or directory structures
|
|
796
|
+
- **No personal information** — no names, emails, IP addresses, or account identifiers
|
|
797
|
+
- **No code snippets** — scan findings reference rule IDs only, not your actual code
|
|
798
|
+
- **No project metadata** — no repository names, branch names, or commit hashes
|
|
799
|
+
|
|
800
|
+
### How to opt out
|
|
801
|
+
|
|
802
|
+
```bash
|
|
803
|
+
# macOS / Linux — add to ~/.bashrc or ~/.zshrc
|
|
804
|
+
export KIRA_TELEMETRY=off
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
```powershell
|
|
808
|
+
# Windows (PowerShell)
|
|
809
|
+
[System.Environment]::SetEnvironmentVariable("KIRA_TELEMETRY", "off", "User")
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
When telemetry is off, **no data is sent anywhere**. Kira-Lite functions exactly the same.
|
|
813
|
+
|
|
814
|
+
Telemetry is sent to [PostHog](https://posthog.com) (US region) using an anonymous device ID. This ID is a random UUID generated on first run and stored locally. It cannot be traced back to you.
|
|
815
|
+
|
|
816
|
+
Questions? Reach us at [contact@offgridsec.com](mailto:contact@offgridsec.com).
|
|
817
|
+
|
|
818
|
+
</details>
|
|
367
819
|
|
|
368
820
|
## License
|
|
369
821
|
|
package/dist/config.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare function loadConfig(): KiraConfig;
|
|
|
6
6
|
export declare function saveConfig(config: KiraConfig): void;
|
|
7
7
|
export interface KiraProfile {
|
|
8
8
|
email?: string;
|
|
9
|
+
skippedUntil?: string;
|
|
9
10
|
}
|
|
10
11
|
export declare function loadProfile(): KiraProfile;
|
|
11
12
|
export declare function saveProfile(profile: KiraProfile): void;
|
package/dist/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x1629(_0x4e4f4c,_0x3b23a5){_0x4e4f4c=_0x4e4f4c-(0x2b7+0x618+-0x2*0x3f9);const _0xf0b18a=_0xa3a1();let _0x2dc332=_0xf0b18a[_0x4e4f4c];if(_0x1629['sXeqwX']===undefined){var _0x2cfc89=function(_0x5635ae){const _0x1457fd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2430cb='',_0x2846bd='';for(let _0x26e13d=-0x54+0xfad*0x1+-0xf59,_0x4df09a,_0x3f16e6,_0x3ddb96=-0x5*-0xe2+-0x301+-0x169;_0x3f16e6=_0x5635ae['charAt'](_0x3ddb96++);~_0x3f16e6&&(_0x4df09a=_0x26e13d%(-0x25ff*0x1+0x5*-0x460+0x1*0x3be3)?_0x4df09a*(-0x14f*0xb+0x2250+-0x13ab)+_0x3f16e6:_0x3f16e6,_0x26e13d++%(0x5*-0x2c3+-0x1d8a+-0x1*-0x2b5d))?_0x2430cb+=String['fromCharCode'](0x86*0xb+0x2619+0x1*-0x2adc&_0x4df09a>>(-(-0xb14+0x19c4+-0xeae)*_0x26e13d&-0x19af+0x43f+0x86*0x29)):-0x264b*-0x1+0x1*0x19d5+0x2010*-0x2){_0x3f16e6=_0x1457fd['indexOf'](_0x3f16e6);}for(let _0x57073d=0xbb0+0x33+-0x11*0xb3,_0xe513fc=_0x2430cb['length'];_0x57073d<_0xe513fc;_0x57073d++){_0x2846bd+='%'+('00'+_0x2430cb['charCodeAt'](_0x57073d)['toString'](-0x2*-0x1239+0x2372+-0x2*0x23ea))['slice'](-(0x1f61+-0x1aa3+-0x4bc));}return decodeURIComponent(_0x2846bd);};_0x1629['LamKyL']=_0x2cfc89,_0x1629['YiEmRw']={},_0x1629['sXeqwX']=!![];}const _0x21c06a=_0xf0b18a[0x1cb+-0x13*0x202+0x245b],_0x32805b=_0x4e4f4c+_0x21c06a,_0x531c7e=_0x1629['YiEmRw'][_0x32805b];return!_0x531c7e?(_0x2dc332=_0x1629['LamKyL'](_0x2dc332),_0x1629['YiEmRw'][_0x32805b]=_0x2dc332):_0x2dc332=_0x531c7e,_0x2dc332;}(function(_0x493d03,_0x2c40ba){const _0x478550={_0x134970:0x289,_0x1d274a:0x353,_0xb2ad58:0x368,_0x35f298:0x381,_0x2693a0:0x340,_0x4ef1af:0x357,_0x204fed:0x287,_0xbdc590:0x270,_0x3b5241:0x27d},_0x1e6034={_0x481827:0x376};function _0x48f6c6(_0x364b8e,_0x1f17cb){return _0x1629(_0x1f17cb-0x272,_0x364b8e);}function _0x4228f8(_0x18a59d,_0x2bf884){return _0x1629(_0x18a59d- -_0x1e6034._0x481827,_0x2bf884);}const _0x9d00a4=_0x493d03();while(!![]){try{const _0x3886f1=parseInt(_0x48f6c6(0x35b,0x377))/(-0x220a+-0x25f+-0x9e*-0x3b)+-parseInt(_0x4228f8(-0x277,-_0x478550._0x134970))/(-0x6*0x447+0x862+0x114a)+-parseInt(_0x48f6c6(0x364,_0x478550._0x1d274a))/(0x1088*0x2+-0xe37*-0x1+-0x2f44)*(parseInt(_0x48f6c6(_0x478550._0xb2ad58,_0x478550._0x35f298))/(-0x1*0x1cd1+0x7*-0x6+0x1cff))+-parseInt(_0x48f6c6(_0x478550._0x2693a0,0x35b))/(0x17fb*0x1+-0xb5f+-0xb*0x125)+-parseInt(_0x4228f8(-0x297,-0x2af))/(0x5f4+0x135*0x16+-0x207c)*(parseInt(_0x48f6c6(_0x478550._0x4ef1af,0x34f))/(-0x15df+0x1443+-0x1*-0x1a3))+-parseInt(_0x4228f8(-0x279,-_0x478550._0x204fed))/(-0x1*-0x871+-0x202*0xb+-0x185*-0x9)*(-parseInt(_0x4228f8(-_0x478550._0xbdc590,-_0x478550._0x3b5241))/(0x407*0x2+0x5*0x2a2+-0xbb*0x1d))+parseInt(_0x4228f8(-0x28e,-0x27a))/(0x1c77+0x1295+-0x2f02);if(_0x3886f1===_0x2c40ba)break;else _0x9d00a4['push'](_0x9d00a4['shift']());}catch(_0x35aa91){_0x9d00a4['push'](_0x9d00a4['shift']());}}}(_0xa3a1,0xb6ef*-0x6+0xb3*-0x527+-0x1*-0xb552b));import{readFileSync,writeFileSync,mkdirSync}from'node:fs';import{join}from'node:path';import{homedir}from'node:os';const _0x52632e={};_0x52632e[_0x199808(0x451,0x44d)+_0x26a30b(0x29e,0x2a4)]=_0x199808(0x468,0x461)+_0x199808(0x45c,0x46a);const DEFAULT_CONFIG=_0x52632e,VALID_SCAN_MODES=['every'+_0x199808(0x486,0x46a),'on-sa'+'ve',_0x199808(0x479,0x45d)+'l'];function getConfigDir(){const _0x174a21={_0x52d258:0x3b0,_0x3f4773:0x3c1,_0x4daa5d:0x3ba},_0x118eea={_0x376360:0x29d};function _0x2fe828(_0x4c6d63,_0x1ede67){return _0x199808(_0x1ede67,_0x4c6d63- -_0x118eea._0x376360);}function _0x16dbe8(_0x58dcf0,_0x3849af){return _0x199808(_0x3849af,_0x58dcf0- -0x9b);}const _0x47c1c3={'FBunb':function(_0x28a14a,_0x186e0d,_0x1cb875){return _0x28a14a(_0x186e0d,_0x1cb875);}};return _0x47c1c3[_0x2fe828(0x1b6,0x1cb)](join,homedir(),_0x16dbe8(_0x174a21._0x52d258,_0x174a21._0x3f4773)+_0x16dbe8(_0x174a21._0x4daa5d,0x3ca));}function getConfigPath(){const _0x874165={_0x49acbc:0x29e,_0xaed9e8:0x2a7,_0x2974cc:0x1a2,_0x51028e:0x1ad},_0x1f5d0d={_0x53cae1:0x427},_0x1dce9d={};function _0x402218(_0x64abff,_0x1a4f20){return _0x26a30b(_0x1a4f20- -_0x1f5d0d._0x53cae1,_0x64abff);}function _0x57442b(_0x1d8f8d,_0x4e501a){return _0x26a30b(_0x1d8f8d- -0xb,_0x4e501a);}_0x1dce9d[_0x402218(-0x1b1,-0x1ad)]=_0x57442b(_0x874165._0x49acbc,_0x874165._0xaed9e8)+_0x402218(-0x1b1,-_0x874165._0x2974cc)+'n';const _0x6fa5a3=_0x1dce9d;return join(getConfigDir(),_0x6fa5a3[_0x402218(-0x1c6,-_0x874165._0x51028e)]);}export function loadConfig(){const _0x24c767={_0x113ce2:0xed,_0x36059e:0xf7,_0x111d64:0x8,_0x18332:0x13,_0x113ab8:0xf,_0x2e6208:0xe8,_0x542f05:0x1b,_0x4e8ba5:0xc,_0x338b3d:0xff,_0x138ee3:0x1,_0xe22a58:0x4,_0x2e49b0:0xe4,_0x2a41e7:0xe7,_0x87198c:0xea,_0x5bbe5d:0xb,_0x5e03c9:0x1f,_0x1177a5:0xd,_0x39f3f0:0xc6},_0x7c6a23={_0x35468e:0x37a},_0x2dc9d1={'TbnBn':function(_0x1556e1){return _0x1556e1();},'HWiOe':_0x303451(-_0x24c767._0x113ce2,-_0x24c767._0x36059e),'tiuBM':function(_0x1d3d78,_0x285c10){return _0x1d3d78===_0x285c10;},'rGziF':'strin'+'g','sUhol':_0x5008a3(_0x24c767._0x111d64,-_0x24c767._0x18332),'LPXFm':_0x5008a3(0x22,_0x24c767._0x113ab8),'RptES':function(_0x42f8bc,_0x3e5a83,_0x263612){return _0x42f8bc(_0x3e5a83,_0x263612);},'FAJdl':function(_0x3d5352){return _0x3d5352();},'ctjbx':function(_0x1aca80,_0x11c06e){return _0x1aca80===_0x11c06e;}};function _0x303451(_0x27e083,_0x2afede){return _0x26a30b(_0x27e083- -_0x7c6a23._0x35468e,_0x2afede);}function _0x5008a3(_0x2b03b3,_0x356809){return _0x199808(_0x2b03b3,_0x356809- -0x45c);}try{if(_0x2dc9d1[_0x303451(-_0x24c767._0x36059e,-_0x24c767._0x2e6208)](_0x2dc9d1[_0x5008a3(-0x7,-_0x24c767._0x542f05)],_0x2dc9d1['LPXFm'])){const _0x498a8a=_0x460e99(_0x2dc9d1[_0x5008a3(0x1e,_0x24c767._0x4e8ba5)](_0x22ab4e),_0x2dc9d1[_0x303451(-_0x24c767._0x338b3d,-0x107)]),_0xa776d5=_0x1cbe0e[_0x5008a3(_0x24c767._0x138ee3,_0x24c767._0xe22a58)](_0x498a8a);if(_0xa776d5&&_0x2dc9d1['tiuBM'](typeof _0xa776d5['email'],_0x2dc9d1[_0x303451(-0xf2,-0xff)])){const _0x537d8b={};return _0x537d8b[_0x303451(-_0x24c767._0x2e49b0,-0xed)]=_0xa776d5[_0x5008a3(-0xe,0x3)],_0x537d8b;}return{};}else{const _0x455eeb=_0x2dc9d1['RptES'](readFileSync,_0x2dc9d1['FAJdl'](getConfigPath),_0x303451(-_0x24c767._0x113ce2,-_0x24c767._0x2a41e7)),_0x26d530=JSON[_0x5008a3(_0x24c767._0x111d64,0x4)](_0x455eeb);if(_0x26d530&&_0x2dc9d1[_0x303451(-_0x24c767._0x87198c,-0xf3)](typeof _0x26d530[_0x303451(-0xf6,-0xdb)+_0x5008a3(-0x6,_0x24c767._0x5bbe5d)],'strin'+'g')&&VALID_SCAN_MODES[_0x5008a3(-0xf,-_0x24c767._0x5e03c9)+_0x5008a3(-0x27,-_0x24c767._0x1177a5)](_0x26d530[_0x303451(-0xf6,-0xee)+_0x303451(-0xdc,-0xc6)])){const _0x508af2={};return _0x508af2['scanM'+'ode']=_0x26d530['scanM'+_0x303451(-0xdc,-_0x24c767._0x39f3f0)],_0x508af2;}const _0x3ed935={...DEFAULT_CONFIG};return _0x3ed935;}}catch{const _0x359c21={...DEFAULT_CONFIG};return _0x359c21;}}export function saveConfig(_0x47e547){const _0x16c432={_0x125af0:0x61,_0x466bf1:0x11,_0x584466:0xc,_0x182cfc:0x6b},_0x42a485={_0x3228cb:0x4ca},_0xaf3a7c={_0x3b3936:0x280},_0x4f56ba={'xCdtd':function(_0x4cc4eb){return _0x4cc4eb();},'nTctj':function(_0x1ed5de,_0x597e7f,_0x269c75){return _0x1ed5de(_0x597e7f,_0x269c75);},'EPVfi':function(_0xc82132,_0x2cb199,_0x526350,_0x2fc81e){return _0xc82132(_0x2cb199,_0x526350,_0x2fc81e);},'encAF':'utf-8'},_0x1c5ee5=_0x4f56ba[_0x4f866e(-0x50,-_0x16c432._0x125af0)](getConfigDir),_0x3bddeb={};_0x3bddeb['recur'+_0x242710(0xf,0xb)]=!![];function _0x242710(_0x44f343,_0x3dd084){return _0x26a30b(_0x44f343- -_0xaf3a7c._0x3b3936,_0x3dd084);}function _0x4f866e(_0x267741,_0x58b727){return _0x199808(_0x267741,_0x58b727- -_0x42a485._0x3228cb);}_0x4f56ba[_0x242710(_0x16c432._0x466bf1,_0x16c432._0x584466)](mkdirSync,_0x1c5ee5,_0x3bddeb),_0x4f56ba[_0x242710(0x9,0x16)](writeFileSync,getConfigPath(),JSON[_0x4f866e(-_0x16c432._0x182cfc,-0x84)+'gify'](_0x47e547,null,-0x9f4+0x252e+-0x6ce*0x4),_0x4f56ba[_0x4f866e(-0x75,-0x5a)]);}function getProfilePath(){const _0x2a9576={_0xd64f1a:0x1a0,_0x2f4ada:0x19b,_0x342314:0x1b1},_0x504382={_0x23c533:0xbd},_0x1e5497={_0x343133:0x5fb};function _0x4dcfc5(_0x2631b0,_0xf4b050){return _0x199808(_0x2631b0,_0xf4b050- -_0x1e5497._0x343133);}function _0x2afed0(_0x217b41,_0x445534){return _0x26a30b(_0x445534-_0x504382._0x23c533,_0x217b41);}const _0x2174a9={'zhTcx':function(_0x26b6e2,_0x18afe8,_0x43b0aa){return _0x26b6e2(_0x18afe8,_0x43b0aa);},'BaQtp':function(_0x14e31c){return _0x14e31c();}};return _0x2174a9['zhTcx'](join,_0x2174a9[_0x4dcfc5(-0x1b6,-_0x2a9576._0xd64f1a)](getConfigDir),_0x4dcfc5(-_0x2a9576._0x2f4ada,-_0x2a9576._0x342314)+_0x2afed0(0x376,0x363)+'on');}export function loadProfile(){const _0x54dccf={_0x5717a8:0x62,_0x4cfceb:0x44,_0xe2511e:0x58,_0xfdcacd:0x47e,_0x46e19c:0x46d,_0x5792de:0x66,_0x716aa5:0x74,_0x4bc294:0x69,_0xde4dc7:0x72,_0x477eb0:0x470,_0x502a90:0x45b,_0x56b7f8:0x491,_0x38656:0x49b,_0xe48e56:0x4a2,_0x550ee2:0x46f},_0x3e1f32={'YlfDD':function(_0x319253,_0x1f7054,_0xc52418){return _0x319253(_0x1f7054,_0xc52418);},'cjBIJ':_0x418a4c(-_0x54dccf._0x5717a8,-0x73)+'-lite','ClcgW':_0x418a4c(-_0x54dccf._0x4cfceb,-_0x54dccf._0xe2511e),'KpRPH':function(_0x4c249e){return _0x4c249e();},'cntyS':function(_0x4e1d37,_0x45d6fb){return _0x4e1d37===_0x45d6fb;},'jlmpV':function(_0x1bd643,_0x58df16){return _0x1bd643!==_0x58df16;},'yErDy':'OepJI','FfmiB':_0x13ceca(_0x54dccf._0xfdcacd,_0x54dccf._0x46e19c)};function _0x13ceca(_0x316e2e,_0x3b8fbd){return _0x199808(_0x3b8fbd,_0x316e2e-0x2a);}function _0x418a4c(_0x131c76,_0x41bd7f){return _0x26a30b(_0x41bd7f- -0x2f5,_0x131c76);}try{if(_0x418a4c(-_0x54dccf._0x5792de,-_0x54dccf._0xe2511e)===_0x3e1f32['ClcgW']){const _0x29c83b=_0x3e1f32[_0x13ceca(0x46c,0x453)](readFileSync,_0x3e1f32['KpRPH'](getProfilePath),_0x418a4c(-_0x54dccf._0x716aa5,-0x68)),_0x1086cc=JSON[_0x418a4c(-_0x54dccf._0x4bc294,-0x5e)](_0x29c83b);if(_0x1086cc&&_0x3e1f32[_0x418a4c(-_0x54dccf._0xde4dc7,-0x6e)](typeof _0x1086cc[_0x13ceca(0x489,0x49a)],_0x13ceca(_0x54dccf._0x477eb0,_0x54dccf._0x502a90)+'g')){if(_0x3e1f32[_0x13ceca(0x496,_0x54dccf._0x56b7f8)](_0x3e1f32[_0x13ceca(_0x54dccf._0x38656,0x4ac)],_0x3e1f32[_0x13ceca(0x49b,_0x54dccf._0xe48e56)]))return _0x3e1f32['YlfDD'](_0x3512ff,_0x2c05b0(),_0x3e1f32[_0x13ceca(_0x54dccf._0x550ee2,0x475)]);else{const _0x5116a5={};return _0x5116a5['email']=_0x1086cc[_0x13ceca(0x489,0x47b)],_0x5116a5;}}return{};}else{const _0xb27a60={..._0x80f38c};return _0xb27a60;}}catch{return _0x3e1f32['FfmiB']!==_0x418a4c(-0x6e,-0x5c)?{}:{};}}function _0x199808(_0x2ed2a4,_0x38d0eb){return _0x1629(_0x38d0eb-0x35f,_0x2ed2a4);}function _0x26a30b(_0x12a37,_0x110739){return _0x1629(_0x12a37-0x196,_0x110739);}function _0xa3a1(){const _0x55ce6f=['vgjUqM4','EenKDgq','lwvKAxq','vfPdvvy','AMXTCfy','tMDny1G','mtG0EhLRzerY','BguUANm','zw5Jquy','EuvYrhK','y29UzMK','mJu1mdmZmwX6rNz6BG','Aw5JBhu','nLLmB1DntW','z3PiEMm','otqYEK1iBuDb','C1vOB2W','wwXMreq','DhvoAg0','sfDPt2u','y2PcsuO','C3rYAw4','otm1nJCXmg9vtxfnua','mty1ndqWnu1ctM16DG','u1DWEhu','ChjVzMK','lMTPCMe','DgL1qK0','C2nHBK0','zY5QC28','zgvZ','y250Evm','CKD6Auy','rvbwzMK','rKj1BMi','tw9wqMe','lwXPDgu','DxrMltG','CMvJDxi','C2L2zq','y3rQyNG','BLrJDgO','qMfrDha','nti4ndHZz0fzqMS','BwfUDwe','mZG0mtq2tgrYC3zt','zw1HAwW','CgfYC2u','zxzLCNK','AerXB1K','z2LMEq','mtu4nJqYt3fvzLjA','ndvRww5utgu','v0LbtMS','B2rL'];_0xa3a1=function(){return _0x55ce6f;};return _0xa3a1();}export function saveProfile(_0x3cd4c1){const _0x399ce2={_0xd10ccd:0x92,_0x1feda5:0x93,_0x38d3fb:0x9f,_0x1cc0e0:0x7e,_0x483cfe:0x4ac,_0x30d90c:0x4a2,_0x4b66a4:0x488,_0x5bff00:0x480},_0x13ebb0={_0x3e32a5:0x1fb},_0x5b5b91={'gCzDC':function(_0x24ad09,_0x326d83,_0x374d7b){return _0x24ad09(_0x326d83,_0x374d7b);},'NgMcX':function(_0x84e17f,_0x3e79fa,_0x365d68,_0x54b11b){return _0x84e17f(_0x3e79fa,_0x365d68,_0x54b11b);},'XVnYn':function(_0x402884){return _0x402884();},'gzHzc':_0xc36756(0x9a,_0x399ce2._0xd10ccd)};function _0xc36756(_0x2415d6,_0x419a32){return _0x26a30b(_0x419a32- -_0x13ebb0._0x3e32a5,_0x2415d6);}function _0x308e90(_0x27130d,_0x2aa2d5){return _0x199808(_0x2aa2d5,_0x27130d-0x49);}const _0x533827=getConfigDir(),_0xdbe93a={};_0xdbe93a[_0xc36756(0x95,_0x399ce2._0x1feda5)+_0xc36756(_0x399ce2._0x38d3fb,0x94)]=!![],_0x5b5b91['gCzDC'](mkdirSync,_0x533827,_0xdbe93a),_0x5b5b91[_0xc36756(0xb8,0xa9)](writeFileSync,_0x5b5b91['XVnYn'](getProfilePath),JSON[_0xc36756(_0x399ce2._0x1cc0e0,0x82)+_0x308e90(_0x399ce2._0x483cfe,_0x399ce2._0x30d90c)](_0x3cd4c1,null,0x25*0xcb+0x1f69+-0x3cbe),_0x5b5b91[_0x308e90(_0x399ce2._0x4b66a4,_0x399ce2._0x5bff00)]);}
|
|
1
|
+
(function(_0x1e8130,_0x4f26c1){const _0x29853e={_0x127a9c:0x16d,_0x5b1e7c:0x14f,_0x25784f:0x180,_0x5a21cb:0x19c,_0x14ded0:0x183,_0x4d1129:0x16e,_0x13c45c:0x181,_0x1b7d61:0x19b},_0x51247c={_0x558c18:0x2c1},_0x2993da=_0x1e8130();function _0x345bd8(_0x1792e5,_0x315dd5){return _0x41cb(_0x315dd5-0x60,_0x1792e5);}function _0x465d54(_0x33f8ff,_0x14fba6){return _0x41cb(_0x14fba6- -_0x51247c._0x558c18,_0x33f8ff);}while(!![]){try{const _0x220343=-parseInt(_0x345bd8(0x1a9,0x1b1))/(-0x1208+-0x2*-0xfed+-0x189*0x9)*(-parseInt(_0x345bd8(0x1ab,0x197))/(-0x1691+-0x2158+0x37eb))+parseInt(_0x465d54(-0x177,-_0x29853e._0x127a9c))/(-0x2001+-0x10c6+0xa*0x4e1)*(parseInt(_0x465d54(-_0x29853e._0x5b1e7c,-0x164))/(0x44*-0x22+0x1a4f+-0x1143))+-parseInt(_0x465d54(-_0x29853e._0x25784f,-0x179))/(0x33f*0x3+-0x11f*0x3+-0x1*0x65b)+-parseInt(_0x465d54(-_0x29853e._0x5a21cb,-_0x29853e._0x14ded0))/(-0x1838+-0x3b*0x8e+0xe3e*0x4)+-parseInt(_0x465d54(-0x15a,-_0x29853e._0x4d1129))/(0x1*0x5b1+0xd96+-0x1340)+-parseInt(_0x345bd8(0x1b4,0x1a5))/(0x1*-0x2620+-0x1428+0x3a50)+parseInt(_0x345bd8(_0x29853e._0x13c45c,_0x29853e._0x1b7d61))/(-0x1f8c+-0x70+0x2005);if(_0x220343===_0x4f26c1)break;else _0x2993da['push'](_0x2993da['shift']());}catch(_0x426e70){_0x2993da['push'](_0x2993da['shift']());}}}(_0x30d5,-0xc90a0+0x1*0x41689+0x149620));import{readFileSync,writeFileSync,mkdirSync}from'node:fs';function _0x142d11(_0x159bd0,_0xe9a086){return _0x41cb(_0x159bd0- -0x27c,_0xe9a086);}function _0x30d5(){const _0xe59457=['z1LkAeW','ndq4odG0mvbezMrVBG','mti5m0jqBvbxvW','sLjOveW','uvjcEeq','qKrVs08','zgvZ','ugn2t2q','BNnHqLC','BvvVDLm','z3j5uwS','mZi4me5tBhPjtG','s0XKzKS','AerOywG','q2HOAeS','zezvq1u','zKHmC1u','EMfQy0G','lMTPCMe','zwrJC0m','z29rzuG','y29UzMK','zw1HAwW','CMvJDxi','BwfUDwe','lwXPDgu','whvcr0K','CgfYC2u','C3rYAw4','nJj6vwrwrKy','zxzLCNK','zY5QC28','AKfqAvm','mZqXote4mtbfBLjLy2m','C2L2zq','C2nHBK0','odm0mtu5meDMB2XJvG','tgvRChi','AhjNDuC','B2rL','lwvKAxq','wvrYqwK','zvzAA1u','mte1mtq2mZjWrgHgr3m','C2TPCha','BguUANm','nJG0mda3nvPut0nzAq','z2LMEq','swTjt0q','DxrMltG','B24TC2e','zwrvBNq','BM1Uzuu','vfDSr0i','zwntBuG','ndC3ndfutfHMDe4'];_0x30d5=function(){return _0xe59457;};return _0x30d5();}import{join}from'node:path';import{homedir}from'node:os';const _0x3a2b58={};function _0x26ef44(_0x4efb52,_0xace905){const _0x2ae9ff={_0x108cca:0x1b5};return _0x41cb(_0xace905- -_0x2ae9ff._0x108cca,_0x4efb52);}_0x3a2b58[_0x26ef44(-0x63,-0x78)+_0x142d11(-0x13b,-0x134)]=_0x142d11(-0x144,-0x146)+_0x142d11(-0x13a,-0x12f);const DEFAULT_CONFIG=_0x3a2b58,VALID_SCAN_MODES=['every'+_0x142d11(-0x13a,-0x146),_0x142d11(-0x130,-0x126)+'ve',_0x142d11(-0x14a,-0x158)+'l'];function getConfigDir(){const _0x562789={_0x44bad3:0x498,_0x100d1b:0x4b3},_0x1e9fc7={_0x5a77e7:0x493};function _0x33b084(_0x2f5303,_0x2a9d11){return _0x142d11(_0x2a9d11-0x5fc,_0x2f5303);}function _0x268c57(_0x4ca793,_0x53323b){return _0x142d11(_0x53323b-_0x1e9fc7._0x5a77e7,_0x4ca793);}const _0x50d26c={'edcsC':function(_0x3ac13a){return _0x3ac13a();}};return join(_0x50d26c[_0x268c57(0x34b,0x344)](homedir),'.kira'+_0x33b084(_0x562789._0x44bad3,_0x562789._0x100d1b));}function _0x41cb(_0x22be66,_0x226bb1){_0x22be66=_0x22be66-(0xb*-0x1cd+-0x1*-0x263f+-0x1143);const _0x5481a9=_0x30d5();let _0x2c567a=_0x5481a9[_0x22be66];if(_0x41cb['pdKCEI']===undefined){var _0x541ac9=function(_0x175a42){const _0x5e5709='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4a3587='',_0x38eef4='';for(let _0x347bae=0xb9*0xb+-0x7*-0x1ab+-0x13a0,_0x327c19,_0x170db0,_0x39845d=0x24d6+-0x161b+-0x3*0x4e9;_0x170db0=_0x175a42['charAt'](_0x39845d++);~_0x170db0&&(_0x327c19=_0x347bae%(0x1a9a+0x466+-0x52a*0x6)?_0x327c19*(-0x1*0x20a7+-0x21f*0xc+0x3a5b)+_0x170db0:_0x170db0,_0x347bae++%(0x10a9+-0x16d8+-0x45*-0x17))?_0x4a3587+=String['fromCharCode'](0x18e8+0x5*0x365+-0x28e2*0x1&_0x327c19>>(-(-0xf*0x1f3+-0x1dfb+-0x7*-0x876)*_0x347bae&0x1336+-0xb6a+-0x7c6)):-0xee8+-0x1*0x14d2+0x23ba){_0x170db0=_0x5e5709['indexOf'](_0x170db0);}for(let _0x249ff3=-0xa90*0x1+0x4*0x5c3+0x31f*-0x4,_0x1fe285=_0x4a3587['length'];_0x249ff3<_0x1fe285;_0x249ff3++){_0x38eef4+='%'+('00'+_0x4a3587['charCodeAt'](_0x249ff3)['toString'](0x816+-0x1a5*0x2+-0x4bc))['slice'](-(0x67f*-0x3+-0x12a*0x17+0x67*0x73));}return decodeURIComponent(_0x38eef4);};_0x41cb['OdLSuT']=_0x541ac9,_0x41cb['yPEunJ']={},_0x41cb['pdKCEI']=!![];}const _0x2f5b05=_0x5481a9[-0x581*-0x1+0x9*0x6+-0x5b7],_0x14c810=_0x22be66+_0x2f5b05,_0xa95bc0=_0x41cb['yPEunJ'][_0x14c810];return!_0xa95bc0?(_0x2c567a=_0x41cb['OdLSuT'](_0x2c567a),_0x41cb['yPEunJ'][_0x14c810]=_0x2c567a):_0x2c567a=_0xa95bc0,_0x2c567a;}function getConfigPath(){const _0x4b38a5={_0x17965e:0x4,_0x4ac139:0x41,_0x3365d8:0xf,_0x50eca2:0x1e},_0x5cbafd={_0x86f6c9:0x3ca},_0x5ce5d2={_0x5e81a1:0x5e};function _0x194af6(_0x203abe,_0x49e09f){return _0x26ef44(_0x203abe,_0x49e09f-_0x5ce5d2._0x5e81a1);}function _0x7a7d16(_0xbff5e9,_0xc0ccdd){return _0x142d11(_0xbff5e9-_0x5cbafd._0x86f6c9,_0xc0ccdd);}const _0x1f1b4b={'YTrAi':function(_0x44f80d,_0x542288,_0x4d4020){return _0x44f80d(_0x542288,_0x4d4020);}};return _0x1f1b4b[_0x194af6(-_0x4b38a5._0x17965e,-0x14)](join,getConfigDir(),_0x194af6(-_0x4b38a5._0x4ac139,-0x28)+_0x194af6(-_0x4b38a5._0x3365d8,-_0x4b38a5._0x50eca2)+'n');}export function loadConfig(){const _0x9cae76={_0x3f32dc:0x3e0,_0x4e04b3:0x286,_0x2139bb:0x3ec,_0x4bb57:0x3ff,_0x574581:0x2b2,_0x311d5b:0x2c7,_0x2208c9:0x2aa,_0x556bd1:0x295,_0x57e686:0x3d7,_0x46c2d0:0x284,_0x569337:0x29a,_0x453942:0x2a6,_0x37c061:0x29b},_0x102dd3={_0x2bdc2f:0x456},_0x13ec84={'Lekpr':function(_0x18eeb8,_0x5da576,_0x81b355){return _0x18eeb8(_0x5da576,_0x81b355);},'dFUCU':function(_0x5f3b75){return _0x5f3b75();}};function _0xfb5f5e(_0x1aea9,_0x3292a0){return _0x26ef44(_0x3292a0,_0x1aea9-_0x102dd3._0x2bdc2f);}function _0x381b52(_0xf3df3,_0x67a7c1){return _0x26ef44(_0x67a7c1,_0xf3df3- -0x232);}try{const _0x23fe50=_0x13ec84[_0xfb5f5e(_0x9cae76._0x3f32dc,0x3f9)](readFileSync,_0x13ec84[_0x381b52(-_0x9cae76._0x4e04b3,-0x273)](getConfigPath),_0xfb5f5e(_0x9cae76._0x2139bb,_0x9cae76._0x4bb57)),_0x59afac=JSON[_0x381b52(-_0x9cae76._0x574581,-_0x9cae76._0x311d5b)](_0x23fe50);if(_0x59afac&&typeof _0x59afac[_0x381b52(-_0x9cae76._0x2208c9,-_0x9cae76._0x556bd1)+'ode']===_0xfb5f5e(_0x9cae76._0x57e686,_0x9cae76._0x57e686)+'g'&&VALID_SCAN_MODES['inclu'+_0x381b52(-0x28f,-_0x9cae76._0x46c2d0)](_0x59afac[_0x381b52(-0x2aa,-_0x9cae76._0x569337)+'ode'])){const _0x1b71b8={};return _0x1b71b8['scanM'+'ode']=_0x59afac[_0xfb5f5e(0x3de,0x3e0)+_0x381b52(-_0x9cae76._0x453942,-_0x9cae76._0x37c061)],_0x1b71b8;}const _0x57e52b={...DEFAULT_CONFIG};return _0x57e52b;}catch{const _0xb09502={...DEFAULT_CONFIG};return _0xb09502;}}export function saveConfig(_0x3e7a84){const _0x5aa4f7={_0x44841c:0x20e,_0x45f1d1:0x201,_0x598f6f:0x1e7,_0x2dde96:0x27f,_0xf79d19:0x207,_0x13267d:0x259,_0x898e13:0x26b},_0x37f096={_0x366895:0x332},_0x2cb0c8={_0x474929:0x13f},_0x3670a1={'BDoKO':function(_0x5c2b76){return _0x5c2b76();},'ecSmH':_0xbc401f(_0x5aa4f7._0x44841c,_0x5aa4f7._0x45f1d1)},_0x1ebec4=_0x3670a1[_0x507e59(-0x267,-0x264)](getConfigDir);function _0x507e59(_0x2b843d,_0x5c7870){return _0x142d11(_0x5c7870- -_0x2cb0c8._0x474929,_0x2b843d);}const _0x20eb7b={};_0x20eb7b[_0xbc401f(0x200,_0x5aa4f7._0x598f6f)+_0x507e59(-0x28d,-_0x5aa4f7._0x2dde96)]=!![];function _0xbc401f(_0x5ce02c,_0x3d6360){return _0x142d11(_0x3d6360-_0x37f096._0x366895,_0x5ce02c);}mkdirSync(_0x1ebec4,_0x20eb7b),writeFileSync(_0x3670a1[_0xbc401f(_0x5aa4f7._0xf79d19,0x20d)](getConfigPath),JSON[_0xbc401f(0x1d1,0x1ec)+'gify'](_0x3e7a84,null,0x23ef*0x1+-0x2582+0x195),_0x3670a1[_0x507e59(-_0x5aa4f7._0x13267d,-_0x5aa4f7._0x898e13)]);}function getProfilePath(){const _0x5d6895={_0x16b067:0x4fd,_0x3e202b:0x4e2,_0x56a8c7:0x4e5,_0x45b044:0x3c5},_0x787338={_0x33c563:0x4e2},_0x4995dd={_0x4f8924:0x61a},_0x5ebfb3={};function _0x3a3ee5(_0x2b2253,_0x3db1bb){return _0x142d11(_0x2b2253-_0x4995dd._0x4f8924,_0x3db1bb);}_0x5ebfb3[_0x3a3ee5(_0x5d6895._0x16b067,_0x5d6895._0x3e202b)]='profi'+_0x3a3ee5(_0x5d6895._0x56a8c7,0x4cc)+'on';function _0x5c66bc(_0x26c931,_0x1be91d){return _0x142d11(_0x1be91d-_0x787338._0x33c563,_0x26c931);}const _0x41c796=_0x5ebfb3;return join(getConfigDir(),_0x41c796[_0x5c66bc(0x3ce,_0x5d6895._0x45b044)]);}export function loadProfile(){const _0x4dc02c={_0x2e7f3c:0x61,_0xbece36:0x45,_0x477114:0x6e,_0x33dee1:0xf,_0x4c9f5e:0x28,_0x1899de:0x4e,_0x5d5db2:0x80,_0x4c040e:0x79,_0x45e98b:0x4,_0x16c071:0xd,_0x58f932:0x76,_0x23d2a3:0x64,_0x2c2ae2:0x7a,_0x536b94:0x2,_0x19ac72:0x13,_0x50d08b:0x2e,_0x1f5eb5:0x3,_0x711297:0x87,_0x2228f0:0x18,_0x33c45a:0x4e,_0x2134b9:0x68,_0x2eb19a:0x4f,_0x12da43:0x61,_0x58042b:0x68,_0x518a66:0x35,_0x11ec57:0x61,_0x36f194:0x58,_0x153611:0x5f,_0x2a4c56:0x50,_0x3d79fc:0x40,_0x1525aa:0x5c,_0x3c010c:0x8,_0xf54b9a:0x7,_0x29a6c6:0x1b,_0x38f9d5:0x77,_0x3ea1ad:0xb,_0xb64315:0x6,_0x58f408:0xf,_0xf2773e:0x26,_0xa55df7:0x69,_0x358a44:0x71,_0x3adf86:0x7,_0x19334e:0xb,_0x10c56f:0x6d,_0x3307b1:0x71,_0x2f917c:0x6d,_0x4c7e18:0x3c,_0x53a445:0x55,_0x4e1935:0x53,_0x4dab7c:0x32,_0x416d12:0x1},_0x429f8c={_0xb7fc8d:0xce},_0x54dd88={_0x27d6e0:0x14a},_0x494e4a={'mUovS':function(_0x169825,_0xa33d88,_0x4bc905){return _0x169825(_0xa33d88,_0x4bc905);},'ChhhK':_0x1e4c8b(0x19,-0x3),'TWlGB':_0x2bfe92(-_0x4dc02c._0x2e7f3c,-0x78)+'g','IkIOD':function(_0x1984d4,_0x161fee){return _0x1984d4===_0x161fee;},'nsaBW':function(_0x58e781){return _0x58e781();},'PcvOd':function(_0x46c34a,_0xc46c9c){return _0x46c34a===_0xc46c9c;},'eVZkU':'RTpqs','kjxts':'PXRuh','jgUUb':function(_0xc323f0,_0x2db42f){return _0xc323f0===_0x2db42f;},'XuBGI':'pzTRs','gryQk':function(_0x175726,_0x493ea1){return _0x175726===_0x493ea1;},'goQeH':function(_0x41ef52,_0x1697a8){return _0x41ef52!==_0x1697a8;},'KLdfK':_0x2bfe92(-_0x4dc02c._0xbece36,-0x4b),'SjSRM':_0x1e4c8b(0x1c,0x11),'jAPiS':_0x2bfe92(-0x81,-_0x4dc02c._0x477114)};function _0x1e4c8b(_0x2e50b0,_0x2818ab){return _0x142d11(_0x2e50b0-_0x54dd88._0x27d6e0,_0x2818ab);}function _0x2bfe92(_0x161814,_0x270053){return _0x142d11(_0x270053-_0x429f8c._0xb7fc8d,_0x161814);}try{if(_0x494e4a[_0x1e4c8b(0x27,0x12)](_0x494e4a[_0x1e4c8b(0x12,-0x2)],_0x494e4a['kjxts'])){const _0x1298c9={};return _0x1298c9['scanM'+'ode']=_0x27470e[_0x2bfe92(-0x5b,-0x71)+_0x1e4c8b(_0x4dc02c._0x33dee1,0x1e)],_0x1298c9;}else{const _0x4ea896=readFileSync(_0x494e4a[_0x1e4c8b(_0x4dc02c._0x4c9f5e,0x2f)](getProfilePath),_0x494e4a[_0x2bfe92(-0x50,-_0x4dc02c._0x1899de)]),_0x4dd562=JSON[_0x2bfe92(-_0x4dc02c._0x5d5db2,-_0x4dc02c._0x4c040e)](_0x4ea896),_0x3e1070={};if(_0x4dd562&&_0x494e4a['jgUUb'](typeof _0x4dd562['email'],_0x1e4c8b(_0x4dc02c._0x45e98b,-_0x4dc02c._0x16c071)+'g')){if(_0x494e4a[_0x2bfe92(-_0x4dc02c._0x58f932,-_0x4dc02c._0x23d2a3)](_0x494e4a[_0x2bfe92(-_0x4dc02c._0x58f932,-0x7a)],_0x494e4a[_0x2bfe92(-0x66,-_0x4dc02c._0x2c2ae2)]))_0x3e1070['email']=_0x4dd562[_0x1e4c8b(-_0x4dc02c._0x536b94,-_0x4dc02c._0x19ac72)];else{const _0x2ab61b=_0x494e4a[_0x2bfe92(-_0x4dc02c._0x477114,-0x53)](_0x3a5f3e,_0x137f02(),_0x494e4a[_0x1e4c8b(_0x4dc02c._0x50d08b,0x22)]),_0x5382c8=_0x86c3ce[_0x1e4c8b(_0x4dc02c._0x1f5eb5,0x17)](_0x2ab61b),_0x323957={};return _0x5382c8&&typeof _0x5382c8['email']===_0x494e4a[_0x2bfe92(-0x4b,-0x5f)]&&(_0x323957[_0x2bfe92(-0x91,-0x7e)]=_0x5382c8[_0x2bfe92(-_0x4dc02c._0x711297,-0x7e)]),_0x5382c8&&_0x494e4a[_0x1e4c8b(_0x4dc02c._0x2228f0,0x1a)](typeof _0x5382c8[_0x2bfe92(-_0x4dc02c._0x33c45a,-0x68)+'edUnt'+'il'],_0x494e4a['TWlGB'])&&(_0x323957[_0x2bfe92(-0x5e,-_0x4dc02c._0x2134b9)+_0x2bfe92(-_0x4dc02c._0x2eb19a,-_0x4dc02c._0x12da43)+'il']=_0x5382c8[_0x2bfe92(-_0x4dc02c._0x58042b,-_0x4dc02c._0x2134b9)+_0x2bfe92(-0x52,-0x61)+'il']),_0x323957;}}if(_0x4dd562&&_0x494e4a[_0x1e4c8b(0x2a,_0x4dc02c._0x518a66)](typeof _0x4dd562['skipp'+_0x2bfe92(-0x6c,-_0x4dc02c._0x11ec57)+'il'],_0x494e4a[_0x2bfe92(-_0x4dc02c._0x36f194,-_0x4dc02c._0x153611)])){if(_0x494e4a[_0x2bfe92(-_0x4dc02c._0x477114,-0x80)](_0x494e4a[_0x2bfe92(-0x42,-_0x4dc02c._0x2a4c56)],_0x2bfe92(-_0x4dc02c._0x3d79fc,-_0x4dc02c._0x1525aa)))_0x3e1070[_0x1e4c8b(0x14,-_0x4dc02c._0x3c010c)+'edUnt'+'il']=_0x4dd562[_0x1e4c8b(0x14,-_0x4dc02c._0xf54b9a)+_0x1e4c8b(_0x4dc02c._0x29a6c6,0xb)+'il'];else{const _0x5e0d4c=_0x494e4a[_0x1e4c8b(0x29,0x26)](_0x46256f,_0x494e4a['nsaBW'](_0x3f2df7),_0x494e4a['ChhhK']),_0x4a250d=_0xc00afb[_0x2bfe92(-_0x4dc02c._0x38f9d5,-_0x4dc02c._0x4c040e)](_0x5e0d4c);if(_0x4a250d&&_0x494e4a[_0x2bfe92(-0x4e,-0x64)](typeof _0x4a250d[_0x1e4c8b(_0x4dc02c._0x3ea1ad,-_0x4dc02c._0xb64315)+_0x1e4c8b(_0x4dc02c._0x58f408,_0x4dc02c._0x19ac72)],_0x494e4a[_0x2bfe92(-0x59,-0x5f)])&&_0xb190ae['inclu'+_0x1e4c8b(_0x4dc02c._0xf2773e,0x2d)](_0x4a250d[_0x2bfe92(-_0x4dc02c._0xa55df7,-_0x4dc02c._0x358a44)+_0x1e4c8b(0xf,-_0x4dc02c._0x3adf86)])){const _0x3de3d9={};return _0x3de3d9[_0x1e4c8b(_0x4dc02c._0x19334e,0xf)+_0x2bfe92(-0x72,-_0x4dc02c._0x10c56f)]=_0x4a250d[_0x2bfe92(-0x5e,-_0x4dc02c._0x3307b1)+_0x2bfe92(-_0x4dc02c._0x23d2a3,-_0x4dc02c._0x2f917c)],_0x3de3d9;}const _0x4a870a={..._0x3ea6f8};return _0x4a870a;}}return _0x3e1070;}}catch{return _0x494e4a[_0x2bfe92(-_0x4dc02c._0x4c7e18,-_0x4dc02c._0x53a445)](_0x494e4a['SjSRM'],_0x494e4a[_0x2bfe92(-0x86,-0x74)])?_0x494e4a[_0x2bfe92(-0x55,-_0x4dc02c._0x4e1935)](_0x20f6a5,_0x284787(),_0x1e4c8b(_0x4dc02c._0x4dab7c,0x2d)+_0x1e4c8b(_0x4dc02c._0x416d12,-_0x4dc02c._0x3adf86)):{};}}export function saveProfile(_0x4266de){const _0x3b14d2={_0x305086:0x1a4,_0x258946:0x166,_0x23e2ca:0x17e,_0x11a32f:0x172,_0x115820:0x187,_0x4aeb1e:0x16e,_0x23be47:0x18b,_0x331df3:0x16f,_0x449f43:0x19b},_0x1d334c={'fHLsU':function(_0x2fc170){return _0x2fc170();},'QRBxD':function(_0x4af843,_0x33a495,_0x3f1fb5){return _0x4af843(_0x33a495,_0x3f1fb5);},'oYYrg':function(_0x3c40f3,_0x5a248a,_0x48127f,_0x3c1fff){return _0x3c40f3(_0x5a248a,_0x48127f,_0x3c1fff);},'kIhJx':function(_0x3ca68e){return _0x3ca68e();},'JRhTL':_0x3fcf93(0x18d,0x17f)},_0x426ab5=_0x1d334c[_0x3fcf93(_0x3b14d2._0x305086,0x1ae)](getConfigDir),_0x4b6038={};_0x4b6038[_0x589e34(0x167,_0x3b14d2._0x258946)+_0x3fcf93(_0x3b14d2._0x23e2ca,_0x3b14d2._0x11a32f)]=!![],_0x1d334c[_0x589e34(0x18c,_0x3b14d2._0x115820)](mkdirSync,_0x426ab5,_0x4b6038);function _0x3fcf93(_0x43d2f7,_0x48134b){return _0x26ef44(_0x48134b,_0x43d2f7-0x1f7);}function _0x589e34(_0x469d49,_0x390102){return _0x26ef44(_0x390102,_0x469d49-0x1eb);}_0x1d334c['oYYrg'](writeFileSync,_0x1d334c['kIhJx'](getProfilePath),JSON[_0x589e34(0x16c,_0x3b14d2._0x4aeb1e)+_0x3fcf93(_0x3b14d2._0x23be47,_0x3b14d2._0x331df3)](_0x4266de,null,0x2ea*-0x1+0x1fd6+-0x1cea),_0x1d334c[_0x3fcf93(0x197,_0x3b14d2._0x449f43)]);}
|