@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 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
- ## Setup
31
+ ---
32
+
33
+ ## Setup by IDE / Tool
27
34
 
28
- ### 1. Register MCP Server (one-time, global)
35
+ Pick your IDE or tool below and follow the steps. Each section is self-contained.
29
36
 
30
- **Claude Code:**
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
- **Cursor / Windsurf / Other MCP Clients:**
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
- Add to your MCP configuration:
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
- ### 2. Per-Project Setup (Claude Code only)
415
+ The exact file location varies by client — check your tool's MCP documentation.
50
416
 
51
- After registering the MCP server, you also need to copy **two files** into each project where you want automatic scanning:
417
+ #### Step 2 Add scanning instructions
52
418
 
53
- | File | What it does |
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
- **Without these files**, the MCP tools are still available but Claude won't use them unless you ask manually.
421
+ ```
422
+ # SECURITY SCANNING — REQUIRED ON EVERY CODE CHANGE
59
423
 
60
- **New project (no existing CLAUDE.md or settings):**
424
+ You MUST call the `scan_code` MCP tool before EVERY code change. No exceptions.
61
425
 
62
- ```bash
63
- # macOS / Linux
64
- cp $(npm root -g)/@offgridsec/kira-lite-mcp/config/CLAUDE.md .
65
- mkdir -p .claude
66
- cp $(npm root -g)/@offgridsec/kira-lite-mcp/config/settings.local.json .claude/settings.local.json
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
- ```powershell
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
- **Already have a CLAUDE.md or settings?** See [INSTALL.md](INSTALL.md) for merge instructions (Scenarios B, C, D).
436
+ ## Quick Reference: Instructions File by IDE
78
437
 
79
- > **Cursor / Windsurf users:** You do **not** need to copy these files. Those editors handle MCP tool instructions differently.
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
- ## Development
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
- npm install
356
- npm run build
357
- npm run dev # watch mode
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
- See [PRIVACY.md](PRIVACY.md) for full details.
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)]);}