@offgridsec/kira-lite-mcp 0.1.2 → 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/PRIVACY.md +9 -1
- package/README.md +486 -34
- package/dist/config.d.ts +6 -0
- package/dist/config.js +1 -1
- package/dist/core/engines/kira-core.js +1 -1
- package/dist/core/engines/osv.js +1 -1
- package/dist/core/engines/runner.js +1 -1
- package/dist/core/scanner.js +1 -1
- package/dist/core/utils.js +1 -1
- package/dist/index.js +1 -1
- package/dist/rules/c-cpp.js +1 -1
- package/dist/rules/cicd.js +1 -1
- package/dist/rules/csharp.js +1 -1
- package/dist/rules/docker.js +1 -1
- package/dist/rules/go.js +1 -1
- package/dist/rules/index.js +1 -1
- 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.d.ts +1 -0
- 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/PRIVACY.md
CHANGED
|
@@ -12,10 +12,18 @@ Kira-Lite collects **anonymous, non-personalized** usage telemetry to help us im
|
|
|
12
12
|
|
|
13
13
|
- **Tool usage** — which scan tools are called (e.g. `scan_code`, `scan_file`)
|
|
14
14
|
- **Scan statistics** — number of lines scanned, number of findings, severity counts, scan duration
|
|
15
|
-
- **Vulnerability rule IDs** — which rules triggered (e.g. `KIRA-JS-SQLI-001`, `CWE-89`)
|
|
15
|
+
- **Vulnerability rule IDs and titles** — which rules triggered (e.g. `KIRA-JS-SQLI-001`, `CWE-89`) and their descriptive titles (e.g. "SQL Injection")
|
|
16
16
|
- **Environment metadata** — Node.js version, platform (win32/linux/darwin), Kira-Lite version
|
|
17
17
|
- **Anonymous device ID** — a randomly generated UUID stored locally at `~/.kira-lite/device-id`
|
|
18
18
|
|
|
19
|
+
## Opt-in data
|
|
20
|
+
|
|
21
|
+
If you choose to register your email using the `register` tool:
|
|
22
|
+
|
|
23
|
+
- **Email address** — stored locally at `~/.kira-lite/profile.json` and sent to PostHog to associate with your anonymous device ID
|
|
24
|
+
- Your email is used **only** to send Kira security updates and new vulnerability coverage alerts
|
|
25
|
+
- You can unsubscribe anytime by deleting `~/.kira-lite/profile.json`
|
|
26
|
+
|
|
19
27
|
## What we do NOT collect
|
|
20
28
|
|
|
21
29
|
- **No source code** — your code never leaves your machine
|
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
|
@@ -4,3 +4,9 @@ export interface KiraConfig {
|
|
|
4
4
|
}
|
|
5
5
|
export declare function loadConfig(): KiraConfig;
|
|
6
6
|
export declare function saveConfig(config: KiraConfig): void;
|
|
7
|
+
export interface KiraProfile {
|
|
8
|
+
email?: string;
|
|
9
|
+
skippedUntil?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadProfile(): KiraProfile;
|
|
12
|
+
export declare function saveProfile(profile: KiraProfile): void;
|
package/dist/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x9439a(_0x2b990b,_0x2cdcf0){return _0x48bd(_0x2b990b- -0x292,_0x2cdcf0);}(function(_0x5dc2fa,_0x2862e5){const _0xf9287f={_0xe22d6e:0x19b,_0x3869cf:0x1a2,_0x315ada:0x196,_0x500200:0x1a1,_0x56fd98:0x180,_0xc2cf4c:0x18c,_0x4fc907:0x18a,_0x50b4ff:0x18e,_0x2c7ecd:0x1da,_0x1d9398:0x1dd,_0x4bfb03:0x1d0,_0x1a5f9d:0x1ed,_0x509edf:0x1e4,_0x1f0ab9:0x1ca},_0x5ab6bf={_0x4fec6f:0x67};function _0x1c6af6(_0x5ed2b6,_0x54d76a){return _0x48bd(_0x54d76a- -0xe,_0x5ed2b6);}function _0x1a6d2b(_0x3aed2b,_0x560551){return _0x48bd(_0x3aed2b- -_0x5ab6bf._0x4fec6f,_0x560551);}const _0x3a9a7d=_0x5dc2fa();while(!![]){try{const _0x47e799=parseInt(_0x1a6d2b(_0xf9287f._0xe22d6e,_0xf9287f._0x3869cf))/(0x1*-0x1fb2+-0x103c*-0x1+-0x1*-0xf77)*(parseInt(_0x1a6d2b(_0xf9287f._0x315ada,_0xf9287f._0x500200))/(0x1874+-0x1c6*0x1+-0x16ac))+parseInt(_0x1a6d2b(0x193,_0xf9287f._0x56fd98))/(-0xc3e+0xb*0x388+-0x1a97)*(parseInt(_0x1a6d2b(_0xf9287f._0xc2cf4c,0x188))/(-0x1*0x175e+0x418*-0x6+-0x143*-0x26))+-parseInt(_0x1a6d2b(0x194,_0xf9287f._0x4fc907))/(0x64*-0xf+-0x21f*-0xa+-0xf55)*(-parseInt(_0x1a6d2b(_0xf9287f._0x50b4ff,0x1a1))/(0x1a07+-0xd*0x296+0x79d))+-parseInt(_0x1a6d2b(0x17b,0x16d))/(0x22dd+-0x176c+-0x3*0x3ce)+parseInt(_0x1c6af6(0x1cf,_0xf9287f._0x2c7ecd))/(-0x9*0xd4+-0x75b+0x1d*0x83)*(parseInt(_0x1c6af6(_0xf9287f._0x1d9398,_0xf9287f._0x4bfb03))/(0xf7f*-0x2+0x108f+0xe78))+parseInt(_0x1c6af6(_0xf9287f._0x1a5f9d,_0xf9287f._0x509edf))/(0x22c*0x10+-0x84*0x6+0xfcf*-0x2)+-parseInt(_0x1c6af6(_0xf9287f._0x1f0ab9,0x1db))/(-0x1e6d*-0x1+-0x115+0x1d4d*-0x1);if(_0x47e799===_0x2862e5)break;else _0x3a9a7d['push'](_0x3a9a7d['shift']());}catch(_0x245e55){_0x3a9a7d['push'](_0x3a9a7d['shift']());}}}(_0x2d37,-0x30b1d*0x1+-0x11cbf+0x62776));import{readFileSync,writeFileSync,mkdirSync}from'node:fs';import{join}from'node:path';import{homedir}from'node:os';const _0x522055={};_0x522055['scanM'+_0x43db04(0x1aa,0x1a1)]=_0x43db04(0x1c6,0x1d7)+_0x9439a(-0x9e,-0xa5);const DEFAULT_CONFIG=_0x522055,VALID_SCAN_MODES=[_0x43db04(0x1c6,0x1cb)+_0x43db04(0x1b9,0x1ae),_0x43db04(0x1b6,0x1b5)+'ve',_0x43db04(0x1b3,0x1af)+'l'];function getConfigDir(){const _0x12ae48={_0x1ffafa:0x156,_0x4ff4e9:0x145,_0x571386:0x159,_0x186fc3:0x15b},_0x412d14={_0x15de67:0x52};function _0x219faf(_0x31b511,_0x2effe2){return _0x43db04(_0x31b511- -_0x412d14._0x15de67,_0x2effe2);}function _0x6b6079(_0x2e5810,_0x5d1405){return _0x9439a(_0x2e5810-0x169,_0x5d1405);}const _0x11bac3={'rZWfH':function(_0x588608,_0x9b751a,_0x57015e){return _0x588608(_0x9b751a,_0x57015e);},'YHSsJ':function(_0xb91f37){return _0xb91f37();}};return _0x11bac3['rZWfH'](join,_0x11bac3[_0x219faf(_0x12ae48._0x1ffafa,_0x12ae48._0x4ff4e9)](homedir),_0x219faf(_0x12ae48._0x571386,_0x12ae48._0x186fc3)+_0x219faf(0x154,_0x12ae48._0x186fc3));}function _0x2d37(){const _0x368205=['C0DwCNm','B05lz2e','AvPZshO','nZiYndGXD3norxf0','ndb4uKPguwG','DxrMltG','mte2mte0s1LwshvS','qLP2weG','EwHgyw8','zgvZ','zxzLCNK','muvOA3fNqG','C3rYAw4','wM5vrfy','mtHswePuzgO','t0XIv0S','CMvJDxi','lwXPDgu','mtG3oduYALDXDgzz','wuHtC0O','C2L2zq','B2rL','lMTPCMe','CgfYC2u','nty2mdy0ExzOqunQ','ntKYnZm4m25lwvjWta','yuHfBum','z1Ltugq','y29UzMK','C2jPCuS','BwfUDwe','Du5PBLC','C2nHBK0','B24TC2e','nte5mZeWtMfmyKr1','nejmD0zsza','lwvKAxq','mtuZmJq2Ewjey1Pz','z2LMEq'];_0x2d37=function(){return _0x368205;};return _0x2d37();}function getConfigPath(){const _0x54658a={_0x4cbfd1:0x2a9};function _0x2c87ea(_0x170526,_0x44fdc4){return _0x9439a(_0x44fdc4-0x342,_0x170526);}const _0x259351={'PbTTM':function(_0xe50b38){return _0xe50b38();},'iZsHz':_0x199b3a(0x3ca,0x3c1)+'g.jso'+'n'};function _0x199b3a(_0x300b97,_0x493ab0){return _0x9439a(_0x493ab0-0x467,_0x300b97);}return join(_0x259351['PbTTM'](getConfigDir),_0x259351[_0x2c87ea(0x29e,_0x54658a._0x4cbfd1)]);}function _0x43db04(_0x3244f4,_0x501bcd){const _0x2e198a={_0x137243:0x3b};return _0x48bd(_0x3244f4- -_0x2e198a._0x137243,_0x501bcd);}function _0x48bd(_0x5f0072,_0x21db3c){_0x5f0072=_0x5f0072-(-0x2634+-0x1*-0x195e+0xeb2);const _0x1fc79f=_0x2d37();let _0x5e4592=_0x1fc79f[_0x5f0072];if(_0x48bd['MnAUSf']===undefined){var _0x585ae7=function(_0xaa3abe){const _0x5d7e7c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e0340='',_0x52289b='';for(let _0x22a061=-0x937+-0x16f6*-0x1+0x1*-0xdbf,_0x4131b9,_0x53a6f9,_0x11a02d=-0x2*0x4cc+0xc10+-0x8*0x4f;_0x53a6f9=_0xaa3abe['charAt'](_0x11a02d++);~_0x53a6f9&&(_0x4131b9=_0x22a061%(0x38*0x17+-0x1ff*-0xe+-0x20f6)?_0x4131b9*(-0x4d2*0x3+0x20ec+-0x9*0x206)+_0x53a6f9:_0x53a6f9,_0x22a061++%(0x201d*-0x1+-0x1*-0x17da+0x847))?_0x3e0340+=String['fromCharCode'](-0x14b2+-0x2*-0x11d8+-0xdff&_0x4131b9>>(-(-0x2eb*0xd+-0x229*-0x4+-0x241*-0xd)*_0x22a061&-0x973+0x18c2+-0xf49)):-0x1ebb*-0x1+-0x1*0x25a9+0x6ee){_0x53a6f9=_0x5d7e7c['indexOf'](_0x53a6f9);}for(let _0x312ba6=-0xa*0x62+0x1*-0x22df+0x26b3,_0x1c1bd2=_0x3e0340['length'];_0x312ba6<_0x1c1bd2;_0x312ba6++){_0x52289b+='%'+('00'+_0x3e0340['charCodeAt'](_0x312ba6)['toString'](-0x32b*0xc+-0x7*-0x199+0x1ae5))['slice'](-(0x4*-0x68f+-0x1*0xe8b+0x1*0x28c9));}return decodeURIComponent(_0x52289b);};_0x48bd['jRAdOv']=_0x585ae7,_0x48bd['zADyZI']={},_0x48bd['MnAUSf']=!![];}const _0x9d8213=_0x1fc79f[-0x2*0xe09+-0x276+0x1e88],_0x3de76d=_0x5f0072+_0x9d8213,_0x3b52d6=_0x48bd['zADyZI'][_0x3de76d];return!_0x3b52d6?(_0x5e4592=_0x48bd['jRAdOv'](_0x5e4592),_0x48bd['zADyZI'][_0x3de76d]=_0x5e4592):_0x5e4592=_0x3b52d6,_0x5e4592;}export function loadConfig(){const _0xd5d52d={_0x437326:0x159,_0x3c00ea:0x15f,_0x29f51c:0x16c,_0x2f6aec:0x15c,_0x5ff036:0x156,_0x479a0a:0x161,_0x2cce19:0x16a,_0x508bb9:0x19f,_0x226757:0x1ba,_0x7c9eb6:0x15e,_0x9405c:0x1ab,_0x1245c4:0x19d,_0x33f70:0x165,_0x419fc0:0x160,_0x1df69a:0x147,_0x57c12b:0x1ae,_0x1752cb:0x1b8,_0x1e6d07:0x1bf,_0x53ad9a:0x1b0,_0x2a2f4f:0x1ae,_0x4475a2:0x1a1},_0x796aa8={_0x1a6bd8:0x252},_0x16d6c1={_0x5cb4cc:0x1f9};function _0x49ea72(_0x2585f4,_0x3a0e2b){return _0x9439a(_0x2585f4-_0x16d6c1._0x5cb4cc,_0x3a0e2b);}const _0x3db753={'yhFao':function(_0x372fd2,_0x16ff1a,_0x4e39e5){return _0x372fd2(_0x16ff1a,_0x4e39e5);},'sGVrs':function(_0x534f73,_0x882dbf,_0x512074,_0x243056){return _0x534f73(_0x882dbf,_0x512074,_0x243056);},'BZvXH':function(_0x338b45){return _0x338b45();},'oNKga':_0x49ea72(0x163,0x177),'uNinW':function(_0x4321f7,_0x5a7879){return _0x4321f7===_0x5a7879;},'OLbWK':_0x1e4b59(0x19c,0x192)+'g','gYSPd':function(_0x1f3092,_0x20e60a){return _0x1f3092===_0x20e60a;},'GepUB':_0x49ea72(0x154,_0xd5d52d._0x437326)};function _0x1e4b59(_0x314b1d,_0x390471){return _0x9439a(_0x314b1d-_0x796aa8._0x1a6bd8,_0x390471);}try{const _0x5daa67=_0x3db753['yhFao'](readFileSync,getConfigPath(),_0x3db753[_0x49ea72(_0xd5d52d._0x3c00ea,_0xd5d52d._0x29f51c)]),_0x7b05c6=JSON[_0x49ea72(0x14e,_0xd5d52d._0x2f6aec)](_0x5daa67);if(_0x7b05c6&&_0x3db753[_0x49ea72(_0xd5d52d._0x5ff036,_0xd5d52d._0x479a0a)](typeof _0x7b05c6[_0x49ea72(0x157,_0xd5d52d._0x2cce19)+_0x1e4b59(0x1a5,0x1a6)],_0x3db753[_0x1e4b59(_0xd5d52d._0x508bb9,0x19c)])&&VALID_SCAN_MODES['inclu'+_0x1e4b59(0x1c0,_0xd5d52d._0x226757)](_0x7b05c6['scanM'+_0x49ea72(0x14c,_0xd5d52d._0x7c9eb6)])){if(_0x3db753[_0x1e4b59(_0xd5d52d._0x9405c,_0xd5d52d._0x1245c4)](_0x49ea72(0x151,0x14c),_0x3db753['GepUB'])){const _0x2e0dbe=_0x1b99c2(),_0x54211e={};_0x54211e[_0x49ea72(0x147,0x139)+_0x49ea72(0x14b,0x146)]=!![],_0x3db753[_0x49ea72(0x166,0x154)](_0x556bf5,_0x2e0dbe,_0x54211e),_0x3db753[_0x49ea72(0x15e,0x16f)](_0xb6798,_0x3db753[_0x49ea72(_0xd5d52d._0x33f70,_0xd5d52d._0x419fc0)](_0x336b8c),_0x284536[_0x49ea72(0x143,_0xd5d52d._0x1df69a)+_0x1e4b59(0x1b6,_0xd5d52d._0x57c12b)](_0x1b504e,null,-0x3*0x1+-0x1b25*-0x1+-0x1b20),_0x3db753[_0x1e4b59(_0xd5d52d._0x1752cb,_0xd5d52d._0x1e6d07)]);}else{const _0x428120={};return _0x428120[_0x1e4b59(_0xd5d52d._0x53ad9a,_0xd5d52d._0x2a2f4f)+_0x1e4b59(0x1a5,_0xd5d52d._0x4475a2)]=_0x7b05c6[_0x49ea72(0x157,_0xd5d52d._0x3c00ea)+_0x49ea72(0x14c,0x157)],_0x428120;}}const _0x596c02={...DEFAULT_CONFIG};return _0x596c02;}catch{const _0x4fcc8d={...DEFAULT_CONFIG};return _0x4fcc8d;}}export function saveConfig(_0x312a52){const _0x151747={_0x5c4bf9:0x74,_0x54eddd:0x1fd,_0x634d95:0x20a,_0x3a3b2b:0x208},_0x3fde28={_0x2be062:0x127},_0x4a4023={_0x1d7c75:0x2a6},_0x44a598={'PvTPk':function(_0x156c5b,_0x455700,_0x23e03f){return _0x156c5b(_0x455700,_0x23e03f);},'ZnUDV':function(_0x45c28d){return _0x45c28d();}},_0x32a799=getConfigDir();function _0x460261(_0x4b1dc9,_0x2a6427){return _0x9439a(_0x2a6427-_0x4a4023._0x1d7c75,_0x4b1dc9);}const _0x2526d1={};function _0x1d3291(_0x34e7d7,_0x21d360){return _0x43db04(_0x34e7d7- -_0x3fde28._0x2be062,_0x21d360);}_0x2526d1[_0x460261(0x1ee,0x1f4)+'sive']=!![],_0x44a598['PvTPk'](mkdirSync,_0x32a799,_0x2526d1),writeFileSync(_0x44a598[_0x1d3291(0x7b,_0x151747._0x5c4bf9)](getConfigPath),JSON['strin'+_0x460261(_0x151747._0x54eddd,_0x151747._0x634d95)](_0x312a52,null,0x4b5+0x1a73+-0x1f26),_0x460261(_0x151747._0x3a3b2b,0x210));}
|
|
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)]);}
|